Le problème avec les classes

Prenons un exemple concret. Tu veux styliser un bouton de soumission. Dans un framework utilitaire, tu écris quelque chose comme :

<button class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
  Envoyer
</button>

C'est fonctionnel. Mais tu n'as pas écrit du HTML — tu as écrit du CSS déguisé en attribut. La sémantique est noyée sous la présentation.

Avec Peels :

<button type="submit">Envoyer</button>

Les layers comme architecture

Peels est organisé en sept couches CSS :

@layer reset, tokens, contract, theme, base, elements, a11y;

Chaque couche a une responsabilité distincte. Les tokens définissent les valeurs brutes. Le contrat mappe vers les rôles sémantiques --peels-*. Le thème surcharge l'identité selon le contexte. Base stylise les conventions HTML transverses. Elements contient les éléments et leurs fallbacks locaux. A11y garantit l'accessibilité.

Personnaliser sans casser

Les variables --peels-* sont les seuls points de contact officiels. Tu ne surcharges jamais les tokens bruts — tu surcharges les rôles UI.

--peels-text-body
La couleur du corps de texte.
--peels-gap-section
L'espacement entre sections — toutes s'alignent automatiquement.
--peels-component-radius
Le rayon de coin global des composants.