{
  "nav": {
    "templates": "Designs",
    "create": "Créer mon site",
    "dashboard": "Mon espace",
    "menu": "Menu",
    "invitations": "Invitations",
    "skipToContent": "Aller au contenu"
  },
  "home": {
    "title": "Site de mariage avec invitation et QR",
    "description": "Le site de votre mariage pour 20 € : invitation numérique avec QR code et tableau de bord pour confirmations, tables, menus et navette.",
    "hero": {
      "heading": "Le site de votre mariage, gestion comprise",
      "subheading": "Un site de mariage complet — couverture, histoire, carte, galerie et confirmations en temps réel — qui est aussi votre invitation numérique avec QR code. Et derrière, un tableau de bord privé pour tout gérer : invités, tables, menus, navettes et avant-mariage.",
      "cta": "Créez votre site de mariage",
      "ctaSecondary": "Voir les modèles",
      "badgeFree": "Créez sans payer",
      "badgeNoSignup": "Commencez sans inscription",
      "badgeNoCard": "Paiement unique, sans abonnement",
      "scanMe": "Scannez-moi",
      "ctaPricing": "Voir les tarifs",
      "micro": "Invitation numérique avec QR · Confirmations en temps réel · Tableau de bord",
      "scrollCue": "Faites défiler pour tout voir",
      "qrCta": "Appuyez ici pour voir le site d'exemple"
    },
    "examples": {
      "heading": "Voici à quoi ressemblent les sites de mariage",
      "sub": "Ce ne sont pas des captures : ce sont les vrais modèles en fonctionnement. Choisissez-en un et faites-le vôtre.",
      "use": "Utiliser ce modèle"
    },
    "includes": {
      "eyebrow": "Tout compris",
      "heading": "Tout ce dont votre mariage a besoin, sur un seul site",
      "sub": "Sans extras, sans modules payants et sans limites : chaque partie s'active ou se désactive depuis l'éditeur.",
      "cover": {
        "title": "Une couverture avec votre photo",
        "body": "La photo de votre choix, cadrée à votre goût, avec vos prénoms et le compte à rebours du grand jour."
      },
      "story": {
        "title": "Votre histoire",
        "body": "Comment vous vous êtes rencontrés, raconté à votre façon. C'est la première chose que l'on lit."
      },
      "schedule": {
        "title": "Déroulé et lieux",
        "body": "Cérémonie, dîner et soirée avec horaires, adresses et plans. Personne ne redemande où ça se passe."
      },
      "rsvp": {
        "title": "Confirmations en temps réel",
        "body": "Qui vient, avec quels accompagnants — nommés —, quel menu il choisit et quelles allergies il a."
      },
      "gallery": {
        "title": "Galerie et album partagé",
        "body": "Jusqu'à neuf de vos photos, plus un lien pour que les invités déposent les leurs ensuite."
      },
      "gifts": {
        "title": "Liste de mariage",
        "body": "Votre IBAN ou la liste que vous avez déjà, avec un mot écrit par vous. Discret et facultatif."
      },
      "logistics": {
        "title": "Navettes et veille du mariage",
        "body": "Qui a besoin d'une place dans la navette et qui vient la veille, demandé dans la même confirmation."
      },
      "qr": {
        "title": "Votre lien et votre QR code",
        "body": "Pour WhatsApp et pour l'imprimer sur le faire-part papier. Le même lien vaut pour toujours."
      }
    },
    "panel": {
      "eyebrow": "Le tableau de bord",
      "heading": "L'essentiel : le tableau de bord qui gère tout le mariage",
      "sub": "Vous n'achetez pas seulement un joli site : vous achetez l'outil avec lequel on organise un mariage. Chaque confirmation arrive toute seule et chaque chose a sa section.",
      "overview": {
        "title": "Résumé",
        "body": "Les grands chiffres en un coup d'œil — qui vient, combien de couverts — et ce qu'il vous reste à faire, déduit tout seul."
      },
      "guests": {
        "title": "Invités",
        "body": "Toute votre liste au même endroit : ajoutez, filtrez par groupe ou statut, corrigez et relancez sur WhatsApp qui n'a pas répondu."
      },
      "seating": {
        "title": "Tables",
        "body": "Créez les tables avec leurs places et installez les confirmés en deux gestes, en voyant chaque table se remplir."
      },
      "catering": {
        "title": "Traiteur",
        "body": "Couverts, menus, allergies et places de navette déjà additionnés : un résumé prêt à envoyer au traiteur."
      },
      "share": {
        "title": "Partager",
        "body": "Votre lien et votre QR prêts à imprimer, des messages WhatsApp déjà écrits et le nombre de visites du site."
      },
      "foot": "Il vous épargne le tableur, les appels un par un et les relances sur WhatsApp. Tout le mariage, géré au même endroit dès le premier jour.",
      "transport": {
        "title": "Navette",
        "body": "Vos invités demandent une place en confirmant ; vous ajustez navettes, horaires et places, et le site les affiche."
      },
      "preWedding": {
        "title": "Avant-mariage",
        "body": "Annoncez-la sur le site et demandez qui en sera : vous saurez combien vous êtes la veille."
      },
      "card": {
        "seats": "convives confirmés",
        "replied": "de la liste a répondu",
        "tables": "tables dressées",
        "pace": "Rythme des réponses",
        "cta": "Entrez dans le tableau de bord de {{hosts}}",
        "hint": "Un mariage entier dedans, tel que vous le verriez. S’ouvre dans un nouvel onglet."
      }
    },
    "compare": {
      "eyebrow": "Comparatif",
      "heading": "Le même site web, sans le budget d'un site sur mesure",
      "sub": "Confier le site d’un mariage à un studio coûte des centaines ou des milliers d’euros et des semaines de travail. Ici, vous avez le même résultat, prêt en quelques minutes.",
      "colUs": "Avec QRinvites",
      "colThem": "Un site de mariage sur mesure",
      "r1": {
        "label": "Prix",
        "us": "Un seul petit paiement, tout compris pour toujours",
        "them": "Des centaines ou des milliers d'euros de développement"
      },
      "r2": {
        "label": "Temps",
        "us": "Prêt en quelques minutes, vous le montez vous-même",
        "them": "Des semaines ou des mois d'allers-retours"
      },
      "r3": {
        "label": "Connaissances",
        "us": "Aucune : vous remplissez les données et vous publiez",
        "them": "Il vous faut un designer et un développeur"
      },
      "r4": {
        "label": "Modifications",
        "us": "Vous modifiez et tout se met à jour à l'instant, gratuitement",
        "them": "Vous demandez le changement, vous attendez et parfois vous payez"
      },
      "r5": {
        "label": "Domaine et hébergement",
        "us": "Inclus, rien à configurer",
        "them": "Vous les souscrivez et les maintenez à part"
      },
      "r6": {
        "label": "Gestion des invités",
        "us": "Tableau de bord avec confirmations, tables, menus, navette et avant-mariage inclus",
        "them": "Rarement de tableau de bord : vous le tenez dans un tableur"
      },
      "r7": {
        "label": "Maintenance",
        "us": "Zéro : nous nous en occupons pour toujours",
        "them": "Mises à jour et pannes à votre charge"
      }
    },
    "steps": {
      "eyebrow": "Pas à pas",
      "heading": "Comment ça marche",
      "sub": "De zéro au site de votre mariage publié en cinq minutes",
      "one": {
        "title": "Choisissez le design de votre site",
        "body": "Des modèles professionnels pensés pour les mariages. Ce que vous choisissez est exactement le site que verront vos invités."
      },
      "two": {
        "title": "Personnalisez-le entièrement",
        "body": "Noms, date, lieux avec carte, histoire, galerie et confirmations, avec aperçu en direct. Sans limites et sans inscription."
      },
      "three": {
        "title": "Publiez-le avec un paiement unique",
        "body": "Connectez-vous avec Google — sans mots de passe ni carte enregistrée —, payez une seule fois et obtenez votre lien dédié et votre QR code. Il est à vous pour toujours."
      },
      "four": {
        "title": "Partagez-le et gérez-le depuis le tableau de bord",
        "body": "Envoyez le lien sur WhatsApp ou imprimez le QR code. Les confirmations arrivent toutes seules dans votre tableau de bord, où vous gérez invités, tables, traiteur, navettes et avant-mariage."
      },
      "step": "Étape {{n}}"
    },
    "faq": {
      "eyebrow": "FAQ",
      "heading": "Questions fréquentes",
      "sub": "Ce que tout le monde demande avant de créer la sienne",
      "q1": {
        "q": "Combien coûte le site ?",
        "a": "Le créer ne coûte rien : vous ouvrez l'éditeur sans inscription et utilisez toutes les options, tous les modèles, vos photos et toutes les sections, sans limite. On ne paie qu'à la publication : un paiement unique de 20 € par site, pour toujours, sans abonnement ni renouvellement. Vous le voyez terminé avant de décider."
      },
      "q2": {
        "q": "Dois-je m'inscrire ou donner mon e-mail ?",
        "a": "Vous concevez tout le site sans vous inscrire. Ce n'est qu'au moment de publier que nous vous demandons de vous connecter avec votre compte Google (sans nouveaux mots de passe ni e-mails de confirmation), pour que votre site et votre espace invités soient à vous seul, depuis n'importe quel appareil."
      },
      "q3": {
        "q": "Quand me demande-t-on ma carte ?",
        "a": "Seulement au moment de publier, jamais avant : vous composez le site entier et décidez avec le résultat sous les yeux. Le règlement est un paiement unique et sécurisé via Stripe, sans abonnement. Nous ne voyons ni ne conservons vos données bancaires."
      },
      "q4": {
        "q": "Comment l'invitation arrive-t-elle à mes invités ?",
        "a": "Comme vous voulez : envoyez-leur le lien par WhatsApp ou e-mail, ou imprimez le QR code sur un faire-part, une affiche ou la table pour qu'ils le scannent avec leur appareil photo. Le lien ouvre l'invitation instantanément — rien à installer, aucune inscription."
      },
      "q5": {
        "q": "Puis-je modifier le site après l'avoir publié ?",
        "a": "Oui. Chaque changement s'applique instantanément pour tous vos invités, avec le même lien et le même QR code. Changez l'heure, le lieu ou le design sans rien réimprimer."
      },
      "q6": {
        "q": "Comment fonctionnent les confirmations de présence ?",
        "a": "Vos invités confirment leur présence directement sur le site — avec accompagnants, menu, allergies, navette et avant-mariage — et vous gérez tout depuis votre tableau de bord : invités, tables, traiteur et places de navette, avec export CSV."
      },
      "q7": {
        "q": "Et les invités âgés ou peu à l’aise avec la technologie ?",
        "a": "Ouvrir le site, c’est toucher un lien ou scanner le QR code : rien à installer, aucune inscription, aucun mot de passe. Et confirmer sa présence tient en trois champs. Si quelqu’un préfère vous appeler, vous pouvez ajouter sa réponse à la main depuis le tableau de bord."
      },
      "q8": {
        "q": "Est-ce difficile de créer mon premier site ?",
        "a": "Commencer est très facile ! L'éditeur démarre avec un exemple déjà rempli : vous changez les noms, la date et le lieu, et en moins de 5 minutes votre site est publié."
      }
    },
    "finalCta": {
      "heading": "Votre mariage mérite un site à sa hauteur",
      "body": "Créez le site de votre mariage en quelques minutes — invitation numérique et QR code inclus —, publiez-le avec un paiement unique et gérez tout depuis le tableau de bord : invités, tables, menus, navettes et veille.",
      "cta": "Créez votre site"
    },
    "studio": {
      "eyebrow": "Besoin de plus ?",
      "heading": "Vous voulez un site encore plus sur mesure ?",
      "sub": "Si ce site ne suffit pas et que vous en cherchez un entièrement sur mesure — avec votre marque, votre domaine et tout ce qu’il vous faut —, parlez-nous-en et nous vous préparons un devis sans engagement.",
      "cta": "Demander un devis"
    }
  },
  "common": {
    "loading": "Chargement…",
    "language": "Langue",
    "yes": "Oui",
    "no": "Non",
    "close": "Fermer"
  },
  "templates": {
    "classic": {
      "name": "Classique"
    },
    "midnight": {
      "name": "Minuit"
    },
    "botanical": {
      "name": "Botanique"
    }
  },
  "editor": {
    "title": "Créez le site de votre mariage",
    "subtitle": "Ce n’est ni une carte ni un PDF : vous montez le site complet de votre mariage, avec son lien dédié à partager.",
    "description": "Éditeur de sites de mariage avec aperçu en direct : couverture, histoire, carte, galerie et réponses, invitation numérique et QR code inclus.",
    "preview": "Aperçu",
    "web": {
      "title": "Le site de votre mariage",
      "sub": "Voici l'adresse publique de votre site. Partagez-la sur WhatsApp ou avec son QR code.",
      "copy": "Copier le lien",
      "open": "Ouvrir",
      "liveNote": "Votre site est publié à cette adresse : toute personne disposant du lien peut l'ouvrir."
    },
    "autosaveHint": "Les modifications s'enregistrent toutes seules.",
    "publish": "Publier",
    "addVenue": "Ajouter un moment",
    "removeVenue": "Retirer",
    "section": {
      "basics": "Infos",
      "story": "Histoire",
      "rsvp": "Confirmations",
      "schedule": "Programme et lieux",
      "photos": "Photos",
      "gifts": "Liste de cadeaux",
      "photoShare": "Album photo partagé",
      "preWedding": "La soirée d'avant-mariage",
      "family": "Parents et parrains"
    },
    "field": {
      "date": "Date",
      "time": "Heure",
      "greeting": "Phrase d'en-tête",
      "template": "Modèle",
      "venueLabel": "Étiquette (Cérémonie, Réception…)",
      "venueName": "Nom du lieu",
      "venueAddress": "Adresse",
      "story": "Notre histoire",
      "dressCode": "Code vestimentaire",
      "rsvpEnabled": "Activer les confirmations",
      "askGuests": "Demander les accompagnants",
      "askMenu": "Demander le menu",
      "askAllergies": "Demander les allergies",
      "rsvpDeadline": "Date limite",
      "maxGuests": "Nombre maximum d'accompagnants par invité",
      "maxGuestsHint": "Chaque invité pourra amener jusqu'à ce nombre d'accompagnants, en indiquant le nom et le prénom de chacun.",
      "allergiesNotice": "Les allergies sont des données de santé. Ne les demandez que si vous en avez besoin pour le traiteur : elles sont enregistrées avec l'invitation, vous seul les voyez et elles sont supprimées avec elle.",
      "cover": "Photo de couverture",
      "coverCta": "Choisir une photo",
      "coverBusy": "Envoi de la photo…",
      "coverRemove": "Retirer la photo",
      "coverHint": "Elle apparaît dans votre invitation et sert d'image lors du partage sur WhatsApp. JPG, PNG ou WebP.",
      "coverError": "Impossible d'envoyer la photo. Essayez-en une autre ou réessayez.",
      "dressCodeHint": "Laissez vide si vous préférez ne pas indiquer de tenue.",
      "gallery": "Galerie photos",
      "galleryCta": "Ajouter des photos",
      "galleryRemove": "Retirer",
      "galleryHint": "Affichées sur l'invitation, sous les lieux. Jusqu'à {{max}} photos.",
      "familyLines": "Personnes à mettre à l'honneur",
      "familyHint": "Une ligne par famille ou couple : « Fille de Marta et Julián », « Parrains : Ana et Luis »…",
      "giftsEnabled": "Afficher la liste de cadeaux sur l'invitation",
      "giftsIban": "IBAN ou numéro de compte",
      "giftsUrl": "Lien vers la liste de cadeaux (optionnel)",
      "giftsNote": "Message pour vos invités",
      "giftsHint": "Affichée à la fin de l'invitation. Vous pouvez mettre seulement l'IBAN, seulement le lien, ou les deux.",
      "askTransport": "Demander s'ils ont besoin d'une place dans le bus",
      "showStory": "Afficher l'histoire",
      "showDressCode": "Afficher la tenue",
      "showSchedule": "Afficher le programme",
      "showVenues": "Afficher les fiches des lieux avec leur carte",
      "showGallery": "Afficher la galerie",
      "showSection": "Afficher cette section sur l'invitation",
      "menuOptions": "Options de menu",
      "menuAdd": "Ajouter",
      "menuOptionsHint": "Vos invités choisiront l'une de ces options en confirmant ; sans option, ils ne verront que « Sans préférence ».",
      "frameHint": "Faites glisser pour cadrer",
      "photoShareEnabled": "Invitez vos convives à ajouter leurs photos à un album partagé",
      "photoShareUrl": "Lien de l'album (Google Drive, Dropbox…)",
      "photoShareNote": "Message pour vos invités",
      "photoShareHint": "Affiché à la fin de l’invitation sous forme de bouton. Les invités ouvrent le lien pour ajouter leurs photos du mariage.",
      "zoom": "Zoom",
      "zoomIn": "Zoom avant",
      "zoomOut": "Zoom arrière",
      "preWeddingEnabled": "Nous organisons une soirée d'avant-mariage et voulons l'annoncer sur le site",
      "preWeddingNote": "Message pour vos invités",
      "preWeddingAsk": "Demander à la confirmation qui sera de la soirée d'avant-mariage",
      "preWeddingHint": "La date, le lieu et le message s'affichent sur le site ; les réponses arrivent dans l'onglet « Avant-mariage » de votre tableau de bord.",
      "askTransportHint": "Les trajets, horaires et places des navettes se gèrent depuis l'onglet « Navette » de votre tableau de bord ; vos invités les voient sur le site."
    },
    "error": {
      "required": "Ce champ est obligatoire."
    },
    "status": {
      "idle": "Non publiée",
      "saving": "Enregistrement…",
      "saved": "Enregistré",
      "error": "Impossible d'enregistrer"
    },
    "sample": {
      "host1": "Lucía",
      "host2": "Mateo",
      "greeting": "Nous nous marions",
      "story": "Nous nous sommes rencontrés un mardi comme les autres et depuis nous n'avons pas arrêté de célébrer. Maintenant nous voulons le célébrer avec vous.",
      "venueLabel": "Cérémonie",
      "venueName": "Église de San Miguel",
      "venueAddress": "Plaza Mayor 1, Ségovie",
      "dressCode": "Tenue de soirée",
      "venueLabel2": "Réception",
      "venueLabel3": "La fête",
      "menu1": "Viande",
      "menu2": "Poisson"
    },
    "signInTitle": "Connectez-vous pour publier",
    "signInBody": "La publication nécessite votre compte Google : ainsi le site est rattaché à votre profil et vous le gérez depuis votre tableau de bord, sur n’importe quel appareil. Votre design est déjà enregistré dans ce navigateur.",
    "signInLater": "Continuer à modifier",
    "publishedTitle": "Invitation publiée !",
    "publishedBody": "Partagez ce lien avec vos invités.",
    "invitationLabel": "Votre invitation",
    "panelLabel": "Votre espace privé",
    "panelHint": "Connectez-vous avec Google depuis n'importe quel appareil : l'espace est privé et rien qu'à vous.",
    "pay": {
      "redirecting": "Redirection vers le paiement sécurisé Stripe…",
      "error": "Impossible de démarrer le paiement. Réessayez dans quelques secondes.",
      "eyebrow": "Dernière étape",
      "title": "Publiez le site de votre mariage",
      "sub": "Un paiement unique. Sans abonnement, sans renouvellement et sans petits caractères.",
      "productName": "Le site de votre mariage",
      "b1": "Votre lien dédié et son QR code pour la partager",
      "b2": "Confirmations avec accompagnants, menu et allergies",
      "b3": "Tableau de bord : invités, tables, menus, navettes et veille",
      "b4": "Visites et invités illimités, et modifications instantanées",
      "b5": "Sans publicité ni filigrane : le site n’est qu’à vous",
      "cta": "Payer et publier",
      "note": "Paiement unique et sécurisé via Stripe. Une fois confirmé, votre site se publie tout seul et apparaît dans votre tableau de bord."
    },
    "cancel": "Retour à l'éditeur",
    "close": "Fermer",
    "scheduleHint": "Chaque moment apparaît sur la frise de l'invitation et sous forme de fiche de lieu avec un lien vers la carte. L'ordre de la liste est l'ordre de la journée.",
    "momentLabel": "Moment {{number}}",
    "moveUp": "Monter",
    "moveDown": "Descendre",
    "previewLive": "Voici à quoi ressemblera le site de votre mariage",
    "previewSub": "Il se met à jour instantanément à chaque changement.",
    "viewPreview": "Voir l'avancement de votre site",
    "host": {
      "1": "Prénom de l'un des mariés",
      "2": "Prénom de l'autre marié"
    }
  },
  "invitation": {
    "story": "Notre histoire",
    "venues": "Où",
    "dressCode": "Tenue",
    "directions": "Itinéraire",
    "share": "Partagez l'invitation",
    "qrCaption": "Scannez ou téléchargez le QR code",
    "notFound": "Invitation introuvable",
    "notFoundBody": "Le lien a peut-être changé ou l'invitation n'est plus publiée.",
    "goHome": "Aller à l'accueil",
    "ogDescription": "{{hosts}} · {{date}} · {{venue}}. Ouvrez-la pour tous les détails et pour confirmer votre présence.",
    "ogDescriptionNoVenue": "{{hosts}} · {{date}}. Ouvrez-la pour tous les détails et pour confirmer votre présence.",
    "schedule": "Programme",
    "scheduleEyebrow": "Le grand jour",
    "gallery": "Galerie",
    "farewell": "Votre présence nous rendrait très heureux.",
    "venuesHeading": "Les lieux",
    "family": "Nos familles",
    "gifts": "Liste de cadeaux",
    "giftsLink": "Voir la liste de cadeaux",
    "giftsShowIban": "Voir le compte bancaire",
    "giftsCopy": "Copier",
    "giftsCopied": "Copié !",
    "photos": "Album photo",
    "photosShare": "Partagez vos photos",
    "photosOpen": "Ouvrir l'album",
    "photosDemo": "Ce lien est une démo, il ne mène nulle part. Sur votre vraie invitation, ce bouton ouvre le dossier photos de vos invités.",
    "errorTitle": "Impossible de charger l’invitation",
    "errorBody": "C’est peut-être un problème de connexion temporaire. Réessayez.",
    "retry": "Réessayer",
    "preWedding": "La soirée d'avant-mariage",
    "transport": "Navette pour les invités",
    "transportDeparture": "Départ",
    "transportReturn": "Retour"
  },
  "rsvp": {
    "title": "Confirmez votre présence",
    "name": "Votre nom",
    "nameRequired": "Écrivez votre nom.",
    "attending": "Pourrez-vous venir ?",
    "yes": "Oui, j'y serai",
    "no": "Je ne pourrai pas",
    "guests": "Combien d'accompagnants amenez-vous ?",
    "companion": "Accompagnant {{n}}",
    "firstName": "Prénom",
    "lastName": "Nom",
    "companionsRequired": "Indiquez le nom et le prénom de chaque accompagnant.",
    "menu": "Menu",
    "menuDefault": "Sans préférence",
    "allergies": "Allergies ou intolérances",
    "notes": "Quelque chose à savoir ?",
    "send": "Envoyer la confirmation",
    "sending": "Envoi…",
    "deadline": "Confirmez avant le",
    "thanksYes": "Merci ! On se voit là-bas.",
    "thanksNo": "Merci de nous prévenir. Vous nous manquerez.",
    "error": "Impossible d'enregistrer votre confirmation. Réessayez.",
    "allergiesHint": "Facultatif. Utilisé uniquement pour organiser le menu du mariage et visible seulement par votre hôte.",
    "guestsHint": "Jusqu'à {{max}} accompagnants.",
    "fixFields": "Vérifiez les champs signalés : il reste quelque chose à corriger avant l’envoi.",
    "transport": "Avez-vous besoin d'une place dans le bus ?",
    "transportYes": "Oui, je prendrai le bus",
    "transportNo": "Non, je viens par mes propres moyens",
    "preWedding": "Serez-vous aussi de la soirée d'avant-mariage ?",
    "preWeddingYes": "Oui, j'en serai",
    "preWeddingNo": "Je ne pourrai pas"
  },
  "dashboard": {
    "title": "Votre espace",
    "subtitle": "Tout votre mariage, au même endroit.",
    "newEvent": "Nouvelle invitation",
    "events": "Vos invitations",
    "untitled": "Sans titre",
    "viewInvitation": "Voir l'invitation publique",
    "copyLink": "Copier le lien",
    "copied": "Copié !",
    "signOut": "Se déconnecter",
    "signInTitle": "Entrez dans votre espace",
    "signInBody": "Connectez-vous avec le même compte Google qu'à la publication. C'est privé et rien qu'à vous.",
    "add": {
      "name": "Nom de l'invité…",
      "cta": "Ajouter"
    },
    "emptyTitle": "Vous n'avez pas encore d'invitations",
    "emptyBody": "Créez la première en deux minutes.",
    "noRsvps": "Personne n'a encore confirmé. Partagez le lien ou le QR pour commencer.",
    "deleteRsvp": "Supprimer la confirmation de",
    "deleteConfirm": "Supprimer la confirmation de {{name}} ? Cette action est irréversible.",
    "editEvent": "Continuer à modifier",
    "deleteEvent": "Supprimer",
    "deleteEventError": "Impossible de supprimer l'invitation. Rechargez la page et réessayez.",
    "publishNow": "Publier",
    "publishError": "Impossible de publier l'invitation. Réessayez dans quelques secondes.",
    "account": {
      "title": "Votre compte",
      "body": "Vous pouvez supprimer votre compte quand vous voulez. Vos données personnelles, vos invitations et les confirmations de vos invités seront supprimées, conformément au RGPD.",
      "delete": "Supprimer mon compte",
      "modalTitle": "Supprimer votre compte",
      "modalBody": "Cette action est définitive : votre compte, toutes vos invitations (y compris celles que vous avez payées, sans remboursement) et toutes les confirmations de vos invités seront supprimés. C’est irréversible.",
      "ack": "Je comprends que tout sera définitivement supprimé, y compris les invitations que j’ai payées.",
      "confirm": "Supprimer mon compte définitivement",
      "error": "Le compte n’a pas pu être supprimé. Réessayez dans quelques minutes."
    },
    "delete": {
      "title": "Supprimer l'invitation",
      "body": "Vous allez supprimer « {{name}} ». L'invitation, son lien et toutes ses confirmations seront supprimés immédiatement et définitivement.",
      "cancel": "Annuler",
      "confirm": "Supprimer définitivement",
      "paidWarning": "Cette invitation est payée. La supprimer signifie renoncer définitivement à ce que vous avez payé. Aucun remboursement, aucune récupération possible.",
      "paidAck": "Je comprends qu’en supprimant cette invitation je perds définitivement ce que j’ai payé.",
      "draftNote": "C’est un brouillon non publié : il se supprime sans conséquence et vous n’avez rien payé pour lui."
    },
    "status": {
      "draft": "Brouillon",
      "published": "Publiée",
      "attending": "Présent",
      "declined": "Absent",
      "pending": "Sans réponse"
    },
    "stat": {
      "seats": "Couverts"
    },
    "chart": {
      "perDay": "Réponses par jour"
    },
    "col": {
      "name": "Nom",
      "attending": "Présent",
      "guests": "Accompagnants",
      "menu": "Menu",
      "allergies": "Allergies",
      "notes": "Notes",
      "date": "Date",
      "transport": "Bus",
      "group": "Groupe",
      "table": "Table",
      "guestOf": "Accompagnant de",
      "preEvent": "Avant-mariage"
    },
    "pay": {
      "checking": "Confirmation de votre paiement…",
      "success": "Paiement confirmé ! Votre invitation est publiée et vous appartient pour toujours.",
      "thanks": "Mille mercis pour le café ! Ces soutiens font vivre le projet.",
      "error": "Impossible de confirmer le paiement. Rappelez-vous que la passerelle est en mode test et n'effectue aucun débit réel : rien ne vous a été facturé. Vous pouvez réessayer quand vous le souhaitez."
    },
    "support": {
      "title": "Ça vous est utile ?",
      "body": "Ce projet est maintenu par une seule personne. Si le cœur vous en dit, offrez-moi un café.",
      "amount": "Montant en euros (minimum 5)",
      "cta": "Offrir"
    },
    "sections": "Sections du tableau de bord",
    "tab": {
      "overview": "Résumé",
      "guests": "Invités",
      "seating": "Tables",
      "catering": "Traiteur",
      "share": "Partager",
      "transport": "Navette",
      "preWedding": "Avant-mariage"
    },
    "draftNote": "Cette invitation est un brouillon : vous seul la voyez. Publiez-la pour la partager et commencer à recevoir les réponses.",
    "count": {
      "all": "Sur la liste",
      "attending": "Présents",
      "declined": "Absents",
      "pending": "Sans réponse"
    },
    "overview": {
      "eyebrow": "Votre grand jour",
      "ringLabel": "Répartition des réponses",
      "numbers": "Les chiffres du mariage",
      "responded": "Ont répondu",
      "stepsTitle": "Ce qu’il vous reste à faire",
      "stepsHint": "La liste se coche toute seule à mesure que vous avancez : rien à tenir à la main.",
      "stepGo": "Aller",
      "activityTitle": "Dernières réponses",
      "activityEmpty": "Les confirmations apparaîtront ici dès qu’elles commenceront à arriver.",
      "step": {
        "publish": "Publiez votre invitation",
        "cover": "Ajoutez votre photo de couverture",
        "share": "Partagez le lien avec vos invités",
        "guests": "Notez qui vous avez invité",
        "chase": "Relancez ceux qui n’ont pas répondu",
        "seating": "Placez à table ceux qui viennent",
        "catering": "Préparez la fiche du traiteur"
      }
    },
    "guests": {
      "addTitle": "Ajouter des invités",
      "bulkOpen": "Coller une liste",
      "bulkLabel": "Un nom par ligne",
      "bulkPlaceholder": "Ana García\nCarlos Ruiz\nTante Marisa",
      "bulkCancel": "Annuler",
      "bulkCta": "Ajouter à la liste",
      "searchPlaceholder": "Chercher par nom, groupe, table ou note",
      "allGroups": "Tous les groupes",
      "noMatches": "Aucun invité ne correspond à la recherche.",
      "seatsTag": "{{n}} places",
      "edit": "Modifier",
      "close": "Fermer",
      "cancel": "Annuler",
      "save": "Enregistrer",
      "saveError": "Nous n’avons pas pu enregistrer la modification. Réessayez.",
      "groupPlaceholder": "Famille, amis, travail…",
      "needsTransport": "A besoin d’une place dans la navette",
      "companionOf": "avec {{name}}",
      "attendsPreWedding": "Sera de la soirée d'avant-mariage"
    },
    "seating": {
      "seated": "Placés",
      "unseated": "Sans table",
      "capacity": "Places créées",
      "tableName": "Nom de la table",
      "tablePlaceholder": "Table 1, Table d’honneur, Amis…",
      "tableSeats": "Places",
      "addTable": "Créer la table",
      "noTables": "Vous n’avez encore créé aucune table. Commencez par la première.",
      "ofSeats": "{{taken}} places sur {{seats}}",
      "takenOnly": "{{taken}} placés",
      "removeTable": "Supprimer la table",
      "removeConfirm": "Vous allez supprimer cette table et {{n}} invités se retrouveront sans place. On continue ?",
      "duplicateTable": "Vous avez déjà une table portant ce nom.",
      "emptyTable": "Table vide.",
      "unseat": "Retirer de la table",
      "poolTitle": "Pas encore placés",
      "poolHint": "Choisissez une table pour chacun ; vous pourrez les déplacer quand vous voudrez.",
      "poolDone": "Tous ceux qui viennent ont une table.",
      "poolNoGuests": "Dès que vous aurez des réponses, elles apparaîtront ici pour être placées.",
      "assignTo": "Attribuer une table à",
      "choose": "Choisir une table"
    },
    "catering": {
      "title": "Fiche du traiteur",
      "hint": "Ce que le restaurant, le traiteur ou la navette doivent savoir. Copiez et envoyez tel quel.",
      "copy": "Copier le résumé",
      "seats": "Couverts",
      "responses": "Réponses",
      "allergyCount": "Avec allergies",
      "busSeats": "Places de navette",
      "pendingNote": "{{n}} n’ont pas encore répondu : ces chiffres peuvent encore augmenter.",
      "menus": "Menus",
      "noMenus": "Personne n’a encore choisi de menu.",
      "noMenuChosen": "{{n}} sans menu choisi",
      "allergies": "Allergies et intolérances",
      "noAllergies": "Personne n’a déclaré d’allergie.",
      "healthNote": "Ce sont des données de santé : servez-vous-en uniquement pour organiser le repas et ne les partagez pas au-delà de qui le prépare.",
      "bus": "Navette"
    },
    "share": {
      "linkTitle": "Votre lien",
      "linkHint": "Le même pour tous et pour toujours : modifiez l’invitation et il se met à jour tout seul.",
      "whatsapp": "Envoyer sur WhatsApp",
      "remind": "Relancer les {{n}} manquants",
      "qrTitle": "QR code",
      "qrHint": "Téléchargez-le pour l’imprimer sur un cadeau, une affiche ou un marque-place.",
      "inviteMessage": "Nous nous marions ! {{hosts}} · {{date}}. Voici notre invitation, avec tous les détails et pour confirmer votre présence : {{url}}",
      "reminderMessage": "Bonjour ! Il nous manque votre réponse pour le mariage de {{hosts}}. C’est l’affaire d’un instant ici : {{url}} Merci !"
    },
    "loadErrorTitle": "Impossible de charger vos invitations",
    "loadErrorBody": "C’est peut-être un problème de connexion temporaire.",
    "guestsLoadError": "Impossible de charger la liste des invités. Réessayez.",
    "actionError": "L’action n’a pas pu être effectuée. Réessayez.",
    "transport": {
      "title": "Navettes",
      "hint": "Faites correspondre les places demandées à la confirmation avec les navettes que vous créez. Ce que vous définissez ici s'affiche sur votre site.",
      "copy": "Copier le résumé",
      "notAsked": "Vous ne posez pas encore la question de la navette à la confirmation : activez-la dans la section confirmations de l'éditeur pour que vos invités demandent une place.",
      "requested": "Places demandées",
      "capacity": "Places dans les navettes",
      "free": "Places restantes",
      "over": "Il manque {{n}} places : ajoutez une navette ou augmentez les places.",
      "busName": "Nom ou trajet",
      "busPlaceholder": "Navette 1 · Centre-ville",
      "departurePlace": "Lieu de départ",
      "departureTime": "Départ",
      "returnTime": "Retour",
      "busSeats": "Places",
      "addBus": "Ajouter une navette",
      "noBuses": "Aucune navette pour l'instant. Ajoutez la première et vos invités verront le trajet et les horaires sur le site.",
      "removeBus": "Supprimer la navette",
      "seatsOf": "{{seats}} places",
      "noSeatLimit": "Sans limite de places",
      "note": "Note pour vos invités",
      "noteHint": "Affichée sur le site à côté des navettes (« Réservez votre place en confirmant »).",
      "saveNote": "Enregistrer la note",
      "whoNeeds": "Qui demande une place",
      "noNeeds": "Personne n'a encore demandé de place.",
      "fleet": "Navettes",
      "departureShort": "Départ",
      "returnShort": "Retour",
      "late": "Il part à la même heure que la cérémonie de {{time}}, ou presque : avancez le départ ou vos invités arriveront en retard."
    },
    "preWedding": {
      "title": "La soirée d'avant-mariage",
      "hint": "Qui sera de la soirée d'avant-mariage, d'après les confirmations de votre site.",
      "copy": "Copier le résumé",
      "notEnabled": "La soirée d'avant-mariage n'est pas activée : activez-la dans l'éditeur pour l'annoncer sur votre site et demander qui vient.",
      "notAsked": "Vous annoncez la soirée d'avant-mariage mais ne posez pas la question à la confirmation : activez-la dans l'éditeur pour remplir cet onglet.",
      "details": "Le programme",
      "coming": "Présents",
      "notComing": "Absents",
      "unanswered": "Sans réponse",
      "who": "Qui vient",
      "noAnswers": "Personne ne s'est encore inscrit à la soirée d'avant-mariage."
    },
    "pager": {
      "label": "Pages de la liste",
      "prev": "Précédent",
      "next": "Suivant",
      "range": "{{from}}–{{to}} sur {{total}}"
    },
    "summary": {
      "button": "Télécharger le récapitulatif (PDF)",
      "blocked": "Le navigateur a bloqué la fenêtre du récapitulatif. Autorisez les pop-ups et réessayez.",
      "title": "Récapitulatif du mariage",
      "generated": "Généré le {{date}} avec QRinvites · qrinvites.com",
      "seats": "Convives",
      "attending": "Confirmés",
      "pending": "Sans réponse",
      "declined": "Ne viennent pas",
      "menus": "Menus pour le traiteur",
      "allergies": "Allergies et intolérances",
      "bus": "Navette · {{seats}} places demandées",
      "preWedding": "Veille · {{seats}} inscrits",
      "tables": "Tables du banquet",
      "tableSeats": "{{taken}} sur {{seats}}",
      "unseated": "Sans table attribuée",
      "guests": "Liste complète · {{total}} entrées"
    }
  },
  "auth": {
    "google": "Continuer avec Google",
    "connecting": "Connexion…",
    "googleHint": "Sans mots de passe ni e-mails : vous entrez instantanément avec votre compte Google."
  },
  "admin": {
    "eyebrow": "Administration",
    "title": "Panneau d'administration",
    "signInTitle": "Connectez-vous pour voir les statistiques",
    "range": "Période",
    "days": "{{n}} jours",
    "funnel": "Entonnoir de conversion",
    "perDay": "Visites par jour",
    "noData": "Pas encore de données.",
    "step": {
      "visits": "Visites",
      "editor": "Ouvrent l'éditeur",
      "published": "Publient",
      "paid": "Paient"
    },
    "deniedTitle": "Accès refusé",
    "deniedBody": "Ces statistiques sont réservées au propriétaire du site.",
    "tabs": {
      "overview": "Résumé",
      "users": "Utilisateurs",
      "events": "Invitations",
      "payments": "Paiements",
      "audit": "Audit",
      "database": "Base de données"
    },
    "metric": {
      "registeredUsers": "Utilisateurs inscrits",
      "visitors30d": "Visiteurs uniques (30 j)",
      "publishedActive": "Invitations publiées",
      "rsvps": "Confirmations totales",
      "checkouts": "Paiements initiés",
      "paymentsConfirmed": "Paiements confirmés",
      "revenue": "Revenus",
      "convCheckout": "Paiements / initiés",
      "convUsers": "Paiements / utilisateurs",
      "activeUnpaid": "Brouillons",
      "paidInvitations": "Invitations payées",
      "avgPayment": "Panier moyen"
    },
    "users": {
      "search": "Rechercher par e-mail…",
      "colEmail": "E-mail",
      "colCreated": "Inscription",
      "colEvents": "Invitations",
      "colPayments": "Paiements",
      "colRevenue": "Montant",
      "colState": "État",
      "view": "Voir comme utilisateur",
      "suspend": "Suspendre",
      "unsuspend": "Réactiver",
      "delete": "Supprimer",
      "deleteConfirm": "Supprimer le compte {{email}} et tout ce qui lui appartient (invitations, confirmations) ? Cette action est définitive.",
      "suspendConfirm": "Suspendre le compte {{email}} ? Ses invitations ne seront plus visibles et il ne pourra plus publier.",
      "badgeAdmin": "admin",
      "badgeSuspended": "suspendu",
      "badgeActive": "actif",
      "empty": "Aucun utilisateur correspondant."
    },
    "userDetail": {
      "title": "Vue comme utilisateur",
      "back": "Retour à la liste",
      "events": "Ses invitations",
      "payments": "Ses paiements",
      "rsvps": "{{n}} confirmations",
      "none": "Rien à afficher.",
      "open": "Ouvrir l'invitation"
    },
    "events": {
      "search": "Rechercher par slug ou e-mail…",
      "colSlug": "Slug",
      "colOwner": "Propriétaire",
      "colStatus": "État",
      "colRsvps": "Réponses",
      "colCreated": "Créée",
      "unpublish": "Dépublier",
      "unpublishConfirm": "Dépublier « {{slug}} » ? Elle redeviendra un brouillon et son lien cessera de fonctionner.",
      "delete": "Supprimer",
      "deleteConfirm": "Supprimer « {{slug}} » ? Suppression définitive.",
      "badgeDeleted": "supprimée",
      "badgePaid": "payée",
      "empty": "Aucune invitation correspondante."
    },
    "payments": {
      "colWhen": "Date",
      "colUser": "Utilisateur",
      "colKind": "Type",
      "colAmount": "Montant",
      "colStatus": "État",
      "colSession": "Session",
      "empty": "Pas encore de paiements.",
      "kind": {
        "support": "Soutien",
        "invitation": "Invitation"
      },
      "status": {
        "pending": "En attente",
        "paid": "Payé",
        "expired": "Expiré"
      }
    },
    "audit": {
      "colWhen": "Date",
      "colAdmin": "Admin",
      "colAction": "Action",
      "colTarget": "Cible",
      "empty": "Aucune action enregistrée."
    },
    "refresh": "Actualiser",
    "actionError": "L'action a échoué. Réessayez.",
    "perDayBusiness": "Publications et paiements par jour",
    "db": {
      "tables": "Tables",
      "empty": "Aucune ligne.",
      "delete": "Supprimer",
      "deleteConfirm": "Supprimer cette ligne de « {{table}} » ? ({{id}}) Pas de corbeille : c’est définitif.",
      "prev": "Précédentes",
      "next": "Suivantes",
      "legend": "Que signifie chaque champ ?"
    },
    "dbfield": {
      "action": "Action d'administration enregistrée",
      "admin_id": "Administrateur qui a effectué l'action",
      "allergies": "Allergies indiquées (données de santé)",
      "amount_cents": "Montant en centimes d'euro",
      "analytics_exempt": "Exclue des métriques (comptes du propriétaire)",
      "attending": "Confirme sa présence (oui/non)",
      "base_locale": "Langue de création de l'invitation",
      "bucket": "Limite de débit : quelle action est limitée",
      "bucket_id": "Dossier de stockage (event-images)",
      "confirmed_at": "Date de confirmation du paiement",
      "count": "Actions cumulées dans la fenêtre",
      "created_at": "Date de création de la ligne",
      "currency": "Devise du paiement",
      "data": "Contenu de l'invitation (noms, date, lieux, textes)",
      "deleted_at": "Date de suppression par l'utilisateur (vide = active)",
      "detail": "Détail supplémentaire de l'action",
      "email": "E-mail du compte",
      "event_id": "Invitation à laquelle elle appartient",
      "external_id": "Id de la session de paiement Stripe",
      "guests": "Nombre d'accompagnants",
      "id": "Identifiant unique de la ligne",
      "is_admin": "Est administrateur du site",
      "kind": "Type de paiement (invitation = site de mariage, support = soutien)",
      "locale": "Langue de la visite",
      "menu": "Menu choisi",
      "name": "Nom (de l'invité, ou du fichier dans le stockage)",
      "notes": "Note libre de l'invité",
      "owner_id": "Utilisateur propriétaire de l'invitation",
      "paid_at": "Date du paiement (vide = brouillon non publié)",
      "path": "Page visitée",
      "provider": "Passerelle de paiement (stripe)",
      "published_at": "Date de publication",
      "referrer": "Site web d'origine de la visite",
      "session_id": "Session anonyme du navigateur (statistiques)",
      "size_bytes": "Taille du fichier en octets",
      "slug": "Partie finale du lien public (/i/…)",
      "status": "État (brouillon / publiée ; paiements : en attente / payé / expiré)",
      "stripe_session_id": "Session de paiement Stripe associée",
      "subject": "Limite de débit : quel utilisateur",
      "suspended_at": "Date de suspension du compte (vide = actif)",
      "target_event": "Invitation concernée par l'action",
      "target_user": "Utilisateur concerné par l'action",
      "template": "Modèle choisi (classique, minuit, botanique)",
      "transport": "A besoin du bus (vide = non demandé)",
      "type": "Type (d'événement, ou d'événement statistique)",
      "updated_at": "Dernière modification",
      "user_id": "Utilisateur associé (s'il était connecté)",
      "window_start": "Début de la fenêtre de limite"
    },
    "revenuePerDay": "Revenus par jour",
    "revenueByProduct": "Revenus par produit",
    "kind": {
      "invitation": "Invitation",
      "support": "Soutien"
    },
    "recentActivity": "Activité récente",
    "activity": {
      "created": "Nouvelle invitation",
      "published": "Publiée",
      "paid": "Paiement"
    }
  },
  "gallery": {
    "title": "Modèles de site de mariage",
    "description": "Trois modèles de site de mariage — classique, minuit et botanique — invitation et QR compris. Essayez-les avec un aperçu en direct.",
    "heading": "Modèles",
    "headline": "Choisissez le design du site de votre mariage",
    "intro": "Chaque design est le vrai site de mariage, pas une capture : choisissez-en un et personnalisez-le avec un aperçu en direct.",
    "use": "Utiliser ce modèle",
    "switch": {
      "heading": "Vous hésitez ? Changez quand vous voulez",
      "body": "Vous pouvez changer de modèle après la publication : le lien et le QR code restent les mêmes.",
      "cta": "Créez le site de votre mariage"
    }
  },
  "footer": {
    "tagline": "Invitations numériques avec QR code",
    "pricing": "Tarifs",
    "legalNotice": "Mentions légales",
    "privacy": "Confidentialité",
    "cookies": "Cookies",
    "terms": "Conditions",
    "blurb": "Le site de votre mariage avec invitation numérique, QR code et un tableau de bord qui gère tout. Créez sans inscription, payez à la publication.",
    "product": "Produit",
    "legal": "Légal",
    "demo": "Projet d'entraînement · sans activité économique"
  },
  "pricing": {
    "title": "Tarifs",
    "description": "Tarifs QRinvites : 20 € par site de mariage publié. Paiement unique, sans abonnement ni coûts cachés.",
    "heading": "Des tarifs simples, sans petites lignes",
    "sub": "Un paiement unique, sans abonnement. Créer le site entier est gratuit et sans compte : vous ne payez qu’au moment de le publier.",
    "perEvent": "par site de mariage",
    "faqTitle": "Questions fréquentes sur le prix",
    "q1": {
      "q": "Y a-t-il des abonnements ou des coûts cachés ?",
      "a": "Non. C’est un paiement unique de 20 € par site de mariage publié. Aucun renouvellement, aucun prélèvement récurrent, aucun prix par invité."
    },
    "q2": {
      "q": "Puis-je la voir avant de payer ?",
      "a": "Oui, entièrement. L’éditeur vous laisse composer le site complet — tous les designs, vos photos et toutes les sections — et le voir exactement comme le verront vos invités. On ne paie qu’au moment de publier."
    },
    "q3": {
      "q": "Que se passe-t-il si je supprime un site payé ?",
      "a": "Le paiement est lié à ce site. Le supprimer efface définitivement le site et ses confirmations et signifie renoncer à ce que vous avez payé ; c’est pourquoi nous demandons une confirmation expresse."
    },
    "studio": {
      "name": "Studio sur mesure",
      "price": "Parlons-en",
      "f1": "Un site web complet",
      "f2": "Logo et identité visuelle",
      "f3": "Réseaux sociaux : gestion et contenu",
      "f4": "Publicité et campagnes digitales",
      "f5": "Référencement Google (SEO)",
      "f6": "Email marketing et newsletters",
      "f7": "Domaine et e-mail professionnel",
      "note": "Parlez-nous de votre projet et vous recevrez une proposition claire, à prix fermé et sans engagement.",
      "cta": "Demander un devis"
    },
    "invitation": {
      "name": "Le site de votre mariage",
      "cta": "Créez le site de votre mariage",
      "f1": "Votre lien dédié et son QR code, à partager comme vous voulez",
      "f2": "Tous les designs et toutes les sections du site",
      "f3": "Confirmations avec accompagnants, menu, allergies et navette",
      "f4": "Tableau de bord : invités, tables, menus, navettes et soirée de veille",
      "f5": "Votre photo de couverture et une galerie jusqu’à 9 photos",
      "f6": "Visites et invités illimités, et modifications instantanées",
      "f7": "Sans publicité ni filigrane, pour toujours",
      "note": "Le paiement est lié à cette invitation tant qu’elle existe. La supprimer, c’est renoncer à ce que vous avez payé (confirmation expresse demandée)."
    }
  },
  "demo": {
    "eyebrow": "Avis important",
    "legalLink": "Lire les mentions légales",
    "entry": {
      "title": "Ceci est un projet d'entraînement",
      "p1": "QRinvites est un exercice personnel de développement web, créé uniquement à des fins d'apprentissage et de démonstration de compétences techniques.",
      "p2": "L'activité n'est pas ouverte : aucun service n'est fourni, il n'y a aucune activité économique ni professionnelle derrière ce site, et son auteur n'exerce ni comme indépendant ni comme entreprise.",
      "p3": "Les prix, les formules et les textes affichés sont fictifs et illustratifs, et la passerelle de paiement fonctionne en mode test : rien n'est jamais débité. Merci de votre compréhension.",
      "cta": "J'ai compris, continuer"
    },
    "payment": {
      "title": "Le paiement est en mode test",
      "p1": "Ce site est un projet d'entraînement sans activité économique : rien n'y est vendu et aucune facture n'est émise.",
      "p2": "La page de paiement Stripe que vous allez voir fonctionne en mode test et n'accepte aucun paiement réel : n'entrez pas les données d'une vraie carte, aucun débit ne sera traité.",
      "p3": "Vous pouvez continuer uniquement pour voir le fonctionnement du parcours, ou annuler et poursuivre votre visite.",
      "cta": "Continuer vers le paiement de test",
      "cancel": "Annuler"
    },
    "contact": {
      "title": "L'activité n'est pas ouverte",
      "p1": "QRinvites est un projet personnel d'entraînement au développement web, sans activité économique ni professionnelle.",
      "p2": "Aucun service n'est fourni et il n'est pas possible d'en commander : il n'existe donc ni canal de contact ni devis.",
      "p3": "Vous pouvez continuer à naviguer et essayer librement l’éditeur : tout ce que vous voyez est une démonstration technique.",
      "cta": "J'ai compris"
    },
    "legalBanner": {
      "title": "Projet d'entraînement sans activité économique",
      "b1": "Ce site est un exercice personnel de développement web. L'activité n'est pas ouverte, aucun service n'est fourni et il n'y a aucune activité économique ni professionnelle derrière : les prix et les formules sont fictifs et la passerelle de paiement est en mode test.",
      "b2": "Ce document est publié uniquement dans le cadre de cet exercice et ne crée aucune relation commerciale. Aucune coordonnée n'est publiée puisqu'il n'y a pas d'activité en fonctionnement."
    }
  },
  "legal": {
    "updated": "Dernière mise à jour : 27 juillet 2026",
    "notice": {
      "title": "Mentions légales",
      "s1t": "Propriétaire du site",
      "s1b": "QRinvites (qrinvites.com) est un projet personnel d'entraînement au développement web. Ce n'est pas une activité en fonctionnement : aucun service n'est fourni, il n'y a aucune activité économique ni professionnelle derrière le site, et son auteur n'exerce ni comme indépendant ni comme entreprise. C'est pourquoi aucune coordonnée commerciale n'est publiée.",
      "s2t": "Objet",
      "s2b": "Le site permet de créer, publier et partager le site d’un mariage — invitation numérique avec QR code et confirmations — avec un tableau de bord privé pour les mariés. C’est un produit à paiement unique. Aujourd’hui, tout cela fonctionne uniquement à titre de démonstration : la passerelle de paiement est en mode test et aucun débit n’est effectué.",
      "s3t": "Propriété intellectuelle",
      "s3b": "Le design, le code et les contenus du site appartiennent à leur propriétaire. Le contenu de chaque invitation (textes, noms, dates) appartient à l'utilisateur qui la crée, qui en est responsable.",
      "s4t": "Responsabilité",
      "s4b": "Le propriétaire s'efforce de maintenir le service disponible et sûr, mais ne peut garantir l'absence totale d'interruptions. L'utilisateur est responsable du contenu qu'il publie et de disposer de l'autorisation des personnes dont il inclut les données.",
      "s5t": "Droit applicable",
      "s5b": "Ce site est régi par le droit espagnol et européen. Tout litige sera porté devant les tribunaux compétents conformément à la loi.",
      "description": "Mentions légales de QRinvites : titulaire du site, objet, propriété intellectuelle et responsabilité. Projet d'entraînement sans activité économique."
    },
    "privacy": {
      "title": "Politique de confidentialité",
      "s1t": "Responsable",
      "s1b": "Ce site est un projet personnel d'entraînement sans activité économique, et aucune coordonnée n'y est publiée. Néanmoins, l'essai de l'application traite certaines données : cette politique explique lesquelles, pourquoi et sur quelle base légale, conformément au RGPD. Vous pouvez supprimer vous-même votre compte et tout son contenu depuis votre tableau de bord, à tout moment.",
      "s2t": "Données traitées",
      "s2b": "Compte : votre e-mail Google à la connexion. Invitations : les textes que vous écrivez (noms, dates, lieux, histoire). Confirmations des invités : nom, présence, accompagnants, menu, notes et, seulement si l'hôte l'active, allergies ou intolérances. Paiements : gérés par Stripe ; nous conservons le montant, le statut et un identifiant, jamais votre carte. Statistiques internes : événements d'usage avec un identifiant aléatoire local, sans cookies tiers ni pistage entre sites.",
      "s3t": "Allergies : données de santé",
      "s3b": "Les allergies et intolérances sont des données de santé (catégorie particulière du RGPD). Elles ne sont collectées que si l'hôte active cette question et si l'invité choisit d'y répondre (consentement explicite), servent exclusivement à organiser l'événement, ne sont visibles que par l'hôte et sont supprimées avec l'invitation.",
      "s4t": "Base légale et finalités",
      "s4b": "Exécution du service (créer et afficher les invitations, gérer confirmations et paiements), consentement explicite (allergies) et intérêt légitime (statistiques internes sans identifier les personnes, et sécurité du service).",
      "s5t": "Sous-traitants et destinataires",
      "s5b": "Nous utilisons des prestataires agissant comme sous-traitants : Supabase (base de données et authentification, région UE-Irlande), Cloudflare (hébergement et diffusion), Stripe (paiements) et Google (connexion). Nous ne vendons pas les données et ne les partageons pas à des fins publicitaires.",
      "s6t": "Conservation",
      "s6b": "Supprimer une invitation efface immédiatement et définitivement l'invitation et toutes ses confirmations. Supprimer votre compte (option visible dans votre espace) efface votre compte, vos invitations et leurs confirmations ; le registre comptable des paiements est conservé anonymisé.",
      "s7t": "Vos droits",
      "s7b": "Vous pouvez exercer vos droits d'accès, de rectification, d'effacement, d'opposition, de limitation et de portabilité par la voie la plus directe : depuis votre tableau de bord, vous pouvez consulter et corriger vos données, et la suppression du compte efface immédiatement et définitivement tout votre contenu. En l'absence d'activité économique, aucune adresse de contact n'est publiée. Vous pouvez également saisir votre autorité de protection des données.",
      "s8t": "Transferts internationaux",
      "s8b": "Certains sous-traitants (Cloudflare, Stripe et Google) peuvent traiter des données en dehors de l’Espace économique européen. Le cas échéant, le transfert repose sur des décisions d’adéquation ou sur les clauses contractuelles types de la Commission européenne, qui garantissent un niveau de protection équivalent.",
      "description": "Quelles données QRinvites traite, pourquoi et sur quelle base légale, conformément au RGPD. Vous supprimez votre compte depuis votre tableau de bord."
    },
    "cookies": {
      "title": "Politique de cookies",
      "s1t": "Ce que nous utilisons",
      "s1b": "Nous n’utilisons ni cookies publicitaires ni cookies tiers. La seule chose enregistrée dans votre navigateur est un stockage local technique indispensable : votre session, le brouillon de votre invitation et un identifiant aléatoire de notre analyse interne, qui ne permet pas de vous identifier et ne vous suit pas sur d’autres sites.",
      "s2t": "Quand vous verrez un avis",
      "s2b": "Il n’y a aucun cookie non indispensable à consentir : pas de publicité, pas de pixels de suivi, et nous ne partageons jamais votre navigation avec des tiers. C’est pourquoi aucune bannière ne vous interrompt.",
      "s3t": "Si cela change",
      "s3b": "Le site n’affiche aucune publicité tierce sur aucune de ses pages. Si cela changeait, nous mettrions cette page à jour et demanderions votre consentement avant de charger quoi que ce soit.",
      "description": "QRinvites n'utilise ni cookies publicitaires ni cookies tiers : seulement le stockage local technique indispensable. D'où l'absence de bandeau."
    },
    "terms": {
      "title": "Conditions d'utilisation",
      "s1t": "Le service",
      "s1b": "QRinvites permet de créer et publier le site d’un mariage avec lien unique et QR code, avec confirmations et tableau de bord des invités. La publication exige une connexion avec Google. Aujourd’hui, tout cela fonctionne uniquement à titre de démonstration : il n’y a aucune activité économique et les paiements sont en mode test, sans débit réel.",
      "s2t": "Invitations",
      "s2b": "Créer et modifier le site de votre mariage est gratuit et ne demande aucun compte, avec toutes les fonctions disponibles. Le publier exige une connexion avec Google — pour qu’il soit associé à votre profil et que vous puissiez le gérer — et un paiement unique de 20 €. Une fois publié, le site et son tableau de bord restent actifs tant qu’il existe, sans limite de durée, de visites ni d’invités.",
      "s3t": "Suppression et renonciation",
      "s3b": "Supprimer une invitation est immédiat et définitif : l’invitation et ses confirmations sont effacées. Si elle était payée, la supprimer implique de renoncer expressément au montant versé, sans droit à remboursement ; l’application exige de cocher cette renonciation avant la suppression.",
      "s4t": "Contenu de l'utilisateur",
      "s4b": "Vous êtes responsable du contenu de vos invitations et de disposer de l'autorisation des personnes dont vous incluez les données. Le contenu illégal, offensant ou usurpant l'identité d'autrui est interdit ; nous pouvons retirer des invitations ou suspendre des comptes qui enfreignent ces règles.",
      "s5t": "Modifications",
      "s5b": "Nous pouvons mettre à jour ces conditions ; les changements importants seront annoncés sur le site. Utiliser le service après un changement vaut acceptation.",
      "description": "Conditions du service QRinvites : ce que contient le site de mariage, le paiement unique, la suppression définitive et les règles de contenu."
    }
  },
  "demoPanel": {
    "title": "Tableau de bord d’exemple d’un vrai mariage",
    "description": "Entrez dans le tableau de bord QRinvites avec un mariage de 200 invités : réponses, tables, menus, navettes, veille. Le vrai, en démonstration."
  }
}
