Files
2026-09-16 23:20:08 +07:00

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;
}
}