334 lines
7.8 KiB
CSS
334 lines
7.8 KiB
CSS
:root {
|
|
/* Apple + Stripe Color Palette (Light) */
|
|
--auth-bg-gradient-1: #fdfbfb;
|
|
--auth-bg-gradient-2: #ebedee;
|
|
--auth-bg-gradient-3: #e0c3fc;
|
|
--auth-bg-gradient-4: #8ec5fc;
|
|
|
|
--auth-glass-bg: rgba(255, 255, 255, 0.7);
|
|
--auth-glass-border: rgba(255, 255, 255, 0.5);
|
|
--auth-glass-shadow: rgba(0, 0, 0, 0.05);
|
|
|
|
--auth-text-main: #1d1d1f;
|
|
--auth-text-muted: #86868b;
|
|
|
|
--auth-input-bg: rgba(255, 255, 255, 0.8);
|
|
--auth-input-border: #d2d2d7;
|
|
--auth-input-focus: #0066cc;
|
|
--auth-input-focus-shadow: rgba(0, 102, 204, 0.2);
|
|
|
|
--auth-btn-bg: #0066cc;
|
|
--auth-btn-text: #ffffff;
|
|
--auth-btn-hover: #0077ed;
|
|
|
|
--auth-shape-1: rgba(142, 197, 252, 0.6);
|
|
--auth-shape-2: rgba(224, 195, 252, 0.6);
|
|
--auth-shape-3: rgba(255, 209, 255, 0.6);
|
|
}
|
|
|
|
[data-bs-theme="dark"] {
|
|
/* Apple + Stripe Color Palette (Dark) */
|
|
--auth-bg-gradient-1: #000000;
|
|
--auth-bg-gradient-2: #1c1c1e;
|
|
--auth-bg-gradient-3: #2c1b4d;
|
|
--auth-bg-gradient-4: #1a2a42;
|
|
|
|
--auth-glass-bg: rgba(28, 28, 30, 0.65);
|
|
--auth-glass-border: rgba(255, 255, 255, 0.1);
|
|
--auth-glass-shadow: rgba(0, 0, 0, 0.3);
|
|
|
|
--auth-text-main: #f5f5f7;
|
|
--auth-text-muted: #86868b;
|
|
|
|
--auth-input-bg: rgba(44, 44, 46, 0.8);
|
|
--auth-input-border: #3a3a3c;
|
|
--auth-input-focus: #2997ff;
|
|
--auth-input-focus-shadow: rgba(41, 151, 255, 0.25);
|
|
|
|
--auth-btn-bg: #2997ff;
|
|
--auth-btn-text: #ffffff;
|
|
--auth-btn-hover: #0071e3;
|
|
|
|
--auth-shape-1: rgba(26, 42, 66, 0.8);
|
|
--auth-shape-2: rgba(44, 27, 77, 0.8);
|
|
--auth-shape-3: rgba(66, 42, 66, 0.8);
|
|
}
|
|
|
|
body {
|
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
margin: 0;
|
|
padding: 0;
|
|
min-height: 100vh;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: linear-gradient(-45deg, var(--auth-bg-gradient-1), var(--auth-bg-gradient-2), var(--auth-bg-gradient-3), var(--auth-bg-gradient-4));
|
|
background-size: 400% 400%;
|
|
animation: gradientBG 15s ease infinite;
|
|
color: var(--auth-text-main);
|
|
overflow: hidden;
|
|
position: relative;
|
|
transition: background-color 0.4s ease, color 0.4s ease;
|
|
}
|
|
|
|
/* Animated Gradient Background */
|
|
@keyframes gradientBG {
|
|
0% { background-position: 0% 50%; }
|
|
50% { background-position: 100% 50%; }
|
|
100% { background-position: 0% 50%; }
|
|
}
|
|
|
|
/* Canvas Particle Layer */
|
|
#particleCanvas {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
z-index: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* Floating Shapes */
|
|
.bg-shape {
|
|
position: absolute;
|
|
filter: blur(60px);
|
|
border-radius: 50%;
|
|
z-index: 1;
|
|
animation: float 20s infinite alternate;
|
|
}
|
|
|
|
.shape-1 {
|
|
width: 400px;
|
|
height: 400px;
|
|
background: var(--auth-shape-1);
|
|
top: -100px;
|
|
left: -100px;
|
|
animation-delay: 0s;
|
|
}
|
|
|
|
.shape-2 {
|
|
width: 500px;
|
|
height: 500px;
|
|
background: var(--auth-shape-2);
|
|
bottom: -150px;
|
|
right: -100px;
|
|
animation-delay: -5s;
|
|
}
|
|
|
|
.shape-3 {
|
|
width: 300px;
|
|
height: 300px;
|
|
background: var(--auth-shape-3);
|
|
top: 40%;
|
|
left: 50%;
|
|
animation-delay: -10s;
|
|
}
|
|
|
|
@keyframes float {
|
|
0% { transform: translate(0, 0) rotate(0deg) scale(1); }
|
|
33% { transform: translate(30px, -50px) rotate(10deg) scale(1.1); }
|
|
66% { transform: translate(-20px, 20px) rotate(-5deg) scale(0.9); }
|
|
100% { transform: translate(0, 0) rotate(0deg) scale(1); }
|
|
}
|
|
|
|
/* Wrapper */
|
|
.auth-wrapper {
|
|
position: relative;
|
|
z-index: 10;
|
|
width: 100%;
|
|
max-width: 1000px;
|
|
padding-inline: 20px;
|
|
}
|
|
|
|
/* Glass Card */
|
|
.glass-card {
|
|
background: var(--auth-glass-bg);
|
|
backdrop-filter: blur(24px);
|
|
-webkit-backdrop-filter: blur(24px);
|
|
border: 1px solid var(--auth-glass-border);
|
|
border-radius: 24px;
|
|
box-shadow: 0 8px 32px var(--auth-glass-shadow), 0 1px 3px rgba(0,0,0,0.02);
|
|
overflow: hidden;
|
|
display: flex;
|
|
flex-direction: row;
|
|
min-height: 550px;
|
|
transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.glass-card:hover {
|
|
box-shadow: 0 12px 48px rgba(0,0,0,0.08), 0 1px 3px rgba(0,0,0,0.02);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
/* Two-column layout */
|
|
.auth-illustration {
|
|
flex: 1;
|
|
background: rgba(255, 255, 255, 0.03);
|
|
border-inline-end: 1px solid var(--auth-glass-border);
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
padding: 3rem;
|
|
text-align: center;
|
|
}
|
|
|
|
.auth-form-container {
|
|
flex: 1;
|
|
padding: 3rem;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
position: relative;
|
|
}
|
|
|
|
/* Typography */
|
|
.auth-title {
|
|
font-weight: 700;
|
|
font-size: 1.75rem;
|
|
margin-bottom: 0.5rem;
|
|
letter-spacing: -0.02em;
|
|
color: var(--auth-text-main);
|
|
}
|
|
|
|
.auth-subtitle {
|
|
color: var(--auth-text-muted);
|
|
font-size: 0.95rem;
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
/* Microsoft Fluent / Stripe Inputs */
|
|
.form-floating > .form-control,
|
|
.form-floating > .form-control:focus {
|
|
background-color: var(--auth-input-bg);
|
|
border: 1.5px solid var(--auth-input-border);
|
|
color: var(--auth-text-main);
|
|
border-radius: 12px;
|
|
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.form-floating > .form-control:focus {
|
|
border-color: var(--auth-input-focus);
|
|
box-shadow: 0 0 0 4px var(--auth-input-focus-shadow);
|
|
}
|
|
|
|
.form-floating > label {
|
|
color: var(--auth-text-muted);
|
|
}
|
|
|
|
.form-control:focus ~ label {
|
|
color: var(--auth-input-focus);
|
|
}
|
|
|
|
/* Micro-interaction Button */
|
|
.btn-auth {
|
|
background-color: var(--auth-btn-bg);
|
|
color: var(--auth-btn-text);
|
|
border: none;
|
|
border-radius: 12px;
|
|
padding: 14px 20px;
|
|
font-weight: 600;
|
|
font-size: 1rem;
|
|
letter-spacing: 0.01em;
|
|
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btn-auth:hover {
|
|
background-color: var(--auth-btn-hover);
|
|
transform: scale(1.02);
|
|
box-shadow: 0 4px 12px var(--auth-input-focus-shadow);
|
|
}
|
|
|
|
.btn-auth:active {
|
|
transform: scale(0.98);
|
|
}
|
|
|
|
/* Loading Overlay */
|
|
.auth-loading-overlay {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: var(--auth-glass-bg);
|
|
backdrop-filter: blur(12px);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
border-radius: 24px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 100;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
transition: opacity 0.3s ease;
|
|
}
|
|
|
|
.auth-loading-overlay.active {
|
|
opacity: 1;
|
|
pointer-events: all;
|
|
}
|
|
|
|
.spinner {
|
|
width: 40px;
|
|
height: 40px;
|
|
border: 3px solid var(--auth-input-border);
|
|
border-top-color: var(--auth-btn-bg);
|
|
border-radius: 50%;
|
|
animation: spin 1s linear infinite;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
@keyframes spin {
|
|
to { transform: rotate(360deg); }
|
|
}
|
|
|
|
/* Theme Switcher & Lang Toggle */
|
|
.auth-controls {
|
|
position: absolute;
|
|
top: 1.5rem;
|
|
inset-inline-end: 1.5rem;
|
|
display: flex;
|
|
gap: 0.5rem;
|
|
z-index: 20;
|
|
}
|
|
|
|
.control-btn {
|
|
background: var(--auth-glass-bg);
|
|
border: 1px solid var(--auth-glass-border);
|
|
color: var(--auth-text-muted);
|
|
width: 36px;
|
|
height: 36px;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.control-btn:hover {
|
|
color: var(--auth-text-main);
|
|
background: var(--auth-input-bg);
|
|
transform: rotate(15deg) scale(1.1);
|
|
}
|
|
|
|
/* Responsive */
|
|
@media (max-width: 768px) {
|
|
.glass-card {
|
|
flex-direction: column;
|
|
}
|
|
.auth-illustration {
|
|
border-inline-end: none;
|
|
border-bottom: 1px solid var(--auth-glass-border);
|
|
padding: 2rem;
|
|
flex: none;
|
|
}
|
|
.auth-form-container {
|
|
padding: 2rem;
|
|
}
|
|
}
|