{
  "nav": {
    "templates": "Designs",
    "create": "Create your website",
    "dashboard": "My dashboard",
    "menu": "Menu",
    "invitations": "Invitations",
    "skipToContent": "Skip to content"
  },
  "home": {
    "title": "Wedding website with digital invitation and QR",
    "description": "Your wedding website for €20, one-time: a digital invitation with QR code and a dashboard for RSVPs, tables, menus, bus and pre-wedding party.",
    "hero": {
      "heading": "Your wedding website, with all the management included",
      "subheading": "A complete wedding website — cover, story, map, gallery and real-time RSVPs — that is also your digital invitation with QR code. And behind it, a private dashboard to manage it all: guests, tables, menus, buses and the pre-wedding party.",
      "cta": "Create your wedding website",
      "ctaSecondary": "See the designs",
      "badgeFree": "Design for free",
      "badgeNoSignup": "Start without signing up",
      "badgeNoCard": "One-time payment, no subscriptions",
      "scanMe": "Scan me",
      "ctaPricing": "See pricing",
      "micro": "Digital invitation with QR · Real-time RSVPs · Management dashboard",
      "scrollCue": "Scroll to see it all",
      "qrCta": "Tap here to see the live example"
    },
    "examples": {
      "heading": "This is how the wedding websites look",
      "sub": "These are not screenshots: they are the real templates running. Pick one and make it yours.",
      "use": "Use this template"
    },
    "includes": {
      "eyebrow": "All included",
      "heading": "Everything your wedding needs, on a single website",
      "sub": "No extras, no paid add-ons and no limits: every part switches on or off from the editor.",
      "cover": {
        "title": "Cover with your photo",
        "body": "The photo you choose, framed the way you want, with your names and the countdown to the big day."
      },
      "story": {
        "title": "Your story",
        "body": "How you met, told your way. It is the first thing anyone reads when the invitation arrives."
      },
      "schedule": {
        "title": "Timeline and venues",
        "body": "Ceremony, dinner and party with times, addresses and maps. Nobody asks where it is again."
      },
      "rsvp": {
        "title": "Replies in real time",
        "body": "Who is coming, with which companions — by name —, which menu they pick and any allergies."
      },
      "gallery": {
        "title": "Gallery and shared album",
        "body": "Up to nine photos of yours, plus a link for guests to upload theirs afterwards."
      },
      "gifts": {
        "title": "Gift registry",
        "body": "Your IBAN or the list you already have, with a message written by you. Discreet and optional."
      },
      "logistics": {
        "title": "Coaches and pre-wedding",
        "body": "Who needs a seat on the bus and who is coming the night before, asked in the same reply form."
      },
      "qr": {
        "title": "Your own link and QR code",
        "body": "For WhatsApp and for printing on the paper invitation. The same link works forever."
      }
    },
    "panel": {
      "eyebrow": "The control panel",
      "heading": "The key is the dashboard: the wedding managed end to end",
      "sub": "You're not just buying a pretty website: you're buying the tool a wedding is organised with. Every RSVP arrives on its own and there's a section for everything.",
      "overview": {
        "title": "Overview",
        "body": "The big numbers at a glance — who's coming, how many seats — plus what's left to do, worked out for you."
      },
      "guests": {
        "title": "Guests",
        "body": "Your whole list in one place: add guests, filter by group or status, fix details and nudge on WhatsApp whoever hasn't replied."
      },
      "seating": {
        "title": "Tables",
        "body": "Create the tables with their seats and seat confirmed guests in two taps, watching each table fill up."
      },
      "catering": {
        "title": "Catering",
        "body": "Seats, menus, allergies and bus seats already totted up: a summary ready to send to the restaurant."
      },
      "share": {
        "title": "Share",
        "body": "Your link and QR ready to print, pre-written WhatsApp messages, and how many visits the website gets."
      },
      "foot": "It saves you the spreadsheet, the one-by-one calls and chasing replies on WhatsApp. Everything about the wedding, managed in one place from day one.",
      "transport": {
        "title": "Bus",
        "body": "Guests request a seat when they RSVP; you match buses, times and seats, and the website shows them."
      },
      "preWedding": {
        "title": "Pre-wedding",
        "body": "Announce it on the website and ask who's joining when guests RSVP: you'll know the night-before headcount."
      },
      "card": {
        "seats": "guests confirmed",
        "replied": "of the list has replied",
        "tables": "tables set up",
        "pace": "Reply pace",
        "cta": "Step into {{hosts}}’s dashboard",
        "hint": "A whole wedding inside, exactly as you would see it. Opens in a new tab."
      }
    },
    "compare": {
      "eyebrow": "Comparison",
      "heading": "The same website, without the budget of a bespoke one",
      "sub": "Commissioning a wedding website from a studio costs hundreds or thousands of euros and weeks of work. Here you get the same result, ready in minutes.",
      "colUs": "With QRinvites",
      "colThem": "A custom-built wedding website",
      "r1": {
        "label": "Price",
        "us": "One small one-time payment, everything included forever",
        "them": "Hundreds or thousands of euros in development"
      },
      "r2": {
        "label": "Time",
        "us": "Ready in minutes, you build it yourself",
        "them": "Weeks or months of back-and-forth"
      },
      "r3": {
        "label": "Skills needed",
        "us": "None: you fill in the details and publish",
        "them": "You need a designer and a developer"
      },
      "r4": {
        "label": "Changes",
        "us": "You edit and it updates instantly, for free",
        "them": "You request the change, wait and sometimes pay"
      },
      "r5": {
        "label": "Domain and hosting",
        "us": "Included, nothing to set up",
        "them": "You hire and maintain them separately"
      },
      "r6": {
        "label": "Guest management",
        "us": "Dashboard with RSVPs, tables, menus, bus and pre-wedding party included",
        "them": "Usually no dashboard: you keep it on a spreadsheet"
      },
      "r7": {
        "label": "Maintenance",
        "us": "Zero: we take care of it forever",
        "them": "Updates and breakages are on you"
      }
    },
    "steps": {
      "eyebrow": "Step by step",
      "heading": "How it works",
      "sub": "From zero to your wedding website published in five minutes",
      "one": {
        "title": "Pick your website's design",
        "body": "Professional designs made for weddings. What you pick is exactly the website your guests will see."
      },
      "two": {
        "title": "Personalise all of it",
        "body": "Names, date, venues with a map, your story, gallery and replies, with a live preview. No limits and no signing up."
      },
      "three": {
        "title": "Publish it with a one-time payment",
        "body": "Sign in with Google — no passwords, no saved card — pay once and get your unique link and QR code. It's yours forever."
      },
      "four": {
        "title": "Share it and manage it from the dashboard",
        "body": "Send the link on WhatsApp or print the QR code. Replies arrive on their own in your dashboard, where you manage guests, tables, catering, buses and the pre-wedding party."
      },
      "step": "Step {{n}}"
    },
    "faq": {
      "eyebrow": "FAQ",
      "heading": "Frequently asked questions",
      "sub": "What everyone asks before creating theirs",
      "q1": {
        "q": "How much does the website cost?",
        "a": "Designing it costs nothing: you open the editor without signing up and use every option, template, photo and section with no limits. You only pay when you publish: a single €20 payment per website, forever, with no subscriptions or renewals. You can see it finished before deciding."
      },
      "q2": {
        "q": "Do I need to sign up or give my email?",
        "a": "You design the whole website without signing up. Only when publishing do we ask you to sign in with your Google account (no new passwords, no confirmation emails) so your website and guest dashboard belong to you alone, from any device."
      },
      "q3": {
        "q": "When am I asked for a card?",
        "a": "Only when you publish, never before: you build the whole website and decide with the result in front of you. It is a one-time, secure Stripe payment with no subscriptions. We never see or store your card details."
      },
      "q4": {
        "q": "How does the invitation reach my guests?",
        "a": "Any way you like: send them the link on WhatsApp or email, or print the QR code on a favour, a poster or the table so they scan it with their camera. The link opens the invitation instantly — nothing to install, nothing to sign up for."
      },
      "q5": {
        "q": "Can I change the website after publishing?",
        "a": "Yes. Every change applies instantly for all your guests, with the same link and the same QR code. Change the time, venue or design without reprinting anything."
      },
      "q6": {
        "q": "How do replies work?",
        "a": "Guests RSVP right on the website — with plus-ones, menu, allergies, bus and pre-wedding party — and you manage it all from your dashboard: guests, tables, catering and bus seats, with CSV export."
      },
      "q7": {
        "q": "What about older or less tech-savvy guests?",
        "a": "Opening the website means tapping a link or scanning the QR code: nothing to install, no sign-up, no passwords to remember. And replying is a three-field form. If someone would rather call you, you can add their reply by hand from the dashboard."
      },
      "q8": {
        "q": "Is it hard to create my first website?",
        "a": "Getting started is super easy! The editor opens with a filled-in example: change the names, date and venue, and your website is live in under 5 minutes."
      }
    },
    "finalCta": {
      "heading": "Your wedding deserves a website to match",
      "body": "Design your wedding website in minutes — digital invitation and QR code included — publish it with a single payment and manage it all from the dashboard: guests, tables, menus, coaches and pre-wedding.",
      "cta": "Design your website"
    },
    "studio": {
      "eyebrow": "Need more?",
      "heading": "Want an even more bespoke website?",
      "sub": "If this website falls short and you want a fully custom one — with your own brand, your domain and whatever else you need — tell us and we'll put together a no-obligation quote.",
      "cta": "Request a quote"
    }
  },
  "common": {
    "loading": "Loading…",
    "language": "Language",
    "yes": "Yes",
    "no": "No",
    "close": "Close"
  },
  "templates": {
    "classic": {
      "name": "Classic"
    },
    "midnight": {
      "name": "Midnight"
    },
    "botanical": {
      "name": "Botanical"
    }
  },
  "editor": {
    "title": "Create your wedding website",
    "subtitle": "It's not a card or a PDF: you're building your wedding's complete website, with its own link to share.",
    "description": "Wedding website editor with live preview: cover, story, map, gallery and RSVPs, with the digital invitation and QR code included.",
    "preview": "Live preview",
    "web": {
      "title": "Your wedding website",
      "sub": "This is the public address of your website. Share it on WhatsApp or with its QR code.",
      "copy": "Copy link",
      "open": "Open",
      "liveNote": "Your website is published at this address: anyone with the link can open it."
    },
    "autosaveHint": "Changes save automatically.",
    "publish": "Publish",
    "addVenue": "Add moment",
    "removeVenue": "Remove",
    "section": {
      "basics": "Details",
      "story": "Story",
      "rsvp": "Replies",
      "schedule": "Schedule and venues",
      "photos": "Photos",
      "gifts": "Gift registry",
      "photoShare": "Shared photo album",
      "preWedding": "The pre-wedding party",
      "family": "Parents and godparents"
    },
    "field": {
      "date": "Date",
      "time": "Time",
      "greeting": "Header line",
      "template": "Template",
      "venueLabel": "Label (Ceremony, Reception…)",
      "venueName": "Venue name",
      "venueAddress": "Address",
      "story": "Our story",
      "dressCode": "Dress code",
      "rsvpEnabled": "Enable replies",
      "askGuests": "Ask about plus-ones",
      "askMenu": "Ask about menu",
      "askAllergies": "Ask about allergies",
      "rsvpDeadline": "Deadline",
      "maxGuests": "Maximum guests per invitee",
      "maxGuestsHint": "Each invitee can bring up to this many guests, giving the first and last name of each one.",
      "allergiesNotice": "Allergies are health data. Only ask for them if you need them for catering: they are stored with the invitation, only you can see them and they are deleted when you delete it.",
      "cover": "Cover photo",
      "coverCta": "Choose a photo",
      "coverBusy": "Uploading the photo…",
      "coverRemove": "Remove the photo",
      "coverHint": "It appears in your invitation and is the image shown when you share it on WhatsApp. JPG, PNG or WebP.",
      "coverError": "We could not upload the photo. Try another one or try again.",
      "dressCodeHint": "Leave it empty if you would rather not state a dress code.",
      "gallery": "Photo gallery",
      "galleryCta": "Add photos",
      "galleryRemove": "Remove",
      "galleryHint": "Shown on the invitation, below the venues. Up to {{max}} photos.",
      "familyLines": "People to honour",
      "familyHint": "One line per family or couple: “Daughter of Marta and Julián”, “Godparents: Ana and Luis”…",
      "giftsEnabled": "Show a gift registry on the invitation",
      "giftsIban": "IBAN or account number",
      "giftsUrl": "Gift list link (optional)",
      "giftsNote": "Message for your guests",
      "giftsHint": "Shown at the end of the invitation. You can add just the IBAN, just the link, or both.",
      "askTransport": "Ask whether they need a seat on the bus",
      "showStory": "Show the story",
      "showDressCode": "Show the dress code",
      "showSchedule": "Show the timeline",
      "showVenues": "Show the venue cards with their map",
      "showGallery": "Show the gallery",
      "showSection": "Show this section on the invitation",
      "menuOptions": "Menu options",
      "menuAdd": "Add",
      "menuOptionsHint": "Your guests will pick one of these options when confirming; with none added, they will only see “No preference”.",
      "frameHint": "Drag to reposition",
      "photoShareEnabled": "Invite guests to add their photos to a shared album",
      "photoShareUrl": "Album link (Google Drive, Dropbox…)",
      "photoShareNote": "Message for your guests",
      "photoShareHint": "Shown at the end of the invitation as a button. Guests open the link to upload their photos of the wedding.",
      "zoom": "Zoom",
      "zoomIn": "Zoom in",
      "zoomOut": "Zoom out",
      "preWeddingEnabled": "We're having a pre-wedding party and want it on the website",
      "preWeddingNote": "Message for your guests",
      "preWeddingAsk": "Ask on the RSVP who is joining the pre-wedding party",
      "preWeddingHint": "The date, venue and message appear on your website; the answers land in the “Pre-wedding” tab of your dashboard.",
      "askTransportHint": "Bus routes, times and seats are managed from the “Bus” tab of your dashboard; guests see them on the website."
    },
    "error": {
      "required": "This field is required."
    },
    "status": {
      "idle": "Not published yet",
      "saving": "Saving…",
      "saved": "Saved",
      "error": "Could not save"
    },
    "sample": {
      "host1": "Lucia",
      "host2": "Mateo",
      "greeting": "We are getting married",
      "story": "We met on an ordinary Tuesday and have been celebrating ever since. Now we want to celebrate with you.",
      "venueLabel": "Ceremony",
      "venueName": "St. Michael Church",
      "venueAddress": "Plaza Mayor 1, Segovia",
      "dressCode": "Black tie",
      "venueLabel2": "Reception",
      "venueLabel3": "The party",
      "menu1": "Meat",
      "menu2": "Fish"
    },
    "signInTitle": "Sign in to publish it",
    "signInBody": "Publishing needs your Google account: that way the website belongs to your profile and you can manage it from your dashboard, on any device. Your design is already saved in this browser.",
    "signInLater": "Keep editing",
    "publishedTitle": "Invitation published!",
    "publishedBody": "Share this link with your guests.",
    "invitationLabel": "Your invitation",
    "panelLabel": "Your private dashboard",
    "panelHint": "Sign in with Google from any device: the dashboard is private and yours alone.",
    "pay": {
      "redirecting": "Taking you to Stripe's secure checkout…",
      "error": "We couldn't start the payment. Please try again in a few seconds.",
      "eyebrow": "Last step",
      "title": "Publish your wedding website",
      "sub": "A single payment. No subscriptions, no renewals, no small print.",
      "productName": "Your wedding website",
      "b1": "Your own link and QR code to share it",
      "b2": "Replies with plus-ones, menu and allergies",
      "b3": "Dashboard with guests, tables, menus, coaches and pre-wedding",
      "b4": "Unlimited views and guests, and instant edits",
      "b5": "No ads and no watermarks: the website is only yours",
      "cta": "Pay and publish",
      "note": "One-time secure payment via Stripe. Once confirmed, your website publishes itself and appears in your dashboard."
    },
    "cancel": "Back to the editor",
    "close": "Close",
    "scheduleHint": "Each moment appears on the invitation timeline and as a venue card with a map link. The order of the list is the order of the day.",
    "momentLabel": "Moment {{number}}",
    "moveUp": "Move up",
    "moveDown": "Move down",
    "previewLive": "This is how your wedding website will look",
    "previewSub": "It updates the moment you make any change.",
    "viewPreview": "See how your website is coming along",
    "host": {
      "1": "Name of one member of the couple",
      "2": "Name of the other member"
    }
  },
  "invitation": {
    "story": "Our story",
    "venues": "Where",
    "dressCode": "Dress code",
    "directions": "Directions",
    "share": "Share the invitation",
    "qrCaption": "Scan or download the QR code",
    "notFound": "Invitation not found",
    "notFoundBody": "The link may have changed, or the invitation is no longer published.",
    "goHome": "Go to homepage",
    "ogDescription": "{{hosts}} · {{date}} · {{venue}}. Open it for all the details and to confirm your attendance.",
    "ogDescriptionNoVenue": "{{hosts}} · {{date}}. Open it for all the details and to confirm your attendance.",
    "schedule": "Timeline",
    "scheduleEyebrow": "The big day",
    "gallery": "Gallery",
    "farewell": "It would make us so happy to have you there.",
    "venuesHeading": "The venues",
    "family": "Our families",
    "gifts": "Gift registry",
    "giftsLink": "See the gift list",
    "giftsShowIban": "View bank account",
    "giftsCopy": "Copy",
    "giftsCopied": "Copied!",
    "photos": "Photo album",
    "photosShare": "Share your photos",
    "photosOpen": "Open the album",
    "photosDemo": "This is a demo link, so it does not lead anywhere. On your real invitation this button opens your guests’ photo folder.",
    "errorTitle": "We could not load the invitation",
    "errorBody": "It may be a temporary connection problem. Please try again.",
    "retry": "Try again",
    "preWedding": "The pre-wedding party",
    "transport": "Bus for guests",
    "transportDeparture": "Departure",
    "transportReturn": "Return"
  },
  "rsvp": {
    "title": "Confirm attendance",
    "name": "Your name",
    "nameRequired": "Please enter your name.",
    "attending": "Will you make it?",
    "yes": "Yes, count me in",
    "no": "Sorry, I cannot",
    "guests": "How many guests are you bringing?",
    "companion": "Guest {{n}}",
    "firstName": "First name",
    "lastName": "Last name",
    "companionsRequired": "Enter the first and last name of each guest.",
    "menu": "Menu",
    "menuDefault": "No preference",
    "allergies": "Allergies or intolerances",
    "notes": "Anything we should know?",
    "send": "Send reply",
    "sending": "Sending…",
    "deadline": "Please reply before",
    "thanksYes": "Thank you! See you there.",
    "thanksNo": "Thanks for letting us know. We will miss you.",
    "error": "We could not save your reply. Please try again.",
    "allergiesHint": "Optional. Used only to organise the wedding menu and visible only to your host.",
    "guestsHint": "Up to {{max}} companions.",
    "fixFields": "Check the highlighted fields: something needs fixing before sending.",
    "transport": "Do you need a seat on the bus?",
    "transportYes": "Yes, I'll take the bus",
    "transportNo": "No, I'll make my own way",
    "preWedding": "Will you join the pre-wedding party too?",
    "preWeddingYes": "Yes, count me in",
    "preWeddingNo": "Sorry, I cannot"
  },
  "dashboard": {
    "title": "Your dashboard",
    "subtitle": "Everything about your wedding, in one place.",
    "newEvent": "New invitation",
    "events": "Your invitations",
    "untitled": "Untitled",
    "viewInvitation": "View public invitation",
    "copyLink": "Copy link",
    "copied": "Copied!",
    "signOut": "Sign out",
    "signInTitle": "Sign in to your dashboard",
    "signInBody": "Sign in with the same Google account you published with. It's private and yours alone.",
    "add": {
      "name": "Guest name…",
      "cta": "Add"
    },
    "emptyTitle": "No invitations yet",
    "emptyBody": "Design your first one in a couple of minutes.",
    "noRsvps": "Nobody has replied yet. Share the link or the QR code to get started.",
    "deleteRsvp": "Delete reply from",
    "deleteConfirm": "Delete {{name}}'s reply? This cannot be undone.",
    "editEvent": "Keep editing",
    "deleteEvent": "Delete",
    "publishNow": "Publish",
    "publishError": "The invitation could not be published. Please try again in a few seconds.",
    "account": {
      "title": "Your account",
      "body": "You can delete your account at any time. Your personal data, your invitations and your guests' replies will be removed, in line with the GDPR.",
      "delete": "Delete my account",
      "modalTitle": "Delete your account",
      "modalBody": "This is permanent: your account, all your invitations (including the ones you paid for, with no refund) and all your guests’ replies will be deleted. It cannot be undone.",
      "ack": "I understand everything will be permanently deleted, including the invitations I paid for.",
      "confirm": "Delete my account permanently",
      "error": "We couldn't delete the account. Please try again in a few minutes."
    },
    "delete": {
      "title": "Delete invitation",
      "body": "You are about to delete “{{name}}”. The invitation, its link and all its replies will be removed immediately and permanently.",
      "cancel": "Cancel",
      "confirm": "Delete permanently",
      "paidWarning": "This invitation is paid for. Deleting it means giving up for good what you paid. There is no refund and it cannot be recovered.",
      "paidAck": "I understand that deleting this invitation permanently forfeits what I paid for it.",
      "draftNote": "This is an unpublished draft: it is deleted with no further consequences and you paid nothing for it."
    },
    "deleteEventError": "The invitation could not be deleted. Reload the page and try again.",
    "status": {
      "draft": "Draft",
      "published": "Published",
      "attending": "Coming",
      "declined": "Not coming",
      "pending": "No reply"
    },
    "stat": {
      "seats": "Seats"
    },
    "chart": {
      "perDay": "Replies per day"
    },
    "col": {
      "name": "Name",
      "attending": "Attending",
      "guests": "Plus-ones",
      "menu": "Menu",
      "allergies": "Allergies",
      "notes": "Notes",
      "date": "Date",
      "transport": "Bus",
      "group": "Group",
      "table": "Table",
      "guestOf": "Guest of",
      "preEvent": "Pre-wedding"
    },
    "pay": {
      "checking": "Confirming your payment…",
      "success": "Payment confirmed! Your invitation is published and yours forever.",
      "thanks": "Thank you so much for the coffee! Support like yours keeps this project alive.",
      "error": "We couldn't confirm the payment. Remember the gateway runs in test mode and makes no real charges: nothing has been charged to you. You can try again whenever you like."
    },
    "support": {
      "title": "Finding it useful?",
      "body": "This project is maintained by one person. If you feel like it, buy me a coffee.",
      "amount": "Amount in euros (minimum 5)",
      "cta": "Support"
    },
    "sections": "Dashboard sections",
    "tab": {
      "overview": "Overview",
      "guests": "Guests",
      "seating": "Tables",
      "catering": "Catering",
      "share": "Share",
      "transport": "Bus",
      "preWedding": "Pre-wedding"
    },
    "draftNote": "This invitation is a draft: only you can see it. Publish it to share it and start collecting replies.",
    "count": {
      "all": "On the list",
      "attending": "Coming",
      "declined": "Not coming",
      "pending": "No reply"
    },
    "overview": {
      "eyebrow": "Your big day",
      "ringLabel": "Breakdown of replies",
      "numbers": "Wedding numbers",
      "responded": "Have replied",
      "stepsTitle": "What is left to do",
      "stepsHint": "It ticks itself off as you go — nothing to keep by hand.",
      "stepGo": "Go",
      "activityTitle": "Latest replies",
      "activityEmpty": "Replies will show up here as soon as they start arriving.",
      "step": {
        "publish": "Publish your invitation",
        "cover": "Add your cover photo",
        "share": "Share the link with your guests",
        "guests": "Write down who you invited",
        "chase": "Nudge whoever has not replied",
        "seating": "Seat everyone who is coming",
        "catering": "Get the catering sheet ready"
      }
    },
    "guests": {
      "addTitle": "Add guests",
      "bulkOpen": "Paste a list",
      "bulkLabel": "One name per line",
      "bulkPlaceholder": "Ana García\nCarlos Ruiz\nAunt Marisa",
      "bulkCancel": "Cancel",
      "bulkCta": "Add to the list",
      "searchPlaceholder": "Search by name, group, table or note",
      "allGroups": "All groups",
      "noMatches": "No guest matches your search.",
      "seatsTag": "{{n}} seats",
      "edit": "Edit",
      "close": "Close",
      "cancel": "Cancel",
      "save": "Save",
      "saveError": "We could not save the change. Please try again.",
      "groupPlaceholder": "Family, friends, work…",
      "needsTransport": "Needs a coach seat",
      "companionOf": "with {{name}}",
      "attendsPreWedding": "Joining the pre-wedding party"
    },
    "seating": {
      "seated": "Seated",
      "unseated": "Unseated",
      "capacity": "Seats created",
      "tableName": "Table name",
      "tablePlaceholder": "Table 1, Head table, Friends…",
      "tableSeats": "Seats",
      "addTable": "Create table",
      "noTables": "You have not created any tables yet. Start with the first one.",
      "ofSeats": "{{taken}} of {{seats}} seats",
      "takenOnly": "{{taken}} seated",
      "removeTable": "Remove table",
      "removeConfirm": "You are about to remove this table and {{n}} guests will be left without a seat. Continue?",
      "duplicateTable": "You already have a table with that name.",
      "emptyTable": "Empty table.",
      "unseat": "Remove from table",
      "poolTitle": "Not seated yet",
      "poolHint": "Pick a table for each of them; you can move them any time.",
      "poolDone": "Everyone who is coming has a table.",
      "poolNoGuests": "Once you have replies they will appear here to be seated.",
      "assignTo": "Assign a table to",
      "choose": "Pick a table"
    },
    "catering": {
      "title": "Catering sheet",
      "hint": "What the restaurant, the caterer or the coach company needs to know. Copy it and send it as is.",
      "copy": "Copy summary",
      "seats": "Covers",
      "responses": "Replies",
      "allergyCount": "With allergies",
      "busSeats": "Coach seats",
      "pendingNote": "{{n}} still have not replied, so these numbers may still go up.",
      "menus": "Menus",
      "noMenus": "Nobody has chosen a menu yet.",
      "noMenuChosen": "{{n}} with no menu chosen",
      "allergies": "Allergies and intolerances",
      "noAllergies": "Nobody has declared any allergies.",
      "healthNote": "This is health data: use it only to organise the food, and do not share it beyond whoever prepares it.",
      "bus": "Coach"
    },
    "share": {
      "linkTitle": "Your link",
      "linkHint": "The same one for everyone, forever: edit the invitation and it updates itself.",
      "whatsapp": "Send on WhatsApp",
      "remind": "Nudge the {{n}} still missing",
      "qrTitle": "QR code",
      "qrHint": "Download it to print on favours, posters or table cards.",
      "inviteMessage": "We are getting married! {{hosts}} · {{date}}. Here is our invitation, with all the details and to reply: {{url}}",
      "reminderMessage": "Hi! We are still missing your reply for {{hosts}}’ wedding. It only takes a second here: {{url}} Thank you!"
    },
    "loadErrorTitle": "We could not load your invitations",
    "loadErrorBody": "It may be a temporary connection problem.",
    "guestsLoadError": "We could not load your guest list. Please try again.",
    "actionError": "The action could not be completed. Please try again.",
    "transport": {
      "title": "Buses",
      "hint": "Match the seats your guests request when they RSVP with the buses you set up. What you define here shows on your website.",
      "copy": "Copy summary",
      "notAsked": "You're not asking about the bus on the RSVP yet: turn it on in the editor's RSVP section so guests can request a seat.",
      "requested": "Seats requested",
      "capacity": "Seats on buses",
      "free": "Seats left",
      "over": "You're {{n}} seats short: add a bus or add seats to the ones you have.",
      "busName": "Name or route",
      "busPlaceholder": "Bus 1 · City centre",
      "departurePlace": "Departure point",
      "departureTime": "Departure",
      "returnTime": "Return",
      "busSeats": "Seats",
      "addBus": "Add bus",
      "noBuses": "No buses yet. Add the first one and your guests will see the route and times on the website.",
      "removeBus": "Remove bus",
      "seatsOf": "{{seats}} seats",
      "noSeatLimit": "No seat limit",
      "note": "Note for your guests",
      "noteHint": "Shown on the website next to the buses (“Reserve your seat when you RSVP”).",
      "saveNote": "Save note",
      "whoNeeds": "Who needs a seat",
      "noNeeds": "No one has requested a seat yet.",
      "fleet": "Buses",
      "departureShort": "Departs",
      "returnShort": "Returns",
      "late": "It leaves at the same time as the {{time}} ceremony, or too close to it: move it earlier or your guests will arrive late."
    },
    "preWedding": {
      "title": "The pre-wedding party",
      "hint": "Who's joining the pre-wedding party, from the same RSVPs as your website.",
      "copy": "Copy summary",
      "notEnabled": "The pre-wedding party isn't enabled: turn it on in the editor to announce it on your website and ask who's coming.",
      "notAsked": "You announce the pre-wedding party but don't ask about it on the RSVP: enable the question in the editor to fill this tab.",
      "details": "The plan",
      "coming": "Coming",
      "notComing": "Not coming",
      "unanswered": "No answer",
      "who": "Who's coming",
      "noAnswers": "No one has signed up for the pre-wedding party yet."
    },
    "pager": {
      "label": "List pages",
      "prev": "Previous",
      "next": "Next",
      "range": "{{from}}–{{to}} of {{total}}"
    },
    "summary": {
      "button": "Download summary (PDF)",
      "blocked": "Your browser blocked the summary window. Allow pop-ups and try again.",
      "title": "Wedding summary",
      "generated": "Generated on {{date}} with QRinvites · qrinvites.com",
      "seats": "Guests attending",
      "attending": "Confirmed",
      "pending": "No reply yet",
      "declined": "Not coming",
      "menus": "Menus for the caterer",
      "allergies": "Allergies and intolerances",
      "bus": "Coach · {{seats}} seats requested",
      "preWedding": "Pre-wedding · {{seats}} joining",
      "tables": "Reception tables",
      "tableSeats": "{{taken}} of {{seats}}",
      "unseated": "No table assigned",
      "guests": "Full list · {{total}} entries"
    }
  },
  "auth": {
    "google": "Continue with Google",
    "connecting": "Connecting…",
    "googleHint": "No passwords, no emails: sign in instantly with your Google account."
  },
  "admin": {
    "eyebrow": "Administration",
    "title": "Admin panel",
    "signInTitle": "Sign in to see analytics",
    "range": "Period",
    "days": "{{n}} days",
    "funnel": "Conversion funnel",
    "perDay": "Visits per day",
    "noData": "No data yet.",
    "step": {
      "visits": "Visits",
      "editor": "Open the editor",
      "published": "Publish",
      "paid": "Pay"
    },
    "deniedTitle": "No access",
    "deniedBody": "These analytics are for the site owner only.",
    "tabs": {
      "overview": "Overview",
      "users": "Users",
      "events": "Invitations",
      "payments": "Payments",
      "audit": "Audit log",
      "database": "Database"
    },
    "metric": {
      "registeredUsers": "Registered users",
      "visitors30d": "Unique visitors (30 d)",
      "publishedActive": "Published invitations",
      "rsvps": "Total replies",
      "checkouts": "Checkouts started",
      "paymentsConfirmed": "Confirmed payments",
      "revenue": "Revenue",
      "convCheckout": "Payments / checkouts",
      "convUsers": "Payments / users",
      "activeUnpaid": "Drafts",
      "paidInvitations": "Paid invitations",
      "avgPayment": "Avg. payment"
    },
    "users": {
      "search": "Search by email…",
      "colEmail": "Email",
      "colCreated": "Joined",
      "colEvents": "Invitations",
      "colPayments": "Payments",
      "colRevenue": "Amount",
      "colState": "State",
      "view": "View as user",
      "suspend": "Suspend",
      "unsuspend": "Reactivate",
      "delete": "Delete",
      "deleteConfirm": "Delete the account {{email}} and everything it owns (invitations, replies)? This is final.",
      "suspendConfirm": "Suspend the account {{email}}? Their invitations will stop being visible and they will not be able to publish.",
      "badgeAdmin": "admin",
      "badgeSuspended": "suspended",
      "badgeActive": "active",
      "empty": "No matching users."
    },
    "userDetail": {
      "title": "Viewing as user",
      "back": "Back to the list",
      "events": "Their invitations",
      "payments": "Their payments",
      "rsvps": "{{n}} replies",
      "none": "Nothing to show.",
      "open": "Open invitation"
    },
    "events": {
      "search": "Search by slug or email…",
      "colSlug": "Slug",
      "colOwner": "Owner",
      "colStatus": "Status",
      "colRsvps": "Replies",
      "colCreated": "Created",
      "unpublish": "Unpublish",
      "unpublishConfirm": "Unpublish “{{slug}}”? It goes back to draft and its link stops working.",
      "delete": "Delete",
      "deleteConfirm": "Delete “{{slug}}”? Soft delete, purged after 30 days.",
      "badgeDeleted": "deleted",
      "badgePaid": "paid",
      "empty": "No matching invitations."
    },
    "payments": {
      "colWhen": "Date",
      "colUser": "User",
      "colKind": "Kind",
      "colAmount": "Amount",
      "colStatus": "Status",
      "colSession": "Session",
      "empty": "No payments yet.",
      "kind": {
        "support": "Support",
        "invitation": "Invitation"
      },
      "status": {
        "pending": "Pending",
        "paid": "Paid",
        "expired": "Expired"
      }
    },
    "audit": {
      "colWhen": "Date",
      "colAdmin": "Admin",
      "colAction": "Action",
      "colTarget": "Target",
      "empty": "No actions recorded."
    },
    "refresh": "Refresh",
    "actionError": "The action failed. Please try again.",
    "perDayBusiness": "Published and paid per day",
    "db": {
      "tables": "Tables",
      "empty": "No rows.",
      "delete": "Delete",
      "deleteConfirm": "Delete this row from “{{table}}”? ({{id}}) There is no trash: this is final.",
      "prev": "Previous",
      "next": "Next",
      "legend": "What is each field?"
    },
    "dbfield": {
      "action": "Recorded admin action",
      "admin_id": "Administrator who performed the action",
      "allergies": "Stated allergies (health data)",
      "amount_cents": "Amount in euro cents",
      "analytics_exempt": "Excluded from metrics (owner accounts)",
      "attending": "Confirms attendance (yes/no)",
      "base_locale": "Language the invitation was created in",
      "bucket": "Rate limit: which action is limited",
      "bucket_id": "Storage folder (event-images)",
      "confirmed_at": "Payment confirmation date",
      "count": "Actions accumulated in the window",
      "created_at": "Row creation date",
      "currency": "Payment currency",
      "data": "Invitation content (names, date, venues, texts)",
      "deleted_at": "Date deleted by the user (empty = alive)",
      "detail": "Additional action detail",
      "email": "Account email",
      "event_id": "Invitation it belongs to",
      "external_id": "Stripe checkout session id",
      "guests": "Number of companions",
      "id": "Unique row identifier",
      "is_admin": "Is a site administrator",
      "kind": "Payment type (invitation = wedding website, support = donation)",
      "locale": "Language of the visit",
      "menu": "Chosen menu",
      "name": "Name (of the guest, or the file in storage)",
      "notes": "Free note from the guest",
      "owner_id": "User who owns the invitation",
      "paid_at": "Payment date (empty = unpublished draft)",
      "path": "Visited page",
      "provider": "Payment gateway (stripe)",
      "published_at": "Publication date",
      "referrer": "Website the visit came from",
      "session_id": "Anonymous browser session (analytics)",
      "size_bytes": "File size in bytes",
      "slug": "Final part of the public link (/i/…)",
      "status": "State (draft / published; payments: pending / paid / expired)",
      "stripe_session_id": "Linked Stripe checkout session",
      "subject": "Rate limit: which user",
      "suspended_at": "Account suspension date (empty = active)",
      "target_event": "Invitation affected by the action",
      "target_user": "User affected by the action",
      "template": "Chosen template (classic, midnight, botanical)",
      "transport": "Needs the bus (empty = not asked)",
      "type": "Type (of event, or of analytics hit)",
      "updated_at": "Last modification",
      "user_id": "Linked user (if signed in)",
      "window_start": "Start of the limit window"
    },
    "revenuePerDay": "Revenue per day",
    "revenueByProduct": "Revenue by product",
    "kind": {
      "invitation": "Invitation",
      "support": "Support"
    },
    "recentActivity": "Recent activity",
    "activity": {
      "created": "New invitation",
      "published": "Published",
      "paid": "Payment"
    }
  },
  "gallery": {
    "title": "Wedding website designs",
    "description": "Three wedding website designs — classic, midnight and botanical — with the invitation and QR included. Try them with a live preview.",
    "heading": "Templates",
    "headline": "Choose your wedding website design",
    "intro": "Every design is the real wedding website, not a screenshot: pick one and personalise it with a live preview.",
    "use": "Use this template",
    "switch": {
      "heading": "Can't decide? Change it whenever you like",
      "body": "You can switch templates after publishing: the link and the QR code stay exactly the same.",
      "cta": "Design your wedding website"
    }
  },
  "footer": {
    "tagline": "Digital invitations with QR code",
    "pricing": "Pricing",
    "legalNotice": "Legal notice",
    "privacy": "Privacy",
    "cookies": "Cookies",
    "terms": "Terms",
    "blurb": "Your wedding website with a digital invitation, a QR code and a dashboard that manages everything. Design it without signing up and pay only when you publish.",
    "product": "Product",
    "legal": "Legal",
    "demo": "Practice project · no economic activity"
  },
  "pricing": {
    "heading": "Simple pricing, no small print",
    "sub": "One payment, no subscriptions. Designing the whole website is free and needs no account: you only pay when you decide to publish it.",
    "perEvent": "per wedding website",
    "title": "Pricing",
    "description": "QRinvites pricing: €20 per published wedding website. One-time payment, no subscriptions or hidden costs.",
    "faqTitle": "Common pricing questions",
    "q1": {
      "q": "Are there subscriptions or hidden costs?",
      "a": "No. It is a single €20 payment per published wedding website. No renewals, no recurring charges and no price per guest."
    },
    "q2": {
      "q": "Can I see it before paying?",
      "a": "Yes, all of it. The editor lets you build the complete website — every design, your photos and every section — and see exactly what your guests will see. You only pay when you hit Publish."
    },
    "q3": {
      "q": "What do I lose if I delete a paid website?",
      "a": "The payment is tied to that website. Deleting it permanently removes the website and its replies and forfeits what you paid, which is why we ask for explicit confirmation first."
    },
    "studio": {
      "name": "Custom studio",
      "price": "Let's talk",
      "f1": "A complete website",
      "f2": "Logo and visual identity",
      "f3": "Social media: management and content",
      "f4": "Advertising and digital campaigns",
      "f5": "Google rankings (SEO)",
      "f6": "Email marketing and newsletters",
      "f7": "Domain and professional email",
      "note": "Tell us about your project and you will receive a clear proposal, with a fixed price and no obligation.",
      "cta": "Request a quote"
    },
    "invitation": {
      "name": "Your wedding website",
      "cta": "Design your wedding website",
      "f1": "Your own link and QR code, to share it however you like",
      "f2": "Every design and every section of the website",
      "f3": "Replies with plus-ones, menu, allergies and coach travel",
      "f4": "Dashboard for guests, tables, menus, coaches and pre-wedding",
      "f5": "Your cover photo and a gallery of up to 9 photos",
      "f6": "Unlimited views and guests, and instant edits",
      "f7": "No ads and no watermarks, ever",
      "note": "The payment belongs to that invitation for as long as it exists. Deleting it forfeits what you paid (we ask for explicit confirmation)."
    }
  },
  "demo": {
    "eyebrow": "Important notice",
    "legalLink": "Read the legal notice",
    "entry": {
      "title": "This is a practice project",
      "p1": "QRinvites is a personal web development exercise, built purely for learning and to showcase technical skills.",
      "p2": "The business is not active: no service is provided, there is no economic or professional activity behind this site, and its author does not operate as a freelancer or a company.",
      "p3": "The prices, plans and copy you will see are fictional and illustrative, and the payment gateway runs in test mode: nothing is ever charged. Thanks for understanding.",
      "cta": "Understood, continue"
    },
    "payment": {
      "title": "Payments are in test mode",
      "p1": "This site is a practice project with no economic activity: nothing is sold here and no invoice is ever issued.",
      "p2": "The Stripe checkout you are about to see runs in test mode and does not accept real payments: do not enter real card details, because no charge will ever be processed.",
      "p3": "You can continue just to see how the flow works, or cancel and keep browsing.",
      "cta": "Continue to the test checkout",
      "cancel": "Cancel"
    },
    "contact": {
      "title": "The business is not active",
      "p1": "QRinvites is a personal web development practice project, with no economic or professional activity behind it.",
      "p2": "No service is provided and none can be hired, so there is no contact channel and no quote available.",
      "p3": "Feel free to keep browsing and try the editor: everything you see is a technical demonstration.",
      "cta": "Understood"
    },
    "legalBanner": {
      "title": "Practice project with no economic activity",
      "b1": "This site is a personal web development exercise. The business is not active, no service is provided and there is no economic or professional activity behind it: prices and plans are fictional and the payment gateway runs in test mode.",
      "b2": "This document is published only as part of that exercise and does not create any commercial relationship. No contact details are published because there is no business in operation."
    }
  },
  "legal": {
    "updated": "Last updated: 27 July 2026",
    "notice": {
      "title": "Legal notice",
      "s1t": "Site owner",
      "s1b": "QRinvites (qrinvites.com) is a personal web development practice project. It is not a business in operation: no service is provided, there is no economic or professional activity behind the site, and its author does not operate as a freelancer or a company. That is why no commercial contact details are published.",
      "s2t": "Purpose",
      "s2b": "The site lets you create, publish and share a wedding website — a digital invitation with a QR code and guest replies — with a private dashboard for the couple. It is a one-time purchase. Today it works only as a demonstration: the payment gateway runs in test mode and no charge is ever made.",
      "s3t": "Intellectual property",
      "s3b": "The site's design, code and content belong to its owner. The content of each invitation (texts, names, dates) belongs to the user who creates it, who is responsible for it.",
      "s4t": "Liability",
      "s4b": "The owner works to keep the service available and secure but cannot guarantee total absence of interruptions. Users are responsible for the content they publish and for having permission from the people whose data they include.",
      "s5t": "Applicable law",
      "s5b": "This site is governed by Spanish and European law. Any dispute will be settled by the courts determined by law.",
      "description": "QRinvites legal notice: site owner, purpose, intellectual property and liability. A practice project with no economic activity."
    },
    "privacy": {
      "title": "Privacy policy",
      "s1t": "Controller",
      "s1b": "This site is a personal practice project with no economic activity, and no contact details are published. Even so, trying the app does process some data: this policy explains what data, why and on what legal basis, under the GDPR. You can delete your account and all of its content yourself, from your dashboard, at any time.",
      "s2t": "Data we process",
      "s2b": "Account: your Google email when signing in. Invitations: the texts you write (names, dates, venues, story). Guest replies: name, attendance, plus-ones, menu, notes and, only if the host enables it, allergies or intolerances. Payments: handled by Stripe; we store the amount, status and an identifier, never your card. First-party analytics: usage events with a random local identifier, no third-party cookies and no cross-site tracking.",
      "s3t": "Allergies: health data",
      "s3b": "Allergies and intolerances are health data (a special category under the GDPR). They are only collected if the host enables that question and the guest chooses to answer it (explicit consent), they are used exclusively to organise the event, only the host sees them and they are deleted with the invitation.",
      "s4t": "Legal basis and purposes",
      "s4b": "Performance of the service (creating and displaying invitations, managing replies and payments), explicit consent (allergies) and legitimate interest (first-party analytics without identifying people, and service security).",
      "s5t": "Processors and recipients",
      "s5b": "We use providers acting as data processors: Supabase (database and authentication, EU-Ireland region), Cloudflare (hosting and delivery), Stripe (payments) and Google (sign-in). We do not sell data or share it with third parties for advertising.",
      "s6t": "Retention",
      "s6b": "Deleting an invitation immediately and permanently removes the invitation and all its replies. Deleting your account (a visible option in your dashboard) removes your account, invitations and replies; the payment ledger is kept anonymised for accounting.",
      "s7t": "Your rights",
      "s7b": "You can exercise your rights of access, rectification, erasure, objection, restriction and portability by the most direct route: from your dashboard you can review and correct your data, and deleting your account immediately and permanently removes all of your content. As there is no economic activity, no contact email is published. You can also lodge a complaint with your data protection authority.",
      "s8t": "International transfers",
      "s8b": "Some processors (Cloudflare, Stripe and Google) may process data outside the European Economic Area. Where that happens, the transfer relies on adequacy decisions or on the European Commission’s standard contractual clauses, which ensure an equivalent level of protection.",
      "description": "What data QRinvites processes, why and on what legal basis under the GDPR. You delete your account and all its content from your own dashboard."
    },
    "cookies": {
      "title": "Cookie policy",
      "s1t": "What we use",
      "s1b": "We use no advertising or third-party cookies. The only thing stored in your browser is essential technical local storage: your sign-in session, your invitation draft and a random identifier for our own analytics, which cannot identify you and does not follow you across other websites.",
      "s2t": "When you will see a notice",
      "s2b": "There are no non-essential cookies to consent to: no advertising, no tracking pixels, and we never share your browsing with third parties. That is why no cookie banner interrupts you.",
      "s3t": "If this changes",
      "s3b": "The site shows no third-party advertising on any of its pages. Were that to change, we would update this page and ask for your consent before loading anything.",
      "description": "QRinvites uses no advertising or third-party cookies — only essential technical local storage. That is why you will never see a consent banner."
    },
    "terms": {
      "title": "Terms of service",
      "s1t": "The service",
      "s1b": "QRinvites lets you create and publish a wedding website with its own link and QR code, with guest replies and a guest dashboard. Publishing requires signing in with Google. Today all of this works only as a demonstration: there is no economic activity and payments run in test mode, with no real charges.",
      "s2t": "Invitations",
      "s2b": "Creating and editing your wedding website is free and needs no account, with every feature available. Publishing it requires signing in with Google — so it belongs to your profile and you can manage it — and a one-time €20 payment. Once published, the website and its guest dashboard stay active for as long as it exists, with no limit on time, visits or guests.",
      "s3t": "Deletion and forfeiture",
      "s3b": "Deleting an invitation is immediate and permanent: the invitation and its replies are removed. If it was paid for, deleting it means expressly forfeiting the amount paid, with no right to a refund; the app requires you to tick that acknowledgement before deleting.",
      "s4t": "User content",
      "s4b": "You are responsible for your invitations' content and for having permission from the people whose data you include. Illegal, offensive or impersonating content is not allowed; we may take down invitations or suspend accounts that break these rules.",
      "s5t": "Changes",
      "s5b": "We may update these terms; relevant changes will be announced on the site. Using the service after a change implies acceptance.",
      "description": "QRinvites terms of service: what the wedding website includes, the one-time payment, permanent deletion and the content rules."
    }
  },
  "demoPanel": {
    "title": "Example dashboard of a real wedding",
    "description": "Step into the QRinvites dashboard with a 200-guest wedding inside: replies, tables, menus, coaches and pre-wedding. The real dashboard, with demo data."
  }
}
