Tutte le release del sito e dell'app, in ordine cronologico. Il sito e l'app hanno cicli di rilascio indipendenti: qui sono separati per chiarezza.
Sito · wavyforseafarers.com
index.html v1.5.3
"Allineamento Tema nel drawer mobile"
Nel drawer mobile l'entry "Tema" (button con icona sole/luna + label) appariva spostata a destra rispetto agli altri link (Per chi è, Funzioni, Catalogo, La storia, FAQ): l'icona prima del label spingeva il testo via dal margine sinistro di 22+14=36px.
Fix: flex-direction:row-reverse sul .theme-toggle-drawer — il label "Tema" ora parte dal margine sinistro come gli altri link, l'icona sole/luna è spinta in fondo a destra del bottone come "preview" del tema attivo.
Inoltre display:none condizionale (per stato light/dark/auto) sull'icona inattiva: prima entrambe le icone erano position:relative con una sola visibile via opacity:0, ma lo spazio fantasma da 22px restava nel layout. Ora solo l'icona attiva occupa spazio.
sito · porthole completo + drawer CTA
"Logo porthole identico fra le 4 pagine + pulsante drawer più equilibrato"
Logo footer: le defs SVG #porthole e #porthole-inverse in changelog.html e storia.html erano versioni mockup semplificate (4 cerchi + 1 onda) rispetto all'originale di index.html (cielo dorato, alone coral, 3 onde sovrapposte, 12 dot dei bulloni). Sostituite con le defs complete di index — ora il logo nel topbar e nel footer è identico fra index, funzioni, changelog, storia.
Drawer mobile, pulsante "Scarica gratis" (solo index.html): height 52→56px, border-radius da pill (999px) a var(--radius-lg) (12px). Su width:100% del drawer un pulsante pill stiracchiato sembrava appiattito — radius medium dà al pulsante un look più equilibrato e coerente con la struttura della drawer.
index.html v1.5.1
"Fix vuoto .feat-cta mobile + correzione editoriale Maker box"
Su viewport <640px la card .feat-cta ("Questo è solo l'inizio…") mostrava un vuoto verticale enorme tra testo e bottone "Vedi il catalogo completo". Causa: in flex-direction:column il flex:1 1 300px del .feat-cta-text applicava flex-basis:300px all'altezza, forzando il paragrafo a 300px+ verticali con flex-grow:1 che lo espandeva ulteriormente. Fix: .feat-cta-text { flex:initial } dentro la media query mobile.
Maker box: "Sei cose che non troverai mai dentro l'app, oggi e mai" → "Sei cose che non troverai dentro l'app, né oggi né mai". Corretti gli accenti (negazione correlata né…né con accento acuto, non ne…ne pronome partitivo) e rimosso il primo "mai" ridondante.
index.html v1.5.0
"Bento card alte: asset visivo decorativo"
Le card Studio (bento-hero 2×2) e Carriera digitale (bento-tall 1×2) avevano un vuoto centrale tra titolo e descrizione, dovuto al pattern margin-top:auto sulla <p> in card di altezza forzata dal grid.
Aggiunto blocco decorativo CSS-only tra h3 e <p>: griglia 4×2 di "bandiere ICS" stilizzate per Studio (palette brand: foam/coral/sea/brass su navy-soft), stack di 3 "documenti" impilati e ruotati per Carriera digitale (effetto Seaman's Book).
Visual nascosti sotto 980px: a quel breakpoint il grid passa a 2 colonne e le card non sono più alte.
aria-hidden="true" sui blocchi: invisibili agli screen reader (decorativi).
Round 4 · sito v1.4/1.6/1.1/1.1
"Round 4: polish tecnico, geometrico e grafico"
Scale geometriche e di motion riusabili nei :root (spacing 4→128, radius 4/8/12/pill, shadow sm/md/lg, transition fast/base/slow, topbar-h, focus-ring-w light/dark).
Tipografia coerente fra pagine: line-height body uniformato a 1.6, scala h1/h2 più armonica, letter-spacing eyebrow standard .22em, word-spacing per pause naturali nei testi in maiuscolo.
Geometria: --maxw e --pad unificati, hero/page-hero/footer simmetrici, CTA standardizzata 40px/32px, gap grid armonizzati, scale di radius applicate alle card.
SEO: hreflang it + x-default, meta robots esplicito, og:image:alt su tutte le pagine, JSON-LD Organization referenziabile via @id.
A11y: classe .visually-hidden, aria-expanded sul trigger ⌘K, focus ring 3px in dark, focus visible contrastante sui dot del carosello.
JS: document.write sostituito da DOM API per il preload hero; iubenda widget async; drawer close ora aspetta transitionend invece di setTimeout fisso.
Polish: blockquote storia con quote glyph, .cta-mini:active con scale tattile, safe-area-inset-bottom sulla float CTA mobile, container query 400px sul catalogo.
funzioni.html v1.4.0
"Round 2: self-host fonts, sitemap, OG image"
Self-host Google Fonts in /fonts/ (chiude zona grigia GDPR — no più IP utente a Google USA).
sitemap.xml + robots.txt in root.
og.png 1200×630 per anteprime social, generato da og.html.
funzioni.html v1.3.0
"Round 1: CSS moderno"
<dialog> nativo per command palette ⌘K (showModal/close, no listener Escape manuale).
light-dark() CSS function su tutti i token semantici.
:has() body scroll lock dichiarativo quando il palette è aperto.
Fix bug CSS: graffa orfana dopo html.theme-transitioning *{…}.
index.html v1.2.0
"Round 2: self-host fonts, sitemap, OG image"
Stesso pacchetto self-host + SEO base del catalogo.
Meta og:image ora punta a /og.png reale.
index.html v1.1.0
"Round 1: CSS moderno"
Scroll-driven progress bar via animation-timeline: scroll(root).
@starting-style per entrata drawer mobile e apparizione contenuto FAQ.
light-dark() function (entrambi i temi in un solo :root).
:has() per body scroll lock quando il drawer mobile è aperto.
v1.0.x
"Genesi sito"
Prima versione pushata su Vercel (26 apr 2026).
Dark mode con tema persistente e anti-flash.
Bento Grid per la sezione funzioni.
Hero carousel con screenshot reali (light + dark, AVIF/WebP/JPG via <picture>).
Micro-interactions: porthole logo animato, View Transitions cross-page.