feat(ui): vague 4 — la zone de dépôt répond, l'or devient lisible, tarifs binaires, avant/après réel
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m58s
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m58s
Zone de dépôt : le contour s'allume en doré et la carte s'agrandit quand on la survole avec un fichier (l'information existait, elle n'était jamais affichée). Or lisible : nouveau jeton « or encre » (#8B6F47) pour les textes, l'or clair reste aux traits, fonds et au mode sombre ; 52 textes dorés convertis, pastille comprises ; plus aucun texte sous 10 px (8,5 px → 11 px dans le sélecteur de moteurs). Tarifs : le choix redevient binaire — les trois abonnements payants en grandes cartes, le gratuit en ligne discrète au-dessus, le sur mesure en ligne dorée dessous. Le tableau comparatif complet reste dessous. Accueil : le mur de six cartes génériques est remplacé par un vrai avant/après — une page « Cahier des charges — Traitement d'air » à côté de sa traduction anglaise, structure identique au mot près (terme technique en gras des deux côtés), sceau « Même mise en page, mot pour mot » entre les deux, et trois preuves précises (SmartArt reconstruits, séries de graphiques traduites, tables des matières régénérées) à la place des promesses vagues.
This commit is contained in:
@@ -272,7 +272,7 @@ export function GlossarySelector({ sourceLang, targetLang, isPro, mode, glossary
|
||||
>
|
||||
<div className="flex justify-between items-center">
|
||||
<div className="flex items-center gap-2">
|
||||
<BookOpen size={14} className="text-brand-accent shrink-0" />
|
||||
<BookOpen size={14} className="text-brand-goldink dark:text-brand-accent shrink-0" />
|
||||
<span className="text-xs font-black uppercase tracking-[0.1em] text-brand-dark dark:text-white truncate">
|
||||
{t('translate.glossary.title') || 'Glossaire & Terminologie'}
|
||||
</span>
|
||||
@@ -403,7 +403,7 @@ export function GlossarySelector({ sourceLang, targetLang, isPro, mode, glossary
|
||||
onClick={() => setFilterByLang(!filterByLang)}
|
||||
className={cn(
|
||||
"text-[10px] font-bold px-2 py-0.5 rounded transition-colors cursor-pointer",
|
||||
filterByLang ? "bg-brand-accent/10 text-brand-accent" : "bg-brand-dark/10 dark:bg-white/10 text-brand-dark/50 dark:text-white/50"
|
||||
filterByLang ? "bg-brand-accent/10 text-brand-goldink dark:text-brand-accent" : "bg-brand-dark/10 dark:bg-white/10 text-brand-dark/50 dark:text-white/50"
|
||||
)}
|
||||
>
|
||||
{filterByLang ? t('translate.glossary.active') || 'Actif' : t('translate.glossary.inactive') || 'Inactif'}
|
||||
@@ -431,7 +431,7 @@ export function GlossarySelector({ sourceLang, targetLang, isPro, mode, glossary
|
||||
className={cn(
|
||||
"w-full text-left px-2.5 py-2 rounded-lg transition-colors flex items-center justify-between cursor-pointer",
|
||||
isSelected
|
||||
? 'bg-brand-accent/5 text-brand-accent'
|
||||
? 'bg-brand-accent/5 text-brand-goldink dark:text-brand-accent'
|
||||
: 'hover:bg-brand-muted dark:hover:bg-white/5 text-brand-dark/70 dark:text-white/70'
|
||||
)}
|
||||
>
|
||||
@@ -441,7 +441,7 @@ export function GlossarySelector({ sourceLang, targetLang, isPro, mode, glossary
|
||||
{flag} ➜ {g.target_language === 'multi' ? `🌐 ${t('translate.glossary.multilingual') || 'MULTILINGUE'}` : getFlag(g.target_language || targetLang)} • {g.terms_count} {t('translate.glossary.terms') || 'termes'}
|
||||
</span>
|
||||
</div>
|
||||
{isSelected && <Check size={12} className="text-brand-accent shrink-0" />}
|
||||
{isSelected && <Check size={12} className="text-brand-goldink dark:text-brand-accent shrink-0" />}
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
@@ -480,7 +480,7 @@ export function GlossarySelector({ sourceLang, targetLang, isPro, mode, glossary
|
||||
className={cn(
|
||||
"w-full text-left px-2.5 py-2 rounded-lg transition-colors flex items-center justify-between cursor-pointer",
|
||||
isAlreadySelected
|
||||
? 'bg-brand-accent/5 text-brand-accent'
|
||||
? 'bg-brand-accent/5 text-brand-goldink dark:text-brand-accent'
|
||||
: 'hover:bg-brand-muted dark:hover:bg-white/5 text-brand-dark/70 dark:text-white/70'
|
||||
)}
|
||||
>
|
||||
@@ -493,9 +493,9 @@ export function GlossarySelector({ sourceLang, targetLang, isPro, mode, glossary
|
||||
</span>
|
||||
</div>
|
||||
{isImporting ? (
|
||||
<Loader2 size={12} className="animate-spin text-brand-accent shrink-0" />
|
||||
<Loader2 size={12} className="animate-spin text-brand-goldink dark:text-brand-accent shrink-0" />
|
||||
) : isAlreadySelected ? (
|
||||
<Check size={12} className="text-brand-accent shrink-0" />
|
||||
<Check size={12} className="text-brand-goldink dark:text-brand-accent shrink-0" />
|
||||
) : null}
|
||||
</button>
|
||||
);
|
||||
@@ -547,7 +547,7 @@ export function GlossarySelector({ sourceLang, targetLang, isPro, mode, glossary
|
||||
|
||||
{isLoadingDetail ? (
|
||||
<div className="flex items-center justify-center py-3 gap-1.5 text-xs text-brand-dark/40 dark:text-white/30 font-light">
|
||||
<Loader2 size={12} className="animate-spin text-brand-accent" /> {t('translate.glossary.loading') || 'Chargement...'}
|
||||
<Loader2 size={12} className="animate-spin text-brand-goldink dark:text-brand-accent" /> {t('translate.glossary.loading') || 'Chargement...'}
|
||||
</div>
|
||||
) : selectedGlossaryDetail?.terms && selectedGlossaryDetail.terms.length > 0 ? (
|
||||
<div className="grid grid-cols-1 gap-1 max-h-[120px] overflow-y-auto pr-1">
|
||||
|
||||
Reference in New Issue
Block a user