feat: design system overhaul — sidebar, AI chats, settings, brainstorm, color cleanup
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 12s
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 12s
- Sidebar: dynamic brand-accent colors, brainstorm section restyled - AI chat general: popup panel with expand/collapse, hides when contextual AI open - AI chat contextual: tabs reordered (Actions first), X close button, height fix - Settings: all tabs restyled, 6 new color presets (sage, terracotta, iron, etc.) - Global color cleanup: emerald/orange hardcoded → brand-accent dynamic - Brainstorm page: orange → brand-accent throughout - PageEntry animation component added to key pages - Floating AI button: bg-brand-accent instead of hardcoded black - i18n: all 15 locales updated with new AI/billing keys - Billing: freemium quota tracking, BYOK, stripe subscription scaffolding - Admin: integrated into new design - AGENTS.md + CLAUDE.md project rules added
This commit is contained in:
@@ -55,7 +55,11 @@
|
||||
"freezePinnedNotebook": "Figer l'état du carnet",
|
||||
"unfreezePinnedNotebook": "Défiger l'état du carnet",
|
||||
"newSubNotebook": "Nouveau sous-carnet",
|
||||
"renameNotebook": "Renommer"
|
||||
"renameNotebook": "Renommer",
|
||||
"sharedNotebookBadge": "· partagé",
|
||||
"sortManual": "Ordre libre",
|
||||
"moveFailed": "Impossible de déplacer le carnet",
|
||||
"dropToRoot": "Déposer ici pour remonter à la racine"
|
||||
},
|
||||
"notes": {
|
||||
"title": "Notes",
|
||||
@@ -261,7 +265,11 @@
|
||||
"noteDeletedToast": "Note supprimée.",
|
||||
"deleteNoteFailedToast": "Impossible de supprimer.",
|
||||
"documentInfoAria": "Informations du document",
|
||||
"noModification": "Aucune modification"
|
||||
"noModification": "Aucune modification",
|
||||
"notes.emptyNotebook": "Empty notebook",
|
||||
"notes.emptyNotebookDesc": "This notebook has no notes. Click + to create one.",
|
||||
"notes.noNoteSelected": "No note selected",
|
||||
"notes.selectOrCreateNote": "Select a note from the list or create a new one."
|
||||
},
|
||||
"pagination": {
|
||||
"previous": "←",
|
||||
@@ -483,6 +491,13 @@
|
||||
"resourcePreviewInjectFromChat": "Injecter depuis Discussion",
|
||||
"contextLabel": "Contexte",
|
||||
"thisNote": "Cette note",
|
||||
"contextSourceHeading": "Source du contexte",
|
||||
"tones": {
|
||||
"professional": "Professionnel",
|
||||
"creative": "Créatif",
|
||||
"academic": "Académique",
|
||||
"casual": "Décontracté"
|
||||
},
|
||||
"allMyNotes": "Toutes mes notes",
|
||||
"notebookGeneric": "Carnet",
|
||||
"writingTone": "Ton d'écriture",
|
||||
@@ -1067,6 +1082,12 @@
|
||||
"providerLMStudioOption": "🖥️ LM Studio (local)",
|
||||
"bestValue": "Meilleur rapport qualité/prix",
|
||||
"bestQuality": "Meilleure qualité",
|
||||
"fallbackSectionTitle": "Fournisseur de secours (optionnel)",
|
||||
"fallbackSectionDescription": "Utilisé automatiquement en cas d'erreur fournisseur (429, 5xx). Un seul nouvel essai sous 1,5 s.",
|
||||
"fallbackProvider": "Fournisseur de secours",
|
||||
"fallbackModel": "Modèle de secours",
|
||||
"fallbackNone": "Aucun (désactivé)",
|
||||
"fallbackModelPlaceholder": "ex. gpt-4o-mini",
|
||||
"saved": "(Enregistré)",
|
||||
"fetchModelsFailed": "Échec du chargement des modèles",
|
||||
"refreshModels": "Rafraîchir les modèles",
|
||||
@@ -1415,7 +1436,29 @@
|
||||
"fontFamilyLabel": "Famille de polices",
|
||||
"fontFamilyDescription": "Choisissez la police utilisée dans toute l'application",
|
||||
"selectFontFamily": "Inter est optimisé pour la lisibilité, Système utilise la police native de votre système d'exploitation",
|
||||
"fontSystem": "Police système par défaut"
|
||||
"fontSystem": "Police système par défaut",
|
||||
"fontInterDefault": "Inter (défaut)",
|
||||
"fontPlayfairDisplay": "Playfair Display",
|
||||
"fontJetBrainsMono": "JetBrains Mono"
|
||||
},
|
||||
"usageMeter": {
|
||||
"packName": "Pack découverte IA",
|
||||
"featureSearch": "Recherche",
|
||||
"featureTags": "Étiquettes",
|
||||
"featureTitles": "Titres",
|
||||
"unlimited": "Illimité",
|
||||
"remaining": "{count} restants",
|
||||
"upgradeTitle": "Passer à Pro",
|
||||
"upgradeDescription": "Vous avez utilisé tous les crédits du pack découverte IA. Passez à Pro pour des plafonds plus élevés et des fonctionnalités supplémentaires.",
|
||||
"proIncludes": "Pro inclut :",
|
||||
"proSearch": "100 recherches sémantiques / mois",
|
||||
"proTags": "200 étiquettes auto / mois",
|
||||
"proTitles": "200 titres auto / mois",
|
||||
"proReformulate": "50 reformulations / mois",
|
||||
"proChat": "100 messages de chat / mois",
|
||||
"later": "Plus tard",
|
||||
"upgradePricing": "Passer à Pro",
|
||||
"addApiKey": "Utiliser votre propre clé API (BYOK)"
|
||||
},
|
||||
"generalSettings": {
|
||||
"title": "Paramètres généraux",
|
||||
@@ -1704,6 +1747,26 @@
|
||||
"notesSelected": "{{count}} note(s) sélectionnée(s)",
|
||||
"slideTheme": "Thème de la présentation",
|
||||
"slideThemeDefault": "Automatique",
|
||||
"slideThemes": {
|
||||
"modern_wellness": "Moderne & bien-être",
|
||||
"business_authority": "Affaires & autorité",
|
||||
"nature_outdoors": "Nature & plein air",
|
||||
"vintage_academic": "Vintage & académique",
|
||||
"soft_creative": "Doux & créatif",
|
||||
"bohemian": "Bohème",
|
||||
"vibrant_tech": "Éclat & tech",
|
||||
"craft_artisan": "Artisan & fait main",
|
||||
"tech_night": "Tech & nuit (sombre)",
|
||||
"education_charts": "Éducation & graphiques",
|
||||
"forest_eco": "Forêt & éco",
|
||||
"elegant_fashion": "Élégance & mode",
|
||||
"art_food": "Art & gastronomie",
|
||||
"luxury_mystery": "Luxe & mystère",
|
||||
"pure_tech_blue": "Bleu tech pur",
|
||||
"coastal_coral": "Corail côtier",
|
||||
"vibrant_orange_mint": "Orange vif & menthe",
|
||||
"platinum_white_gold": "Platine blanc & or"
|
||||
},
|
||||
"slideStyle": "Style visuel",
|
||||
"slideStyleSoft": "Doux (recommandé)",
|
||||
"slideStyleSharp": "Net & dense",
|
||||
@@ -2033,7 +2096,19 @@
|
||||
"superscript": "Exposant",
|
||||
"subscript": "Indice",
|
||||
"addBlock": "Ajouter un bloc",
|
||||
"placeholder": "Tapez '/' pour voir les commandes..."
|
||||
"placeholder": "Tapez '/' pour voir les commandes...",
|
||||
"aiReformulateFailed": "L'assistant IA n'a pas pu traiter ce texte. Réessayez.",
|
||||
"translateTargets": {
|
||||
"Francais": "Français",
|
||||
"English": "Anglais",
|
||||
"Espanol": "Espagnol",
|
||||
"Deutsch": "Allemand",
|
||||
"Persan": "Persan",
|
||||
"Portugais": "Portugais",
|
||||
"Italiano": "Italien",
|
||||
"Chinois": "Chinois",
|
||||
"Japonais": "Japonais"
|
||||
}
|
||||
},
|
||||
"brainstorm": {
|
||||
"title": "Vagues de pensée",
|
||||
@@ -2098,6 +2173,164 @@
|
||||
"joined": "a rejoint la session",
|
||||
"idea_dismissed": "a écarté une idée",
|
||||
"invite_created": "a créé une invitation"
|
||||
},
|
||||
"shareDialogTitle": "Partager le brainstorm",
|
||||
"shareSearchLabel": "Rechercher une personne",
|
||||
"shareNameOrEmailPlaceholder": "Nom ou email…",
|
||||
"shareSubmit": "Partager",
|
||||
"shareSubmitting": "Envoi…",
|
||||
"shareFooterHint": "La personne recevra une notification pour accepter ou refuser.",
|
||||
"sharePublicLink": "Lien public",
|
||||
"shareGuestsCanEdit": "Autoriser les invités à modifier",
|
||||
"feedbackInviteSent": "Invitation envoyée !",
|
||||
"feedbackInviteResent": "Invitation renvoyée !",
|
||||
"feedbackAlreadyShared": "Cette personne a déjà accès à ce brainstorm.",
|
||||
"feedbackAlreadyPending": "Une invitation est déjà en attente pour cette personne.",
|
||||
"feedbackGenericError": "Erreur",
|
||||
"unnamedPerson": "Sans nom",
|
||||
"canvasEditTitleReply": "Réponse",
|
||||
"canvasEditTitleNewIdea": "Nouvelle idée",
|
||||
"canvasPlaceholderReply": "Votre réponse…",
|
||||
"canvasPlaceholderIdea": "Votre idée…",
|
||||
"canvasShortcutSave": "enregistrer",
|
||||
"canvasShortcutCancel": "annuler",
|
||||
"canvasChildBranch": "enfant",
|
||||
"canvasDoubleClickHint": "Double-clic pour ajouter une idée",
|
||||
"ideaDetailDescription": "Description",
|
||||
"ideaDetailConnection": "Connexion",
|
||||
"ideaDetailNovelty": "Originalité",
|
||||
"ideaDetailWave": "Vague",
|
||||
"waveFlavorVariation": "Variation",
|
||||
"waveFlavorAnalogy": "Analogie",
|
||||
"waveFlavorDisruption": "Disruption",
|
||||
"liveCollaborationTitle": "Collaboration en direct",
|
||||
"liveStatus": "En direct",
|
||||
"liveYouMarker": "(vous)",
|
||||
"liveOtherParticipants": "{count} autres participants",
|
||||
"guestReadOnlyNotice": "Vous consultez ce brainstorm en tant qu'invité. Connectez-vous pour modifier.",
|
||||
"impactNotesEnriched": "{count} note(s) enrichie(s)",
|
||||
"impactNotesMarkedDry": "{count} note(s) marquée(s) sèche(s)",
|
||||
"impactSeparator": " · ",
|
||||
"exportNotebookPrefix": "Carnet :",
|
||||
"playbackStep": "Étape {current}/{total}",
|
||||
"playbackStepsCount": "{count} étapes",
|
||||
"playbackReturnToLive": "Revenir au direct",
|
||||
"canvasWaitingHint": "Le canevas attend votre étincelle…",
|
||||
"seedNodeBadge": "GRAINE",
|
||||
"originalSeedDescription": "Idée source initiale",
|
||||
"convertedToNoteStatus": "Convertie en note",
|
||||
"quotaGuest": "L'hôte de la session a atteint sa limite d'IA. Demandez-lui de mettre à niveau son forfait.",
|
||||
"quotaHost": "Vous avez atteint votre limite d'IA pour ce brainstorm. Passez à un forfait supérieur pour continuer.",
|
||||
"toastExpandSuccess": "Idées élargies !",
|
||||
"toastExpandFailed": "Échec de l'élargissement",
|
||||
"toastDismissSuccess": "Idée écartée",
|
||||
"toastDismissFailed": "Échec de l'écartement",
|
||||
"toastConvertSuccess": "Idée convertie en note !",
|
||||
"toastConvertFailed": "Échec de la conversion",
|
||||
"toastExportNoteSuccess": "Exportée en note !",
|
||||
"toastExportFailed": "Échec de l'export",
|
||||
"legendSeed": "Graine",
|
||||
"legendVariations": "Variations",
|
||||
"legendAnalogies": "Analogies",
|
||||
"legendDisruptions": "Ruptures",
|
||||
"exportFailedMessage": "Échec de l'export",
|
||||
"exportDefaultNotebookName": "Brainstorm",
|
||||
"exportDefaultNoteTitle": "Synthèse",
|
||||
"exportOpening": "Ouverture…",
|
||||
"ownerBadge": "Propriétaire",
|
||||
"waveBadge": "Vague {wave}"
|
||||
},
|
||||
"byokSettings": {
|
||||
"title": "Vos clés API (BYOK)",
|
||||
"description": "Connectez vos propres clés fournisseur pour contourner les quotas du pack Découverte. Les clés sont chiffrées au repos.",
|
||||
"badgeActive": "BYOK actif",
|
||||
"tierRequired": "Le BYOK nécessite un abonnement Pro ou supérieur.",
|
||||
"provider": "Fournisseur",
|
||||
"providerPlaceholder": "Choisir un fournisseur",
|
||||
"alias": "Libellé (optionnel)",
|
||||
"aliasPlaceholder": "ex. OpenAI pro",
|
||||
"apiKey": "Clé API",
|
||||
"apiKeyPlaceholder": "sk-...",
|
||||
"save": "Enregistrer la clé",
|
||||
"saved": "Clé API enregistrée",
|
||||
"deleted": "Clé API supprimée",
|
||||
"error": "Impossible d'enregistrer la clé",
|
||||
"loadError": "Impossible de charger les clés",
|
||||
"loading": "Chargement...",
|
||||
"empty": "Aucune clé API configurée.",
|
||||
"confirmDelete": "Supprimer définitivement cette clé API ?",
|
||||
"toggleActive": "Active",
|
||||
"providers": {
|
||||
"openai": "OpenAI",
|
||||
"anthropic": "Anthropic",
|
||||
"deepseek": "DeepSeek",
|
||||
"openrouter": "OpenRouter",
|
||||
"minimax": "MiniMax",
|
||||
"zai": "Z.ai",
|
||||
"google": "Google",
|
||||
"mistral": "Mistral",
|
||||
"glm": "GLM"
|
||||
}
|
||||
},
|
||||
"billing": {
|
||||
"title": "Facturation",
|
||||
"currentPlan": "Plan actuel",
|
||||
"upgradePlan": "Changer de plan",
|
||||
"manageBilling": "Gérer la facturation",
|
||||
"manageDescription": "Mettre à jour le moyen de paiement, consulter les factures ou annuler.",
|
||||
"openPortal": "Ouvrir le portail de facturation",
|
||||
"renewsOn": "Renouvellement le",
|
||||
"expiresOn": "Expire le",
|
||||
"canceledAt": "Annulé — accès jusqu'au",
|
||||
"freePlan": "Plan gratuit",
|
||||
"proPlan": "Plan Pro",
|
||||
"businessPlan": "Plan Business",
|
||||
"enterprisePlan": "Plan Entreprise",
|
||||
"perMonth": "/mois",
|
||||
"perYear": "/an",
|
||||
"monthly": "Mensuel",
|
||||
"annual": "Annuel",
|
||||
"save": "Économiser",
|
||||
"upgradeTitle": "Choisir un plan",
|
||||
"proPrice": "9,90 €",
|
||||
"businessPrice": "29,90 €",
|
||||
"proAnnualPrice": "99 €",
|
||||
"businessAnnualPrice": "299 €",
|
||||
"proFeature1": "100 recherches sémantiques / mois",
|
||||
"proFeature2": "200 tags automatiques / mois",
|
||||
"proFeature3": "50 reformulations / mois",
|
||||
"proFeature4": "100 messages de chat / mois",
|
||||
"businessFeature1": "1 000 recherches sémantiques / mois",
|
||||
"businessFeature2": "1 000 tags automatiques / mois",
|
||||
"businessFeature3": "500 reformulations / mois",
|
||||
"businessFeature4": "1 000 messages de chat / mois",
|
||||
"enterpriseTitle": "Entreprise",
|
||||
"enterpriseDescription": "Quotas personnalisés, SSO, support prioritaire.",
|
||||
"contactSales": "Contacter les ventes",
|
||||
"startCheckout": "Commencer",
|
||||
"checkoutLoading": "Chargement du paiement…",
|
||||
"checkoutSuccess": "Abonnement activé ! Bienvenue dans {tier}.",
|
||||
"checkoutCanceled": "Paiement annulé.",
|
||||
"active": "Actif",
|
||||
"trialing": "Essai",
|
||||
"pastDue": "En retard",
|
||||
"canceled": "Annulé",
|
||||
"inactive": "Inactif",
|
||||
"billingEnabled": "Facturation activée",
|
||||
"billingDisabled": "La facturation n'est pas activée sur cette instance.",
|
||||
"usageThisPeriod": "Utilisation sur cette période",
|
||||
"periodRange": "Période",
|
||||
"unlimited": "Illimité",
|
||||
"noUsage": "Aucune donnée d'utilisation",
|
||||
"billingHistory": "Historique de facturation",
|
||||
"viewInvoices": "Gérer les factures dans le portail",
|
||||
"nextBillingDate": "Prochaine date de facturation",
|
||||
"billingPeriod": "Période de facturation",
|
||||
"planSince": "Membre depuis",
|
||||
"checkoutSuccessTitle": "Abonnement activé !",
|
||||
"checkoutSuccessBody": "Bienvenue sur {tier}. Vos fonctionnalités sont maintenant débloquées.",
|
||||
"subscriptionType": "subscriptionType",
|
||||
"renewalDate": "renewalDate",
|
||||
"noRenewalDate": "—"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user