351 lines
8.2 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.

/* =========================
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;
}