polish(marketing): refonte HYPER PRO 'Comment ça marche' — purge non-brand hex + uniformization typo/spacing

Refactor mécanique strict :
- Purge 100% des hex non-brand (#0891b2, #a21caf, #e879f9, #1d4ed8, #9333ea, #f5d0fe, #67e8f9, #1e40af, #93c5fd, #9CA3AF, #0e7490, #EF4444 capital) → mapping vers brand-b1/b2/b3
- Standardisation tailles : 0 inline font-size, text-[9px/10px/11px] uniquement (purge 5.5/6/6.5/7/7.5/8/8.5 arbitraires)
- 0 font-family inline (utilise font-sans/font-mono Tailwind)

Polish device :
- Inner screen seam (effet "écran encastré dans bezel")
- Notch : intègre speaker grille 3 dots + camera dot dans la dynamic island
- Status bar : vraie batterie 80% fill, vrai WiFi 3 arcs concentriques + dot, signal 4 bars croissantes
- Logo DictIA 92×28 plus grand (opacité 85%)

Polish modes :
- Mode 1 : header compact mic+filename+REC, waveform 16 bars symétriques, file card MP3 redesign avec corner fold
- Mode 2 : avatars empilés 18×18 avec bordure white/15, bubbles max-width 80%, timestamps text-[9px]
- Mode 3 : grille langues text-[10px] line-height 18px, padding 8px, palette stricte b1/b2/b3
- Mode 4 : grid 4×2 cards 42×50, drop staggered 90ms, palette stricte b1/b2/b3 + dc2626 PDF + 374151 TXT
- Mode 5 : header counter Inter font-black text-base, connecting lines opacité 0.18
- Mode 6 : breadcrumb compact, toolbar 4 icons, hover row highlight, palette b1/b2/b3
- Mode 0 : chat bubbles uniformisés text-[10px], footer shield emerald (sécurité)

Polish right panel IA :
- Brain 40×40 cercle gradient brand-b3 (déjà OK)
- Badges Mistral 7B (b3 bg) + LOCAL (emerald bg)
- 3 metrics : 0ms grad-text · 100% emerald · 24/7 grad-text font-black text-lg
- Sovereignty bullets : icon dans cercle 20×20 rounded-full bg-brand-b3/[0.15]
- Padding p-5 généreux

Polish feature info card sous phone :
- Background uniforme bg-white/[0.06] + border-white/[0.10]
- Border-left 3px accent activeColor (style tab indicator)
- Icon container 32×32 rounded-md
- Badge top-right text-[10px] tracking-wider

Polish bottom tab bar :
- Buttons 34×42, gap-1 serré
- Active : bottom border 2px + scale icon 1.15 + drop-shadow color
- Labels text-[9px] uppercase tracking-wider
- AUTO pill : px-2.5 py-0.5 rounded-full bg-emerald/12

Tests :
- +6 assertions polish (forbidden hex purge, screen seam, white/0.06, brand-b3/[0.15], grad-text)
- 9/9 fonctionnalites tests pass
- 29/29 marketing tests pass (2 conformite failures pré-existantes baseline)

Build : npm run build:css → static/css/marketing.css régénéré pour les nouvelles classes arbitraires

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Allison
2026-04-29 10:49:47 -04:00
parent d6ff71640a
commit 7d3348c3fd
3 changed files with 426 additions and 296 deletions

View File

@@ -254,6 +254,25 @@ def test_fonctionnalites_how_it_works_reactor_section():
assert 'cloud' in body, "Missing stats row 'cloud'"
assert 'Voir une démo' in body, "Missing demo CTA link"
# ── HYPER PRO polish 2026-04-29 (audit purge non-brand hex + uniformization) ──
# Brand canonical palette ONLY in JS color tables (no purple-600/cyan-700/blue-700/...)
js_section = body[body.find("function dictiaDashboard()"):body.find("</script>", body.find("function dictiaDashboard()"))]
forbidden_hex = ['#9333ea', '#1d4ed8', '#a21caf', '#0e7490', '#0891b2',
'#1e40af', '#67e8f9', '#93c5fd', '#f5d0fe', '#e879f9',
'#A78BFA', '#22D3EE', '#6B9FFF', '#34D399', '#F59E0B',
'#7C3AED', '#5B21B6', '#065F46', '#1C3A5E']
for hx in forbidden_hex:
assert hx not in body, f"Forbidden non-brand hex {hx} found in fonctionnalites — must purge"
# Inner screen seam (effet "écran encastré")
assert 'dictia-phone-screen-seam' in body, "Missing inner screen seam (encastré effect)"
# Uniform feature info card — bg-white/[0.06] + accent border-left
assert 'bg-white/[0.06]' in body, "Missing uniform white/0.06 bg on feature card"
# Sovereignty bullets : icon dans cercle 20×20 brand-b3/[0.15]
assert 'bg-brand-b3/[0.15]' in body, "Missing brand-b3 circle bg on sovereignty bullets"
# Performance metrics : 3 cells with grad-text for 0ms / 24/7
assert 'grad-text' in body, "Missing grad-text on metrics"
def test_fonctionnalites_export_formats_section():
client = app.test_client()