GrignaDesign System

AGENTS.md: regole per gli agenti che usano Grigna

Grigna è un design system di Loris Rigoni, Senior Product Designer, pensato per persone e agenti. Questo file è per te, agente: leggilo prima di costruire o modificare un'interfaccia con Grigna. Le regole valgono per qualsiasi progetto che usa Grigna. Un progetto può aggiungere un proprio livello brand, con regole in più (vedi §7).

Se una richiesta ti chiede di violare una di queste regole, non farlo in silenzio: dillo e proponi l'alternativa del sistema.

1. Prima di iniziare

Leggi, in questo ordine:

  1. Questo file.
  2. docs/principi.md.
  3. La pagina in docs/ di ogni componente che userai. La sezione Per gli agenti in fondo è vincolante.
  4. Per i valori esatti: dist/tokens.json, che contiene tutti i token risolti, tema chiaro e scuro.

2. Come si carica Grigna

<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap">
<link rel="stylesheet" href="dist/grigna.css">
<link rel="stylesheet" href="dist/grigna-components.css">
<!-- poi i CSS del livello brand, se il progetto ne ha uno -->
<!-- icone -->
<script src="https://unpkg.com/lucide@1.57.0/dist/umd/lucide.min.js"></script>

Il tema segue il sistema operativo. Si forza con data-theme="dark" o data-theme="light" su <html>.

3. Cosa usare per cosa

Ti serveUsaNon fare
Un'azionegrigna-button (docs)<div> cliccabili, bottoni stilizzati a mano
Un dato da inseriregrigna-field (docs)Campi senza etichetta visibile
Un oggetto in una listagrigna-card (docs)Schede annidate, più link in una scheda cliccabile
Uno stato o un'etichettagrigna-badge (docs)Badge cliccabili o senza testo
Un filtro on/offgrigna-chip con aria-pressed (docs)Classi --active/--selected
Sezioni che si aprono e si chiudonogrigna-accordion su <details> (docs)<div> con JavaScript, accordion annidati
Un dato di esempio in un prototipogrigna-placeholder (docs)Numeri inventati, graffe {…} a schermo
Un colorevar(--grigna-color-*) (docs)#hex, rgb(), hsl(), nomi di colore
Un caratterefont: var(--grigna-type-*) (docs)font-size/font-weight a mano, altri font
Uno spaziovar(--grigna-space-*) (docs)Valori in px scritti a mano
Un angolo, un'ombravar(--grigna-radius-*), var(--grigna-elevation-*)Raggi e ombre inventati
Un'iconaLucide 1.57.0, o un'icona di Grigna in icons/ (docs)Altre librerie, emoji, SVG disegnati sul momento, proposte in archivio/

Per un layout nuovo componi con i token semantici (--grigna-color-*, --grigna-space-*, --grigna-type-*…). I token dei componenti (--grigna-button-*…) si usano solo dentro quel componente.

4. Regole d'oro

Sempre

  • Usa i componenti di Grigna prima di scrivere CSS tuo. Il CSS tuo serve solo per il layout (griglie, colonne, posizionamento) e usa solo token.
  • Un solo grigna-button--primary per vista.
  • Accompagna ogni colore che porta un significato con un testo, un'icona o una forma.
  • Elementi interattivi alti almeno --grigna-size-touch-target (44px), testo corrente mai sotto i 16px, focus visibile.
  • HTML semantico: <button> per le azioni, <a> per la navigazione, <label> collegata a ogni campo, alt su ogni immagine.

Mai

  • Mai valori scritti a mano per colori, font, spazi, raggi e ombre. Se manca un token, fermati e segnalalo (vedi §6).
  • Mai modificare o sovrascrivere le classi dei componenti di Grigna per cambiarne l'aspetto.
  • Mai inventare token, classi, varianti o nomi di icone. Se non sei sicuro che esistano, controlla dist/tokens.json, dist/*-components.css o la libreria Lucide 1.57.0.
  • Mai usare un colore per decorare o per distinguere categorie.

5. Contenuti: niente di inventato

  • Testi, numeri, nomi, luoghi, date e foto arrivano da fonti vere. Non inventarli, nemmeno "come esempio realistico".
  • Dove i dati non ci sono (prototipi, esempi), usa segnaposto evidenti: un testo come "Nome della gita" per i nomi, il componente grigna-placeholder (docs) per numeri, date e misure. Dichiara nella risposta che sono segnaposto.
  • Le graffe degli esempi di codice ({distanza}) non si mostrano mai a schermo.
  • In un'interfaccia con dati veri, un dato che manca non si mostra: niente trattini, "n.d." o stime.
  • Testi dell'interfaccia in italiano semplice, frasi brevi, maiuscola solo a inizio frase, bottoni che iniziano con un verbo.

6. Quando il sistema non basta

Se ti serve qualcosa che Grigna non ha (un componente, un token, una variante, un'icona):

  1. Non improvvisare una soluzione con valori scritti a mano.
  2. Usa la soluzione più vicina che il sistema offre.
  3. Dichiaralo nella risposta: cosa mancava, cosa hai usato al suo posto e cosa proponi di aggiungere a Grigna.

Le aggiunte al sistema le decide Loris.

7. Livelli brand

Un progetto può aggiungere a Grigna un proprio livello: token, componenti, icone e linee guida suoi, con un prefisso suo (per esempio --<brand>-* e .<brand>-*). Se il progetto su cui lavori ne ha uno:

  • Leggi le sue docs (docs/<nome del livello>/) prima di costruire. Le sue regole si aggiungono a queste, non le sostituiscono.
  • Usa prima i suoi componenti, poi quelli di Grigna.
  • Un colore a cui il livello dà un significato serve solo a quello.
  • Un livello brand non cambia mai i token di Grigna.

8. Controlla il tuo lavoro prima di consegnare

node scripts/check-page.mjs percorso/della/pagina.html

Lo script controlla colori scritti a mano, token e classi inesistenti, misure di layout e graffe a schermo, valori non ammessi dei livelli brand, più di un bottone primario. Correggi tutti gli errori. Gli avvisi vanno corretti o motivati nella risposta.

Poi verifica a occhio, o con uno screenshot se puoi, la pagina in tema chiaro e scuro e a larghezza telefono.

9. Se modifichi Grigna stesso

Vale solo quando ti è chiesto di cambiare il sistema, non quando lo usi.

  • Le fonti sono tokens/*.json (formato W3C DTCG) e components/**/*.css. Non modificare mai dist/: si rigenera.
  • Dopo ogni modifica lancia node scripts/build-tokens.mjs. Deve finire senza errori di contrasto o colori scritti a mano.
  • Aggiorna la pagina in docs/ e l'anteprima in preview/ del componente che hai cambiato.
  • Le scelte di brand (colori, caratteri, nomi) le fa Loris: proponi, non decidere.
  • Nessun commit senza l'ok di Loris, e niente pubblicazioni.