diff --git a/TODO.md b/TODO.md
index 698d78f..a62136c 100644
--- a/TODO.md
+++ b/TODO.md
@@ -1,5 +1,13 @@
# Current tasks
+## Mots-clés fieldset in contenus
+- [x] Create contenus-motscles-fragment.php (tags fragment mirroring langues)
+- [x] Add Mots-clés fieldset to contenus template (search + table + bulk actions)
+- [x] Keep button linking to dedicated tags.php page as backup
+- [x] Add "Annuler" cancel button to both langues and mots-clés bulk action bars
+- [x] Add max-height:50vh + overflow-y:auto to both table wraps
+- [ ] Deploy: just deploy
+
## Tmp file cleanup (stale filepond + _trash)
- [x] Session-based detection: check manifest session_id against PHP session files
- [x] DB-based detection for _trash: check thesis_files row still exists
@@ -10,6 +18,15 @@
- [x] .gitignore: exclude tmp/filepond/* and tmp/_trash/*
- [ ] Deploy: just deploy
+## Index page improvements
+- [x] Remove 'Mots-clés' button from toolbar
+- [x] Move export to bulk selection bar (Exporter CSV + Exporter fichiers buttons)
+- [x] Export dispatcher accepts ?ids= for per-selection filtering
+- [x] All ExportController/Database export methods accept optional thesisIds
+- [x] Graceful error when ZipArchive extension missing (php8.4-zip not installed)
+- [x] Move DB export (SQLite download) to paramètres → Maintenance section
+- [x] Sticky thead on index table (position: sticky, top: 0, z-index: 5)
+
## Dialog & trash page margins
- [x] Add admin-dialog__body CSS rule with padding + margin resets
- [x] Add admin-dialog__stats + admin-dialog__hint classes
diff --git a/app/public/admin/contenus-langues-fragment.php b/app/public/admin/contenus-langues-fragment.php
index b97f107..becad46 100644
--- a/app/public/admin/contenus-langues-fragment.php
+++ b/app/public/admin/contenus-langues-fragment.php
@@ -27,6 +27,10 @@ try {
0 langue(s) sélectionnée(s)
+