351 lines
8.2 KiB
CSS
351 lines
8.2 KiB
CSS
/* =========================
|
||
EVENT-KARTE
|
||
Moderne Karte mit Hover-Effekt und farbigem Akzent-Streifen oben
|
||
========================= */
|
||
.event-card {
|
||
background: var(--color-surface);
|
||
border: 1px solid var(--color-border);
|
||
border-radius: var(--radius-card);
|
||
padding: 1.25rem 1.25rem 1rem;
|
||
|
||
display: flex;
|
||
flex-direction: column;
|
||
|
||
box-shadow: var(--shadow-sm);
|
||
position: relative;
|
||
overflow: hidden;
|
||
|
||
/* Erscheinungsanimation beim Einblenden ins DOM */
|
||
animation: fadeSlideUp 0.38s ease both;
|
||
will-change: opacity, transform;
|
||
|
||
transition: transform 0.22s ease, box-shadow 0.22s ease;
|
||
}
|
||
|
||
/* Gestaffelte Verzögerung für die ersten 9 Karten im Grid */
|
||
#event-list .event-card:nth-child(1),
|
||
#saved-list .event-card:nth-child(1) { animation-delay: 0.03s; }
|
||
#event-list .event-card:nth-child(2),
|
||
#saved-list .event-card:nth-child(2) { animation-delay: 0.07s; }
|
||
#event-list .event-card:nth-child(3),
|
||
#saved-list .event-card:nth-child(3) { animation-delay: 0.11s; }
|
||
#event-list .event-card:nth-child(4),
|
||
#saved-list .event-card:nth-child(4) { animation-delay: 0.15s; }
|
||
#event-list .event-card:nth-child(5),
|
||
#saved-list .event-card:nth-child(5) { animation-delay: 0.19s; }
|
||
#event-list .event-card:nth-child(6),
|
||
#saved-list .event-card:nth-child(6) { animation-delay: 0.23s; }
|
||
#event-list .event-card:nth-child(7),
|
||
#saved-list .event-card:nth-child(7) { animation-delay: 0.27s; }
|
||
#event-list .event-card:nth-child(8),
|
||
#saved-list .event-card:nth-child(8) { animation-delay: 0.31s; }
|
||
#event-list .event-card:nth-child(9),
|
||
#saved-list .event-card:nth-child(9) { animation-delay: 0.35s; }
|
||
|
||
/* Farbiger Akzent-Streifen oben – zeigt Kategorie-Zugehörigkeit */
|
||
.event-card::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
height: 3px;
|
||
background: linear-gradient(90deg, var(--color-accent), var(--color-accent-light));
|
||
border-radius: var(--radius-card) var(--radius-card) 0 0;
|
||
}
|
||
|
||
/* Hover-Effekt nur auf Geräten mit Hover-Unterstützung (kein unbeabsichtigtes Verhalten auf Touch) */
|
||
@media (hover: hover) {
|
||
.event-card:hover {
|
||
transform: translateY(-5px);
|
||
box-shadow: var(--shadow-lg);
|
||
}
|
||
}
|
||
|
||
/* =========================
|
||
KARTEN-INHALT
|
||
========================= */
|
||
|
||
/* Titel */
|
||
.event-card__title {
|
||
font-size: 1rem;
|
||
font-weight: 600;
|
||
color: var(--color-text);
|
||
margin: 0.375rem 0 0.5rem;
|
||
line-height: 1.4;
|
||
/* Lange Titel auf 2 Zeilen begrenzen */
|
||
display: -webkit-box;
|
||
-webkit-line-clamp: 2;
|
||
-webkit-box-orient: vertical;
|
||
overflow: hidden;
|
||
}
|
||
|
||
/* Datum & Uhrzeit – in Akzentfarbe für schnelle Lesbarkeit */
|
||
.event-card__date {
|
||
font-size: 0.8rem;
|
||
font-weight: 600;
|
||
color: var(--color-accent-dark);
|
||
margin: 0 0 0.3rem;
|
||
letter-spacing: 0.01em;
|
||
}
|
||
|
||
/* Veranstaltungsort */
|
||
.event-card__venue {
|
||
font-size: 0.8rem;
|
||
color: var(--color-text-muted);
|
||
margin: 0 0 1rem;
|
||
/* Icon-ähnlicher Stil durch leichten Einzug */
|
||
padding-left: 0;
|
||
}
|
||
|
||
/* =========================
|
||
BUTTON-GRUPPE IN KARTE
|
||
Trennlinie separiert Inhalt von Aktionen
|
||
========================= */
|
||
.event-card .d-flex.gap-2 {
|
||
border-top: 1px solid var(--color-border);
|
||
padding-top: 0.875rem;
|
||
margin-top: auto;
|
||
}
|
||
|
||
/* =========================
|
||
EINLADUNGSFORMULAR (Inline)
|
||
Erscheint direkt in der Karte beim Klick auf "Einladen"
|
||
========================= */
|
||
.invite-form {
|
||
border-top: 1px solid var(--color-border);
|
||
padding-top: 0.75rem;
|
||
margin-top: 0.5rem;
|
||
}
|
||
|
||
.invite-form input[type="text"] {
|
||
font-size: 0.85rem;
|
||
border: 1.5px solid var(--color-border);
|
||
border-radius: var(--radius-xs);
|
||
padding: 0.4rem 0.75rem;
|
||
height: 36px;
|
||
width: 100%;
|
||
font-family: inherit;
|
||
background: var(--color-bg);
|
||
color: var(--color-text);
|
||
transition: border-color 0.2s, box-shadow 0.2s;
|
||
}
|
||
|
||
.invite-form input[type="text"]:focus {
|
||
border-color: var(--color-accent);
|
||
box-shadow: 0 0 0 2px rgba(13, 148, 136, 0.15);
|
||
outline: none;
|
||
background: var(--color-surface);
|
||
}
|
||
|
||
.invite-form input[type="text"].is-invalid {
|
||
border-color: var(--color-danger);
|
||
}
|
||
|
||
/* =========================
|
||
STATUSMELDUNG IN KARTE
|
||
Temporäre Bestätigungs- oder Fehlermeldung (verschwindet nach 3s)
|
||
========================= */
|
||
.card-message {
|
||
font-size: 0.8rem;
|
||
font-weight: 500;
|
||
border-radius: var(--radius-xs);
|
||
padding: 0.35rem 0.6rem;
|
||
margin-top: 0.5rem;
|
||
margin-bottom: 0;
|
||
background: rgba(0, 0, 0, 0.03);
|
||
}
|
||
|
||
/* =========================
|
||
EINLADUNGS-KARTE (My Invitations)
|
||
========================= */
|
||
.invitation-card {
|
||
background: var(--color-surface);
|
||
border: 1px solid var(--color-border);
|
||
border-radius: var(--radius-card);
|
||
padding: 1.25rem;
|
||
box-shadow: var(--shadow-sm);
|
||
}
|
||
|
||
.invitation-card p {
|
||
margin: 0 0 0.75rem;
|
||
font-size: 0.95rem;
|
||
color: var(--color-text);
|
||
line-height: 1.5;
|
||
}
|
||
|
||
.invitation-card p:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
/* =========================
|
||
AUTH MODAL
|
||
========================= */
|
||
.auth-modal-content {
|
||
border: none;
|
||
border-radius: var(--radius-card);
|
||
overflow: hidden;
|
||
box-shadow: var(--shadow-lg);
|
||
}
|
||
|
||
.auth-modal-header {
|
||
background: var(--color-header);
|
||
padding: 1.25rem 1.5rem;
|
||
border-bottom: none;
|
||
}
|
||
|
||
.auth-modal-title {
|
||
color: #ffffff;
|
||
font-size: 1.1rem;
|
||
font-weight: 700;
|
||
margin: 0;
|
||
}
|
||
|
||
.auth-modal-body {
|
||
padding: 1.5rem;
|
||
}
|
||
|
||
/* Tabs */
|
||
.auth-tabs {
|
||
display: flex;
|
||
gap: 0;
|
||
border-bottom: 2px solid var(--color-border);
|
||
list-style: none;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.auth-tab-btn {
|
||
background: none;
|
||
border: none;
|
||
border-bottom: 2px solid transparent;
|
||
margin-bottom: -2px;
|
||
padding: 0.5rem 1.25rem;
|
||
font-family: inherit;
|
||
font-size: 0.9rem;
|
||
font-weight: 500;
|
||
color: var(--color-text-muted);
|
||
cursor: pointer;
|
||
transition: color var(--transition), border-color var(--transition);
|
||
}
|
||
|
||
.auth-tab-btn:hover {
|
||
color: var(--color-text);
|
||
}
|
||
|
||
.auth-tab-btn.active {
|
||
color: var(--color-accent);
|
||
border-bottom-color: var(--color-accent);
|
||
}
|
||
|
||
/* Formularfelder im Modal */
|
||
.auth-label {
|
||
display: block;
|
||
font-size: 0.875rem;
|
||
font-weight: 500;
|
||
color: var(--color-text);
|
||
margin-bottom: 0.35rem;
|
||
}
|
||
|
||
.auth-modal-body .form-control.auth-input {
|
||
border: 1.5px solid var(--color-border);
|
||
border-radius: var(--radius-sm);
|
||
font-family: inherit;
|
||
font-size: 0.9rem;
|
||
height: 42px;
|
||
color: var(--color-text);
|
||
background: var(--color-bg);
|
||
transition: border-color var(--transition), box-shadow var(--transition);
|
||
}
|
||
|
||
.auth-modal-body .form-control.auth-input:focus {
|
||
border-color: var(--color-accent);
|
||
box-shadow: 0 0 0 3px rgba(13, 148, 136, 0.15);
|
||
outline: none;
|
||
background: var(--color-surface);
|
||
}
|
||
|
||
.auth-error {
|
||
font-size: 0.85rem;
|
||
color: var(--color-danger);
|
||
margin-bottom: 0.75rem;
|
||
}
|
||
|
||
/* Primärer Modal-Button (teal) */
|
||
.btn-accent {
|
||
background: var(--color-accent);
|
||
color: #fff;
|
||
border: none;
|
||
border-radius: var(--radius-sm);
|
||
font-family: inherit;
|
||
font-size: 0.9rem;
|
||
font-weight: 600;
|
||
height: 42px;
|
||
cursor: pointer;
|
||
transition: background var(--transition), transform var(--transition), box-shadow var(--transition);
|
||
}
|
||
|
||
.btn-accent:hover {
|
||
background: var(--color-accent-dark);
|
||
color: #fff;
|
||
transform: translateY(-1px);
|
||
box-shadow: 0 4px 12px rgba(13, 148, 136, 0.3);
|
||
}
|
||
|
||
.btn-accent:active {
|
||
transform: translateY(0);
|
||
}
|
||
|
||
/* Registrierungs-Erfolgsmeldung */
|
||
.register-success {
|
||
background: rgba(16, 185, 129, 0.07);
|
||
border: 1px solid rgba(16, 185, 129, 0.25);
|
||
border-radius: var(--radius-sm);
|
||
padding: 1rem;
|
||
color: var(--color-text);
|
||
}
|
||
|
||
/* Passwort-Anzeige nach Registrierung */
|
||
.password-display {
|
||
background: var(--color-surface);
|
||
border: 1.5px solid var(--color-border);
|
||
border-radius: var(--radius-xs);
|
||
padding: 0.6rem 1rem;
|
||
text-align: center;
|
||
margin-top: 0.5rem;
|
||
}
|
||
|
||
.password-display code {
|
||
font-size: 1.375rem;
|
||
font-weight: 700;
|
||
color: var(--color-accent);
|
||
letter-spacing: 0.15em;
|
||
}
|
||
|
||
/* Hinweistext unter Passwort */
|
||
.text-muted-custom {
|
||
color: var(--color-text-muted);
|
||
}
|
||
|
||
/* =========================
|
||
GLOBALE FORMULAR-VERBESSERUNGEN
|
||
Mindest-Klickfläche (WCAG) und Focus-Ring
|
||
========================= */
|
||
button {
|
||
min-height: 36px;
|
||
}
|
||
|
||
input,
|
||
select,
|
||
textarea {
|
||
min-height: 36px;
|
||
}
|
||
|
||
/* Sichtbarer Fokus-Ring für Tastatur-Navigation (WCAG A) */
|
||
button:focus-visible,
|
||
input:focus-visible,
|
||
select:focus-visible,
|
||
a:focus-visible {
|
||
outline: 2px solid var(--color-accent);
|
||
outline-offset: 2px;
|
||
} |