Files
xamxam/todo/01-css-semantic-refactor.md
Pontoporeia ff8e33727d admin: semantic HTML pass — checkbox fieldset, landmarks, dl/dt, autocomplete, inline styles
checkbox-list.php partial:
- Replace outer <div>/<label> with <div>/<span class="admin-row-label"> + inner
  <fieldset class="admin-checkbox-group"><legend class="sr-only"> to satisfy
  WCAG 1.3.1 (group label for multi-checkbox rows without duplicating visible text)
- Replace <div class="admin-checkbox-list"> with <ul>; each checkbox wrapped in <li>

admin.css:
- Drop .admin-checkbox-list; add .admin-body fieldset.admin-checkbox-group rules
  (border/padding reset so it doesn't inherit jury-fieldset box styling)
- Extend form-row label rule to span.admin-row-label
- .admin-inline-form + .admin-inline-form { margin-top:.35rem } replaces inline style
- .admin-input--inline / .admin-select--inline get width:160px (was inline style)
- .admin-tags-count + table th sizing via :has() replaces th inline styles

login.php: wrap content in <main id="main-content"> (missing landmark)

account.php:
- <div class="admin-account-status"> → <dl>; __label <span> → <dt>
- <div class="admin-danger-zone__description"> → <p>

index.php: <div class="admin-maintenance-bar"> → <aside role="status" aria-label="Statut du site">

add.php / edit.php: autocomplete="name" on author field, autocomplete="email" on
contact field (WCAG 1.3.5 / input purpose)

tags.php: all inline style= attributes removed (width, text-align, margin-top,
display:inline); all moved to CSS classes
2026-04-06 15:33:08 +02:00

4.6 KiB
Raw Blame History

CSS & Semantic HTML Refactor

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
  • 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 <form> children
  • admin.css: Replace .admin-label with .admin-body form label
  • admin.css: Replace .admin-input / .admin-select / .admin-textarea with native element selectors
  • 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
  • main.css: Replace .card__caption with .home-body .cards-container li p or li > a > p
  • 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
  • system.php: Move inline <style> block to system.css

Template HTML changes to match

  • In all admin templates, replace <p class="admin-hint"> with <small> elements
  • In tfe.php, remove class="tfe-meta-list" — target via article dl
  • In tfe.php, remove class="tfe-media-block" — target via aside figure
  • In tfe.php, remove class="tfe-file-caption" — target via aside figcaption
  • In index.php, remove class="card__caption" — target via li > a > p

Scattered inline styles in templates

  • tfe.php inline styles — already extracted (no style= attributes remain in public/tfe.php)
  • admin/edit.php: multiple style= on .admin-form-row and banner preview → modifier classes in admin.css

Admin semantic HTML (sections IXXVI)

  • add.php/edit.php: Replace <div class="admin-form-row"> with CSS grid on <form> children (~20 divs in add.php, ~22 in edit.php)
  • add.php/edit.php: Replace inner wrapper <div> in multi-control rows — use <small> for hints, remove the wrapper div
  • add.php/edit.php: Replace <div class="admin-checkbox-list"> with <ul>; each <label class="admin-checkbox-label"> becomes <li> containing <label>
  • add.php/edit.php: Replace <div class="admin-submit-wrap"> — remove; apply styles directly to form > button:last-child
  • add.php/edit.php: Replace <div class="admin-alert admin-alert--error/--success"> with <p role="alert"> / <p role="status">
  • index.php: Replace <div class="admin-stats"> / <div class="admin-stat"> children with <dl>/<dt>/<dd>
  • index.php: Replace <div class="admin-maintenance-bar"> with <aside role="status"> or <p role="status">
  • index.php: Add role="toolbar" aria-label="Actions groupées" to <div class="admin-bulk-actions">
  • index.php: Add scope="col" to all <th> cells in the admin table
  • index.php: Add non-colour indicator + aria-label="Statut : …" to status badge <span> elements
  • tags.php: Add scope="col" to <th> cells
  • tags.php: Move inline style="margin-top:.35rem;" on forms → .admin-inline-form + .admin-inline-form selector
  • thanks.php: Replace <div class="admin-thesis-info"> with <section> + <h2> heading; CSS targets main > section
  • account.php: Replace <div class="admin-account-status"> with <dl>; __row<div>, __label<dt>
  • account.php: Replace <div class="admin-danger-zone__description"> with <p>
  • account.php: Move style="margin-top:3rem;" on danger zone heading → CSS modifier class
  • login.php: Wrap login content in <main> (currently no main landmark)
  • login.php: Extract inline styles on .admin-form-row and .admin-submit-wrap.admin-form-row--compact modifier in admin.css

Favicon

  • admin_favicon.svg used as public-facing favicon — rename or create a distinct favicon.svg so admin and public can diverge without naming confusion