Première étape
Description courte de la première étape, deux à trois lignes max.
Source de vérité
Tous les composants, variables et animations partagés dans l'écosystème VNCT, dans la nouvelle direction artistique irisée (rose → violet → cyan, glassmorphism, fond animé). Showroom interactif — toggle dark / light et rejoue les animations pour voir le système réagir en direct.
v2.5.0-f9acb3faDémarrage
Le DS v2 est servi sous le chemin versionné /v2/ et consommé de façon centralisée par chaque service VNCT (plus de copie locale). Le paramètre ?v= vient du champ version de /version.json, au format semver-hash (ex. 2.1.1-4f3a9c21) : le hash de contenu change dès qu'un fichier v2 change, donc Cloudflare ne peut plus servir une copie périmée — même sans bump semver. La string est opaque pour les apps : elles la recopient telle quelle.
<link rel="stylesheet" href="https://design.vena.city/v2/vnct-design-system.css?v=2.1.1-4f3a9c21">
<script src="https://design.vena.city/v2/vnct-common.js?v=2.1.1-4f3a9c21"></script>
Exemple documentaire — le hash réel varie à chaque changement des fichiers v2 ; il est récupéré dynamiquement via /version.json, jamais recopié à la main.
Contrat d'intégration complet (helper de version, placeholders, checklist) sur MIGRATION.md.
Section 1
Les tokens visuels qui composent le système : couleurs, typographie, espacements, radius, ombres et easings. Tout dérive de variables CSS résolues à l'exécution selon le thème actif (data-theme) et l'accent (data-accent).
--accent reste une couleur plate (rose en sombre, cyan en clair). La signature irisée rose → violet → cyan est portée par le gradient --gradient-iris et les utilitaires .vnct-iris-text / .vnct-iris-fill / .vnct-iris-border (le titre ci-dessus en est un exemple).
Durées : --duration-fast (150ms) · --duration-normal (250ms) · --duration-slow (400ms)
Section 2
Composants déjà déployés dans l'écosystème VNCT.
Conteneur classique
Avec hover effect
Ce champ est requis.
Animation déclenchée par le bouton Rejouer.
Stagger automatique avec .vnct-stagger sur le parent (jusqu'à 12 enfants).
API : VNCT.Modal.open({ title, body, isHtml?, footer? }) et VNCT.Modal.close(). Esc et clic overlay ferment automatiquement.
« … » et la modale VNCT.Feedback. Toujours supporté (auto-monté), retrait prévu en v3. Voir Chrome applicatif.
Le FAB (Floating Action Button) est monté automatiquement par vnct-common.js sur chaque page. Il propose un menu à trois entrées :
Késako (présentation du service), Signaler un bug et Suggestion.
Les deux derniers ouvrent un formulaire qui pousse vers Sema avec fallback webhook Discord.
Pour personnaliser le contenu de Késako, déclare un <template data-kesako-content> n'importe où dans la page. Son innerHTML sera injecté dans la modal Késako quand l'utilisateur clique. Sans template, un fallback générique s'affiche.
<template data-kesako-content>
<p>Bienvenue sur <strong>MonService</strong> !</p>
<p>Description courte de ce que fait l'outil et comment l'utiliser.</p>
<hr style="margin-top: var(--space-5); border: none; border-top: 1px solid var(--border-default);">
<p style="margin-top: var(--space-4); color: var(--text-secondary); font-weight: var(--font-medium);">🔍 Pour les curieux</p>
<p style="margin-top: var(--space-3); color: var(--text-muted); font-size: var(--text-sm);">
Détails techniques, mentions de l'écosystème, lien vers Atlas, etc.
</p>
<div style="margin-top: var(--space-5); display: flex; justify-content: center;">
<button class="vnct-btn vnct-btn--primary" onclick="VNCT.Modal.close()">Compris !</button>
</div>
</template>
À configurer côté service : VNCT.config.serviceName, VNCT.config.serviceVersion, VNCT.config.devReportUrl.
Tagline du service en une phrase courte et claire.
Logo en clamp(2.5rem, 6vw, 3.75rem), suffixe accent dans <span>. Pattern extrait des services en v1.3.0 — remplace .atlas-hero__logo, .lyra .logo, etc.
D'où vient le nom ?
Lyra est la constellation de la lyre d'Orphée, le musicien légendaire dont la musique transcendait toutes les barrières. Un lien musical sur une plateforme ne devrait pas y rester prisonnier. Lyra prend un lien depuis n'importe quel service de streaming et le rend accessible sur tous les autres. Une musique, un lien, toutes les plateformes. Partage musical universel.
Convention : <em> pour les mots d'inspiration (couleur accent), <strong> pour le nom du service. Pattern unifié — remplace .atlas-lore, .lyra-lore, etc.
Description courte de la première étape, deux à trois lignes max.
Le service prend le relais et fait l'opération principale qui le caractérise.
Résultat final livré à l'utilisateur, avec mention de ce qu'il peut en faire.
Cards numérotées en grille 3 colonnes (1 colonne sur mobile). Container .vnct-steps + items .vnct-step avec __number / __icon / __title / __desc. Pattern extrait de Lyra / Kayros / Calyx en v1.5.0.
Pills horizontales pour énumérer des cas d'usage / publics-cibles. Container .vnct-tags (flex wrap centré) + items .vnct-tag. Pattern extrait de Lyra / Kayros / Calyx / Strata en v1.5.0.
Encart de réassurance — privacy, no-tracking, RGPD, etc. Centré, max 640px de large.
Encart de confiance avec icône SVG centrée + titre + description. .vnct-trust + __icon / __title / __desc. Pattern extrait de Lyra / Myco en v1.5.0.
.vnct-legal n'est pas déprécié et survit à la v3 : il porte l'accès aux mentions légales exigé par l'article 1-1 de la LCEN. Promotion au DS du composant lyra-legal, éprouvé en production sur les pages partagées de Lyra.
Le markup reste statique dans chaque service, copié depuis snippets/legal-links.html : ce bloc n'est délibérément pas injecté par JavaScript depuis design.vena.city, parce qu'une obligation légale ne se délègue pas à un CDN. Le design system ne mutualise que les styles ; la duplication est contrôlée par scripts/audit-legal-links.sh. Le raisonnement complet et les emplacements par famille de page sont dans MIGRATION.md, section « Bloc légal — contrat obligatoire ».
Markup canonique — libellés, ordre, URL et attributs sont normatifs, à copier tel quel :
<footer class="vnct-legal">
<nav class="vnct-legal__links" aria-label="Informations légales">
<a href="https://strata.vena.city/ml" target="_blank" rel="noopener noreferrer">Mentions légales<span class="vnct-sr-only"> (nouvelle fenêtre)</span></a>
<span class="vnct-legal__sep" aria-hidden="true">·</span>
<a href="https://strata.vena.city/pdc" target="_blank" rel="noopener noreferrer">Politique de confidentialité<span class="vnct-sr-only"> (nouvelle fenêtre)</span></a>
<span class="vnct-legal__sep" aria-hidden="true">·</span>
<a href="https://strata.vena.city/cgu" target="_blank" rel="noopener noreferrer">Conditions générales d'utilisation<span class="vnct-sr-only"> (nouvelle fenêtre)</span></a>
</nav>
<p class="vnct-legal__brand">© 2026 Venacity</p>
</footer>
Éléments : .vnct-legal + __links / __sep / __brand. Sous 480 px, les liens passent en colonne et les séparateurs disparaissent. Pour une app qui porte le chrome VNCT, les liens vont dans le menu « … » et non dans ce bloc. Pour une page d'erreur, utiliser la variante à styles embarqués snippets/legal-links-inline.html, qui doit s'afficher même quand l'origine est morte.
Nouveau — 2.1.0
Le nouveau chrome des apps VNCT : un header flottant ancré dans le flux (pas de sticky), un menu overflow « … », un segmented control, une pilule de compte irisée et une modale de feedback unifiée. Ce pattern remplace le FAB, la nav desktop, le header mobile et le footer historiques (désormais dépréciés — voir Section 2, retrait prévu en v3).
Deux variantes. Statique : marque (avec sa partie irisée .vnct-iris-text) + libellé contextuel + une action ghost. Applicative : pilule de compte, pastille de bascule thème et menu « … » fonctionnel. Les headers ci-dessous sont encapsulés dans des cartes de démo — ce n'est pas le vrai header de la page.
Variante statique
Variante applicative — le menu « … » est fonctionnel (clique dessus)
Ancré dans le flux (position: relative), z-index: var(--z-header) (800), padding safe-area. Largeur bornée par .vnct-header__inner (surcharge --vnct-header-max).
Sélecteur façon pilule (role="tablist" + aria-selected). Utilisé en tête de la modale Feedback pour basculer entre les deux modes. Clique pour basculer le segment actif.
Le segment actif porte aria-selected="true" (fond --accent, encre lisible en dark ET light). Roving tabindex géré côté service (ou par la modale Feedback).
Pilule de compte irisée (conventions Cardo). Deux états : bouton « Se connecter » (invite interactive) et badge « Connecté·e » (non interactif, --badge). La forme vient de .vnct-account-chip, la surface irisée + l'encre sombre de .vnct-iris-fill (à composer dans le markup).
Convention Cardo — écriture inclusive obligatoire sur les libellés (« Connecté·e »). Halo irisé au survol sur l'état interactif uniquement ; le badge garde son ombre lavande de repos.
Modale unifiée « Signaler ou proposer » à deux onglets, ouvrable de n'importe où via VNCT.Feedback.open() — y compris sur une page sans header ni menu. Les boutons ci-dessous l'ouvrent en vrai.
VNCT.FAB._handleAction. Options : kind ('bug' | 'suggestion', onglet initial), copy (surcharge partielle des libellés par onglet), context (hook optionnel () => ({ label, data }) qui affiche une case opt-in pour joindre le contexte de la page).
Envoi via VNCT.Sema.submit() (endpoint /api/public/report, fallback webhook Discord). Sur ce showroom aucun devReportUrl n'est configuré : le bouton « Envoyer » ne poste rien (retour d'erreur).
Échelle tokenisée dans :root : les composants n'inventent plus de z-index en dur, ils consomment ces tokens.
| Token | Valeur | Usage |
|---|---|---|
--z-canvas | 0 | Canvas animé du fond (.vnct-bg) |
--z-vignette | 1 | Vignette radiale (body::after) |
--z-content | 2 | Contenu de page (main / nav / header / footer) |
--z-header | 800 | Header flottant + son menu overflow |
--z-fab | 900 | FAB (menu = --z-fab − 1, scrim = − 2) |
--z-modal | 1000 | Modales (.vnct-modal-overlay) |
--z-toast | 2000 | Toasts, au-dessus de tout |
Piège résolu : le header porte --z-header (800), au-dessus du contenu de page (2) — les services retirent leurs hacks z-index: 800 codés en dur (ex. Lyra). Un éventuel écran de login plein écran reste hors de cette échelle, géré par le service concerné.
Section 3
Composants migrés depuis le playground v0.x — disponibles à partir de la v1.0.3 du design system.
Pattern à utiliser quand une liste, une recherche ou une vue est vide. Personnalise le titre, la description et l'action principale selon le contexte.
Composé de vnct-empty__icon, __title et __desc. Ajoute un bouton VNCT en bas si une action est pertinente.
| Service | Status | Version | Domaine |
|---|---|---|---|
| Atlas | Online | v2.1.0 | atlas.vena.city |
| Axis | Online | v1.2.0 | axis.vena.city |
| Sema | Idle | v0.9.3 | sema.vena.city |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.
Texte avec code inline à l'intérieur d'un paragraphe.
// Exemple de bloc de code
const hello = (name) => {
return `Bonjour ${name}`;
};
spin
bounce
glow
float
Section 4
Combinatoire des composants × variantes pour vérifier rapidement la cohérence visuelle.
| Composant | Default | Hover/Active | Disabled | Danger |
|---|---|---|---|---|
| Bouton | ||||
| Pill | Default | Accent | Disabled | Danger |
| Input | ||||
| Status | Neutral | Online | Idle | Offline |
Le Venacity Design System est la source de vérité unique pour tout le styling et le comportement partagé de l'écosystème VNCT (Atlas, Lyra, Kayros, Myco, Calyx, Ostra, Strata, Glyphe, Quasar…).
Cette page est un showroom interactif : explore le sommaire à gauche, joue avec les composants en direct, bascule dark/light pour voir le système réagir.
🔍 Pour les curieux
Tout ce que tu vois ici est servi depuis design.vena.city et chargé par chaque service via ?v=X.Y.Z en cache-busting. Le statut de migration des services consommateurs est dans MIGRATION.md.
Pour proposer un changement, ouvre une PR sur venaciteam/vnct-design-system.