Servizi home, testo promo, fix immagini override e rimozione Antonello

- ServicesGrid: filtra grid !== false come /services (via Small Group, Rehab,
  Holistic Class, Reformer Class dalla griglia Servizi in home)
- promo-eventi: badge "solo per apertura nuova sede Settembre 2026"
- MethodSteps e about: .tcard/.method__circle usano :global(img) così gli
  override <img> di <TImg> (senza cid) ricevono border-radius/object-fit
- about: griglia team a flex centrato, ultima riga incompleta non piu a sinistra
- team: rimosso Antonello D'Alessandro (staff about e homeTeam)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-12 23:01:52 +02:00
parent 3b8983dca5
commit 1b9a3c1343
5 changed files with 18 additions and 9 deletions
+3 -1
View File
@@ -36,7 +36,9 @@ const imgOf = (name: string) => Object.entries(images).find(([p]) => p.includes(
.method__cta { text-align: center; margin-top: 48px; }
.method__row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 30px; text-align: center; position: relative; }
.method__circle { position: relative; width: 150px; height: 150px; margin: 0 auto 20px; border: 1px dashed var(--c-accent-dark); border-radius: 50%; padding: 8px; }
.method__circle img { border-radius: 50%; width: 100%; height: 100%; object-fit: cover; }
/* :global(img) perché gli <img> di override resi da <TImg> non ereditano il cid
del componente: senza questo la regola scoped non li raggiungerebbe. */
.method__circle :global(img) { border-radius: 50%; width: 100%; height: 100%; object-fit: cover; }
.method__circle span { position: absolute; top: -6px; left: -6px; font-family: var(--font-heading); font-size: 2.4rem; color: var(--c-heading); background: var(--c-bg-alt); padding: 0 8px; }
.method__step h3 { font-size: .85rem; text-transform: uppercase; letter-spacing: .14em; }
.method__step p { font-size: .85rem; color: var(--c-text-light); }
+6 -1
View File
@@ -2,6 +2,11 @@
import { services } from '../../data/services';
import { serviceIcons as icons } from '../../data/service-icons';
import T from '../content/T.astro';
// Stessa convenzione di /services: le voci con grid:false (Small Group, Rehab,
// Holistic Class, Reformer Class) sono approfondimenti dei riquadri Training e
// non compaiono nella griglia Servizi.
const gridServices = services.filter((p) => p.grid !== false);
---
<section class="section">
<div class="container">
@@ -10,7 +15,7 @@ import T from '../content/T.astro';
<T tag="home.services.body" as="p" />
</div>
<div class="pgrid">
{services.map((p, i) => (
{gridServices.map((p, i) => (
<a class="pgrid__item" href={`/services/${p.slug}`} data-reveal style={`--reveal-delay:${(i % 3) * 0.15}s`}>
<svg viewBox="0 0 24 24" fill="none" stroke="var(--c-accent-dark)" stroke-width="1.4" width="52" height="52" aria-hidden="true"><path d={icons[p.slug]} /></svg>
<T tag={`service.${p.slug}.title`} as="h3" />
+1 -3
View File
@@ -11,8 +11,6 @@ export const team: Member[] = [
bio: "Trainer Functional & Movement. Laureando in Scienze Motorie, specializzato in running e atletica leggera." },
{ name: "Eleonora Cassani", shortName: "Eleonora", role: "Trainer Planning Manager", founder: false, imageAbout: "team-eleonora-dark", image: "team-eleonora",
bio: "Trainer Planning Manager. Chinesiologa specializzata in attività preventiva e adattata, con focus su allenamento in gravidanza e post-gravidanza." },
{ name: "Antonello DAlessandro", shortName: "Antonello", role: "Trainer Exercise & Health", founder: false, imageAbout: "team-antonello-dark", image: "team-antonello",
bio: "Trainer Exercise & Health. Chinesiologo specializzato in attività preventiva e adattata, Dottore in Osteopatia." },
{ name: "Alice Roda", shortName: "Alice", role: "Trainer Functional & Movement", founder: false, imageAbout: "team-alice-dark",
bio: "Trainer Functional & Movement. Laureanda in Scienze Motorie e Preparatore Atletico. Scienza del movimento e massima cura della persona: un approccio al functional training empatico e accogliente, dove lascolto umano guida e supporta ogni tuo progresso." },
{ name: "Davide Bisagni", shortName: "Davide", role: "Trainer Functional & Movement", founder: false, imageAbout: "team-davide-dark",
@@ -21,4 +19,4 @@ export const team: Member[] = [
bio: "Trainer Pilates, Yoga & Mindfulness. Laureata in Psicologia Clinica e Riabilitazione, insegnante di Pilates, Yoga e Mindfulness, con approccio orientato al benessere e allequilibrio mente-corpo." },
];
export const homeTeam = ["Donata", "Nicola", "Eleonora", "Antonello"];
export const homeTeam = ["Donata", "Nicola", "Eleonora"];
+7 -3
View File
@@ -149,15 +149,19 @@ export const prerender = false;
.conv__cta { text-align: center; font-family: var(--font-heading); letter-spacing: .06em; }
.round-img { max-width: 380px; margin: 30px auto 0; }
.round-img img { border-radius: 50%; aspect-ratio: 1; object-fit: cover; width: 100%; }
.tgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px; }
.tcard img { aspect-ratio: 3/4; object-fit: cover; margin-bottom: 16px; }
/* flex + center così l'ultima riga incompleta (es. staff: 5 membri → 2 nell'ultima riga)
resta centrata invece di appoggiarsi a sinistra. */
.tgrid { display: flex; flex-wrap: wrap; justify-content: center; gap: 40px; }
.tcard { width: calc((100% - 80px) / 3); }
/* :global(img) perché gli <img> di override resi da <TImg> non ereditano il cid. */
.tcard :global(img) { aspect-ratio: 3/4; object-fit: cover; width: 100%; margin-bottom: 16px; }
.tcard h3 { text-transform: lowercase; letter-spacing: .2em; }
.tcard__role { font-size: .8rem; text-transform: uppercase; letter-spacing: .12em; color: var(--c-accent-dark); }
.tcard p { font-size: .9rem; }
@media (max-width: 767px) {
.about-2col,
.tgrid,
.about-img-row { grid-template-columns: 1fr; }
.tcard { width: 100%; }
.about-img-row--reverse { direction: ltr; }
}
</style>
+1 -1
View File
@@ -21,7 +21,7 @@ export const prerender = false;
</section>
<section class="launch">
<div class="badge">solo per il lancio</div>
<div class="badge">solo per apertura nuova sede Settembre 2026</div>
<h1>Il nostro metodo nasce per durare.</h1>
<p class="accent">Per l'apertura, un'eccezione. Solo per poco.</p>
<p class="desc">In-Sanity Lab lavora per percorsi strutturati — trimestrali, semestrali — perché i risultati veri si costruiscono nel tempo. Per la nuova apertura, ci sarà un'eccezione: 5 incontri pensati come un vero mini-percorso, non semplici lezioni sciolte.</p>