Modifiche chieste dal cliente il 17 agosto

Il documento MODIFICHE_PER_SITO.pdf porta cinque cose.

1. "Small Group" si chiama "Personalized Training Group". Il nome vive anche
   nel database dei contenuti, dove `resolveContent` legge prima della copia
   nel codice: `scripts/testi-17-agosto.mjs` aggiorna le 19 righe rimaste,
   una volta sola, correggendo anche gli articoli ("Lo Small Group" -> "Il
   Personalized Training Group"). Lo slug della scheda resta `small-group`:
   cambiarlo romperebbe i link gia' girati su WhatsApp.

2. Dalla pagina Servizi le card instradano dove serve. "One to One" apre la
   vista Training con One to One, Personalized Training Group e Rehab;
   "Class" quella con Holistic e Reformer. Le viste sono `/training/<vista>`;
   una vista inventata e' 404, non l'elenco intero, altrimenti un indirizzo
   rotto continuerebbe a sembrare buono.

3. La Performance Class non si eroga piu': la scheda che la spiegava
   risponde 404, la card "Class" resta in griglia. Con la scheda e' caduta la
   tabella prezzi, che era solo sua.

4. Il Check-up racconta Base e Avanzato: trafiletto nuovo nella card e
   sezione "Check-up Avanzato" nella scheda, con la Wellness Tower e i cinque
   punti. Il calendario delle class si apre ora anche dalla card Class in
   griglia e dalla scheda Reformer, oltre che da Holistic.

5. "Promo ed eventi" diventa una pagina di scelta: le promozioni restano su
   /promo-eventi/promo, l'inaugurazione del 19 settembre sta su
   /promo-eventi/eventi. Il testo dice che il programma della giornata manca
   ancora, ed e' editabile dal pannello.

Corretti due link del footer che portavano a schede inesistenti
(`/services/personal-training` non e' mai stato uno slug).

181 test verdi (157 + 24 nuovi), build ok, `astro check` invariato.
This commit is contained in:
2026-08-18 17:06:05 +02:00
parent 69bd17a296
commit 3741ce34ac
14 changed files with 566 additions and 47 deletions
+56
View File
@@ -0,0 +1,56 @@
---
import Base from '../../layouts/Base.astro';
import PageHero from '../../components/PageHero.astro';
import T from '../../components/content/T.astro';
import { t } from '../../lib/content';
import { edizioneAttiva } from '../../data/promo-edizioni';
export const prerender = false;
// Chi entra da «Promo ed eventi» sceglie: le promozioni in corso oppure gli eventi del
// centro (chiesto dal cliente il 17/08/2026). Erano la stessa pagina, e chi cercava
// l'inaugurazione finiva in mezzo ai prezzi dei pacchetti.
//
// Il bottone delle promo dice se ce n'è davvero una in corso: mandare su una pagina che
// risponde «nessuna promozione» senza averlo detto prima è un giro a vuoto.
const ed = edizioneAttiva(new Date());
// La pagina cambia contenuto col passare del tempo (l'edizione promo scade da sola): una
// copia in cache la congelerebbe a com'era.
Astro.response.headers.set('Cache-Control', 'no-store');
---
<Base title={t('promo-eventi.meta.title')} description={t('promo-eventi.meta.description')}>
<PageHero title={t('promo-eventi.hero.title')} />
<section class="section">
<div class="container">
<div class="section-heading">
<T tag="promo-eventi.intro" as="p" />
</div>
<div class="scelta">
<a class="scelta__card" href="/promo-eventi/promo">
<T tag="promo-eventi.promo.label" as="h2" />
<T tag="promo-eventi.promo.desc" as="p" />
{!ed && <T tag="promo-eventi.promo.nessuna" as="p" class="scelta__nota" />}
<span class="btn">{t('promo-eventi.promo.cta')}</span>
</a>
<a class="scelta__card scelta__card--dark" href="/promo-eventi/eventi">
<T tag="promo-eventi.eventi.label" as="h2" />
<T tag="promo-eventi.eventi.desc" as="p" />
<span class="btn btn--light">{t('promo-eventi.eventi.cta')}</span>
</a>
</div>
</div>
</section>
</Base>
<style>
.scelta { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; }
.scelta__card { display: flex; flex-direction: column; align-items: flex-start; gap: 14px; padding: 48px 40px; background: #fff; box-shadow: 0 6px 24px rgba(0,0,0,.08); text-decoration: none; transition: transform .3s ease, box-shadow .3s ease; }
.scelta__card:hover { transform: translateY(-4px); box-shadow: 0 12px 32px rgba(0,0,0,.12); }
.scelta__card :global(h2) { text-transform: uppercase; letter-spacing: .12em; font-size: 1.4rem; margin: 0; }
.scelta__card :global(p) { font-size: .92rem; margin: 0; }
.scelta__card .btn { margin-top: auto; }
.scelta__card--dark { background: var(--c-dark); }
.scelta__card--dark :global(h2), .scelta__card--dark :global(p) { color: #efe9e3; }
.scelta__nota { font-family: var(--font-heading); font-size: .72rem; letter-spacing: .14em; text-transform: uppercase; color: var(--c-accent-dark); }
@media (max-width: 767px) { .scelta { grid-template-columns: 1fr; } .scelta__card { padding: 34px 26px; } }
</style>