/* Annual festivals (/festivals/): night-sky hero with confetti and a year wheel whose hand points at this month; month,
   region and kind filters; cards grouped by month. No inline styles (CSP); positions are fixed classes. */
.fs-page{--fs-night:#1b0f24;--fs-pink:#ff5fa2;--fs-gold:#ffd34d}
.fs-cat-music{--fs-c:#8a6fd1}.fs-cat-culture{--fs-c:#d9a441}.fs-cat-food{--fs-c:#c8553d}.fs-cat-cars{--fs-c:#c8102e}.fs-cat-arts{--fs-c:#2a9d8f}
.fs-cat-parade{--fs-c:#ff8a3d}.fs-cat-sports{--fs-c:#3d6e8a}.fs-cat-pride{--fs-c:#ff5fa2}.fs-cat-seasonal{--fs-c:#5c8a4e}

.fs-hero{position:relative;background:radial-gradient(120% 120% at 70% 20%,#3b1950 0,var(--fs-night) 55%);color:var(--paper);overflow:hidden;isolation:isolate;padding-block:56px 64px}
.fs-hero-photos{position:absolute;inset:0;z-index:-2;display:grid;grid-template-columns:repeat(5,1fr);opacity:.22;filter:saturate(1.2)}
.fs-hero-photos img{width:100%;height:100%;object-fit:cover;animation:fs-breathe 20s ease-in-out infinite alternate}
.fs-hero::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,#1b0f24f2 0,#1b0f24c8 45%,#1b0f2470 100%)}
.fs-confetti{position:absolute;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.fs-confetti i{position:absolute;top:-20px;width:8px;height:14px;border-radius:2px;opacity:.85;animation:fs-fall 9s linear infinite}
.fs-confetti i:nth-child(3n){background:var(--fs-pink)}.fs-confetti i:nth-child(3n+1){background:var(--fs-gold)}.fs-confetti i:nth-child(3n+2){background:var(--lime)}
.fs-confetti i:nth-child(1){left:4%;animation-delay:0s}.fs-confetti i:nth-child(2){left:11%;animation-delay:-3s;animation-duration:11s}.fs-confetti i:nth-child(3){left:19%;animation-delay:-6s}
.fs-confetti i:nth-child(4){left:27%;animation-delay:-1.5s;animation-duration:12s}.fs-confetti i:nth-child(5){left:34%;animation-delay:-7.5s}.fs-confetti i:nth-child(6){left:42%;animation-delay:-4s;animation-duration:10s}
.fs-confetti i:nth-child(7){left:49%;animation-delay:-8.5s}.fs-confetti i:nth-child(8){left:57%;animation-delay:-2.5s;animation-duration:13s}.fs-confetti i:nth-child(9){left:64%;animation-delay:-5.5s}
.fs-confetti i:nth-child(10){left:71%;animation-delay:-0.8s;animation-duration:11s}.fs-confetti i:nth-child(11){left:78%;animation-delay:-6.8s}.fs-confetti i:nth-child(12){left:85%;animation-delay:-3.6s;animation-duration:12s}
.fs-confetti i:nth-child(13){left:91%;animation-delay:-7s}.fs-confetti i:nth-child(14){left:97%;animation-delay:-2s;animation-duration:10s}
.fs-hero-inner{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,420px);gap:50px;align-items:center}
.fs-hero .eyebrow{color:var(--fs-gold);margin:0 0 14px}
.fs-hero h1{font-size:clamp(48px,7vw,104px);font-weight:900;letter-spacing:-.05em;line-height:.92;margin:0 0 20px}
.fs-lead{max-width:600px;font-size:17px;line-height:1.7;margin:0;color:#e6dcef}
.fs-stats{display:flex;gap:30px;margin:28px 0 0;flex-wrap:wrap}
.fs-stats div{display:flex;flex-direction:column-reverse;border-top:2px solid var(--fs-gold);padding-top:8px;min-width:140px}
.fs-stats dt{font-size:10px;letter-spacing:1.3px;text-transform:uppercase;color:#c9b8d8}.fs-stats dd{margin:0 0 4px;font-size:42px;font-weight:900;letter-spacing:-1.5px;line-height:1}

/* Year wheel */
.fs-wheel{position:relative;aspect-ratio:1;width:100%}
.fs-wheel svg{position:absolute;inset:0;width:100%;height:100%}
.fs-wheel-ring{fill:none;stroke:#ffffff26;stroke-width:2;stroke-dasharray:4 7;transform-origin:center;animation:fs-spin 80s linear infinite}
.fs-wheel-hand line{animation:fs-hand 1.2s cubic-bezier(.3,1.4,.4,1) both}
.fs-wheel-hand line{stroke:var(--fs-gold);stroke-width:4;stroke-linecap:round}.fs-wheel-hand circle{fill:var(--fs-gold)}
.fs-wheel-month{position:absolute;transform:translate(-50%,-50%);display:grid;place-items:center;width:64px;height:64px;border-radius:50%;background:#ffffff12;border:1px solid #ffffff30;text-decoration:none;color:var(--paper);transition:transform .25s,background .25s,color .25s}
.fs-wheel-month b{font-size:12px;line-height:1;text-transform:uppercase;letter-spacing:.5px}.fs-wheel-month small{font-size:10px;color:#d6c6e6;line-height:1}
.fs-wheel-month:hover,.fs-wheel-month:focus-visible{transform:translate(-50%,-50%) scale(1.15);background:var(--fs-pink);color:#fff}
.fs-wheel-month.fs-now{background:var(--fs-gold);color:var(--fs-night);border-color:var(--fs-gold)}.fs-wheel-month.fs-now small{color:var(--fs-night)}
.fs-wheel-month.fs-picked{box-shadow:0 0 0 4px var(--lime)}
.fs-wm-1{left:60.35%;top:11.36%}.fs-wm-2{left:78.28%;top:21.72%}.fs-wm-3{left:88.64%;top:39.65%}.fs-wm-4{left:88.64%;top:60.35%}.fs-wm-5{left:78.28%;top:78.28%}.fs-wm-6{left:60.35%;top:88.64%}.fs-wm-7{left:39.65%;top:88.64%}.fs-wm-8{left:21.72%;top:78.28%}.fs-wm-9{left:11.36%;top:60.35%}.fs-wm-10{left:11.36%;top:39.65%}.fs-wm-11{left:21.72%;top:21.72%}.fs-wm-12{left:39.65%;top:11.36%}
.fs-wheel-center{position:absolute;left:50%;top:62%;transform:translate(-50%,0);margin:0;text-align:center}
.fs-wheel-center span{display:block;font-size:10px;letter-spacing:1.4px;text-transform:uppercase;color:#c9b8d8}.fs-wheel-center b{font-size:22px;color:var(--fs-gold)}
.fs-wheel-month.fs-pulse{animation:fs-pulse .9s ease-out}

/* List */
.fs-list{padding-block:40px 20px}
.fs-filters{display:grid;gap:4px;position:sticky;top:0;z-index:5;background:var(--paper);padding-block:10px;border-bottom:1px solid var(--line)}
.fs-filters .event-chips{margin-bottom:6px}
.fs-count{font-size:12px;color:var(--muted);margin:16px 0 0}.fs-count b{font-size:26px;color:var(--ink);letter-spacing:-1px;margin-right:4px}
.fs-month{padding-top:26px;scroll-margin-top:150px}
.fs-month-title{display:flex;align-items:baseline;gap:12px;margin:0 0 16px;font-size:clamp(34px,4.5vw,64px);letter-spacing:-2.5px;line-height:1}
.fs-month-title small{font-size:14px;letter-spacing:0;background:var(--ink);color:var(--paper);padding:4px 9px;border-radius:14px}
.fs-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.fs-card>a{display:flex;flex-direction:column;height:100%;text-decoration:none;background:#f7f5ed;border:1px solid var(--line);transition:transform .25s,box-shadow .25s,border-color .25s}
.fs-card>a:hover{transform:translateY(-4px) rotate(-.4deg);box-shadow:0 14px 26px #1b0f2430;border-color:var(--ink)}
.fs-card-media{position:relative;display:grid;place-items:center;aspect-ratio:1.55;overflow:hidden;background:linear-gradient(135deg,var(--fs-c,var(--fs-night)),var(--fs-night))}
.fs-card-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .6s}.fs-card>a:hover .fs-card-media img{transform:scale(1.06)}
.fs-card-media>b{font-size:64px;font-weight:900;color:#ffffffe0}
.fs-card-months{position:absolute;left:10px;bottom:10px;display:flex;gap:4px;flex-wrap:wrap}
.fs-card-months i{font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;background:var(--fs-gold);color:var(--fs-night);padding:4px 7px;border-radius:10px}
.fs-card-body{display:flex;flex-direction:column;gap:6px;padding:13px 14px 16px}
.fs-card-kind{font-size:9px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;color:var(--fs-c,var(--muted))}
.fs-card-body strong{font-size:18px;line-height:1.2;letter-spacing:-.4px}
.fs-card-when{font-size:12px;line-height:1.5;color:#4a544c}
.fs-card-next{align-self:flex-start;font-size:11px;font-weight:700;background:var(--lime);padding:5px 8px}
.fs-card-free{align-self:flex-start;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;border:1px solid var(--ink);padding:4px 7px}
.fs-card-closed{align-self:flex-start;font-size:10px;font-weight:700;text-transform:uppercase;background:var(--ink);color:var(--paper);padding:4px 7px}
.fs-closed .fs-card-media img{filter:sepia(.8) grayscale(.4)}
.fs-js .fs-card{opacity:0;transform:translateY(16px);transition:opacity .5s,transform .5s}.fs-js .fs-card.fs-in{opacity:1;transform:none}

@keyframes fs-breathe{from{transform:scale(1.03)}to{transform:scale(1.12)}}
@keyframes fs-fall{0%{transform:translateY(-20px) rotate(0)}100%{transform:translateY(720px) rotate(540deg)}}
@keyframes fs-spin{to{transform:rotate(360deg)}}
@keyframes fs-hand{from{stroke-dasharray:0 200}to{stroke-dasharray:200 0}}
@keyframes fs-pulse{0%{box-shadow:0 0 0 0 #ffd34dcc}100%{box-shadow:0 0 0 22px #ffd34d00}}
.fs-offscreen .fs-confetti i,.fs-offscreen .fs-hero-photos img,.fs-offscreen .fs-wheel-ring{animation-play-state:paused}

@media (max-width:1100px){.fs-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.fs-hero-inner{grid-template-columns:1fr}.fs-wheel{max-width:380px;margin-inline:auto}}
@media (max-width:760px){.fs-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.fs-wheel-month{width:50px;height:50px}.fs-wheel-month b{font-size:10px}.fs-filters{position:static}}
@media (max-width:480px){.fs-grid{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){.fs-page *,.fs-page *::before,.fs-page *::after{animation:none!important;transition:none!important}.fs-js .fs-card{opacity:1;transform:none}.fs-confetti{display:none}}
