/* =============================================== MIES - Authentication Styles Premium glassmorphism design with animations =============================================== */ /* CSS Variables */ :root { --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%); --secondary-gradient: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); --accent-gradient: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); --primary-color: #667eea; --primary-dark: #5a67d8; --secondary-color: #764ba2; --accent-color: #4facfe; --glass-bg: rgba(255, 255, 255, 0.15); --glass-border: rgba(255, 255, 255, 0.25); --glass-shadow: 0 8px 32px rgba(31, 38, 135, 0.15); --text-primary: #1a1a2e; --text-secondary: #4a4a68; --text-light: #8888a4; --font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; --border-radius: 16px; --border-radius-sm: 12px; --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-family); min-height: 100vh; overflow-x: hidden; } /* Auth Container */ .auth-container { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 20px; position: relative; } /* Background Effects */ .auth-background { position: fixed; inset: 0; z-index: -1; overflow: hidden; } .auth-gradient { position: absolute; inset: 0; background: var(--primary-gradient); } .auth-gradient::before { content: ""; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient( circle, rgba(255, 255, 255, 0.1) 0%, transparent 50% ); animation: pulse 15s ease-in-out infinite; } .auth-pattern { position: absolute; inset: 0; background-image: radial-gradient( circle at 20% 80%, rgba(255, 255, 255, 0.1) 0%, transparent 50% ), radial-gradient( circle at 80% 20%, rgba(255, 255, 255, 0.08) 0%, transparent 50% ), radial-gradient( circle at 40% 40%, rgba(255, 255, 255, 0.05) 0%, transparent 50% ); } /* Floating orbs */ .auth-background::after { content: ""; position: absolute; width: 400px; height: 400px; background: rgba(255, 255, 255, 0.08); border-radius: 50%; top: -100px; right: -100px; animation: float 8s ease-in-out infinite; } /* Auth Card - Glassmorphism */ .auth-card { width: 100%; max-width: 420px; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: var(--border-radius); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(255, 255, 255, 0.1); padding: 40px; position: relative; overflow: hidden; } .auth-card-register { max-width: 520px; } .auth-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: var(--primary-gradient); } /* Auth Header */ .auth-header { text-align: center; margin-bottom: 32px; } .auth-logo { margin-bottom: 16px; } .logo-icon { width: 72px; height: 72px; margin: 0 auto; padding: 12px; background: var(--primary-gradient); border-radius: 20px; color: white; box-shadow: 0 10px 30px -5px rgba(102, 126, 234, 0.5); transition: var(--transition); } .logo-icon:hover { transform: scale(1.05) rotate(5deg); } .auth-title { font-size: 2rem; font-weight: 700; color: var(--text-primary); letter-spacing: 3px; margin-bottom: 4px; background: var(--primary-gradient); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .auth-subtitle { font-size: 0.875rem; color: var(--text-secondary); font-weight: 500; letter-spacing: 1px; } /* Form Styles */ .auth-form { margin-bottom: 24px; } .form-floating { position: relative; } .form-floating > .form-control { height: 56px; padding: 16px; padding-left: 16px; border: 2px solid #e8e8f0; border-radius: var(--border-radius-sm); font-size: 1rem; font-weight: 500; color: var(--text-primary); background: rgba(248, 248, 252, 0.8); transition: var(--transition); } .form-floating > .form-control:focus { border-color: var(--primary-color); box-shadow: 0 0 0 4px rgba(102, 126, 234, 0.15); background: white; } .form-floating > .form-control::placeholder { color: transparent; } .form-floating > label { position: absolute; top: 0; left: 0; height: 100%; padding: 16px; pointer-events: none; border: 2px solid transparent; transform-origin: 0 0; transition: var(--transition); color: var(--text-light); font-weight: 500; display: flex; align-items: center; gap: 8px; } .input-icon { width: 18px; height: 18px; opacity: 0.6; } .form-floating > .form-control:focus ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label { opacity: 0.8; transform: scale(0.85) translateY(-0.75rem) translateX(0.15rem); background: white; padding: 0 8px; height: auto; } /* Check input */ .form-check-input { width: 18px; height: 18px; border: 2px solid #ddd; border-radius: 4px; cursor: pointer; } .form-check-input:checked { background-color: var(--primary-color); border-color: var(--primary-color); } .form-check-input:focus { box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.2); } .form-check-label { color: var(--text-secondary); font-size: 0.9rem; cursor: pointer; } /* Auth Button */ .btn-auth { width: 100%; height: 52px; background: var(--primary-gradient); border: none; border-radius: var(--border-radius-sm); color: white; font-size: 1rem; font-weight: 600; letter-spacing: 0.5px; display: flex; align-items: center; justify-content: center; gap: 10px; cursor: pointer; transition: var(--transition); box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4); } .btn-auth:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(102, 126, 234, 0.5); color: white; } .btn-auth:active { transform: translateY(0); } .btn-auth svg { width: 20px; height: 20px; transition: transform 0.3s ease; } .btn-auth:hover svg { transform: translateX(4px); } /* Auth Footer */ .auth-footer { text-align: center; padding-top: 20px; border-top: 1px solid rgba(0, 0, 0, 0.06); } .auth-footer p { font-size: 0.9rem; color: var(--text-light); margin-bottom: 4px; } .auth-link { color: var(--primary-color); font-weight: 600; text-decoration: none; transition: var(--transition); } .auth-link:hover { color: var(--secondary-color); text-decoration: underline; } /* Auth Branding */ .auth-branding { text-align: center; margin-top: 24px; padding-top: 16px; font-size: 0.75rem; color: var(--text-light); display: flex; align-items: center; justify-content: center; gap: 8px; } .auth-branding .separator { color: var(--primary-color); } /* Alert Styles */ .alert { border-radius: var(--border-radius-sm); font-size: 0.875rem; border: none; } .alert-success { background: linear-gradient( 135deg, rgba(72, 187, 120, 0.1) 0%, rgba(56, 178, 172, 0.1) 100% ); color: #276749; } .alert-danger { background: linear-gradient( 135deg, rgba(245, 101, 101, 0.1) 0%, rgba(237, 100, 166, 0.1) 100% ); color: #c53030; } /* Validation Styles */ .text-danger { font-size: 0.75rem; margin-top: 4px; display: block; } .input-validation-error { border-color: #e53e3e !important; } /* Animations */ @keyframes fade-in { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0%, 100% { transform: scale(1) rotate(0deg); } 50% { transform: scale(1.1) rotate(180deg); } } @keyframes float { 0%, 100% { transform: translate(0, 0); } 50% { transform: translate(-30px, 30px); } } .animate-fade-in { animation: fade-in 0.6s ease-out forwards; } /* Responsive Styles */ @media (max-width: 576px) { .auth-card { padding: 28px 24px; } .auth-title { font-size: 1.75rem; } .logo-icon { width: 60px; height: 60px; } .auth-card-register .row > div { width: 100%; } } /* Row helpers for registration */ .auth-form .row { display: flex; flex-wrap: wrap; margin: 0 -8px; } .auth-form .row > .col-md-6 { padding: 0 8px; flex: 0 0 50%; max-width: 50%; } @media (max-width: 576px) { .auth-form .row > .col-md-6 { flex: 0 0 100%; max-width: 100%; } }