From 62eee63f80f980a75c5dd51702596befea35ddfe Mon Sep 17 00:00:00 2001 From: Pontoporeia Date: Fri, 3 Apr 2026 12:35:21 +0200 Subject: [PATCH] fix(admin): add aria-current nav indicator + fix undefined --admin-purple variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WCAG 1.4.1 — Active nav link had no non-colour indicator in the admin panel. Public nav already had border-bottom via common.css; admin nav had nothing. admin.css: - Add `[aria-current="page"]` rule on admin nav links: border-bottom: 2px solid currentColor; padding-bottom: 1px This gives a visible underline as a non-colour signal for the active page. - Fix `--admin-purple` undefined CSS variable in pagination button hover. The variable was referenced but never defined in variables.css (which was refactored to use --accent-primary / --accent-secondary). Replaced both border-color and color usages with var(--accent-primary) (#9557b5 — same value), restoring the intended purple hover tint on pagination buttons. todo/01-css-semantic-refactor.md: - Audited ~15 pending CSS/HTML tasks; all were already implemented. Marked as done: .admin-main, .admin-page-title, .admin-form-row, .admin-label, .admin-input/select/textarea, .admin-table, .admin-fieldset, tfe.css class replacements, search.css h2 selector, admin-alert replacement, login.php/edit.php inline style removal, form partial hints (). todo/04-accessibility.md: - Marked WCAG 1.4.1 admin nav and --admin-purple audit items as completed. --- TODO.md | 5 +++++ public/assets/css/admin.css | 10 +++++++-- todo/01-css-semantic-refactor.md | 36 ++++++++++++++++---------------- todo/04-accessibility.md | 4 ++-- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/TODO.md b/TODO.md index 891173e..4d9a773 100644 --- a/TODO.md +++ b/TODO.md @@ -11,6 +11,11 @@ Pending tasks have been split into topic files under [`todo/`](todo/README.md): ## Recently completed (this session) +- [x] `admin.css` — added `[aria-current="page"]` rule for admin nav links (`border-bottom: 2px solid currentColor; padding-bottom: 1px`) fixing WCAG 1.4.1 (active nav link had no non-colour indicator) +- [x] `admin.css` — fixed undefined `--admin-purple` variable in pagination hover; replaced with `--accent-primary` (same `#9557b5` value) +- [x] `todo/01-css-semantic-refactor.md` — audited all CSS/HTML refactor tasks; marked ~15 items as already-done (`.admin-main`, `.admin-page-title`, `.admin-form-row`, `.admin-label`, `.admin-input/select/textarea`, `.admin-table`, `.admin-fieldset`, `tfe.css` class replacements, `search.css` selector, `login.php`/`edit.php` inline styles, `admin-alert` replacement, form partial hints) +- [x] `todo/04-accessibility.md` — marked WCAG 1.4.1 admin nav and `--admin-purple` audit items as completed + - [x] `admin/index.php` — server-side pagination (25/page); `Database::getThesesListCount()` added; `getThesesList()` extended with `$limit`/`$offset`; `access_type` JOIN added to query (was missing); result-count meta line added; `.pagination-wrap` + `.pagination-btn` + `.pagination-info` styles added to `admin.css` - [x] `checkbox-list.php` — replaced `
` with `
    ` (WCAG 1.3.1 fix) diff --git a/public/assets/css/admin.css b/public/assets/css/admin.css index 74d074d..5b3926b 100644 --- a/public/assets/css/admin.css +++ b/public/assets/css/admin.css @@ -18,6 +18,12 @@ opacity: 1; } +/* Active nav link — non-colour indicator required by WCAG 1.4.1 */ +.admin-body header nav ul a[aria-current="page"] { + border-bottom: 2px solid currentColor; + padding-bottom: 1px; +} + .admin-body main { flex: 1; padding: 2.5rem 2rem 4rem; @@ -865,8 +871,8 @@ } .admin-body .pagination-btn:hover:not(.disabled) { - border-color: var(--admin-purple); - color: var(--admin-purple); + border-color: var(--accent-primary); + color: var(--accent-primary); } .admin-body .pagination-btn.disabled { diff --git a/todo/01-css-semantic-refactor.md b/todo/01-css-semantic-refactor.md index 7b8a9d4..ad042c0 100644 --- a/todo/01-css-semantic-refactor.md +++ b/todo/01-css-semantic-refactor.md @@ -2,26 +2,26 @@ ## CSS class audit: replace with semantic selectors (`admin.css` / `main.css` / `tfe.css` / `search.css`) -- [ ] **`admin.css`**: Replace `.admin-main` with `.admin-body main` -- [ ] **`admin.css`**: Replace `.admin-page-title` with `.admin-body main > h1` +- [x] **`admin.css`**: Replace `.admin-main` with `.admin-body main` — already done; CSS uses `.admin-body main` +- [x] **`admin.css`**: Replace `.admin-page-title` with `.admin-body main > h1` — already done; CSS uses `.admin-body main > h1` - [x] **`admin.css`**: Replace `.admin-alert` / `.admin-alert--error` / `.admin-alert--success` with `[role="alert"]` / `data-type="error|success"` attribute -- [ ] **`admin.css`**: Replace `.admin-form-row` with `.admin-body form > div` or CSS grid on `
    ` children -- [ ] **`admin.css`**: Replace `.admin-label` with `.admin-body form label` -- [ ] **`admin.css`**: Replace `.admin-input` / `.admin-select` / `.admin-textarea` with native element selectors +- [x] **`admin.css`**: Replace `.admin-form-row` with `.admin-body form > div` — already done; CSS uses `.admin-form > div:not(.admin-submit-wrap)` grid pattern +- [x] **`admin.css`**: Replace `.admin-label` with `.admin-body form label` — already done; CSS uses `.admin-form > div > label` +- [x] **`admin.css`**: Replace `.admin-input` / `.admin-select` / `.admin-textarea` with native element selectors — already done; CSS targets native `input`, `select`, `textarea` inside `.admin-form` - [x] **`admin.css`**: Replace `.admin-hint` with `.admin-body form small` -- [ ] **`admin.css`**: Replace `.admin-table` with `.admin-body table` -- [ ] **`admin.css`**: Replace `.admin-fieldset` / `.admin-fieldset-legend` with `.admin-body fieldset` / `.admin-body legend` +- [x] **`admin.css`**: Replace `.admin-table` with `.admin-body table` — already done; CSS uses `.admin-body table` +- [x] **`admin.css`**: Replace `.admin-fieldset` / `.admin-fieldset-legend` with `.admin-body fieldset` / `.admin-body legend` — already done; CSS uses `.admin-body fieldset` and `.admin-body legend` - [x] **`main.css`**: Replace `.card__caption` with `.home-body .cards-container li p` or `li > a > p` - [x] **`main.css`**: Replace `.card__media` with `.home-body figure` -- [ ] **`tfe.css`**: Replace `.tfe-meta-list` selectors with `article dl`, `article dt`, `article dd` -- [ ] **`tfe.css`**: Replace `.tfe-media-block` with `aside figure` -- [ ] **`tfe.css`**: Replace `.tfe-file-caption` with `aside figcaption` -- [ ] **`search.css`**: Replace `.repertoire-col > h2` — use `.repertoire-index section > h2` +- [x] **`tfe.css`**: Replace `.tfe-meta-list` selectors with `article dl`, `article dt`, `article dd` — already done +- [x] **`tfe.css`**: Replace `.tfe-media-block` with `aside figure` — already done +- [x] **`tfe.css`**: Replace `.tfe-file-caption` with `aside figcaption` — already done +- [x] **`search.css`**: Replace `.repertoire-col > h2` — already uses `.repertoire-index section > h2` - [x] **`system.php`**: Move inline `