` (Task 2).
+
+- [ ] **Step 1: Replace the manual radio block**
+
+In `.playground/pages/composant/form/client.vue`, replace the whole `…
` block (the radios wrapper + manual ``) with:
+
+```html
+
+```
+
+- [ ] **Step 2: Remove the now-unused import and style**
+
+- Delete the line `import MalioRadioButton from "../../../../app/components/malio/radio/RadioButton.vue";` (no longer referenced — `MalioRadioGroup` is auto-imported).
+- Delete the entire `` block at the end of the file.
+- Keep `prestationChoice` and `prestationOptions` refs as-is.
+
+- [ ] **Step 3: Lint**
+
+Run: `npm run lint -- .playground/pages/composant/form/client.vue`
+Expected: no new errors from this change.
+
+- [ ] **Step 4: Visual verification in the browser**
+
+Start a clean dev server on a dedicated port and confirm alignment (the original bug):
+
+```bash
+PORT=3010 npm run dev
+```
+
+Navigate to `http://localhost:3010/composant/form/client`. Using Chrome MCP `evaluate_script`, assert that on the "Prestation de triage" row:
+- the radio circles' vertical center ≈ the `Fournisseur` select box vertical center (±2px);
+- the radio group message top ≈ the `Fournisseur` error message top (±2px).
+
+Expected: both differences within 2px (was ~10px circle offset / ~6px message offset before).
+
+> Per project convention, do not open the browser MCP without the user's go-ahead — propose this verification step and wait for approval, or let the user run it. Tests + lint are the primary gate.
+
+- [ ] **Step 5: Commit**
+
+```bash
+git add .playground/pages/composant/form/client.vue
+git commit -m "feat(playground): formulaire client utilise MalioRadioGroup"
+```
+
+---
+
+### Task 5: Documentation (`COMPONENTS.md` + `CHANGELOG.md`)
+
+**Files:**
+- Modify: `COMPONENTS.md` (add a `## MalioRadioGroup` section after the `MalioRadioButton` section, ending line ~500)
+- Modify: `CHANGELOG.md` (add an `Added` entry)
+
+- [ ] **Step 1: Add the `MalioRadioGroup` section to `COMPONENTS.md`**
+
+Insert immediately after the `MalioRadioButton` section's closing `---` (currently line 500), before `## MalioDate`:
+
+```markdown
+## MalioRadioGroup
+
+Groupe de boutons radio : possède la valeur, le `name` partagé et **un seul** message (erreur/succès/aide) avec espace réservé comme les autres champs — un groupe en ligne s'aligne donc avec un `MalioSelect` voisin. Les options sont déclarées via `:options` ou via le slot par défaut (``).
+
+| Prop | Type | Défaut | Description |
+|------|------|--------|-------------|
+| `modelValue` | `string \| number \| boolean \| null` | `undefined` | Valeur sélectionnée (v-model) |
+| `options` | `{label, value, disabled?}[]` | `[]` | Options déclaratives |
+| `label` | `string` | `''` | Label de groupe (legend, lié par `aria-labelledby`) |
+| `name` | `string` | auto | Nom natif partagé des radios |
+| `inline` | `boolean` | `false` | Disposition horizontale |
+| `disabled` | `boolean` | `false` | Désactive tout le groupe |
+| `readonly` | `boolean` | `false` | Lecture seule |
+| `required` | `boolean` | `false` | Champ requis (astérisque dans la legend) |
+| `hint` / `error` / `success` | `string` | `''` | Message unique du groupe |
+| `reserveMessageSpace` | `boolean` | `true` | Réserve la ligne de message (alignement) |
+| `groupClass` / `inputClass` / `labelClass` | `string` | `''` | Overrides `twMerge` |
+
+**Events :** `update:modelValue(value: string | number | boolean | null)`
+
+**Accessibilité :** conteneur `role="radiogroup"`, `aria-labelledby` (si `label`), `aria-invalid` et `aria-describedby` sur le message unique. Les radios enfants héritent de l'état d'erreur/désactivé du groupe.
+
+```vue
+
+
+
+
+
+
+```
+
+---
+```
+
+- [ ] **Step 2: Add the `CHANGELOG.md` entry**
+
+Under `## [0.0.0]` → `### Added`, append a new bullet at the end of the list:
+
+```markdown
+* [#MUI-radio-group] Création d'un composant radio group (message unique, alignement select)
+```
+
+(If the team uses a real issue id, substitute it for `#MUI-radio-group`.)
+
+- [ ] **Step 3: Commit**
+
+```bash
+git add COMPONENTS.md CHANGELOG.md
+git commit -m "docs(radio): documente MalioRadioGroup (COMPONENTS + CHANGELOG)"
+```
+
+---
+
+### Final verification
+
+- [ ] **Run the full radio suite + lint**
+
+Run: `npm run test -- radio` then `npm run lint`
+Expected: radio tests green; lint reports no new errors from the created/modified files.
+
+- [ ] **Confirm the branch is clean except intended files**
+
+Run: `git status`
+Expected: only intended changes committed; `nuxt.config.ts` remains unstaged/untouched.