body{padding:0}.guest-container{max-width:880px;width:100%;margin:0 auto;padding:0 1.5rem;flex:1}@media (max-width:768px){.guest-container{padding:0 0.75rem}.guest-container .content{padding:0.75rem 0}}.event-hero-card{text-align:center;padding:2rem 1.5rem 1.5rem;margin:0.75rem 0 1.25rem;background:var(--card);border:1px solid var(--border);border-radius:16px;position:relative;overflow:hidden}.event-hero-card::before{content:'';position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--primary),var(--primary-dark));border-radius:16px 16px 0 0;z-index:2}.event-hero-image{width:calc(100%+3rem);margin:-2rem -1.5rem 1rem;aspect-ratio:16 / 5;overflow:hidden;position:relative}.event-hero-image img{width:100%;height:100%;object-fit:cover;display:block}.event-hero-deco{width:calc(100%+3rem);margin:-2rem -1.5rem 1rem;height:140px;overflow:hidden;background:var(--primary-light)}.event-hero-deco svg{width:100%;height:100%;display:block}.event-hero-title{font-size:1.5rem;font-weight:700;color:var(--text);margin:0 0 0.25rem;word-break:break-word;line-height:1.3;letter-spacing:-0.02em;text-align:left}.event-hero-description{color:var(--text-muted);font-size:0.92rem;line-height:1.55;margin:0.5rem 0 0;max-width:400px;text-align:left}.join-section{border-top:1px solid var(--border);margin:1.25rem -1.5rem 0;padding:1.25rem 1.5rem 0;text-align:center}.join-card-header{display:flex;align-items:center;justify-content:center;gap:0.5rem;margin-bottom:0.35rem;color:var(--text)}.join-card-header h3{font-size:1.1rem;font-weight:600;margin:0}.join-card-header svg{color:var(--primary)}.join-card-sub{color:var(--text-muted);font-size:0.88rem;margin-bottom:1.25rem}.join-consent{color:var(--text-muted);font-size:0.72rem;line-height:1.45;margin-top:0.85rem;max-width:440px;margin-left:auto;margin-right:auto}.join-consent a{color:var(--primary);text-decoration:underline}.join-form{display:flex;flex-direction:column;gap:0.75rem;max-width:440px;margin:0 auto}.join-input{padding:0.75rem 1rem;border:1.5px solid var(--border);border-radius:var(--radius-md);font-size:1rem;font-family:inherit;background:var(--bg);color:var(--text);outline:none;transition:border-color 0.2s,box-shadow 0.2s;text-align:left}.join-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(91,106,191,0.12);background:var(--card)}.join-input::placeholder{color:var(--gray)}.btn-join{padding:0.8rem 1.5rem;font-size:1rem;font-weight:600;border-radius:var(--radius-md);background:var(--primary);color:white}/* Upload-/Download-Karte: breit → 80 %, mittel → 440 px, schmal → 90 % — als EINE stetige Formel (min/max), keine Breakpoints: bei 550 px trifft 80 % genau 440 px, bei 489 px trifft 90 % genau 440 px, dazwischen bleibt sie fest. Vorher sprang die Breite an drei Kanten (2026-09-12). Am Handy dadurch etwas schmaler als die Karten drumherum: in der Reihe gleich breiter, bündiger Rechtecke las sich der Knopf sonst wie ein weiteres Kärtchen statt wie DIE Aktion. Zähler hängt in der Karte und folgt. */.upload-card{text-align:center;margin-bottom:1.25rem;width:min(90%,max(440px,80%));margin-left:auto;margin-right:auto}.upload-card .btn-upload{box-shadow:0 4px 14px rgba(0,0,0,0.14)}.btn-upload{display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;width:100%;padding:0.85rem 1.5rem;font-size:1rem;font-weight:600;font-family:inherit;border-radius:var(--radius-md);background:var(--primary);color:white;border:none;cursor:pointer;transition:background 0.15s,transform 0.15s,box-shadow 0.15s;position:relative;z-index:1}@media (hover:hover){.btn-upload:hover{background:var(--primary-dark);transform:translateY(-1px);box-shadow:0 4px 12px rgba(91,106,191,0.3)}}.btn-upload:active{transform:scale(0.98)}.btn-upload:disabled{background:color-mix(in srgb, var(--primary) 45%, var(--card));opacity:1;cursor:default;transform:none;box-shadow:none}.upload-progress{display:none}.upload-progress-bar{flex:1;height:6px;background:var(--border);border-radius:3px;overflow:hidden}.upload-progress-fill{height:100%;background:var(--primary);border-radius:3px;transition:width 0.3s ease;width:0%}.upload-progress-text{font-size:0.8rem;color:var(--text-muted);font-weight:500;white-space:nowrap}.photo-counter{position:relative;margin-top:-12px;padding:calc(0.6rem + 12px) 0.85rem 0.6rem;background:var(--primary-light);border:1px solid var(--border);border-radius:0 0 12px 12px;font-size:0.85rem;overflow:hidden}.photo-counter-fill{position:absolute;top:0;left:0;height:100%;background:var(--primary);opacity:0.08;border-radius:10px;transition:width 0.4s ease}.photo-counter.uploading .photo-counter-fill{display:none}.upload-counter-fill{position:absolute;top:0;left:0;height:100%;width:0%;background:var(--primary);opacity:0.18;border-radius:10px;transition:width 0.3s ease;display:none}.photo-counter.uploading .upload-counter-fill{display:block}.photo-counter-fill.full{background:var(--primary);opacity:0.08}.photo-counter-text{position:relative;z-index:1;color:var(--text-secondary)}.gallery-section h3{margin-bottom:0.75rem;font-size:1rem;font-weight:600;color:var(--text)}.gallery-actions{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:0.5rem;padding:0 0 0.75rem 0}.gallery-actions h3{margin:0}.gallery-actions h3 svg{vertical-align:-0.15em;margin-right:0.35rem}@media (max-width:480px){.guest-container{padding:0 0.5rem}.guest-container .content{padding:0.5rem 0}.event-hero-card{padding:1.5rem 1rem 1.25rem;border-radius:12px;margin:0.5rem 0 1rem}.event-hero-title{font-size:1.3rem}.join-section{margin:1rem -1rem 0;padding:1rem 1rem 0}}.tasks-section{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:0.85rem 1.25rem;margin-bottom:1.25rem}.tasks-section-title{display:flex;align-items:center;gap:0.5rem;width:100%;font-size:1rem;font-weight:600;margin:0;padding:0;color:var(--text);font-family:inherit;background:none;border:none;text-align:left}.tasks-section-title:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:4px}.tasks-section-title svg:first-child{color:var(--primary);flex-shrink:0}.tasks-chevron{color:var(--text-muted) !important}.tasks-count-badge{display:inline-flex;align-items:center;justify-content:center;padding:0 7px;height:20px;border-radius:10px;background:var(--primary);color:#fff;font-size:0.7rem;font-weight:600;line-height:1;white-space:nowrap}.tasks-count-badge.all-done{background:var(--success-dark)}.guest-tasks-list{margin-top:0.75rem;display:flex;flex-direction:column;gap:0.5rem}.guest-task-item{display:flex;align-items:center;justify-content:space-between;gap:0.75rem;padding:0.65rem 0.85rem;border:1px solid var(--border);border-radius:10px;background:var(--bg);transition:border-color 0.2s,background 0.2s}.guest-task-item.task-completed{border-color:var(--success-border);background:var(--success-light)}@media (prefers-color-scheme:dark){}.guest-task-info{display:flex;flex-direction:column;gap:0.15rem;min-width:0;flex:1}.guest-task-title{font-size:0.9rem;font-weight:500;color:var(--text)}.guest-task-desc{font-size:0.8rem;color:var(--text-muted)}.guest-task-action{flex-shrink:0}.guest-task-item:not(.task-completed)[style*="cursor"]{transition:border-color 0.2s,background 0.2s,box-shadow 0.2s}.guest-task-item:not(.task-completed)[style*="cursor"]:hover{border-color:var(--primary);background:var(--primary-light,rgba(91,106,191,0.06));box-shadow:0 0 0 2px rgba(91,106,191,0.10)}.guest-task-item:not(.task-completed)[style*="cursor"]:active{transform:scale(0.985)}.guest-task-upload-icon{display:flex;align-items:center;justify-content:center;width:36px;height:36px;color:var(--primary);opacity:0.5;transition:opacity 0.15s}.guest-task-item:hover .guest-task-upload-icon{opacity:1}/* Erledigte Aufgabe: gruener Strich durch den Titel, Text in Sekundaerfarbe, schlichter gruener Haken ohne
   Kreis (der gefuellte Kreis war zu praesent — 2026-09-08 zurueckgenommen; der Landing-Mock folgt dieser Optik). */
.guest-task-check{display:flex;align-items:center;justify-content:center;width:36px;height:36px;color:var(--success-dark)}.task-completed .guest-task-title{text-decoration:line-through;text-decoration-color:var(--success);text-decoration-thickness:1.5px;color:var(--text-secondary)}
/* ===== Phase 3: Guest-UX Polish ===== */
/* Welcome-Hero: Titel im Display-Font wirken lassen, Description weicher */
.event-hero-title{font-family:var(--font-display);font-weight:700;letter-spacing:-0.022em;font-size:1.85rem;line-height:1.15;text-align:left}
.event-hero-description{text-align:left;font-size:0.95rem;line-height:1.6;color:var(--text-secondary);max-width:520px;margin:0.65rem 0 0}

/* Join-Section: persönlicher framing */
.join-card-header h3{font-family:var(--font-display);font-weight:600;font-size:1.25rem;letter-spacing:-0.015em}
.join-card-header svg{color:var(--accent-warm)}

/* Tasks-Item Hover: leicht warmer Tint statt Primary-only */
.guest-task-item:not(.task-completed)[style*="cursor"]:hover{background:color-mix(in srgb,var(--accent-warm) 8%,var(--bg))}

.gallery-load-more{display:flex;align-items:center;justify-content:center;padding:1.25rem 0;min-height:48px}
.gallery-load-more-spinner{width:24px;height:24px;border:2.5px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:galleryLoadMoreSpin 0.7s linear infinite}
@keyframes galleryLoadMoreSpin{to{transform:rotate(360deg)}}

/* Gast-Begrüßung ist klickbar (Name ändern) — sieht aus wie Text, verrät sich per Stift beim Hover */
.topbar-greeting-btn{background:none;border:none;font-family:inherit;cursor:pointer;padding:0.2rem 0.4rem;border-radius:6px;display:inline-block;white-space:nowrap}
.topbar-greeting-btn::after{content:"";display:inline-block;vertical-align:-1px;margin-left:0.35rem;width:12px;height:12px;background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M12 20h9'/><path d='M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z'/></svg>") no-repeat center/contain;opacity:0.7}
@media (hover:hover){.topbar-greeting-btn:hover{background:rgba(255,255,255,0.15)}}
.topbar-greeting-btn:focus-visible{outline:2px solid rgba(255,255,255,0.9);outline-offset:2px}
.topbar-name-input{margin-left:auto;font:inherit;font-size:0.9rem;padding:0.25rem 0.5rem;border-radius:6px;border:1px solid rgba(255,255,255,0.6);background:rgba(255,255,255,0.15);color:#fff;width:150px;outline:none}@media (hover:none){.topbar-name-input{font-size:16px}}
.topbar-name-input::placeholder{color:rgba(255,255,255,0.6)}
/* Download-Karte: ein Satz Kontext über dem Button (Event beendet) */
.download-card-hint{font-size:0.9rem;color:var(--text-secondary);margin:0 0 0.75rem;line-height:1.5}
/* Foto-Aufgaben: kurze Erklärzeile unter dem Titel */
.guest-tasks-hint{font-size:0.8rem;color:var(--text-muted);margin:0.35rem 0 0;line-height:1.45}
/* Leerzustand der Galerie (Gast) — gleicher Look wie beim Host */
.gallery-empty-state{text-align:center;padding:2rem 1rem;color:var(--text-secondary)}
.gallery-empty-icon-svg{color:var(--primary);opacity:0.35;margin-bottom:0.5rem}
.gallery-empty-text{font-weight:600;color:var(--text);margin-bottom:0.25rem}
.gallery-empty-hint{font-size:0.85rem;color:var(--text-muted)}.gallery-subline{margin:-0.35rem 0 0.9rem;font-size:0.85rem;line-height:1.45;color:var(--text-muted)}
.topbar-name-input.centered{position:absolute;left:50%;transform:translateX(-50%);margin-left:0}
/* Formular-Kappe 440 px (Beitritt, Einwilligung): am Desktop liefen Feld und Buttons ueber die ganze
   880-px-Karte; am Handy greift die Kappe nicht, die Karte ist dort schmaler.
   Upload-/Download-/Standby-Karte (.upload-card) bewusst breiter: 80 % der Karte am Desktop (~660 px),
   mindestens 440 px — 440 px wirkten fuer die Hauptaktionen zu klein (Entscheidung 2026-09-08). */

/* Demo-Seite (/demoevent): Hinweisleiste unter der Topbar + Dialog statt Upload */.demo-bar{position:sticky;top:52px;z-index:99;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:0.4rem 1rem;padding:0.5rem 1rem;background:var(--primary-light);border-bottom:1px solid var(--border);font-size:0.85rem;color:var(--text-secondary);text-align:center}.demo-bar strong{color:var(--text)}.demo-bar-cta{color:var(--primary);font-weight:600;text-decoration:none;white-space:nowrap}@media (hover:hover){.demo-bar-cta:hover{text-decoration:underline}}.demo-modal-text{color:var(--text-secondary);font-size:0.95rem;line-height:1.5;margin:0 0 1rem}.demo-modal-cta{width:100%;margin-bottom:0.5rem}.demo-modal-back{width:100%;justify-content:center}
