// i18n — Translations + LangContext for FR / GE (Kartuli) / DE.
// Loaded BEFORE every component that calls useT(). The lang code matches the
// LangGate values: 'fr' | 'ge' | 'de'.

window.LangContext = React.createContext('fr');

window.useT = () => {
  const lang = React.useContext(window.LangContext);
  return window.TRANSLATIONS[lang] || window.TRANSLATIONS.fr;
};

// Photo grid memories — 9 hand-picked moments, translated date labels.
// `src` is shared across languages; only the captions change. The aspect-ratio
// is also locked per slot so the masonry rhythm is identical in every language.
const PHOTO_SLOTS = [
  { src: 'images/hero/01.jpg', tone: '#a8b89a', ar: '4/5' },  // col 0 row 0 — Tbilisi cathédrale
  { src: 'images/hero/02.jpg', tone: '#c8b890', ar: '4/5' },  // col 1 row 0 — au soleil
  { src: 'images/hero/03.jpg', tone: '#7a8b6f', ar: '1/1' },  // col 2 row 0 — coucher de soleil
  { src: 'images/hero/04.jpg', tone: '#5c6e54', ar: '5/6' },  // col 0 row 1 — la demande
  { src: 'images/hero/05.jpg', tone: '#9aab8f', ar: '1/1' },  // col 1 row 1 — ensemble
  { src: 'images/hero/06.jpg', tone: '#d4c4a3', ar: '4/5' },  // col 2 row 1 — en famille
  { src: 'images/hero/07.jpg', tone: '#a8b89a', ar: '1/1' },  // col 0 row 2 — la fête
  { src: 'images/hero/08.jpg', tone: '#3d4a36', ar: '4/5' },  // col 1 row 2 — un soir
  { src: 'images/hero/09.jpg', tone: '#7a8b6f', ar: '4/5' },  // col 2 row 2 — premier appart
];

const buildPhotos = (captions) => PHOTO_SLOTS.map((slot, i) => ({ ...slot, ...captions[i] }));

const PHOTOS_FR = buildPhotos([
  { lbl: 'Tbilissi',         d: 'Géorgie' },
  { lbl: 'Au soleil',        d: 'Été' },
  { lbl: 'Au crépuscule',    d: 'Bretagne' },
  { lbl: 'La demande',       d: 'En mer' },
  { lbl: 'Ensemble',         d: "Aujourd'hui" },
  { lbl: 'En famille',       d: 'Normandie' },
  { lbl: 'La fête',          d: 'Premier anniversaire' },
  { lbl: 'Un soir',          d: 'À trois' },
  { lbl: 'Premier appart',   d: 'Paris' },
]);

const PHOTOS_GE = buildPhotos([
  { lbl: 'Tbilissi',         d: 'Géorgie' },
  { lbl: 'მზის ქვეშ',       d: 'ზაფხული' },
  { lbl: 'მზის ჩასვლისას',  d: 'Bretagne' },
  { lbl: 'შემოთავაზება',    d: 'ზღვაზე' },
  { lbl: 'ერთად',           d: 'დღეს' },
  { lbl: 'ოჯახი',           d: 'Normandie' },
  { lbl: 'დღესასწაული',     d: 'პირველი დაბადების დღე' },
  { lbl: 'საღამო',          d: 'სამნი' },
  { lbl: 'პირველი ბინა',    d: 'Paris' },
]);

const PHOTOS_DE = buildPhotos([
  { lbl: 'Tbilissi',         d: 'Géorgie' },
  { lbl: 'In der Sonne',     d: 'Sommer' },
  { lbl: 'Im Sonnenuntergang', d: 'Bretagne' },
  { lbl: 'Der Antrag',       d: 'Auf See' },
  { lbl: 'Zusammen',         d: 'Heute' },
  { lbl: 'Familie',          d: 'Normandie' },
  { lbl: 'Das Fest',         d: 'Erster Geburtstag' },
  { lbl: 'Ein Abend',        d: 'Zu dritt' },
  { lbl: 'Erste Wohnung',    d: 'Paris' },
]);

window.TRANSLATIONS = {
  fr: {
    common: {
      bride: 'Justine',
      groom: 'Levani',
      date_day: '05-06',
      date_month: 'septembre',
      date_year: '2026',
      place: 'Paris · Chaumont-sur-Yonne',
      a11y_couple: 'Justine et Levani',
      a11y_countdown: 'Compte à rebours',
    },
    hero: {
      photos: PHOTOS_FR,
      eyebrow: 'Le mariage de',
      cd_d: 'j', cd_h: 'h', cd_m: 'm', cd_s: 's',
    },
    ceremony: {
      eyebrow_num: 'I',
      eyebrow: 'Cérémonie',
      title_main: 'Cathédrale',
      title_em: 'Saint-Stéphane',
      subtitle: 'Paris · 16ᵉ arrondissement',
      intro: ['Dans le rite géorgien orthodoxe,', 'bénis par le Père Artchile Davrichachvili,', 'nous échangerons nos vœux.'],
      lbl_address: 'Adresse',
      val_address: ['7 Rue Georges Bizet', '75016 Paris'],
      lbl_welcome: 'Accueil',
      val_welcome_time: '13h30',
      val_welcome_em: 'Arrivée des invités',
      lbl_office: 'Office',
      val_office_time: '14h00',
      val_office_em: 'Cérémonie religieuse',
      lbl_metro: 'Métro',
      val_metro: [
        { name: 'Iéna', sub: 'L9 · 4 min à pied' },
        { name: 'Alma-Marceau', sub: 'L9 · 6 min à pied' },
      ],
      lbl_parking: 'Parkings',
      val_parking: [
        { name: 'Parking Indigo Paris Alma George V' },
        { name: 'Parking Alma George V' },
      ],
      quote: 'Et de deux cœurs, un seul',
    },
    journey: {
      eyebrow: 'Le Voyage',
      title_main: 'Paris',
      title_em: 'vers',
      title_to: 'Bourgogne',
      subtitle: '130 km · 1h45 de route',
      intro: ['Quittez la capitale, traversez l’Yonne,', 'suivez la rivière jusqu’à nous.'],
      pin_paris: 'Paris',
      pin_paris_sub: 'le départ',
      pin_sens: 'Sens',
      pin_sens_sub: 'on traverse',
      pin_chaumont: 'Chaumont-sur-Yonne',
      pin_chaumont_sub: 'le château',
      stat_km: 'km',
      stat_duration_label: 'trajet',
      stat_highway_label: 'autoroute',
    },
    reception: {
      eyebrow_num: 'II',
      eyebrow: 'Réception',
      title_main: 'Château',
      title_em: 'Chaumont-sur-Yonne',
      subtitle: 'Domaine privé · Bourgogne',
      intro: ['Gaumarjos! Santé! Prost!', 'Au fil des mets, levez votre verre.'],
      lbl_address: 'Adresse',
      val_address: 'Château de Chaumont',
      val_address_em: '5 Rue de la Montagne · 89340 Chaumont-sur-Yonne',
      quote: 'Sous les étoiles de Bourgogne',
    },
    timeline: {
      eyebrow_num: 'III',
      eyebrow: 'La Soirée',
      title_main: 'Au fil',
      title_em: 'des heures',
      subtitle: 'du crépuscule à l’aube',
      events: [
        { time: '18h00', title: 'Cocktail',         sub: 'Sur la terrasse, au soleil couchant', icon: '✦' },
        { time: '20h00', title: 'Dîner',            sub: 'Banquet géorgien — supra & vin de Kakheti', icon: '◇' },
        { time: '23h00', title: 'Ouverture du bal', sub: 'Première danse', icon: '✧' },
        { time: 'Late',  title: 'Jusqu’au bout', sub: 'La fête ne s’arrête pas', icon: '☾' },
      ],
    },
    practical: {
      eyebrow: 'Informations',
      title_main: 'Le',
      title_em: 'pratique',
      subtitle: 'tout est prévu pour vous',
      myroom_cta: 'Trouver ma chambre',
      myroom_cta_sub: 'Plan & numéro de chambre',
      items: [
        { tag: 'IV', label: 'Hébergement', title: 'Sur place',
          body: 'Une chambre attribuée à chaque invité au château.',
          detail: 'Affectation communiquée à l’arrivée · clés remises au check-in' },
        { tag: 'V', label: 'Parking', title: 'Au château',
          body: 'Stationnement libre dans la cour du domaine.',
          detail: 'Accès direct depuis l’allée principale · pas de réservation' },
        { tag: 'VI', label: 'Enfants', title: 'Babysitter',
          body: 'Disponible sur place toute la soirée.',
          detail: 'Coin enfants aménagé · espace nuit calme' },
      ],
    },
    dress: {
      eyebrow_num: 'VII',
      eyebrow: 'Dress Code',
      title_main: 'Chic',
      title_em: '&',
      title_extra: 'élégant',
      subtitle: 'pas de thème · couleurs douces',
      intro: ['Aucun thème particulier — laissez parler votre élégance.', 'Évitez simplement les couleurs trop vives.'],
      pal_fav_h: 'À favoriser · tons doux',
      pal_fav_cap: 'Sauge, terre, ivoire, marine, ardoise…',
      pal_avoid_h: 'À éviter · couleurs vives',
      pal_avoid_cap: ['Rouges éclatants, néons, fluos.', 'Évitez aussi le blanc & l’ivoire pur.'],
    },
    weather: {
      label: 'Bourgogne · début septembre',
      temp_em: 'doux',
    },
    brunch: {
      eyebrow_num: 'IV',
      eyebrow: 'Le lendemain',
      script: 'Dimanche',
      title_main: 'Brunch',
      title_em: '&',
      title_extra: 'journée chill',
      subtitle: '06 · 09 · 2026',
      lbl_time: 'Heure',
      time_arrow: 'jusqu’à',
      lbl_place: 'Lieu',
      place: 'Au domaine, sur l’herbe',
      meta: ['Buffet matinal, café et retrouvailles.', 'Une journée tranquille pour prolonger la fête,', 'jusqu’au coucher du soleil.'],
    },
    closing: {
      script: 'À très bientôt',
      message: ['Nous serions honorés de vous compter', 'parmi nous pour célébrer notre union.'],
      lang_fr: 'Avec amour',
      lang_ge: 'სიყვარულით',
      lang_de: 'Mit Liebe',
      foot: '— Save the Date —',
    },
    audio: {
      activate: 'Activer la musique',
      mute: 'Couper la musique',
      tip_off: 'Qartuli ♪',
      tip_on: 'En cours',
    },
    myroom: {
      doc_title: 'Votre chambre — Justine & Levani',
      eyebrow: 'Votre chambre',
      title_main: 'Où dormirez-',
      title_em: 'vous ?',
      search_placeholder: 'Tapez votre nom…',
      search_aria: 'Rechercher votre nom',
      search_clear_aria: 'Effacer',
      search_empty: 'Aucun nom ne correspond',
      search_empty_sub: 'essayez avec votre prénom seul',
      meta_wing: 'Aile',
      meta_shared: 'partagée',
      empty_hint: ['Une chambre vous a été attribuée', 'au Château de Chaumont. Tapez votre nom', 'pour la découvrir.'],
      greeting: 'Bienvenue',
      room_prefix: 'Votre chambre',
      plan_title: 'Plan du château',
      plan_room_label: '№',
      plan_aria: 'Plan interactif du château',
      hint_pinch: 'pincez ou faites glisser',
      btn_zoom_in: 'Zoomer',
      btn_zoom_out: 'Dézoomer',
      btn_target: 'Cibler votre chambre',
      btn_fit: 'Vue complète',
      stat_wing: 'Aile',
      stat_floor: 'Étage',
      stat_view: 'Vue',
      floor_short_0: 'RDC',
      floor_short_1: '1ᵉʳ',
      floor_short_2: '2ᵉ',
      floor_long_0: 'Rez-de-chaussée',
      floor_long_1: '1ᵉʳ étage',
      floor_long_2: '2ᵉ étage',
      floor_long_annex: 'Annexe',
      with_label: 'Dans la chambre',
      person_singular: 'personne',
      person_plural: 'personnes',
      how_label: 'Pour vous y rendre',
      reset_label: 'Rechercher un autre nom',
      wing_south: 'Sud',
      wing_center: 'Centre',
      wing_north: 'Nord',
      wing_annex: 'Annexe',
      view_park: 'Parc',
      view_court: "Cour d'honneur",
      view_garden: 'Jardin',
      view_corridor: 'Côté couloir',
      view_dormitory: 'Dortoir',
      view_terrace: 'Terrasse',
      view_oldbuilding: 'Bâtiment ancien',
      view_family: 'Suite familiale',
      view_courtyard: 'Cour',
      note_groundfloor: 'Accès plain-pied — depuis la cour',
      note_dormitory: 'Dortoir — couchages partagés',
      note_annex: 'Annexe — corps ancien, à 2 min de la cour',
      note_family_room: 'Chambre familiale — lits adaptés',
      // Directions par couple wing+floor — couvre toutes les chambres.
      directions: {
        south_1:  "Aile Sud, 1ᵉʳ étage. Escalier au fond de la cour.",
        center_1: "Corps principal, 1ᵉʳ étage. Escalier central depuis l'entrée.",
        center_2: "Corps principal, 2ᵉ étage. Escalier central jusqu'en haut.",
        north_0:  "Aile Nord, rez-de-chaussée. Accès direct depuis la cour, plain-pied.",
        north_1:  "Aile Nord, 1ᵉʳ étage. Escalier à droite de la cour.",
        annex:    "Sortir de la cour côté Nord-Est, suivre le passage extérieur — 2 min à pied.",
      },
    },
  },

  ge: {
    common: {
      bride: 'ჟუსტინ',
      groom: 'ლევანი',
      date_day: '05-06',
      date_month: 'სექტემბერი',
      date_year: '2026',
      place: 'Paris · Chaumont-sur-Yonne',
      a11y_couple: 'ჟუსტინ და ლევანი',
      a11y_countdown: 'უკუთვლა',
    },
    hero: {
      photos: PHOTOS_GE,
      eyebrow: 'ქორწილი',
      cd_d: 'დღე', cd_h: 'სთ', cd_m: 'წთ', cd_s: 'წმ',
    },
    ceremony: {
      eyebrow_num: 'I',
      eyebrow: 'ცერემონია',
      title_main: 'ტაძარი',
      title_em: 'Saint-Stéphane',
      subtitle: 'Paris · მე-16 უბანი',
      intro: ['ქართული მართლმადიდებლური წესით,', 'მამა არჩილ დავრიჩაშვილის კურთხევით,', 'აღთქმას გავცვლით.'],
      lbl_address: 'მისამართი',
      val_address: ['7 Rue Georges Bizet', '75016 Paris'],
      lbl_welcome: 'მიღება',
      val_welcome_time: '13:30',
      val_welcome_em: 'სტუმრების მიღება',
      lbl_office: 'წირვა',
      val_office_time: '14:00',
      val_office_em: 'რელიგიური ცერემონია',
      lbl_metro: 'მეტრო',
      val_metro: [
        { name: 'Iéna', sub: 'ლ9 · 4 წთ ფეხით' },
        { name: 'Alma-Marceau', sub: 'ლ9 · 6 წთ ფეხით' },
      ],
      lbl_parking: 'პარკინგი',
      val_parking: [
        { name: 'Parking Indigo Paris Alma George V' },
        { name: 'Parking Alma George V' },
      ],
      quote: 'და ორი გულიდან ერთი',
    },
    journey: {
      eyebrow: 'მგზავრობა',
      title_main: 'Paris',
      title_em: 'Bourgogne',
      title_to: 'მიმართულებით',
      subtitle: '130 კმ · 1სთ 45წთ მგზავრობა',
      intro: ['დატოვეთ დედაქალაქი, გადაკვეთეთ Yonne,', 'გაჰყევით მდინარეს ჩვენამდე.'],
      pin_paris: 'Paris',
      pin_paris_sub: 'გასვლა',
      pin_sens: 'Sens',
      pin_sens_sub: 'გავდივართ',
      pin_chaumont: 'Chaumont-sur-Yonne',
      pin_chaumont_sub: 'სასახლე',
      stat_km: 'კმ',
      stat_duration_label: 'მგზავრობა',
      stat_highway_label: 'მაგისტრალი',
    },
    reception: {
      eyebrow_num: 'II',
      eyebrow: 'მიღება',
      title_main: 'სასახლე',
      title_em: 'Chaumont-sur-Yonne',
      subtitle: 'კერძო მამული · Bourgogne',
      intro: ['გაუმარჯოს! Santé! Prost!', 'კერძების მსვლელობისას, აღმართეთ თქვენი სასმისი.'],
      lbl_address: 'მისამართი',
      val_address: 'Château de Chaumont',
      val_address_em: '5 Rue de la Montagne · 89340 Chaumont-sur-Yonne',
      quote: 'Bourgogne-ის ვარსკვლავთა ქვეშ',
    },
    timeline: {
      eyebrow_num: 'III',
      eyebrow: 'საღამო',
      title_main: 'საათების',
      title_em: 'მსვლელობისას',
      subtitle: 'მზის ჩასვლიდან გათენებამდე',
      events: [
        { time: '18:00', title: 'კოქტეილი',     sub: 'ტერასაზე, მზის ჩასვლისას', icon: '✦' },
        { time: '20:00', title: 'ვახშამი',      sub: 'ქართული ბანკეტი — სუფრა და Kakheti-ს ღვინო', icon: '◇' },
        { time: '23:00', title: 'ცეკვის გახსნა',sub: 'პირველი ცეკვა', icon: '✧' },
        { time: 'გვიან', title: 'ბოლომდე',      sub: 'წვეულება არ ჩერდება', icon: '☾' },
      ],
    },
    practical: {
      eyebrow: 'ინფორმაცია',
      title_main: 'პრაქტიკული',
      title_em: 'ინფორმაცია',
      subtitle: 'ყველაფერი თქვენთვის მოწყობილია',
      myroom_cta: 'იხილეთ თქვენი ოთახი',
      myroom_cta_sub: 'გეგმა და ოთახის ნომერი',
      items: [
        { tag: 'IV', label: 'საცხოვრებელი', title: 'ადგილზე',
          body: 'თითოეულ სტუმარს ეთმობა ოთახი სასახლეში.',
          detail: 'ოთახი ცნობილი იქნება ჩამოსვლისას · გასაღები გადაცემული იქნება check-in-ზე' },
        { tag: 'V', label: 'პარკინგი', title: 'სასახლეში',
          body: 'უფასო პარკინგი მამულის ეზოში.',
          detail: 'პირდაპირი შესვლა მთავარი ალეიდან · დაჯავშნა არ არის საჭირო' },
        { tag: 'VI', label: 'ბავშვები', title: 'ძიძა',
          body: 'ხელმისაწვდომია ადგილზე მთელი საღამოს განმავლობაში.',
          detail: 'ბავშვების მოსაცდელი · მშვიდი საძილე სივრცე' },
      ],
    },
    dress: {
      eyebrow_num: 'VII',
      eyebrow: 'ჩაცმის სტილი',
      title_main: 'შიკი',
      title_em: '&',
      title_extra: 'ელეგანტური',
      subtitle: 'უთემო · რბილი ფერები',
      intro: ['კონკრეტული თემა არ არის — გამოვლინდეს თქვენი ელეგანტურობა.', 'უბრალოდ მოერიდეთ ძალიან კაშკაშა ფერებს.'],
      pal_fav_h: 'რეკომენდებული · რბილი ტონები',
      pal_fav_cap: 'სალბი, მიწა, სპილოს ძვალი, ლურჯი, ფიქალი…',
      pal_avoid_h: 'მოერიდეთ · კაშკაშა ფერებს',
      pal_avoid_cap: ['კაშკაშა წითელი, ნეონი, ფლუო.', 'მოერიდეთ ასევე თეთრს და სუფთა სპილოს ძვალს.'],
    },
    weather: {
      label: 'Bourgogne · სექტემბრის დასაწყისი',
      temp_em: 'რბილი',
    },
    brunch: {
      eyebrow_num: 'IV',
      eyebrow: 'მეორე დღეს',
      script: 'კვირა',
      title_main: 'ბრანჩი',
      title_em: '&',
      title_extra: 'მშვიდი დღე',
      subtitle: '06 · 09 · 2026',
      lbl_time: 'დრო',
      time_arrow: 'მდე',
      lbl_place: 'ადგილი',
      place: 'მამულში, ბალახზე',
      meta: ['დილის ბუფეტი, ყავა და შეხვედრები.', 'მშვიდი დღე დღესასწაულის გასაგრძელებლად,', 'მზის ჩასვლამდე.'],
    },
    closing: {
      script: 'მალე ვნახოთ',
      message: ['პატივად ჩავთვლით თქვენს მოსვლას,', 'რომ ერთად აღვნიშნოთ ჩვენი კავშირი.'],
      lang_fr: 'Avec amour',
      lang_ge: 'სიყვარულით',
      lang_de: 'Mit Liebe',
      foot: '— Save the Date —',
    },
    audio: {
      activate: 'მუსიკის ჩართვა',
      mute: 'მუსიკის გათიშვა',
      tip_off: 'ქართული ♪',
      tip_on: 'უკრავს',
    },
    myroom: {
      doc_title: 'თქვენი ოთახი — ჟუსტინ და ლევანი',
      eyebrow: 'თქვენი ოთახი',
      title_main: 'სად',
      title_em: 'დაიძინებთ?',
      search_placeholder: 'აკრიფეთ თქვენი სახელი…',
      search_aria: 'სახელის ძიება',
      search_clear_aria: 'წაშლა',
      search_empty: 'სახელი ვერ მოიძებნა',
      search_empty_sub: 'სცადეთ მხოლოდ სახელით',
      meta_wing: 'ფრთა',
      meta_shared: 'საერთო',
      empty_hint: ['თქვენთვის ოთახია გამოყოფილი', 'Château de Chaumont-ში. აკრიფეთ თქვენი სახელი', 'მის სანახავად.'],
      greeting: 'მოგესალმებით',
      room_prefix: 'თქვენი ოთახი',
      plan_title: 'სასახლის გეგმა',
      plan_room_label: '№',
      plan_aria: 'სასახლის ინტერაქტიული გეგმა',
      hint_pinch: 'მოიქაჩეთ ან გადაიტანეთ',
      btn_zoom_in: 'გადიდება',
      btn_zoom_out: 'დაპატარავება',
      btn_target: 'თქვენი ოთახის გამოყოფა',
      btn_fit: 'სრული ხედი',
      stat_wing: 'ფრთა',
      stat_floor: 'სართული',
      stat_view: 'ხედი',
      floor_short_0: 'პირ.',
      floor_short_1: 'I',
      floor_short_2: 'II',
      floor_long_0: 'პირველი სართული',
      floor_long_1: 'მე-2 სართული',
      floor_long_2: 'მე-3 სართული',
      floor_long_annex: 'დანართი',
      with_label: 'ოთახში',
      person_singular: 'ადამიანი',
      person_plural: 'ადამიანი',
      how_label: 'როგორ მოხვდეთ',
      reset_label: 'სხვა სახელის ძიება',
      wing_south: 'სამხრეთი',
      wing_center: 'ცენტრი',
      wing_north: 'ჩრდილოეთი',
      wing_annex: 'დანართი',
      view_park: 'პარკი',
      view_court: 'საპატიო ეზო',
      view_garden: 'ბაღი',
      view_corridor: 'დერეფნის მხარეს',
      view_dormitory: 'საერთო საძილე',
      view_terrace: 'ტერასა',
      view_oldbuilding: 'ძველი შენობა',
      view_family: 'საოჯახო ლუქსი',
      view_courtyard: 'ეზო',
      note_groundfloor: 'საფეხურების გარეშე — პირდაპირ ეზოდან',
      note_dormitory: 'საერთო საძილე — საერთო საწოლები',
      note_annex: 'დანართი — ძველი კორპუსი, ეზოდან 2 წუთის სავალზე',
      note_family_room: 'საოჯახო ოთახი — ადაპტირებული საწოლები',
      directions: {
        south_1:  'სამხრეთის ფრთა, I სართული. კიბე ეზოს ბოლოში.',
        center_1: 'მთავარი კორპუსი, I სართული. ცენტრალური კიბე შესასვლელიდან.',
        center_2: 'მთავარი კორპუსი, II სართული. ცენტრალური კიბით ბოლომდე.',
        north_0:  'ჩრდილოეთის ფრთა, პირველი სართული. პირდაპირი შესასვლელი ეზოდან, საფეხურების გარეშე.',
        north_1:  'ჩრდილოეთის ფრთა, I სართული. კიბე ეზოს მარჯვენა მხარეს.',
        annex:    'ეზოდან გადით ჩრდილო-აღმოსავლეთით, გაჰყევით გარე გასასვლელს — 2 წუთი ფეხით.',
      },
    },
  },

  de: {
    common: {
      bride: 'Justine',
      groom: 'Levani',
      date_day: '05-06',
      date_month: 'September',
      date_year: '2026',
      place: 'Paris · Chaumont-sur-Yonne',
      a11y_couple: 'Justine und Levani',
      a11y_countdown: 'Countdown',
    },
    hero: {
      photos: PHOTOS_DE,
      eyebrow: 'Die Hochzeit von',
      cd_d: 'T', cd_h: 'h', cd_m: 'm', cd_s: 's',
    },
    ceremony: {
      eyebrow_num: 'I',
      eyebrow: 'Trauung',
      title_main: 'Kathedrale',
      title_em: 'Saint-Stéphane',
      subtitle: 'Paris · 16. Arrondissement',
      intro: ['Im georgisch-orthodoxen Ritus,', 'gesegnet von Pater Artschil Dawritschaschwili,', 'tauschen wir unsere Gelübde aus.'],
      lbl_address: 'Adresse',
      val_address: ['7 Rue Georges Bizet', '75016 Paris'],
      lbl_welcome: 'Empfang',
      val_welcome_time: '13:30',
      val_welcome_em: 'Ankunft der Gäste',
      lbl_office: 'Trauung',
      val_office_time: '14:00',
      val_office_em: 'Religiöse Zeremonie',
      lbl_metro: 'Metro',
      val_metro: [
        { name: 'Iéna', sub: 'L9 · 4 Min. zu Fuß' },
        { name: 'Alma-Marceau', sub: 'L9 · 6 Min. zu Fuß' },
      ],
      lbl_parking: 'Parkplätze',
      val_parking: [
        { name: 'Parking Indigo Paris Alma George V' },
        { name: 'Parking Alma George V' },
      ],
      quote: 'Aus zwei Herzen, eins',
    },
    journey: {
      eyebrow: 'Die Reise',
      title_main: 'Paris',
      title_em: 'nach',
      title_to: 'Bourgogne',
      subtitle: '130 km · 1h45 Fahrt',
      intro: ['Verlassen Sie die Hauptstadt, überqueren Sie die Yonne,', 'folgen Sie dem Fluss bis zu uns.'],
      pin_paris: 'Paris',
      pin_paris_sub: 'der Start',
      pin_sens: 'Sens',
      pin_sens_sub: 'wir fahren durch',
      pin_chaumont: 'Chaumont-sur-Yonne',
      pin_chaumont_sub: 'das Schloss',
      stat_km: 'km',
      stat_duration_label: 'Fahrt',
      stat_highway_label: 'Autobahn',
    },
    reception: {
      eyebrow_num: 'II',
      eyebrow: 'Empfang',
      title_main: 'Schloss',
      title_em: 'Chaumont-sur-Yonne',
      subtitle: 'Privatdomäne · Bourgogne',
      intro: ['Gaumarjos! Santé! Prost!', 'Erheben Sie bei jedem Gang Ihr Glas.'],
      lbl_address: 'Adresse',
      val_address: 'Château de Chaumont',
      val_address_em: '5 Rue de la Montagne · 89340 Chaumont-sur-Yonne',
      quote: 'Unter den Sternen der Bourgogne',
    },
    timeline: {
      eyebrow_num: 'III',
      eyebrow: 'Der Abend',
      title_main: 'Stunde',
      title_em: 'für Stunde',
      subtitle: 'von der Dämmerung bis zum Morgen',
      events: [
        { time: '18:00', title: 'Cocktail',          sub: 'Auf der Terrasse bei Sonnenuntergang', icon: '✦' },
        { time: '20:00', title: 'Abendessen',        sub: 'Georgisches Bankett — Supra & Wein aus Kakheti', icon: '◇' },
        { time: '23:00', title: 'Eröffnung des Balls', sub: 'Erster Tanz', icon: '✧' },
        { time: 'Spät',  title: 'Bis zum Ende',      sub: 'Das Fest hört nicht auf', icon: '☾' },
      ],
    },
    practical: {
      eyebrow: 'Informationen',
      title_main: 'Das',
      title_em: 'Praktische',
      subtitle: 'für Sie ist alles vorbereitet',
      myroom_cta: 'Mein Zimmer finden',
      myroom_cta_sub: 'Plan & Zimmernummer',
      items: [
        { tag: 'IV', label: 'Unterkunft', title: 'Vor Ort',
          body: 'Jedem Gast wird ein Zimmer im Schloss zugewiesen.',
          detail: 'Zuteilung bei Ankunft · Schlüssel beim Check-in' },
        { tag: 'V', label: 'Parkplatz', title: 'Am Schloss',
          body: 'Freies Parken im Innenhof der Domäne.',
          detail: 'Direkter Zugang über die Hauptallee · keine Reservierung nötig' },
        { tag: 'VI', label: 'Kinder', title: 'Babysitter',
          body: 'Den ganzen Abend vor Ort verfügbar.',
          detail: 'Kinderecke eingerichtet · ruhiger Schlafbereich' },
      ],
    },
    dress: {
      eyebrow_num: 'VII',
      eyebrow: 'Dresscode',
      title_main: 'Schick',
      title_em: '&',
      title_extra: 'elegant',
      subtitle: 'kein Thema · sanfte Farben',
      intro: ['Kein bestimmtes Thema — lassen Sie Ihre Eleganz sprechen.', 'Vermeiden Sie nur zu grelle Farben.'],
      pal_fav_h: 'Empfohlen · sanfte Töne',
      pal_fav_cap: 'Salbei, Erde, Elfenbein, Marine, Schiefer…',
      pal_avoid_h: 'Zu vermeiden · grelle Farben',
      pal_avoid_cap: ['Knallige Rottöne, Neon, Leuchtfarben.', 'Vermeiden Sie auch reines Weiß und Elfenbein.'],
    },
    weather: {
      label: 'Bourgogne · Anfang September',
      temp_em: 'mild',
    },
    brunch: {
      eyebrow_num: 'IV',
      eyebrow: 'Am nächsten Tag',
      script: 'Sonntag',
      title_main: 'Brunch',
      title_em: '&',
      title_extra: 'entspannter Tag',
      subtitle: '06 · 09 · 2026',
      lbl_time: 'Uhrzeit',
      time_arrow: 'bis',
      lbl_place: 'Ort',
      place: 'Auf dem Anwesen, im Gras',
      meta: ['Morgendliches Buffet, Kaffee und Wiedersehen.', 'Ein ruhiger Tag, um das Fest zu verlängern,', 'bis zum Sonnenuntergang.'],
    },
    closing: {
      script: 'Bis bald',
      message: ['Wir wären geehrt, Sie bei uns zu haben,', 'um unsere Verbindung zu feiern.'],
      lang_fr: 'Avec amour',
      lang_ge: 'სიყვარულით',
      lang_de: 'Mit Liebe',
      foot: '— Save the Date —',
    },
    audio: {
      activate: 'Musik aktivieren',
      mute: 'Musik stummschalten',
      tip_off: 'Qartuli ♪',
      tip_on: 'Spielt',
    },
    myroom: {
      doc_title: 'Ihr Zimmer — Justine & Levani',
      eyebrow: 'Ihr Zimmer',
      title_main: 'Wo schlafen',
      title_em: 'Sie?',
      search_placeholder: 'Geben Sie Ihren Namen ein…',
      search_aria: 'Nach Ihrem Namen suchen',
      search_clear_aria: 'Löschen',
      search_empty: 'Kein Name passt',
      search_empty_sub: 'versuchen Sie es nur mit Ihrem Vornamen',
      meta_wing: 'Flügel',
      meta_shared: 'geteilt',
      empty_hint: ['Ein Zimmer wurde Ihnen', 'im Château de Chaumont zugewiesen.', 'Geben Sie Ihren Namen ein, um es zu entdecken.'],
      greeting: 'Willkommen',
      room_prefix: 'Ihr Zimmer',
      plan_title: 'Schlossplan',
      plan_room_label: 'Nr.',
      plan_aria: 'Interaktiver Schlossplan',
      hint_pinch: 'pinchen oder ziehen',
      btn_zoom_in: 'Vergrößern',
      btn_zoom_out: 'Verkleinern',
      btn_target: 'Ihr Zimmer fokussieren',
      btn_fit: 'Gesamtansicht',
      stat_wing: 'Flügel',
      stat_floor: 'Etage',
      stat_view: 'Aussicht',
      floor_short_0: 'EG',
      floor_short_1: '1.',
      floor_short_2: '2.',
      floor_long_0: 'Erdgeschoss',
      floor_long_1: '1. Etage',
      floor_long_2: '2. Etage',
      floor_long_annex: 'Nebengebäude',
      with_label: 'Im Zimmer',
      person_singular: 'Person',
      person_plural: 'Personen',
      how_label: 'So gelangen Sie dorthin',
      reset_label: 'Anderen Namen suchen',
      wing_south: 'Süd',
      wing_center: 'Mitte',
      wing_north: 'Nord',
      wing_annex: 'Nebengebäude',
      view_park: 'Park',
      view_court: 'Ehrenhof',
      view_garden: 'Garten',
      view_corridor: 'Flurseite',
      view_dormitory: 'Schlafsaal',
      view_terrace: 'Terrasse',
      view_oldbuilding: 'Altbau',
      view_family: 'Familiensuite',
      view_courtyard: 'Hof',
      note_groundfloor: 'Ebenerdiger Zugang — direkt vom Hof',
      note_dormitory: 'Schlafsaal — geteilte Schlafplätze',
      note_annex: 'Nebengebäude — Altbau, 2 Min. vom Hof',
      note_family_room: 'Familienzimmer — angepasste Betten',
      directions: {
        south_1:  'Südflügel, 1. Etage. Treppe hinten im Hof.',
        center_1: 'Hauptgebäude, 1. Etage. Zentrale Treppe vom Eingang.',
        center_2: 'Hauptgebäude, 2. Etage. Zentrale Treppe bis nach oben.',
        north_0:  'Nordflügel, Erdgeschoss. Direkter Zugang vom Hof, ebenerdig.',
        north_1:  'Nordflügel, 1. Etage. Treppe rechts vom Hof.',
        annex:    'Vom Hof aus nach Nordosten, dem Außenweg folgen — 2 Min. zu Fuß.',
      },
    },
  },
};
