{
  "cookies": {
    "footerButton": "Préférences cookies",
    "banner": {
      "text": "Nous utilisons des cookies et du stockage local pour faire fonctionner le site, mémoriser tes préférences et mesurer notre audience de façon anonyme. Avec ton accord, nous évaluons aussi nos publicités. Tu peux tout accepter, tout refuser ou choisir.",
      "customize": "Personnaliser",
      "acceptAll": "Tout accepter",
      "rejectAll": "Tout refuser"
    },
    "modal": {
      "title": "Préférences des cookies",
      "intro": "Nous respectons ta vie privée. Les cookies nécessaires, de préférence et de mesure d'audience anonyme sont toujours actifs. Seules les publicités requièrent ton accord.",
      "alwaysActive": "Toujours actif",
      "viewCookies": "Voir les cookies",
      "save": "Enregistrer mes choix",
      "acceptAll": "Tout accepter",
      "rejectAll": "Tout refuser",
      "moreInfo": "Plus d'informations dans notre",
      "privacyLink": "politique de confidentialité",
      "close": "Fermer"
    },
    "categories": {
      "necessary": {
        "title": "Strictement nécessaires",
        "description": "Indispensables au fonctionnement du site (connexion, sécurité, paiement). Ils ne peuvent pas être désactivés.",
        "items": [
          {
            "name": "token",
            "provider": "ReptiNode",
            "duration": "Session / 7 jours",
            "purpose": "Maintient ta session connectée (jeton d'authentification)."
          },
          {
            "name": "user",
            "provider": "ReptiNode",
            "duration": "Session / 7 jours",
            "purpose": "Mémorise ton profil pour éviter de le recharger à chaque page."
          },
          {
            "name": "rn_cookie_consent",
            "provider": "ReptiNode",
            "duration": "6 mois",
            "purpose": "Enregistre tes préférences de cookies."
          },
          {
            "name": "__stripe_mid / __stripe_sid",
            "provider": "Stripe",
            "duration": "1 an / 30 min",
            "purpose": "Sécurise les paiements et prévient la fraude."
          },
          {
            "name": "Service Worker (PWA)",
            "provider": "ReptiNode",
            "duration": "Persistant",
            "purpose": "Permet l'installation de l'application et le mode hors-ligne."
          }
        ]
      },
      "functional": {
        "title": "Fonctionnels / Préférences",
        "description": "Mémorisent tes préférences d'usage (langue, affichage, progression du mini-jeu). Données internes à ReptiNode, sans cookie publicitaire ni suivi.",
        "items": [
          {
            "name": "i18nextLng",
            "provider": "ReptiNode",
            "duration": "Persistant",
            "purpose": "Mémorise ta langue préférée."
          },
          {
            "name": "dashboard_context",
            "provider": "ReptiNode",
            "duration": "Persistant",
            "purpose": "Mémorise la vue choisie du tableau de bord (personnelle ou partagée)."
          },
          {
            "name": "android-prompt-dismissed / ios-prompt-dismissed",
            "provider": "ReptiNode",
            "duration": "Persistant",
            "purpose": "Évite de réafficher l'invitation à installer l'application si tu l'as fermée."
          },
          {
            "name": "snake_archive_until_…",
            "provider": "ReptiNode",
            "duration": "Variable",
            "purpose": "Reporte temporairement un rappel pour un animal donné."
          },
          {
            "name": "reptinode_achievements, reptinode_biopoints, reptinode_collection, reptinode_consumables, reptinode_hatched_count, reptinode_prestige, reptinode_upgrades",
            "provider": "ReptiNode",
            "duration": "Persistant",
            "purpose": "Sauvegarde la progression du mini-jeu bonus (succès, points, collection)."
          }
        ]
      },
      "analytics": {
        "title": "Mesure d'audience",
        "description": "Statistiques de fréquentation via un outil auto-hébergé et sans cookie. Données anonymes et agrégées, jamais partagées, ne permettant pas de t'identifier.",
        "items": [
          {
            "name": "analytics.reptinode.fr",
            "provider": "ReptiNode (auto-hébergé)",
            "duration": "Sans cookie",
            "purpose": "Statistiques de fréquentation anonymes et agrégées (pages vues, source). Aucun cookie, aucune donnée personnelle, aucun partage tiers."
          }
        ]
      },
      "marketing": {
        "title": "Marketing & publicité",
        "description": "Permettent de mesurer l'efficacité de nos publicités Facebook & Instagram et de te proposer des contenus pertinents. Désactivés tant que tu n'as pas donné ton accord.",
        "items": [
          {
            "name": "_fbp",
            "provider": "Meta (Facebook)",
            "duration": "3 mois",
            "purpose": "Mesure l'efficacité des publicités et le reciblage."
          },
          {
            "name": "_fbc",
            "provider": "Meta (Facebook)",
            "duration": "3 mois",
            "purpose": "Attribue les visites issues d'un clic sur une publicité Meta."
          },
          {
            "name": "API Conversions (CAPI)",
            "provider": "Meta (Facebook)",
            "duration": "—",
            "purpose": "Envoie les conversions (inscription, abonnement) à Meta côté serveur."
          }
        ]
      }
    }
  },
  "addSnake": {
    "birthDateRequired": "Date de naissance valide requise",
    "add": "Ajouter le reptile",
    "addPhoto": "Ajouter une photo",
    "added": "Ajouté !",
    "adding": "Ajout en cours...",
    "birthDate": "Date de naissance",
    "birthDateInvalid": "Format de date invalide.",
    "birthDateFuture": "La date de naissance ne peut pas être dans le futur.",
    "cancel": "Annuler",
    "changePhoto": "Changer la photo",
    "edit_subtitle": "Modifier les informations de {{name}}.",
    "familyRequired": "Choisissez une famille ou ajoutez le reptile dans votre espace personnel.",
    "female": "Femelle",
    "feedingIntervalInvalid": "La fréquence de repas doit être un nombre entier supérieur à 0.",
    "imageSizeError": "L'image ne doit pas dépasser {{max}} Mo.",
    "imageTypeError": "Le fichier choisi doit être une image.",
    "imageUrl": "URL de l'image",
    "imageUrlPlaceholder": "",
    "length": "Longueur (cm)",
    "lengthInvalid": "La taille doit être supérieure à 0.",
    "locality": "Localité",
    "localityPlaceholder": "ex: Biak",
    "locus": "Locus (séparés par des virgules)",
    "locusPlaceholder": "ex: Mojave, Pied...",
    "male": "Mâle",
    "morph": "Morphe",
    "morphPlaceholder": "ex: Pastel",
    "name": "Nom",
    "namePlaceholder": "ex: Luna",
    "nameRequired": "Le nom est obligatoire.",
    "noPhoto": "Aucune photo",
    "notes": "Notes",
    "notesPlaceholder": "Notes supplémentaires sur ce reptile...",
    "photo": "Photo du reptile",
    "photoHelp": "JPG, PNG ou WebP. {{max}} Mo max.",
    "photo_hint": "Cliquez pour changer",
    "removePhoto": "Supprimer la photo",
    "sex": "Sexe",
    "species": "Espèce",
    "speciesPlaceholder": "ex: Python regius",
    "speciesRequired": "L'espèce est obligatoire.",
    "subtitle": "Renseignez les informations essentielles maintenant, vous pourrez compléter la fiche plus tard.",
    "title": "Ajouter un nouveau reptile",
    "traits": "Traits / Phénotypes",
    "traitsPlaceholder": "ex: Red, Hypo...",
    "unknown": "Inconnu",
    "unknownSpeciesHelp": "Cette espèce n’est pas dans le catalogue, mais vous pouvez quand même l’ajouter.",
    "weight": "Poids (grammes)",
    "weightInvalid": "Le poids doit être supérieur à 0.",
    "destination": {
      "title": "Où ajouter ce reptile ?",
      "personal": "Mon espace personnel",
      "personal_help": "Visible uniquement dans votre liste personnelle.",
      "family": "Une famille",
      "family_help": "Le reptile sera créé puis transféré dans la famille choisie.",
      "family_label": "Famille cible",
      "choose_family": "Choisir une famille...",
      "family_selected": "Sera visible dans {{name}}.",
      "summary_personal": "Ajout dans votre espace personnel.",
      "summary_family": "Ajout dans la famille {{name}}."
    }
  },
  "inventory": {
    "nav": "Proies",
    "title": "Inventaire de proies",
    "subtitle": "Suivez votre stock de proies ; les repas peuvent le décompter automatiquement.",
    "add_item": "Ajouter une proie",
    "empty_title": "Aucune proie suivie",
    "empty_desc": "Ajoutez une ligne de proie (type + taille) pour suivre votre stock et recevoir des alertes de stock bas.",
    "error": "Impossible de charger l'inventaire.",
    "low_stock_banner": "{{count}} ligne(s) au niveau ou en dessous du seuil de stock bas.",
    "low_badge": "Bas",
    "unit_weight": "Unité",
    "threshold": "Seuil",
    "unit_cost": "Coût",
    "stock": "Stock",
    "history": "Historique",
    "confirm_delete": "Supprimer cette ligne de proie ?",
    "toast": { "created": "Proie ajoutée", "updated": "Proie mise à jour", "deleted": "Proie supprimée", "stock_updated": "Stock mis à jour", "error": "Une erreur est survenue" },
    "modal": { "title_create": "Ajouter une proie", "title_edit": "Modifier la proie", "prey_type": "Type de proie", "prey_size": "Taille", "any_size": "Toute / non précisée", "initial_qty": "Quantité initiale", "unit_weight": "Poids unitaire (g)", "threshold": "Seuil de stock bas", "unit_cost": "Coût unitaire", "notes": "Notes" },
    "stock_modal": { "title": "Mettre à jour le stock", "add": "Ajouter", "remove": "Retirer", "amount": "Quantité", "note": "Note", "current": "Stock actuel : {{count}}" },
    "movements_title": "Mouvements de stock",
    "no_movements": "Aucun mouvement pour l'instant.",
    "reasons": { "purchase": "Achat", "consumption": "Nourrissage", "adjustment": "Ajustement" },
    "filter": { "all_types": "Tous les types", "all_sizes": "Toutes les tailles", "low_only": "Stock bas uniquement", "clear": "Effacer", "count": "{{count}} affichée(s)", "none": "Aucune proie ne correspond aux filtres." }
  },
  "health_growth_analytics": {
    "title": "Analytics santé & croissance",
    "nav": "Analytics",
    "back": "Tableau de bord",
    "subtitle": "Santé, croissance et nourrissage sur toute votre collection.",
    "refresh": "Actualiser",
    "retry": "Réessayer",
    "error": "Impossible de charger les analytics.",
    "empty_title": "Pas encore de données",
    "empty_desc": "Ajoutez des reptiles et enregistrez repas et pesées pour débloquer vos analytics santé & croissance.",
    "go_dashboard": "Aller au tableau de bord",
    "kpi": {
      "reptiles": "Reptiles",
      "avg_health": "Santé moyenne",
      "alerts": "Alertes actives",
      "critical": "{{count}} critique(s)",
      "feeding": "Taux d'acceptation",
      "tracked": "Poids suivis",
      "todo": "À faire"
    },
    "feeding_trend": "Acceptation des repas",
    "accepted": "Acceptés",
    "health_distribution": "Répartition santé",
    "no_data": "Pas assez de données.",
    "attention": "À surveiller",
    "all_good": "Tout semble en bonne santé 🎉",
    "growth_leaders": "Meilleure croissance (90 j)",
    "no_growth": "Pas assez de pesées.",
    "all_reptiles": "Tous les reptiles",
    "no_weight": "Pas de poids",
    "generated_at": "Mis à jour {{time}}",
    "alert_types": {
      "feeding_late": "Repas en retard",
      "refusal_streak": "Refus répétés",
      "recent_regurgitation": "Régurgitation récente",
      "weight_loss": "Perte de poids",
      "shed_interval_long": "Mue en retard",
      "missing_recent_weight": "Pesée à faire"
    },
    "period": { "30": "30 j", "90": "90 j", "365": "1 an", "all": "Tout" },
    "filters": { "all_species": "Toutes les espèces", "all_sexes": "Tous les sexes", "all_enclosures": "Tous les terrariums", "clear": "Effacer" },
    "export": { "report_title": "Rapport santé du cheptel" },
    "pts": "pts",
    "todo": {
      "title": "À faire aujourd'hui",
      "empty": "Rien à signaler, tout est à jour 🎉",
      "feeding_overdue": "Repas en retard de {{count}} j",
      "weigh_in_due": "Pesée à faire ({{count}} j)",
      "weigh_in_never": "Aucune pesée enregistrée",
      "no_recent_log": "Aucun log depuis {{count}} j",
      "no_log_never": "Aucun événement enregistré"
    },
    "growth_chart": { "title": "Comparaison de croissance", "no_data": "Sélectionnez des reptiles avec au moins deux pesées pour comparer leur croissance." },
    "sex": { "Male": "Mâle", "Female": "Femelle", "Unknown": "Inconnu" },
    "columns": { "name": "Nom", "species": "Espèce", "health": "Santé", "weight": "Poids (g)", "delta": "Δ %", "alerts": "Alertes", "last_activity": "Dernière activité" },
    "health_levels": {
      "good": "Stable",
      "warning": "À surveiller",
      "danger": "Attention",
      "unknown": "Inconnu"
    }
  },
  "notifications_bell": {
    "title": "Notifications",
    "empty": "Aucune notification",
    "mark_all_read": "Tout marquer comme lu",
    "see_analytics": "Voir les analytics",
    "loading": "Chargement…",
    "open_aria": "Notifications",
    "unread_aria": "{{count}} non lues",
    "delete": "Supprimer"
  },
  "reptile_stats_panel": {
    "common": {
      "empty_value": "—"
    },
    "units": {
      "g": "g",
      "mm": "mm",
      "percent": "%",
      "day_short": "j"
    },
    "loading": "Chargement des statistiques...",
    "errors": {
      "load": "Impossible de charger les statistiques."
    },
    "header": {
      "title": "Statistiques du reptile",
      "subtitle": "Santé, poids, repas, mues et alertes basées sur l'historique enregistré."
    },
    "health": {
      "score_label": "{{score}}/100 · {{label}}",
      "levels": {
        "good": "Suivi stable",
        "warning": "À surveiller",
        "danger": "Attention requise",
        "unknown": "Données insuffisantes"
      },
      "reasons": {
        "feeding_tracked": "Repas suivis",
        "no_feeding": "Aucun repas enregistré",
        "weight_available": "Poids renseigné",
        "missing_weight": "Poids manquant",
        "refusal_streak": "{{count}} refus consécutifs",
        "no_refusal_streak": "Pas de série de refus inquiétante",
        "recent_regurgitation": "Régurgitation récente",
        "no_recent_regurgitation": "Pas de régurgitation récente"
      }
    },
    "cards": {
      "current_weight": "Poids actuel",
      "last_meal": "Dernier repas",
      "next_meal": "Prochain repas",
      "last_shed": "Dernière mue",
      "next_feeding_late": "Retard {{days}}j",
      "average_short": "moy. {{days}}j"
    },
    "alerts": {
      "types": {
        "no_events": "Aucun événement enregistré pour ce reptile.",
        "feeding_late": "Le dernier repas consommé date de {{days}} jours. Le rythme prévu est dépassé de {{lateByDays}} jours.",
        "refusal_streak": "{{count}} refus consécutifs ont été enregistrés.",
        "recent_regurgitation": "Une régurgitation a été enregistrée sur les 30 derniers jours.",
        "missing_recent_weight": "Aucune pesée récente depuis {{days}} jours.",
        "missing_weight": "Aucune donnée de poids disponible.",
        "weight_loss": "Le poids a baissé de {{percent}} % sur les 90 derniers jours.",
        "shed_interval_long": "La dernière mue date de {{days}} jours, au-dessus de l'intervalle moyen observé."
      }
    },
    "charts": {
      "not_enough_weight_data": "Pas assez de données pour afficher une courbe.",
      "weight_curve_aria": "Courbe de poids"
    },
    "sections": {
      "weight": {
        "title": "Évolution du poids",
        "min_max": "Min {{min}} · Max {{max}}"
      },
      "feeding": {
        "title": "Repas",
        "subtitle": "Régularité et acceptation."
      },
      "prey": {
        "title": "Proies",
        "common_type": "Type fréquent",
        "common_size": "Taille fréquente",
        "average_weight": "Poids moyen",
        "prey_weight_ratio": "Ratio proie/poids"
      },
      "growth": {
        "title": "Croissance",
        "current_length": "Longueur actuelle",
        "variation": "Variation",
        "last_measure": "Dernière mesure",
        "points": "Points"
      },
      "health": {
        "title": "Santé",
        "vet_visits": "Visites véto",
        "last_visit": "Dernière visite",
        "sheds": "Mues",
        "events": "Événements"
      },
      "activity": {
        "title": "Activité récente",
        "empty": "Aucune activité récente."
      }
    },
    "feeding_breakdown": {
      "accepted": "Acceptés",
      "partial": "Partiels",
      "assisted": "Assistés",
      "refused": "Refus",
      "regurgitated": "Régurgités"
    },
    "feeding_status": {
      "accepted": "accepté",
      "refused": "refusé",
      "partial": "partiel",
      "regurgitated": "régurgité",
      "assisted": "assisté"
    },
    "event_types": {
      "feeding": "Repas",
      "shed": "Mue",
      "mue": "Mue",
      "vet_visit": "Visite vétérinaire",
      "vet": "Visite vétérinaire",
      "veterinary": "Visite vétérinaire",
      "handling": "Manipulation",
      "weight": "Pesée",
      "length": "Mesure",
      "pairing": "Accouplement",
      "ovulation": "Ovulation",
      "clutch": "Ponte",
      "hatch": "Éclosion",
      "birth": "Naissance",
      "other": "Autre"
    }
  },
  "landingpage": {
    "nav": {
      "features": "Fonctionnalités",
      "pricing": "Tarifs",
      "faq": "FAQ",
      "updates": "Mise à jour",
      "login": "Se connecter",
      "lang_code": "FR"
    },
    "hero": {
      "badge": "La solution n°1 pour les éleveurs",
      "title_part1": "Pilotez votre élevage de reptiles",
      "title_highlight": "avec précision.",
      "subtitle": "Abandonnez les carnets papiers et les fichiers Excel illisibles. ReptiNode centralise suivi, santé, génétique et reproduction dans une interface moderne.",
      "cta": "Commencer gratuitement"
    },
    "hero_illustration": {
      "snake_name": "Banana Pied #05",
      "snake_species": "Python Regius",
      "status_active": "Actif",
      "last_meal_label": "Dernier Repas",
      "last_meal_time": "2j",
      "last_meal_food": "Rat 40g",
      "weight_label": "Poids",
      "weight_value": "485g",
      "history_title": "Historique récent",
      "event_weight": "Pesée effectuée",
      "time_2h_ago": "Il y a 2 heures",
      "event_ovulation": "Ovulation détectée",
      "time_yesterday": "Hier",
      "qr_scan": "Scan Rapide",
      "meal_validated": "Repas validé",
      "sync": "Sync immédiate"
    },
    "features": {
      "main_title": "Tout ce dont vous avez besoin, au même endroit.",
      "main_subtitle": "Obtenez une vue d'ensemble instantanée de votre élevage. Centralisez vos données et prenez les bonnes décisions grâce à des outils de suivi intelligents.",
      "card_medical": {
        "tag": "Essentiel",
        "title": "Dossier Médical Complet",
        "description": "Gardez une trace indélébile de la santé de vos reptiles. Notez les repas, les refus, les mues, les pesées et les traitements vétérinaires.",
        "feature_1": "Rappels automatiques",
        "feature_2": "Courbes de poids"
      },
      "card_mobile": {
        "title": "Mode Mobile & QR",
        "description": "Générez des QR Codes pour vos racks. Scannez et enregistrez une action en 2 secondes chrono depuis votre smartphone."
      },
      "card_genetic": {
        "title": "Calculateur Génétique",
        "description": "Anticipez vos projets. Notre moteur gère les gènes récessifs, co-dominants et les combos complexes."
      },
      "card_docs": {
        "title": "Documents & Reproduction",
        "description": "Générez vos certificats de cession et fiches de soins en PDF. Suivez vos incubations et taux d'éclosion.",
        "example_1_title": "Ponte #12",
        "example_1_status": "En incubation",
        "example_2_title": "Certificat Cession",
        "example_2_status": "PDF Prêt"
      }
    },
    "pricing": {
      "main_title": "Tarification Transparente",
      "main_subtitle": "Commencez gratuitement, évoluez selon vos besoins.",
      "switch_monthly": "Mensuel",
      "switch_yearly": "Annuel",
      "switch_discount": "-12%",
      "free_plan": {
        "title": "Découverte",
        "frequency": "/ à vie",
        "description": "L'essentiel pour démarrer votre passion et organiser votre premier élevage sans contrainte.",
        "feature_1": "Jusqu'à 30 Reptiles",
        "feature_2": "Suivi Complet : Repas, Mues, Soins, Poids & Taille",
        "feature_3": "Tableau de Bord : Rappels, Alertes & Graphiques",
        "feature_4": "Galerie Photos par reptile et par événement",
        "cta": "Commencer dès maintenant"
      },
      "pro_plan": {
        "recommended": "Recommandé",
        "title": "Professionnel",
        "frequency": "/ mois",
        "billed_yearly": "Facturé {{price}}€ par an",
        "description": "Débloquez toute la puissance de l'outil. Pour les éleveurs sérieux qui veulent optimiser leur production.",
        "feature_1": "Reptiles Illimités",
        "feature_2": "Calculateur Génétique Avancé",
        "feature_3": "Export PDF Cession, Soins et bien plus encore",
        "feature_4": "Génération QR Codes",
        "feature_5": "Suivi Reproduction, Généalogie, et Œufs",
        "cta": "Passer au plan Pro",
        "guarantee": "Satisfait ou remboursé 14 jours"
      }
    },
    "faq": {
      "title": "Questions Fréquentes",
      "subtitle": "Tout ce que vous devez savoir pour gérer votre élevage en toute sérénité.",
      "q1": "Comment gérer un élevage de reptiles efficacement ?",
      "r1": "La gestion d'un élevage de reptiles nécessite un suivi rigoureux des paramètres vitaux : courbes de poids, fréquence des repas et cycles de reproduction. L'utilisation d'un logiciel spécialisé comme ReptiNode permet de centraliser ces données, de remplacer les carnets papiers et d'assurer le suivi sanitaire et légal de vos serpents et lézards.",
      "q2": "Pourquoi utiliser un logiciel de suivi pour reptiles plutôt qu'Excel ?",
      "r2": "Contrairement au papier ou à Excel, un logiciel de gestion pour reptiles sécurise vos données et automatise les tâches. Il permet de générer des fiches de suivi transférables lors de la vente, de programmer des rappels pour les repas ou les soins vétérinaires, et d'accéder à l'historique de vos animaux via QR Code depuis n'importe où.",
      "q3": "Faut-il du matériel spécial pour les QR Codes ?",
      "r3": "Non, aucun investissement requis. L'application génère les étiquettes que vous pouvez imprimer sur une imprimante standard. Ensuite, l'appareil photo de votre smartphone suffit pour scanner et interagir avec vos animaux.",
      "q4": "Mes données sont-elles sécurisées ?",
      "r4": "Absolument. Vos données sont chiffrées et sauvegardées quotidiennement sur des serveurs sécurisés. Vous ne risquez pas de perdre votre historique comme avec un carnet papier égaré ou un fichier Excel corrompu.",
      "q5": "Quels reptiles peut-on gérer (Python Regius, Geckos, Colubridés) ?",
      "r5": "ReptiNode est conçu pour tous les types de reptiles. Il est idéal pour le suivi des serpents (Python Regius, Pantherophis Guttatus, Boas), des lézards (Geckos Léopard, Agames barbus) et autres espèces exotiques. Les fiches s'adaptent aux spécificités de chaque espèce (mues, pontes, hibernation).",
      "support_text": "Vous avez d'autres questions ?",
      "support_link": "Discutez avec notre équipe support"
    },
    "final_cta": {
      "badge": "Conçu par un éleveur, pour les éleveurs 🐍",
      "title_part1": "Vos reptiles méritent mieux",
      "title_highlight": "qu'un fichier Excel.",
      "description": "Sécurisez vos données, suivez la croissance de vos animaux et gérez vos projets de reproduction. La plateforme tout-en-un pour l'herpétoculture moderne.",
      "button": "Améliorer la vie de mes reptiles",
      "reassurance_1": "Gratuit jusqu'à 30 reptiles",
      "reassurance_2": "Données sécurisées Cloud",
      "reassurance_3": "Application Web & Mobile"
    },
    "footer": {
      "brand_description": "Ne laissez plus rien au hasard. De la pesée à l'éclosion, l'outil de référence pour les éleveurs exigeants.",
      "col_product_title": "Produit",
      "col_legal_title": "Légal",
      "link_privacy": "Confidentialité",
      "link_terms": "CGU & CGV",
      "link_legal": "Mentions",
      "copyright_reserved": "Tous droits réservés.",
      "made_with_love_part1": "Fait avec",
      "made_with_love_part2": "en France."
    }
  },
  "suivi_nourrissage_reptiles": {
    "seo": {
      "title": "Suivi nourrissage reptiles",
      "description": "ReptiNode vous aide à suivre le nourrissage de vos reptiles avec un historique clair, les repas acceptés ou refusés, le poids et un suivi plus fiable.",
      "structured_data_app_description": "Suivez le nourrissage de vos reptiles avec un historique clair, des événements centralisés, le poids, les refus et un rythme alimentaire mieux maîtrisé."
    },
    "hero": {
      "badge": "Suivi alimentaire structuré",
      "title_line_1": "Suivi nourrissage",
      "title_line_2": "reptiles",
      "description": "Gardez un historique clair des repas, des refus, du rythme alimentaire et de l'évolution de chaque reptile dans un outil plus lisible et plus fiable qu'une simple note ou un tableur.",
      "primary_cta": "Commencer le suivi",
      "secondary_cta": "Voir les fonctionnalités",
      "stats": {
        "history": {
          "value": "1",
          "label": "Historique alimentaire par reptile"
        },
        "forgotten_meals": {
          "value": "0",
          "label": "Repas oubliés ou mal relus"
        },
        "clarity": {
          "value": "+ clair",
          "label": "Pour suivre les rythmes et refus"
        }
      },
      "reassurance_1": "Historique chronologique par animal",
      "reassurance_2": "Refus visibles d'un coup d'œil",
      "reassurance_3": "Lié au poids automatiquement"
    },
    "illustration": {
      "card_title": "Nyx · Femelle 2022",
      "card_subtitle": "Python regius · suivi alimentaire",
      "status": "Nourrissage validé",
      "last_meal_label": "Dernier repas",
      "last_meal_value": "Il y a 3 jours",
      "last_meal_meta": "raton",
      "next_check_label": "Prochain contrôle",
      "next_check_value": "Demain",
      "next_check_meta": "à surveiller",
      "history_title": "Historique alimentaire",
      "history_meal_accepted_title": "Repas accepté",
      "history_meal_accepted_time": "Vendredi · 19:14",
      "history_weight_recorded_title": "Poids enregistré",
      "history_weight_recorded_time": "Jeudi · 09:22",
      "history_scheduled_check_title": "Contrôle programmé",
      "history_scheduled_check_time": "Demain · rappel actif",
      "quick_access": "Accès rapide à la fiche",
      "clear_rhythm_title": "Rythme alimentaire clair",
      "clear_rhythm_text": "Moins d'oublis, plus de régularité",
      "rhythm_ok": "Rythme OK",
      "metric_meals_label": "Repas 90 j",
      "metric_refusals_label": "Refus",
      "metric_pace_label": "Cycle",
      "calendar_title": "Calendrier · 8 sem.",
      "legend_eaten": "mangé",
      "legend_refused": "refus",
      "last_entry_label": "Dernière entrée",
      "last_entry_title": "Raton congelé · accepté",
      "last_entry_meta": "Vendredi 19:14 · 32 g",
      "pattern_detected_title": "Pattern détecté",
      "pattern_detected_meta": "2 refus la même semaine",
      "next_meal_title": "Prochain repas",
      "next_meal_meta": "dans 3 jours"
    },
    "benefits_section": {
      "title": "Pourquoi mieux suivre le nourrissage de ses reptiles ?",
      "description": "Quand plusieurs repas s'enchaînent, qu'il faut noter les refus ou comparer des rythmes différents, un suivi structuré devient vite indispensable.",
      "cards": {
        "data": {
          "badge": "Rythme alimentaire",
          "title": "Chaque repas devient une donnée utile, pas juste une note perdue",
          "description": "ReptiNode permet de visualiser les repas acceptés, les refus, la fréquence et les événements liés à chaque reptile pour garder une lecture claire du suivi alimentaire sur la durée.",
          "items": [
            "Historique chronologique des repas",
            "Vision plus claire du rythme alimentaire"
          ]
        },
        "simple": {
          "title": "Simple à renseigner au quotidien",
          "description": "L'objectif n'est pas d'ajouter de la complexité, mais de pouvoir enregistrer vite un repas, un refus ou une observation et retrouver l'info immédiatement."
        },
        "refusals": {
          "title": "Les refus deviennent visibles",
          "description": "Quand les refus sont dispersés dans plusieurs notes, ils passent facilement inaperçus. Avec un suivi structuré, vous repérez mieux les périodes à surveiller.",
          "example_line": "12/03 : refus",
          "example_highlight": "➜ historique lisible + contexte conservé"
        },
        "context": {
          "title": "Le nourrissage prend plus de sens quand il est relié au reste",
          "description": "Un repas seul dit peu de choses. Relié au poids, à la chronologie et aux autres événements de la fiche, il devient beaucoup plus utile pour comprendre l'évolution de l'animal.",
          "items": {
            "meals_observations_title": "Repas et observations",
            "meals_observations_badge": "Centralisé",
            "weight_timeline_title": "Poids et chronologie",
            "weight_timeline_badge": "Lisible"
          }
        }
      }
    },
    "value_section": {
      "title": "Ce que le suivi alimentaire doit réellement vous apporter",
      "description": "Un bon suivi de nourrissage ne sert pas seulement à noter une date. Il doit aider à relire, comparer et mieux comprendre les habitudes de chaque reptile.",
      "daily_card": {
        "title": "Pour le quotidien",
        "description": "Gardez un suivi propre et rapide sans multiplier les notes ou les fichiers.",
        "features": [
          "Repas enregistrés par reptile",
          "Refus clairement visibles",
          "Historique chronologique relisible",
          "Rythme alimentaire plus simple à suivre",
          "Consultation rapide depuis une seule fiche"
        ],
        "button": "Explorer les fonctionnalités"
      },
      "long_term_card": {
        "badge": "Pour un suivi plus fiable",
        "title": "Pour la durée",
        "description": "Plus les semaines passent, plus une donnée bien structurée prend de la valeur.",
        "features": [
          "Comparaison plus simple dans le temps",
          "Moins de dépendance à la mémoire",
          "Repérage plus rapide des irrégularités",
          "Lecture plus cohérente du comportement alimentaire",
          "Base plus propre pour la gestion globale"
        ],
        "button": "Commencer gratuitement",
        "footer_note": "Suivi alimentaire plus clair"
      }
    },
    "comparison_section": {
      "title": "Passez d'un suivi approximatif à un suivi vraiment relisible",
      "description": "La différence ne se joue pas seulement dans le fait d'écrire une information, mais dans votre capacité à la retrouver, la comparer et lui donner du contexte.",
      "before": {
        "title": "Avant",
        "description": "Des dates notées à part, des oublis possibles, des refus difficiles à retrouver et peu de visibilité globale sur le rythme alimentaire."
      },
      "with_reptinode": {
        "title": "Avec ReptiNode",
        "description": "Un historique propre par reptile, une lecture chronologique cohérente et des données alimentaires reliées au reste de la fiche."
      },
      "result": {
        "title": "Résultat",
        "description": "Une gestion plus sereine, des rythmes mieux compris et un suivi alimentaire qui reste utile même plusieurs mois plus tard."
      }
    },
    "faq_section": {
      "title": "Questions fréquentes",
      "description": "L'essentiel pour mieux comprendre l'intérêt d'un vrai suivi de nourrissage reptiles.",
      "items": [
        {
          "q": "Pourquoi suivre précisément le nourrissage des reptiles ?",
          "r": "Parce qu'un suivi alimentaire régulier permet de savoir ce qui a été donné, quand, à quel rythme, et comment chaque reptile réagit dans le temps. Cela aide à mieux comprendre les habitudes et à éviter les oublis."
        },
        {
          "q": "Est-ce utile même avec une petite collection ?",
          "r": "Oui. Même avec peu de reptiles, un suivi clair du nourrissage évite les approximations. Et quand la collection grandit, la structure est déjà en place."
        },
        {
          "q": "Peut-on noter les refus de repas ?",
          "r": "Oui. C'est même un point essentiel, car les refus répétés, les changements de rythme ou les périodes inhabituelles sont plus faciles à repérer quand tout est enregistré au même endroit."
        },
        {
          "q": "Le poids a-t-il un intérêt avec le nourrissage ?",
          "r": "Oui. Le poids et le nourrissage forment un duo très utile pour avoir une vision plus cohérente de l'évolution d'un reptile dans le temps."
        },
        {
          "q": "En quoi est-ce mieux qu'une note dans le téléphone ?",
          "r": "Une note isolée devient vite difficile à relire, à comparer ou à relier au reste de la fiche. ReptiNode structure les données par animal, garde l'historique et rend les informations beaucoup plus lisibles."
        }
      ],
      "bottom_text": "Vous voulez voir le reste de l'outil autour du suivi alimentaire ?",
      "bottom_link": "Consulter la page fonctionnalités"
    },
    "cta_section": {
      "badge": "Rendez le suivi alimentaire plus clair",
      "title_line_1": "Suivez chaque repas",
      "title_line_2": "dans un outil fait pour durer",
      "description": "ReptiNode vous aide à garder un historique alimentaire propre, relisible et relié à chaque reptile pour une gestion plus cohérente au quotidien.",
      "button": "Créer mon espace gratuitement",
      "features": [
        "Historique par reptile",
        "Repas et refus mieux suivis",
        "Suivi plus lisible dans le temps"
      ]
    },
    "cross_links_label": "Approfondir :",
    "anatomy": {
      "tag": "Anatomie d'un enregistrement",
      "title": "Tout ce qui compte, sur une seule fiche",
      "subtitle": "Pas seulement « a mangé / a refusé ». Chaque repas devient une donnée exploitable, reliée au reptile et au reste de sa chronologie.",
      "card_title": "Nourrissage · #1284",
      "card_subtitle": "Lié à Nyx · Python regius",
      "card_status": "Validé",
      "field_date": {
        "label": "Date & heure",
        "value": "Ven. 14 mars · 19:14"
      },
      "field_prey": {
        "label": "Type de proie",
        "value": "Raton congelé"
      },
      "field_size": {
        "label": "Taille / poids"
      },
      "field_status": {
        "label": "Statut",
        "value": "Accepté"
      },
      "field_context": {
        "label": "Contexte",
        "value": "Post-mue · appétit OK"
      },
      "footer_note": "Enregistré · synchronisé · relié au poids du jour",
      "explain_title": "Une donnée structurée, pas une note jetée.",
      "explain_p1": "Une note dit « a mangé jeudi ». Une fiche dit qui, quand, quoi, en quelle quantité, avec quel statut et dans quel contexte. C'est la différence entre savoir et pouvoir relire.",
      "explain_p2": "Trois mois plus tard, vous retrouvez le repas, son contexte, et ce qui s'est passé autour. C'est ce qui rend le suivi vraiment utile sur la durée."
    },
    "patterns": {
      "tag": "Patterns repérables",
      "title": "3 signaux que vous verrez enfin",
      "subtitle": "Ces signaux existent déjà dans votre élevage. La différence, c'est de les voir avant qu'ils ne deviennent un problème.",
      "refusal_streak": {
        "tag": "Refus en série",
        "title": "Plusieurs refus consécutifs",
        "desc": "Quand les refus sont éparpillés dans des notes, ils passent inaperçus. Affichés en série dans le calendrier, ils deviennent évidents."
      },
      "rhythm_change": {
        "tag": "Changement de rythme",
        "title": "Cycle qui s'allonge ou raccourcit",
        "desc": "Un reptile qui passait de 7 à 14 jours entre deux repas, c'est un signal. Visible immédiatement quand le suivi est structuré."
      },
      "weight_link": {
        "tag": "Corrélation poids",
        "title": "Lien entre repas et courbe de poids",
        "desc": "Un repas n'a de sens qu'à côté du poids. ReptiNode garde les deux sur la même fiche pour relire la cohérence."
      }
    },
    "calendar": {
      "tag": "Vision 12 mois",
      "title": "Un an de nourrissage, en un coup d'œil",
      "subtitle": "Le rythme d'un reptile se lit sur des mois, pas sur des semaines. La vue annuelle révèle ce qu'aucune note isolée ne peut montrer.",
      "year_label": "2025 · Nyx",
      "legend_none": "rien",
      "legend_meal": "repas",
      "legend_refusal": "refus",
      "caption": "Les deux carrés rouges sont à 4 mois d'écart. À la main, vous ne les auriez jamais reliés."
    },
    "breadcrumb": {
      "home": "Accueil"
    }
  },
  "reproduction_reptiles": {
    "seo": {
      "title": "Reproduction reptiles",
      "description": "ReptiNode vous aide à suivre la reproduction de vos reptiles avec des pairings, des dates clés, les pontes, les œufs et une chronologie plus claire.",
      "structured_data_description": "Suivez la reproduction de vos reptiles avec un outil structuré pour organiser pairings, cycles, pontes, œufs et chronologie breeding."
    },
    "illustration": {
      "card_title": "Projet 2026 · Pairing A12",
      "card_subtitle": "Mojave het Clown × Pastel",
      "status": "Reproduction suivie",
      "last_pairing_label": "Dernier pairing",
      "last_pairing_value": "Il y a 4 jours",
      "last_pairing_meta": "observé",
      "current_stage_label": "Étape actuelle",
      "current_stage_value": "Pré-ponte",
      "current_stage_meta": "à surveiller",
      "timeline_title": "Chronologie breeding",
      "pairing_logged_title": "Pairing enregistré",
      "pairing_logged_time": "Vendredi · 21:08",
      "key_date_planned_title": "Date clé planifiée",
      "key_date_planned_time": "Contrôle dans 3 jours",
      "clutch_tracking_ready_title": "Suivi ponte préparé",
      "clutch_tracking_ready_time": "Checklist prête",
      "instant_pairing_sheet": "Fiche pairing instantanée",
      "structured_cycle_title": "Cycle structuré",
      "structured_cycle_text": "Moins d'oublis, plus de visibilité",
      "tracking": "Suivi actif",
      "step_pairing": "Pairing",
      "step_pairing_meta": "24 jan · validé",
      "step_ovulation": "Ovulation",
      "step_ovulation_meta": "15 fév · observée",
      "step_prelay": "Pré-ponte",
      "step_prelay_meta": "en cours",
      "step_lay": "Ponte",
      "step_lay_meta": "estimée 18 mars",
      "step_incubation": "Incubation",
      "step_incubation_meta": "~ 55 j",
      "metric_progress_label": "Avancement",
      "metric_progress_unit": "étapes",
      "metric_next_label": "Prochain repère",
      "metric_next_unit": "contrôle",
      "metric_next_meta": "17 mars · pré-ponte",
      "now_label": "Now",
      "eggs_expected_title": "Clutch attendue",
      "eggs_expected_unit": "œufs",
      "checkpoint_title": "Contrôle programmé",
      "checkpoint_meta": "dans 3 jours"
    },
    "faq": {
      "title": "Questions fréquentes",
      "description": "L'essentiel pour comprendre l'intérêt d'un vrai suivi de reproduction reptiles.",
      "items": [
        {
          "q": "Pourquoi utiliser un outil pour suivre la reproduction des reptiles ?",
          "r": "Parce que la reproduction implique plusieurs étapes, des dates clés et des observations qui deviennent vite difficiles à relier entre elles sans structure. Un outil dédié permet de garder une chronologie claire."
        },
        {
          "q": "Peut-on planifier les moments importants du cycle ?",
          "r": "Oui. L'intérêt est justement de ne pas gérer la reproduction uniquement à la mémoire. ReptiNode aide à poser des repères clairs autour des pairings, des contrôles, des pontes et des œufs."
        },
        {
          "q": "La page reproduction remplace-t-elle la génétique ?",
          "r": "Non. Cette page est centrée sur l'organisation du processus breeding : pairings, chronologie, pontes et suivi opérationnel. La génétique peut ensuite venir enrichir l'analyse."
        },
        {
          "q": "Est-ce utile pour un petit élevage ?",
          "r": "Oui. Même avec peu de projets, un suivi propre évite les oublis et facilite la relecture. Et si l'élevage grandit, la structure est déjà en place."
        },
        {
          "q": "En quoi est-ce mieux qu'un tableur ?",
          "r": "Un tableur oblige souvent à recoller manuellement les informations. ReptiNode garde les données reliées au bon pairing, aux bons animaux et à la bonne chronologie, ce qui rend le suivi beaucoup plus lisible."
        }
      ],
      "bottom_text": "Vous voulez relier la reproduction à la partie génétique ?",
      "bottom_link": "Voir la page génétique"
    },
    "hero": {
      "badge": "Breeding organisé de bout en bout",
      "title_line_1": "Reproduction",
      "title_line_2": "reptiles",
      "description": "Organisez vos pairings, gardez une chronologie claire des cycles, préparez les étapes importantes et centralisez le suivi des pontes et des œufs dans un outil spécialisé pour les reptiles.",
      "primary_cta": "Structurer ma reproduction",
      "secondary_cta": "Voir les fonctionnalités",
      "stats": {
        "timeline": "Chronologie claire par projet breeding",
        "lost_dates": "Dates clés perdues dans plusieurs notes",
        "clarity_value": "+ simple",
        "clarity_label": "Pour suivre pairings, pontes et œufs"
      },
      "reassurance_1": "Chronologie par projet",
      "reassurance_2": "Œufs suivis individuellement",
      "reassurance_3": "Plusieurs projets en parallèle"
    },
    "benefits": {
      "title": "Pourquoi mieux structurer la reproduction des reptiles ?",
      "description": "Dès qu'il y a plusieurs pairings, plusieurs étapes ou plusieurs femelles suivies en parallèle, la mémoire seule ne suffit plus. Il faut une base claire et relisible.",
      "cycle": {
        "badge": "Cycle breeding",
        "title": "Chaque étape reste reliée au bon projet de reproduction",
        "description": "ReptiNode aide à garder un fil clair entre les pairings, les dates à surveiller, les observations, les pontes et le suivi des œufs, sans disperser l'information dans des notes séparées.",
        "items": [
          "Repères plus simples dans le temps",
          "Suivi plus lisible des pontes et œufs"
        ]
      },
      "projects": {
        "title": "Une base sérieuse pour vos projets",
        "description": "Le but n'est pas seulement de noter un pairing, mais de pouvoir relire tout le déroulé d'un projet breeding avec beaucoup plus de clarté."
      },
      "dispersion": {
        "title": "Moins de dispersion",
        "description": "Quand les données sont éparpillées entre tableur, calendrier et notes, le suivi breeding devient fragile. Une structure unique fait gagner en fiabilité.",
        "example_line": "Pairing A12",
        "example_highlight": "➜ chronologie, repères et suivi réunis"
      },
      "readability": {
        "title": "Le breeding devient plus relisible, même plusieurs semaines après",
        "description": "Un bon outil de reproduction ne sert pas seulement à saisir des informations. Il doit permettre de retrouver rapidement le contexte, les étapes déjà passées et celles qui arrivent.",
        "items": {
          "key_dates_title": "Dates clés et contrôles",
          "key_dates_badge": "Clair",
          "clutches_eggs_title": "Pontes et œufs",
          "clutches_eggs_badge": "Centralisé"
        }
      }
    },
    "value_section": {
      "title": "Ce qu'un bon suivi de reproduction doit vraiment vous apporter",
      "description": "Le but n'est pas d'ajouter des champs partout, mais de rendre chaque projet breeding plus simple à piloter, à relire et à comparer.",
      "daily": {
        "title": "Pour le pilotage quotidien",
        "description": "Gardez les informations essentielles là où elles sont utiles, sans multiplier les outils.",
        "features": [
          "Pairings enregistrés proprement",
          "Chronologie claire par projet",
          "Dates clés plus faciles à suivre",
          "Pontes et œufs mieux centralisés",
          "Lecture rapide du contexte breeding"
        ],
        "button": "Explorer les fonctionnalités"
      },
      "long_term": {
        "badge": "Pour élevage plus structuré",
        "title": "Pour la durée",
        "description": "Plus vous avez de projets, plus une organisation breeding solide prend de la valeur.",
        "features": [
          "Moins de dépendance à la mémoire",
          "Vision plus propre des cycles en parallèle",
          "Moins de confusion entre projets",
          "Base plus claire pour la relecture",
          "Organisation plus crédible sur le long terme"
        ],
        "button": "Commencer gratuitement",
        "footer_note": "Breeding plus lisible"
      }
    },
    "comparison": {
      "title": "Passez d'une reproduction “dans la tête” à une reproduction vraiment suivie",
      "description": "La vraie différence ne tient pas au nombre de notes prises, mais à votre capacité à relire un projet breeding proprement du début à la fin.",
      "before": {
        "title": "Avant",
        "description": "Des pairings notés à part, des rappels dispersés et des étapes difficiles à relier plusieurs semaines plus tard."
      },
      "with_reptinode": {
        "title": "Avec ReptiNode",
        "description": "Une structure unique pour suivre le projet, les dates importantes, les pontes, les œufs et la chronologie complète."
      },
      "result": {
        "title": "Résultat",
        "description": "Une reproduction mieux pilotée, plus simple à relire et beaucoup plus fiable quand plusieurs projets avancent en parallèle."
      }
    },
    "cta": {
      "badge": "Pilotez mieux vos projets breeding",
      "title_line_1": "Organisez votre reproduction",
      "title_line_2": "dans un outil pensé pour les reptiles",
      "description": "ReptiNode vous aide à structurer pairings, étapes clés, pontes et œufs pour garder une vision claire de chaque projet de reproduction.",
      "button": "Créer mon espace gratuitement",
      "features": [
        "Pairings mieux organisés",
        "Chronologie claire du cycle",
        "Suivi plus fiable sur la durée"
      ]
    },
    "cross_links_label": "Approfondir :",
    "cycle": {
      "tag": "Le cycle complet",
      "title": "Chaque étape, à sa place dans la chronologie",
      "subtitle": "Cinq étapes claires, reliées au même projet breeding. Plus de « c'était quand déjà ? » trois mois plus tard.",
      "step_1": {
        "title": "Pairing",
        "desc": "Date, accouplements observés, conditions. La fiche du projet commence ici, reliée aux deux animaux."
      },
      "step_2": {
        "title": "Ovulation",
        "desc": "Repère central du cycle. Notée à la date observée, elle ancre toute la chronologie qui suit."
      },
      "step_3": {
        "title": "Pré-ponte & mue",
        "desc": "Comportement, refus alimentaires, mue. ReptiNode relie automatiquement les événements de cette période à la femelle."
      },
      "step_4": {
        "title": "Ponte",
        "desc": "Date, nombre d'œufs, qualité. Chaque œuf reçoit un identifiant pour son suivi individuel."
      },
      "step_5": {
        "title": "Incubation & éclosion",
        "desc": "Compte à rebours, taux d'éclosion, descendants enregistrés et reliés au pairing initial."
      }
    },
    "parallel": {
      "tag": "Multi-projets",
      "title": "Plusieurs pairings en parallèle, sans confusion",
      "p1": "Trois projets en cours, à des étapes différentes, sur des femelles différentes. C'est exactement là où le tableur lâche.",
      "p2": "ReptiNode garde chaque projet isolé, mais lisible d'un coup d'œil. Vous voyez immédiatement ce qui avance, ce qui stagne, et ce qui demande votre attention cette semaine.",
      "dashboard_title": "Projets 2026",
      "active_label": "actifs"
    },
    "projects": {
      "stage_prelay": "Pré-ponte",
      "stage_pairing": "Pairing",
      "stage_incub": "Incubation",
      "stage_ovul": "Ovulation"
    },
    "clutch": {
      "tag": "Suivi des œufs",
      "title": "Chaque œuf, sa propre fiche",
      "subtitle": "Une clutch n'est pas un nombre — c'est six histoires individuelles. Suivez chacune avec son jour d'incubation, son statut, ses observations.",
      "clutch_title": "Clutch #A12-2026",
      "clutch_meta": "Pondu le 18 mars · 6 œufs · 56 % restant",
      "legend_incub": "incubation",
      "legend_hatched": "éclos",
      "legend_failed": "arrêté",
      "caption": "À l'éclosion, chaque œuf devient un descendant relié automatiquement au pairing initial."
    },
    "breadcrumb": {
      "home": "Accueil"
    }
  },
  "logiciel_gestion_reptiles": {
    "seo": {
      "title": "Logiciel de gestion de reptiles",
      "description": "ReptiNode est un logiciel de gestion de reptiles pour suivre nourrissages, poids, mues, reproduction, génétique et historique dans un outil clair et spécialisé.",
      "structured_data_description": "Logiciel de gestion de reptiles pour suivre nourrissages, mues, poids, reproduction, génétique et historique dans un outil spécialisé."
    },
    "illustration": {
      "card_title": "Collection principale",
      "card_subtitle": "Ball pythons · 24 fiches actives",
      "status": "Suivi à jour",
      "last_feeding_label": "Dernier nourrissage",
      "last_feeding_value": "Il y a 2 jours",
      "last_feeding_meta": "raton validé",
      "weight_label": "Poids",
      "weight_value": "1 284 g",
      "weight_meta": "↗",
      "history_title": "Historique récent",
      "weight_logged_title": "Pesée enregistrée",
      "weight_logged_time": "Aujourd'hui · 09:42",
      "breeding_cycle_title": "Cycle de reproduction planifié",
      "breeding_cycle_time": "Hier · 18:17",
      "quick_access": "Identification rapide",
      "synced_data_title": "Donnée synchronisée",
      "synced_data_text": "Historique centralisé",
      "collection_name": "Mon élevage",
      "collection_meta": "24 reptiles · 3 espèces",
      "synced": "Sync",
      "search_placeholder": "Chercher : nom, code, espèce…",
      "metric_to_feed_label": "À nourrir",
      "metric_to_feed_unit": "cette semaine",
      "metric_late_label": "Pesées en retard",
      "metric_late_unit": "à traiter",
      "list_title": "Activité récente",
      "list": {
        "r1_event": "Pesée · 1284 g",
        "r2_event": "Repas validé",
        "r3_event": "Pré-ponte"
      },
      "filters_title": "Filtres",
      "export_title": "Export prêt",
      "export_meta": "PDF · CSV"
    },
    "faq": {
      "title": "Questions fréquentes",
      "description": "Tout ce qu'il faut savoir avant de choisir un logiciel de gestion de reptiles.",
      "items": [
        {
          "q": "À qui s'adresse ce logiciel de gestion de reptiles ?",
          "r": "ReptiNode s'adresse aux passionnés, aux éleveurs et aux structures qui veulent centraliser les fiches animaux, l'historique, le nourrissage, les mues, la reproduction et les documents dans un seul outil."
        },
        {
          "q": "Est-ce plus pratique qu'un tableur ?",
          "r": "Oui. Un tableur oblige à tout structurer manuellement, limite le suivi chronologique et devient vite fragile avec plusieurs animaux. ReptiNode rassemble les données par reptile, affiche l'historique clairement et réduit les oublis."
        },
        {
          "q": "Peut-on retrouver rapidement une fiche en élevage ?",
          "r": "Oui. ReptiNode est pensé pour accéder vite à chaque fiche, enregistrer des événements, suivre les informations clés et retrouver un reptile sans perdre de temps."
        },
        {
          "q": "Puis-je gérer à la fois le quotidien et la reproduction ?",
          "r": "Oui. Le logiciel couvre à la fois le suivi courant des reptiles et les besoins plus avancés comme les pairings, les pontes, le pedigree, la génétique et la documentation."
        },
        {
          "q": "Le logiciel convient-il à une collection qui grandit ?",
          "r": "Oui. Plus le nombre de reptiles augmente, plus il devient utile d'avoir un logiciel structuré pour ne pas dépendre d'une mémoire personnelle ou de fichiers dispersés."
        }
      ],
      "bottom_text": "Vous voulez voir comment tout cela s'articule dans le produit ?",
      "bottom_link": "Consulter la page fonctionnalités"
    },
    "hero": {
      "badge": "Logiciel spécialisé pour reptiles",
      "title_line_1": "Logiciel de gestion",
      "title_line_2": "de reptiles",
      "description": "Centralisez les fiches de vos reptiles, l'historique des événements, les nourrissages, les mues, les poids, la reproduction et la génétique dans un outil conçu pour votre élevage ou votre collection.",
      "primary_cta": "Créer mon espace",
      "secondary_cta": "Voir les fonctionnalités",
      "stats": {
        "all_data": "Un seul espace pour toutes vos données",
        "no_spreadsheets": "Tableurs dispersés à maintenir",
        "specialized_value": "100%",
        "specialized_label": "Pensé pour le monde reptile"
      },
      "reassurance_1": "Un seul espace centralisé",
      "reassurance_2": "Zéro tableur à maintenir",
      "reassurance_3": "Hébergement européen"
    },
    "benefits": {
      "title": "Pourquoi utiliser un logiciel de gestion de reptiles ?",
      "description": "Quand la collection grandit, le suivi manuel devient vite fragile. Un logiciel spécialisé permet de garder une vision claire, structurée et fiable de chaque reptile.",
      "daily": {
        "badge": "Suivi quotidien",
        "title": "Chaque reptile possède une fiche claire et exploitable",
        "description": "Fini les notes dispersées, les oublis et les informations perdues. ReptiNode centralise les données importantes de chaque animal dans une fiche lisible, structurée et facile à mettre à jour.",
        "items": [
          "Historique chronologique des événements",
          "Suivi du poids et des évolutions"
        ]
      },
      "mobile": {
        "title": "Pensé pour être fluide au quotidien",
        "description": "Ajoutez un événement, consultez une fiche, vérifiez une info ou retrouvez un reptile en quelques secondes, même depuis le mobile."
      },
      "genetics": {
        "title": "Une base solide pour la génétique",
        "description": "Suivez les pairings, visualisez les liens entre individus et gardez une traçabilité plus sérieuse qu'un simple tableau.",
        "example_line": "Pastel x Mojave",
        "example_highlight": "➜ pairing enregistré + historique conservé"
      },
      "admin": {
        "title": "Tout l'administratif utile au même endroit",
        "description": "Gardez les documents, informations clés et repères importants directement reliés à vos reptiles pour gagner du temps et éviter les pertes d'informations.",
        "items": {
          "breeding_title": "Suivi de reproduction",
          "breeding_badge": "Structuré",
          "centralized_title": "Informations centralisées",
          "centralized_badge": "Accessible"
        }
      }
    },
    "value_section": {
      "title": "Ce que ReptiNode vous aide à mieux gérer",
      "description": "Un bon logiciel de gestion de reptiles doit couvrir les tâches essentielles du quotidien tout en restant utile quand votre activité devient plus avancée.",
      "daily": {
        "title": "Gestion quotidienne",
        "description": "ReptiNode vous aide à garder un suivi propre, cohérent et lisible au fil des semaines.",
        "features": [
          "Fiches reptiles centralisées",
          "Historique des événements",
          "Suivi nourrissage et mues",
          "Suivi poids et évolution",
          "Consultation simple depuis mobile"
        ],
        "button": "Explorer les fonctionnalités"
      },
      "advanced": {
        "badge": "Pour collections sérieuses",
        "title": "Gestion avancée",
        "description": "Dès que vous suivez plusieurs animaux ou de la reproduction, la structure fait la différence.",
        "features": [
          "Organisation des pairings",
          "Vision plus claire de la reproduction",
          "Base de travail pour la génétique",
          "Informations plus fiables dans le temps",
          "Moins de dépendance aux fichiers dispersés"
        ],
        "button": "Commencer gratuitement",
        "footer_note": "Configuration rapide"
      }
    },
    "comparison": {
      "title": "Un outil plus fiable qu'une organisation improvisée",
      "description": "Plus votre collection évolue, plus il devient important d'avoir une base claire, stable et pensée pour retrouver les bonnes informations au bon moment.",
      "before": {
        "title": "Avant",
        "description": "Des notes à plusieurs endroits, des feuilles de calcul, des rappels séparés et une dépendance à la mémoire pour relier les informations."
      },
      "with_reptinode": {
        "title": "Avec ReptiNode",
        "description": "Une structure unique pour consulter la bonne fiche, enregistrer un événement rapidement et garder un historique propre sur la durée."
      },
      "result": {
        "title": "Résultat",
        "description": "Une gestion plus sereine, des données mieux tenues et une base beaucoup plus solide pour suivre vos reptiles au quotidien comme sur le long terme."
      }
    },
    "cta": {
      "badge": "Passez à une gestion plus propre",
      "title_line_1": "Gérez vos reptiles",
      "title_line_2": "dans un outil conçu pour eux",
      "description": "ReptiNode vous aide à centraliser vos données, mieux suivre chaque animal et poser une base plus solide pour votre collection ou votre élevage.",
      "button": "Créer mon espace gratuitement",
      "features": [
        "Prise en main rapide",
        "Outil pensé pour les reptiles",
        "Base claire pour le long terme"
      ]
    },
    "cross_links_label": "Approfondir :",
    "workflow": {
      "tag": "Comment ça marche",
      "title": "Trois étapes, zéro complexité",
      "subtitle": "Pensé pour s'effacer derrière vos animaux. Vous saisissez, ReptiNode structure et conserve.",
      "step_1": {
        "title": "Centralisez vos fiches",
        "desc": "Une fiche par reptile : identité, espèce, génétique, photo, code interne. Plus de notes éparpillées entre téléphone, papier et tableur."
      },
      "step_2": {
        "title": "Enregistrez à la volée",
        "desc": "Pesée, repas, mue, observation : chaque événement est ajouté en quelques secondes, depuis l'ordinateur ou le téléphone, et reste attaché au bon animal."
      },
      "step_3": {
        "title": "Relisez sans friction",
        "desc": "Filtrez par espèce, année, statut. Retrouvez en un clic l'historique complet d'un animal, même trois ans plus tard."
      }
    },
    "compare_table": {
      "tag": "Comparaison",
      "title": "Tableur vs logiciel spécialisé",
      "subtitle": "Un tableur peut tenir 5 animaux. Au-delà, la structure d'un vrai logiciel fait la différence.",
      "col_criteria": "Critère",
      "col_spreadsheet": "Tableur",
      "row_1": {
        "criteria": "Une fiche par reptile"
      },
      "row_2": {
        "criteria": "Historique chronologique automatique"
      },
      "row_3": {
        "criteria": "Recherche & filtres dédiés"
      },
      "row_4": {
        "criteria": "Saisie rapide depuis mobile"
      },
      "row_5": {
        "criteria": "Pedigree et lignées reliés"
      },
      "row_6": {
        "criteria": "Sauvegarde & sécurité gérées"
      }
    },
    "use_cases": {
      "tag": "Cas d'usage",
      "title": "Quelle que soit la taille de votre collection",
      "subtitle": "Le même outil s'adapte du passionné solo à la structure professionnelle.",
      "hobbyist": {
        "title": "Passionné solo",
        "desc": "2 à 10 reptiles. Vous voulez arrêter d'oublier les pesées et garder un historique propre, sans usine à gaz.",
        "tag": "Gratuit suffit"
      },
      "keeper": {
        "title": "Éleveur structuré",
        "desc": "20 à 100 reptiles, plusieurs projets. Vous avez besoin de filtres, de pedigree relié et d'une lecture rapide de toute la collection.",
        "tag": "Pro recommandé"
      },
      "pro": {
        "title": "Structure pro",
        "desc": "Animalerie, magasin, parc. Vous voulez une base claire, exportable et durable pour suivre l'inventaire vivant et l'historique sanitaire.",
        "tag": "Pro + export"
      }
    },
    "breadcrumb": {
      "home": "Accueil"
    }
  },
  "genetique_reptiles": {
    "seo": {
      "title": "Génétique reptiles",
      "description": "ReptiNode vous aide à suivre la génétique de vos reptiles avec une vision plus claire des gènes, du pedigree, des lignées et des projections de pairing.",
      "structured_data_description": "Suivez la génétique de vos reptiles avec un outil pour relier gènes, pedigree, lignées, pairings et projections dans une base claire."
    },
    "illustration": {
      "card_title": "Projet génétique · BEL",
      "card_subtitle": "Mojave × Lesser",
      "status": "Projection prête",
      "pairing_label": "Pairing",
      "pairing_value": "2 gènes",
      "pairing_meta": "compatibles",
      "goal_label": "Objectif",
      "goal_value": "BEL",
      "goal_meta": "projeté",
      "genetic_view_title": "Vue génétique",
      "pedigree_linked_title": "Pedigree relié",
      "pedigree_linked_time": "Lignée consultable",
      "projection_calculated_title": "Projection calculée",
      "projection_calculated_time": "Combinaisons attendues",
      "genes_linked_title": "Gènes reliés aux parents",
      "genes_linked_time": "Lecture plus claire",
      "quick_access": "Accès rapide au pedigree",
      "simplified_reading_title": "Lecture génétique simplifiée",
      "simplified_reading_text": "Moins d'hypothèses dispersées",
      "live_label": "Live",
      "parent_male": "Mojave het Pied",
      "parent_female": "Pastel het Pied",
      "punnett_title": "Distribution attendue",
      "outcomes_label": "issues",
      "punnett": {
        "normal_label": "Normal",
        "het_label": "Het Pied",
        "pied_label": "Pied"
      },
      "visual_morphs": "25 % visuels",
      "het_morphs": "50 % het",
      "pedigree_title": "Pedigree relié",
      "pedigree_meta": "3 générations tracées",
      "morphs_registered_title": "Registre morphs",
      "morphs_registered_meta": "14 combinaisons"
    },
    "faq": {
      "title": "Questions fréquentes",
      "description": "L'essentiel pour comprendre l'intérêt d'un vrai suivi génétique reptiles.",
      "items": [
        {
          "q": "Pourquoi utiliser un outil pour la génétique des reptiles ?",
          "r": "Parce que dès qu'il faut relier gènes, parents, descendants et objectifs de reproduction, les informations deviennent vite difficiles à relire sans structure claire. Un outil dédié rend la lecture plus simple."
        },
        {
          "q": "Peut-on suivre le pedigree et les lignées ?",
          "r": "Oui. C'est justement l'un des intérêts majeurs : relier les individus entre eux, garder une continuité dans la lecture des lignées et éviter les informations perdues entre plusieurs fichiers."
        },
        {
          "q": "Est-ce utile pour préparer des pairings ?",
          "r": "Oui. La génétique permet de préparer plus intelligemment les pairings en visualisant mieux les gènes présents, les objectifs recherchés et les projections attendues."
        },
        {
          "q": "La génétique remplace-t-elle le suivi de reproduction ?",
          "r": "Non. La génétique sert à mieux comprendre et projeter les combinaisons. Le suivi de reproduction reste centré sur la chronologie opérationnelle des pairings, cycles, pontes et œufs."
        },
        {
          "q": "En quoi est-ce mieux qu'une note ou un tableau ?",
          "r": "Une note ou un tableau demandent beaucoup de reconstruction mentale. ReptiNode aide à relier directement les informations à la bonne fiche, au bon pairing et au bon contexte génétique."
        }
      ],
      "bottom_text": "Vous voulez relier cette partie au suivi breeding opérationnel ?",
      "bottom_link": "Voir la page reproduction"
    },
    "hero": {
      "badge": "Génétique claire et reliée",
      "title_line_1": "Génétique",
      "title_line_2": "reptiles",
      "description": "Reliez gènes, pedigree, lignées et projections de pairings dans un outil conçu pour rendre la lecture génétique plus simple, plus claire et plus exploitable sur le long terme.",
      "primary_cta": "Structurer ma génétique",
      "secondary_cta": "Voir les fonctionnalités",
      "stats": {
        "base": "Base claire pour gènes et lignées",
        "hypotheses": "Hypothèses perdues dans plusieurs notes",
        "clarity_value": "+ net",
        "clarity_label": "Pour lire pedigree et projections"
      },
      "reassurance_1": "Punnett en un clic",
      "reassurance_2": "Pedigree 3 générations",
      "reassurance_3": "Récessifs et hétérozygotes"
    },
    "benefits": {
      "title": "Pourquoi mieux structurer la génétique des reptiles ?",
      "description": "Dès qu'il faut relier plusieurs gènes, vérifier des lignées ou préparer des pairings sérieux, une organisation approximative devient vite limitante.",
      "lineage": {
        "badge": "Lignées et pedigree",
        "title": "Chaque information génétique reste reliée au bon contexte",
        "description": "ReptiNode aide à relier les gènes, les parents, les descendants et les objectifs de pairing pour éviter les reconstructions mentales permanentes et garder une base beaucoup plus fiable.",
        "items": [
          "Lecture plus claire des lignées",
          "Projections plus faciles à relire"
        ]
      },
      "projects": {
        "title": "Une lecture plus propre des projets",
        "description": "L'objectif n'est pas seulement d'avoir des labels de gènes, mais de mieux comprendre les relations entre individus et les objectifs recherchés."
      },
      "uncertainty": {
        "title": "Moins d'incertitude",
        "description": "Quand les infos génétiques sont dispersées, les hypothèses deviennent fragiles. Une base bien structurée rend les vérifications beaucoup plus simples.",
        "example_line": "Mojave het Clown × Pastel het Clown",
        "example_highlight": "➜ projection relue sans friction"
      },
      "usable": {
        "title": "La génétique devient exploitable, pas seulement stockée",
        "description": "Un bon outil génétique ne sert pas juste à empiler des informations. Il doit aider à vérifier un pedigree, préparer un pairing et relire facilement les éléments clés d'une lignée.",
        "items": {
          "pedigree_title": "Pedigree et lignée",
          "pedigree_badge": "Relié",
          "projection_title": "Projection de pairing",
          "projection_badge": "Lisible"
        }
      }
    },
    "value_section": {
      "title": "Ce qu'un bon suivi génétique doit vraiment vous apporter",
      "description": "Le vrai bénéfice n'est pas d'avoir plus d'informations, mais de les relier correctement pour mieux décider et mieux relire vos projets.",
      "daily": {
        "title": "Pour la lecture quotidienne",
        "description": "Gardez une vision claire des gènes et des relations entre individus sans passer votre temps à reconstituer le contexte.",
        "features": [
          "Lecture plus claire des gènes",
          "Pedigree plus simple à consulter",
          "Lignées mieux structurées",
          "Projections de pairings plus relisibles",
          "Infos génétiques reliées aux bonnes fiches"
        ],
        "button": "Explorer les fonctionnalités"
      },
      "long_term": {
        "badge": "Pour projets mieux préparés",
        "title": "Pour le long terme",
        "description": "Plus les lignées et les projets se multiplient, plus une base génétique propre devient précieuse.",
        "features": [
          "Moins d'hypothèses floues",
          "Vérification plus simple des lignées",
          "Préparation plus cohérente des pairings",
          "Base plus crédible pour les projets futurs",
          "Relecture plus rapide des informations clés"
        ],
        "button": "Commencer gratuitement",
        "footer_note": "Génétique mieux structurée"
      }
    },
    "comparison": {
      "title": "Passez d'une génétique “dans des notes” à une génétique vraiment exploitable",
      "description": "La vraie valeur d'un bon suivi génétique tient dans la capacité à relier les bonnes informations au bon moment, sans devoir tout reconstituer à chaque fois.",
      "before": {
        "title": "Avant",
        "description": "Des gènes notés à part, des pedigrees reconstruits à la main et des projections difficiles à relire quand plusieurs projets s'accumulent."
      },
      "with_reptinode": {
        "title": "Avec ReptiNode",
        "description": "Une base claire pour relier gènes, lignées, pedigree et projections, avec beaucoup moins de friction au moment de relire ou décider."
      },
      "result": {
        "title": "Résultat",
        "description": "Une génétique plus lisible, des pairings mieux préparés et une base plus solide pour faire évoluer vos projets dans le temps."
      }
    },
    "cta": {
      "badge": "Clarifiez vos projets génétiques",
      "title_line_1": "Structurez votre génétique",
      "title_line_2": "dans un outil pensé pour les reptiles",
      "description": "ReptiNode vous aide à relier gènes, pedigree, lignées et projections pour rendre vos décisions plus claires et vos projets plus lisibles.",
      "button": "Créer mon espace gratuitement",
      "features": [
        "Gènes mieux reliés",
        "Pedigree plus lisible",
        "Projections mieux préparées"
      ]
    },
    "cross_links_label": "Approfondir :",
    "lenses": {
      "tag": "Trois angles de lecture",
      "title": "Trois façons de lire la génétique",
      "subtitle": "Selon ce que vous cherchez — projeter, comprendre, ou inventorier — la même base de données change d'angle.",
      "punnett": {
        "tag": "Projection",
        "title": "Punnett square",
        "desc": "Choisissez deux animaux, ReptiNode calcule la distribution attendue. Plus de calcul mental sur un coin de table."
      },
      "pedigree": {
        "tag": "Lignée",
        "title": "Pedigree visuel",
        "desc": "Trois générations d'un coup d'œil. Vous savez d'où vient chaque morph et comment il s'est transmis."
      },
      "library": {
        "tag": "Inventaire",
        "title": "Registre des morphs",
        "desc": "Toutes les combinaisons présentes dans votre collection, classées, dénombrées, prêtes à filtrer."
      }
    },
    "pedigree": {
      "tag": "Pedigree visuel",
      "title": "Trois générations, un seul regard",
      "p1": "D'où vient ce morph ? Quel grand-parent portait le récessif ? L'arbre généalogique répond sans que vous ayez à dérouler trois ans de notes.",
      "p2": "Chaque nœud est cliquable et ouvre la fiche complète de l'animal. Vous remontez la lignée sans jamais quitter l'arbre.",
      "subject": "Nyx · Banana het Pied",
      "subject_meta": "Né le 04 août 2024 · génération III",
      "legend_morph": "porteur de morph",
      "legend_het": "het récessif",
      "legend_normal": "normal"
    },
    "registry": {
      "tag": "Registre",
      "title": "Toutes vos combinaisons, à un endroit",
      "subtitle": "Un coup d'œil pour savoir combien d'animaux portent telle combinaison, et lesquels.",
      "col_combo": "Combinaison",
      "col_type": "Type",
      "col_animals": "Animaux",
      "type_codominant": "Codominant",
      "type_recessive": "Récessif",
      "type_mixed": "Mixte",
      "animals_unit": "animaux",
      "footer_total": "5 combinaisons · 12 animaux concernés",
      "footer_action": "Filtrer →"
    },
    "breadcrumb": {
      "home": "Accueil"
    }
  },
  "terms": {
    "nav": {
      "back": "Retour"
    },
    "header": {
      "badge": "Règles du jeu",
      "title": "Conditions Générales",
      "subtitle": "CGU et CGV - Applicables au 22 Novembre 2025"
    },
    "tldr": {
      "title": "En Bref (L'essentiel à retenir)",
      "point_1": "Usage personnel et professionnel accepté.",
      "point_2": "L'abonnement Pro est sans engagement, résiliable à tout moment.",
      "point_3": "Vous restez propriétaire de vos données.",
      "point_4": "Nous ne sommes pas responsables de la santé de vos animaux (consultez un vétérinaire)."
    },
    "sections": {
      "object": {
        "title": "1. Objet",
        "content": "Les présentes Conditions Générales d'Utilisation et de Vente (ci-après \"CGU/CGV\") régissent l'utilisation du site et de l'application ReptiNode. En créant un compte, vous acceptez sans réserve ces conditions."
      },
      "access": {
        "title": "2. Accès au Service",
        "p1": "Le service est accessible gratuitement (Plan Découverte) avec des fonctionnalités limitées. Des fonctionnalités avancées (Plan Pro) nécessitent un abonnement payant.",
        "p2": "Vous êtes responsable de la confidentialité de vos identifiants. Toute action effectuée depuis votre compte est réputée être effectuée par vous."
      },
      "payment": {
        "title": "3. Abonnements & Paiements",
        "sub_1_title": "3.1 Tarifs",
        "sub_1_content": "Les prix sont indiqués en Euros (€) toutes taxes comprises. ReptiNode se réserve le droit de modifier ses tarifs à tout moment, mais s'engage à appliquer les tarifs en vigueur lors de la souscription.",
        "sub_2_title": "3.2 Paiement",
        "sub_2_content": "Les paiements sont sécurisés et traités par notre partenaire Stripe. Aucune donnée bancaire ne transite en clair sur nos serveurs.",
        "sub_3_title": "3.3 Résiliation",
        "sub_3_content": "L'abonnement est sans engagement. Vous pouvez le résilier à tout moment depuis votre espace \"Paramètres\". La résiliation prendra effet à la fin de la période de facturation en cours. Aucun remboursement prorata temporis n'est effectué."
      },
      "liability": {
        "title": "4. Responsabilité Limitée",
        "intro_bold": "ReptiNode est un outil de gestion, pas un vétérinaire.",
        "intro_text": "Nous fournissons des outils pour suivre le poids, les repas et la reproduction. Cependant :",
        "list_1": "Nous ne garantissons pas le succès de vos projets de reproduction.",
        "list_2": "Nous ne sommes pas responsables de la santé de vos animaux. Les alertes logicielles ne remplacent pas l'avis d'un professionnel.",
        "list_3": "Nous ne saurions être tenus responsables en cas de perte de données due à une panne majeure, bien que nous mettions tout en œuvre (backups quotidiens) pour l'éviter."
      },
      "user_content": {
        "title": "5. Contenu Utilisateur",
        "content": "Vous vous interdisez de publier sur la plateforme (notamment via les notes ou photos) tout contenu illégal, haineux, pornographique ou incitant à la maltraitance animale. ReptiNode se réserve le droit de suspendre tout compte ne respectant pas cette règle, sans préavis ni remboursement."
      },
      "law": {
        "title": "6. Droit Applicable",
        "content": "Les présentes conditions sont soumises au droit français. En cas de litige, et à défaut d'accord amiable, les tribunaux de Paris seront seuls compétents."
      }
    },
    "footer": {
      "privacy": "Confidentialité",
      "legal": "Mentions Légales",
      "rights": "Tous droits réservés."
    }
  },
  "privacy": {
    "nav": {
      "back": "Retour"
    },
    "header": {
      "badge": "Vos données vous appartiennent",
      "title": "Politique de Confidentialité",
      "last_update": "Dernière mise à jour : {{date}}"
    },
    "tldr": {
      "title": "En bref (TL;DR)",
      "point_1": "Nous ne vendons <strong>jamais</strong> vos données personnelles à des tiers.",
      "point_2": "Vos données d'élevage (reptiles, poids, reproduction) sont privées par défaut.",
      "point_3": "Vous pouvez exporter ou supprimer vos données à tout moment.",
      "point_4": "Les données sont stockées de manière sécurisée sur des serveurs en Europe."
    },
    "sections": {
      "intro": {
        "title": "1. Introduction",
        "p1": "Bienvenue sur <strong>ReptiNode</strong>. La protection de votre vie privée est au cœur de notre mission. En tant qu'éleveurs nous-mêmes, nous savons que les données concernant vos souches génétiques, vos projets de reproduction et votre collection sont sensibles.",
        "p2": "Cette politique détaille quelles données nous collectons, comment nous les utilisons et comment nous les protégeons. En utilisant notre service, vous acceptez les pratiques décrites ici."
      },
      "collected": {
        "title": "2. Données collectées",
        "intro": "Nous collectons uniquement les informations nécessaires au bon fonctionnement de l'application :",
        "point_1": "<strong>Informations de Compte :</strong> Adresse email, mot de passe (chiffré), nom d'utilisateur.",
        "point_2": "<strong>Données d'Élevage :</strong> Noms des reptiles, espèces, morphs, poids, dates de repas, mues, accouplements, pontes, notes et photos que vous téléchargez.",
        "point_3": "<strong>Données Techniques :</strong> Logs de connexion, type d'appareil, adresse IP (à des fins de sécurité uniquement).",
        "point_4": "<strong>Paiements :</strong> Si vous souscrivez à une offre Pro, notre processeur de paiement (Stripe) traite vos informations bancaires. Nous ne stockons jamais vos numéros de carte complets."
      },
      "usage": {
        "title": "3. Utilisation des données",
        "intro": "Vos données sont utilisées exclusivement pour :",
        "point_1": "Vous fournir l'accès à votre tableau de bord et gérer votre élevage.",
        "point_2": "Générer vos documents (certificats de cession, fiches de suivi).",
        "point_3": "Vous envoyer des notifications importantes (rappels de soins, mises à jour de sécurité).",
        "point_4": "Améliorer l'application via des statistiques anonymisées (ex: \"Combien de Python Regius sont gérés sur la plateforme ?\")."
      },
      "sharing": {
        "title": "4. Partage et Tiers",
        "bold_statement": "Nous ne vendons, ne louons et ne partageons vos données personnelles avec aucun annonceur publicitaire.",
        "intro": "Nous partageons des données uniquement avec nos prestataires techniques essentiels :",
        "point_1": "<strong>Hébergement & Base de données :</strong> PostgreSQL (Stockage sécurisé).",
        "point_2": "<strong>Paiements :</strong> Stripe (Gestion des abonnements).",
        "point_3": "<strong>Emails :</strong> Hostinger (Envoi des notifications transactionnelles)."
      },
      "security": {
        "title": "5. Sécurité",
        "intro": "Nous mettons en œuvre les meilleures pratiques de l'industrie pour protéger vos données :",
        "point_1": "Toutes les communications sont chiffrées via <strong>SSL/TLS (HTTPS)</strong>.",
        "point_2": "Les mots de passe sont hachés avec des algorithmes robustes (Argon2/Bcrypt) avant stockage.",
        "point_3": "Des sauvegardes automatiques sont effectuées quotidiennement pour prévenir toute perte de données.",
        "point_4": "L'accès aux données de production est restreint aux seuls ingénieurs clés de l'équipe."
      },
      "rights": {
        "title": "6. Vos Droits (RGPD)",
        "intro": "Conformément au Règlement Général sur la Protection des Données, vous disposez des droits suivants :",
        "point_1": "<strong>Droit d'accès et de portabilité :</strong> Vous pouvez télécharger une copie intégrale de vos données (PDF/JSON) depuis votre compte.",
        "point_2": "<strong>Droit de rectification :</strong> Vous pouvez modifier vos informations à tout moment.",
        "point_3": "<strong>Droit à l'oubli :</strong> Vous pouvez supprimer votre compte et toutes les données associées définitivement via les paramètres."
      },
      "cookies": {
        "title": "7. Cookies",
        "content": "Nous utilisons uniquement des cookies \"essentiels\" nécessaires au maintien de votre session (vous garder connecté) et à la sécurité (protection contre les attaques CSRF). Nous n'utilisons pas de cookies publicitaires ou de traçage tiers invasifs."
      }
    },
    "contact": {
      "title": "Nous contacter",
      "text": "Pour toute question concernant cette politique ou pour exercer vos droits, contactez notre Délégué à la Protection des Données (DPO) :"
    },
    "footer": {
      "terms": "Conditions d'Utilisation",
      "legal": "Mentions Légales",
      "rights": "Tous droits réservés."
    }
  },
  "legal": {
    "nav": {
      "back": "Retour"
    },
    "header": {
      "title": "Mentions Légales",
      "subtitle": "Informations légales obligatoires (Loi LCEN)"
    },
    "sections": {
      "editor": {
        "title": "1. Éditeur du Site",
        "intro": "Le site <strong>ReptiNode</strong> est édité par la société :",
        "company_name": "<strong>Raison sociale :</strong> ReptiNode (Société en cours de formation)",
        "capital": "<strong>Capital social :</strong> 10 000 €",
        "rcs": "<strong>RCS :</strong> Paris B 123 456 789",
        "siret": "<strong>SIRET :</strong> 123 456 789 00012",
        "tva": "<strong>Numéro de TVA :</strong> FR 12 123456789",
        "address": "<strong>Siège social :</strong> 10 impasse des Dames Colle, 10000 Troyes, France",
        "director": "<strong>Directeur de la publication :</strong> MERCOURT Noé (Président)"
      },
      "hosting": {
        "title": "2. Hébergement",
        "intro": "Le site et ses données sont hébergés par des prestataires conformes aux normes de sécurité européennes :",
        "app_provider": "Application & Frontend :",
        "db_provider": "Base de Données & Stockage :"
      },
      "intellectual": {
        "title": "3. Propriété Intellectuelle",
        "p1": "L'ensemble de ce site relève de la législation française et internationale sur le droit d'auteur et la propriété intellectuelle. Tous les droits de reproduction sont réservés, y compris pour les documents téléchargeables et les représentations iconographiques et photographiques.",
        "p2": "La reproduction de tout ou partie de ce site sur un support électronique quel qu'il soit est formellement interdite sauf autorisation expresse du directeur de la publication."
      },
      "contact": {
        "title": "4. Contact",
        "intro": "Pour toute demande concernant le site, vous pouvez nous contacter :",
        "email_label": "Par email :",
        "mail_label": "Par courrier :",
        "mail_value": "À l'adresse du siège social indiquée ci-dessus."
      }
    },
    "footer": {
      "privacy": "Confidentialité",
      "terms": "CGU & CGV",
      "rights": "Tous droits réservés."
    }
  },
  "public_profile": {
    "errors": {
      "not_found": "Animal introuvable ou vendu.",
      "loading": "Erreur de chargement",
      "access_title": "Profil inaccessible"
    },
    "status_available": "Disponible",
    "share_alert": "URL copiée !",
    "labels": {
      "morph": "Morph",
      "sex": "Sexe",
      "age": "Âge",
      "weight": "Poids",
      "length": "Taille"
    },
    "units": {
      "year": "an",
      "year_plural": "ans"
    },
    "defaults": {
      "classic": "Classique",
      "na": "N/A"
    },
    "certification_text": "Cet animal est issu de mon élevage certifié. Scannez pour voir l'historique complet lors de la cession.",
    "email_subject": "Intéressé par {{name}}",
    "contact_button": "Contacter l'éleveur",
    "contact_unavailable": "Contact non disponible",
    "footer_generated": "Fiche générée via ReptiNode App",
    "password": {
      "title": "Fiche protégée",
      "desc": "Cette fiche est protégée par un mot de passe.",
      "placeholder": "Mot de passe",
      "wrong": "Mot de passe incorrect.",
      "submit": "Accéder"
    },
    "forSale": {
      "forSale": "À vendre",
      "reserved": "Réservé",
      "sold": "Vendu",
      "contact": "Contacter",
      "morphmarket": "MorphMarket"
    },
    "cert": {
      "verified": "Certificat d'authenticité vérifié",
      "show": "Voir",
      "hide": "Masquer",
      "breeder": "Éleveur",
      "currentOwner": "Propriétaire actuel",
      "genetics": "Génétique",
      "chain": "Chaîne de propriété",
      "verifiedAt": "Vérifié le {{date}} · ReptiNode"
    }
  },
  "admin": {
    "header": {
      "title": "Administration",
      "subtitle": "Panneau de contrôle étendu",
      "role": "Super Admin"
    },
    "tabs": {
      "dashboard": "Tableau de Bord",
      "support": "Support"
    },
    "i18n": {
      "add": {
        "enLabel": "Anglais (EN) — requis",
        "enPlaceholder": "Valeur anglaise",
        "error": {
          "required": "La clé, EN et FR sont requis."
        },
        "extra": {
          "langLabel": "Langue supp.",
          "toggle": "Ajouter une langue supplémentaire",
          "valueLabel": "Valeur"
        },
        "frLabel": "Français (FR) — requis",
        "frPlaceholder": "Valeur française",
        "keyLabel": "Clé",
        "keyPlaceholder": "ex: contribute.form.name",
        "reset": "Réinitialiser",
        "submit": "Soumettre",
        "title": "Ajouter une traduction (EN + FR requis)"
      },
      "browse": {
        "byAuthor": "par {{author}}",
        "byAuthorWithDate": "par {{author}} — {{date}}",
        "deleteTitle": "Supprimer définitivement cette clé (toutes les langues)",
        "empty": "Aucun résultat.",
        "lang": {
          "all": "Toutes",
          "en": "EN",
          "es": "ES",
          "fr": "FR"
        },
        "langLabel": "Langue",
        "searchLabel": "Recherche (clé ou valeur)",
        "searchPlaceholder": "ex: contribute.title, 'Account created'…",
        "table": {
          "actions": "Actions",
          "en": "EN",
          "es": "ES",
          "fr": "FR",
          "key": "Clé"
        },
        "title": "Traductions existantes",
        "translatorLabel": "Traducteur"
      },
      "delete": {
        "confirm": "Supprimer définitivement",
        "confirmInstruction": "Pour confirmer, retapez la clé : {{key}}",
        "confirmTooltip": "Veuillez retaper la clé pour confirmer",
        "inputPlaceholder": "Retapez la clé exactement",
        "title": "Supprimer la clé",
        "warning": "Cette action supprimera définitivement la clé {{key}} dans toutes les langues."
      },
      "edit": {
        "history": {
          "empty": "Aucun historique pour cette langue.",
          "label": "Historique ({{count}})"
        },
        "title": "Éditer & Historique"
      },
      "error": {
        "load": "Erreur de chargement i18n : {{message}}"
      },
      "loading": {
        "translations": "Chargement des traductions…"
      },
      "missing": {
        "addButton": "Ajouter (EN+FR)",
        "empty": "Aucune traduction manquante.",
        "langLabel": "Langue",
        "searchKeyLabel": "Recherche par clé",
        "searchKeyPlaceholder": "ex: contribute.form.",
        "table": {
          "key": "Clé"
        },
        "title": "Clés manquantes ({{lang}})"
      },
      "overview": {
        "card": {
          "progress": "{{done}}/{{total}} clés",
          "viewLangTranslationsTitle": "Voir les traductions {{lang}}"
        },
        "title": "Couverture des traductions"
      },
      "pending": {
        "approve": "Approuver",
        "empty": "Aucune traduction en attente.",
        "reject": "Rejeter",
        "table": {
          "actions": "Actions",
          "id": "ID",
          "key": "Clé",
          "lang": "Langue",
          "submittedAt": "Soumise le",
          "submittedBy": "Soumise par",
          "value": "Valeur"
        },
        "title": "Traductions en attente de validation"
      },
      "tabs": {
        "add": "Ajouter",
        "browse": "Parcourir & Éditer",
        "missing": "Manquantes ({{count}})",
        "overview": "Aperçu",
        "pending": "En attente ({{count}})"
      }
    },
    "common": {
      "save": "Enregistrer",
      "cancel": "Annuler",
      "delete": "Supprimer",
      "add": "Ajouter",
      "edit": "Modifier",
      "search": "Rechercher",
      "close": "Fermer",
      "confirm": "Confirmer",
      "loading": "Chargement…",
      "actions": "Actions",
      "refresh": "Actualiser",
      "export": "Exporter",
      "filters": "Filtres",
      "all": "Tous",
      "none": "Aucun",
      "back": "Retour",
      "yes": "Oui",
      "no": "Non",
      "noResults": "Aucun résultat",
      "required": "Requis",
      "previous": "Précédent",
      "next": "Suivant",
      "saved": "Enregistré",
      "error": "Une erreur est survenue",
      "total": "Total",
      "status": "Statut",
      "name": "Nom",
      "description": "Description",
      "date": "Date",
      "email": "Email",
      "create": "Créer",
      "view": "Voir"
    },
    "nav": {
      "groups": {
        "pilotage": "Pilotage",
        "management": "Gestion",
        "contentSupport": "Contenu & support",
        "technical": "Technique"
      },
      "items": {
        "dashboard": "Vue d'ensemble",
        "analytics": "Sessions & stats",
        "revenue": "Revenu",
        "surveys": "Enquêtes / NPS",
        "users": "Utilisateurs",
        "roles": "Rôles",
        "billing": "Facturation",
        "families": "Familles",
        "support": "Support",
        "content": "Contenu",
        "moderation": "Modération",
        "genetics": "Génétique",
        "comms": "Communication",
        "i18n": "Traductions",
        "system": "Système",
        "infra": "Infrastructure",
        "compliance": "Sécurité & conformité"
      }
    },
    "help": {
      "dashboard": "KPIs business : MRR/ARR, inscriptions, engagement (DAU/MAU), alertes et conversion par page.",
      "analytics": "Sessions de connexion et statistiques d'usage détaillées.",
      "revenue": "Décomposition du MRR (new/expansion/churn), prévision, performance des promos, réconciliation Stripe et migration de plan.",
      "surveys": "Créez des enquêtes NPS/CSAT, suivez le score et lisez les verbatims.",
      "users": "Recherche, édition, modération, RGPD, et fiche CRM (notes, tags, score de santé, attribution de rôles).",
      "roles": "Définissez les rôles et leurs permissions. L'attribution aux utilisateurs se fait depuis leur fiche CRM.",
      "billing": "Abonnements, paiements échoués, remboursements, codes promo et webhooks Stripe.",
      "families": "Collections collaboratives, leurs membres, analytics et modération.",
      "support": "Tickets avec fil de discussion, modèles de réponse, priorité/catégorie et suivi SLA.",
      "content": "FAQ, annonces in-app, changelog et modèles de réponse.",
      "moderation": "File des contenus signalés et détection des comptes en difficulté.",
      "genetics": "Catalogue d'espèces et édition du registry génétique (loci/morphs), avec score de complétude.",
      "comms": "Campagnes push, emails segmentés, templates, adoption PWA et délivrabilité.",
      "i18n": "Couverture par langue, clés manquantes/inutilisées et export CSV.",
      "system": "Santé, erreurs, CRON, jobs, usage features, uploads et audit.",
      "infra": "Latences (p50/p95/p99), webhooks+rejeu, CRON à la demande, stockage, SQL lecture seule, sauvegardes et cache.",
      "compliance": "RGPD, consentements, rétention, politique mot de passe, mode maintenance, sessions admin, connexions suspectes et page de statut."
    },
    "state": { "errorTitle": "Impossible de charger", "retry": "Réessayer", "empty": "Rien pour l'instant." },
    "pager": { "total": "{{count}} au total", "prev": "Précédent", "next": "Suivant" },
    "confirm": { "reason": "Motif (obligatoire)", "typeToConfirm": "Tapez {{value}} pour confirmer" },
    "shell": {
      "admin": "Admin",
      "checkingAccess": "Vérification des accès...",
      "restrictedTitle": "Accès Restreint",
      "restrictedDesc": "Cet espace est réservé aux administrateurs. Si vous pensez qu'il s'agit d'une erreur, contactez le support.",
      "backToSite": "Retourner au site",
      "superAdmin": "Super Admin",
      "exit": "Quitter l'admin",
      "online": "En ligne :",
      "presenceTooltip": "{{email}} · onglet {{tab}} · il y a {{seconds}}s",
      "help": "Aide",
      "helpTooltip": "Aide contextuelle"
    },
    "dashboard": {
      "timeAgoNow": "à l'instant",
      "timeAgoMin": "il y a {{value}} min",
      "timeAgoHour": "il y a {{value}} h",
      "timeAgoDay": "il y a {{value}} j",
      "typeSignup": "Inscription",
      "typeFeedback": "Feedback",
      "typeSupport": "Support",
      "typeSurvey": "Enquête",
      "typeRgpd": "RGPD",
      "typeReport": "Signalement",
      "vsPrevPeriod": "vs période préc.",
      "loading": "Chargement du tableau de bord…",
      "title": "Vue d'ensemble",
      "subtitle": "Santé business, revenus et engagement.",
      "todoSupportAwaiting": "Tickets support en attente",
      "todoFeedbackNew": "Nouveaux feedbacks",
      "todoRgpdPending": "Demandes RGPD à traiter",
      "todoReportedPending": "Contenus signalés",
      "todoTitle": "À faire",
      "todoEmpty": "Rien en attente. 🎉",
      "recentTitle": "Dernières nouveautés",
      "recentEmpty": "Aucune activité récente.",
      "realtime": "Temps réel",
      "onlineNow": "en ligne (5 min)",
      "active15m": "actifs (15 min)",
      "lastSignup": "Dernier inscrit : {{name}}",
      "arpuSub": "ARPU {{value}}",
      "payingUsersSub": "{{value}} abonnés payants",
      "usersLabel": "Utilisateurs",
      "convertedSub": "{{value}}% convertis PRO",
      "signups30dLabel": "Inscriptions 30j",
      "dauLabel": "DAU (actifs 24h)",
      "mauLabel": "MAU (actifs 30j)",
      "stickinessLabel": "Stickiness DAU/MAU",
      "stickinessSub": "Engagement quotidien",
      "growthTitle": "Croissance (30 jours)",
      "signupsSeries": "Inscriptions",
      "activeSeries": "Actifs",
      "planDistributionTitle": "Répartition des plans"
    },
    "analytics": {
      "periodToday": "Aujourd'hui",
      "periodAll": "Tout",
      "periodDays": "{{count}} jours",
      "tooltipTotalConnections": "Total Connexions :",
      "tooltipUniqueUsers": "Utilisateurs Uniques :",
      "defaultUsername": "Utilisateur",
      "resetRange": "Réinitialiser l'intervalle",
      "statUniqueUsers": "Utilisateurs Uniques",
      "statTotalConnections": "Total Connexions",
      "statAvgSessions": "Moy. Sessions / User",
      "statNewRegistrations": "Nouveaux inscrits",
      "loadingData": "Chargement des données...",
      "noDataForPeriod": "Aucune donnée pour cette période",
      "chartVisitors": "Visiteurs",
      "chartConnections": "Connexions",
      "legendUniqueVisitors": "Visiteurs Uniques",
      "legendTotalConnections": "Connexions Totales",
      "envTitle": "Environnement",
      "envBrowsers": "Navigateurs",
      "envDevices": "Appareils",
      "locTitle": "Localisation",
      "locCountries": "Pays",
      "locRegions": "Régions",
      "locCities": "Villes",
      "loadingActiveUsers": "Récupération des utilisateurs actifs...",
      "noActiveUsers": "Aucun utilisateur actif",
      "noActiveUsersHint": "Essayez de modifier vos filtres ou la période.",
      "colUser": "Utilisateur",
      "colConnections": "Connexions",
      "colLastLocation": "Dernière Localisation",
      "colLastDevice": "Dernier Appareil",
      "colLastActivity": "Dernière Activité",
      "unknown": "Inconnu",
      "activeUsersSingular": "{{count}} utilisateur actif",
      "activeUsersPlural": "{{count}} utilisateurs actifs",
      "pageIndicator": "page {{page}} / {{total}}"
    },
    "revenue": {
      "migrationDone": "{{count}} compte(s) migré(s).",
      "tabMrr": "MRR waterfall",
      "tabForecast": "Prévision",
      "tabPromos": "Codes promo",
      "tabReconciliation": "Réconciliation",
      "tabMigration": "Migration de plan",
      "title": "Revenu",
      "subtitle": "Mouvements MRR, prévision, promos et opérations facturation.",
      "exportFailed": "Échec de l'opération",
      "exportAccounting": "Export comptable (TVA)",
      "currentMrr": "MRR actuel",
      "currentArr": "ARR actuel",
      "noHistory": "L'historique des mouvements MRR se construit à partir des changements d'abonnement à venir (via les webhooks Stripe). Les barres se rempliront au fil des évolutions de plans.",
      "breakdownTitle": "Décomposition des mouvements (6 mois)",
      "new": "Nouveau",
      "expansion": "Expansion",
      "contraction": "Contraction",
      "churn": "Churn",
      "forecastTitle": "Prévision MRR (6 mois)",
      "avgGrowth": "Croissance moy. : {{value}}/mois",
      "current": "Actuel",
      "projectedMrr": "MRR projeté",
      "code": "Code",
      "reduction": "Réduction",
      "usages": "Usages",
      "estimatedRevenue": "Revenu estimé",
      "active": "Actif",
      "noPromos": "Aucun code promo.",
      "stripeNotConfigured": "Stripe non configuré — réconciliation indisponible.",
      "noDiscrepancy": "Aucun écart détecté entre la base et Stripe. {{count}} abonnés vérifiés. 🎉",
      "discrepancies": "{{count}} écart(s) détecté(s)",
      "migrationTitle": "Migration de plan en masse",
      "migrationDesc": "Déplace tous les utilisateurs d'un plan vers un autre (grandfathering tarifaire). Faites toujours un essai (dry-run) d'abord.",
      "dryRunResult": "Essai : {{count}} compte(s) seraient migrés.",
      "migratedResult": "{{count}} compte(s) migrés ✓",
      "dryRunBtn": "Essai (dry-run)",
      "migrateConfirm": "Migrer tous les {{from}} vers {{to}} ?",
      "apply": "Appliquer"
    },
    "surveys": {
      "actionShown": "Activée",
      "actionHidden": "Désactivée",
      "actionCreated": "Créée",
      "actionUpdated": "Modifiée",
      "title": "Enquêtes & NPS",
      "subtitle": "Mesurez la satisfaction et lisez les retours.",
      "newSurvey": "Nouvelle enquête",
      "empty": "Aucune enquête. Créez votre première enquête NPS.",
      "inactive": "inactive",
      "viewResponses": "Voir les réponses",
      "activationHistory": "Historique d'activation",
      "deactivate": "Désactiver",
      "activate": "Activer",
      "confirmDelete": "Supprimer ?",
      "npsScore": "Score NPS",
      "avgScore": "Note moyenne",
      "responses": "Réponses",
      "editSurvey": "Modifier l'enquête",
      "language": "Langue :",
      "defaultLang": "(par défaut)",
      "emptyFallback": "(vide = repli FR)",
      "internalTitle": "Titre interne",
      "titleLang": "Titre ({{lang}})",
      "questionPlaceholder": "Question posée à l'utilisateur",
      "questionLang": "Question ({{lang}})",
      "typeNps": "NPS (0-10)",
      "typeCsat": "CSAT (1-5)",
      "typeText": "Texte libre",
      "audienceFree": "Gratuits",
      "startDate": "Début (optionnel)",
      "endDate": "Fin (optionnel)",
      "dateHint": "Si renseignées, l'enquête ne s'affiche aux utilisateurs qu'entre ces deux dates.",
      "noResponses": "Aucune réponse pour le moment.",
      "scoreLabel": "Note : {{score}}",
      "textResponse": "Texte",
      "noEvents": "Aucun événement enregistré pour le moment.",
      "byActor": "par {{name}}"
    },
    "users": {
      "title": "Utilisateurs",
      "subtitle_one": "{{count}} compte — recherche, édition et modération.",
      "subtitle_other": "{{count}} comptes — recherche, édition et modération.",
      "searchPlaceholder": "Rechercher par email ou pseudo…",
      "exportCsv": "Export CSV",
      "exportFilename": "utilisateurs.csv",
      "allPlans": "Tous les plans",
      "allRoles": "Tous les rôles",
      "allStatus": "Tout statut",
      "statusActive": "Actifs",
      "statusSuspended": "Suspendus",
      "allCountries": "Tous pays",
      "minReptiles": "Min. reptiles",
      "reset": "Réinit.",
      "selectedCount_one": "{{count}} sélectionné",
      "selectedCount_other": "{{count}} sélectionnés",
      "clear": "Effacer",
      "suspend": "Suspendre",
      "reactivate": "Réactiver",
      "changePlan": "Changer le plan",
      "selectAll": "Tout sélectionner (page courante)",
      "colUser": "Utilisateur",
      "plan": "Plan",
      "roles": "Rôles",
      "colReptiles": "Reptiles",
      "colRegistered": "Inscrit",
      "empty": "Aucun utilisateur trouvé.",
      "suspended": "Suspendu",
      "active": "Actif",
      "impersonate": "Se connecter au compte",
      "crmTitle": "Fiche CRM & rôles",
      "resetPassword": "Réinitialiser le mot de passe",
      "unsuspend": "Lever la suspension",
      "forceLogout": "Forcer la déconnexion",
      "exportGdpr": "Export RGPD",
      "pageOf": "Page {{page}} / {{totalPages}}",
      "editTitle": "Modifier {{name}}",
      "emailVerified": "Email vérifié",
      "saving": "Enregistrement…",
      "resetMsg": "Définir un nouveau mot de passe pour {{name}}. L'utilisateur sera déconnecté.",
      "resetConfirm": "Réinitialiser",
      "newPasswordPlaceholder": "Nouveau mot de passe (min 8)",
      "suspendTitle": "Suspendre le compte",
      "suspendMsg": "Suspendre {{name}}. Le compte sera bloqué et l'utilisateur déconnecté.",
      "days": "jours",
      "reasonOptional": "Motif (optionnel)",
      "logoutMsg": "Révoquer toutes les sessions de {{name}} ?",
      "logoutConfirm": "Déconnecter",
      "deleteTitle": "Supprimer le compte",
      "deleteMsg": "Cette action est irréversible et supprimera toutes les données de {{name}} (RGPD).",
      "deleteConfirm": "Supprimer définitivement",
      "deleteReasonPlaceholder": "Motif de la suppression (requis)",
      "impersonateMsg": "Ouvrir une session en tant que {{name}} ? Tu seras déconnecté de ton compte admin et redirigé vers son tableau de bord. Cette action est journalisée.",
      "impersonateConfirm": "Se connecter",
      "bulkSuspendTitle": "Suspendre les comptes sélectionnés",
      "bulkSuspendMsg": "{{count}} compte(s) seront suspendus et déconnectés.",
      "processing": "Traitement…",
      "bulkUnsuspendTitle": "Réactiver les comptes",
      "bulkUnsuspendMsg": "Lever la suspension de {{count}} compte(s) ?",
      "bulkSetPlanMsg": "Appliquer un nouveau plan à {{count}} compte(s).",
      "apply": "Appliquer",
      "newPlan": "Nouveau plan",
      "bulkDeleteTitle": "Supprimer les comptes sélectionnés",
      "bulkDeleteMsg": "Cette action est irréversible et supprimera définitivement {{count}} compte(s) et toutes leurs données (RGPD). Ton propre compte sera ignoré.",
      "deleting": "Suppression…",
      "bulkDeleteConfirm": "Supprimer {{count}} compte(s)",
      "healthScore": "Score de santé",
      "healthFactors": "{{days}}j depuis activité · {{snakes}} reptiles · {{plan}}",
      "profileModeration": "Modération du profil public",
      "hidden": "Masqué",
      "visible": "Visible",
      "verified": "Vérifié",
      "notVerified": "Non vérifié",
      "tags": "Tags",
      "noTags": "Aucun tag",
      "addTagPlaceholder": "Ajouter un tag",
      "internalNotes": "Notes internes",
      "addNotePlaceholder": "Ajouter une note…",
      "adminAuthor": "Admin",
      "noNotes": "Aucune note.",
      "bulkPartialFail": "{{succeeded}} action(s) réussie(s), {{failed}} échec(s) sur {{requested}}.",
      "reasonRequired": "Un motif est requis pour cette action.",
      "passwordTooShort": "Mot de passe trop court (min 8)",
      "impersonateFailed": "Connexion au compte impossible.",
      "impersonateError": "Erreur lors de la connexion au compte.",
      "subtitle": "{{count}} utilisateur(s) au total",
      "selectedCount": "{{count}} sélectionné(s)"
    },
    "roles": {
      "confirmDelete": "Supprimer le rôle \"{{name}}\" ?",
      "unsavedConfirm": "Des modifications non enregistrées seront perdues. Continuer ?",
      "title": "Rôles & permissions",
      "subtitle": "Contrôle d'accès granulaire (RBAC).",
      "newRole": "Nouveau rôle",
      "permsCount": "{{n}} perms",
      "selectPrompt": "Sélectionnez un rôle pour gérer ses permissions.",
      "selectedCount_one": "{{count}} permission sélectionnée",
      "selectedCount_other": "{{count}} permissions sélectionnées",
      "usersWithRole": "Utilisateurs avec ce rôle ({{n}})",
      "noUsers": "Aucun utilisateur n'a ce rôle.",
      "namePlaceholder": "Nom du rôle (ex: modérateur)",
      "descPlaceholder": "Description (optionnel)",
      "editRole": "Modifier le rôle",
      "systemRoleNameLocked": "Le nom d'un rôle système ne peut pas être modifié.",
      "selectedCount": "{{count}} permission(s) sélectionnée(s)"
    },
    "billing": {
      "pagerSingular": "{{count}} abonné · page {{page}}/{{totalPages}}",
      "pagerPlural": "{{count}} abonnés · page {{page}}/{{totalPages}}",
      "confirmFullRefund": "Confirmer le remboursement TOTAL de ce paiement ?",
      "refundInitiated": "Remboursement initié.",
      "invalidAmount": "Montant invalide.",
      "partialRefundInitiated": "Remboursement partiel initié.",
      "subNotFound": "Abonnement Stripe introuvable.",
      "confirmCancelSub": "Annuler définitivement cet abonnement ? Cette action est immédiate et irréversible.",
      "subCanceled": "Abonnement annulé.",
      "subPaused": "Abonnement mis en pause.",
      "subResumed": "Abonnement repris.",
      "tabSubs": "Abonnements",
      "tabFailed": "Paiements échoués",
      "tabPromos": "Codes promo",
      "tabWebhooks": "Webhooks",
      "stripeOff": "Stripe n'est pas configuré sur le serveur (clé API manquante). Les données live Stripe sont indisponibles ; les codes promo restent gérables localement.",
      "title": "Facturation",
      "subtitle": "Abonnements, paiements et codes promo.",
      "promoBtn": "Code promo",
      "colClient": "Client",
      "colPlan": "Plan",
      "colAmount": "Montant",
      "colRenewal": "Renouvellement",
      "emptySubs": "Aucun abonné payant.",
      "paused": "en pause",
      "resumeSub": "Reprendre l'abonnement",
      "pauseSub": "Mettre en pause",
      "cancelSub": "Annuler l'abonnement",
      "colAttempts": "Tentatives",
      "colAction": "Action",
      "emptyFailed": "Aucun paiement échoué. 🎉",
      "refundBtn": "Rembourser",
      "partialBtn": "Partiel",
      "invoice": "Facture",
      "colCode": "Code",
      "colDiscount": "Réduction",
      "colUsed": "Utilisé",
      "colExpires": "Expire",
      "colActive": "Actif",
      "emptyPromos": "Aucun code promo.",
      "never": "Jamais",
      "deactivate": "Désactiver",
      "activate": "Activer",
      "confirmDeletePromo": "Supprimer ce code ?",
      "emptyWebhooks": "Aucun événement.",
      "newPromoTitle": "Nouveau code promo",
      "codePlaceholder": "CODE (ex: WELCOME10)",
      "percentPlaceholder": "% réduction",
      "maxUsesPlaceholder": "Max usages",
      "partialRefundTitle": "Remboursement partiel",
      "customer": "Client",
      "amountPaid": "montant payé {{amount}}",
      "refundAmountLabel": "Montant à rembourser (€)"
    },
    "families": {
      "deleteConfirm": "Supprimer cette famille ? Les reptiles seront détachés.",
      "title": "Familles & collaboration",
      "subtitle": "Collections partagées, membres et analytics.",
      "statFamilies": "Familles",
      "statCollaborators": "Collaborateurs",
      "collaboratorPct": "{{pct}}% des users",
      "avgSize": "Taille moyenne",
      "membersPerFamily": "membres / famille",
      "largest": "Plus grande",
      "searchPlaceholder": "Rechercher une famille par nom…",
      "colMembers": "Membres",
      "colReptiles": "Reptiles",
      "colCreated": "Créée",
      "empty": "Aucune famille.",
      "pagination_one": "Page {{page}} / {{totalPages}} · {{count}} famille",
      "pagination_other": "Page {{page}} / {{totalPages}} · {{count}} familles",
      "detailCounts": "{{reptiles}} reptiles · {{members}} membres",
      "deleteFamily": "Supprimer cette famille",
      "pagination": "Page {{page}}/{{totalPages}} · {{count}} famille(s)"
    },
    "support": {
      "statusNew": "Nouveau",
      "statusInProgress": "En cours",
      "statusResolved": "Résolu",
      "catBug": "Bug",
      "catFeature": "Idée",
      "catUi": "Design",
      "catGeneral": "Avis",
      "tabTickets": "Tickets Support",
      "tabFeedback": "Avis & Retours",
      "title": "Centre de Support",
      "subtitleTickets": "Gérez les demandes d'assistance.",
      "subtitleFeedback": "Analysez les avis de la communauté.",
      "statTotalTickets": "Total Tickets",
      "statPending": "En attente",
      "statAwaitingReply": "Réponses en attente",
      "statResolved": "Résolus",
      "slaFirstResponse": "1ère réponse (moy.)",
      "slaTarget": "/ SLA {{hours}}h",
      "slaResolution": "Résolution (moy.)",
      "slaBreaches": "Dépassements SLA",
      "statAvgRating": "Note Moyenne",
      "statTotalFeedback": "Total Avis",
      "statBugsReported": "Bugs Signalés",
      "statIdeasReceived": "Idées Reçues",
      "searchTicketsPlaceholder": "Rechercher (sujet, email, nom)… puis Entrée",
      "filterBugs": "Bugs",
      "filterIdeas": "Idées",
      "filterDesign": "Design",
      "filterGeneral": "Général",
      "thUser": "Utilisateur",
      "thSubject": "Sujet",
      "thType": "Type",
      "thRatingMessage": "Note & Message",
      "newReply": "Nouvelle réponse",
      "noComment": "Aucun commentaire laissé",
      "emptyTickets": "Aucun ticket trouvé.",
      "emptyFeedback": "Aucun avis trouvé.",
      "paginationInfo": "{{count}} tickets · page {{page}}/{{totalPages}}",
      "userMessageLabel": "Message de l'utilisateur",
      "conversation": "Conversation",
      "reply": "Répondre",
      "templates": "Modèles",
      "noTemplates": "Aucun modèle. Créez-en dans l'onglet Contenu.",
      "replyPlaceholder": "Votre réponse à l'utilisateur…",
      "send": "Envoyer",
      "priority": "Priorité",
      "priorityLow": "Basse",
      "priorityNormal": "Normale",
      "priorityHigh": "Haute",
      "priorityUrgent": "Urgente",
      "category": "Catégorie",
      "sendError": "Erreur lors de l'envoi"
    },
    "content": {
      "actionShown": "Affiché",
      "actionHidden": "Caché",
      "actionCreated": "Créé",
      "actionUpdated": "Modifié",
      "actionDeleted": "Supprimé",
      "langLabel": "Langue :",
      "langDefault": "(par défaut)",
      "langTranslation": "(traduction — vide = repli sur FR)",
      "confirmDelete": "Supprimer définitivement cet élément ? (Pour le masquer temporairement, utilisez plutôt l'icône œil.)",
      "tabFaq": "FAQ",
      "tabAnnouncements": "Annonces",
      "tabChangelog": "Changelog",
      "tabTemplates": "Modèles de réponse",
      "visibleHint": "Visible — cliquer pour masquer",
      "hiddenHint": "Masqué — cliquer pour afficher",
      "visible": "Visible",
      "hidden": "Masqué",
      "title": "Contenu",
      "subtitle": "FAQ, annonces, changelog et modèles de réponse. L'icône œil affiche/masque sans supprimer.",
      "seedSuccess": "Contenu du site chargé : {{faq}} FAQ, {{announcements}} annonces, {{changelog}} changelog, {{templates}} modèles",
      "seedSuccessExtra": ", {{emails}} emails, {{surveys}} enquêtes",
      "seedBtn": "Charger le contenu du site",
      "empty": "Aucun élément. Cliquez sur « Ajouter » ou sur « Charger le contenu du site » pour démarrer.",
      "visibilityHistory": "Historique de visibilité",
      "new": "Nouveau",
      "question": "Question",
      "answer": "Réponse",
      "category": "Catégorie",
      "publishedSite": "Publié (visible sur le site)",
      "fieldTitle": "Titre",
      "fieldTitleLang": "Titre ({{lang}})",
      "fieldMessage": "Message",
      "fieldMessageLang": "Message ({{lang}})",
      "typeInfo": "Info",
      "typeWarning": "Avertissement",
      "typeSuccess": "Succès",
      "typeMaintenance": "Maintenance",
      "startsAt": "Visible à partir de (optionnel)",
      "endsAt": "Jusqu'au (optionnel)",
      "activeApp": "Active (visible dans l'app)",
      "targetingLabel": "Ciblage (optionnel) — laissez vide pour diffuser à",
      "targetingAll": "tous",
      "targetPlaceholder": "Cibler des utilisateurs précis…",
      "versionPlaceholder": "Version (v2.1.0)",
      "changelogNotesPlaceholder": "Notes — une ligne par changement :\n+ Nouvelle fonctionnalité\n~ Amélioration\n! Correction de bug",
      "changelogHintPrefix": "Astuce : préfixez chaque ligne par",
      "changelogHintNew": "(nouveauté),",
      "changelogHintImprove": "(amélioration) ou",
      "changelogHintFix": "(correctif) — elles s'afficheront en badges colorés sur la page publique.",
      "publishedChangelog": "Publié (visible sur /changelog)",
      "majorUpdate": "Mise à jour majeure (badge vert)",
      "templateTitle": "Titre du modèle",
      "templateBody": "Contenu du modèle",
      "saving": "Enregistrement…",
      "noEvents": "Aucun événement enregistré pour le moment.",
      "by": "par {{name}}"
    },
    "moderation": {
      "title": "Modération",
      "subtitle": "Contenus signalés et comptes en difficulté.",
      "tabReports": "Contenus signalés",
      "tabStruggling": "Comptes en difficulté",
      "filterAll": "Tous les statuts",
      "filterReviewed": "Examinés",
      "filterDismissed": "Rejetés",
      "filterActioned": "Traités",
      "statusPending": "En attente",
      "statusReviewed": "Examiné",
      "statusActioned": "Traité",
      "statusDismissed": "Rejeté",
      "typeProfile": "Profil",
      "typePhoto": "Photo",
      "typeFamily": "Famille",
      "emptyReports": "Aucun contenu signalé.",
      "emptyStruggling": "Aucun compte en difficulté détecté.",
      "targetRef": "cible #{{id}}",
      "targetLabel": "Cible : ",
      "targetUnresolved": "non résoluble",
      "owner": "propriétaire #{{id}}",
      "reportedBy": "Signalé par : ",
      "reporterAnonymous": "anonyme / inconnu",
      "changeStatusTitle": "Changer le statut",
      "sanctionBtn": "Sanctionner",
      "sanctionsFor": "Sanctions — propriétaire #{{id}}",
      "reasonPlaceholder": "Motif (visible dans l'audit)…",
      "hideProfileBtn": "Masquer le profil",
      "showProfileBtn": "Réafficher",
      "suspendDurationTitle": "Durée en jours",
      "daysShort": "j",
      "suspendBtn": "Suspendre",
      "ticketsCount": "{{count}} tickets",
      "statusUpdated": "Statut mis à jour",
      "sanctionReasonPrefix": "Suite au signalement : {{reason}}",
      "confirmHideProfile": "Masquer le profil public de cet utilisateur ?",
      "profileHidden": "Profil masqué",
      "profileShown": "Profil réaffiché",
      "invalidDays": "Nombre de jours invalide",
      "confirmSuspend": "Suspendre cet utilisateur pendant {{days}} jour(s) ?",
      "defaultSuspendReason": "Suspension suite à modération",
      "userSuspended": "Utilisateur suspendu {{days}} j"
    },
    "genetics": {
      "newSpeciesPrompt": "Identifiant de la nouvelle espèce (ex: python-regius) :",
      "invalidJson": "JSON invalide — vérifiez la syntaxe.",
      "confirmDelete": "Supprimer l'espèce \"{{id}}\" ?",
      "confirmMerge": "Fusionner \"{{source}}\" dans \"{{target}}\" ? La source sera supprimée.",
      "title": "Registry génétique",
      "subtitle": "{{count}} espèce(s) — catalogue, édition des loci/morphs et fusion.",
      "newSpeciesBtn": "+ Espèce",
      "searchPlaceholder": "Rechercher une espèce…",
      "colSpecies": "Espèce",
      "colFamily": "Famille",
      "colLoci": "Loci",
      "colCompleteness": "Complétude",
      "empty": "Aucune espèce.",
      "merge": "Fusionner",
      "newSpeciesTitle": "Nouvelle espèce",
      "jsonWarning": "Édition directe du JSON du registry. Respectez la structure (species, groups, loci, namedCombos).",
      "mergeTitle": "Fusionner une espèce",
      "mergeSource": "Source :",
      "mergeSourceInfo": "Ses loci, alias et combos seront copiés dans la cible, puis la source sera supprimée.",
      "mergeTargetPlaceholder": "Identifiant cible (ex: python-regius)"
    },
    "comms": {
      "audiencePro": "Abonnés PRO",
      "audienceFree": "Gratuits",
      "audienceProInactive30d": "PRO inactifs 30j",
      "audienceInactive30d": "Inactifs 30j",
      "audienceActive7d": "Actifs 7j",
      "audienceSpecific": "Utilisateurs spécifiques",
      "confirmSendCampaign": "Envoyer cette campagne maintenant ?",
      "confirmSendEmail": "Envoyer cet email à {{count}} destinataire(s) ?",
      "emailSent": "Envoyé à {{count}} destinataire(s).",
      "confirmDelete": "Supprimer ?",
      "tabPush": "Campagnes push",
      "tabEmail": "Email segmenté",
      "tabTemplates": "Templates email",
      "tabStats": "Adoption & délivrabilité",
      "title": "Communication",
      "subtitle": "Push, emails segmentés, templates et adoption.",
      "pushCampaignBtn": "Campagne push",
      "emptyCampaigns": "Aucune campagne. Créez-en une.",
      "received": "{{count}} reçus",
      "send": "Envoyer",
      "targetSegment": "Segment cible",
      "recipients": "{{count}} destinataire(s)",
      "emailSubjectPlaceholder": "Sujet de l'email",
      "emailContentPlaceholder": "Contenu (HTML autorisé)",
      "sendToSegment": "Envoyer au segment",
      "templateDefault": "(valeurs par défaut — éditez pour personnaliser)",
      "pushAdoption": "Adoption push",
      "emailsEnabled": "Emails activés",
      "feedingReminders": "Rappels repas",
      "emailFailure": "Échec emails",
      "sent": "{{count}} envoyés",
      "newPushCampaign": "Nouvelle campagne push",
      "pushTitlePlaceholder": "Titre",
      "pushMessagePlaceholder": "Message",
      "pushUrlPlaceholder": "URL au clic (ex: /dashboard)",
      "potentialRecipients": "{{count}} destinataire(s) potentiel(s)",
      "createDraft": "Créer (brouillon)",
      "templateLabel": "Template :",
      "templateVarsHint": "Les variables comme {{example}} sont remplacées à l'envoi.",
      "subjectPlaceholder": "Sujet",
      "htmlContentPlaceholder": "Contenu HTML"
    },
    "system": {
      "pagerInfo_one": "{{count}} entrée · page {{page}}/{{totalPages}}",
      "pagerInfo_other": "{{count}} entrées · page {{page}}/{{totalPages}}",
      "cleanupConfirm": "Supprimer définitivement {{n}} fichier(s) orphelin(s) ? Cette action est irréversible.",
      "operationFailed": "Échec de l'opération",
      "tabHealth": "Santé",
      "tabErrors": "Erreurs",
      "tabCron": "CRON",
      "tabJobs": "Jobs",
      "tabEmails": "Emails envoyés",
      "tabUsage": "Usage features",
      "tabUploads": "Uploads",
      "tabI18n": "i18n",
      "tabAudit": "Audit",
      "title": "Système",
      "subtitle": "Observabilité, jobs, traductions et journal d'audit.",
      "dbLabel": "Base de données",
      "dbOffline": "HORS LIGNE",
      "uploadsValue": "{{size}} · {{n}} fichiers",
      "memoryLabel": "Mémoire (RSS)",
      "memoryValue": "{{mb}} Mo",
      "uptimeLabel": "Uptime",
      "checkedInLabel": "Vérifié en",
      "topErrorEndpoints": "Top endpoints en erreur (7j)",
      "noErrors": "Aucune erreur enregistrée. 🎉",
      "never": "jamais",
      "lastRun": "Dernière exéc. :",
      "errorLabel": "Erreur :",
      "lastPassNotifs": "{{n}} notif. au dernier passage",
      "sent30d": "{{sent}} sur 30 j ({{runs}} exéc.)",
      "filterSent": "Envoyés",
      "filterFailed": "Échoués",
      "noJobRuns": "Aucune exécution enregistrée.",
      "jobsSent_one": "{{count}} envoyé",
      "jobsSent_other": "{{count}} envoyés",
      "topFeatures": "Fonctionnalités les plus utilisées (30j)",
      "topFeaturesHint": "Cliquez une fonctionnalité pour voir son historique quotidien.",
      "noUsage": "Aucune donnée d'usage pour l'instant. Le suivi démarre dès qu'un utilisateur utilise une fonctionnalité.",
      "loadingHistory": "Chargement de l'historique…",
      "usageOver30d": "{{n}} utilisation(s) sur 30 jours",
      "orphanFiles": "Fichiers orphelins",
      "filesCount": "{{n}} fichier(s)",
      "deleteOrphans": "Supprimer les orphelins",
      "noOrphans": "Aucun fichier orphelin détecté.",
      "exportCsv": "Export CSV",
      "coverageDetail": "{{done}} / {{total}} · {{missing}} manquante(s)",
      "unusedKeysTitle": "Clés potentiellement inutilisées (FR) — {{n}}",
      "unusedKeysHint": "Clés présentes en JSON mais non détectées dans le code source ({{scanned}} fichiers scannés). À vérifier avant suppression (certaines peuvent être construites dynamiquement).",
      "searchEmails": "Rechercher par destinataire ou type… puis Entrée",
      "noEmails": "Aucun email enregistré. La capture démarre dès le prochain envoi.",
      "searchAudit": "Rechercher (action, email, cible)… puis Entrée",
      "noAuditActions": "Aucune action enregistrée.",
      "systemActor": "système",
      "pagerInfo": "{{count}} entrée(s) · page {{page}}/{{totalPages}}",
      "jobsSent": "{{count}} envoyé(s)"
    },
    "infra": {
      "cronHourlyReminders": "Rappels horaires",
      "cronFeedbackRequests": "Demandes de feedback",
      "cronProDiscovery": "Emails découverte PRO",
      "cronInactiveUsers": "Relance inactifs",
      "cronBreedingReminders": "Rappels d'élevage",
      "jobStarted": "Job \"{{job}}\" lancé.",
      "backupCreated": "Sauvegarde créée.",
      "backupFailed": "Échec : {{detail}}",
      "cacheCleared": "Cache vidé.",
      "tabLatency": "Latences",
      "tabCron": "CRON (run now)",
      "tabStorage": "Stockage",
      "tabSql": "SQL (lecture)",
      "tabBackups": "Sauvegardes",
      "title": "Infrastructure",
      "subtitle": "Performance, webhooks, jobs, stockage et base de données.",
      "latencyEmpty": "Pas encore de mesures. Les latences se collectent au fil des requêtes (buffer en mémoire).",
      "colRequests": "Requêtes",
      "webhooksEmpty": "Aucune livraison de webhook enregistrée.",
      "replay": "Rejouer",
      "run": "Lancer",
      "storageEmpty": "Aucune donnée de stockage.",
      "colUser": "Utilisateur",
      "colSpace": "Espace",
      "sqlReadOnly": "Lecture seule : seules les requêtes SELECT sont autorisées (limitées à 200 lignes). Aucune modification possible.",
      "execute": "Exécuter",
      "rowsCount": "{{count}} ligne(s)",
      "runBackup": "Lancer une sauvegarde",
      "backupsEmpty": "Aucune sauvegarde enregistrée.",
      "fileSize": "{{size}} Mo · ",
      "cacheTitle": "Cache applicatif",
      "cacheEntries": "{{count}} entrée(s) en cache (agrégations du tableau de bord, TTL court).",
      "clearCache": "Vider le cache"
    },
    "compliance": {
      "tabRgpd": "RGPD",
      "tabConsents": "Consentements",
      "tabRetention": "Rétention",
      "tabPassword": "Mot de passe",
      "tabMaintenance": "Maintenance",
      "tabSessions": "Sessions admin",
      "tabSuspicious": "Connexions suspectes",
      "tabPermissions": "Historique permissions",
      "tabIncidents": "Statut / incidents",
      "title": "Sécurité & conformité",
      "subtitle": "RGPD, consentements, rétention, accès et statut de service.",
      "newRequest": "Nouvelle demande",
      "emptyRgpd": "Aucune demande RGPD.",
      "dueDate": "Échéance :",
      "statusPending": "En attente",
      "statusInProgress": "En cours",
      "statusCompleted": "Complété",
      "statusRejected": "Rejeté",
      "rgpdRequest": "Demande RGPD",
      "emailConcerned": "Email concerné",
      "typeExport": "Export des données",
      "typeDelete": "Suppression (droit à l'oubli)",
      "noteOptional": "Note (optionnel)",
      "emptyConsents": "Aucun consentement enregistré.",
      "granted": "Accordés",
      "refused": "Refusés",
      "policySaved": "Politique enregistrée.",
      "purgeConfirm": "Lancer la purge maintenant ? Les données plus anciennes que la politique seront supprimées.",
      "purgeDone": "Purge effectuée : {{result}}",
      "fieldLoginLogs": "Logs de connexion",
      "fieldErrorLogs": "Logs d'erreurs",
      "fieldAudit": "Journal d'audit",
      "fieldJobRuns": "Historique des jobs",
      "retentionTitle": "Rétention des données",
      "retentionHint": "Durée de conservation en jours (0 = illimité).",
      "purgeNow": "Purger maintenant",
      "passwordTitle": "Politique de mot de passe",
      "minLength": "Longueur minimale",
      "requireUppercase": "Majuscule requise",
      "requireNumber": "Chiffre requis",
      "requireSymbol": "Symbole requis",
      "expiration": "Expiration (jours, 0 = jamais)",
      "maintenanceUpdated": "Mode maintenance mis à jour.",
      "maintenanceTitle": "Mode maintenance",
      "maintenanceActive": "Maintenance ACTIVE — le site affiche la bannière",
      "maintenanceDisabled": "Maintenance désactivée",
      "maintenanceMessagePlaceholder": "Message affiché aux utilisateurs",
      "emptySessions": "Aucune session admin.",
      "noConnections": "Aucune connexion enregistrée.",
      "noSuspicious": "Aucune connexion suspecte détectée sur 7 jours. 🎉",
      "bruteForce": "Force brute",
      "multiCountry": "Multi-pays",
      "emptyPermissions": "Aucun changement de permission enregistré.",
      "byActor": "par {{actor}}",
      "system": "système",
      "declareIncident": "Déclarer un incident",
      "noIncidents": "Aucun incident. Tous les systèmes sont opérationnels. 🟢",
      "resolve": "Résoudre",
      "deleteConfirm": "Supprimer ?",
      "incidentTitlePlaceholder": "Titre",
      "severityMinor": "Mineur",
      "severityMajor": "Majeur",
      "severityMaintenance": "Maintenance",
      "declare": "Déclarer"
    }
  },
  "auth": {
    "login_success": "Vous êtes connecté.",
    "register_success": "Compte créé ! Veuillez vous connecter.",
    "login_title": "Connexion",
    "login_subtitle": "Heureux de vous revoir !",
    "register_title": "Créer un compte",
    "register_subtitle": "Commencez votre aventure d'élevage.",
    "email_label": "Adresse Email",
    "email_placeholder": "votre@email.com",
    "password_label": "Mot de passe",
    "forgot_password_link": "Mot de passe oublié ?",
    "confirm_password_label": "Confirmer le mot de passe",
    "sign_in_button": "Se connecter",
    "sign_up_button": "S'inscrire",
    "not_member_text": "Pas encore membre ?",
    "already_member_text": "Déjà un compte ?",
    "create_account_button": "Créer un compte",
    "back_to_signin_button": "Retour connexion",
    "hero": {
      "title_part1": "L'élevage",
      "title_highlight": "réinventé.",
      "subtitle": "Rejoignez l'élite de l'herpétoculture. Suivi de poids, génétique avancée et gestion de collection dans une interface conçue pour la performance.",
      "feature_1": "Calculateur génétique de morphs avancé",
      "feature_2": "Généalogie détaillée & certificats de naissance",
      "feature_3": "Gestion des accouplements, pontes & incubation",
      "feature_4": "Suivi du poids, des mues et de l'alimentation",
      "feature_5": "Sauvegarde cloud sécurisée, accessible partout",
      "footer": "© {{year}} ReptiNode Inc. Powering modern breeders."
    },
    "accountCreated": "Compte créé. Vous pouvez vous connecter.",
    "backToSignIn": "Retour à la Connexion",
    "confirmPassword": "Confirmer le Mot de Passe",
    "confirmPasswordPlaceholder": "Confirmer le mot de passe",
    "createAccount": "Créer un Compte",
    "createAccountBtn": "Créer un Compte",
    "createYourAccount": "Créez votre compte",
    "defineNewPassword": "Définir un nouveau mot de passe",
    "defineNewPasswordSubtitle": "Choisissez un mot de passe robuste pour votre compte.",
    "email": "Adresse Email",
    "emailPlaceholder": "Adresse e-mail",
    "forgotPassword": "Mot de passe oublié ?",
    "hasAccount": "Vous avez déjà un compte ?",
    "hide": "Masquer",
    "hidePassword": "Masquer le mot de passe",
    "invalidOrExpiredToken": "Jeton invalide ou expiré.",
    "loggedIn": "Connexion réussie.",
    "newPassword": "Nouveau mot de passe",
    "noAccount": "Vous n'avez pas de compte ?",
    "password": "Mot de Passe",
    "passwordPlaceholder": "Mot de passe",
    "passwordUpdated": "Mot de passe mis à jour. Vous pouvez vous connecter.",
    "passwordsDontMatch": "Les mots de passe ne correspondent pas.",
    "passwordsNotMatch": "Les mots de passe ne correspondent pas.",
    "processing": "Traitement...",
    "resetPassword": "Réinitialiser le Mot de Passe",
    "resetSent": "E-mail de réinitialisation envoyé.",
    "resetSubtitle": "Entrez votre email pour recevoir un lien de réinitialisation.",
    "sendReset": "Envoyer l'Email de Réinitialisation",
    "show": "Afficher",
    "showPassword": "Afficher le mot de passe",
    "signIn": "Se connecter",
    "signInBtn": "Se Connecter",
    "signInSubtitle": "Connectez-vous à votre compte",
    "signUp": "S'inscrire",
    "signUpSubtitle": "Commencez à gérer votre collection de reptiles aujourd'hui",
    "signUpSuccess": "Inscription réussie.",
    "subscribe": "Démarrer Maintenant",
    "trialExpired": "Votre essai gratuit de 14 jours a expiré. Veuillez vous abonner pour continuer à utiliser ReptiNode.",
    "updatePassword": "Mettre à jour le mot de passe",
    "welcomeBack": "Bon retour parmi nous !",
    "forgot_password": {
      "form_title": "Mot de passe oublié ?",
      "form_subtitle": "Entrez votre email pour recevoir un lien de réinitialisation.",
      "back_button": "Retour",
      "email_label": "Adresse Email",
      "email_placeholder": "votre@email.com",
      "submit_button": "Envoyer le lien",
      "success_title": "Email envoyé !",
      "success_message": "Consultez votre boîte de réception (et vos spams) pour trouver le lien de réinitialisation.",
      "retry_button": "Renvoyer un email",
      "sidebar": {
        "title": "Problème d'accès ?",
        "description": "Pas d'inquiétude. La procédure est simple et sécurisée. Suivez les étapes ci-dessous pour retrouver l'accès à votre élevage."
      },
      "steps": {
        "1": {
          "title": "Entrez votre email",
          "desc": "Nous identifierons votre compte."
        },
        "2": {
          "title": "Vérifiez votre boîte mail",
          "desc": "Un lien unique vous sera envoyé."
        },
        "3": {
          "title": "Créez un nouveau mot de passe",
          "desc": "Sécurisez à nouveau votre accès."
        }
      }
    },
    "errors": {
      "invalid_token": "Lien invalide ou expiré (token manquant).",
      "passwords_not_match": "Les mots de passe ne correspondent pas."
    },
    "reset_password": {
      "form_title": "Définir un nouveau mot de passe",
      "form_subtitle": "Veuillez saisir votre nouveau mot de passe ci-dessous pour accéder à votre compte.",
      "label_new_password": "Nouveau mot de passe",
      "label_confirm_password": "Confirmer le mot de passe",
      "submit_button": "Mettre à jour le mot de passe",
      "success_title": "Mot de passe mis à jour",
      "success_message": "Votre mot de passe a été mis à jour avec succès.",
      "redirecting": "Redirection...",
      "sidebar": {
        "badge": "Sécurité Maximale",
        "title": "Sécurisez votre compte.",
        "description": "Choisissez un mot de passe fort pour protéger les données génétiques et les suivis de votre élevage.",
        "tips_title": "Conseils de sécurité",
        "tip_1": "Utilisez au moins 8 caractères",
        "tip_2": "Mélangez lettres, chiffres et symboles",
        "tip_3": "Évitez d'utiliser le nom de vos reptiles"
      }
    }
  },
  "add_snake": {
    "title": "Ajouter un reptile",
    "edit_title": "Modifier le profil",
    "photo_label": "Photo du reptile",
    "add_photo_btn": "Ajouter une photo",
    "name_label": "Nom",
    "species_label": "Espèce",
    "morph_label": "Morph / Phase",
    "locality_label": "Localité",
    "locus_label": "Locus (Génétique)",
    "sex_label": "Sexe",
    "sex_unknown": "Inconnu",
    "sex_male": "Mâle",
    "sex_female": "Femelle",
    "birth_date_label": "Date de naissance (ou acquisition)",
    "notes_label": "Notes",
    "name_placeholder": "Ex: Banana Pied #05",
    "weight_label": "Poids initial (g)"
  },
  "birthCert": {
    "transfer": {
      "docTitle": "CERTIFICAT DE CESSION",
      "seller": "1. CÉDANT (Vendeur / Donneur)",
      "buyer": "2. ACQUÉREUR (Acheteur / Receveur)",
      "animalDesc": "3. DESCRIPTION DE L'ANIMAL",
      "scientificName": "Nom Scientifique",
      "commonName": "Nom Commun",
      "birthDate": "Date de naissance",
      "sex": "Sexe",
      "id": "Marquage (Puce/ID)",
      "origin": "Origine",
      "legalStatus": "Statut juridique",
      "price": "Prix / Modalité",
      "nc": "Né en captivité",
      "annex": "Annexe {{annex}} (Règlement UE)",
      "free": "Cession à titre gratuit",
      "notProvided": "Adresse non renseignée",
      "legal1": "Le Cédant atteste que l'animal ci-dessus provient d'un élevage régulier et licite.",
      "legal2": "Le Cédant atteste avoir informé l'Acquéreur des conditions d'hébergement, d'entretien et de soins nécessaires à l'espèce.",
      "legal3": "L'Acquéreur s'engage à détenir cet animal dans des conditions conformes à ses besoins biologiques et à la réglementation en vigueur.",
      "doneAt": "Fait à {{city}}, le {{date}}",
      "signSeller": "Signature du CÉDANT",
      "signBuyer": "Signature de l'ACQUÉREUR",
      "readApproved": "Précédée de la mention \"Lu et approuvé\"",
      "declarations": "4. DÉCLARATIONS",
      "mandatoryTitle": "Mention obligatoire",
      "authorityLabel": "Autorité / référence",
      "breederRegNo": "N° d'agrément / capacité / SIRET du cédant",
      "quantity": "Nombre de spécimens",
      "mark": "Marquage / Identification",
      "source": "Code source (CITES)",
      "registrationId": "N° d'enregistrement (registre national)",
      "citesCertId": "N° de certificat intracommunautaire (CIC)",
      "notListed": "Non listé CITES",
      "field": "Champ",
      "value": "Valeur"
    },
    "actions": {
      "generate": {
        "birth": {
          "title": "Naissance"
        },
        "clutch": {
          "title": "Rapport de ponte"
        },
        "hatch": {
          "title": "Éclosion"
        },
        "id": {
          "title": "Identification"
        },
        "incubation": {
          "title": "Incubation"
        },
        "pedigree": {
          "title": "Pédigrée"
        },
        "quarantine": {
          "title": "Quarantaine"
        },
        "sexing": {
          "title": "Sexage"
        },
        "transfer": {
          "title": "Cession / Vente"
        }
      }
    },
    "alerts": {
      "selectSnakeFirst": "Sélectionne d'abord un reptile."
    },
    "banner": {
      "birth": "Certificat de Naissance",
      "clutch": "Rapport de ponte",
      "hatch": "Certificat d'éclosion",
      "id": "Certificat d'identification",
      "incubation": "Rapport d'incubation",
      "pedigree": "Pédigrée (3 générations)",
      "quarantine": "Attestation de quarantaine",
      "sexing": "Certificat de sexage",
      "transfer": "Certificat de cession / facture"
    },
    "doc": {
      "creator": "ReptiNode",
      "subject": "Certificat généré"
    },
    "fields": {
      "birthDate": "Date de naissance",
      "buyer": "Acheteur",
      "clutch": "Ponte",
      "currentLength": "Longueur actuelle",
      "currentWeight": "Poids actuel",
      "eggTotals": "Œufs (total/fertiles)",
      "eggsTotalFertile": "Œufs (total/fertiles)",
      "end": "Fin",
      "exportedOn": "Exporté le",
      "female": "Femelle",
      "generationsShown": "Générations affichées",
      "hatchDate": "Date d'éclosion",
      "incubationTH": "Incubation (T°/HR)",
      "internalId": "Identifiant interne",
      "laidDate": "Date de ponte",
      "location": "Lieu",
      "male": "Mâle",
      "maternalGrandfather": "Grand-père maternel",
      "maternalGrandmother": "Grand-mère maternelle",
      "method": "Méthode",
      "morph": "Morph",
      "name": "Nom",
      "operator": "Opérateur",
      "pair": "Couple",
      "paternalGrandfather": "Grand-père paternel",
      "paternalGrandmother": "Grand-mère paternelle",
      "price": "Prix",
      "seller": "Vendeur",
      "sex": "Sexe",
      "sexDetermined": "Sexe déterminé",
      "species": "Espèce",
      "start": "Début",
      "targetHumidity": "Humidité cible",
      "targetTemp": "T° cible"
    },
    "footer": {
      "generatedByApp": "Certificat généré par votre application",
      "pageXofY": "Page {{page}} sur {{total}}"
    },
    "hatch": {
      "clutchLine": "Ponte du {{date}} — {{eggs}} œufs"
    },
    "methods": {
      "autre": "Autre",
      "echography": "Échographie",
      "other": "Autre",
      "popping": "Popping",
      "probing": "Probing"
    },
    "pdf": {
      "footer": {
        "generatedBy": "Certificat généré par votre application",
        "pageXofY": "Page {{page}} sur {{total}}"
      },
      "numberShort": "N°",
      "watermark": "REPTILE"
    },
    "preview": {
      "download": "Télécharger",
      "page": "Page",
      "title": "Aperçu PDF"
    },
    "section": {
      "animal": "Animal",
      "eggDetails": "Détail des œufs",
      "generalInfo": "Informations générales",
      "grandparentsG2": "Grands-parents (G2)",
      "greatGrandparentsG3": "Arrière-grands-parents (G3)",
      "info": "Informations générales",
      "juvenile": "Juvénile",
      "parameters": "Paramètres",
      "parents": "Parents",
      "parentsG1": "Parents (G1)",
      "parties": "Parties",
      "quarantinePeriod": "Période de quarantaine",
      "result": "Résultat",
      "subject": "Sujet",
      "tracking": "Suivi (statuts & poids)"
    },
    "sections": {
      "eggs": "Détail des œufs",
      "general": "Informations générales",
      "grandparentsG2": "Grands-parents (G2)",
      "greatGrandparentsG3": "Arrière-grands-parents (G3)",
      "juvenile": "Juvénile",
      "params": "Paramètres",
      "parents": "Parents",
      "parentsG1": "Parents (G1)",
      "subject": "Sujet",
      "tracking": "Suivi (statuts & poids)"
    },
    "table": {
      "lastUpdate": "Dernière mise à jour",
      "lastUpdateShort": "MAJ",
      "num": "#",
      "status": "Statut",
      "weight": "Poids"
    },
    "text": {
      "addMicrochipNote": "Ajoute ici le n° de microchip si applicable.",
      "adviceLogs": "Conseil : pour les courbes T°/HR, enregistre des logs et exporte-les ici.",
      "attestedBy": "Attesté par : ______________________",
      "breeder": "Éleveur : ______________________",
      "breederSignature": "Signature de l'éleveur : ______________________",
      "buyer": "Acheteur : ______________________",
      "captiveBornCertified": "Certifie que l'animal décrit ci-dessus est né en captivité (CB).",
      "conditionsNote": "Conditions de garantie, retour, transport : à préciser ici.",
      "dateLine": "Date : ____ / ____ / ______",
      "fillExtendedDataNote": "Renseigner via données étendues si disponibles (non fournies par défaut).",
      "hatchAttestationLine": "Je soussigné(e), atteste de l'éclosion en captivité de l'animal décrit ci-dessus.",
      "owner": "Propriétaire : ______________________",
      "seller": "Vendeur : ______________________",
      "signature": "Signature"
    },
    "titles": {
      "birth": "Certificat de Naissance",
      "clutchReport": "Rapport de ponte",
      "hatch": "Certificat d'éclosion",
      "id": "Certificat d'identification",
      "incubationReport": "Rapport d'incubation",
      "pedigree": "Pédigrée (3 générations)",
      "quarantine": "Attestation de quarantaine",
      "sexing": "Certificat de sexage",
      "transfer": "Certificat de cession / facture"
    },
    "ui": {
      "clutchOptionLabel": "Ponte du {{date}} — {{eggs}} œufs",
      "freeForm": {
        "buyerLabel": "Acheteur",
        "buyerPlaceholder": "Nom de l'acheteur",
        "locationLabel": "Lieu (quarantaine)",
        "locationPlaceholder": "Ex: Local dédié, rack 2",
        "methodLabel": "Méthode",
        "operatorLabel": "Opérateur (sexage)",
        "operatorPlaceholder": "Ex: Dr Dupont",
        "priceLabel": "Prix",
        "pricePlaceholder": "€",
        "qEndLabel": "Fin (quarantaine)",
        "qStartLabel": "Début (quarantaine)",
        "sellerLabel": "Vendeur",
        "sellerPlaceholder": "Éleveur / Société",
        "country": "Pays de référence (cadre juridique)",
        "commonName": "Nom commun",
        "price": "Prix de vente",
        "cites": "Statut Annexe UE",
        "location": "Lieu de signature",
        "markId": "Marquage / Puce (transpondeur)",
        "source": "Code source (CITES)",
        "quantity": "Nombre de spécimens",
        "registrationId": "N° d'enregistrement (registre national)",
        "breederRegNo": "N° capacité / SIRET / élevage",
        "citesCertId": "N° certificat intracommunautaire (CIC)",
        "sellerSection": "Cédant (Vendeur)",
        "buyerSection": "Acquéreur (Acheteur)"
      },
      "hints": {
        "enrichPdf": "Astuce : ajoute des champs (microchip, photos) côté modèle pour enrichir les PDF."
      },
      "labels": {
        "clutchOptional": "Ponte (optionnelle)",
        "snake": "Reptile"
      },
      "loading": "Chargement des reptiles…",
      "select": {
        "clutchPlaceholder": "Sélectionnez une ponte…",
        "snakePlaceholder": "Sélectionner un reptile…",
        "clutchNeedsSnake": "Sélectionnez d’abord un serpent",
        "noClutchForSnake": "Aucune ponte pour ce serpent"
      },
      "subtitle": "Génère les certificats puis télécharge-les depuis l'aperçu.",
      "title": "Certificats & Export PDF",
      "placeholders": {
        "name": "Nom complet ou Raison sociale",
        "address": "Adresse complète (Rue, CP, Ville)",
        "markId": "ex: 250269...",
        "registrationId": "ex: n° I-FAP",
        "breederRegNo": "optionnel",
        "citesCertId": "requis pour Annexe A",
        "commonName": "ex: Python Royal",
        "price": "ex: 150€",
        "location": "ex: Paris",
        "operator": "Nom du vétérinaire ou expert"
      },
      "annexOpt": {
        "A": "Annexe A",
        "B": "Annexe B",
        "C": "Annexe C",
        "D": "Annexe D",
        "None": "Non listé (NC)"
      },
      "complementary": {
        "title": "Informations complémentaires",
        "operator": "Opérateur (sexage)",
        "quarantineStart": "Début quarantaine",
        "quarantineEnd": "Fin quarantaine"
      },
      "legalData": "Données légales & administratives",
      "clutchRecap": "Détails de la ponte :",
      "eggs": "œufs"
    },
    "legal": {
      "disclaimer": "Ce document est un modèle fourni à titre informatif et ne constitue pas un avis juridique. Le cédant reste responsable du respect de la réglementation en vigueur au moment de la cession.",
      "captiveBred": "Le présent document atteste que le spécimen est né et élevé en captivité.",
      "country": {
        "FR": "France",
        "BE": "Belgique",
        "ES": "Espagne",
        "DE": "Allemagne",
        "NL": "Pays-Bas",
        "CH": "Suisse",
        "US": "États-Unis",
        "OTHER": "Autre / UE"
      },
      "sourceCode": {
        "C": "C — Né et élevé en captivité",
        "F": "F — Né en captivité (F1+)",
        "W": "W — Prélevé dans la nature",
        "R": "R — Issu de ranching",
        "D": "D — Annexe I, élevage commercial enregistré"
      },
      "fr": {
        "title": "CERTIFICAT / ATTESTATION DE CESSION",
        "framework": "France — Code de l'environnement (art. L413-6) ; Règlement (CE) n° 338/97",
        "authority": "DDPP / OFB — fichier national I-FAP pour les espèces protégées",
        "marking": "Marquage et inscription I-FAP (espèces protégées)",
        "decl1": "Le cédant atteste que l'animal provient d'un élevage régulier et licite et a été acquis conformément à la réglementation en vigueur.",
        "decl2": "Pour une espèce protégée, l'animal a été identifié (marquage) et inscrit au fichier national I-FAP préalablement à la cession.",
        "decl3": "Le cédant a remis à l'acquéreur un document d'information, en langue française, sur les besoins et les conditions d'entretien de l'espèce.",
        "decl4": "L'acquéreur s'engage à détenir l'animal dans des conditions conformes à ses besoins biologiques et à la réglementation applicable.",
        "mention": "Afin de préserver la vie sauvage, l'animal dont vous venez de faire l'acquisition ne doit pas être relâché dans le milieu naturel.",
        "annexA": "Espèce en Annexe A : la cession à but commercial requiert un certificat intracommunautaire (CIC) délivré par l'autorité compétente."
      },
      "de": {
        "title": "CERTIFICAT DE CESSION / HERKUNFTSNACHWEIS",
        "framework": "Allemagne — Règlement (CE) n° 338/97 ; BNatSchG / BArtSchV",
        "authority": "BfN — déclaration à l'autorité inférieure de protection de la nature (untere Naturschutzbehörde)",
        "marking": "Obligation de marquage (Anlage 6 BArtSchV)",
        "decl2": "Le cédant délivre un justificatif d'origine (Herkunftsnachweis) précisant l'espèce, le nombre, le sexe, le marquage, l'origine et les coordonnées des deux parties.",
        "decl3": "Le changement de détenteur est soumis à déclaration (Meldepflicht) par le cédant et par l'acquéreur auprès de l'autorité compétente."
      },
      "ch": {
        "title": "ATTESTATION DE CESSION",
        "framework": "Suisse — LCITES (RS 453) et ordonnances d'application",
        "authority": "Office fédéral de la sécurité alimentaire et des affaires vétérinaires (OSAV/BLV)",
        "marking": "Justificatif d'origine ; autorisation de détention le cas échéant",
        "decl1": "Le cédant atteste que l'animal est issu d'un élevage licite et peut justifier de son origine (preuve d'origine / Herkunftsnachweis).",
        "decl2": "Pour les espèces protégées, une autorisation de détention peut être exigée ; le justificatif d'origine doit être conservé.",
        "decl3": "L'acquéreur s'engage à détenir l'animal conformément à la législation suisse sur la protection des animaux et des espèces."
      },
      "us": {
        "title": "BILL OF SALE & CAPTIVE-BRED CERTIFICATE",
        "framework": "USA — Lacey Act (16 U.S.C. 3371-3378), ESA, CITES ; state law varies",
        "authority": "U.S. Fish & Wildlife Service — and the applicable state wildlife agency",
        "marking": "Microchip / unique identifier where applicable",
        "decl1": "The seller certifies the animal was bred and born in captivity and was lawfully acquired (Lacey Act legal-origin compliance).",
        "decl2": "For species listed under CITES Appendix I/II or the ESA, applicable federal permits are required for interstate or international transfer.",
        "decl3": "The buyer is responsible for compliance with the wildlife laws of their state of residence, which may restrict or prohibit possession.",
        "captiveBred": "This document certifies the animal was bred and born in captivity.",
        "disclaimer": "This document is an informational template and is not legal advice. The seller remains responsible for compliance with applicable federal and state law."
      },
      "eu": {
        "title": "CERTIFICAT DE CESSION",
        "framework": "Union européenne — Règlement (CE) n° 338/97 et Règlement (CE) n° 865/2006",
        "marking": "Marquage conforme et déclaration auprès de l'autorité nationale compétente",
        "decl1": "Le cédant atteste que le spécimen est né et élevé en captivité au sens de l'article 54 du Règlement (CE) n° 865/2006 et acquis légalement.",
        "decl2": "Pour un spécimen de l'Annexe B, le présent document et la traçabilité de l'ascendance constituent la preuve d'acquisition licite (art. 8 §5).",
        "decl3": "Pour un spécimen de l'Annexe A, l'usage commercial requiert un certificat d'exemption (« certificat jaune ») délivré par l'organe de gestion CITES national.",
        "decl4": "L'acquéreur s'engage à respecter les conditions de détention et la réglementation nationale et européenne applicable.",
        "annexA": "Spécimen en Annexe A : l'usage commercial requiert un certificat d'exemption (« certificat jaune ») délivré par l'organe de gestion CITES national."
      },
      "be": {
        "authority": "Organe de gestion CITES — SPF Santé publique (CITES Belgique)"
      },
      "es": {
        "authority": "Autoridad Administrativa CITES — Ministerio competente (CITES España)"
      },
      "nl": {
        "authority": "CITES-beheersautoriteit — RVO ; contrôle NVWA (Pays-Bas)"
      }
    },
    "errors": {
      "loadFailed": "Impossible de charger les données. Réessaie."
    }
  },
  "avatarCropper": {
    "title": "Recadrer l'avatar",
    "header": "Éditeur d'avatar",
    "newDesignBadge": "Nouveau design",
    "zoom": "Zoom",
    "zoomOut": "Réduire le zoom",
    "zoomIn": "Augmenter le zoom",
    "zoomLevel": "Niveau de zoom",
    "reset": "Reset",
    "fit": "Fit",
    "center": "Center",
    "tipTitle": "Astuce",
    "tip1": "Glissez pour déplacer l'image",
    "tip2": "Molette/Pinch pour zoomer",
    "tip3": "Raccourcis : <1>+</1>/<3>-</3>, flèches, <5>0</5>, <7>Entrée</7>, <9>Échap</9>",
    "apply": "Appliquer"
  },
  "qrcode": {
    "studio": "Studio d'impression",
    "previewFormat": "Format : {{format}}",
    "downloadLabel": "Imprimer l'étiquette",
    "scanMe": "SCANNEZ-MOI",
    "normalMorph": "Normal",
    "printedOn": "Imprimé le : {{date}}",
    "forSale": "À VENDRE",
    "idLabel": "ID : {{id}}",
    "scanForPrice": "SCANNER POUR LE PRIX",
    "private": {
      "title": "Privé",
      "desc": "Tableau de bord"
    },
    "public": {
      "title": "Public",
      "desc": "Vitrine de vente"
    },
    "format": {
      "title": "Format",
      "standard": "Standard",
      "deli": "Pot Deli",
      "strip": "Bande de rack",
      "card": "Fiche de terrarium"
    },
    "design": {
      "title": "Design & Marque",
      "logoTitle": "Logo central",
      "logoNone": "Aucun",
      "logoSnake": "Reptile",
      "logoUpload": "Télécharger..."
    },
    "options": {
      "addPrintDate": "Ajouter la date d'impression",
      "addPrintDateHint": "Utile pour suivre l'âge des informations affichées."
    },
    "colors": {
      "black": "Noir (Standard)",
      "green": "Vert (Sain/Dispo)",
      "blue": "Bleu (Reproducteur)",
      "purple": "Violet (Holdback)",
      "pink": "Rose (Femelle)",
      "orange": "Orange (Mue)",
      "red": "Rouge (Vendu/Malade)",
      "gold": "Or (Spécial)"
    },
    "customColor": "Couleur personnalisée"
  },
  "blob": "blob",
  "brand": {
    "name": "ReptiNode"
  },
  "breeding": {
    "title": "Centre de Reproduction",
    "tabs": {
      "pedigree": "Arbre",
      "genetics": "Génétique",
      "pairings": "Accouplements",
      "eggs": "Œufs",
      "certificates": "Documents",
      "season": "Saison",
      "incubation": "Incubation",
      "lineage": "Lignée",
      "projects": "Projets",
      "economy": "Économie"
    },
    "pro_only": {
      "title": "Fonctionnalités Pro",
      "subtitle": "Le Centre de Reproduction est réservé aux membres Pro.",
      "features": {
        "pedigree": {
          "title": "Arbres Généalogiques",
          "desc": "Visualisez les lignées sur plusieurs générations."
        },
        "genetics": {
          "title": "Calculateur Avancé",
          "desc": "Prédiction des morphs et combos."
        },
        "pairings": {
          "title": "Suivi des Accouplements",
          "desc": "Historique complet et rappels."
        },
        "eggs": {
          "title": "Gestion des Œufs",
          "desc": "Incubation, éclosion et suivi."
        },
        "certificates": {
          "title": "Documents Officiels",
          "desc": "Génération automatique de certificats."
        }
      },
      "cta_upgrade": "Passer au plan Pro"
    },
    "feature": {
      "certificatesDesc": "Générez des documents officiels professionnels",
      "eggsDesc": "Surveillez l'incubation avec températures et dates",
      "geneticsDesc": "Prédisez les morphes des bébés avant l'accouplement",
      "pairingsDesc": "Suivez les accouplements et leurs résultats",
      "pedigreeDesc": "Visualisez les lignées et gérez la reproduction"
    },
    "header": {
      "subtitle": "Visualisez les lignées et gérez votre programme d'élevage"
    },
    "proOnly": {
      "cta": {
        "upgradePro": "Passer au plan Pro"
      },
      "descriptions": {
        "certificates": "Générez des certificats élégants, prêts à imprimer et faciles à partager.",
        "eggs": "Consignez pontes, incubations, éclosions et recevez des rappels clés.",
        "genetics": "Simulez les probabilités de morphs et comparez les résultats en un clin d'œil.",
        "pairings": "Planifiez les couples, suivez les cycles et gardez l'historique des saillies.",
        "pedigree": "Cartographiez l'ascendance, évitez les croisements à risque et bâtissez vos lignées."
      },
      "features": {
        "certificates": "Certificats PDF",
        "eggs": "Suivi des œufs",
        "genetics": "Calculateur génétique",
        "pairings": "Gestion des pairings",
        "pedigree": "Arbre généalogique"
      },
      "subtitle": "Débloque des outils avancés pour ta structure.",
      "title": "Fonctionnalités Pro"
    },
    "ui": {
      "loading": "Chargement…",
      "save": "Enregistrer",
      "cancel": "Annuler",
      "add": "Ajouter",
      "delete": "Supprimer",
      "close": "Fermer",
      "later": "Plus tard"
    },
    "season": {
      "title": "Saison d'élevage",
      "all_seasons": "Toutes saisons",
      "pairings": "Accouplements",
      "clutches": "Pontes",
      "eggs": "Œufs",
      "hatchlings": "Nouveau-nés",
      "fertility_rate": "Taux de fertilité",
      "hatch_rate": "Taux d'éclosion",
      "success_rate": "Réussite globale",
      "benchmark_title": "Benchmark par espèce (toute la plateforme)",
      "benchmark_sub": "Taux d'éclosion moyens agrégés et anonymisés — utile pour comparer vos résultats.",
      "hatch_rate_legend": "Taux d'éclosion"
    },
    "projects": {
      "title": "Projets d'élevage",
      "new": "Nouveau projet",
      "empty": "Aucun projet. Créez votre premier projet (ex. « Pied 2026 »).",
      "animals": "animaux",
      "pairings": "accouplements",
      "new_title": "Nouveau projet d'élevage",
      "ph_name": "Nom du projet",
      "ph_goal": "Morph cible (ex: Pied)",
      "ph_season": "Saison (ex: 2026)",
      "ph_desc": "Description (optionnel)",
      "create": "Créer",
      "objective": "Objectif",
      "no_animals": "Aucun animal lié.",
      "no_pairings": "Aucun accouplement lié.",
      "delete_confirm": "Supprimer ce projet ?",
      "status": {
        "active": "Actif",
        "paused": "En pause",
        "completed": "Terminé",
        "archived": "Archivé"
      }
    },
    "economy": {
      "view_summary": "Bilan",
      "view_expenses": "Dépenses",
      "view_inventory": "Cheptel",
      "expense": "Dépense",
      "expenses": "Dépenses",
      "revenue": "Revenus",
      "margin": "Marge",
      "sales": "ventes",
      "by_category": "Dépenses par catégorie",
      "no_expenses": "Aucune dépense enregistrée.",
      "new_expense": "Nouvelle dépense",
      "ph_label": "Intitulé (ex: Souris congelées)",
      "amount": "Montant €",
      "cat": {
        "food": "Proies",
        "equipment": "Matériel",
        "vet": "Vétérinaire",
        "acquisition": "Acquisition",
        "other": "Autre"
      },
      "avail": {
        "keeping": "Gardé",
        "for_sale": "À vendre",
        "reserved": "Réservé",
        "sold": "Vendu",
        "holdback": "Holdback"
      },
      "inv": {
        "gravid": "Femelles gravides",
        "cooling": "En cooling",
        "for_sale": "À vendre / réservés",
        "breeders": "Reproducteurs disponibles"
      },
      "delete_confirm": "Supprimer ?"
    },
    "genealogy": {
      "coi_title": "Compatibilité d'accouplement (consanguinité)",
      "coi_sub": "Vérifie le coefficient de consanguinité (COI) avant d'apparier deux individus.",
      "male": "Mâle",
      "female": "Femelle",
      "verify": "Vérifier",
      "coi_high": "Consanguinité élevée — déconseillé.",
      "coi_none": "Aucune consanguinité notable détectée entre ces deux individus.",
      "common_ancestors": "ancêtre(s) commun(s).",
      "tree_title": "Arbre généalogique",
      "choose_snake": "Choisir un reptile…",
      "select_prompt": "Sélectionnez un reptile pour afficher sa lignée.",
      "ancestors": "Ascendants",
      "descendants": "Descendants",
      "unknown": "inconnu"
    },
    "incubation": {
      "title": "Suivi d'incubation",
      "choose_clutch": "Choisir une ponte…",
      "empty": "Aucune ponte enregistrée. Créez une ponte depuis l'onglet Œufs.",
      "select_prompt": "Sélectionnez une ponte pour suivre son incubation.",
      "clutch": "Ponte",
      "eggs_count": "œufs",
      "predicted_hatch": "Éclosion prévue",
      "days": "j",
      "base": "base",
      "avg_temp": "Temp. moyenne",
      "target": "cible",
      "species": "Espèce",
      "temp": "Température °C",
      "humidity": "Hygrométrie %",
      "reading": "Relevé",
      "curve_title": "Courbe température / hygrométrie",
      "temp_legend": "Temp °C",
      "humidity_legend": "Hygro %",
      "eggs_title": "Œufs",
      "eggs_sub": "mirage & éclosion",
      "no_eggs": "Aucun œuf enregistré pour cette ponte.",
      "inspect": "Inspecter",
      "hatch": "Éclore",
      "insp_title": "Inspection",
      "type_candling": "Mirage (candling)",
      "type_weighing": "Pesée",
      "type_pip": "Pipping (en éclosion)",
      "type_note": "Note",
      "fertile_yes": "Fertile (veines visibles)",
      "fertile_no": "Infertile / clair",
      "weight_ph": "Poids (g)",
      "notes_ph": "Notes",
      "history": "Historique",
      "fertile": "fertile",
      "infertile": "infertile",
      "hatch_title": "Éclosion",
      "hatch_sub": "Crée le nouveau-né et le lie automatiquement à ses parents et à la ponte.",
      "hatch_name_ph": "Nom du nouveau-né",
      "sex_unknown": "Sexe inconnu",
      "sex_male": "Mâle",
      "sex_female": "Femelle",
      "morph_ph": "Morph (optionnel)",
      "create_hatchling": "Créer le nouveau-né",
      "hatchling_created": "Nouveau-né créé et lié à la lignée ✓"
    },
    "adv_genetics": {
      "title": "Génétique avancée",
      "sub": "Croisement multi-gènes (avec alertes combos létaux) et projection inverse depuis votre cheptel.",
      "mode_cross": "Croisement",
      "mode_reverse": "Projection inverse",
      "male": "Mâle",
      "female": "Femelle",
      "calculate": "Calculer",
      "rarity": {
        "common": "commun",
        "uncommon": "peu commun",
        "rare": "rare",
        "very_rare": "très rare"
      },
      "target_morph": "Morph cible",
      "target_ph": "ex: Pied",
      "species": "Espèce",
      "all_species": "Toutes",
      "search_pairs": "Chercher les couples",
      "no_pairs": "Aucun couple de votre cheptel ne peut produire ce morph.",
      "wildtype": "Type sauvage"
    }
  },
  "charts": {
    "interval": "Intervalle"
  },
  "common": {
    "understood": "Compris",
    "report": "Signaler",
    "uploading": "Envoi...",
    "selected": "sélectionné(s)",
    "share": "Partager",
    "download": "Télécharger",
    "confirm_delete_photos": "Supprimer {{count}} photo(s) ?",
    "error_occurred": "Une erreur est survenue",
    "family_badge": "Famille",
    "date_placeHolder": "JJ/MM/AAAA",
    "upgrade_now": "Passer PRO",
    "back": "Retour",
    "back_dashboard": "Retour au tableau de bord",
    "you": "Vous",
    "backToHome": "Retour à l'accueil",
    "cancel": "Annuler",
    "chooseOption": "Choisir une option",
    "close": "Fermer",
    "code": "Code :",
    "confirm": "Confirmer",
    "create": "Créer",
    "delete": "Supprimer",
    "demo": "Démonstration",
    "edit": "Modifier",
    "error": "Erreur",
    "exportPdf": "Exporter PDF",
    "finish": "Terminer",
    "formatCard": "dd MMM, yyyy",
    "generatedOn": "Généré le",
    "loading": "Chargement...",
    "loggedAs": "Connecté en tant que",
    "next": "Suivant",
    "notAvailable": "N/D",
    "page": "Page",
    "retry": "Réessayer",
    "ok": "OK",
    "save": "Enregistrer",
    "saved": "Sauvegardé !",
    "saving": "Sauvegarde...",
    "select": "Sélectionner",
    "selectSnake": "Sélectionnez un reptile.",
    "skip": "Passer",
    "success": "Succès",
    "unexpectedError": "Erreur inattendue",
    "unknown": "Inconnu",
    "update": "Mettre à jour",
    "unexpected_error": "Une erreur inattendue est survenue."
  },
  "changelog": {
    "nav": {
      "back": "Retour"
    },
    "header": {
      "badge": "Historique des versions",
      "title": "Quoi de neuf ?",
      "subtitle": "Nous améliorons la plateforme le plus régulièrement possible. Découvrez les dernières fonctionnalités, corrections et améliorations de performance."
    },
    "types": {
      "feature": "Nouveauté",
      "improvement": "Amélioration",
      "fix": "Correctif"
    },
    "major_update": "Mise à jour majeure",
    "footer_slogan": "L'évolution continue.",
    "releases": [
      {
        "version": "v1.9.0",
        "date": "6 Juillet 2026",
        "isoDate": "2026-07-06",
        "highlight": true,
        "title": "Plus rapide, plus sûre, plus fiable",
        "description": "Une mise à jour de fond entièrement dédiée à la qualité : ReptiNode est plus rapide, plus sûre, plus accessible et plus fiable. Rien à faire de votre côté, tout est déjà en ligne — et de nouvelles fonctionnalités arrivent très bientôt.",
        "changes": [
          {
            "type": "improvement",
            "text": "Application plus rapide : chargement accéléré et navigation plus fluide, même avec de grandes collections (onglets d'élevage et outils PDF/QR chargés à la demande, listes optimisées)."
          },
          {
            "type": "improvement",
            "text": "Sécurité et confidentialité renforcées en profondeur : accès aux arbres généalogiques restreint au propriétaire, protection systématique des routes et durcissement de l'authentification."
          },
          {
            "type": "improvement",
            "text": "Accessibilité améliorée dans toute l'application : navigation au clavier, fermeture des fenêtres avec la touche Échap, compatibilité lecteurs d'écran et libellés de formulaires."
          },
          {
            "type": "improvement",
            "text": "Fiabilité accrue : suppressions de compte et de couvées propres (plus de données orphelines), enregistrements rendus atomiques et paiements Stripe fiabilisés."
          },
          {
            "type": "improvement",
            "text": "Plus de 100 tests automatisés et déploiements sécurisés (mise en production bloquée en cas d'échec d'un test) pour une stabilité au quotidien."
          },
          {
            "type": "fix",
            "text": "Correctif du redémarrage en production et de l'accès au Panel Admin, ainsi que de nombreux correctifs de stabilité."
          }
        ]
      },
      {
        "version": "v1.8.0",
        "date": "15 Juin 2026",
        "isoDate": "2026-06-15",
        "highlight": true,
        "title": "Vitrine Publique, QR Codes & Vente",
        "description": "Une mise à jour majeure placée sous le signe du partage : publiez vos reptiles sur des fiches publiques soignées, équipez votre élevage de QR codes intelligents et ouvrez la porte à la vente avec MorphMarket. Plus de contrôle, plus de sécurité, plus de possibilités.",
        "changes": [
          {
            "type": "feature",
            "text": "Fiches publiques nouvelle génération : partagez chaque reptile via un lien sécurisé à jeton unique, avec trois niveaux de visibilité (privé, non répertorié, public), expiration du lien, protection par mot de passe et choix des informations affichées."
          },
          {
            "type": "feature",
            "text": "Galerie multi-photos : les fiches publiques affichent une véritable galerie (jusqu'à 20 photos), aux côtés du morph, du sexe et de la génétique, avec un aperçu enrichi lors du partage sur les réseaux sociaux."
          },
          {
            "type": "feature",
            "text": "Mise en vente & MorphMarket : affichez un statut à vendre, réservé ou vendu avec prix et bouton de contact, et exportez toute votre liste vers MorphMarket en un clic (comptes Pro)."
          },
          {
            "type": "feature",
            "text": "QR par enclos & rack : générez un QR pour un terrarium ou un rack entier menant à la liste de ses occupants, et gérez vos enclos directement dans l'application."
          },
          {
            "type": "feature",
            "text": "QR d'actions rapides : un QR « nourrir » ou « peser » ouvre directement le formulaire pré-rempli — un seul scan suffit pour enregistrer l'événement."
          },
          {
            "type": "feature",
            "text": "Transfert par QR & certificat d'authenticité : cédez un reptile et tout son historique à l'acheteur d'un simple scan, et profitez d'un certificat vérifiable retraçant la lignée et la chaîne de propriété."
          },
          {
            "type": "feature",
            "text": "Impression en masse & scanner intégré : imprimez tout un élevage de QR codes sur une planche PDF (formats type Avery), scannez vos étiquettes depuis l'application et personnalisez vos QR (résistance renforcée pour terrarium humide, logo de l'élevage)."
          },
          {
            "type": "feature",
            "text": "Réponses au support par email : répondez directement à nos emails et votre message rejoint automatiquement votre ticket."
          },
          {
            "type": "improvement",
            "text": "Mini-statistiques de scan par reptile et nouveaux indicateurs de visibilité et de vente directement sur chaque carte."
          },
          {
            "type": "improvement",
            "text": "Fiches publiques affichées dans la langue du visiteur, mode maintenance avec bannière d'information et sondages programmables (dates de début et de fin)."
          },
          {
            "type": "fix",
            "text": "Le QR public fonctionne désormais parfaitement (fini le message « profil privé » affiché à tort), avec de nombreux correctifs de stabilité."
          }
        ]
      },
      {
        "version": "v1.7.1",
        "date": "31 Mai 2026",
        "isoDate": "2026-05-31",
        "title": "Ouverture Internationale & Polissage",
        "description": "ReptiNode franchit les frontières : les documents légaux s'ouvrent à de nombreux pays, la page d'accueil fait peau neuve et plusieurs correctifs ciblés viennent fiabiliser l'application.",
        "changes": [
          {
            "type": "feature",
            "text": "Documents légaux internationaux : la génération de documents officiels est désormais disponible pour la Belgique, l'Espagne, l'Allemagne, les Pays-Bas, la Suisse, les États-Unis ainsi que l'ensemble des pays de l'Union Européenne."
          },
          {
            "type": "feature",
            "text": "Nouvelles pages de présentation : découvrez les fonctionnalités phares de ReptiNode à travers des pages dédiées, pensées pour mieux comprendre tout ce que l'application peut vous apporter."
          },
          {
            "type": "improvement",
            "text": "Refonte visuelle de la page d'accueil pour une première impression plus moderne, plus claire et mieux structurée."
          },
          {
            "type": "fix",
            "text": "Centre de Reproduction (Pro) : correction d'un bug rendant certains reptiles invisibles depuis l'introduction du Mode Famille."
          },
          {
            "type": "fix",
            "text": "Corrections de plusieurs traductions pour une cohérence linguistique améliorée dans toute l'application."
          }
        ]
      },
      {
        "version": "v1.7.0",
        "date": "8 Mai 2026",
        "isoDate": "2026-05-08",
        "title": "Transferts, Nourrissages & Analyses",
        "description": "Une mise à jour centrée sur une gestion plus souple et plus fiable de vos reptiles : transférez vos animaux, ajoutez-les plus facilement, suivez mieux les nourrissages et profitez d'analyses entièrement repensées.",
        "highlight": true,
        "changes": [
          {
            "type": "feature",
            "text": "Transfert de reptiles : Vous pouvez désormais transférer un reptile vers une famille ou le donner à un autre utilisateur."
          },
          {
            "type": "improvement",
            "text": "Ajout de reptile amélioré : Le formulaire est plus clair, plus complet et propose désormais les espèces depuis le catalogue ReptiNode."
          },
          {
            "type": "improvement",
            "text": "Saisie des nourrissages améliorée : L'enregistrement des repas est plus précis, plus rapide et mieux adapté aux différents cas du quotidien."
          },
          {
            "type": "feature",
            "text": "Refonte complète de l'onglet Analyses : Les profils reptiles disposent maintenant d'une vue statistique plus riche pour mieux suivre santé, repas, poids, mues et alertes."
          },
          {
            "type": "fix",
            "text": "Correction de plusieurs bugs mineurs liés aux familles, aux événements et à l'affichage de certaines données."
          },
          {
            "type": "improvement",
            "text": "Améliorations de performance et de stabilité pour une navigation plus fluide dans l'application."
          }
        ]
      },
      {
        "version": "v1.6.0",
        "date": "20 Décembre 2025",
        "isoDate": "2025-12-20",
        "title": "Communauté, Famille & Photos",
        "description": "Une mise à jour sous le signe du partage ! Gérez votre élevage à plusieurs, discutez sur le forum et immortalisez vos reptiles en photos. Le tout avec un plan gratuit largement étendu.",
        "highlight": true,
        "changes": [
          {
            "type": "feature",
            "text": "Lancement de la Communauté : Un nouvel onglet Forum pour échanger, poser vos questions et partager votre passion entre membres."
          },
          {
            "type": "feature",
            "text": "Mode Famille : Gérez vos reptiles à plusieurs ! Créez une 'Famille' dans les paramètres pour inviter votre conjoint(e) ou associés sur votre élevage."
          },
          {
            "type": "feature",
            "text": "Galerie Photos : L'onglet 'Photos' fait son apparition sur les profils reptiles. Commencez à construire leur album."
          },
          {
            "type": "improvement",
            "text": "Upgrade Plan Gratuit : La limite explose ! Vous pouvez désormais gérer jusqu'à 30 reptiles gratuitement (contre 5 auparavant)."
          },
          {
            "type": "improvement",
            "text": "Simplification : L'onglet 'Contribution' est retiré. Les demandes d'ajout d'espèces passent désormais par le formulaire de contact."
          },
          {
            "type": "fix",
            "text": "Formulaire d'ajout : La date de naissance n'est plus obligatoire, facilitant l'enregistrement des animaux dont l'origine est incertaine."
          },
          {
            "type": "fix",
            "text": "Correctifs visuels sur mobile pour une meilleure navigation sur petits écrans."
          }
        ]
      },
      {
        "version": "v1.5.0",
        "date": "08 Décembre 2025",
        "isoDate": "2025-12-08",
        "title": "Extension des Espèces & Design",
        "description": "Une mise à jour majeure qui ouvre ReptiNode à l'ensemble du monde terrariophile.",
        "highlight": true,
        "changes": [
          {
            "type": "feature",
            "text": "Support officiel de 190 nouvelles espèces (Hognose, Python Vert, Réticulé...) et ouverture de la base de données à tous les reptiles (Lézards, Tortues, etc.) et plus seulement les serpents."
          },
          {
            "type": "improvement",
            "text": "Amélioration du design de certains éléments pour une meilleure compréhension et accessibilité."
          },
          {
            "type": "fix",
            "text": "Correctifs de stabilité sur le module de génétique et améliorations des performances."
          }
        ]
      },
      {
        "version": "v1.4.0",
        "date": "1 Décembre 2025",
        "isoDate": "2025-12-01",
        "title": "Connectez le Réel et le Digital : QR Codes & Vitrine Publique",
        "description": "Transformez vos installations grâce à nos étiquettes intelligentes. Du scan rapide pour le nourrissage à la fiche de vente publique pour les bourses, faites le lien entre vos racks et votre application.",
        "highlight": true,
        "changes": [
          {
            "type": "feature",
            "text": "Générateur de QR Codes : Créez des étiquettes PDF personnalisées (Nom, Morph, etc) prêtes à l'impression pour vos terrariums et racks."
          },
          {
            "type": "feature",
            "text": "Mode Vitrine Publique : Activez le mode 'Vente' pour générer un lien accessible à tous. Idéal pour les expos : les visiteurs scannent et voient les infos essentielles sans accéder à vos données privées."
          },
          {
            "type": "feature",
            "text": "Actions Rapides au Scan : Configurez le QR Code pour ouvrir directement la modale d'ajout d'événement (repas, mue, poids) lors de vos tours d'entretien."
          },
          {
            "type": "feature",
            "text": "Personnalisation Visuelle : Utilisez un code couleur (Vert, Rouge, Bleu...) sur vos QR Codes pour identifier visuellement les statuts (À vendre, En soin, Repro) directement sur la boîte."
          },
          {
            "type": "feature",
            "text": "Mise en relation directe : La fiche publique inclut désormais un bouton de contact par email pré-rempli pour faciliter les échanges avec les acheteurs potentiels."
          },
          {
            "type": "improvement",
            "text": "Compatible Imprimantes Thermiques : Le format PDF a été optimisé pour les étiquettes standards 50x50mm et les formats cartes de visite."
          }
        ]
      },
      {
        "version": "v1.3.0",
        "date": "15 Novembre 2025",
        "isoDate": "2025-11-15",
        "title": "Révolutionnez votre Élevage : Le Centre de Reproduction",
        "description": "Une suite complète dédiée aux éleveurs passionnés. Nous avons numérisé chaque étape de votre saison : de la planification des accouplements jusqu'à l'impression du certificat de naissance.",
        "highlight": true,
        "changes": [
          {
            "type": "feature",
            "text": "Workflow d'Accouplement : Gérez le cycle complet avec statuts personnalisés (Planifié, En cours, Confirmé, Échoué)."
          },
          {
            "type": "feature",
            "text": "Incubation de Précision : Suivi par ponte avec relevés environnementaux (Température & Humidité) et date d'éclosion estimée."
          },
          {
            "type": "feature",
            "text": "Gestion des Œufs à l'unité : Traçabilité individuelle (poids, slugs, non-fertiles, morts-nés ou éclos)."
          },
          {
            "type": "feature",
            "text": "Arbre Généalogique & Génétique : Visualisez les ancêtres et calculez les probabilités de morphs avant même l'accouplement."
          },
          {
            "type": "feature",
            "text": "Documents Administratifs : Génération automatique de certificats de naissance/cession conformes et professionnels."
          },
          {
            "type": "improvement",
            "text": "Sécurisation des données : Module exclusif aux comptes 'Pro' avec sauvegarde cloud prioritaire."
          }
        ]
      },
      {
        "version": "v1.2.0",
        "date": "1 Novembre 2025",
        "isoDate": "2025-11-01",
        "title": "Contribuez et Gagnez des Récompenses",
        "description": "La base de données devient communautaire ! Vous pouvez désormais proposer des mutations manquantes, valider des données et gagner des crédits pour votre abonnement.",
        "highlight": true,
        "changes": [
          {
            "type": "feature",
            "text": "Système de Contribution : Proposez des morphs, localités ou espèces manquantes au catalogue."
          },
          {
            "type": "feature",
            "text": "Portefeuille & Récompenses : Gagnez des crédits (⟡) pour chaque validation acceptée par la modération."
          },
          {
            "type": "feature",
            "text": "Classement Communautaire : Découvrez les top contributeurs et comparez votre rang."
          },
          {
            "type": "improvement",
            "text": "Recherche catalogue intégrée pour éviter les doublons lors de vos soumissions."
          }
        ]
      },
      {
        "version": "v1.1.0",
        "date": "15 Octobre 2025",
        "isoDate": "2025-10-15",
        "title": "Dashboard : Glisser-déposer & Personnalisation",
        "description": "Une mise à jour majeure de votre tableau de bord. Réorganisez vos cartes, accédez plus vite à vos actions fréquentes et profitez d'une interface plus fluide.",
        "changes": [
          {
            "type": "feature",
            "text": "Drag & Drop : Réorganisez vos reptiles par simple glisser-déposer. Votre ordre est sauvegardé."
          },
          {
            "type": "feature",
            "text": "Widgets Statistiques : Nouvelles cartes pour suivre les mues et repas de la semaine en un coup d'œil."
          },
          {
            "type": "improvement",
            "text": "Avatar utilisateur synchronisé et gestion du cache améliorée."
          },
          {
            "type": "fix",
            "text": "Correction d'un problème de chargement des avatars sur les connexions lentes."
          }
        ]
      },
      {
        "version": "v1.0.0",
        "date": "1 Octobre 2025",
        "isoDate": "2025-10-01",
        "title": "Lancement Officiel !",
        "description": "Après des mois de développement, la version 1.0 est là ! Tout ce dont vous avez besoin pour gérer vos fiches animaux, visualiser leur croissance et sécuriser vos données.",
        "highlight": true,
        "changes": [
          {
            "type": "feature",
            "text": "Fiches Profils Complètes : Suivi poids, taille et âge en temps réel."
          },
          {
            "type": "feature",
            "text": "Graphiques Intelligents : Visualisez la courbe de croissance et la fréquence des repas."
          },
          {
            "type": "feature",
            "text": "Export PDF Pro : Générez des fiches de cession et de suivi vétérinaire en un clic."
          },
          {
            "type": "feature",
            "text": "Mode 'Lecture Seule' & Archivage : Sécurisez les données des reptiles vendus ou décédés."
          }
        ]
      }
    ]
  },
  "contact": {
    "nav": {
      "back": "Retour"
    },
    "header": {
      "title": "Contactez-nous",
      "subtitle": "Une question sur vos reptiles ? Notre équipe est là pour vous."
    },
    "info": {
      "title": "Coordonnées",
      "email_label": "Email",
      "office_label": "Bureau"
    },
    "form": {
      "title": "Envoyez-nous un message",
      "name_label": "Nom complet",
      "name_placeholder": "Jean Dupont",
      "email_label": "Email",
      "message_label": "Message",
      "message_placeholder": "Comment puis-je...",
      "submit_button": "Envoyer le message",
      "sending": "Envoi en cours...",
      "success_title": "Message envoyé !",
      "success_message": "Nous avons bien reçu votre demande et reviendrons vers vous sous 24h.",
      "send_another": "Envoyer un autre message"
    }
  },
  "family": {
    "manage_members": "Gérer les membres",
    "manage_members_title": "Membres de la famille",
    "kick_member": "Exclure le membre",
    "transfer_ownership": "Transférer la propriété",
    "confirm_kick": "Voulez-vous vraiment exclure ce membre de la famille ?",
    "confirm_transfer": "Attention : En transférant la propriété, vous deviendrez un simple membre et perdrez vos droits d'administration. Continuer ?",
    "transfer_success": "Propriété transférée avec succès.",
    "members_count": "membre(s)",
    "leave_btn": "Quitter la famille",
    "leave_success": "Vous avez quitté la famille.",
    "leave_error": "Erreur lors du départ.",
    "leave_confirm_title": "Quitter la famille ?",
    "leave_confirm_desc": "Êtes-vous sûr de vouloir quitter \"{{name}}\" ? Vous n'aurez plus accès aux données.",
    "confirm_leave": "Quitter",
    "delete_btn": "Supprimer la famille",
    "delete_confirm_title": "Supprimer la famille ?",
    "delete_warning_1": "Cette action est irréversible.",
    "delete_warning_2": "Tous les membres seront exclus. Assurez-vous d'avoir sauvegardé les données importantes.",
    "type_to_confirm": "Tapez \"{{name}}\" pour confirmer :",
    "single_family_policy_title": "Une seule famille à la fois",
    "single_family_policy_desc": "Vous faites déjà partie d'une famille. Pour en rejoindre ou en créer une autre, vous devez d'abord quitter ou supprimer la famille actuelle.",
    "delete_error": "Erreur lors de la suppression de la famille.",
    "my_families": "Mes Familles",
    "no_family": "Vous ne faites partie d'aucune famille pour le moment.",
    "create_prompt": "Lancez votre élevage maintenant !",
    "join_title": "Rejoindre une famille",
    "join_placeholder": "Entrez le code d'invitation...",
    "join_btn": "Rejoindre",
    "join_help": "Demandez le code d'invitation au propriétaire de l'élevage.",
    "code_label": "Code :",
    "join_success": "Famille rejointe avec succès !",
    "join_error": "Code invalide ou erreur.",
    "create_error": "Erreur lors de la création.",
    "cannot_join_title": "Action impossible",
    "cannot_join_owner": "En tant que propriétaire d'un élevage (famille), vous ne pouvez pas rejoindre d'autres familles pour le moment.",
    "role": {
      "OWNER": "Propriétaire",
      "ADMIN": "Admin",
      "MEMBER": "Membre"
    },
    "create_modal": {
      "title": "Créer une famille",
      "name_label": "Nom de votre élevage / famille",
      "name_placeholder": "ex: Reptiles Passion...",
      "description": "Cela créera un espace partagé où vous pourrez inviter d'autres membres.",
      "submit": "Créer l'espace"
    }
  },
  "dashboard": {
    "community": "Communauté",
    "switch_space": "Changer d'espace",
    "mySpace": "Mon Espace",
    "create_family": "Créer une famille",
    "familySnakes": "Reptiles de la famille",
    "noEventsSubtitle": "Ajoutez un événement pour suivre l'historique.",
    "lockedSnake": "Reptile verrouillé",
    "upgradeToAccess": "Passez PRO pour y accéder",
    "addEvent": "Ajouter un Événement",
    "addFirstSnake": "Commencez par ajouter votre premier reptile à la collection.",
    "addFirstSnakeBtn": "Ajouter Votre Premier Reptile",
    "addSnake": "Ajouter un Reptile",
    "dropHere": "Déposer ici pour placer en dernier",
    "errorLoadingEvents": "Erreur lors du chargement des événements",
    "errorLoadingSnakes": "Erreur lors du chargement des reptiles",
    "filter": "Filtrer",
    "filters": {
      "all": "Tous",
      "female": "Femelles",
      "male": "Mâles",
      "needsFeeding": "À nourrir",
      "recentChanges": "Changements récents",
      "unknown": "Sexe inconnu"
    },
    "loadingEvents": "Chargement des événements...",
    "loadingSnakes": "Chargement des reptiles...",
    "mySnakes": "Mes Reptiles",
    "noEvents": "Aucun événement récent",
    "noSnakes": "Aucun reptile trouvé",
    "noSnakesSubtitle": "Aucun reptile ne correspond à votre recherche.",
    "recentEvents": "Événements Récents",
    "search": "Rechercher des reptiles...",
    "settings": "Paramètres",
    "signOut": "Se Déconnecter",
    "stats": {
      "allTime": "Depuis toujours",
      "lastWeek": "Les 7 derniers jours",
      "recentFeedings": "Repas récents",
      "recentSheds": "Mues récentes",
      "thisMonth": "Ce mois-ci",
      "thisWeek": "Cette semaine",
      "totalEvents": "Nombre d'événements",
      "totalSnakes": "Nombre de reptiles"
    },
    "subtitle": "Gérez votre collection de reptiles",
    "title": "Tableau de Bord",
    "viewAllEvents": "Voir tous les événements"
  },
  "date": {
    "cardStyle": "medium"
  },
  "eggTracking": {
    "a11y": {
      "deleteClutch": "Supprimer la ponte",
      "editClutch": "Modifier la ponte"
    },
    "actions": {
      "newClutch": "Nouvelle Ponte"
    },
    "clutchLabel": "Ponte",
    "createFirst": "Enregistrer votre première ponte",
    "daysRemaining": "{{count}} jours restants",
    "delete": {
      "subtitle": "Cette action supprimera également tous les œufs associés.",
      "title": "Supprimer cette ponte ?"
    },
    "eggModal": {
      "status": "Statut",
      "title": "Modifier l'œuf",
      "weight": "Poids (g)",
      "weightPlaceholder": "ex: 62.5"
    },
    "empty": "Aucune ponte enregistrée",
    "form": {
      "eggCount": "Nombre d'œufs",
      "error": {
        "fertileExceedsTotal": "Le nombre d'œufs fertiles ne peut pas dépasser le total d'œufs."
      },
      "estHatchDate": "Date d'éclosion estimée",
      "expectedHatchDate": "Date d'éclosion estimée",
      "fertileCount": "Fertiles",
      "humidityPct": "Humidité (%)",
      "laidDate": "Date de ponte",
      "noPairings": "Aucun accouplement trouvé. Crée d'abord un accouplement dans la section Accouplement.",
      "noPairingsHint": "Aucun accouplement trouvé. Crée d'abord un accouplement dans la section Accouplement.",
      "notes": "Notes",
      "notesPlaceholder": "Observations (poids moyen, bougies, pertes, etc.)",
      "pairing": "Couple (accouplement)",
      "selectPairing": "Sélectionner un accouplement…",
      "tempC": "Température (°C)"
    },
    "hatchingSoon": "Éclosion imminente !",
    "humidity": "Humidité",
    "individualEggs": "Œufs individuels",
    "laidOn": "Ponte le {{date}}",
    "legend": {
      "damaged": "Endommagé",
      "hatched": "Éclos",
      "incubating": "En incubation",
      "infertile": "Infertile",
      "title": "Légende"
    },
    "modal": {
      "createTitle": "Nouvelle ponte",
      "editTitle": "Modifier la ponte"
    },
    "stat": {
      "totalEggs": "Total œufs"
    },
    "stats": {
      "damagedPlural": "Endommagés",
      "eggs": "Œufs",
      "hatched": "Éclos",
      "incubating": "Incubation",
      "infertilePlural": "Infertiles"
    },
    "status": {
      "damaged": "Endommagé",
      "hatched": "Éclos",
      "incubating": "En incubation",
      "infertile": "Infertile"
    },
    "subtitle": "Surveillez l'incubation de vos pontes",
    "temperature": "Température",
    "title": "Tracking des Œufs"
  },
  "androidInstallPrompt": {
    "title": "Installer ReptiNode",
    "subtitle": "Ajoutez l'application à votre écran d'accueil pour un accès simplifié.",
    "button": "Installer maintenant"
  },
  "iosInstallPrompt": {
    "title": "Installer ReptiNode",
    "subtitle": "L'app pour vos reptiles, sur votre iPhone.",
    "step1Prefix": "1. Appuyez sur le bouton ",
    "step1Highlight": "Partager",
    "step1Suffix": " en bas de votre écran Safari.",
    "step2Prefix": "2. Faites défiler le menu et choisissez ",
    "step2Highlight": "Sur l'écran d'accueil",
    "step3Prefix": "3. Cliquez enfin sur ",
    "step3Highlight": "Ajouter",
    "step3Suffix": " en haut à droite pour terminer."
  },
  "families": {
    "family": "Famille"
  },
  "events": {
    "load_error": "Erreur lors du chargement des événements.",
    "load_error_help": "Vérifiez le contexte sélectionné puis réessayez.",
    "refused_meal": "L'animal a refusé de manger",
    "refused_badge": "REFUS",
    "disable_button_title": "Commencez par ajouter un reptile",
    "page_title": "Tous les événements",
    "search_placeholder": "Rechercher (nom, note, type)...",
    "history_title": "Historique des événements",
    "delete_confirm": "Êtes-vous sûr de vouloir supprimer cet événement ?",
    "snake_unknown": "Inconnu",
    "addError": "Erreur lors de l'ajout de l'événement.",
    "filters": {
      "all": "Tous",
      "feeding": "Repas",
      "shed": "Mue",
      "vet_visit": "Vétérinaire",
      "handling": "Manipulation",
      "other": "Autre"
    },
    "empty": {
      "title": "Aucun événement trouvé",
      "no_match": "Aucun événement ne correspond à votre recherche.",
      "no_history": "Aucun événement enregistré pour le moment."
    },
    "actions": {
      "ariaLabel": "Actions de l'événement",
      "menuLabel": "Menu actions événement"
    },
    "add": "Ajouter l'Événement",
    "addEvent": "Ajouter un Événement",
    "addPhotos": "Ajouter des Photos (max 5)",
    "addTitle": "Ajouter un événement",
    "all": "Tous",
    "allEvents": "Tous les Événements",
    "cancel": "Annuler",
    "confirmDelete": "Supprimer cet événement ? Cette action est définitive.",
    "date": "Date",
    "delete": "Supprimer cet événement ? Cette action est définitive.",
    "editTitle": "Modifier l'événement",
    "eventHistory": "Historique des Événements",
    "eventType": "Type d'Événement",
    "feeding": "Repas",
    "fields": {
      "snake": "Reptile",
      "date": "Date",
      "notes": "Notes",
      "type": "Type",
      "weight": "Poids (g)",
      "length": "Longueur (mm)"
    },
    "handling": "Manipulation",
    "noEventsFound": "Aucun événement trouvé",
    "noEventsMatch": "Aucun événement ne correspond à votre recherche.",
    "noEventsYet": "Aucun événement enregistré pour le moment.",
    "notes": "Notes",
    "notesPlaceholder": "Détails supplémentaires sur cet événement...",
    "other": "Autre",
    "photos": "Photos",
    "placeholders": {
      "notes": "Notes libres…",
      "weight": "ex : 120",
      "length": "ex : 850"
    },
    "processing": "Traitement...",
    "searchPlaceholder": "Rechercher des événements...",
    "selectSnake": "Sélectionner un reptile",
    "shed": "Mue",
    "add_error": "Erreur lors de l'ajout",
    "gallery_upload_note": "Ajout galerie",
    "types": {
      "gallery": "Galerie",
      "weight": "Pesée",
      "length": "Mesure",
      "note": "Note",
      "cleaning": "Nettoyage",
      "feeding": "Nourrissage",
      "handling": "Manipulation",
      "shed": "Mue",
      "vet_visit": "Visite véto",
      "other": "Autre"
    },
    "uploadError": {
      "failed": "Échec du téléchargement",
      "incomplete": "Certaines photos n'ont pas pu être téléversées. Réessaie.",
      "size": "{{fileName}} est trop lourd. Taille maximale : {{maxSizeMB}} Mo."
    },
    "modal": {
      "add": {
        "subtitleDefault": "Ajoute un événement simple à l'historique.",
        "subtitleFeeding": "Saisie nourrissage simplifiée, pensée pour l'usage quotidien."
      },
      "edit": {
        "saveFailed": "Échec de l'enregistrement."
      },
      "measurements": {
        "title": "Mesures du reptile",
        "description": "Ces données alimentent automatiquement les statistiques de santé, poids et croissance.",
        "length": "Longueur (mm)",
        "lengthPlaceholder": "Ex : 850"
      },
      "feeding": {
        "selectPreyTypeFirst": "Sélectionnez d'abord un type de proie",
        "title": "Nourrissage",
        "description": "Statut du repas et informations essentielles sur la proie.",
        "applyLastFeeding": "Reprendre le dernier repas",
        "loadingLastFeeding": "Chargement du dernier nourrissage...",
        "lastFeedingRecorded": "Dernier nourrissage enregistré",
        "noStructuredPrey": "Aucune proie structurée",
        "theoreticalInterval": "Fréquence théorique : {{days}} jours",
        "noPreviousFeeding": "Aucun nourrissage précédent trouvé pour ce reptile.",
        "daysAgo_one": "il y a {{count}} jour",
        "daysAgo_other": "il y a {{count}} jours",
        "status": "Statut du repas",
        "refusalReason": "Motif du refus",
        "refusalReasonPlaceholder": "Ex. en mue, stress, pas intéressé",
        "preyType": "Type de proie",
        "unspecified": "Non précisé",
        "preySize": "Taille / gabarit",
        "preyCount": "Quantité",
        "preyWeight": "Poids proie (g)",
        "feedingMethod": "Méthode (optionnel)",
        "feedingMethodPlaceholder": "Pince, posé...",
        "deduct_from_stock": "Décompter ce repas de mon stock de proies",
        "animalWeight": "Poids de l'animal (g)",
        "animalWeightPlaceholder": "Ex. 540",
        "statusOptions": {
          "accepted": "Repas accepté",
          "refused": "Refus",
          "partial": "Partiel",
          "regurgitated": "Régurgité",
          "assisted": "Assisté"
        },
        "preyTypes": {
          "mouse": "Souris",
          "rat": "Rat",
          "asf": "ASF",
          "chick": "Poussin",
          "insect": "Insecte",
          "fish": "Poisson",
          "other": "Autre"
        },
        "preySizes": {
          "weaned": "Sevré",
          "pup": "Ratonneau",
          "day_old": "1 jour",
          "micro": "Micro",
          "juvenile": "Juvénile",
          "fry": "Alevin",
          "small": "Petit",
          "medium": "Moyen",
          "large": "Grand",
          "pinky": "Pinky",
          "fuzzy": "Fuzzy",
          "hopper": "Hopper",
          "subadult": "Subadulte",
          "adult": "Adulte",
          "other": "Autre"
        }
      }
    },
    "uploadSelected": "Télécharger les éléments sélectionnés",
    "vetVisit": "Visite Vétérinaire",
    "weight": "Poids (grammes)",
    "weightOptional": "Optionnel - poids au moment de l'événement",
    "weightWithUnit": "Poids : {{weight}}g",
    "length": "Longueur",
    "lengthWithUnit": "Longueur : {{length}}mm"
  },
  "feedback": {
    "header": {
      "title": "Votre avis compte",
      "subtitle": "Aidez-nous à construire la meilleure plateforme pour vos reptiles."
    },
    "rating_label": "Notez votre expérience",
    "category_label": "Sujet",
    "message_label": "Votre message",
    "message_placeholder": "Dites-nous ce que vous aimez ou ce que nous pourrions améliorer...",
    "submit_button": "Envoyer mon avis",
    "categories": {
      "general": "Avis général",
      "feature": "Idée / Fonctionnalité",
      "bug": "Problème / Bug",
      "ui": "Design / Ergonomie"
    },
    "rating_labels": {
      "1": "Pas satisfait 😞",
      "2": "Peut mieux faire 😕",
      "3": "Bien 🙂",
      "4": "Très bien ! 😊",
      "5": "Excellent ! 🎉"
    },
    "success": {
      "title": "Merci beaucoup !",
      "message": "Votre retour est précieux et nous aide à améliorer ReptiNode chaque jour.",
      "button": "Retour au tableau de bord"
    },
    "errors": {
      "rating_required": "Veuillez sélectionner une note."
    },
    "footer_thanks": "Merci de votre contribution."
  },
  "features": {
    "analytics": {
      "description": "Aperçus visuels des modèles de croissance, du succès alimentaire et des tendances de santé.",
      "title": "Analyses et Graphiques"
    },
    "detailedProfiles": {
      "description": "Profils complets de reptiles avec photos, informations sur les espèces, génétique et dossiers de santé.",
      "title": "Profils Détaillés"
    },
    "eventTracking": {
      "description": "Surveillez les horaires d'alimentation, les cycles de mue et les rendez-vous vétérinaires.",
      "title": "Suivi des Événements"
    },
    "exportReports": {
      "description": "Générez des rapports PDF et Excel pour les vétérinaires ou les dossiers d'élevage.",
      "title": "Rapports d'Export"
    },
    "multiUser": {
      "description": "Partagez l'accès avec des partenaires, vétérinaires ou collaborateurs d'élevage.",
      "title": "Accès Multi-Utilisateur"
    },
    "photoManagement": {
      "description": "Organisez et suivez les photos avec horodatage et galeries automatiques.",
      "title": "Gestion des Photos"
    },
    "subtitle": "Outils complets conçus spécifiquement pour les passionnés de reptiles et les éleveurs professionnels.",
    "title": "Tout ce dont vous avez besoin pour gérer votre collection"
  },
  "footer": {
    "about": "À propos",
    "company": "Entreprise",
    "description": "Gestion professionnelle de reptiles pour passionnés et éleveurs.",
    "privacy": "Confidentialité",
    "product": "Produit",
    "rights": "Tous droits réservés.",
    "support": "Support",
    "terms": "Conditions"
  },
  "genetics": {
    "calculate": "Calculer les Probabilités",
    "emptyAfterSelect": "Clique sur “Calculer” pour voir les prédictions",
    "femaleParent": "Parent Femelle",
    "loadingRegistry": "Chargement du registre génétique…",
    "maleParent": "Parent Mâle",
    "morphLabel": "Morph",
    "normal": "Normal",
    "results": {
      "commons": "Facteurs communs (100 %) :",
      "genes": "Gènes",
      "het": "Het/Porteur",
      "methodNote": "Données calculées par locus (dominant, récessif, incomplete), avec agrégation, contrôle des complexes alléliques, noms inter-alléliques/combos nommés et “supers” personnalisés définis dans le registre JSON.",
      "probability": "probabilité",
      "title": "Résultats génétiques prédits",
      "visual": "Visuel"
    },
    "selectFemale": "Sélectionner une femelle…",
    "selectMale": "Sélectionner un mâle…",
    "subtitle": "Croisements mendéliens par locus, contrôle des complexes alléliques, phénotypes inter-alléliques, supers & combos nommés, support multi-espèces via registres JSON.",
    "title": "Calculateur de Génétique",
    "violations": {
      "hint": "Corrige les génétiques du parent : un parent ne peut pas porter plusieurs allèles d'un même complexe.",
      "title": "Conflit(s) d'allèles dans le même complexe"
    },
    "warn": {
      "unsupportedSpecies": "Le calculateur génétique n'est pas encore disponible pour {{species}}.",
      "allelicConflictMessage": "Les deux parents doivent être de la même espèce pour un calcul fiable.",
      "registryFallback": "Impossible de charger les JSON externes. Utilisation d'un registre minimal local (fallback)."
    }
  },
  "hero": {
    "description": "Suivez, gérez et surveillez votre collection de reptiles avec des dossiers de santé complets, des horaires d'alimentation et des analyses détaillées.",
    "learnMore": "En Savoir Plus",
    "subtitle": "Simplifiée",
    "title": "Gestion Professionnelle de Reptiles",
    "tryFree": "Démarrer maintenant"
  },
  "html2canvas": "html2canvas",
  "jspdf": "jsPDF",
  "landing": {
    "roles": {
      "exoticVeterinarian": "Vétérinaire NAC",
      "professionalBreeder": "Éleveur professionnel",
      "reptileEnthusiast": "Passionné de reptiles"
    }
  },
  "language": {
    "changed": "Langue mise à jour",
    "current": "Actuelle : {{lang}}",
    "names": {
      "en": "Anglais",
      "es": "Espagnol",
      "fr": "Français"
    },
    "selector": {
      "label": "Langue"
    }
  },
  "nav": {
    "backToHome": "Retour à l'accueil",
    "contact": "Contact",
    "features": "Fonctionnalités",
    "pricing": "Tarifs",
    "signIn": "Se connecter"
  },
  "pairing": {
    "actions": {
      "createFirst": "Créer votre premier accouplement",
      "new": "Nouvel accouplement",
      "update": "Mettre à jour"
    },
    "alert": {
      "sameSnake": "Le mâle et la femelle ne peuvent pas être le même reptile."
    },
    "delete": {
      "confirm": "Cette action est définitive. Voulez-vous vraiment supprimer cet accouplement ?",
      "title": "Supprimer cet accouplement ?"
    },
    "empty": "Aucun accouplement enregistré",
    "fields": {
      "date": "Date d'accouplement",
      "female": "Femelle",
      "male": "Mâle",
      "notes": "Notes",
      "status": "Statut"
    },
    "modal": {
      "editTitle": "Modifier l'accouplement'",
      "newTitle": "Nouvel accouplement"
    },
    "placeholders": {
      "notes": "Observations, comportements, etc…",
      "selectFemale": "Sélectionner une femelle…",
      "selectMale": "Sélectionner un mâle…"
    },
    "status": {
      "active": "Actif",
      "failed": "Échec",
      "planned": "Planifié",
      "separated": "Séparés",
      "successful": "Réussi"
    },
    "subtitle": "Suivez vos accouplements et leur progrès",
    "title": "Gestion des accouplements"
  },
  "pedigree": {
    "actions": {
      "addParents": "Ajouter des parents",
      "cancel": "Annuler",
      "save": "Enregistrer"
    },
    "depthLabel": "Profondeur",
    "empty": "Aucune donnée généalogique disponible",
    "export": {
      "exporting": "Export...",
      "tooltip": "Exporter l'arbre généalogique en PDF"
    },
    "generation": "Génération",
    "legend": {
      "female": "Femelle",
      "male": "Mâle",
      "title": "Légende",
      "unknown": "Inconnu"
    },
    "parents": {
      "cycleDetected": "Impossible d'enregistrer : ce choix créerait un cycle (l'enfant deviendrait l'ancêtre du parent).",
      "cycleWarning": "Choix invalide : cela créerait un cycle généalogique.",
      "fatherLabel": "Père (mâle)",
      "motherLabel": "Mère (femelle)",
      "noneFemale": "— Aucune / Inconnue —",
      "noneMale": "— Aucun / Inconnu —",
      "title": "Associer des parents"
    },
    "pdf": {
      "field": {
        "exportedOn": "Exporté le:",
        "generationsShown": "Générations affichées:",
        "individual": "Individu:",
        "morph": "Morphe:",
        "sex": "Sexe:",
        "species": "Espèce:"
      },
      "infoSection": "INFORMATIONS",
      "title": "ARBRE GÉNÉALOGIQUE"
    },
    "rel": {
      "father": "Père",
      "greatGrandparent": "Arrière-grand-parent ({{side}})",
      "individual": "Individu",
      "maternalGrandfather": "Grand-père maternel",
      "maternalGrandmother": "Grand-mère maternelle",
      "mother": "Mère",
      "nthGreatGrandparent": "{{n}}× arrière-grand-parent ({{side}})",
      "paternalGrandfather": "Grand-père paternel",
      "paternalGrandmother": "Grand-mère paternelle",
      "side": {
        "maternal": "maternel",
        "paternal": "paternel"
      }
    },
    "selectLabel": "Sélectionner :",
    "subtitle": "Visualisez les lignées de vos reptiles",
    "table": {
      "birthYear": "Naissance",
      "generation": "Génération",
      "morph": "Morph",
      "name": "Nom",
      "relation": "Relation",
      "sex": "Sexe"
    },
    "title": "Arbre généalogique",
    "view": {
      "compact": "Compact",
      "grid": "Grille",
      "horizontal": "Horizontal",
      "table": "Table",
      "vertical": "Vertical"
    },
    "viewTitle": {
      "compact": "Compact",
      "grid": "Grille",
      "horizontal": "Horizontal",
      "table": "Table",
      "vertical": "Vertical"
    }
  },
  "plans": {
    "basic": "Basic",
    "pro": "Pro"
  },
  "pricing": {
    "monthly": "Mensuel",
    "professional": {
      "cta": "S'abonner Maintenant",
      "duration": " / mois",
      "features": {
        "birthCertificates": "Certificats (naissance, ID, transfert…) au format PDF",
        "eggTracking": "Suivi des œufs & de l'incubation (température, hygrométrie, échéances)",
        "genetics": "Calculateur génétique & prédictions de morphs",
        "pairing": "Gestion des accouplements & notes",
        "pedigree": "Arbre généalogique & export PDF du pedigree",
        "snakes": "Reptiles & pontes illimités"
      },
      "popular": "Le Plus Populaire",
      "price": "9,99 €",
      "title": "Professionnel",
      "yearlyDuration": " / an",
      "yearlyPrice": "99 €",
      "yearlySavings": "2 mois offerts vs mensuel"
    },
    "save2Months": "2 mois offerts",
    "starter": {
      "cta": "Démarrer maintenant",
      "duration": "",
      "features": {
        "photos": "Stockage de photos",
        "snakes": "Jusqu'à 30 reptiles",
        "tracking": "Suivi d'événements de base"
      },
      "price": "Gratuit",
      "title": "Débutant"
    },
    "subtitle": "Choisissez le plan qui correspond à la taille de votre collection",
    "title": "Tarification Simple et Transparente",
    "yearly": "Annuel"
  },
  "script": "script",
  "settings": {
    "title": "Paramètres",
    "tabs": {
      "profile": "Profil",
      "family": "Famille & Élevage",
      "notifications": "Notifications",
      "language": "Langue",
      "subscription": "Abonnement",
      "security": "Sécurité"
    },
    "errors": {
      "push_permission_denied": "Permission de notifications refusée",
      "save_error": "Erreur lors de l'enregistrement",
      "delete_error": "Erreur lors de la suppression du compte",
      "portal_error": "Impossible d'accéder au portail de facturation."
    },
    "billing": {
      "checking_title": "Vérification…",
      "checking_desc": "Nous confirmons votre paiement sécurisé.",
      "success_title": "Abonnement activé !",
      "success_desc": "Votre compte a été mis à niveau. Merci de votre confiance.",
      "cancel_title": "Paiement annulé",
      "cancel_desc": "Aucun débit n'a été effectué.",
      "failed_title": "Paiement échoué",
      "failed_desc": "Une erreur est survenue. Veuillez réessayer."
    },
    "profile": {
      "avatar_alt": "Avatar",
      "image_title": "Photo de profil",
      "image_desc": "Cette photo sera affichée sur votre profil public et dans l'application.",
      "change_photo": "Changer la photo",
      "name_label": "Nom d'affichage",
      "name_placeholder": "Votre nom",
      "email_label": "Adresse Email",
      "email_placeholder": "votre@email.com"
    },
    "notifications": {
      "time_label": "Heure des rappels",
      "time_desc": "À quelle heure souhaitez-vous recevoir vos notifications quotidiennes ?",
      "feeding_reminders": "Rappels de nourrissage",
      "receive_alerts": "Recevoir des alertes pour {{type}}",
      "types": {
        "feedingReminders": "Rappels de nourrissage",
        "shedReminders": "Suivi des mues",
        "vetReminders": "Rendez-vous vétérinaire",
        "healthAlerts": "Alertes santé",
        "emailNotifications": "Emails récapitulatifs"
      }
    },
    "language": {
      "language_selector": "Langue :",
      "select_label": "Langue de l'interface"
    },
    "subscription": {
      "current_plan_label": "Votre plan actuel",
      "plan_free": "Gratuit",
      "plan_pro": "Pro",
      "plan_pro_monthly": "Pro (Mensuel)",
      "plan_pro_yearly": "Pro (Annuel)",
      "pro_badge": "Membre Pro",
      "free_badge": "Membre Gratuit",
      "upsell_text": "Passez à la version Pro pour débloquer toutes les fonctionnalités illimitées.",
      "upgrade_button": "Passer PRO",
      "manage_button": "Gérer l'abonnement",
      "manage_desc": "Mettre à jour les informations de paiement, annuler ou modifier le plan."
    },
    "security": {
      "password_title": "Changer le mot de passe",
      "password_desc": "Mettez à jour votre mot de passe régulièrement pour sécuriser votre compte.",
      "password_button": "Modifier",
      "delete_title": "Supprimer le compte",
      "delete_warning": "Cette action est irréversible. Toutes vos données (reptiles, suivis, photos) seront supprimées définitivement.",
      "delete_confirm": "Êtes-vous sûr de vouloir supprimer votre compte définitivement ?",
      "delete_button": "Supprimer mon compte",
      "deleting": "Suppression..."
    },
    "changePassword": "Changer le mot de passe",
    "currentPassword": "Mot de passe actuel",
    "newPassword": "Nouveau mot de passe",
    "confirmNewPassword": "Confirmer le nouveau mot de passe",
    "updatePasswordButton": "Mettre à jour le mot de passe",
    "passwordMismatch": "Les mots de passe ne correspondent pas.",
    "passwordTooShort": "Le mot de passe doit contenir au moins 8 caractères.",
    "passwordUpdateSuccess": "Mot de passe mis à jour avec succès.",
    "passwordUpdateError": "Échec de la mise à jour. Veuillez vérifier votre mot de passe actuel."
  },
  "sex": {
    "female": "Femelle",
    "male": "Mâle",
    "unknown": "Inconnu"
  },
  "snake": {
    "transfer": {
      "button": "Transférer",
      "title": "Transférer {{name}}",
      "subtitle": "Déplacez ce reptile vers une famille ou donnez-le à un autre utilisateur.",
      "to_family": "Transférer à une famille",
      "to_family_help": "Le reptile disparaîtra de votre espace personnel et sera visible dans l’espace famille.",
      "choose_family": "Choisir une famille...",
      "confirm_family": "Transférer à la famille",
      "already_in_family": "Ce reptile est déjà rattaché à cette famille.",
      "no_families": "Vous n’avez aucune famille disponible pour ce transfert.",
      "confirm_personal": "Remettre dans mon espace personnel",
      "personal_success": "Le reptile a été remis dans votre espace personnel.",
      "family_success": "Le reptile a été transféré à la famille.",
      "to_user": "Donner à un utilisateur",
      "to_user_help": "Le nouvel utilisateur deviendra propriétaire du reptile. Vous perdrez l’accès à sa fiche.",
      "user_placeholder": "Email ou pseudo de l’utilisateur...",
      "confirm_user_button": "Donner le reptile",
      "confirm_user": "Ce reptile sera donné à un autre utilisateur. Vous n’y aurez plus accès. Continuer ?",
      "user_warning": "Attention : cette action retire le reptile de votre compte.",
      "user_success": "Le reptile a été transféré avec succès.",
      "in_progress": "Transfert en cours...",
      "error": "Erreur lors du transfert."
    },
    "upload_first": "Importer une photo",
    "photos": "Photos",
    "photo_gallery": "Galerie Photo",
    "add_photo": "Ajouter",
    "no_photos": "Aucune photo",
    "no_photos_desc": "Ajoutez des événements avec photos pour remplir la galerie.",
    "profile_pic": "Photo de profil",
    "locked_title": "Profil Verrouillé",
    "locked_desc": "Ce reptile dépasse la limite de votre plan gratuit. Les derniers reptiles ajoutés sont verrouillés. Passez PRO pour y accéder.",
    "addTitle": "Ajouter un reptile",
    "edit": "Modifier",
    "editTitle": "Modifier le profil",
    "edit_title": "Modifier le profil",
    "deleteTitle": "Supprimer {{name}}",
    "not_found": "Reptile introuvable.",
    "no_photo": "Aucune photo disponible",
    "noPhoto": "Pas de photo disponible",
    "qr_code": "QR Code",
    "export_pdf": "Export PDF",
    "exportPDF": "Exporter au format PDF",
    "maintenance_title": "Maintenance & Rappels",
    "feeding_interval_label": "Fréquence des repas",
    "feedingIntervalTitle": "Intervalle entre les repas",
    "feeding_interval_placeholder": "Ex: 7",
    "feeding_interval_help": "Jours entre chaque repas. Laissez vide pour désactiver.",
    "feeding_interval_title": "Fréquence de Nourrissage",
    "avg_feeding_interval_label": "Intervalle moyen :",
    "avgFeedingIntervalLabel": "Intervalle moyen :",
    "avgShedCycleLabel": "Cycle moyen :",
    "feedingSchedule": "Horaire d'Alimentation",
    "status": {
      "late_feeding": "Retard Nourrissage",
      "next_feeding": "Prochain Repas",
      "feed_now": "Nourrir",
      "feed_me": "À nourrir",
      "next_shed_prediction": "Prédiction Mue",
      "shed_late": "Retard probable (~{{diff}}j)",
      "shed_in": "Dans environ {{diff}} jours",
      "next_vet": "Rendez-vous Vétérinaire",
      "in_days": "Dans {{count}} jours",
      "days_late": "{{count}} jours de retard"
    },
    "overview": "Aperçu",
    "events": "Événements",
    "analytics": "Analyses",
    "recent_activity": "Activité Récente",
    "recentActivity": "Activité récente",
    "event_history": "Historique Complet",
    "eventHistory": "Historique des événements",
    "health_indicators": "Indicateurs de Santé",
    "healthIndicators": "Indicateurs de santé",
    "weight_trend": "Courbe de Poids",
    "weightTrend": "Tendance du Poids",
    "length_evolution": "Croissance (Taille)",
    "lengthEvolution": "Évolution de la longueur",
    "weight_and_feeding": "Poids & Repas",
    "weightAndFeeding": "Poids et alimentation",
    "growthRate": "Taux de Croissance",
    "growthTitle": "Croissance",
    "growthTrend": "Tendance de croissance : Saine",
    "last_feeding_label": "Dernier repas :",
    "lastFeeding": "Dernier repas :",
    "lastFeedingLabel": "Dernière alimentation :",
    "last_shed_label": "Dernière mue :",
    "lastShedLabel": "Dernière mue",
    "nextShedEstimate": "Prochaine mue estimée dans {{days}} jours",
    "daysAfterPrevious": "{{days}} jours après la précédente",
    "name": "Nom",
    "species": "Espèce",
    "morph": "Morphe",
    "age": "Âge",
    "years": "ans",
    "yearsOld": "{{count}} ans",
    "yearsOld_one": "{{count}} an",
    "yearsOld_other": "{{count}} ans",
    "weight": "Poids",
    "currentWeight": "Poids actuel :",
    "initialWeight": "Poids initial :",
    "weightGain": "Gain de poids : +30g ce mois-ci",
    "totalGain": "Gain total :",
    "length": "Longueur",
    "sex": {
      "male": "Mâle",
      "female": "Femelle",
      "unknown": "Inconnu"
    },
    "sexe": "Sexe",
    "birth_date": "Date de naissance",
    "birthDate": "Date de naissance",
    "notes": "Notes",
    "days": "jours",
    "read_only_badge": "Lecture Seule",
    "readOnlyBadge": "Lecture seule",
    "read_only_tip": "Ce reptile est archivé ou n'est pas modifiable.",
    "read_only_cannot_modify": "Impossible de modifier un reptile en lecture seule.",
    "archived": "Ce reptile est archivé.",
    "readonly_until": "Lecture seule jusqu'au {{date}}",
    "readonlyUntil": "En lecture seule jusqu'au {{date}}.",
    "restore": "Restaurer",
    "archive_30d_title": "Archiver (30 jours)",
    "archive30dTitle": "Archiver 30 jours (recommandé)",
    "archive_readonly_info": "Passe en lecture seule. Restauration possible.",
    "archiveReadOnlyInfo": "Le reptile reste visible en lecture seule. Vous pouvez le restaurer à tout moment.",
    "permanent_delete_title": "Suppression définitive",
    "permanentDeleteTitle": "Supprimer définitivement",
    "permanent_delete_warning": "Irréversible. Toutes les données seront perdues.",
    "permanentDeleteWarning": "Action irréversible : toutes les données et tous les événements associés seront supprimés.",
    "delete_confirm": "Êtes-vous sûr de vouloir supprimer définitivement ce reptile ?",
    "deleteConfirm": "Supprimer définitivement ce reptile et TOUT son historique ?",
    "delete_error": "Erreur lors de la suppression",
    "deleteError": "Erreur lors de la suppression du reptile.",
    "feedings": "Repas",
    "totalFeedingsLabel": "Total des repas :",
    "sheds": "Mues",
    "totalShedsLabel": "Total des mues :",
    "sheddingHistoryTitle": "Historique de mue",
    "vet_visits": "Véto",
    "vetVisits": "Visites Vétérinaires",
    "totalVetVisitsLabel": "Visites chez le vétérinaire :",
    "meals": "Repas",
    "totalEventsLabel": "Total des événements :",
    "health": {
      "feeding": "Alimentation",
      "sheds": "Mue",
      "growth": "Croissance",
      "overall": "Global",
      "help_feeding": "Basé sur la régularité des repas par rapport à votre objectif.",
      "help_sheds": "Basé sur la régularité des cycles de mue.",
      "help_growth": "Évolution du poids depuis la naissance/acquisition.",
      "help_overall": "Moyenne pondérée des indicateurs vitaux.",
      "help": {
        "feeding": "Basé sur l'intervalle moyen entre les repas : 7 jours équivaut à 100 %. Des intervalles plus longs réduisent le score.",
        "growth": "Changement en pourcentage entre le premier et le dernier poids.",
        "overall": "Moyenne simple des trois scores.",
        "sheds": "100 % si l'intervalle moyen de mue est inférieur à 60 jours. Au-delà, le score diminue progressivement."
      }
    },
    "pdf": {
      "kpis": "Indicateurs Clés",
      "details": "Détails Techniques"
    },
    "metric": "Métrique",
    "value": "Valeur",
    "field": "Champ",
    "fields": {
      "birthDate": "Date de naissance",
      "imageUrl": "URL de l'image",
      "length": "Longueur (cm)",
      "morph": "Morph",
      "name": "Nom",
      "sex": "Sexe",
      "species": "Espèce",
      "weight": "Poids (g)"
    },
    "placeholders": {
      "imageUrl": "https://…",
      "length": "ex : 120",
      "morph": "ex : Pastel",
      "name": "ex : Luna",
      "species": "ex : Python regius",
      "weight": "ex : 1200"
    },
    "profile": "Profil",
    "progression": "Progrès :",
    "editPhoto": "Modifier",
    "statsTitle": "Statistiques",
    "tour": {
      "health_title": "Indicateurs de santé",
      "healthTitle": "Indicateurs de santé",
      "health_text": "Résumé rapide de la régularité de l'alimentation, des mues et de la tendance de poids.",
      "healthText": "Résumé rapide de la régularité de l'alimentation, des mues et de la tendance de poids. Passez la souris sur le ? pour apprendre comment chaque score est calculé.",
      "weight_title": "Tendance de poids",
      "weightTitle": "Tendance de poids",
      "weight_text": "Votre graphique de poids. Permet de suivre la croissance visuellement.",
      "weightText": "Votre graphique de poids. Le score de croissance compare le premier et le dernier poids.",
      "events_title": "Historique des événements",
      "eventsTitle": "Historique des événements",
      "events_text": "Consultez tous les événements ici (Repas, Mues, Soins...).",
      "eventsText": "Consultez tous les événements ici. Cliquez sur un événement pour le modifier ou le supprimer.",
      "add_title": "Ajouter un événement",
      "addTitle": "Ajouter un événement",
      "add_text": "Utilisez ce bouton pour enregistrer rapidement une action.",
      "addText": "Utilisez “Ajouter un événement” pour enregistrer les repas, les mues, les visites chez le vétérinaire, etc."
    }
  },
  "testimonials": {
    "testimonial1": "ReptiNode a révolutionné la façon dont je suis ma collection. Les horaires d'alimentation et la surveillance de la santé sont inestimables.",
    "testimonial2": "Les fonctionnalités d'analyse m'aident à optimiser les horaires d'alimentation et à suivre les modèles de croissance comme jamais auparavant.",
    "testimonial3": "En tant que vétérinaire, les dossiers de santé détaillés et les fonctionnalités d'export facilitent grandement mon travail.",
    "title": "Approuvé par les Passionnés de Reptiles"
  },
  "units": {
    "cm": " cm",
    "days": "jours",
    "g": " g",
    "grams": " g"
  },
  "upgrade": {
    "choosePlan": "Choisir cette offre",
    "description": "Passez à l'offre supérieure pour continuer à ajouter des données et accéder à toutes les fonctionnalités pro.",
    "guarantee": "Garantie 30 jours satisfait ou remboursé. Annulable à tout moment.",
    "limitReached": "Limite de l'offre gratuite atteinte",
    "processing": "Traitement…",
    "unlockFull": "Débloquez tout le potentiel"
  },
  "featuresPage": {
    "seo": {
      "title": "Fonctionnalités de Gestion d'Élevage Reptile | ReptiNode",
      "description": "Découvrez les outils complets pour terrariophiles : suivi de poids, génération de QR Codes, fiches médicales, planning de nourrissage et gestion génétique."
    },
    "hero": {
      "badge": "Tour d'horizon complet",
      "title_part1": "La plateforme de gestion complète pour",
      "title_highlight": "l'éleveur moderne",
      "subtitle": "Fini les feuilles Excel et les carnets perdus. ReptiNode centralise toutes les données vitales de vos reptiles dans une interface fluide et sécurisée."
    },
    "weight": {
      "title": "Suivi de croissance et biométrie",
      "description": "La courbe de poids est le premier indicateur de santé d'un reptile. Notre module vous permet de visualiser instantanément l'évolution de vos animaux.",
      "list": {
        "1": "Graphiques interactifs automatiques",
        "2": "Détection des pertes de poids anormales",
        "3": "Historique illimité des pesées",
        "4": "Comparaison avec les moyennes de l'espèce"
      },
      "graph_title": "Poids - Python Regius #04",
      "graph_subtitle": "+12% vs mois dernier"
    },
    "qrcode": {
      "title": "Étiquettes QR Codes intelligentes",
      "description": "Ne cherchez plus quand a mangé tel ou tel reptile. Collez un QR Code sur chaque terrarium ou boîte d'élevage (rack) pour un accès instantané.",
      "list": {
        "1": "Génération PDF prête à imprimer",
        "2": "Scan caméra rapide depuis le mobile",
        "3": "Mise à jour de la fiche sans toucher l'animal",
        "4": "Mode 'Rack' pour scanner à la chaîne"
      },
      "scan_me": "Scannez-moi !"
    },
    "feeding": {
      "title": "Gestion des repas et rappels",
      "description": "Gérez le cycle alimentaire de centaines de reptiles sans erreur. ReptiNode calcule les prochains repas selon la fréquence définie.",
      "list": {
        "1": "Calendrier de nourrissage intelligent",
        "2": "Gestion du stock de proies (surgelé/vivant)",
        "3": "Suivi des refus et jeûnes",
        "4": "Notifications de rappel le jour J"
      },
      "card_scheduled_title": "Nourrissage prévu aujourd'hui",
      "card_scheduled_desc": "5 serpents à nourrir (Rat M)",
      "card_refusal_title": "Refus de repas - Gecko #01",
      "card_refusal_desc": "Noté il y a 2 jours"
    },
    "health_genetics": {
      "title": "Santé vétérinaire & Génétique",
      "subtitle": "Pour les éleveurs professionnels, la traçabilité est obligatoire. Nous simplifions vos registres IFAP et vos plans de reproduction.",
      "medical_title": "Suivi Médical",
      "medical_desc": "Notez les mues, les traitements, les visites vétérinaires et les observations quotidiennes. Exportez l'historique en un clic pour le vétérinaire.",
      "genetic_title": "Calculateur Génétique",
      "genetic_desc": "Planifiez vos accouplements. Liez les parents aux enfants pour générer automatiquement des arbres généalogiques et suivre les mutations."
    },
    "cta": {
      "title": "Prêt à moderniser votre élevage ?",
      "subtitle": "Rejoignez les éleveurs qui ont abandonné le papier pour ReptiNode. Entièrement gratuit.",
      "button": "Commencer maintenant !"
    }
  },
  "surveyWidget": {
    "default_title": "Votre avis",
    "thanks": "Merci pour votre retour ! 🙏",
    "later": "Plus tard",
    "send": "Envoyer",
    "hint_nps": "Note : {{score}}/10 — un commentaire (optionnel) ?",
    "hint_csat": "Note : {{score}}/5 — un commentaire (optionnel) ?",
    "ph_text": "Votre réponse…",
    "ph_optional": "Dites-nous en plus (optionnel)…"
  },
  "maintenance": {
    "title": "Maintenance en cours",
    "defaultMessage": "Le service est temporairement indisponible, nous revenons très vite."
  },
  "qrx": {
    "shareSettings": "Réglages du lien public",
    "visibility": "Visibilité",
    "visUnlisted": "Non répertorié (accessible uniquement via le lien)",
    "visPublic": "Public (référençable)",
    "expiration": "Expiration du lien (optionnel)",
    "password": "Mot de passe (optionnel)",
    "passwordSetPlaceholder": "•••••• (défini)",
    "passwordNone": "Aucun",
    "define": "Définir",
    "remove": "Retirer",
    "publicFieldsLabel": "Informations affichées publiquement",
    "fieldWeight": "Poids",
    "fieldLength": "Taille",
    "fieldLocality": "Localité",
    "fieldNotes": "Notes",
    "fieldPrice": "Prix",
    "fieldsHint": "Cliquez pour masquer/afficher. Barré = masqué sur la fiche publique.",
    "scansTotal": "Scans au total : {{count}}",
    "syncUpdating": "Mise à jour…",
    "syncRetry": "Réessayer",
    "publicLiveOn": "Cette fiche est publique : le QR est scannable.",
    "makePrivate": "Rendre privée",
    "activatePublic": "Activez le profil public pour rendre le QR accessible.",
    "saleTitle": "Vente (optionnel)",
    "saleNotForSale": "Non à vendre",
    "saleForSale": "À vendre",
    "saleReserved": "Réservé",
    "saleSold": "Vendu",
    "salePrice": "Prix",
    "saleContact": "Contact vendeur (email ou lien)",
    "saleMorphmarket": "Lien de l'annonce MorphMarket (optionnel)",
    "exportMM": "Exporter toute ma liste « à vendre » vers MorphMarket (CSV)",
    "exportMMHint": "Le fichier se téléverse sur MorphMarket (Bulk Import). Réservé aux comptes PRO.",
    "exportMMEmpty": "Aucun reptile marqué « à vendre » ou « réservé » à exporter.",
    "exportMMError": "Export impossible (réservé aux comptes PRO).",
    "actionTitle": "Action au scan",
    "actionView": "Voir la fiche",
    "actionAddEvent": "Ajouter un événement",
    "actionFeed": "Nourrir directement",
    "actionWeigh": "Peser directement",
    "actionHint": "« Nourrir » / « Peser » ouvrent directement le formulaire pré-rempli après connexion.",
    "qualityTitle": "Qualité / résistance du QR",
    "qualBasic": "Basique",
    "qualStandard": "Standard",
    "qualSolid": "Solide",
    "qualMax": "Max (terrarium)",
    "qualityHint": "Niveau de correction d'erreur : « Max » reste lisible même partiellement abîmé/humide. Pour un terrarium, imprimez sur support vinyle/plastifié résistant à l'eau.",
    "transferTitle": "Transfert / vente",
    "transferDesc": "Générez un QR à remettre à l'acheteur : en le scannant, il récupère ce reptile et son historique sur son compte.",
    "transferGenerate": "Générer un QR de transfert",
    "transferCopy": "Copier le lien",
    "transferCancel": "Annuler",
    "transferWarn": "Valable 30 jours. Le transfert est définitif une fois accepté.",
    "photosTitle": "Galerie photos",
    "photosAdd": "Ajouter",
    "photosEmpty": "Aucune photo. Ajoutez-en pour enrichir la fiche publique.",
    "photosUploadError": "Échec du téléversement",
    "photosPublicHint": "Ces photos s'affichent dans la galerie de la fiche publique (QR partagé).",
    "bulkTitle": "Planche de QR codes à imprimer",
    "bulkLayout": "Disposition",
    "bulkLayout2x4": "2 × 4 (grandes étiquettes)",
    "bulkLayout3x6": "3 × 6 (standard)",
    "bulkLayout4x8": "4 × 8 (Avery / petites)",
    "bulkLinkType": "Type de lien",
    "bulkLinkPublic": "Public (fiche partageable)",
    "bulkLinkInternal": "Interne (appli, requiert connexion)",
    "bulkReptiles": "Reptiles",
    "bulkSelectAll": "Tout sélectionner",
    "bulkDeselectAll": "Tout désélectionner",
    "bulkInternalNote": "lien interne (non public)",
    "bulkCancel": "Annuler",
    "bulkGenerate": "Générer le PDF",
    "bulkError": "Erreur lors de la génération du PDF",
    "scannerTitle": "Scanner un QR ReptiNode",
    "scannerUnsupported": "Votre navigateur ne supporte pas le scan intégré. Utilisez l'appareil photo de votre téléphone : il ouvrira automatiquement le lien du QR.",
    "scannerDenied": "Accès caméra refusé.",
    "scannerError": "Impossible d'ouvrir la caméra.",
    "scannerAim": "Visez le QR code d'une étiquette ReptiNode.",
    "scannerDetected": "QR détecté : {{value}}",
    "btnScan": "Scanner un QR",
    "btnEnclosures": "Enclos & racks",
    "btnBulk": "Planche de QR codes à imprimer"
  },
  "enclosures": {
    "unavailable": "Enclos indisponible",
    "occupants": "{{count}} occupant(s)",
    "noPublic": "Aucun reptile public dans cet enclos.",
    "title": "Enclos & racks",
    "backDashboard": "Tableau de bord",
    "name": "Nom",
    "namePlaceholder": "Terrarium A1",
    "type": "Type",
    "typeTerrarium": "Terrarium",
    "typeRack": "Rack",
    "typeBin": "Bac",
    "typeRoom": "Pièce",
    "create": "Créer",
    "empty": "Aucun enclos. Créez-en un pour générer un QR par enclos/rack.",
    "reptileCount": "{{count}} reptile(s)",
    "qrActive": "QR actif",
    "back": "Retour",
    "deleteConfirm": "Supprimer cet enclos ? Les reptiles seront détachés (non supprimés).",
    "qrTitle": "QR de l'enclos",
    "visPrivate": "Privé (pas de page publique)",
    "visUnlisted": "Non répertorié (accessible via le lien)",
    "visPublic": "Public",
    "qrHint": "Rendez l'enclos non répertorié ou public pour générer un QR.",
    "view": "Voir",
    "occupantsTitle": "Occupants",
    "removeOccupant": "Retirer",
    "noOccupants": "Aucun reptile dans cet enclos.",
    "addReptile": "Ajouter un reptile",
    "choose": "Choisir…",
    "copyLink": "Copier le lien",
    "single": "Enclos"
  },
  "claim": {
    "success": "Transfert réussi !",
    "successDesc": "{{name}} fait désormais partie de votre collection.",
    "viewSheet": "Voir la fiche",
    "unavailable": "Transfert indisponible",
    "title": "Transfert de propriété",
    "currentOwner": "Propriétaire actuel : {{owner}}",
    "explain": "En acceptant, ce reptile et son historique seront transférés vers votre compte.",
    "accept": "Accepter le transfert",
    "loginToAccept": "Se connecter pour accepter",
    "error": "Transfert impossible",
    "notFound": "Transfert introuvable"
  },
  "snakeBadges": {
    "public": "Public",
    "unlisted": "Lien",
    "forSale": "À vendre",
    "reserved": "Réservé",
    "sold": "Vendu",
    "publicTitle": "Profil public",
    "unlistedTitle": "Accessible via le lien"
  }
}
