#!/usr/bin/env python3
"""Build the navigable site skeleton described in `sito new.pdf`."""

from html import escape
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]

SERVICES = [
    {
        "slug": "stampa-offset-digitale",
        "name": "Stampa offset e digitale",
        "eyebrow": "STAMPA",
        "title": "Ogni tiratura, la tecnologia giusta.",
        "lead": "Offset per i grandi numeri, digitale per velocità, personalizzazione e piccole quantità. Un unico reparto segue il lavoro fino alla consegna.",
        "hero": "assets/img/services/v4-brand-ai/offset/hero-press-1600.webp",
        "topics": [
            ("Stampa offset", "Colore costante e costo copia ottimizzato sulle alte tirature."),
            ("Stampa digitale", "Piccole quantità, dati variabili e tempi rapidi."),
            ("Cataloghi ed editoria", "Libri, brochure e riviste con rilegature professionali."),
            ("Packaging e cartotecnica", "Astucci, scatole e supporti progettati sulla fustella."),
        ],
        "gallery": [
            ("Cataloghi", "assets/img/services/v4-brand-ai/offset/gallery-catalogue-800.webp"),
            ("Brochure", "assets/img/services/v4-brand-ai/offset/gallery-brochure-800.webp"),
            ("Libri", "assets/img/services/v4-brand-ai/offset/gallery-books-800.webp"),
            ("Coordinati", "assets/img/services/v4-brand-ai/offset/gallery-coordinated-800.webp"),
            ("Packaging", "assets/img/services/v4-brand-ai/offset/gallery-packaging-800.webp"),
        ],
    },
    {
        "slug": "etichette-autoadesive",
        "name": "Etichette autoadesive",
        "eyebrow": "ETICHETTE",
        "title": "L’etichetta giusta, sul prodotto giusto.",
        "lead": "Materiali, adesivi e finiture vengono scelti sul contesto reale: scaffale, freddo, umidità, olio o uso industriale.",
        "hero": "assets/img/services/v4-brand-ai/labels/hero-roll-1600.webp",
        "topics": [
            ("Vino e spirits", "Carte pregiate, foil e resistenza al ghiaccio-secchiello."),
            ("Food e beverage", "Adesivi food-safe, per congelati e ambienti umidi."),
            ("Cosmetica", "Trasparenze no-label e precisione sui piccoli formati."),
            ("Industria", "Supporti tecnici resistenti a oli, solventi e abrasione."),
        ],
        "gallery": [
            ("Vino", "assets/img/services/v4-brand-ai/labels/gallery-wine-800.webp"),
            ("Food", "assets/img/services/v4-brand-ai/labels/gallery-food-800.webp"),
            ("Cosmetica", "assets/img/services/v4-brand-ai/labels/gallery-cosmetics-800.webp"),
            ("Industria", "assets/img/services/v4-brand-ai/labels/gallery-industrial-800.webp"),
            ("No-label", "assets/img/services/v4-brand-ai/labels/gallery-clear-800.webp"),
        ],
    },
    {
        "slug": "modulistica-carta-chimica",
        "name": "Modulistica e carta chimica",
        "eyebrow": "MODULISTICA",
        "title": "Documenti che scorrono senza fermare il lavoro.",
        "lead": "Moduli continui, copie autocopianti, progressivi e perforazioni preparati sul flusso gestionale del cliente.",
        "hero": "assets/img/services/v4-brand-ai/continuous/hero-fanfold-1600.webp",
        "topics": [
            ("DDT e bolle", "Formati compatibili con gestionali, stampanti e archivi."),
            ("Copie multiple", "Originale e copie autocopianti in una sola passata."),
            ("Progressivi e barcode", "Numerazioni e zone variabili per la tracciabilità."),
            ("Perforazioni", "Trascinamento costante e strappo pulito."),
        ],
        "gallery": [
            ("Copie multiple", "assets/img/services/v4-brand-ai/continuous/gallery-multipart-800.webp"),
            ("DDT", "assets/img/services/v4-brand-ai/continuous/gallery-ddt-800.webp"),
            ("Progressivi", "assets/img/services/v4-brand-ai/continuous/gallery-progressives-800.webp"),
            ("Strati", "assets/img/services/v4-brand-ai/continuous/gallery-layers-800.webp"),
            ("Trattori", "assets/img/services/v4-brand-ai/continuous/gallery-tractor-800.webp"),
        ],
    },
    {
        "slug": "grande-formato",
        "name": "Grande formato",
        "eyebrow": "GRANDE FORMATO",
        "title": "La tua idea, a misura di spazio.",
        "lead": "Manifesti, banner, vetrofanie, pannelli e allestimenti per rendere il marchio riconoscibile anche da lontano.",
        "hero": None,
        "topics": [
            ("Manifesti e affissioni", "Formati visibili, leggibili e pronti per l’installazione."),
            ("Banner e teli", "Supporti per esterno, eventi e comunicazione temporanea."),
            ("Vetrine e adesivi", "Grafiche sagomate per vetri, pareti e superfici."),
            ("Pannelli e allestimenti", "Soluzioni rigide per punti vendita, fiere e showroom."),
        ],
        "gallery": [("Affissioni", None), ("Banner", None), ("Vetrine", None), ("Pannelli", None), ("Allestimenti", None)],
    },
    {
        "slug": "idee-promozionali",
        "name": "Idee promozionali",
        "eyebrow": "PROMOZIONALE",
        "title": "Il tuo marchio, tra le mani dei clienti.",
        "lead": "Tote bag, penne, quaderni, tazze e welcome kit coordinati: oggetti utili che continuano a comunicare nel tempo.",
        "hero": "assets/img/services/v4-brand-ai/promo/hero-welcome-1600.webp",
        "topics": [
            ("Welcome kit", "Set coordinati per clienti, eventi e nuovi collaboratori."),
            ("Ufficio", "Quaderni, penne e accessori per la presenza quotidiana."),
            ("Everyday", "Borracce, tazze e oggetti progettati per essere usati."),
            ("Regalo aziendale", "Confezioni e nobilitazioni all’altezza del gesto."),
        ],
        "gallery": [
            ("Welcome kit", "assets/img/services/v4-brand-ai/promo/gallery-kit-800.webp"),
            ("Ufficio", "assets/img/services/v4-brand-ai/promo/gallery-desk-800.webp"),
            ("Everyday", "assets/img/services/v4-brand-ai/promo/gallery-drinkware-800.webp"),
            ("Tote bag", "assets/img/services/v4-brand-ai/promo/gallery-tote-800.webp"),
            ("Regalo", "assets/img/services/v4-brand-ai/promo/gallery-gift-800.webp"),
        ],
    },
    {
        "slug": "grafica-digitale",
        "name": "Grafica e digitale",
        "eyebrow": "INCHIOSTRO DIGITALE",
        "title": "Dall’idea al file, su carta e su schermo.",
        "lead": "Identità, impaginazione, prestampa e strumenti digitali costruiti come un unico sistema riconoscibile.",
        "hero": "assets/img/services/v4-brand-ai/design/hero-identity-1600.webp",
        "topics": [
            ("Logo e identità", "Marchio, palette, caratteri e regole d’uso."),
            ("Impaginazione", "Cataloghi, brochure, libri e materiali editoriali."),
            ("Esecutivi e prestampa", "File tecnicamente pronti per la macchina."),
            ("Servizi digitali", "Social kit, template e adattamenti per il web."),
        ],
        "gallery": [
            ("Identità", "assets/img/services/v4-brand-ai/design/gallery-identity-800.webp"),
            ("Editoriale", "assets/img/services/v4-brand-ai/design/gallery-editorial-800.webp"),
            ("Packaging", "assets/img/services/v4-brand-ai/design/gallery-packaging-800.webp"),
            ("Digitale", "assets/img/services/v4-brand-ai/design/gallery-digital-800.webp"),
            ("Prestampa", "assets/img/services/v4-brand-ai/design/gallery-prepress-800.webp"),
        ],
    },
]


def media(src: str | None, alt: str, class_name: str = "site-media") -> str:
    if src:
        return f'<img class="{class_name}" src="{src}" alt="{escape(alt)}" loading="lazy" decoding="async">'
    return f'<div class="{class_name} site-placeholder" role="img" aria-label="Immagine da fornire: {escape(alt)}"><span>IMMAGINE DA FORNIRE</span><b>{escape(alt)}</b></div>'


def head(title: str, description: str = "San Marco Vision — tipografia dal 1961.") -> str:
    return f'''<!DOCTYPE html>
<html lang="it" class="no-js">
<head>
<meta charset="UTF-8">
<link rel="icon" href="data:,">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{escape(title)} | San Marco Vision</title>
<meta name="description" content="{escape(description)}">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/base.css">
<link rel="stylesheet" href="assets/css/v1.css">
<link rel="stylesheet" href="assets/css/site-skeleton.css">
</head>'''


def header(inner: bool = False) -> str:
    prefix = "sito-home.html" if inner else ""
    return f'''<a class="skip-link" href="#main">Vai al contenuto</a>
<div class="crop-frame" aria-hidden="true"><span></span><span></span><span></span><span></span></div>
<header class="site-header" data-header>
  <div class="wrap nav-inner">
    <a class="brand" href="sito-home.html" aria-label="San Marco Vision, home"><span class="reg" aria-hidden="true"></span><span><b>SAN MARCO VISION</b><small>TIPOGRAFIA · DAL 1961</small></span></a>
    <nav class="nav-links" data-nav aria-label="Navigazione principale">
      <a href="{prefix}#servizi">Servizi</a>
      <a href="servizi-v5-three.html">Guida servizi</a>
      <a href="{prefix}#perche">Perché noi</a>
      <a href="{prefix}#come-lavoriamo">Come lavoriamo</a>
      <a href="{prefix}#servizi">Lavori</a>
      <a class="btn btn--accent nav-cta-mobile" href="#preventivo">Preventivo gratuito</a>
    </nav>
    <a class="btn btn--accent nav-cta-desktop" href="#preventivo">Preventivo gratuito</a>
    <button class="nav-toggle" data-nav-toggle aria-label="Apri menu" aria-expanded="false"><span></span></button>
  </div>
</header>'''


def footer() -> str:
    links = "".join(f'<a href="sito-servizio-{s["slug"]}.html">{escape(s["name"])}</a>' for s in SERVICES)
    return f'''<footer class="site-footer"><div class="wrap"><div class="foot-grid">
  <div class="foot-brand"><b>SAN MARCO VISION</b><p>Tipografia storica di Pordenone. Dal 1961 diamo forma alle idee.</p><span class="fsc"><span class="reg" aria-hidden="true"></span> Carta certificata FSC®</span></div>
  <div><h4>Servizi</h4>{links}</div>
  <div><h4>Navigazione</h4><a href="sito-home.html#perche">Perché noi</a><a href="servizi-v5-three.html">Guida servizi</a><a href="#preventivo">Preventivo</a></div>
  <div><h4>Contatti</h4><p>Via della Stampa 12<br>33170 Pordenone (PN)</p><a href="tel:+390434000000">+39 0434 000000</a><a href="mailto:preventivi@sanmarcovision.com">preventivi@sanmarcovision.com</a></div>
</div><div class="foot-bottom"><span>© <span data-year>2026</span> San Marco Vision</span><span>Pordenone · dal 1961</span></div></div></footer>
<script src="assets/js/common.js" defer></script>
<script src="assets/js/site-skeleton.js" defer></script>'''


def cta(selected: str = "Progettazione grafica") -> str:
    options = "".join(f'<option{(" selected" if s["name"] == selected else "")}>{escape(s["name"])}</option>' for s in SERVICES)
    return f'''<section class="site-cta" id="preventivo"><div class="wrap site-cta__grid">
  <div><span class="eyebrow"><span class="reg" aria-hidden="true"></span> PREVENTIVO GRATUITO · 24H</span><h2>Vuoi farti riconoscere davvero?</h2><p>Una buona idea merita una veste all’altezza. Il primo preventivo è gratuito e senza impegno.</p><div class="site-cta__actions"><a class="btn btn--wa" href="https://wa.me/390000000000">WhatsApp diretto</a><a class="btn btn--ghost" href="mailto:preventivi@sanmarcovision.com">Scrivici via email</a></div></div>
  <div class="form-card"><div class="cmyk-bar" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i></div><form data-mock novalidate><div class="form-grid">
    <div class="field"><label for="nome">Nome e azienda</label><input id="nome" name="nome" required placeholder="Mario Rossi · Azienda Srl"></div>
    <div class="field-row"><div class="field"><label for="email">Email</label><input id="email" name="email" type="email" required placeholder="nome@azienda.it"></div><div class="field"><label for="tel">Telefono</label><input id="tel" name="tel" type="tel" placeholder="+39 ..."></div></div>
    <div class="field"><label for="tipo">Cosa ti serve</label><select id="tipo" name="tipo">{options}</select></div>
    <div class="field"><label for="msg">Descrivi il progetto</label><textarea id="msg" name="messaggio" placeholder="Cosa ti serve, tempi e quantità…"></textarea></div>
    <button class="btn btn--accent" type="submit">Invia richiesta · risposta in 24h</button><p class="form-mini">Niente spam. Usiamo i dati solo per il preventivo.</p>
  </div><div class="form-status" role="status"><span class="reg" aria-hidden="true"></span><h3>Richiesta inviata<span data-status-name></span>!</h3><p>Ti ricontattiamo entro 24 ore. Demo: nessun invio reale.</p></div></form></div>
</div></section>'''


def service_card(service: dict, index: int) -> str:
    visual = media(service["hero"], service["name"], "site-service-card__media")
    return f'''<a class="site-service-card" href="sito-servizio-{service["slug"]}.html"><span class="site-service-card__index">{index:02d} / SERVIZIO</span><div class="site-service-card__visual">{visual}</div><h3>{escape(service["name"])}</h3><p>{escape(service["lead"])}</p><span class="site-arrow">Apri il servizio →</span></a>'''


def home_page() -> str:
    cards = "".join(service_card(s, i) for i, s in enumerate(SERVICES, 1))
    return f'''{head("Home", "Stampa, etichette, modulistica, grande formato, idee promozionali e grafica digitale.")}
<body class="site-skeleton site-home">{header()}
<main id="main">
<section class="site-home-hero">
  <video autoplay muted loop playsinline poster="video/hero-side-poster.jpg" aria-hidden="true"><source src="video/hero-main.mp4" type="video/mp4"></video><div class="site-home-hero__veil"></div>
  <div class="wrap site-home-hero__content"><span class="eyebrow">TIPOGRAFIA · PORDENONE · DAL 1961</span><h1>L’evoluzione della <mark>stampa</mark>, la cura di ogni dettaglio, dal 1961.</h1><p>Uniamo innovazione e tradizione per dare forma, colore e valore a ogni tuo progetto.</p><div class="hero-actions"><a class="btn btn--accent" href="#preventivo">Inizia il tuo progetto</a><a class="btn btn--ghost" href="#servizi">Guarda i lavori</a></div></div>
  <figure class="site-home-hero__corner"><img src="video/hero-side-poster.jpg" alt="Dettaglio del reparto stampa"><figcaption>Dettaglio · stampa</figcaption></figure>
</section>

<section class="site-home-services wrap" id="servizi"><div class="site-section-head"><div><span class="eyebrow"><span class="reg" aria-hidden="true"></span> §04 — SERVIZI OFFERTI</span><h2>Tutto quello che possiamo stampare per te.</h2></div><p>I nostri servizi principali, dalla stampa alla progettazione.</p></div><div class="site-service-cards">{cards}</div></section>

<section class="site-why" id="perche"><div class="wrap site-why__grid"><div><span class="eyebrow"><span class="reg" aria-hidden="true"></span> §02 — PERCHÉ SAN MARCO VISION</span><h2>65 anni di mani esperte.<br>Macchine d’<em>ultima generazione</em>.</h2><p>Dal 1961 stampiamo a Pordenone. Tre generazioni di tipografi, un solo standard: ciò che approvi è esattamente ciò che ricevi.</p><ul id="come-lavoriamo"><li>Prova colore certificata: nessuna sorpresa in consegna.</li><li>Offset, digitale e grande formato sotto lo stesso tetto.</li><li>Carta certificata FSC® e processi a basso impatto.</li><li>Un referente unico, dal preventivo alla consegna.</li></ul></div><div class="site-why__visual"><video muted loop playsinline poster="video/hero-side-poster.jpg" data-hover-play><source src="video/hero-side.mp4" type="video/mp4"></video><span>REPARTO STAMPA · PORDENONE</span></div></div></section>

<section class="site-capabilities wrap"><div class="site-section-head"><div><span class="eyebrow"><span class="reg" aria-hidden="true"></span> §01 — COSA STAMPIAMO</span><h2>Tutto ciò che serve per farti notare.</h2></div><p>Un’unica tipografia per ogni esigenza, dalla singola copia alle grandi tirature.</p></div><div class="site-capabilities__grid">
  <article><span>01</span><h3>Stampa Offset</h3><p>Tirature alte, colore costante e costo per copia che scende.</p></article><article><span>02</span><h3>Stampa Digitale</h3><p>Piccole tirature e dati variabili, pronte anche in giornata.</p></article><article><span>03</span><h3>Grande Formato</h3><p>Manifesti, banner, vetrofanie e pannelli.</p></article><article><span>04</span><h3>Packaging</h3><p>Scatole e astucci progettati su misura.</p></article><article><span>05</span><h3>Editoria</h3><p>Libri, riviste e cataloghi rilegati a regola d’arte.</p></article><article><span>06</span><h3>Etichette</h3><p>Materiali e adesivi per ogni prodotto.</p></article><article><span>07</span><h3>Allestimenti</h3><p>Espositori e supporti che raccontano il brand.</p></article><article><span>08</span><h3>Prestampa</h3><p>File e prove colore verificati prima di stampare.</p></article>
</div></section>

<section class="site-proof wrap" aria-label="I numeri di San Marco Vision"><div><b>65</b><span>anni di mestiere</span></div><div><b>12.000+</b><span>progetti / anno</span></div><div><b>1.200+</b><span>clienti soddisfatti</span></div><div><b>24h</b><span>risposta al preventivo</span></div></section>
<section class="site-logos" aria-label="Clienti"><div class="wrap"><span class="eyebrow">MARCHI CHE HANNO SCELTO SAN MARCO VISION</span><div class="site-logo-track" data-logo-track><div class="site-logo"><img src="bic-logo-png_seeklogo-19121.png" alt="BIC"></div><div class="site-logo site-logo--placeholder">CLIENTE 02</div><div class="site-logo site-logo--placeholder">CLIENTE 03</div><div class="site-logo site-logo--placeholder">CLIENTE 04</div><div class="site-logo site-logo--placeholder">CLIENTE 05</div><div class="site-logo site-logo--placeholder">CLIENTE 06</div></div></div></section>
{cta()}
</main>{footer()}</body></html>'''


def service_page(service: dict) -> str:
    topics = "".join(
        f'<a href="sito-approfondimento-{service["slug"]}-{("schede" if i % 2 == 0 else "galleria")}.html"><span>{i+1:02d}</span><h3>{escape(title)}</h3><p>{escape(copy)}</p><b>Approfondisci →</b></a>'
        for i, (title, copy) in enumerate(service["topics"])
    )
    preview = "".join(f'<div>{media(src, title, "site-route-preview__image")}<span>{escape(title)}</span></div>' for title, src in service["gallery"][:3])
    hero_media = media(service["hero"], service["name"], "site-service-hero__image")
    return f'''{head(service["name"], service["lead"])}
<body class="site-skeleton site-service" data-service="{service["slug"]}">{header(True)}<main id="main">
<section class="site-service-hero wrap"><p class="breadcrumb"><a href="sito-home.html#servizi">Servizi</a> / <b>{escape(service["name"])}</b></p><div class="site-service-hero__grid"><div><span class="eyebrow"><span class="reg" aria-hidden="true"></span> SERVIZIO — {escape(service["eyebrow"])}</span><h1>{escape(service["title"])}</h1><p>{escape(service["lead"])}</p><div class="hero-actions"><a class="btn btn--accent" href="#preventivo">Richiedi il preventivo</a><a class="btn btn--ghost" href="#panoramica">Scopri le possibilità</a></div></div><figure>{hero_media}</figure></div></section>
<section class="site-service-topics wrap" id="panoramica"><div class="site-section-head"><div><span class="eyebrow"><span class="reg" aria-hidden="true"></span> POSSIBILITÀ</span><h2>Un servizio, diversi percorsi.</h2></div><p>Clicca sui moduli per aprire una pagina di approfondimento.</p></div><div class="site-topic-grid">{topics}</div></section>
<section class="site-route-pair wrap"><a class="site-route-card" href="sito-approfondimento-{service["slug"]}-schede.html"><span class="eyebrow">TIPO 01 · SCHEDE</span><h2>Confronta applicazioni e soluzioni.</h2><div class="site-route-preview site-route-preview--grid">{preview}</div><b>Apri l’approfondimento a schede →</b></a><a class="site-route-card site-route-card--dark" href="sito-approfondimento-{service["slug"]}-galleria.html"><span class="eyebrow">TIPO 02 · GALLERIA</span><h2>Esplora esempi e lavorazioni.</h2><div class="site-route-preview site-route-preview--row">{preview}</div><b>Apri la galleria →</b></a></section>
<section class="site-sectors wrap"><div class="site-section-head"><div><span class="eyebrow"><span class="reg" aria-hidden="true"></span> AMBITI</span><h2>Una struttura pronta per i contenuti finali.</h2></div><p>Questi moduli riprendono la griglia settori indicata nel PDF.</p></div><div class="site-sector-grid">{''.join(f'<article><span class="reg" aria-hidden="true"></span><h3>{escape(t)}</h3><p>{escape(c)}</p></article>' for t,c in service["topics"])}</div></section>
{cta(service["name"])}</main>{footer()}</body></html>'''


def detail_cards_page(service: dict) -> str:
    cards = "".join(f'<article class="site-detail-card">{media(src, title, "site-detail-card__image")}<div><span>{i+1:02d}</span><h2>{escape(title)}</h2><p>{escape(service["topics"][i % len(service["topics"])][1])}</p><a href="#preventivo">Richiedi informazioni →</a></div></article>' for i,(title,src) in enumerate(service["gallery"]))
    return f'''{head(f'{service["name"]} — approfondimento a schede')}
<body class="site-skeleton site-detail site-detail--cards">{header(True)}<main id="main"><section class="site-detail-head wrap"><p class="breadcrumb"><a href="sito-home.html">Home</a> / <a href="sito-servizio-{service["slug"]}.html">{escape(service["name"])}</a> / <b>Schede</b></p><span class="eyebrow">APPROFONDIMENTO · TIPO 01</span><h1>{escape(service["name"])}:<br>schede immagine e testo.</h1><p>Struttura verticale per confrontare applicazioni, prodotti o lavorazioni con immagini e informazioni dedicate.</p></section><section class="site-detail-grid wrap">{cards}</section>{cta(service["name"])}</main>{footer()}</body></html>'''


def detail_gallery_page(service: dict) -> str:
    cards = "".join(f'<figure class="site-gallery-card">{media(src, title, "site-gallery-card__image")}<figcaption><span>{i+1:02d}</span><h2>{escape(title)}</h2><p>{escape(service["topics"][i % len(service["topics"])][1])}</p></figcaption></figure>' for i,(title,src) in enumerate(service["gallery"]))
    return f'''{head(f'{service["name"]} — approfondimento a galleria')}
<body class="site-skeleton site-detail site-detail--gallery">{header(True)}<main id="main"><section class="site-gallery-head"><div class="wrap"><p class="breadcrumb"><a href="sito-home.html">Home</a> / <a href="sito-servizio-{service["slug"]}.html">{escape(service["name"])}</a> / <b>Galleria</b></p><span class="eyebrow">APPROFONDIMENTO · TIPO 02</span><h1>{escape(service["name"])}:<br>esempi in sequenza.</h1><p>Struttura orizzontale per mostrare collezioni, varianti o realizzazioni mantenendo immagini e didascalie leggibili.</p><div class="site-gallery-controls"><button type="button" data-gallery-prev aria-label="Precedente">←</button><button type="button" data-gallery-next aria-label="Successiva">→</button></div></div><div class="site-gallery-track" data-gallery-track tabindex="0">{cards}</div></section><section class="site-gallery-note wrap"><span class="eyebrow">COME USARLA</span><h2>Una pagina dedicata quando le immagini devono spiegare il servizio.</h2><p>Le schede tecniche, le FAQ e la richiesta di preventivo possono essere aggiunte sotto la galleria senza cambiare il modello.</p></section>{cta(service["name"])}</main>{footer()}</body></html>'''


def write(path: str, content: str) -> None:
    (ROOT / path).write_text(content, encoding="utf-8")


def connect_existing_guide() -> None:
    """Point the existing interactive guide at the assembled skeleton."""
    replacements = {
        "v1-hero-fullwidth-angolo.html": "sito-home.html",
        "servizio-stampa-offset-v4-brand-ai.html": "sito-servizio-stampa-offset-digitale.html",
        "servizio-etichette-autoadesive-v4-brand-ai.html": "sito-servizio-etichette-autoadesive.html",
        "servizio-articoli-promozionali-v4-brand-ai.html": "sito-servizio-idee-promozionali.html",
        "servizio-modulo-continuo-v4-brand-ai.html": "sito-servizio-modulistica-carta-chimica.html",
        "servizio-progettazione-grafica-v4-brand-ai.html": "sito-servizio-grafica-digitale.html",
    }
    for relative in ("servizi-v5-three.html", "assets/js/services-v5-three/recommender.mjs"):
        path = ROOT / relative
        content = path.read_text(encoding="utf-8")
        for old, new in replacements.items():
            content = content.replace(old, new)
        path.write_text(content, encoding="utf-8")


write("sito-home.html", home_page())
for item in SERVICES:
    write(f'sito-servizio-{item["slug"]}.html', service_page(item))
    write(f'sito-approfondimento-{item["slug"]}-schede.html', detail_cards_page(item))
    write(f'sito-approfondimento-{item["slug"]}-galleria.html', detail_gallery_page(item))
connect_existing_guide()
