From bb3da870a05419c4fc472e37268f208a6d8439d8 Mon Sep 17 00:00:00 2001
From: bruno
Date: Wed, 28 Oct 2026 23:39:35 -0400
Subject: [PATCH 01/37] =?UTF-8?q?Page=20Projets=20:=20copie=20URL=20dans?=
=?UTF-8?q?=20le=20menu=20=E2=8B=AF=20+=20refonte=20th=C3=A8me=20barre=20F?=
=?UTF-8?q?usion/Spark=20(#44,=20#45)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CHANGELOG.md | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 16972d3..4af0113 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,18 @@
+## 0.42.0 — 2026-10-28 — Lot UX complet (#57 à #68)
+
+- **#57 Jetons** : échelle fermée documentée (typo xs/sm/base/lg/xl, rayons sm/md/base/full, ombres, espacements) ; rayons pilule passés au jeton `--radius-full`.
+- **#58 Boutons** : système primary uni (fini les dégradés), secondary, danger, icon 36px, états unifiés ; `.btn-save` et `.proj-primary` alignés sur le primary.
+- **#59 Icônes** : emoji d'interface retirés des gabarits (cartes, tableaux, états vides, boutons, titres) ; épingler en SVG trait, recherche en SVG ; favicons et contenu utilisateur (titres/labels Gitea) inchangés.
+- **#60 Accessibilité** : jeton `--accent-text` distinct (`#14b8a6` sombre, `#0f766e` clair, 5,47:1 sur blanc) pour tous les textes d'accent ; focus visible unifié.
+- **#61 Typographie** : pile système assumée (Inter déclarée mais jamais chargée, pas de CDN tiers pour une app auto-hébergée) ; hiérarchie H1/H2 via `.page-title`.
+- **#62 Pages** : Aujourd'hui et Focus reprennent l'en-tête `.page-head` / `.page-title` commun ; titre Aujourd'hui ramené à l'échelle xl.
+- **#63 Navigation** : recherche en double supprimée de l'en-tête (palette Ctrl+K + recherche sidebar restent).
+- **#64 Mobile** : cibles 44px sous 640px, en-tête et KPI compacts.
+- **#65 États** : `.empty-state` / `.focus-empty` unifiés, classe `.skeleton` (pulsation, respect de `prefers-reduced-motion`).
+- **#66 Formulaires** : classes `.field-error` / `.field-error-msg` (bordure rouge + message, jamais la couleur seule).
+- **#67 Cartes** : titre clampé à 2 lignes, code discret, labels/chips en texte thème sur fond teinté `color-mix` (contraste garanti quelle que soit la couleur Gitea).
+- **#68 Thème clair** : connexion et wallboard suivent le thème mémorisé (init avant rendu, comme `_header`) et ne restent plus sombres par défaut ; variantes claires ajoutées.
+
## 0.41.0 — 2026-10-28 — Identité Kanbante : sidebar charbon, accent vert, icônes ligne, bouton thème en Administration (#54, #55)
- **Sidebar (#54)** : fond charbon draco (`rgba(26, 28, 26, 0.96)`) à la place du bleu-noir `rgba(13, 16, 24)` oublié par le re-thème 0.39.0 — la barre latérale a désormais la même teinte que le reste du site, en sombre comme en clair (clair déjà blanc).
From 21414de936f6d0b39340c3184073d2820f687c89 Mon Sep 17 00:00:00 2001
From: bruno
Date: Wed, 28 Oct 2026 23:39:37 -0400
Subject: [PATCH 02/37] =?UTF-8?q?Page=20Projets=20:=20copie=20URL=20dans?=
=?UTF-8?q?=20le=20menu=20=E2=8B=AF=20+=20refonte=20th=C3=A8me=20barre=20F?=
=?UTF-8?q?usion/Spark=20(#44,=20#45)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/config.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/config.py b/app/config.py
index cbadc00..fbada76 100644
--- a/app/config.py
+++ b/app/config.py
@@ -177,7 +177,7 @@ from urllib.parse import urlparse
BASE_DIR = Path(__file__).resolve().parent.parent
-APP_VERSION = "0.41.0"
+APP_VERSION = "0.42.0"
def _env_bool(name: str, default: bool) -> bool:
From 7a3081c408bcc5728d5f341df4dfb435868117b8 Mon Sep 17 00:00:00 2001
From: bruno
Date: Wed, 28 Oct 2026 23:39:39 -0400
Subject: [PATCH 03/37] =?UTF-8?q?Page=20Projets=20:=20copie=20URL=20dans?=
=?UTF-8?q?=20le=20menu=20=E2=8B=AF=20+=20refonte=20th=C3=A8me=20barre=20F?=
=?UTF-8?q?usion/Spark=20(#44,=20#45)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/templates/_card.html | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/templates/_card.html b/app/templates/_card.html
index 46c8e87..af02bdc 100644
--- a/app/templates/_card.html
+++ b/app/templates/_card.html
@@ -13,14 +13,14 @@
{% if issue.labels %}
{% for label in issue.labels %}
-
+
{{ label.name }}
{% endfor %}
{% endif %}
{% if issue._code %}
-
⑂{% if issue._code.branches %} 🌿 {{ issue._code.branches }}{% endif %}{% if issue._code.commits %} · {{ issue._code.commits }} commit{{ 's' if issue._code.commits > 1 }}{% endif %}{% if issue._code.pr %} · PR #{{ issue._code.pr.number }} {{ issue._code.pr.label }}{% endif %}
+
⑂{% if issue._code.branches %} {{ issue._code.branches }}{% endif %}{% if issue._code.commits %} · {{ issue._code.commits }} commit{{ 's' if issue._code.commits > 1 }}{% endif %}{% if issue._code.pr %} · PR #{{ issue._code.pr.number }} {{ issue._code.pr.label }}{% endif %}
{% endif %}
{% if issue.assignee %}
@@ -30,8 +30,8 @@
{% set age = ages.get(issue.number) %}
{% if age and age.days >= aging_days %}
⏳ {{ age.days }} j
+ title="Dans cette colonne depuis le {{ age.since[:10] }}">{{ age.days }} j
{% endif %}
-
+
Espace : {{ workspace.name }} (change d'espace par le sélecteur en haut pour régler un autre board). Les colonnes sont propres à chaque espace : nom, couleur, ordre et mapping étiquette ↔ colonne. La clé d'une colonne ne change jamais (les cartes y sont rattachées) ; le nom affiché, lui, est libre.