style: standardise links to Regular weight (400) with violet accent hover, body to Light (300)

This commit is contained in:
Pontoporeia
2026-06-08 11:53:57 +02:00
parent cee3345ea3
commit cb2b18e470
16 changed files with 66 additions and 48 deletions

22
TODO.md
View File

@@ -1,23 +1,3 @@
# TODO # TODO
- [x] Fix htmx checkbox "Activer la restriction d'accès": add missing csrf_token in #fieldset-restrictions (fixes token invalide + full parametres.php injection) - [x] Standardise all links (including header) to be heavy (font-weight: 600) and add violet accent color on hover
- [x] Convert all file inputs to FilePond (CSV import, file-field.php; fix dialog init + missing CSS/JS on index page)
- [x] Fix `account.php`: replace `!==` CSRF token check with `hash_equals` (constant-time comparison)
- [x] Fix `ShareLink::setPassword()`: also encrypt and store plain-text password, matching `create()` behavior
- [x] Audit: confirm all remaining credential comparison sites use constant-time `hash_equals` or `password_verify`
- [x] Fix `.gitignore`: anchor `vendor/` to root (`/vendor/`) so `app/public/assets/js/vendor/` (htmx, OverType, FilePond) is tracked
- [x] Fix migration `025_lowercase_languages.sql`: deduplicate languages before LOWER() to avoid UNIQUE constraint violation (`Néerlandais`/`néerlandais`)
- [x] Fix home page: load ALL published theses grouped by year (desc), shuffled randomly within each year (instead of only ~20 from latest year)
- [x] Répertoire: colonnes à largeurs différenciées (Années plus étroites, Orientations/AP plus larges)
- [x] Répertoire: barres de scroll discrètes (thin + semi-transparentes)
- [x] Répertoire: fontes/graisses conformes à la maquette (Ductus pour titres colonnes, années en bold, etc.)
- [x] Répertoire: diminutifs des AP entre crochets (ex: Design et Politique du Multiple [DPM])
- [x] Page TFE: enlever le soulignage de tous les mots/liens
- [x] Page TFE: harmoniser minuscules pour mots-clés, langues & formats
- [x] Page TFE: corriger texte inclusif ("utilisateur·ices autorisé·es")
- [x] Page TFE: empêcher les mots-clés de se couper au milieu du mot lors du wrapping
- [x] Page TFE: rendre le texte des TFE internes/interdits éditable dans les paramètres
- [x] Page TFE: afficher CC2r en plus de la licence choisie (ex: "CC2r, CC BY")
- [x] Page TFE: formater le contact au plus court (stripper https://www., afficher @identifiant pour Instagram/Mastodon)
- [x] Page TFE: supprimer le lien de téléchargement du PDF sous l'iframe

View File

@@ -109,7 +109,7 @@
.admin-back-btn:hover { .admin-back-btn:hover {
background: var(--bg-secondary); background: var(--bg-secondary);
color: var(--text-primary); color: var(--accent-primary);
} }
.admin-back-btn svg { .admin-back-btn svg {
@@ -1543,7 +1543,12 @@ th.admin-ap-col {
.admin-cancel-link { .admin-cancel-link {
font-size: var(--step--1); font-size: var(--step--1);
color: var(--text-secondary); color: var(--text-secondary);
text-decoration: underline; text-decoration: none;
font-weight: 400;
}
.admin-cancel-link:hover {
color: var(--accent-primary);
} }
/* ── Pagination (admin list) ─────────────────────────────────────────────── */ /* ── Pagination (admin list) ─────────────────────────────────────────────── */
@@ -1574,6 +1579,7 @@ th.admin-ap-col {
border-radius: var(--radius); border-radius: var(--radius);
color: var(--text-primary); color: var(--text-primary);
font-size: var(--step--1); font-size: var(--step--1);
font-weight: 400;
text-decoration: none; text-decoration: none;
transition: transition:
border-color 0.15s, border-color 0.15s,

View File

@@ -67,7 +67,7 @@
} }
.apropos-toc ul a:hover { .apropos-toc ul a:hover {
color: var(--text-primary); color: var(--accent-primary);
border-left-color: var(--accent-primary); border-left-color: var(--accent-primary);
} }
@@ -84,7 +84,8 @@
} }
.apropos-toc-erg a:hover { .apropos-toc-erg a:hover {
opacity: 0.75; color: var(--accent-primary);
opacity: 1;
} }
.apropos-toc-source { .apropos-toc-source {
@@ -99,7 +100,8 @@
} }
.apropos-toc-source a:hover { .apropos-toc-source a:hover {
opacity: 0.75; color: var(--accent-primary);
opacity: 1;
} }
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
@@ -237,7 +239,8 @@
} }
.apropos-contact-card a:hover { .apropos-contact-card a:hover {
opacity: 0.75; color: var(--accent-primary);
opacity: 1;
} }
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */

View File

@@ -38,6 +38,7 @@ html, body {
body { body {
font-family: var(--font-body); font-family: var(--font-body);
font-weight: 300;
background: var(--bg-primary); background: var(--bg-primary);
color: var(--text-primary); color: var(--text-primary);
background: linear-gradient( background: linear-gradient(

View File

@@ -19,8 +19,9 @@ details {
summary { summary {
font-family: var(--font-display); font-family: var(--font-display);
font-weight: 600; font-weight: 600;
text-decoration: 1px wavy; text-decoration: none;
color: var(--accent-secondary); color: var(--accent-secondary);
transition: color 0.15s;
svg { svg {
fill: var(--accent-secondary); fill: var(--accent-secondary);
@@ -28,3 +29,7 @@ summary {
height: 1.4em; height: 1.4em;
} }
} }
summary:hover {
color: var(--accent-primary);
}

View File

@@ -51,13 +51,14 @@ header nav ul a {
} }
header nav ul a:hover { header nav ul a:hover {
opacity: 1; color: var(--accent-primary);
} }
header nav ul a[aria-current="page"] { header nav ul a[aria-current="page"] {
opacity: 1; opacity: 1;
border-bottom: 1px solid var(--header-nav-active-border); border-bottom: 1px solid var(--header-nav-active-border);
padding-bottom: 1px; padding-bottom: 1px;
color: var(--accent-foreground);
} }
/* ── Logo ───────────────────────────────────────────────────────────── */ /* ── Logo ───────────────────────────────────────────────────────────── */

View File

@@ -6,10 +6,10 @@
a { a {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
font-weight: 400;
} }
a:hover { a:hover {
text-decoration-line: underline; color: var(--accent-primary);
text-decoration-style: wavy; text-decoration: none;
text-decoration-thickness: 1px;
} }

View File

@@ -30,6 +30,7 @@
border-radius: var(--radius); border-radius: var(--radius);
color: var(--text-primary); color: var(--text-primary);
font-size: var(--step--1); font-size: var(--step--1);
font-weight: 400;
text-decoration: none; text-decoration: none;
transition: border-color 0.15s, color 0.15s; transition: border-color 0.15s, color 0.15s;
} }

View File

@@ -51,7 +51,13 @@
.toast--warning a { .toast--warning a {
color: inherit; color: inherit;
text-decoration: underline; font-weight: 400;
text-decoration: none;
transition: color 0.15s;
}
.toast--warning a:hover {
color: var(--accent-primary);
} }
@keyframes toast-enter { @keyframes toast-enter {

View File

@@ -50,7 +50,7 @@
} }
.access-req-tab:hover { .access-req-tab:hover {
color: var(--text-primary); color: var(--accent-primary);
} }
.access-req-tab.active { .access-req-tab.active {
@@ -163,7 +163,8 @@
} }
.access-req-card__info a:hover { .access-req-card__info a:hover {
text-decoration: underline; color: var(--accent-primary);
text-decoration: none;
} }
.access-req-card__justification, .access-req-card__justification,
@@ -224,8 +225,7 @@
} }
.access-req-pagination__link:hover { .access-req-pagination__link:hover {
color: var(--accent-secondary); color: var(--accent-primary);
text-decoration: underline;
} }
.access-req-pagination__info { .access-req-pagination__info {

View File

@@ -419,12 +419,14 @@
background: var(--text-primary); background: var(--text-primary);
color: var(--bg-primary); color: var(--bg-primary);
text-decoration: none; text-decoration: none;
font-weight: 400;
border-radius: var(--radius); border-radius: var(--radius);
transition: opacity 0.15s; transition: opacity 0.15s;
} }
.share-error a:hover { .share-error a:hover {
opacity: 0.8; color: var(--accent-primary);
opacity: 1;
} }
/* ── Password gate page ─────────────────────────────────────────────────── */ /* ── Password gate page ─────────────────────────────────────────────────── */
@@ -1416,8 +1418,7 @@ legend {
} }
.recap-files-name a:hover { .recap-files-name a:hover {
text-decoration: underline; color: var(--accent-primary);
color: var(--accent);
} }
.recap-files-peertube-id { .recap-files-peertube-id {
@@ -1527,7 +1528,7 @@ legend {
text-decoration: none; text-decoration: none;
} }
.file-browser-breadcrumb a:hover { .file-browser-breadcrumb a:hover {
text-decoration: underline; color: var(--accent-primary);
} }
.file-browser-sep { .file-browser-sep {
color: var(--text-tertiary); color: var(--text-tertiary);

View File

@@ -191,6 +191,7 @@
.clear-filter:hover { .clear-filter:hover {
background: var(--accent-secondary); background: var(--accent-secondary);
color: var(--accent-foreground);
} }
/* Pagination */ /* Pagination */
@@ -222,6 +223,7 @@
color: var(--text-primary); color: var(--text-primary);
font-size: var(--step--1); font-size: var(--step--1);
text-decoration: none; text-decoration: none;
font-weight: 400;
transition: all 0.15s; transition: all 0.15s;
} }

View File

@@ -282,8 +282,14 @@
.search-reset-link { .search-reset-link {
font-size: var(--step--1); font-size: var(--step--1);
color: var(--text-secondary); color: var(--text-secondary);
text-decoration: underline; text-decoration: none;
font-weight: 400;
cursor: pointer; cursor: pointer;
transition: color 0.15s;
}
.search-reset-link:hover {
color: var(--accent-primary);
} }
/* Search results pagination */ /* Search results pagination */
@@ -307,6 +313,7 @@
color: var(--text-primary); color: var(--text-primary);
font-size: var(--step--1); font-size: var(--step--1);
text-decoration: none; text-decoration: none;
font-weight: 400;
transition: all 0.15s; transition: all 0.15s;
} }

View File

@@ -21,7 +21,7 @@
transition: color .15s, border-color .15s; transition: color .15s, border-color .15s;
} }
.sys-tab:hover { .sys-tab:hover {
color: var(--text-primary); color: var(--accent-primary);
} }
.sys-tab.active { .sys-tab.active {
color: var(--accent-primary); color: var(--accent-primary);
@@ -327,7 +327,7 @@
color: var(--accent-primary); color: var(--accent-primary);
text-decoration: none; text-decoration: none;
} }
.sys-refresh-note a:hover { text-decoration: underline; } .sys-refresh-note a:hover { color: var(--accent-primary); }
/* ── Cache freshness badges ────────────────────────────────────────────── */ /* ── Cache freshness badges ────────────────────────────────────────────── */
.sys-cache-badge { .sys-cache-badge {

View File

@@ -57,7 +57,7 @@
} }
.tfe-meta-label { .tfe-meta-label {
font-weight: 400; font-weight: 300;
} }
.tfe-meta-item a { .tfe-meta-item a {
@@ -67,7 +67,7 @@
} }
.tfe-meta-item a:hover { .tfe-meta-item a:hover {
text-decoration: none; color: var(--accent-primary);
} }
/* Note field: align label to top, value in italics */ /* Note field: align label to top, value in italics */
@@ -190,7 +190,7 @@ aside figcaption {
} }
.tfe-pdf-fallback a:hover { .tfe-pdf-fallback a:hover {
text-decoration: none; color: var(--accent-primary);
} }
/* "Not available" and "no files" notices */ /* "Not available" and "no files" notices */

View File

@@ -24,7 +24,7 @@
z-index: 9999; z-index: 9999;
padding: var(--space-2xs) var(--space-s); padding: var(--space-2xs) var(--space-s);
background: var(--accent-primary); background: var(--accent-primary);
color: var(--text-primary); color: var(--accent-foreground);
font-size: var(--step--1); font-size: var(--step--1);
font-weight: 600; font-weight: 600;
text-decoration: none; text-decoration: none;
@@ -35,6 +35,11 @@
top: 0; top: 0;
} }
.skip-link:hover {
color: var(--accent-primary);
background: var(--accent-foreground);
}
/* Respect user motion preferences */ /* Respect user motion preferences */
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
*, *,