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