- {g.plans.map((p) => (
-
+ {g.plans.map((p, i) => (
+
{p.monthly}€
al mese, semestrale
{p.entries} {p.entries === 1 ? 'ingresso settimanale' : 'ingressi settimanali'}
{p.note}
{p.installments}
{p.best}
-
Acquista
+
Acquista
))}
@@ -79,20 +98,27 @@ const others = programs.filter((p) => p.slug !== program.slug);
.prog { display: grid; grid-template-columns: 2.2fr 1fr; gap: 60px; }
.prog__features { padding-left: 20px; display: grid; gap: 8px; margin-bottom: 30px; }
.prog__features li::marker { color: var(--c-accent); }
+ .prog__img { width: 100%; height: auto; margin-bottom: 30px; }
.prog__faq details { border-top: 1px solid #e4ded6; padding-block: 14px; }
.prog__faq summary { cursor: pointer; font-family: var(--font-heading); font-size: .85rem; letter-spacing: .08em; color: var(--c-heading); }
.prog__side h3 { font-size: .85rem; text-transform: uppercase; letter-spacing: .16em; margin-top: 30px; }
- .prog__side a { text-decoration: none; color: var(--c-text); }
- .prog__side a:hover { color: var(--c-accent-dark); }
+ .prog__cat { font-family: var(--font-heading); font-size: .72rem; letter-spacing: .18em; text-transform: uppercase; color: var(--c-text); margin-bottom: 10px; }
+ .prog__other { display: flex; align-items: center; gap: 14px; text-decoration: none; color: var(--c-text); margin-bottom: 14px; font-family: var(--font-heading); font-size: .78rem; letter-spacing: .14em; text-transform: uppercase; }
+ .prog__other:hover { color: var(--c-accent-dark); }
+ .prog__icon { display: inline-flex; align-items: center; justify-content: center; width: 48px; height: 48px; background: var(--c-accent); color: #fff; flex-shrink: 0; }
.price__group { border-top: 1px solid #ddd5ca; padding-block: 18px; }
.price__group summary { cursor: pointer; font-family: var(--font-heading); letter-spacing: .12em; text-transform: uppercase; font-size: .85rem; color: var(--c-heading); }
.price__row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 30px; margin-top: 30px; }
- .price__card { background: #fff; padding: 36px 28px; text-align: center; }
- .price__amount { font-family: var(--font-heading); font-size: 2.6rem; color: var(--c-heading); margin: 0; }
- .price__per { color: var(--c-text-light); font-size: .8rem; }
- .price__entries { font-family: var(--font-heading); text-transform: uppercase; letter-spacing: .1em; font-size: .82rem; color: var(--c-heading); }
- .price__card p { margin-bottom: 6px; font-size: .85rem; }
- .price__best { font-weight: 600; color: var(--c-accent-dark); }
- .price__card .btn { margin-top: 16px; }
+ /* Card colorate come nel Figma: tan / taupe / dark, testo bianco, prezzo grande */
+ .price__card { padding: 44px 28px; text-align: center; color: #fff; }
+ .price__card--tan { background: var(--c-accent); }
+ .price__card--taupe { background: #6b5d5b; }
+ .price__card--dark { background: var(--c-dark); }
+ .price__card .price__amount { font-family: var(--font-heading); font-size: clamp(2.6rem, 4.7vw, 4rem); font-weight: 500; color: #fff; margin: 0; line-height: 1.1; }
+ .price__card .price__per { font-family: var(--font-heading); text-transform: uppercase; letter-spacing: .18em; font-size: .68rem; opacity: .85; margin-bottom: 22px; }
+ .price__card .price__entries { font-family: var(--font-heading); text-transform: uppercase; letter-spacing: .1em; font-size: .82rem; border-top: 1px solid rgba(255,255,255,.25); padding-top: 18px; }
+ .price__card p { margin-bottom: 6px; font-size: .82rem; }
+ .price__card .price__best { font-weight: 700; text-transform: uppercase; letter-spacing: .08em; font-size: .8rem; }
+ .price__card .btn { margin-top: 18px; }
@media (max-width: 991px) { .prog { grid-template-columns: 1fr; } .price__row { grid-template-columns: 1fr; } }
diff --git a/src/pages/programs/index.astro b/src/pages/programs/index.astro
index d2446df..90f0530 100644
--- a/src/pages/programs/index.astro
+++ b/src/pages/programs/index.astro
@@ -1,11 +1,15 @@
---
import Base from '../../layouts/Base.astro';
import PageHero from '../../components/PageHero.astro';
+import { Image } from 'astro:assets';
+import type { ImageMetadata } from 'astro';
import { programs } from '../../data/programs';
+const images = import.meta.glob<{ default: ImageMetadata }>('../../assets/img/program-*.jpg', { eager: true });
+const imgOf = (slug: string) => Object.entries(images).find(([p]) => p.includes(`program-${slug}.`))?.[1]?.default;
export const prerender = true;
---
-
+
@@ -13,12 +17,19 @@ export const prerender = true;
Questi sono i programmi delle classi di Insanity Lab selezionati per voi. Abbiamo scelto i migliori percorsi per offrirvi un'esperienza di allenamento completa e mirata.
- {programs.map((p) => (
-
- {p.title}
- {p.subtitle}
- {p.excerpt}
- Per saperne di più →
+ {programs.map((p, i) => (
+
+ {imgOf(p.slug) && (
+
+
+
+ )}
+
+
{p.title}
+
{p.subtitle}
+
{p.excerpt}
+
Per saperne di più →
+
))}
@@ -27,11 +38,16 @@ export const prerender = true;