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

@@ -363,6 +363,12 @@
.-inset-1 {
inset: calc(var(--spacing) * -1);
}
.-inset-2 {
inset: calc(var(--spacing) * -2);
}
.-inset-3 {
inset: calc(var(--spacing) * -3);
}
.inset-0 {
inset: calc(var(--spacing) * 0);
}
@@ -525,6 +531,9 @@
.left-0\.5 {
left: calc(var(--spacing) * 0.5);
}
.left-1\.5 {
left: calc(var(--spacing) * 1.5);
}
.left-1\/2 {
left: calc(1 / 2 * 100%);
}
@@ -771,6 +780,9 @@
.ml-auto {
margin-left: auto;
}
.ml-px {
margin-left: 1px;
}
.block {
display: block;
}
@@ -984,9 +996,6 @@
.min-h-\[110px\] {
min-height: 110px;
}
.min-h-\[480px\] {
min-height: 480px;
}
.min-h-\[calc\(100vh-62px\)\] {
min-height: calc(100vh - 62px);
}
@@ -1143,9 +1152,6 @@
.max-w-\[300px\] {
max-width: 300px;
}
.max-w-\[320px\] {
max-width: 320px;
}
.max-w-\[820px\] {
max-width: 820px;
}
@@ -1248,10 +1254,6 @@
--tw-translate-y: calc(var(--spacing) * 0);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.translate-y-1 {
--tw-translate-y: calc(var(--spacing) * 1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.translate-y-2 {
--tw-translate-y: calc(var(--spacing) * 2);
translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -1376,6 +1378,12 @@
.flex-wrap {
flex-wrap: wrap;
}
.content-center {
align-content: center;
}
.content-start {
align-content: flex-start;
}
.items-baseline {
align-items: baseline;
}
@@ -1403,6 +1411,12 @@
.justify-start {
justify-content: flex-start;
}
.justify-items-center {
justify-items: center;
}
.gap-0 {
gap: calc(var(--spacing) * 0);
}
.gap-0\.5 {
gap: calc(var(--spacing) * 0.5);
}
@@ -1514,6 +1528,10 @@
-moz-column-gap: calc(var(--spacing) * 6);
column-gap: calc(var(--spacing) * 6);
}
.gap-x-8 {
-moz-column-gap: calc(var(--spacing) * 8);
column-gap: calc(var(--spacing) * 8);
}
.space-x-1 {
:where(& > :not(:last-child)) {
--tw-space-x-reverse: 0;
@@ -1555,6 +1573,9 @@
.gap-y-2 {
row-gap: calc(var(--spacing) * 2);
}
.gap-y-3 {
row-gap: calc(var(--spacing) * 3);
}
.divide-y {
:where(& > :not(:last-child)) {
--tw-divide-y-reverse: 0;
@@ -1655,6 +1676,10 @@
border-style: var(--tw-border-style);
border-width: 2px;
}
.border-\[1\.5px\] {
border-style: var(--tw-border-style);
border-width: 1.5px;
}
.border-\[3px\] {
border-style: var(--tw-border-style);
border-width: 3px;
@@ -1797,6 +1822,9 @@
.border-brand-b3\/20 {
border-color: color-mix(in oklab, #c026d3 20%, transparent);
}
.border-brand-b3\/30 {
border-color: color-mix(in oklab, #c026d3 30%, transparent);
}
.border-brand-b3\/60 {
border-color: color-mix(in oklab, #c026d3 60%, transparent);
}
@@ -2127,6 +2155,9 @@
.bg-brand-b3\/\[0\.08\] {
background-color: color-mix(in oklab, #c026d3 8%, transparent);
}
.bg-brand-b3\/\[0\.15\] {
background-color: color-mix(in oklab, #c026d3 15%, transparent);
}
.bg-brand-bg {
background-color: #f7f9fc;
}
@@ -2753,6 +2784,9 @@
.pb-0 {
padding-bottom: calc(var(--spacing) * 0);
}
.pb-1 {
padding-bottom: calc(var(--spacing) * 1);
}
.pb-2 {
padding-bottom: calc(var(--spacing) * 2);
}
@@ -2859,12 +2893,21 @@
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
}
.text-\[6\.5px\] {
font-size: 6.5px;
}
.text-\[6px\] {
font-size: 6px;
}
.text-\[7\.5px\] {
font-size: 7.5px;
}
.text-\[7px\] {
font-size: 7px;
}
.text-\[8\.5px\] {
font-size: 8.5px;
}
.text-\[8px\] {
font-size: 8px;
}
@@ -2966,10 +3009,6 @@
--tw-tracking: 0.10em;
letter-spacing: 0.10em;
}
.tracking-\[0\.14em\] {
--tw-tracking: 0.14em;
letter-spacing: 0.14em;
}
.tracking-\[0\.16em\] {
--tw-tracking: 0.16em;
letter-spacing: 0.16em;
@@ -3019,6 +3058,9 @@
.whitespace-nowrap {
white-space: nowrap;
}
.whitespace-pre-line {
white-space: pre-line;
}
.whitespace-pre-wrap {
white-space: pre-wrap;
}
@@ -3118,6 +3160,9 @@
.text-brand-b1 {
color: #2563eb;
}
.text-brand-b1\/60 {
color: color-mix(in oklab, #2563eb 60%, transparent);
}
.text-brand-b1\/65 {
color: color-mix(in oklab, #2563eb 65%, transparent);
}
@@ -3373,6 +3418,12 @@
color: color-mix(in oklab, var(--color-white) 85%, transparent);
}
}
.text-white\/90 {
color: color-mix(in srgb, #fff 90%, transparent);
@supports (color: color-mix(in lab, red, red)) {
color: color-mix(in oklab, var(--color-white) 90%, transparent);
}
}
.text-yellow-400 {
color: var(--color-yellow-400);
}
@@ -3641,6 +3692,10 @@
--tw-ease: var(--ease-out);
transition-timing-function: var(--ease-out);
}
.outline-none {
--tw-outline-style: none;
outline-style: none;
}
.select-all {
-webkit-user-select: all;
-moz-user-select: all;
@@ -4696,6 +4751,25 @@
outline-style: none;
}
}
.focus-visible\:ring-2 {
&:focus-visible {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
}
.focus-visible\:ring-brand-b1 {
&:focus-visible {
--tw-ring-color: #2563eb;
}
}
.focus-visible\:ring-white\/40 {
&:focus-visible {
--tw-ring-color: color-mix(in srgb, #fff 40%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--color-white) 40%, transparent);
}
}
}
.focus-visible\:outline {
&:focus-visible {
outline-style: var(--tw-outline-style);
@@ -5084,12 +5158,6 @@
text-align: right;
}
}
.sm\:text-6xl {
@media (width >= 40rem) {
font-size: var(--text-6xl);
line-height: var(--tw-leading, var(--text-6xl--line-height));
}
}
.sm\:text-base {
@media (width >= 40rem) {
font-size: var(--text-base);
@@ -5442,6 +5510,16 @@
width: calc(2 / 3 * 100%);
}
}
.lg\:w-\[280px\] {
@media (width >= 64rem) {
width: 280px;
}
}
.lg\:w-\[320px\] {
@media (width >= 64rem) {
width: 320px;
}
}
.lg\:w-auto {
@media (width >= 64rem) {
width: auto;
@@ -5483,11 +5561,6 @@
grid-template-columns: 1fr 240px;
}
}
.lg\:grid-cols-\[1fr_minmax\(0\,360px\)\] {
@media (width >= 64rem) {
grid-template-columns: 1fr minmax(0,360px);
}
}
.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,420px\)\] {
@media (width >= 64rem) {
grid-template-columns: minmax(0,1fr) minmax(0,420px);
@@ -5498,6 +5571,16 @@
flex-direction: row;
}
}
.lg\:items-start {
@media (width >= 64rem) {
align-items: flex-start;
}
}
.lg\:justify-center {
@media (width >= 64rem) {
justify-content: center;
}
}
.lg\:gap-10 {
@media (width >= 64rem) {
gap: calc(var(--spacing) * 10);