diff --git a/src/pages/promo-eventi/promo.astro b/src/pages/promo-eventi/promo.astro
index bf2ccc5..b4635dd 100644
--- a/src/pages/promo-eventi/promo.astro
+++ b/src/pages/promo-eventi/promo.astro
@@ -114,7 +114,7 @@ const countdownDeadline = ed ? t(tg('countdown.deadline')) : '';
{c.question &&
}
-
+ {c.priceOld && }
{c.unit &&
}
@@ -296,6 +296,16 @@ const countdownDeadline = ed ? t(tg('countdown.deadline')) : '';
.lp .cards-3 { grid-template-columns: repeat(3, 1fr); }
.lp .cards-3 .card { display: flex; flex-direction: column; }
.lp .cards-3 .card .buy { margin-top: auto; }
+
+ /* CARD DELLE EDIZIONI A CINQUE (promo settembre). Cinque non si divide in una griglia a due
+ o a tre colonne senza lasciare un buco in fondo: la griglia è a sei colonne e ogni card ne
+ occupa due, così le ultime due si spostano al centro invece di restare allineate a sinistra
+ con un vuoto accanto. */
+ .lp .cards-5 { grid-template-columns: repeat(6, 1fr); }
+ .lp .cards-5 .card { grid-column: span 2; display: flex; flex-direction: column; }
+ .lp .cards-5 .card .buy { margin-top: auto; }
+ .lp .cards-5 .card:nth-child(4) { grid-column: 2 / span 2; }
+ .lp .cards-5 .card:nth-child(5) { grid-column: 4 / span 2; }
.lp .card .question {
margin: 0 0 14px; font-size: 15px; line-height: 1.4; font-weight: 700; color: #2D2D2D;
}
@@ -343,9 +353,25 @@ const countdownDeadline = ed ? t(tg('countdown.deadline')) : '';
.lp .faq-block.is-open .faq-a { display: block; }
.lp .faq-a .hl { color: #8A6E3F; }
+ /* Sotto i 1000px tre colonne diventano troppo strette per un prezzo e un elenco: le cinque
+ card passano a due per riga (griglia a quattro, span due), con la quinta al centro.
+ Nessun `min-width` a chiudere la fascia in basso: a viewport frazionari (uno zoom del
+ browser dà larghezze come 700,5px) fra 700 e 701 non varrebbe nessuna delle due regole e
+ le card tornerebbero a sei colonne. Ci pensa il blocco ≤700px, che viene dopo e a pari
+ specificità vince. */
+ @media (max-width: 1000px) {
+ .lp .cards-5 { grid-template-columns: repeat(4, 1fr); }
+ .lp .cards-5 .card:nth-child(4) { grid-column: span 2; }
+ .lp .cards-5 .card:nth-child(5) { grid-column: 2 / span 2; }
+ }
+
@media (max-width: 700px) {
.lp .hero, .lp .launch, .lp .why5, .lp .cards-wrap, .lp .faq-wrap { padding-left: 28px; padding-right: 28px; }
.lp .cards { grid-template-columns: 1fr; }
+ /* A una colonna gli span e le collocazioni delle ultime due card lascerebbero righe vuote. */
+ .lp .cards-5 .card,
+ .lp .cards-5 .card:nth-child(4),
+ .lp .cards-5 .card:nth-child(5) { grid-column: auto; }
.lp .countdown .cd-boxes { gap: 6px; }
.lp .countdown .cd-box { min-width: 0; flex: 1; padding: 10px 4px; }
.lp .countdown .cd-num { font-size: 22px; }
diff --git a/tests/promo-edizioni.test.ts b/tests/promo-edizioni.test.ts
index 82a6d14..df5bf9b 100644
--- a/tests/promo-edizioni.test.ts
+++ b/tests/promo-edizioni.test.ts
@@ -8,11 +8,12 @@ describe('edizioneAttiva', () => {
it('sceglie l\'edizione la cui finestra contiene l\'istante', () => {
expect(edizioneAttiva(d('2026-08-15T12:00:00+02:00'))?.id).toBe('agosto-2026');
expect(edizioneAttiva(d('2026-08-25T12:00:00+02:00'))?.id).toBe('bundle-apertura');
+ expect(edizioneAttiva(d('2026-09-10T12:00:00+02:00'))?.id).toBe('settembre-2026');
});
it('fuori da ogni finestra non c\'è edizione attiva', () => {
expect(edizioneAttiva(d('2026-07-15T12:00:00+02:00'))).toBeNull();
- expect(edizioneAttiva(d('2026-09-10T12:00:00+02:00'))).toBeNull();
+ expect(edizioneAttiva(d('2026-09-25T12:00:00+02:00'))).toBeNull();
});
// Il passaggio è il momento in cui il sito cambia da solo: va provato al secondo, e in ora
@@ -22,13 +23,16 @@ describe('edizioneAttiva', () => {
expect(edizioneAttiva(d('2026-08-19T23:59:59+02:00'))?.id).toBe('agosto-2026');
expect(edizioneAttiva(d('2026-08-20T00:00:00+02:00'))?.id).toBe('bundle-apertura');
expect(edizioneAttiva(d('2026-09-04T23:59:59+02:00'))?.id).toBe('bundle-apertura');
- expect(edizioneAttiva(d('2026-09-05T00:00:00+02:00'))).toBeNull();
+ expect(edizioneAttiva(d('2026-09-05T00:00:00+02:00'))?.id).toBe('settembre-2026');
+ expect(edizioneAttiva(d('2026-09-19T23:59:59+02:00'))?.id).toBe('settembre-2026');
+ expect(edizioneAttiva(d('2026-09-20T00:00:00+02:00'))).toBeNull();
});
it('l\'ordine dell\'elenco non cambia il risultato', () => {
const rovescio = [...edizioni].reverse();
expect(edizioneAttiva(d('2026-08-15T12:00:00+02:00'), rovescio)?.id).toBe('agosto-2026');
expect(edizioneAttiva(d('2026-08-25T12:00:00+02:00'), rovescio)?.id).toBe('bundle-apertura');
+ expect(edizioneAttiva(d('2026-09-10T12:00:00+02:00'), rovescio)?.id).toBe('settembre-2026');
});
});
@@ -80,7 +84,8 @@ describe('i testi di ogni edizione esistono', () => {
'countdown.unit.days', 'countdown.unit.hours', 'countdown.unit.minutes', 'countdown.unit.seconds'];
if (e.launch) base.push('launch.badge', 'launch.title', 'launch.accent', 'launch.desc', 'why5.text');
for (const c of e.cards) {
- base.push(`card.${c.id}.eyebrow`, `card.${c.id}.title`, `card.${c.id}.price`, `card.${c.id}.price-old`);
+ base.push(`card.${c.id}.eyebrow`, `card.${c.id}.title`, `card.${c.id}.price`);
+ if (c.priceOld) base.push(`card.${c.id}.price-old`);
if (c.featured) base.push(`card.${c.id}.badge`);
if (c.unit) base.push(`card.${c.id}.unit`);
if (c.question) base.push(`card.${c.id}.question`);