Synthèse automatique
Fournit le mode d'emploi du système d'icônes Material Symbols v3 à police variable : import CDN ou auto-hébergement, classes de taille, axes FILL/wght/GRAD/opsz et intégration aux jetons de couleur du projet.
Points forts
- Couvre les quatre axes de la police variable (remplissage, graisse, grade, taille optique) avec des classes utilitaires prêtes à l'emploi
- Décrit à la fois l'import depuis Google Fonts et une procédure d'auto-hébergement hors ligne en woff2
- Relie les icônes aux jetons de couleur du projet (couleurs sémantiques, héritage, états) plutôt qu'à des valeurs codées en dur
- Fournit un barème de tailles cohérent, y compris un dimensionnement fluide via les échelles Utopia
Limites
- Le fichier fourni s'interrompt au niveau de la section « Interactive Icons » : les parties sur les icônes interactives et les animations sont absentes
- L'accessibilité des boutons icône seule n'est pas traitée ici, seulement renvoyée à la skill ux-accessibility
- Les noms d'icônes sont des ligatures textuelles : une faute de frappe affiche le mot en clair au lieu de signaler une erreur
À utiliser dès qu'il faut ajouter ou styliser des icônes Material Symbols dans une interface (boutons, navigation, indicateurs d'état) avec les bons axes et les bonnes couleurs.
À éviter si le projet n'utilise pas Material Symbols ou si vous cherchez des règles d'accessibilité et d'animation des icônes, qui relèvent d'autres skills.
Analyse de sécurité
SûrThis is a pure styling reference document for the Material Symbols variable icon font. It contains no shell commands, no credential handling, no obfuscated payloads, and no instructions that weaken safety mechanisms. The only external touchpoints are a public font CDN import and a well-known download URL, which are standard practice for web fonts. Risk is minimal.
- •No executable commands; declared tools are limited to Read/Write/Edit/Glob/Grep (no Bash, no network access).
- •References external assets: a Google Fonts CDN @import and fonts.google.com download link — informational only, browser-side font loading, no data exfiltration.
- •Writes are limited to documentation-described CSS/HTML snippets under project paths (e.g. css/styles/icons.css); no destructive or overwrite-prone operations.
Exemples
Ajoute une icône Material Symbols « save » dans mon bouton d'enregistrement, en taille md et avec la couleur on-primary du thème.Donne-moi le HTML et le CSS pour afficher l'icône « favorite » en version remplie, poids 600, taille optique 40, et explique l'effet de chaque axe.Remplace l'import Google Fonts de Material Symbols par un @font-face auto-hébergé en woff2 pour un usage hors ligne.name: material-symbols-v3 description: Material Symbols v3 variable icon font system. Use when adding icons to buttons, navigation, status indicators, or any UI element. Provides 2,500+ icons with fill, weight, grade, and optical size axes. Integrates with project color tokens. allowed-tools: Read, Write, Edit, Glob, Grep
Material Symbols v3
Material Design 3 icon system using variable fonts. This project uses Material Symbols Outlined loaded from Google Fonts CDN.
Related Skills
ux-iconography: UX patterns for icon usage, accessibility, and animationsux-accessibility: ARIA requirements for icon-only buttonsutopia-fluid-scales: Type scale tokens for fluid icon sizing
Project Setup
Location: css/styles/icons.css
@import url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap');
Self-Hosting (Offline)
For offline/production without CDN:
- Download from fonts.google.com/icons
- Place in
/fonts/material-symbols-outlined.woff2 - Replace CDN import:
@font-face {
font-family: 'Material Symbols Outlined';
src: url('/fonts/material-symbols-outlined.woff2') format('woff2');
font-weight: 100 700;
font-style: normal;
}
Basic Usage
<span class="icon">home</span>
<span class="icon">settings</span>
<span class="icon">favorite</span>
Use the icon name from Material Symbols as text content.
Icon Sizes
| Class | Size | Optical Size | Use Case |
|-------|------|--------------|----------|
| .icon--sm | 20px | 20 | Dense UI, inline text |
| .icon--md | 24px | 24 | Default, buttons |
| .icon--lg | 40px | 40 | Emphasis, headers |
| .icon--xl | 48px | 48 | Hero sections |
<span class="icon icon--sm">info</span>
<span class="icon icon--md">info</span>
<span class="icon icon--lg">info</span>
<span class="icon icon--xl">info</span>
Fluid Sizing with Utopia
For icons that scale with typography:
.icon-fluid {
font-size: var(--step-1);
--icon-optical-size: 24;
}
Variable Font Axes
Material Symbols is a variable font with 4 axes:
| Axis | Range | Default | Purpose |
|------|-------|---------|---------|
| FILL | 0–1 | 0 | Outlined (0) vs filled (1) |
| wght | 100–700 | 400 | Stroke weight |
| GRAD | -25–200 | 0 | Fine thickness adjustment |
| opsz | 20–48 | 24 | Optical size optimization |
Fill Styles
<span class="icon icon--outlined">favorite</span> <!-- Outline (default) -->
<span class="icon icon--filled">favorite</span> <!-- Filled -->
Weight Variants
<span class="icon icon--thin">home</span> <!-- 100 -->
<span class="icon icon--light">home</span> <!-- 300 -->
<span class="icon icon--regular">home</span> <!-- 400 (default) -->
<span class="icon icon--medium">home</span> <!-- 500 -->
<span class="icon icon--bold">home</span> <!-- 700 -->
Grade Variants
<span class="icon icon--grade-low">home</span> <!-- -25: thinner on dark bg -->
<span class="icon icon--grade-normal">home</span> <!-- 0 (default) -->
<span class="icon icon--grade-high">home</span> <!-- 200: bolder emphasis -->
Custom Variation
.custom-icon {
--icon-fill: 1;
--icon-weight: 600;
--icon-grade: 0;
--icon-optical-size: 24;
}
Icon Colors
Semantic Colors
<span class="icon icon--primary">check_circle</span>
<span class="icon icon--secondary">info</span>
<span class="icon icon--disabled">block</span>
Inherit from Parent
.icon {
color: inherit; /* Default behavior */
}
.btn-primary .icon {
color: var(--theme-on-primary);
}
State Colors
.icon-success { color: var(--color-success); }
.icon-error { color: var(--color-error); }
.icon-warning { color: var(--color-warning); }
Interactive Icons
<span class="icon icon--interactive">settings</span>
.icon--interactive {
cursor: pointer;
transition: color 0.2s ease, transform 0.2s ease;
}
.icon--interactive:hover {
color: var(--icon-color-primary);
transform: scale(1.1);
}
.icon--interactive:active {
transform: scale(0.95);
}
Button Patterns
Icon + Text Button
<button class="btn">
<span class="icon" aria-hidden="true">add</span>
<span>Add Item</span>
</button>
.btn {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
}
Icon-Only Button
<button class="btn-icon" aria-label="Settings">
<span class="icon" aria-hidden="true">settings</span>
</button>
.btn-icon {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: var(--min-touch-target);
min-height: var(--min-touch-target);
padding: var(--space-xs);
}
Trailing Icon
<button class="btn">
<span>Next</span>
<span class="icon" aria-hidden="true">arrow_forward</span>
</button>
Accessibility
Decorative Icons (with visible label)
<button>
<span class="icon" aria-hidden="true">save</span>
Save
</button>
Meaningful Icons (icon-only)
<button aria-label="Close dialog">
<span class="icon" aria-hidden="true">close</span>
</button>
Screen Reader Text
<button class="btn-icon">
<span class="icon" aria-hidden="true">delete</span>
<span class="sr-only">Delete item</span>
</button>
High Contrast Mode
@media (forced-colors: active) {
.icon {
forced-color-adjust: auto;
}
}
Common Icons Reference
Navigation
| Icon | Name | Usage |
|------|------|-------|
| home | home | Home/main |
| menu | menu | Hamburger menu |
| arrow_back | arrow_back | Back navigation |
| arrow_forward | arrow_forward | Forward/next |
| close | close | Close/dismiss |
Actions
| Icon | Name | Usage |
|------|------|-------|
| add | add | Create new |
| edit | edit | Edit/modify |
| delete | delete | Remove |
| save | save | Save |
| search | search | Search |
Status
| Icon | Name | Usage |
|------|------|-------|
| check_circle | check_circle | Success/complete |
| error | error | Error state |
| warning | warning | Warning |
| info | info | Information |
| help | help | Help |
Media
| Icon | Name | Usage |
|------|------|-------|
| play_arrow | play_arrow | Play |
| pause | pause | Pause |
| volume_up | volume_up | Sound on |
| volume_off | volume_off | Sound off |
Settings
| Icon | Name | Usage |
|------|------|-------|
| settings | settings | Settings |
| tune | tune | Adjustments |
| brightness_6 | brightness_6 | Theme toggle |
| lock | lock | Locked/secure |
Browse all icons: fonts.google.com/icons
Animation
With Anime.js
import { animate } from 'animejs';
// Wiggle
animate(iconEl, {
rotate: [0, -10, 10, -10, 10, 0],
duration: 300,
ease: 'easeOutQuad'
});
// Bounce
animate(iconEl, {
scale: [1, 1.2, 1],
duration: 200,
ease: 'easeOutBack'
});
CSS Transitions
.icon {
transition: transform 0.15s ease;
}
.btn:hover .icon {
transform: scale(1.1);
}
.btn:active .icon {
transform: scale(0.95);
}
Web Component Wrapper
class MIcon extends HTMLElement {
static observedAttributes = ['name', 'size', 'filled'];
connectedCallback() {
this.render();
}
attributeChangedCallback() {
this.render();
}
render() {
const name = this.getAttribute('name') || 'help';
const size = this.getAttribute('size') || 'md';
const filled = this.hasAttribute('filled');
this.innerHTML = `<span class="icon icon--${size}${filled ? ' icon--filled' : ''}" aria-hidden="true">${name}</span>`;
}
}
customElements.define('m-icon', MIcon);
Usage:
<m-icon name="home"></m-icon>
<m-icon name="favorite" filled size="lg"></m-icon>
CSS Custom Properties
:root {
/* Font */
--icon-font: 'Material Symbols Outlined';
/* Sizes */
--icon-size-sm: 20px;
--icon-size-md: 24px;
--icon-size-lg: 40px;
--icon-size-xl: 48px;
/* Variable font axes */
--icon-fill: 0;
--icon-weight: 400;
--icon-grade: 0;
--icon-optical-size: 24;
/* Colors */
--icon-color: var(--color-on-surface);
--icon-color-primary: var(--color-primary);
--icon-color-secondary: var(--color-on-surface-variant);
--icon-color-disabled: var(--color-outline);
}
Migration from Emoji
Replace emoji icons with Material Symbols:
| Old (Emoji) | New (Material Symbol) |
|-------------|----------------------|
| <span aria-hidden="true">📖</span> | <span class="icon" aria-hidden="true">menu_book</span> |
| <span aria-hidden="true">⚙️</span> | <span class="icon" aria-hidden="true">settings</span> |
| <span aria-hidden="true">🏠</span> | <span class="icon" aria-hidden="true">home</span> |
| <span aria-hidden="true">⭐</span> | <span class="icon" aria-hidden="true">star</span> |
| <span aria-hidden="true">🔒</span> | <span class="icon" aria-hidden="true">lock</span> |
| <span aria-hidden="true">🔊</span> | <span class="icon" aria-hidden="true">volume_up</span> |
| <span aria-hidden="true">🔇</span> | <span class="icon" aria-hidden="true">volume_off</span> |
| <span aria-hidden="true">✓</span> | <span class="icon" aria-hidden="true">check</span> |
Files
css/styles/icons.css- Icon system styles and CSS custom properties
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/material-symbols-v3-icon-font-system-mrx3xxuc/download' --output '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md.part' && mv '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md.part' '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Write, Edit, Glob, Grep
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md' && test -s '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/material-symbols-v3' && cp -R '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc' '.claude/skills/material-symbols-v3'Cursor
test -f '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md' && test -s '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/material-symbols-v3' && cp -R '.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc' '.cursor/skills/material-symbols-v3'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc'openskills read 'material-symbols-v3-icon-font-system-mrx3xxuc'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/material-symbols-v3-icon-font-system-mrx3xxuc/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.