/* ===== AUTH PAGES STYLES ===== */ /* Base styles for auth forms */ .auth-container { width: 100%; max-width: 450px; margin: 0 auto; background: white; border-radius: 24px; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; transition: all 0.3s ease; } .auth-container:hover { transform: translateY(-5px); box-shadow: 0 32px 64px -12px rgba(0, 0, 0, 0.3); } .auth-header { text-align: center; margin-bottom: 2rem; } .auth-title { font-size: 2rem; font-weight: 800; color: #059669; margin-bottom: 0.5rem; display: flex; align-items: center; justify-content: center; gap: 0.5rem; } .auth-subtitle { color: #6b7280; font-size: 1rem; line-height: 1.5; } .auth-icon { font-size: 1.5rem; color: #10b981; } /* Form styles */ .auth-form { display: flex; flex-direction: column; gap: 1.5rem; } .form-group { position: relative; } .form-label { display: block; color: #374151; font-weight: 600; margin-bottom: 0.5rem; font-size: 0.95rem; } .form-input-wrapper { position: relative; display: flex; align-items: center; border: 2px solid #e5e7eb; border-radius: 12px; background: #f9fafb; transition: all 0.3s ease; overflow: hidden; } .form-input-wrapper:focus-within { border-color: #10b981; box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); background: white; } .form-input { flex: 1; padding: 1rem 1.25rem; border: none; background: transparent; outline: none; font-size: 1rem; color: #374151; width: 100%; } .form-input::placeholder { color: #9ca3af; } .form-input-icon { color: #10b981; margin-right: 0.75rem; font-size: 1.1rem; flex-shrink: 0; } .password-toggle { background: none; border: none; color: #9ca3af; padding: 0.5rem; cursor: pointer; transition: color 0.3s ease; margin-left: 0.5rem; } .password-toggle:hover { color: #10b981; } /* Checkbox styles */ .remember-me { display: flex; align-items: center; justify-content: space-between; font-size: 0.9rem; } .checkbox-wrapper { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; user-select: none; } .checkbox-wrapper input[type="checkbox"] { width: 1.2rem; height: 1.2rem; accent-color: #10b981; cursor: pointer; } .forgot-password { color: #10b981; text-decoration: none; font-weight: 500; transition: all 0.3s ease; } .forgot-password:hover { color: #059669; text-decoration: underline; } /* Button styles */ .auth-button { width: 100%; background: linear-gradient(135deg, #10b981 0%, #059669 100%); color: white; border: none; padding: 1rem 2rem; border-radius: 12px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; display: flex; align-items: center; justify-content: center; gap: 0.5rem; position: relative; overflow: hidden; } .auth-button:hover { transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(16, 185, 129, 0.4); } .auth-button:active { transform: translateY(0); } .auth-button::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s; } .auth-button:hover::before { left: 100%; } /* Divider styles */ .auth-divider { display: flex; align-items: center; margin: 2rem 0; color: #9ca3af; font-size: 0.9rem; } .auth-divider::before, .auth-divider::after { content: ''; flex: 1; height: 1px; background: #e5e7eb; } .auth-divider span { padding: 0 1rem; } /* Social login button */ .social-login { width: 100%; background: white; border: 2px solid #e5e7eb; color: #374151; padding: 1rem 2rem; border-radius: 12px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; display: flex; align-items: center; justify-content: center; gap: 0.75rem; text-decoration: none; } .social-login:hover { background: #f9fafb; border-color: #d1d5db; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } .social-icon { font-size: 1.2rem; } .google-icon { color: #ea4335; } /* Switch form link */ .switch-form { text-align: center; margin-top: 2rem; color: #6b7280; font-size: 0.9rem; } .switch-form a { color: #10b981; text-decoration: none; font-weight: 600; transition: color 0.3s ease; } .switch-form a:hover { color: #059669; text-decoration: underline; } /* Alert styles */ .alert { padding: 1rem 1.25rem; border-radius: 12px; margin-bottom: 1.5rem; display: flex; align-items: center; gap: 0.75rem; font-size: 0.95rem; animation: slideInDown 0.3s ease; } .alert-success { background: linear-gradient(135deg, #10b981 0%, #34d399 100%); color: white; box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3); } .alert-error { background: linear-gradient(135deg, #ef4444 0%, #f87171 100%); color: white; box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3); } .alert-info { background: linear-gradient(135deg, #3b82f6 0%, #60a5fa 100%); color: white; box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); } .alert-icon { font-size: 1.1rem; flex-shrink: 0; } /* Session expired alert */ .session-expired-alert { position: fixed; top: 5rem; left: 50%; transform: translateX(-50%); z-index: 1000; max-width: 90vw; width: 400px; } /* Animations */ @keyframes slideInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes slideInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* Form animations */ .auth-form { animation: fadeIn 0.5s ease; } .form-group { animation: slideInUp 0.5s ease; } .form-group:nth-child(1) { animation-delay: 0.1s; } .form-group:nth-child(2) { animation-delay: 0.2s; } .form-group:nth-child(3) { animation-delay: 0.3s; } .form-group:nth-child(4) { animation-delay: 0.4s; } .form-group:nth-child(5) { animation-delay: 0.5s; } /* Responsive Design */ @media (max-width: 768px) { .auth-container { max-width: 100%; margin: 1rem; border-radius: 20px; box-shadow: 0 20px 40px -12px rgba(0, 0, 0, 0.2); } .auth-title { font-size: 1.75rem; } .auth-subtitle { font-size: 0.95rem; } .form-input { padding: 0.875rem 1rem; font-size: 1rem; } .auth-button, .social-login { padding: 0.875rem 1.5rem; font-size: 0.95rem; } .remember-me { flex-direction: column; align-items: flex-start; gap: 0.75rem; } .forgot-password { align-self: flex-end; } } @media (max-width: 480px) { .auth-container { margin: 0.5rem; border-radius: 16px; padding: 1.5rem; } .auth-header { margin-bottom: 1.5rem; } .auth-title { font-size: 1.5rem; flex-direction: column; gap: 0.25rem; } .auth-subtitle { font-size: 0.9rem; } .form-input { padding: 0.75rem 0.875rem; font-size: 0.95rem; } .form-label { font-size: 0.9rem; } .auth-button, .social-login { padding: 0.75rem 1.25rem; font-size: 0.9rem; } .auth-divider { margin: 1.5rem 0; } .switch-form { margin-top: 1.5rem; font-size: 0.85rem; } .alert { padding: 0.875rem 1rem; font-size: 0.9rem; } .session-expired-alert { top: 4rem; left: 1rem; right: 1rem; transform: none; width: auto; max-width: none; } } @media (max-width: 360px) { .auth-container { margin: 0.25rem; padding: 1.25rem; } .auth-title { font-size: 1.375rem; } .auth-subtitle { font-size: 0.85rem; } .form-input { padding: 0.625rem 0.75rem; font-size: 0.9rem; } .auth-button, .social-login { padding: 0.625rem 1rem; font-size: 0.85rem; } .form-label { font-size: 0.85rem; } } /* Landscape orientation for mobile */ @media (max-height: 500px) and (orientation: landscape) { .auth-container { margin: 0.5rem; padding: 1.25rem; } .auth-header { margin-bottom: 1rem; } .auth-title { font-size: 1.5rem; margin-bottom: 0.25rem; } .auth-subtitle { font-size: 0.9rem; margin-bottom: 0; } .auth-form { gap: 1rem; } .form-group { margin-bottom: 0.5rem; } .form-input { padding: 0.625rem 0.875rem; } .auth-button, .social-login { padding: 0.75rem 1.5rem; } .auth-divider { margin: 1rem 0; } .switch-form { margin-top: 1rem; } } /* High DPI displays */ @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { .auth-container { border: 0.5px solid rgba(0, 0, 0, 0.1); } .form-input-wrapper { border-width: 1px; } } /* Dark mode support */ @media (prefers-color-scheme: dark) { .auth-container { background: #1f2937; color: #f9fafb; } .auth-title { color: #34d399; } .auth-subtitle { color: #d1d5db; } .form-label { color: #e5e7eb; } .form-input-wrapper { background: #374151; border-color: #4b5563; } .form-input { color: #f9fafb; } .form-input::placeholder { color: #9ca3af; } .social-login { background: #374151; border-color: #4b5563; color: #f9fafb; } .social-login:hover { background: #4b5563; } .switch-form { color: #d1d5db; } } /* Focus styles for accessibility */ .auth-button:focus, .social-login:focus, .form-input:focus, .password-toggle:focus { outline: 2px solid #10b981; outline-offset: 2px; } /* Error states */ .form-input-wrapper.error { border-color: #ef4444; box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); } .form-input.error { color: #ef4444; } .error-message { color: #ef4444; font-size: 0.875rem; margin-top: 0.5rem; display: flex; align-items: center; gap: 0.5rem; } .error-message::before { content: '⚠'; font-size: 1rem; } /* Focus effects */ .form-input-wrapper.focused { border-color: #10b981; box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); background: white; } /* Loading states */ .auth-button:disabled { opacity: 0.7; cursor: not-allowed; transform: none !important; } .auth-button:disabled:hover { transform: none !important; box-shadow: none !important; } /* Success states */ .form-input-wrapper.success { border-color: #10b981; box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); } /* Hover effects for mobile */ @media (hover: hover) { .auth-button:hover { transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(16, 185, 129, 0.4); } .social-login:hover { background: #f9fafb; border-color: #d1d5db; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } .forgot-password:hover { color: #059669; text-decoration: underline; } .switch-form a:hover { color: #059669; text-decoration: underline; } } /* Touch device optimizations */ @media (pointer: coarse) { .auth-button, .social-login, .password-toggle { min-height: 44px; min-width: 44px; } .form-input { min-height: 44px; } .checkbox-wrapper input[type="checkbox"] { min-width: 20px; min-height: 20px; } } /* Reduced motion support */ @media (prefers-reduced-motion: reduce) { .auth-container, .auth-button, .social-login, .form-input-wrapper { transition: none; } .auth-button::before { display: none; } .auth-form, .form-group { animation: none; } }