diff --git a/README.md b/README.md
index 6a70cf2..ec88e2d 100644
--- a/README.md
+++ b/README.md
@@ -274,6 +274,7 @@ Légende : **✅ livré** (câblé de bout en bout) · **🟡 partiellement livr
* ✅ **Import/Export playlists (JSON)** — `GET /playlists/export` (dump complet + items, format `newtube-playlists-v1`), `POST /playlists/import` (création des listes manquantes, dédoublonnage par titre au réimport, compteurs détaillés ; bornes 200 listes / 5 000 vidéos par liste) ; boutons **[Exporter] [Importer]** sur `/#/library/playlists`.
* ✅ **Page Administration** (`/#/admin`, entrée « Administration » de la section Informations dans la barre latérale) — `/healthz` + `/api/providers/metrics` rendus lisibles : statut API, mode YouTube, version et santé yt-dlp, clés actives / bannies (+ suffixes), anti-ban (cookies / PO token / proxy), cache de recherche par provider, compteurs 1 h par provider, quota YouTube du jour. Au passage : `healthz` servi aussi sous `/proxy/api/healthz` (le chemin que le front utilise en prod). *Journaux (logs) et exposition Prometheus restent à faire — voir Observabilité.*
* ✅ **Cache TTL par provider** — `server/env-ttl.mjs` (`_` → `` → défaut, valeurs invalides ignorées, jamais de TTL nul) branché sur les caches **details** (`DETAILS_CACHE_TTL_MS_
`) et **transcripts** (`TRANSCRIPT_CACHE_TTL_
`) en plus de la recherche (`SEARCH_CACHE_TTL_MS_
`). Le cache **suggest** reste global par conception : sa clé agrégée couvre plusieurs providers d'un coup, un TTL par provider demanderait de scinder le cache. Tests : `npm run test:cache`
+* ✅ **Menu du compte refondu** (bouton avatar, haut à droite du header) — panneau sombre à lignes « icône + titre gras + sous-titre gris » : **Thème** (thème réellement appliqué en sous-titre, pastilles dépliées au clic), **Administration** (`/#/admin`), **API** (`/proxy/api/openapi.json` dans un nouvel onglet), **Préférences** (`/#/account/preferences`), **Guide d'utilisation** (`/#/info/utilisation`), **À propos** (version, tagline, lien code source), **Sessions** (`/#/account/sessions`), **Déconnexion** ; pied de page **Version** = version officielle de l'application (`src/app/version.ts`, alignée sur le tag semver publié par `docker/deploy-img.sh`). Clés i18n déclarées des deux côtés (FR + EN)
### 🟡 Partiellement livré
diff --git a/src/app/version.ts b/src/app/version.ts
new file mode 100644
index 0000000..4fa35da
--- /dev/null
+++ b/src/app/version.ts
@@ -0,0 +1,10 @@
+/**
+ * Version officielle de l'application NewTube, affichée dans le menu du compte
+ * (header) et le pied de page « À propos ».
+ *
+ * Source unique côté front : elle suit le tag semver publié par
+ * `docker/deploy-img.sh` (le registre incrémente le patch à chaque déploiement).
+ * Dernier tag publié avant cette livraison : 1.0.58 → cette livraison sort en
+ * 1.0.59. Bumper cette valeur à chaque livraison.
+ */
+export const APP_VERSION = '1.0.59';
diff --git a/src/components/header/header.component.html b/src/components/header/header.component.html
index 1662788..64531a7 100644
--- a/src/components/header/header.component.html
+++ b/src/components/header/header.component.html
@@ -105,18 +105,140 @@
{{ avatarLetter() }}
@if (userMenuOpen()) {
+