Kanbante 0.45.4 : logo officiel, board clair, badge d'âge lisible #76
@@ -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
|
## 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.
|
- **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
@@ -177,7 +177,7 @@ from urllib.parse import urlparse
|
|||||||
|
|
||||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
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:
|
def _env_bool(name: str, default: bool) -> bool:
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
<aside class="sidebar" id="sidebar" aria-label="Navigation principale">
|
<aside class="sidebar" id="sidebar" aria-label="Navigation principale">
|
||||||
<div class="side-head">
|
<div class="side-head">
|
||||||
<a href="/" class="side-logo" aria-label="Kanbante — accueil">
|
<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>
|
<span class="side-label gradient-text">Kanbante</span>
|
||||||
</a>
|
</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>
|
<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
@@ -136,7 +136,9 @@ button, input, select, textarea { font: inherit; }
|
|||||||
width: 34px;
|
width: 34px;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
border-radius: 10px;
|
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);
|
box-shadow: var(--shadow-sm);
|
||||||
font-size: 1rem;
|
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 { 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; }
|
.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; }
|
.side-search svg { width: 19px; height: 19px; display: block; }
|
||||||
/* Bouton thème dans la section Administration (#55) : même
|
/* Bouton thème dans la section Administration (#55) : même
|
||||||
gabarit qu'un lien de navigation, mais c'est un <button>. */
|
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]. */
|
sombres par défaut — ils suivent html[data-theme]. */
|
||||||
html[data-theme="light"] .wall-body { background: #f2f2f0; color: #1b1d1a; }
|
html[data-theme="light"] .wall-body { background: #f2f2f0; color: #1b1d1a; }
|
||||||
html[data-theme="light"] .login-body { background: #f2f2f0; }
|
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; }
|
||||||
|
|||||||
@@ -16,8 +16,10 @@ def test_sidebar_charbon_et_accent_vert(client, fake_gitea):
|
|||||||
def test_nav_icons_sont_des_svg(client, fake_gitea):
|
def test_nav_icons_sont_des_svg(client, fake_gitea):
|
||||||
page = client.get("/")
|
page = client.get("/")
|
||||||
assert 'class="side-ico"><svg' in page.text
|
assert 'class="side-ico"><svg' in page.text
|
||||||
# Le logo Kanbante est aussi un SVG (colonnes blanches).
|
# Le logo de la barre latérale est le logo officiel
|
||||||
assert 'class="logo-mark"><svg' in page.text
|
# (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):
|
def test_theme_toggle_dans_admin_pas_dans_en_tete(client, fake_gitea):
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user