Geizkragen/assets/css/login.css

487 lines
11 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ==========================================================
AUTH PAGES Login, Register, Account
Animated Glassmorphism Design
========================================================== */
/* ─── Auth Wrapper ─── */
.auth {
display: grid;
place-items: center;
min-height: 80vh;
padding: 2.5rem 1.25rem 4rem;
position: relative;
z-index: 1;
}
/* Decorative ambient orb */
.auth::before {
content: "";
position: absolute;
top: 10%;
left: 50%;
transform: translateX(-50%);
width: 400px;
height: 400px;
border-radius: 50%;
background: radial-gradient(circle, rgba(59, 130, 246, 0.08), transparent 70%);
pointer-events: none;
z-index: -1;
animation: float 12s ease-in-out infinite;
}
.auth__grid {
display: grid;
grid-template-columns: 1fr;
justify-items: center;
gap: 1.5rem;
width: min(480px, 100%);
margin: 0 auto;
align-items: center;
}
/* ─── Side Layout (Account page) ─── */
.auth__grid.auth__card__side {
grid-template-columns: max-content 1fr;
align-items: start;
justify-items: stretch;
width: min(900px, 100%);
}
.auth__grid.auth__card__side .auth__card {
width: 100%;
}
.auth__grid.auth__card__side .auth__card.auth__card__side__picture {
display: inline-grid;
width: max-content;
justify-self: center;
padding: 12px;
overflow: hidden;
place-items: center;
}
.auth__grid.auth__card__side .auth__card.auth__card__side__picture .auth__header {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
margin-bottom: 0;
}
.auth__grid.auth__card__side .auth__card.auth__card__side__picture img {
display: block;
max-width: none;
height: auto;
border-radius: var(--radius-lg);
transition: transform var(--transition-smooth);
}
.auth__grid.auth__card__side .auth__card.auth__card__side__picture img:hover {
transform: scale(1.03);
}
.auth__grid.auth__card__stack {
grid-template-columns: 1fr;
align-items: center;
justify-items: center;
}
/* ─── Card Glassmorphism ─── */
.auth__card,
.auth__sideCard {
width: min(520px, 100%);
background: rgba(15, 21, 32, 0.8);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-md);
animation: fadeInUp 0.5s ease both;
transition: border-color var(--transition-smooth),
box-shadow var(--transition-smooth);
}
.auth__card:hover {
border-color: var(--border-default);
box-shadow: var(--shadow-md), var(--shadow-glow-blue);
}
/* Stagger cards */
.auth__grid .auth__card:nth-child(1) { animation-delay: 0s; }
.auth__grid .auth__card:nth-child(2) { animation-delay: 0.08s; }
.auth__grid .auth__card:nth-child(3) { animation-delay: 0.16s; }
.auth__grid .auth__card:nth-child(4) { animation-delay: 0.24s; }
.auth__card {
padding: 1.75rem;
}
/* ─── Card Header ─── */
.auth__header {
display: grid;
grid-template-columns: auto 1fr;
column-gap: 14px;
row-gap: 2px;
align-items: center;
margin-bottom: 1rem;
}
.auth__logo {
display: block;
width: 140px;
height: auto;
grid-row: span 2;
}
.auth__title {
margin: 0;
font-size: 1.45rem;
font-weight: 700;
letter-spacing: -0.3px;
color: var(--text-primary);
background: linear-gradient(135deg, var(--text-primary), var(--text-secondary));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.auth__subtitle {
margin: 0;
color: var(--text-secondary);
font-size: 0.95rem;
line-height: 1.4;
}
/* ─── Alerts Animated ─── */
.auth__alert__error {
margin: 0.75rem 0 1rem;
color: var(--text-invert);
background: linear-gradient(135deg, var(--color-danger), #dc2626);
border-radius: var(--radius-md);
padding: 0.75rem 1rem;
font-size: 0.88rem;
font-weight: 500;
box-shadow: 0 4px 16px rgba(239, 68, 68, 0.2);
animation: scaleIn 0.3s ease;
}
.auth__alert__sucess {
margin: 0.75rem 0 1rem;
color: var(--text-invert);
background: linear-gradient(135deg, var(--color-success), #16a34a);
border-radius: var(--radius-md);
padding: 0.75rem 1rem;
font-size: 0.88rem;
font-weight: 500;
box-shadow: 0 4px 16px rgba(34, 197, 94, 0.2);
animation: scaleIn 0.3s ease;
}
.auth__alert {
margin: 0.75rem 0 1rem;
color: var(--text-invert);
background: linear-gradient(135deg, var(--color-danger), #dc2626);
border-radius: var(--radius-md);
padding: 0.75rem 1rem;
font-size: 0.88rem;
animation: scaleIn 0.3s ease;
}
.auth__alert ul {
margin: 0;
padding-left: 1.25rem;
}
.auth__alert li {
margin: 0.25rem 0;
}
.auth__error {
margin: 0.75rem 0;
color: var(--color-danger);
background: var(--color-danger-soft);
border: 1px solid rgba(239, 68, 68, 0.15);
border-radius: var(--radius-md);
padding: 0.75rem 1rem;
font-size: 0.88rem;
animation: scaleIn 0.3s ease;
}
/* ─── Form ─── */
.auth__form {
margin-top: 0.5rem;
}
.auth__field {
margin-top: 1rem;
}
.auth__search {
margin-top: 1px;
}
.auth__field label {
display: block;
margin: 0 0 0.4rem;
font-size: 0.85rem;
font-weight: 500;
color: var(--text-muted);
transition: color var(--transition-normal);
}
.auth__field:focus-within label {
color: var(--color-primary);
}
.auth__field input[type="text"],
.auth__field input[type="password"],
.auth__field input[type="email"],
.auth__field input[type="file"] {
width: 100%;
box-sizing: border-box;
padding: 0.75rem 0.9rem;
border: 1px solid var(--border-default);
border-radius: var(--radius-md);
background: rgba(18, 26, 40, 0.6);
color: var(--text-primary);
font-family: var(--font-family);
font-size: 0.9rem;
outline: none;
transition: all var(--transition-smooth);
}
.auth__field input[type="text"]:focus,
.auth__field input[type="password"]:focus,
.auth__field input[type="email"]:focus,
.auth__field input[type="file"]:focus {
border-color: var(--color-primary);
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1),
0 0 20px rgba(59, 130, 246, 0.06);
background: rgba(18, 26, 40, 0.9);
transform: translateY(-1px);
}
.auth__field input[type="text"]::placeholder,
.auth__field input[type="password"]::placeholder,
.auth__field input[type="email"]::placeholder {
color: var(--text-muted);
}
.auth__field input[type="file"]::file-selector-button {
margin-right: 10px;
padding: 0.6rem 1rem;
border: 0;
border-radius: var(--radius-md);
background: linear-gradient(135deg, var(--color-primary), var(--color-primary-hover));
color: #ffffff;
font-weight: 600;
font-family: var(--font-family);
font-size: 0.82rem;
cursor: pointer;
transition: all var(--transition-normal);
}
.auth__field input[type="file"]::file-selector-button:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
}
.auth__field input[type="file"]::file-selector-button:active {
transform: translateY(0);
}
/* ─── Actions ─── */
.auth__actions {
margin-top: 1.25rem;
}
.auth__submit {
width: 100%;
padding: 0.8rem 1rem;
border: 0;
border-radius: var(--radius-md);
background: linear-gradient(135deg, var(--color-primary), var(--color-primary-hover));
background-size: 200% 200%;
color: #ffffff;
font-weight: 600;
font-family: var(--font-family);
font-size: 0.93rem;
letter-spacing: 0.2px;
cursor: pointer;
transition: all var(--transition-normal);
box-shadow: 0 4px 16px rgba(59, 130, 246, 0.25);
position: relative;
overflow: hidden;
}
/* Shimmer effect on button */
.auth__submit::before {
content: "";
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(
90deg,
transparent,
rgba(255, 255, 255, 0.15),
transparent
);
transition: left 0.5s ease;
}
.auth__submit:hover::before {
left: 100%;
}
.auth__submit:hover {
transform: translateY(-2px);
box-shadow: 0 8px 28px rgba(59, 130, 246, 0.4);
}
.auth__submit:active {
transform: translateY(0) scale(0.98);
}
.auth__submit:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
box-shadow: none;
}
.auth__submit:disabled::before {
display: none;
}
/* Danger button variant */
.auth__submit--danger {
background: linear-gradient(135deg, var(--color-danger), #dc2626);
box-shadow: 0 4px 16px rgba(239, 68, 68, 0.25);
}
.auth__submit--danger:hover {
box-shadow: 0 8px 28px rgba(239, 68, 68, 0.4);
}
/* ─── Links ─── */
.auth__links {
margin-top: 1.25rem;
padding-top: 1rem;
border-top: 1px solid var(--border-subtle);
}
.auth__muted {
margin: 0.5rem 0 0;
color: var(--text-secondary);
font-size: 0.88rem;
}
.auth__muted a {
color: var(--color-primary);
text-decoration: none;
font-weight: 600;
transition: all var(--transition-normal);
position: relative;
}
.auth__muted a::after {
content: "";
position: absolute;
bottom: -2px;
left: 0;
width: 0;
height: 1.5px;
background: var(--color-primary);
transition: width var(--transition-smooth);
}
.auth__muted a:hover {
color: var(--color-primary-hover);
}
.auth__muted a:hover::after {
width: 100%;
}
/* ─── Side Card ─── */
.auth__sideCard {
padding: 1.25rem;
}
.auth__sideCard h3 {
margin: 0 0 0.75rem;
font-size: 1.05rem;
color: var(--text-primary);
}
.auth__sideCard ul {
margin: 0;
padding-left: 1.25rem;
color: var(--text-secondary);
}
.auth__sideCard li {
margin: 0.5rem 0;
color: var(--text-secondary);
}
/* ─── Tip Box ─── */
.auth__tip {
margin-top: 0.75rem;
padding: 0.7rem 0.9rem;
border-radius: var(--radius-md);
background: var(--color-primary-soft);
border: 1px solid rgba(59, 130, 246, 0.1);
color: var(--text-secondary);
font-size: 0.8rem;
line-height: 1.5;
}
/* ==========================================================
RESPONSIVE
========================================================== */
@media (max-width: 900px) {
.auth__grid {
width: min(480px, 100%);
}
.auth__grid.auth__card__side {
grid-template-columns: 1fr;
justify-items: center;
width: min(480px, 100%);
}
.auth__logo {
width: 120px;
}
.auth__sideCard {
display: none;
}
}
@media (max-width: 520px) {
.auth {
padding-top: 1.5rem;
}
.auth__card {
padding: 1.25rem;
}
.auth__header {
grid-template-columns: 1fr;
}
.auth__logo {
width: 140px;
grid-row: auto;
}
.auth__title {
font-size: 1.25rem;
}
}