Kanbante 0.45.4 : logo officiel, board clair, badge d'âge lisible #76

Merged
bruno merged 6 commits from correctifs-theme-logo-0-45-4 into main 2026-10-30 11:27:16 -04:00
6 changed files with 80 additions and 6 deletions
+9
View File
@@ -1,3 +1,12 @@
## 0.45.4 — 2026-10-30 — Logo officiel en barre latérale, board clair, badge d'âge lisible
Retours de Bruno (captures du 2026-10-30), trois correctifs :
- **Logo de la barre latérale** : le pictogramme « 3 barres » est remplacé par le logo officiel de Kanbante — `static/img/logos/kanbante.png`, le même que l'onglet Kanbante de la barre d'apps commune. Le conteneur `.logo-mark` devient neutre (le PNG porte son propre fond vert) ; l'assertion du test d'identité suit.
- **Board en thème clair** : les colonnes et le panneau « Notes du projet » gardaient le fond sombre codé en dur (`rgba(20, 24, 34, .72)`) — surcharges `html[data-theme="light"]` en blanc translucide (0.85), comme la barre latérale et l'en-tête. Le thème sombre est inchangé.
- **Badge d'âge illisible en clair** (page En vol, Focus) : le texte jaune pâle `#fcd34d` sur fond jaune translucide passe en ambre foncé `#b45309` en thème clair ; même famille de contraste pour l'état « très vieux » et le compteur de colonne au-delà de sa limite WIP (`#dc2626`).
- **Vérifié en navigateur réel** (styles calculés + captures relues) : colonnes blanches et badge ambre lisible en clair, aucune régression en sombre. 367 tests verts (4 nouveaux, `tests/test_logo_et_contrastes.py`).
## 0.45.3 — 2026-10-29 — Barre commune v0.1.11 : marque monochrome, anneau rouge de l'avatar
- **Barre d'apps v0.1.11 vendangée (dracodev-commons)** : `draco-barre.css` remplacé verbatim (le JS Kanbante est déjà identique à celui de commons, inchangé en v0.1.11) ; fragment `_draco_bar.html` porté à la v0.1.11, le reste de l'intégration Kanbante (URL Jinja `draco_urls` / `agent_url`, `onAction` complet y compris profil/déconnexion, compteurs) est inchangé. Les surcharges Kanbante dans `style.css` ne sont pas touchées.
+1 -1
View File
@@ -177,7 +177,7 @@ from urllib.parse import urlparse
BASE_DIR = Path(__file__).resolve().parent.parent
APP_VERSION = "0.45.3"
APP_VERSION = "0.45.4"
def _env_bool(name: str, default: bool) -> bool:
+1 -1
View File
@@ -90,7 +90,7 @@
<aside class="sidebar" id="sidebar" aria-label="Navigation principale">
<div class="side-head">
<a href="/" class="side-logo" aria-label="Kanbante — accueil">
<span class="logo-mark"><svg viewBox="0 0 24 24" fill="#fff" aria-hidden="true"><rect x="3" y="4" width="5" height="16" rx="1"/><rect x="9.5" y="4" width="5" height="10" rx="1"/><rect x="16" y="4" width="5" height="13" rx="1"/></svg></span>
<span class="logo-mark"><img src="/static/img/logos/kanbante.png" alt="Kanbante" width="34" height="34"></span>
<span class="side-label gradient-text">Kanbante</span>
</a>
<button type="button" class="side-search palette-trigger" title="Recherche & commandes (Ctrl+K)" aria-label="Recherche et commandes (Ctrl+K)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-4-4"/></svg></button>
+18 -2
View File
@@ -136,7 +136,9 @@ button, input, select, textarea { font: inherit; }
width: 34px;
height: 34px;
border-radius: 10px;
background: linear-gradient(135deg, var(--accent), var(--accent-2));
/* Le logo officiel (kanbante.png, le même que la barre
d'apps commune) porte son propre fond : conteneur neutre. */
background: transparent;
box-shadow: var(--shadow-sm);
font-size: 1rem;
}
@@ -1394,7 +1396,7 @@ body.nav-closed-admin [data-group="admin"] .side-chevron { transform: rotate(-90
}
.side-ico { font-size: 1.05rem; width: 22px; text-align: center; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; }
.side-ico svg { width: 20px; height: 20px; display: block; }
.logo-mark svg { width: 20px; height: 20px; display: block; }
.logo-mark img { width: 34px; height: 34px; display: block; border-radius: 10px; }
.side-search svg { width: 19px; height: 19px; display: block; }
/* Bouton thème dans la section Administration (#55) : même
gabarit qu'un lien de navigation, mais c'est un <button>. */
@@ -1980,3 +1982,17 @@ html[data-theme="light"] .draco-bar {
sombres par défaut — ils suivent html[data-theme]. */
html[data-theme="light"] .wall-body { background: #f2f2f0; color: #1b1d1a; }
html[data-theme="light"] .login-body { background: #f2f2f0; }
/* Thème clair (retour de Bruno, 2026-10-30) : le board gardait
ses colonnes et son panneau Notes sur le fond sombre codé en
dur (rgba(20,24,34,.72)) — surfaces claires, comme la barre
latérale et l'en-tête. */
html[data-theme="light"] .kanban-column { background: rgba(255, 255, 255, 0.85); }
html[data-theme="light"] .notes-panel { background: rgba(255, 255, 255, 0.85); }
/* Badge d'âge des cartes (En vol, Focus) : le jaune pâle
#fcd34d sur fond jaune translucide était illisible en clair —
ambre et rouge foncés, contraste vérifié. Même famille :
le compteur de colonne au-delà de sa limite WIP. */
html[data-theme="light"] .age-badge { color: #b45309; }
html[data-theme="light"] .age-badge.stale { color: #dc2626; }
html[data-theme="light"] .column-count.over { color: #dc2626; }
+4 -2
View File
@@ -16,8 +16,10 @@ def test_sidebar_charbon_et_accent_vert(client, fake_gitea):
def test_nav_icons_sont_des_svg(client, fake_gitea):
page = client.get("/")
assert 'class="side-ico"><svg' in page.text
# Le logo Kanbante est aussi un SVG (colonnes blanches).
assert 'class="logo-mark"><svg' in page.text
# Le logo de la barre latérale est le logo officiel
# (kanbante.png, celui de la barre d'apps commune) —
# remplacement demandé par Bruno le 2026-10-30.
assert 'class="logo-mark"><img src="/static/img/logos/kanbante.png"' in page.text
def test_theme_toggle_dans_admin_pas_dans_en_tete(client, fake_gitea):
+47
View File
@@ -0,0 +1,47 @@
"""Retours de Bruno (2026-10-30) : logo de la barre latérale,
board en thème clair, badge d'âge illisible en clair.
1. La barre latérale montrait un pictogramme « 3 barres » ;
le logo doit être celui de la barre d'apps commune
(static/img/logos/kanbante.png).
2. En thème clair, les colonnes du board et le panneau Notes
gardaient le fond sombre codé en dur rgba(20,24,34,.72).
3. Le badge d'âge (En vol, Focus) : texte jaune pâle sur
fond jaune translucide — illisible en thème clair.
"""
def test_sidebar_logo_officiel(client, fake_gitea):
page = client.get("/")
assert 'src="/static/img/logos/kanbante.png"' in page.text
# L'ancien pictogramme à barres blanches a disparu.
assert '<rect x="3" y="4" width="5" height="16"' not in page.text
def test_logo_officiel_servi(client, fake_gitea):
r = client.get("/static/img/logos/kanbante.png")
assert r.status_code == 200
assert r.content[:4] == b"\x89PNG"
def test_board_clair_surfaces_eclaircies(client, fake_gitea):
css = client.get("/static/css/style.css").text
assert (
'html[data-theme="light"] .kanban-column '
'{ background: rgba(255, 255, 255, 0.85); }'
) in css
assert (
'html[data-theme="light"] .notes-panel '
'{ background: rgba(255, 255, 255, 0.85); }'
) in css
def test_badge_age_lisible_en_clair(client, fake_gitea):
css = client.get("/static/css/style.css").text
assert 'html[data-theme="light"] .age-badge { color: #b45309; }' in css
assert (
'html[data-theme="light"] .age-badge.stale { color: #dc2626; }'
) in css
assert (
'html[data-theme="light"] .column-count.over { color: #dc2626; }'
) in css