/** * Register Page - Professional Bootstrap Design * Clean and modern registration interface styling * * @author David Valera Melendez * @created 2025-08-08 * @location Made in Germany 🇩🇪 */ /* ========================================================================== Register Container & Layout (Angular Material Match) ========================================================================== */ .register-container { min-height: 100vh; display: flex; background-color: var(--color-background); } /* ========================================================================== Hero Background Section (Left Side - Angular Material Style) ========================================================================== */ .hero-background { flex: 1; @include gradient-background(var(--gradient-success)); position: relative; display: flex; align-items: center; justify-content: center; overflow: hidden; @media (max-width: 992px) { display: none; } } .hero-overlay { position: relative; z-index: 2; text-align: center; padding: 48px; color: var(--color-text-white); } .hero-content { max-width: 400px; } .hero-icon .large-icon { font-size: 72px; width: 72px; height: 72px; margin-bottom: 24px; color: var(--color-text-white-muted); } .hero-title { font-size: 2.5rem; font-weight: $font-weight-light; margin-bottom: 16px; line-height: 1.2; } .hero-subtitle { font-size: 1.125rem; margin-bottom: 16px; opacity: 0.9; line-height: 1.5; } .author-signature { font-size: 0.9rem; opacity: 0.8; } /* ========================================================================== Register Form Container (Right Side - Angular Material Card) ========================================================================== */ .register-form-container { flex: 0 0 520px; background-color: transparent; display: flex; align-items: center; justify-content: center; padding: 32px 24px; overflow-y: auto; @media (max-width: 992px) { flex: 1; background: var(--gradient-success); } } .register-card { @include material-card; width: 100%; max-width: 480px; background-color: var(--color-surface); border: none; box-shadow: var(--shadow-xl); border-radius: var(--border-radius-xl); overflow: hidden; @media (max-width: 992px) { box-shadow: var(--shadow-2xl); } .card-body { padding: 40px 32px; @media (max-width: 576px) { padding: 32px 24px; } } } /* ========================================================================== Form Header (Angular Material Avatar & Title) ========================================================================== */ .form-header { text-align: center; margin-bottom: 32px; } .register-avatar { width: 64px; height: 64px; background-color: var(--color-success); border-radius: var(--border-radius-round); display: flex; align-items: center; justify-content: center; margin: 0 auto 24px; color: var(--color-text-white); font-size: 1.5rem; box-shadow: var(--shadow-md); } .form-title { font-size: 1.75rem; font-weight: $font-weight-normal; color: var(--color-text-primary); margin-bottom: 8px; } .form-subtitle { font-size: 1rem; color: var(--color-text-secondary); margin-bottom: 0; } /* ========================================================================== Material Design Form Fields (Angular Material Input Style) ========================================================================== */ .register-form { .form-group { margin-bottom: 24px; } .row { margin-bottom: 16px; } } .form-field { position: relative; margin-bottom: 16px; } .material-input { @include material-input; width: 100%; padding: 16px 12px 8px; font-size: 1rem; background-color: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--border-radius-md); transition: var(--transition-normal); &:focus { border-color: var(--color-success); box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.1); outline: none; + .form-label { color: var(--color-success); transform: translateY(-20px) scale(0.85); } } &:not(:placeholder-shown) + .form-label { transform: translateY(-20px) scale(0.85); color: var(--color-text-secondary); } &.is-invalid { border-color: var(--color-error); &:focus { box-shadow: 0 0 0 2px rgba(244, 67, 54, 0.1); } + .form-label { color: var(--color-error); } } &.is-valid { border-color: var(--color-success); &:focus { box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.1); } + .form-label { color: var(--color-success); } } } .form-label { position: absolute; top: 12px; left: 12px; font-size: 1rem; color: var(--color-text-hint); pointer-events: none; transition: var(--transition-normal); transform-origin: left top; background-color: var(--color-surface); padding: 0 4px; margin-left: -4px; z-index: 1; } .form-outline { position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; border-radius: var(--border-radius-md); } /* Password Toggle Button */ .password-toggle { position: absolute; top: 50%; right: 12px; transform: translateY(-50%); background: none; border: none; color: var(--color-text-hint); cursor: pointer; font-size: 1.2rem; padding: 4px; border-radius: var(--border-radius-sm); transition: var(--transition-fast); z-index: 2; &:hover { color: var(--color-text-secondary); background-color: rgba(0, 0, 0, 0.04); } } /* ========================================================================== Password Requirements & Validation ========================================================================== */ .password-requirements { margin-top: 8px; padding-left: 12px; } /* ========================================================================== Form Checkboxes (Terms & Newsletter) ========================================================================== */ .form-check { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 16px; .form-check-input { width: 18px; height: 18px; border: 2px solid var(--color-border-dark); border-radius: 3px; background-color: var(--color-surface); margin-top: 2px; &:checked { background-color: var(--color-success); border-color: var(--color-success); } &:focus { box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.1); } &.is-invalid { border-color: var(--color-error); } } .form-check-label { font-size: 0.9rem; color: var(--color-text-secondary); cursor: pointer; line-height: 1.4; a { color: var(--color-success); &:hover { color: var(--color-success-dark); } } } } /* ========================================================================== Register Button (Angular Material Raised Button) ========================================================================== */ .register-btn { @include material-button(var(--color-success)); width: 100%; padding: 14px 24px; font-size: 1rem; font-weight: $font-weight-medium; border-radius: var(--border-radius-md); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 24px; &:hover { background-color: var(--color-success-dark); transform: translateY(-1px); box-shadow: var(--shadow-lg); } &:active { transform: translateY(0); } } /* ========================================================================== Social Registration Section (Angular Material Style) ========================================================================== */ .social-login { margin-bottom: 24px; } .divider { position: relative; text-align: center; margin: 24px 0; &::before { content: ''; position: absolute; top: 50%; left: 0; right: 0; height: 1px; background-color: var(--color-border); } span { background-color: var(--color-surface); padding: 0 16px; color: var(--color-text-hint); font-size: 0.9rem; } } .social-buttons { display: flex; gap: 12px; @media (max-width: 576px) { flex-direction: column; } } .social-btn { flex: 1; padding: 12px 16px; border: 1px solid var(--color-border); border-radius: var(--border-radius-md); background-color: var(--color-surface); color: var(--color-text-secondary); font-weight: $font-weight-medium; transition: var(--transition-normal); display: flex; align-items: center; justify-content: center; gap: 8px; &:hover { border-color: var(--color-border-dark); background-color: var(--color-surface-variant); transform: translateY(-1px); box-shadow: var(--shadow-sm); color: var(--color-text-primary); } &.google-btn:hover { border-color: #db4437; color: #db4437; } &.github-btn:hover { border-color: #333; color: #333; } } /* ========================================================================== Login Link ========================================================================== */ .login-link { text-align: center; margin: 0; p { color: var(--color-text-secondary); font-size: 0.9rem; margin: 0; } } .login-link-text { color: var(--color-success); text-decoration: none; font-weight: $font-weight-medium; transition: var(--transition-fast); &:hover { color: var(--color-success-dark); text-decoration: underline; } } /* ========================================================================== Error Messages (Angular Material Style) ========================================================================== */ .alert { border-radius: var(--border-radius-md); border: none; padding: 16px; margin-bottom: 24px; &.alert-danger { background-color: var(--color-error-bg); color: var(--color-error-dark); border-left: 4px solid var(--color-error); } } .invalid-feedback { display: block; font-size: 0.85rem; color: var(--color-error); margin-top: 8px; padding-left: 12px; } /* ========================================================================== Responsive Design ========================================================================== */ @media (max-width: 992px) { .register-container { background: var(--gradient-success); } .register-form-container { padding: 24px 16px; } .register-card { margin: 0; box-shadow: var(--shadow-2xl); } } @media (max-width: 576px) { .hero-title { font-size: 2rem; } .form-title { font-size: 1.5rem; } .register-card .card-body { padding: 24px 20px; } .register-form-container { flex: 0 0 auto; width: 100%; } }