diff --git a/src/data/content-seed.ts b/src/data/content-seed.ts
index 2e73bb1..6175548 100644
--- a/src/data/content-seed.ts
+++ b/src/data/content-seed.ts
@@ -320,7 +320,7 @@ export const contentSeed: SeedEntry[] = [
// Card 1 — One to One
T('promo.card.1.eyebrow', 'Personal training', []),
T('promo.card.1.title', 'One to One'),
- T('promo.card.1.price', '163 €', []),
+ T('promo.card.1.price', '200 €', []),
T('promo.card.1.price-old', '300 €', []),
T('promo.card.1.unit', '5 incontri', []),
T('promo.card.1.feature.1', 'Screening iniziale, definizione dei tuoi obiettivi'),
@@ -331,7 +331,7 @@ export const contentSeed: SeedEntry[] = [
T('promo.card.2.badge', 'Più scelto', []),
T('promo.card.2.eyebrow', 'Personal training', []),
T('promo.card.2.title', 'Small Group'),
- T('promo.card.2.price', '110 €', []),
+ T('promo.card.2.price', '125 €', []),
T('promo.card.2.price-old', '220 €', []),
T('promo.card.2.unit', '5 incontri', []),
T('promo.card.2.feature.1', 'Screening iniziale, definizione dei tuoi obiettivi'),
@@ -341,7 +341,7 @@ export const contentSeed: SeedEntry[] = [
// Card 3 — Reformer
T('promo.card.3.eyebrow', 'Pilates class', []),
T('promo.card.3.title', 'Reformer'),
- T('promo.card.3.price', '100 €', []),
+ T('promo.card.3.price', '115 €', []),
T('promo.card.3.price-old', '140 €', []),
T('promo.card.3.unit', '5 incontri', []),
T('promo.card.3.feature.1', 'Core, postura e mobilità su macchina Reformer'),
@@ -350,14 +350,23 @@ export const contentSeed: SeedEntry[] = [
// Card 4 — Holistic class
T('promo.card.4.eyebrow', 'Holistic class', []),
T('promo.card.4.title', 'Pilates Mat, Mobility, Yoga'),
- T('promo.card.4.price', '50 €', []),
+ T('promo.card.4.price', '75 €', []),
T('promo.card.4.price-old', '100 €', []),
T('promo.card.4.unit', '5 incontri', []),
T('promo.card.4.feature.1', 'Mobilità articolare, respirazione, equilibrio'),
T('promo.card.4.feature.2', 'Da solo, o integrato nei tuoi allenamenti'),
T('promo.card.4.feature.3', 'Adatto a tutti i livelli'),
+ // Countdown alla scadenza della promo. `deadline` è una data ISO con offset: la pagina la
+ // legge, la confronta col tempo del browser e nasconde tutto il blocco quando è passata
+ // (o se il valore non è una data valida). Editabile dal pannello per la finestra successiva.
+ T('promo.countdown.label', 'La promo scade tra', []),
+ T('promo.countdown.deadline', '2026-08-19T23:59:59+02:00', []),
+ T('promo.countdown.unit.days', 'giorni', []),
+ T('promo.countdown.unit.hours', 'ore', []),
+ T('promo.countdown.unit.minutes', 'minuti', []),
+ T('promo.countdown.unit.seconds', 'secondi', []),
// Nota validità
- T('promo.validity-note', 'Disponibile solo per l\'apertura · Valido entro 2 mesi dal primo incontro e comunque non oltre il 1° dicembre 2026', []),
+ T('promo.validity-note', 'Promo valida dal 1° al 19 agosto 2026 · Incontri validi entro 2 mesi dal primo incontro e comunque non oltre il 1° dicembre 2026', []),
// FAQ — le risposte usano il segnaposto {{whatsapp}}, sostituito a runtime con global.whatsapp
T('promo.faq.title', 'Tutto quello che vuoi sapere prima di acquistare.'),
T('promo.faq.1.q', 'Come funziona il pacchetto a incontri per One to One e Small Group?'),
diff --git a/src/lib/db.ts b/src/lib/db.ts
index 24f0a27..23fe5af 100644
--- a/src/lib/db.ts
+++ b/src/lib/db.ts
@@ -177,6 +177,21 @@ export function createDb(path?: string): Database.Database {
const updPromoTx = db.transaction(() => { for (const [tag, oldV, newV] of PROMO_FRECCE) upd02.run(newV, tag, oldV); });
updPromoTx();
+ // Listino promo agosto 2026 (finestra 1–19 agosto): nuovi prezzi comunicati dal cliente e nota
+ // di validità con le date. I prezzi barrati (price-old) restano invariati. UPDATE guardato dal
+ // vecchio valore → idempotente e non sovrascrive eventuali ritocchi fatti dal pannello.
+ const PROMO_AGOSTO_2026: [string, string, string][] = [
+ ['promo.card.1.price', '163 €', '200 €'],
+ ['promo.card.2.price', '110 €', '125 €'],
+ ['promo.card.3.price', '100 €', '115 €'],
+ ['promo.card.4.price', '50 €', '75 €'],
+ ['promo.validity-note',
+ "Disponibile solo per l'apertura · Valido entro 2 mesi dal primo incontro e comunque non oltre il 1° dicembre 2026",
+ 'Promo valida dal 1° al 19 agosto 2026 · Incontri validi entro 2 mesi dal primo incontro e comunque non oltre il 1° dicembre 2026'],
+ ];
+ const updAgostoTx = db.transaction(() => { for (const [tag, oldV, newV] of PROMO_AGOSTO_2026) upd02.run(newV, tag, oldV); });
+ updAgostoTx();
+
// Il servizio "Performance Class" torna a chiamarsi solo "Class" (titolo card /services,
// H1 pagina dettaglio, link footer). Inverte la precedente normalizzazione Class→Performance
// Class. Guardato dal vecchio valore → idempotente, non tocca eventuali modifiche del pannello.
diff --git a/src/pages/promo-eventi.astro b/src/pages/promo-eventi.astro
index 5ee9c3a..ce053b9 100644
--- a/src/pages/promo-eventi.astro
+++ b/src/pages/promo-eventi.astro
@@ -21,6 +21,10 @@ const faqs = [1, 2, 3, 4, 5, 6];
// Numero WhatsApp centralizzato: le risposte FAQ contengono il segnaposto {{whatsapp}}
// che qui viene sostituito col valore del tag globale, così si aggiorna in un punto solo.
const wa = t('global.whatsapp');
+// Scadenza della promo (tag editabile dal pannello, formato ISO con offset). Viene solo passata
+// al client: è il JS a decidere se mostrare il countdown, perché il confronto va fatto col tempo
+// del visitatore e non con quello del render (la pagina è SSR ma può essere servita da cache).
+const countdownDeadline = t('promo.countdown.deadline');
---