From bca707ee9687799883a5c42ac5efded075119aa1 Mon Sep 17 00:00:00 2001 From: Pontoporeia Date: Tue, 5 May 2026 11:34:13 +0200 Subject: [PATCH] standardise buttons: .btn base class (border-radius 10px, padding var(--space-xs)) --- TODO.md | 7 + app/public/assets/css/admin.css | 206 ++---------------- app/public/assets/css/common.css | 168 ++++++++++++++ app/public/assets/css/file-access.css | 23 +- app/public/assets/css/form.css | 92 +------- app/public/assets/css/public.css | 2 +- app/public/assets/css/repertoire.css | 16 +- app/public/assets/css/system.css | 10 +- app/public/assets/css/tfe.css | 15 +- app/public/partage/index.php | 4 +- app/public/partage/retry-email.php | 4 +- app/storage/logs/admin.log | 2 + app/templates/admin/acces-etudiante.php | 24 +- app/templates/admin/acces.php | 36 +-- app/templates/admin/account.php | 4 +- app/templates/admin/add.php | 2 +- app/templates/admin/contenus-edit.php | 18 +- app/templates/admin/contenus.php | 6 +- app/templates/admin/edit.php | 4 +- app/templates/admin/file-access.php | 12 +- app/templates/admin/index.php | 44 ++-- app/templates/admin/login.php | 2 +- app/templates/admin/parametres.php | 28 +-- .../admin/partials/system-log-panel.php | 2 +- .../partials/system-nginx-config-panel.php | 2 +- app/templates/admin/recapitulatif.php | 16 +- app/templates/admin/tags.php | 14 +- app/templates/partials/form/jury-fieldset.php | 8 +- app/templates/public/search.php | 2 +- app/templates/public/tfe.php | 2 +- 30 files changed, 333 insertions(+), 442 deletions(-) diff --git a/TODO.md b/TODO.md index 3e92b8f..134dd7b 100644 --- a/TODO.md +++ b/TODO.md @@ -74,3 +74,10 @@ ## Sticky save/cancel buttons on edit page - [x] `templates/admin/edit.php` — moved `.admin-form-footer` from bottom to top-right, right after `

` - [x] `admin.css` — added `.admin-form-footer--sticky` variant with `position:sticky; top:0; justify-content:flex-end` + +## Standardise buttons with .btn base class +- [x] Create `.btn` base class in common.css: `border-radius: 10px; padding: var(--space-xs)` + background + cursor +- [x] Add `.btn--primary` (accent bg), `.btn--secondary` (--bg bg + border), `.btn--sm`, `.btn--lg`, `.btn--danger`, `.btn--warning`, `.btn--success`, `.btn--ghost`, `.btn--muted`, `.btn--blue`, `.btn--yellow`, `.btn--green`, `.btn--red` modifiers +- [x] Replace old button definitions in admin.css, form.css, tfe.css, file-access.css, system.css with empty alias comments +- [x] Update all PHP templates to use new `.btn` classes (`btn btn--primary`, `btn btn--secondary`, `btn btn--danger`, etc.) +- [x] Update border-radius on pagination buttons to 10px for consistency diff --git a/app/public/assets/css/admin.css b/app/public/assets/css/admin.css index 75fa0cb..860aa65 100644 --- a/app/public/assets/css/admin.css +++ b/app/public/assets/css/admin.css @@ -89,68 +89,26 @@ gap: var(--space-s); } -.admin-btn { - padding: var(--space-2xs) var(--space-l); - background: var(--accent-primary); - color: var(--accent-foreground); - border: none; - border-radius: 3px; - font-size: var(--step--1); - font-family: inherit; - cursor: pointer; - letter-spacing: 0.04em; - text-decoration: none; - display: inline-block; - transition: background 0.15s; -} +/* ── Admin button aliases — see common.css .btn base class ────────────── */ -.admin-btn:hover { - background: var(--accent-secondary); +.admin-btn { + /* deprecated alias for .btn--primary; kept for backward-compat */ } .admin-btn-secondary { - padding: var(--space-3xs) var(--space-m); - background: transparent; - color: var(--text-tertiary); - border: 1px solid var(--border-primary); - border-radius: 3px; - font-size: var(--step--1); - font-family: inherit; - cursor: pointer; - letter-spacing: 0.04em; - text-decoration: none; - display: inline-block; - transition: all 0.15s; + /* deprecated alias for .btn--secondary; kept for backward-compat */ } -.admin-btn-secondary:hover { - border-color: var(--text-secondary); - color: var(--text-primary); -} - -/* Small size modifier */ .admin-btn--sm { - padding: var(--space-3xs) var(--space-2xs); - font-size: var(--step--2); + /* deprecated alias for .btn--sm; kept for backward-compat */ } -/* Semantic colour modifiers */ .admin-btn--warning { - background: var(--accent-yellow); - color: var(--text-primary); - border: none; -} -.admin-btn--warning:hover { - filter: brightness(0.9); + /* deprecated alias for .btn--warning; kept for backward-compat */ } .admin-btn--danger { - background: var(--accent-red); - color: var(--accent-foreground); - border: none; -} -.admin-btn--danger:hover { - filter: brightness(0.9); + /* deprecated alias for .btn--danger; kept for backward-compat */ } /* ── Toast messages (bottom-center, CSS-only auto-fade) ─────────────── */ @@ -319,37 +277,11 @@ } .admin-filters-btn { - padding: var(--space-3xs) var(--space-s); - background: var(--accent-primary); - color: var(--accent-foreground); - border: none; - border-radius: 3px; - font-size: var(--step--1); - font-family: inherit; - cursor: pointer; - transition: background 0.15s; -} - -.admin-filters-btn:hover { - background: var(--accent-secondary); + /* deprecated alias for .btn--primary; kept for backward-compat */ } .admin-filters-reset { - font-size: var(--step--1); - color: var(--text-secondary); - background: none; - border: 1px solid var(--border-primary); - border-radius: 3px; - font-family: inherit; - padding: var(--space-3xs) var(--space-xs); - cursor: pointer; - text-decoration: none; - transition: border-color 0.15s, color 0.15s; -} - -.admin-filters-reset:hover { - border-color: var(--text-secondary); - color: var(--text-primary); + /* deprecated alias for .btn--secondary; kept for backward-compat */ } /* ── Bulk actions bar ───────────────────────────────────────────────────── */ @@ -449,80 +381,40 @@ color: var(--error); } -/* ── Action buttons in table ────────────────────────────────────────────── */ +/* ── Action buttons in table — see common.css .btn base class ──────────── */ .admin-actions { display: flex; gap: var(--space-3xs); flex-wrap: wrap; } +/* Legacy table-action size — now just an alias */ .admin-btn-sm { - padding: var(--space-3xs) var(--space-2xs); - min-height: 2rem; - border-radius: 3px; - font-size: var(--step--2); - font-family: inherit; - cursor: pointer; - text-decoration: none; - display: inline-flex; - align-items: center; - border: 1px solid transparent; - transition: all 0.15s; - white-space: nowrap; + /* deprecated alias for .btn--sm; kept for backward-compat */ } .admin-btn-view { - background: var(--blue-muted-bg); - color: var(--accent-blue); - border-color: var(--blue-muted-border); -} -.admin-btn-view:hover { - background: var(--blue-muted-bg-hover); + /* deprecated alias for .btn--sm .btn--blue */ } .admin-btn-visit { - background: var(--success-muted-bg); - color: var(--success); - border-color: var(--success-muted-border); -} -.admin-btn-visit:hover { - background: var(--green-muted-bg-hover); + /* deprecated alias for .btn--sm .btn--green */ } .admin-btn-edit { - background: var(--yellow-muted-bg); - color: var(--accent-yellow); - border-color: var(--yellow-muted-border); -} -.admin-btn-edit:hover { - background: var(--yellow-muted-bg-hover); + /* deprecated alias for .btn--sm .btn--yellow */ } .admin-btn-publish { - background: var(--green-muted-bg); - color: var(--accent-green); - border-color: var(--green-muted-border); -} -.admin-btn-publish:hover { - background: var(--green-muted-bg-hover); + /* deprecated alias for .btn--sm .btn--green */ } .admin-btn-unpublish { - background: var(--bg-secondary); - color: var(--text-tertiary); - border-color: var(--border-primary); -} -.admin-btn-unpublish:hover { - background: var(--bg-tertiary); + /* deprecated alias for .btn--sm .btn--muted */ } .admin-btn-delete { - background: var(--error-muted-bg); - color: var(--error); - border-color: var(--error-muted-border, var(--border-primary)); -} -.admin-btn-delete:hover { - filter: brightness(0.9); + /* deprecated alias for .btn--sm .btn--red */ } .publish-form { @@ -705,7 +597,7 @@ padding-top: var(--space-2xs); } -.admin-login-box .admin-btn { +.admin-login-box .btn { width: 100%; } @@ -1121,53 +1013,15 @@ } .param-form > button { - align-self: flex-start; - padding: var(--space-2xs) var(--space-l); - background: var(--accent-primary); - color: var(--accent-foreground); - border: none; - border-radius: 3px; - font-size: var(--step--1); - font-family: inherit; - cursor: pointer; - letter-spacing: 0.04em; - transition: background 0.15s; -} - -.param-form > button:hover { - background: var(--accent-secondary); + /* deprecated alias for .btn--primary; kept for backward-compat */ } .param-btn-warning { - padding: var(--space-3xs) var(--space-s); - background: var(--accent-yellow); - color: var(--text-primary); - border: none; - border-radius: 3px; - font-size: var(--step--1); - font-family: inherit; - cursor: pointer; - transition: filter 0.15s; -} - -.param-btn-warning:hover { - filter: brightness(0.9); + /* deprecated alias for .btn--warning; kept for backward-compat */ } .param-btn-danger { - padding: var(--space-3xs) var(--space-s); - background: var(--accent-red); - color: var(--accent-foreground); - border: none; - border-radius: 3px; - font-size: var(--step--1); - font-family: inherit; - cursor: pointer; - transition: filter 0.15s; -} - -.param-btn-danger:hover { - filter: brightness(0.9); + /* deprecated alias for .btn--danger; kept for backward-compat */ } .param-danger-zone { @@ -1208,19 +1062,7 @@ } .param-btn-export { - padding: var(--space-3xs) var(--space-s); - background: var(--primary, #2563eb); - color: var(--accent-foreground, #fff); - border: none; - border-radius: 3px; - font-size: var(--step--1); - font-family: inherit; - cursor: pointer; - transition: filter 0.15s; -} - -.param-btn-export:hover { - filter: brightness(0.9); + /* deprecated alias for .btn--primary; kept for backward-compat */ } @@ -1541,7 +1383,7 @@ min-height: 2.75rem; padding: 0 var(--space-2xs); border: 1px solid var(--border-secondary); - border-radius: 3px; + border-radius: 10px; color: var(--text-primary); font-size: var(--step--1); text-decoration: none; diff --git a/app/public/assets/css/common.css b/app/public/assets/css/common.css index 8897c36..3a571fb 100644 --- a/app/public/assets/css/common.css +++ b/app/public/assets/css/common.css @@ -390,6 +390,174 @@ main { } } +/* ============================================================ + BUTTONS — shared .btn base class + Targets both and + @@ -362,7 +362,7 @@ function renderShareLinkForm(string $slug, array $link): void diff --git a/app/public/partage/retry-email.php b/app/public/partage/retry-email.php index 047143e..4192b67 100644 --- a/app/public/partage/retry-email.php +++ b/app/public/partage/retry-email.php @@ -111,8 +111,8 @@ $pageTitle = 'Corriger l\'adresse e-mail'; >
- - + +
diff --git a/app/storage/logs/admin.log b/app/storage/logs/admin.log index 1616cac..ede0c31 100644 --- a/app/storage/logs/admin.log +++ b/app/storage/logs/admin.log @@ -5,3 +5,5 @@ {"timestamp":"2026-05-05T09:06:21+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0","resource":"thesis","action":"add","status":"success","context":{"thesis_id":38,"identifier":"2025-013","author":"Lila Dubois, Karim Nassar"}} {"timestamp":"2026-05-05T09:08:03+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0","resource":"thesis","action":"publish","status":"success","context":{"count":1,"ids":[38]}} {"timestamp":"2026-05-05T09:19:46+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0","resource":"thesis","action":"edit","status":"success","context":{"thesis_id":38,"title":"Jouer l'espace : dispositifs scénographiques pour l'expérience participative"}} +{"timestamp":"2026-05-05T09:33:13+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0","resource":"thesis","action":"csv_export","status":"success"} +{"timestamp":"2026-05-05T09:33:44+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0","resource":"settings","action":"formulaire_update","status":"success","context":{"values":{"access_type_libre_enabled":"0","access_type_interne_enabled":"1","access_type_interdit_enabled":"1","restricted_files_enabled":"1"}}} diff --git a/app/templates/admin/acces-etudiante.php b/app/templates/admin/acces-etudiante.php index b3d39d8..8164b95 100644 --- a/app/templates/admin/acces-etudiante.php +++ b/app/templates/admin/acces-etudiante.php @@ -3,7 +3,7 @@

Accès étudiant·e

-
@@ -72,10 +72,10 @@
+ class="btn btn--sm btn--green admin-btn-visit" title="Visiter le formulaire"> 👁 Visiter - @@ -84,12 +84,12 @@ - @@ -144,8 +144,8 @@ Laissez vide pour qu'il n'expire jamais.
@@ -169,8 +169,8 @@

@@ -222,7 +222,7 @@ function openPasswordDialog(id, hasPassword) {

Supprimer ce lien ? Les soumissions via ce lien seront bloquées.

diff --git a/app/templates/admin/acces.php b/app/templates/admin/acces.php index 9cdfbbe..f8b8681 100644 --- a/app/templates/admin/acces.php +++ b/app/templates/admin/acces.php @@ -8,7 +8,7 @@

Accès étudiant·e

-
@@ -69,10 +69,10 @@
+ class="btn btn--sm btn--green admin-btn-visit" title="Visiter le formulaire"> 👁 Visiter - @@ -81,12 +81,12 @@ - @@ -255,12 +255,12 @@
@@ -325,8 +325,8 @@ Laissez vide pour qu'il n'expire jamais.
@@ -350,8 +350,8 @@

@@ -372,8 +372,8 @@ @@ -394,8 +394,8 @@ @@ -457,7 +457,7 @@ function _executeArchiveLink() {

Archiver ce lien ? Il ne sera plus accessible, mais les statistiques seront conservées.

diff --git a/app/templates/admin/account.php b/app/templates/admin/account.php index 8dce07a..bd863af 100644 --- a/app/templates/admin/account.php +++ b/app/templates/admin/account.php @@ -57,7 +57,7 @@ @@ -80,7 +80,7 @@ - + diff --git a/app/templates/admin/add.php b/app/templates/admin/add.php index 8a4b41d..c3717c5 100644 --- a/app/templates/admin/add.php +++ b/app/templates/admin/add.php @@ -47,7 +47,7 @@ diff --git a/app/templates/admin/contenus-edit.php b/app/templates/admin/contenus-edit.php index 342ccfd..ee3d6b0 100644 --- a/app/templates/admin/contenus-edit.php +++ b/app/templates/admin/contenus-edit.php @@ -12,8 +12,8 @@
@@ -29,8 +29,8 @@
@@ -77,15 +77,15 @@ - + - + diff --git a/app/templates/admin/contenus.php b/app/templates/admin/contenus.php index 41a3a9e..faebe64 100644 --- a/app/templates/admin/contenus.php +++ b/app/templates/admin/contenus.php @@ -30,7 +30,7 @@ Éditer + class="btn btn--primary btn--sm">Éditer @@ -62,7 +62,7 @@ Éditer + class="btn btn--primary btn--sm">Éditer @@ -143,7 +143,7 @@ Éditer + class="btn btn--primary btn--sm fhb-edit-btn">Éditer diff --git a/app/templates/admin/edit.php b/app/templates/admin/edit.php index 8498153..131b921 100644 --- a/app/templates/admin/edit.php +++ b/app/templates/admin/edit.php @@ -3,8 +3,8 @@
diff --git a/app/templates/admin/file-access.php b/app/templates/admin/file-access.php index 779a070..8f4a364 100644 --- a/app/templates/admin/file-access.php +++ b/app/templates/admin/file-access.php @@ -98,12 +98,12 @@
@@ -153,8 +153,8 @@ placeholder="Message personnalisé pour le demandeur..."> @@ -177,8 +177,8 @@ placeholder="Raison du rejet..."> diff --git a/app/templates/admin/index.php b/app/templates/admin/index.php index 71d1cb0..92ffe48 100644 --- a/app/templates/admin/index.php +++ b/app/templates/admin/index.php @@ -104,9 +104,9 @@ document.addEventListener('DOMContentLoaded', () => { - + - @@ -126,12 +126,12 @@ document.addEventListener('DOMContentLoaded', () => {
- Ajouter un TFE - - + Exporter CSV @@ -141,9 +141,9 @@ document.addEventListener('DOMContentLoaded', () => { @@ -226,23 +226,23 @@ document.addEventListener('DOMContentLoaded', () => {
- Voir - Éditer + Voir + Éditer
- + - +
-
@@ -281,7 +281,7 @@ document.addEventListener('DOMContentLoaded', () => {

Sélectionnez au moins un TFE avant d'effectuer une action groupée.

@@ -296,8 +296,8 @@ document.addEventListener('DOMContentLoaded', () => {

TFE(s) ?

@@ -312,8 +312,8 @@ document.addEventListener('DOMContentLoaded', () => {

Supprimer définitivement TFE(s) ? Cette action est irréversible.

@@ -328,8 +328,8 @@ document.addEventListener('DOMContentLoaded', () => {

Supprimer «  » ? Cette action est irréversible.

@@ -376,8 +376,8 @@ document.addEventListener('DOMContentLoaded', () => { diff --git a/app/templates/admin/login.php b/app/templates/admin/login.php index 89aa895..65b040a 100644 --- a/app/templates/admin/login.php +++ b/app/templates/admin/login.php @@ -11,7 +11,7 @@ diff --git a/app/templates/admin/parametres.php b/app/templates/admin/parametres.php index 0044005..12e2b7f 100644 --- a/app/templates/admin/parametres.php +++ b/app/templates/admin/parametres.php @@ -24,7 +24,7 @@ - @@ -37,7 +37,7 @@ Exporter la base de données

Télécharger une copie complète de la base de données SQLite. Cela inclut tous les TFE, auteurs, jury, mots-clés, paramètres, etc.

- @@ -53,7 +53,7 @@
- @@ -117,7 +117,7 @@ - +
@@ -163,7 +163,7 @@ - + @@ -288,7 +288,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -366,7 +366,7 @@ name="confirm_password" required autocomplete="new-password"> - @@ -520,8 +520,8 @@ Cela inclut tous les TFE, auteurs, jury, mots-clés, paramètres, etc.

@@ -599,11 +599,11 @@ document.body.addEventListener('htmx:afterSwap', function(evt) {

Mettre le site en maintenance ? Les visiteurs verront une page 503.

@@ -618,10 +618,10 @@ document.body.addEventListener('htmx:afterSwap', function(evt) {

⚠️ Supprimer définitivement TOUS les TFE ? Cette action est IRRÉVERSIBLE.

diff --git a/app/templates/admin/partials/system-log-panel.php b/app/templates/admin/partials/system-log-panel.php index ff51795..a1179da 100644 --- a/app/templates/admin/partials/system-log-panel.php +++ b/app/templates/admin/partials/system-log-panel.php @@ -42,7 +42,7 @@
- diff --git a/app/templates/admin/partials/system-nginx-config-panel.php b/app/templates/admin/partials/system-nginx-config-panel.php index 6bfcc1f..2b60863 100644 --- a/app/templates/admin/partials/system-nginx-config-panel.php +++ b/app/templates/admin/partials/system-nginx-config-panel.php @@ -28,7 +28,7 @@
- diff --git a/app/templates/admin/recapitulatif.php b/app/templates/admin/recapitulatif.php index 45a3ed5..37b58f4 100644 --- a/app/templates/admin/recapitulatif.php +++ b/app/templates/admin/recapitulatif.php @@ -6,7 +6,7 @@ @@ -15,13 +15,13 @@

Ton TFE a bien été soumis.

- + Ajouter un nouveau TFE + + Ajouter un nouveau TFE

Erreur

Aucune donnée à afficher.

- ← Retour au formulaire + ← Retour au formulaire
@@ -32,7 +32,7 @@ -

Retour au formulaire

+

Retour au formulaire

@@ -123,14 +123,14 @@

Aucune donnée à afficher.

-

Retour au formulaire

+

Retour au formulaire

diff --git a/app/templates/admin/tags.php b/app/templates/admin/tags.php index f1cedd2..6db76c4 100644 --- a/app/templates/admin/tags.php +++ b/app/templates/admin/tags.php @@ -47,7 +47,7 @@ function _submitPendingTagForm() { - + @@ -63,7 +63,7 @@ function _submitPendingTagForm() { - @@ -74,7 +74,7 @@ function _submitPendingTagForm() { - @@ -97,8 +97,8 @@ function _submitPendingTagForm() {

Fusionner ce tag dans «  » ? Le tag source sera supprimé.

@@ -113,7 +113,7 @@ function _submitPendingTagForm() {

Supprimer «  » ? Cette action est irréversible.

diff --git a/app/templates/partials/form/jury-fieldset.php b/app/templates/partials/form/jury-fieldset.php index 4214e28..63372b4 100644 --- a/app/templates/partials/form/jury-fieldset.php +++ b/app/templates/partials/form/jury-fieldset.php @@ -66,7 +66,7 @@ $juryIdx = max(count($juryLecteurs), 1); Externe - @@ -81,13 +81,13 @@ $juryIdx = max(count($juryLecteurs), 1); aria-label="Lecteur·ice — externe"> Externe - - @@ -104,7 +104,7 @@ $juryIdx = max(count($juryLecteurs), 1); + ' Externe' + '' - + ''; list.appendChild(div); juryIdx++; diff --git a/app/templates/public/search.php b/app/templates/public/search.php index 11a12d6..afe7f18 100644 --- a/app/templates/public/search.php +++ b/app/templates/public/search.php @@ -41,7 +41,7 @@ - + Réinitialiser diff --git a/app/templates/public/tfe.php b/app/templates/public/tfe.php index 185a479..0ef64de 100644 --- a/app/templates/public/tfe.php +++ b/app/templates/public/tfe.php @@ -303,7 +303,7 @@ placeholder="Décrivez brièvement votre motivation (recherche, collaboration, etc.)"> -