Add: München als 3. Wetter-Location + Wetter-Detail-Modal

- München als tertiärer Standort (iris-Akzent) hinzugefügt
- Klick auf WeatherCard öffnet Detail-Modal mit:
  - 24h stündliche Prognose (horizontal scrollbar)
  - 7-Tage-Vorhersage mit Temperaturbalken
  - Wind, Feuchte, Sonnenauf/-untergang
- Backend: 7-Tage statt 3-Tage Forecast, 24 Hourly-Slots pro Standort
- Backend: forecast_3day → forecast Feldname-Konsistenz
- Dashboard: 3-Spalten Wetter-Grid statt 4 (HourlyForecast → Modal)
- Admin: Tertiärer Standort konfigurierbar
- THERMAL Design: iris glow, modal animation, Portal-basiertes Modal

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sam 2026-03-03 01:13:49 +01:00
parent d9626108e6
commit 2f56be835e
13 changed files with 379 additions and 36 deletions

View file

@ -3,15 +3,17 @@ import type { WeatherData } from "../api";
interface WeatherCardProps {
data: WeatherData;
accent: "cyan" | "amber";
accent: "cyan" | "amber" | "iris";
onClick?: () => void;
}
const ACCENT = {
cyan: { strip: "gold", text: "text-gold", glow: "data-glow-gold", tag: "border-gold/30 text-gold bg-gold/5" },
amber: { strip: "mint", text: "text-mint", glow: "data-glow-mint", tag: "border-mint/30 text-mint bg-mint/5" },
iris: { strip: "iris", text: "text-iris", glow: "data-glow-iris", tag: "border-iris/30 text-iris bg-iris/5" },
} as const;
export default function WeatherCard({ data, accent }: WeatherCardProps) {
export default function WeatherCard({ data, accent, onClick }: WeatherCardProps) {
const a = ACCENT[accent];
if (data.error) {
@ -29,7 +31,14 @@ export default function WeatherCard({ data, accent }: WeatherCardProps) {
}
return (
<div className="deck-card corner-marks p-6 animate-fade-in" data-accent={a.strip}>
<div
className="deck-card corner-marks p-6 animate-fade-in cursor-pointer hover:border-base-400 transition-colors"
data-accent={a.strip}
onClick={onClick}
role="button"
tabIndex={0}
onKeyDown={(e) => e.key === "Enter" && onClick?.()}
>
{/* Location tag */}
<div className="mb-5">
<span className={`tag ${a.tag}`}>{data.location}</span>