// config.jsx — site config, palettes, font pairs, i18n copy
//
// Client deployment: AB Aesthetics & Cosmetology — Cork, Ireland.
// Andreia Bravim, solo aesthetician operating from Room 2, 2nd floor,
// 23–25 Drawbridge Street, Cork. Online booking via Fresha.

// ── Portfolio embed mode ────────────────────────────────────────────────
// When the site is being shown inside the studio's portfolio (not as the
// real client site), flip enabled: true here. It does three things:
//   1. Renders a fixed banner at the top: "Demo · See the live site at …"
//   2. Intercepts every booking / WhatsApp / phone CTA with an alert that
//      points to the real site (no accidental calls to the salon).
//   3. Hides the floating WhatsApp button.
// The real client deployment ships with enabled: false.
const PORTFOLIO = {
  enabled: false,
  liveUrl: 'https://www.instagram.com/andreia_bravim/',
  studioUrl: 'https://alfatecnologia.com',
  studioName: 'Alfa Tecnologia',
  banner: {
    en: 'Demo. This is a portfolio preview, see the live site at',
    pt: 'Demo. Esta é uma visualização de portfólio, veja o site real em', es: 'Demo. Esta es una vista previa de portafolio, visita el sitio real en', fr: 'Démo. Ceci est un aperçu de portfolio, voir le site réel sur',
  },
  ctaBlocked: {
    en: 'This is a demo. To contact the business, visit the live site.',
    pt: 'Esta é uma demonstração. Para contactar o negócio, visite o site real.', es: 'Esto es una demostración. Para contactar con el negocio, visita el sitio real.', fr: 'Ceci est une démonstration. Pour contacter le salon, rendez-vous sur le site réel.',
  },
};

// ── Languages ───────────────────────────────────────────────────────────
// Order here is the order in the picker. `native` is what the visitor reads:
// someone looking for French scans for "Français", not for "FR", so the
// native name carries the list and the code is only a compact badge.
// Adding a language means adding a row here and an extra key on every
// { en, pt, ... } string in this file; t() falls back to English for
// anything still missing, so a partial translation degrades quietly
// instead of rendering blank.
const LANGS = [
  { code: 'en', native: 'English',    label: 'EN' },
  { code: 'pt', native: 'Português',  label: 'PT' },
  { code: 'es', native: 'Español',    label: 'ES' },
  { code: 'fr', native: 'Français',   label: 'FR' },
];

// ── Palette presets ─────────────────────────────────────────────────────
const PALETTES = {
  'ab-brand': {
    label: { en: 'AB Brand', pt: 'Marca AB' },
    vibe: { en: 'Navy & champagne gold', pt: 'Azul-marinho & dourado champanhe' },
    // Dark counterpart used by the visitor-facing light/dark toggle.
    darkVariant: 'ab-brand-dark',
    tokens: {
      primary: '#1F3D63', primaryDark: '#142A47', accent: '#7A9CC0',
      gold: '#C9A465', goldSoft: '#E8D49A',
      bg: '#F3F6FA', surface: '#FFFFFF', surfaceAlt: '#E5ECF3',
      text: '#101B2D', textMuted: '#5B6B82', border: '#D6DFE9',
      heroBg: '#DCE5EF', heroInk: '#142A47',
      isDark: false,
    },
  },
  'ab-brand-dark': {
    label: { en: 'AB Brand Dark', pt: 'Marca AB Escuro' },
    vibe: { en: 'Navy on charcoal, champagne gold', pt: 'Marinho no carvão, dourado champanhe' },
    tokens: {
      primary: '#7FA1C5', primaryDark: '#5C82A8', accent: '#C7D5E5',
      gold: '#D9B779', goldSoft: '#A88846',
      bg: '#0E141E', surface: '#171F2C', surfaceAlt: '#1F2A3C',
      text: '#ECF1F8', textMuted: '#98A6BC', border: '#2A3650',
      heroBg: '#171F2C', heroInk: '#ECF1F8',
      isDark: true,
    },
  },
  'mono-modern': {
    label: { en: 'Mono Modern', pt: 'Mono Modern' },
    vibe: { en: 'Black/white/grey, clean', pt: 'Preto/branco/cinza, clean' },
    tokens: {
      primary: '#161616', primaryDark: '#000000', accent: '#9C9C9C',
      bg: '#F5F4F0', surface: '#FFFFFF', surfaceAlt: '#ECEAE3',
      text: '#0E0E0E', textMuted: '#6B6B6B', border: '#DCD9D2',
      heroBg: '#0E0E0E', heroInk: '#F5F4F0',
      isDark: false,
    },
  },
  'bold-editorial': {
    label: { en: 'Bold Editorial', pt: 'Bold Editorial' },
    vibe: { en: 'Strong colours, high contrast', pt: 'Cores fortes, contraste alto' },
    tokens: {
      primary: '#E04A2A', primaryDark: '#8A2710', accent: '#1A1A1A',
      bg: '#F2EAD8', surface: '#FBF5E7', surfaceAlt: '#E6DCC4',
      text: '#1A1715', textMuted: '#6A6055', border: '#D8CCB0',
      heroBg: '#E04A2A', heroInk: '#FBF5E7',
      isDark: false,
    },
  },
  'warm-earth': {
    label: { en: 'Warm Earth', pt: 'Warm Earth' },
    vibe: { en: 'Earth tones, organic', pt: 'Terrosos, aconchegante' },
    tokens: {
      primary: '#A8754E', primaryDark: '#6E4B31', accent: '#7E8E5A',
      bg: '#F1E9DC', surface: '#FAF3E6', surfaceAlt: '#E5D9C4',
      text: '#2F261C', textMuted: '#7B6C5A', border: '#D6C8AF',
      heroBg: '#6E4B31', heroInk: '#FAF3E6',
      isDark: false,
    },
  },
  'dark-premium': {
    label: { en: 'Dark Premium', pt: 'Dark Premium' },
    vibe: { en: 'Dark backdrop, gold', pt: 'Fundo escuro, dourado' },
    tokens: {
      primary: '#C9A465', primaryDark: '#9D7E48', accent: '#F2EADC',
      bg: '#141210', surface: '#1E1B17', surfaceAlt: '#252118',
      text: '#F1ECDF', textMuted: '#948B7B', border: '#2E2920',
      heroBg: '#0E0C0A', heroInk: '#F1ECDF',
      isDark: true,
    },
  },
  'vivid-culture': {
    label: { en: 'Vivid Culture', pt: 'Vivid Culture' },
    vibe: { en: 'Vibrant, textured hair', pt: 'Vibrante, cabelo texturizado' },
    tokens: {
      primary: '#C44A31', primaryDark: '#8A2918', accent: '#EFA45B',
      bg: '#1A1411', surface: '#251B16', surfaceAlt: '#2E211B',
      text: '#F4ECDF', textMuted: '#B0A192', border: '#3A2A22',
      heroBg: '#C44A31', heroInk: '#F4ECDF',
      isDark: true,
    },
  },
};

// ── Typography pairs ────────────────────────────────────────────────────
const FONT_PAIRS = {
  'editorial': {
    label: { en: 'Editorial', pt: 'Editorial' },
    heading: '"Cormorant Garamond", "Cormorant", Georgia, serif',
    body: '"DM Sans", system-ui, sans-serif',
    headingWeight: 500,
    googleFonts: 'family=Cormorant+Garamond:wght@400;500;600;700&family=DM+Sans:wght@400;500;600',
    headingStyle: { letterSpacing: '-0.01em', fontStyle: 'normal' },
  },
  'display-modern': {
    label: { en: 'Display Modern', pt: 'Display Moderno' },
    heading: '"Playfair Display", Georgia, serif',
    body: '"Manrope", system-ui, sans-serif',
    headingWeight: 600,
    googleFonts: 'family=Playfair+Display:wght@500;600;700;800&family=Manrope:wght@400;500;600',
    headingStyle: { letterSpacing: '-0.02em' },
  },
  'neo-grotesque': {
    label: { en: 'Neo Grotesque', pt: 'Neo Grotesque' },
    heading: '"Space Grotesk", system-ui, sans-serif',
    body: '"Space Grotesk", system-ui, sans-serif',
    headingWeight: 600,
    googleFonts: 'family=Space+Grotesk:wght@400;500;600;700',
    headingStyle: { letterSpacing: '-0.035em' },
  },
  'humanist': {
    label: { en: 'Humanist', pt: 'Humanista' },
    heading: '"Newsreader", Georgia, serif',
    body: '"Albert Sans", system-ui, sans-serif',
    headingWeight: 500,
    googleFonts: 'family=Newsreader:opsz,wght@6..72,400;6..72,500;6..72,600&family=Albert+Sans:wght@400;500;600',
    headingStyle: { letterSpacing: '-0.015em' },
  },
};

// ── Booking providers ───────────────────────────────────────────────────
// Fresha is the live booking provider — link below points to AB Aesthetics
// services page on Fresha.
const FRESHA_URL = 'https://www.fresha.com/en-GB/a/ab-aesthetics-cosmetology-cork-room-2-2nd-floor-23-25-drawbridge-street-kjgd061h/booking?entryPoint=book_now_link&pId=949079';
const BOOKING_PROVIDERS = {
  fresha:  { label: 'Fresha',  cta: { en: 'Book on Fresha',    pt: 'Agendar no Fresha', es: 'Reservar en Fresha', fr: 'Réserver sur Fresha'    }, mockUrl: FRESHA_URL },
  phorest: { label: 'Phorest', cta: { en: 'Book with Phorest', pt: 'Agendar via Phorest', es: 'Reservar con Phorest', fr: 'Réserver avec Phorest'  }, mockUrl: 'https://www.phorest.com' },
  sumup:   { label: 'SumUp',   cta: { en: 'Book on SumUp',     pt: 'Agendar no SumUp', es: 'Reservar en SumUp', fr: 'Réserver sur SumUp'     }, mockUrl: 'https://www.sumup.com' },
  calcom:  { label: 'Cal.com', cta: { en: 'Book a slot',       pt: 'Agendar horário', es: 'Reservar una cita', fr: 'Réserver un créneau'      }, mockUrl: 'https://cal.com/abaesthetics' },
  phone:   { label: 'Phone',   cta: { en: 'Call to book',      pt: 'Ligar para agendar', es: 'Llamar para reservar', fr: 'Appeler pour réserver'   }, mockUrl: 'tel:+353830208857' },
};

// ── Per-category service menus + copy ───────────────────────────────────
const CATEGORIES = {
  aesthetics: {
    label: { en: 'Aesthetics & cosmetology', pt: 'Estética & cosmetologia', es: 'Estética y cosmetología', fr: 'Esthétique et cosmétologie' },
    // Hero headline. Rendered as two lines: the part BEFORE the first
    // comma (upright) + the part after it (italic). Keep exactly ONE comma
    // and keep both lines short so the headline never breaks awkwardly —
    // and keep the EN/PT versions close in length.
    tagline: {
      en: 'Healthier skin, made simple in Cork.',
      pt: 'Pele mais saudável, com simplicidade em Cork.', es: 'Piel más sana, sin complicaciones en Cork.', fr: 'Une peau plus saine, tout simplement à Cork.',
    },
    about: {
      en: 'Aesthetic and cosmetology treatments built around your skin: deep hydration, cell renewal, real glow. Every session starts with a free consultation, so the plan you leave with is yours and nobody else\'s.',
      pt: 'Tratamentos estéticos e de cosmetologia pensados para a sua pele: hidratação profunda, renovação celular, brilho de verdade. Toda sessão começa com uma avaliação gratuita, para que o plano seja realmente seu, e não uma receita pronta.', es: 'Tratamientos de estética y cosmetología pensados para tu piel: hidratación profunda, renovación celular, luminosidad de verdad. Cada sesión empieza con una consulta gratuita, para que el plan sea realmente tuyo y de nadie más.', fr: 'Des soins esthétiques et de cosmétologie pensés pour votre peau : hydratation profonde, renouvellement cellulaire, éclat véritable. Chaque séance commence par un bilan gratuit, pour que le plan qui en ressort soit vraiment le vôtre.',
    },
    // Service menu — mirrors the studio's Fresha catalogue 1:1.
    //
    // Grouping is by CLIENT CONCERN, not by technique: a visitor who wants
    // "something for my acne" should land on the right tab without knowing
    // what a dermapen is. Order follows the natural journey — free
    // consultation first, then face, hair, body, recovery.
    //
    // Multi-session packages from the catalogue are folded into `note`
    // instead of becoming their own rows: the menu stays scannable and the
    // single-session price is always the headline number.
    //
    // Item shape: { name, desc, note?, duration (min), price }
    //   desc  — one plain-language line: what it does, no jargon.
    //   note  — package pricing / prerequisites, shown as a small chip.
    //   price — string or { en, pt } (so 'Free' can be 'Grátis').
    services: [
      {
        id: 'consultation',
        name: { en: 'Free Consultation', pt: 'Avaliação Grátis', es: 'Consulta Gratuita', fr: 'Bilan Gratuit' },
        blurb: {
          en: 'Never had a treatment before? Start here. A full assessment of your skin or body, an honest plan, and no obligation to book anything on the day.',
          pt: 'Nunca fez um tratamento? Comece por aqui. Uma avaliação completa da sua pele ou do seu corpo, um plano honesto e nenhum compromisso de agendar no mesmo dia.', es: '¿Nunca te has hecho un tratamiento? Empieza por aquí. Una valoración completa de tu piel o tu cuerpo, un plan honesto y ninguna obligación de reservar ese mismo día.', fr: 'Jamais fait de soin auparavant ? Commencez ici. Un bilan complet de votre peau ou de votre corps, un plan honnête, et aucune obligation de réserver le jour même.',
        },
        items: [
          {
            name: { en: 'Facial Aesthetic Consultation', pt: 'Avaliação Estética Facial', es: 'Consulta Estética Facial', fr: 'Bilan Esthétique du Visage' },
            desc: { en: 'Skin analysis and a treatment plan built for your face.',
                    pt: 'Análise da pele e um plano de tratamento feito para o seu rosto.', es: 'Análisis de la piel y un plan de tratamiento hecho para tu rostro.', fr: 'Analyse de la peau et plan de soin conçu pour votre visage.' },
            note: { en: 'Required before melasma treatment and mole removal',
                    pt: 'Obrigatória antes do tratamento de melasma e da remoção de pintas', es: 'Necesaria antes del tratamiento de melasma y la eliminación de lunares', fr: 'Nécessaire avant le traitement du mélasma et le retrait des grains de beauté' },
            duration: 30, price: { en: 'Free', pt: 'Grátis', es: 'Gratis', fr: 'Gratuit' },
          },
          {
            name: { en: 'Body Aesthetic Consultation', pt: 'Avaliação Estética Corporal', es: 'Consulta Estética Corporal', fr: 'Bilan Esthétique du Corps' },
            desc: { en: 'Measurements, goals and the right protocol for your body.',
                    pt: 'Medidas, objetivos e o protocolo certo para o seu corpo.', es: 'Medidas, objetivos y el protocolo adecuado para tu cuerpo.', fr: 'Mesures, objectifs et le protocole adapté à votre corps.' },
            note: { en: 'Required before any localized fat treatment',
                    pt: 'Obrigatória antes de qualquer tratamento de gordura localizada', es: 'Necesaria antes de cualquier tratamiento de grasa localizada', fr: 'Nécessaire avant tout traitement de la graisse localisée' },
            duration: 60, price: { en: 'Free', pt: 'Grátis', es: 'Gratis', fr: 'Gratuit' },
          },
        ],
      },
      {
        id: 'facials',
        name: { en: 'Facials & Skin Health', pt: 'Faciais & Pele', es: 'Faciales y Piel', fr: 'Visage et Peau' },
        blurb: {
          en: 'Everyday care, plus treatments for the things that bother you most: dull skin, congestion, acne, dark patches and open pores.',
          pt: 'Cuidados de rotina e tratamentos para o que mais incomoda: pele opaca, congestionada, acne, manchas e poros dilatados.', es: 'Cuidados de rutina y tratamientos para lo que más te molesta: piel apagada, congestionada, acné, manchas y poros abiertos.', fr: 'Des soins de routine et des traitements pour ce qui vous gêne le plus : teint terne, peau congestionnée, acné, taches et pores dilatés.',
        },
        items: [
          {
            name: { en: 'Facial Revitalization', pt: 'Revitalização Facial', es: 'Revitalización Facial', fr: 'Revitalisation du Visage' },
            desc: { en: 'Deep hydration, gentle exfoliation and visible glow in a single session. The studio\'s signature.',
                    pt: 'Hidratação profunda, esfoliação suave e brilho visível em uma sessão. A assinatura do estúdio.', es: 'Hidratación profunda, exfoliación suave y luminosidad visible en una sola sesión. El sello del estudio.', fr: 'Hydratation profonde, exfoliation douce et éclat visible en une seule séance. La signature du studio.' },
            duration: 60, price: '€60',
          },
          {
            name: { en: 'Deep Skin Cleansing', pt: 'Limpeza de Pele Profunda', es: 'Limpieza Facial Profunda', fr: 'Nettoyage de Peau en Profondeur' },
            desc: { en: 'Extraction of blackheads and congestion, followed by soothing, calming care.',
                    pt: 'Extração de cravos e impurezas, seguida de um cuidado calmante.', es: 'Extracción de puntos negros e impurezas, seguida de un cuidado calmante.', fr: 'Extraction des points noirs et des impuretés, suivie d\'un soin apaisant.' },
            note: { en: 'Course of 3 sessions €210', pt: 'Pacote de 3 sessões €210', es: 'Pack de 3 sesiones €210', fr: 'Forfait de 3 séances €210' },
            duration: 90, price: '€80',
          },
          {
            name: { en: 'Acne Treatment', pt: 'Tratamento de Acne', es: 'Tratamiento del Acné', fr: 'Traitement de l\'Acné' },
            desc: { en: 'Controls active breakouts and calms inflamed skin.',
                    pt: 'Controla as espinhas ativas e acalma a pele inflamada.', es: 'Controla los brotes activos y calma la piel inflamada.', fr: 'Contrôle les poussées et apaise la peau enflammée.' },
            note: { en: 'Course of 5 sessions €410', pt: 'Pacote de 5 sessões €410', es: 'Pack de 5 sesiones €410', fr: 'Forfait de 5 séances €410' },
            duration: 60, price: '€90',
          },
          {
            name: { en: 'Facial Microneedling (Dermapen)', pt: 'Microagulhamento Facial (Dermapen)', es: 'Microneedling Facial (Dermapen)', fr: 'Microneedling du Visage (Dermapen)' },
            desc: { en: 'Stimulates collagen to soften scars, marks and fine lines.',
                    pt: 'Estimula colágeno para suavizar cicatrizes, marcas e linhas finas.', es: 'Estimula el colágeno para suavizar cicatrices, marcas y líneas finas.', fr: 'Stimule le collagène pour atténuer cicatrices, marques et ridules.' },
            note: { en: 'Course of 3 sessions €320', pt: 'Pacote de 3 sessões €320', es: 'Pack de 3 sesiones €320', fr: 'Forfait de 3 séances €320' },
            duration: 60, price: '€120',
          },
          {
            name: { en: 'Microneedling for Enlarged Pores', pt: 'Microagulhamento para Poros Dilatados', es: 'Microneedling para Poros Dilatados', fr: 'Microneedling pour Pores Dilatés' },
            desc: { en: 'Refines skin texture and visibly tightens open pores.',
                    pt: 'Refina a textura da pele e fecha visivelmente os poros.', es: 'Afina la textura de la piel y cierra visiblemente los poros.', fr: 'Affine le grain de peau et resserre visiblement les pores.' },
            note: { en: 'Course of 3 sessions €320', pt: 'Pacote de 3 sessões €320', es: 'Pack de 3 sesiones €320', fr: 'Forfait de 3 séances €320' },
            duration: 60, price: '€120',
          },
          {
            name: { en: 'Melasma Treatment', pt: 'Tratamento de Melasma', es: 'Tratamiento del Melasma', fr: 'Traitement du Mélasma' },
            desc: { en: 'A full protocol to lighten dark patches and even out skin tone.',
                    pt: 'Protocolo completo para clarear manchas e uniformizar o tom da pele.', es: 'Un protocolo completo para aclarar las manchas y unificar el tono.', fr: 'Un protocole complet pour éclaircir les taches et unifier le teint.' },
            note: { en: 'Full protocol · book the free facial consultation first',
                    pt: 'Protocolo completo · agende antes a avaliação facial gratuita', es: 'Protocolo completo · reserva antes la consulta facial gratuita', fr: 'Protocole complet · réservez d\'abord le bilan facial gratuit' },
            duration: 60, price: '€550',
          },
          {
            name: { en: 'Removal of Moles & Warts', pt: 'Remoção de Pintas & Verrugas', es: 'Eliminación de Lunares y Verrugas', fr: 'Retrait de Grains de Beauté et Verrues' },
            desc: { en: 'Quick, precise removal of small skin lesions.',
                    pt: 'Remoção rápida e precisa de pequenas lesões de pele.', es: 'Eliminación rápida y precisa de pequeñas lesiones cutáneas.', fr: 'Retrait rapide et précis de petites lésions cutanées.' },
            note: { en: 'Book the free facial consultation first · final price confirmed there',
                    pt: 'Agende antes a avaliação facial gratuita · o valor final é confirmado nela', es: 'Reserva antes la consulta facial gratuita · el precio final se confirma ahí', fr: 'Réservez d\'abord le bilan facial gratuit · le prix final y est confirmé' },
            duration: 15, price: { en: 'from €60', pt: 'a partir de €60', es: 'desde €60', fr: 'à partir de €60' },
          },
        ],
      },
      {
        id: 'lifting',
        name: { en: 'Anti-Aging & Lifting', pt: 'Anti-idade & Lifting', es: 'Antiedad y Lifting', fr: 'Anti-âge et Lifting' },
        blurb: {
          en: 'Non-surgical lifting and firming, area by area. Treat one region or combine them all in a single session.',
          pt: 'Lifting e firmeza sem cirurgia, área por área. Trate uma região ou combine todas em uma única sessão.', es: 'Lifting y firmeza sin cirugía, zona por zona. Trata una sola región o combínalas todas en una misma sesión.', fr: 'Lifting et fermeté sans chirurgie, zone par zone. Traitez une seule région ou combinez-les toutes en une séance.',
        },
        items: [
          {
            name: { en: 'Smoker Lines Face Lift', pt: 'Lifting para Rugas ao Redor da Boca', es: 'Lifting para el Código de Barras', fr: 'Lifting des Rides du Fumeur' },
            desc: { en: 'Softens the fine vertical lines around the lips.',
                    pt: 'Suaviza as linhas verticais finas ao redor dos lábios.', es: 'Suaviza las líneas verticales finas alrededor de los labios.', fr: 'Atténue les fines ridules verticales autour des lèvres.' },
            duration: 60, price: '€170',
          },
          {
            name: { en: 'Under-Eye Face Lift', pt: 'Lifting para a Região dos Olhos', es: 'Lifting del Contorno de Ojos', fr: 'Lifting du Contour des Yeux' },
            desc: { en: 'Lifts and firms the tired, hollow area under the eyes.',
                    pt: 'Levanta e firma a região cansada e funda abaixo dos olhos.', es: 'Levanta y da firmeza a la zona cansada y hundida bajo los ojos.', fr: 'Relève et raffermit la zone fatiguée et creusée sous les yeux.' },
            duration: 60, price: '€250',
          },
          {
            name: { en: 'Forehead Face Lift', pt: 'Lifting para a Testa', es: 'Lifting de Frente', fr: 'Lifting du Front' },
            desc: { en: 'Smooths forehead lines and lifts the brow line.',
                    pt: 'Suaviza as linhas da testa e eleva a linha das sobrancelhas.', es: 'Suaviza las líneas de la frente y eleva la línea de las cejas.', fr: 'Lisse les lignes du front et relève la ligne des sourcils.' },
            duration: 60, price: '€320',
          },
          {
            name: { en: 'Cheek Face Lift', pt: 'Lifting para as Maçãs do Rosto', es: 'Lifting de Pómulos', fr: 'Lifting des Pommettes' },
            desc: { en: 'Restores volume and lifts sagging cheeks.',
                    pt: 'Devolve volume e levanta as maçãs do rosto com flacidez.', es: 'Devuelve volumen y eleva los pómulos con flacidez.', fr: 'Redonne du volume et relève les pommettes relâchées.' },
            duration: 60, price: '€400',
          },
          {
            name: { en: 'Neck Face Lift', pt: 'Lifting para o Pescoço', es: 'Lifting de Cuello', fr: 'Lifting du Cou' },
            desc: { en: 'Firms loose skin on the neck and along the jawline.',
                    pt: 'Firma a pele flácida do pescoço e do contorno do maxilar.', es: 'Da firmeza a la piel flácida del cuello y del contorno mandibular.', fr: 'Raffermit la peau relâchée du cou et de l\'ovale du visage.' },
            duration: 60, price: '€500',
          },
          {
            name: { en: 'Full Face Lift', pt: 'Lifting Facial Completo', es: 'Lifting Facial Completo', fr: 'Lifting Complet du Visage' },
            desc: { en: 'Every area treated in one session, for a complete lift.',
                    pt: 'Todas as áreas tratadas em uma única sessão, para um lifting completo.', es: 'Todas las zonas tratadas en una sesión, para un lifting completo.', fr: 'Toutes les zones traitées en une séance, pour un lifting complet.' },
            note: { en: 'All areas combined, best value', pt: 'Todas as áreas juntas, melhor custo-benefício', es: 'Todas las zonas juntas, la mejor relación calidad-precio', fr: 'Toutes les zones réunies, le meilleur rapport qualité-prix' },
            duration: 90, price: '€900',
          },
          {
            name: { en: 'Radiesse', pt: 'Radiesse' },
            desc: { en: 'Collagen biostimulator that firms the skin and restores facial contour.',
                    pt: 'Bioestimulador de colágeno que firma a pele e devolve contorno ao rosto.', es: 'Bioestimulador de colágeno que da firmeza y devuelve el contorno al rostro.', fr: 'Biostimulateur de collagène qui raffermit la peau et redonne du contour au visage.' },
            duration: 60, price: '€450',
          },
        ],
      },
      {
        id: 'hair',
        name: { en: 'Hair Loss', pt: 'Queda de Cabelo', es: 'Caída del Cabello', fr: 'Chute de Cheveux' },
        blurb: {
          en: 'Thinning hair or a scalp that\'s starting to show? Microneedling stimulates the follicle and strengthens new growth.',
          pt: 'Cabelo ralo ou couro cabeludo começando a aparecer? O microagulhamento estimula o folículo e fortalece o novo crescimento.', es: '¿Pelo más fino o cuero cabelludo que empieza a verse? El microneedling estimula el folículo y fortalece el crecimiento nuevo.', fr: 'Cheveux qui s\'affinent ou cuir chevelu qui commence à se voir ? Le microneedling stimule le follicule et renforce la repousse.',
        },
        items: [
          {
            name: { en: 'Scalp Microneedling for Hair Loss', pt: 'Microagulhamento Capilar para Queda', es: 'Microneedling Capilar para la Caída', fr: 'Microneedling du Cuir Chevelu' },
            desc: { en: 'Dermapen on the scalp to stimulate the follicle and slow hair loss.',
                    pt: 'Dermapen no couro cabeludo para estimular o folículo e frear a queda.', es: 'Dermapen en el cuero cabelludo para estimular el folículo y frenar la caída.', fr: 'Dermapen sur le cuir chevelu pour stimuler le follicule et freiner la chute.' },
            note: { en: 'Course of 3 sessions €324', pt: 'Pacote de 3 sessões €324', es: 'Pack de 3 sesiones €324', fr: 'Forfait de 3 séances €324' },
            duration: 60, price: '€120',
          },
        ],
      },
      {
        id: 'body',
        name: { en: 'Body & Fat Loss', pt: 'Corpo & Gordura', es: 'Cuerpo y Grasa', fr: 'Corps et Graisse' },
        blurb: {
          en: 'Targeted fat reduction and full-body care. Every fat treatment starts with the free body consultation.',
          pt: 'Redução de gordura localizada e cuidados para o corpo todo. Todo tratamento de gordura começa com a avaliação corporal gratuita.', es: 'Reducción de grasa localizada y cuidados para todo el cuerpo. Cada tratamiento de grasa empieza con la consulta corporal gratuita.', fr: 'Réduction de la graisse localisée et soins pour tout le corps. Chaque traitement commence par le bilan corporel gratuit.',
        },
        items: [
          {
            name: { en: 'Lipodeep Lipolytic (Abdomen)', pt: 'Lipodeep Lipolítico (Abdômen)', es: 'Lipolítico Lipodeep (Abdomen)', fr: 'Lipolytique Lipodeep (Abdomen)' },
            desc: { en: 'Injectable lipolytic that breaks down localized belly fat.',
                    pt: 'Lipolítico injetável que dissolve a gordura localizada da barriga.', es: 'Lipolítico inyectable que disuelve la grasa localizada del abdomen.', fr: 'Lipolytique injectable qui dissout la graisse localisée du ventre.' },
            note: { en: 'Course of 6 sessions €684', pt: 'Pacote de 6 sessões €684', es: 'Pack de 6 sesiones €684', fr: 'Forfait de 6 séances €684' },
            duration: 45, price: '€120',
          },
          {
            name: { en: 'Lipodeep Lipolytic (Double Chin)', pt: 'Lipodeep Lipolítico (Papada)', es: 'Lipolítico Lipodeep (Papada)', fr: 'Lipolytique Lipodeep (Double Menton)' },
            desc: { en: 'Reduces the double chin and redefines the jawline.',
                    pt: 'Reduz a papada e redefine o contorno do queixo.', es: 'Reduce la papada y redefine el contorno mandibular.', fr: 'Réduit le double menton et redessine l\'ovale du visage.' },
            note: { en: 'Course of 5 sessions €360', pt: 'Pacote de 5 sessões €360', es: 'Pack de 5 sesiones €360', fr: 'Forfait de 5 séances €360' },
            duration: 30, price: '€80',
          },
          {
            name: { en: 'Localized Fat Treatment', pt: 'Tratamento de Gordura Localizada', es: 'Tratamiento de Grasa Localizada', fr: 'Traitement de la Graisse Localisée' },
            desc: { en: 'Combined protocol for stubborn fat on the areas you choose.',
                    pt: 'Protocolo combinado para a gordura resistente nas áreas que você escolher.', es: 'Protocolo combinado para la grasa rebelde en las zonas que elijas.', fr: 'Protocole combiné pour la graisse tenace, sur les zones de votre choix.' },
            note: { en: '5 sessions €712 · 10 sessions €1,350 · book the free body consultation first',
                    pt: '5 sessões €712 · 10 sessões €1.350 · agende antes a avaliação corporal gratuita', es: '5 sesiones €712 · 10 sesiones €1.350 · reserva antes la consulta corporal gratuita', fr: '5 séances €712 · 10 séances €1 350 · réservez d\'abord le bilan corporel gratuit' },
            duration: 90, price: '€150',
          },
          {
            name: { en: 'Body Exfoliation & Hydration', pt: 'Esfoliação & Hidratação Corporal', es: 'Exfoliación e Hidratación Corporal', fr: 'Gommage et Hydratation du Corps' },
            desc: { en: 'Full-body exfoliation and deep hydration that leave the skin soft and even.',
                    pt: 'Esfoliação de corpo inteiro e hidratação profunda, que deixam a pele macia e uniforme.', es: 'Exfoliación de cuerpo entero e hidratación profunda que dejan la piel suave y uniforme.', fr: 'Gommage intégral et hydratation profonde qui laissent la peau douce et uniforme.' },
            duration: 60, price: '€70',
          },
        ],
      },
      {
        id: 'recovery',
        name: { en: 'Massage & Recovery', pt: 'Massagem & Recuperação', es: 'Masaje y Recuperación', fr: 'Massage et Récupération' },
        blurb: {
          en: 'Drainage, recovery after plastic surgery, and relief for tight, overworked muscles.',
          pt: 'Drenagem, recuperação após cirurgia plástica e alívio para a musculatura tensa.', es: 'Drenaje, recuperación después de cirugía plástica y alivio para la musculatura tensa.', fr: 'Drainage, récupération après chirurgie esthétique et soulagement des muscles tendus.',
        },
        items: [
          {
            name: { en: 'Manual Lymphatic Drainage', pt: 'Drenagem Linfática Manual', es: 'Drenaje Linfático Manual', fr: 'Drainage Lymphatique Manuel' },
            desc: { en: 'Reduces swelling and fluid retention with slow, manual strokes.',
                    pt: 'Reduz inchaço e retenção de líquido com manobras manuais lentas.', es: 'Reduce la hinchazón y la retención de líquidos con maniobras manuales lentas.', fr: 'Réduit les gonflements et la rétention d\'eau par des manœuvres manuelles lentes.' },
            note: { en: '5 sessions €285 · 10 sessions €540', pt: '5 sessões €285 · 10 sessões €540', es: '5 sesiones €285 · 10 sesiones €540', fr: '5 séances €285 · 10 séances €540' },
            duration: 60, price: '€60',
          },
          {
            name: { en: 'Plastic Surgery Post-operative', pt: 'Pós-operatório de Cirurgia Plástica', es: 'Postoperatorio de Cirugía Plástica', fr: 'Post-opératoire de Chirurgie Esthétique' },
            desc: { en: 'Structured recovery after surgery, with less swelling and better healing.',
                    pt: 'Recuperação estruturada depois da cirurgia, com menos inchaço e melhor cicatrização.', es: 'Recuperación estructurada después de la cirugía, con menos hinchazón y mejor cicatrización.', fr: 'Récupération structurée après l\'opération, avec moins de gonflement et une meilleure cicatrisation.' },
            note: { en: 'Course of 10 sessions €810', pt: 'Pacote de 10 sessões €810', es: 'Pack de 10 sesiones €810', fr: 'Forfait de 10 séances €810' },
            duration: 90, price: '€90',
          },
          {
            name: { en: 'Post-surgical Fibrosis', pt: 'Fibrose Pós-cirúrgica', es: 'Fibrosis Postquirúrgica', fr: 'Fibrose Post-chirurgicale' },
            desc: { en: 'Breaks down the hardened tissue and lumps left behind after surgery.',
                    pt: 'Desfaz o tecido endurecido e os nódulos que ficam depois da cirurgia.', es: 'Deshace el tejido endurecido y los nódulos que quedan tras la cirugía.', fr: 'Défait les tissus durcis et les nodules qui subsistent après l\'opération.' },
            note: { en: 'Course of 10 sessions €810', pt: 'Pacote de 10 sessões €810', es: 'Pack de 10 sesiones €810', fr: 'Forfait de 10 séances €810' },
            duration: 60, price: '€90',
          },
          {
            name: { en: 'Myofascial Release (Back)', pt: 'Liberação Miofascial (Costas)', es: 'Liberación Miofascial (Espalda)', fr: 'Libération Myofasciale (Dos)' },
            desc: { en: 'Releases tension and knots across the back and shoulders.',
                    pt: 'Libera a tensão e os nós das costas e dos ombros.', es: 'Libera la tensión y los nudos de la espalda y los hombros.', fr: 'Libère les tensions et les nœuds du dos et des épaules.' },
            duration: 40, price: '€70',
          },
          {
            name: { en: 'Myofascial Release (Full Body)', pt: 'Liberação Miofascial (Corpo Inteiro)', es: 'Liberación Miofascial (Cuerpo Entero)', fr: 'Libération Myofasciale (Corps Entier)' },
            desc: { en: 'Head-to-toe release for chronic tension and stiffness.',
                    pt: 'Liberação da cabeça aos pés para tensão crônica e rigidez.', es: 'Liberación de pies a cabeza para la tensión crónica y la rigidez.', fr: 'Libération de la tête aux pieds pour les tensions chroniques et les raideurs.' },
            duration: 90, price: '€150',
          },
        ],
      },
    ],
  },
};

// Gallery — the studio's real results. `beforeAfter: true` puts a
// BEFORE / AFTER badge on the tile. Ratios are the images' exact pixel
// ratios: the tiles are object-fit: cover, and cropping a before/after
// collage would cut off half the comparison. `tileRatio` is the uniform
// box the grid shows them in — with tileRatio set the tile letterboxes
// (object-fit: contain) so every result reads at the same size.
const BEFORE_AFTER = [
  { id: 1, ratio: '845/864', tileRatio: '1/1', kind: 'facial', beforeAfter: true,
    label: { en: 'Facial treatment, front view', pt: 'Tratamento facial, de frente', es: 'Tratamiento facial, de frente', fr: 'Soin du visage, de face' },
    imageUrl: 'assets/before-after-1.webp' },
  { id: 2, ratio: '832/860', tileRatio: '1/1', kind: 'facial', beforeAfter: true,
    label: { en: 'Facial treatment, side view', pt: 'Tratamento facial, de perfil', es: 'Tratamiento facial, de perfil', fr: 'Soin du visage, de profil' },
    imageUrl: 'assets/before-after-2.webp' },
  { id: 3, ratio: '539/860', tileRatio: '1/1', kind: 'body', beforeAfter: true,
    label: { en: 'Body treatment', pt: 'Tratamento corporal', es: 'Tratamiento corporal', fr: 'Soin du corps' },
    imageUrl: 'assets/before-after-3.webp' },
  // Same client, three angles — profile / front / profile.
  { id: 4, ratio: '688/834', tileRatio: '1/1', kind: 'facial', beforeAfter: true,
    label: { en: 'Lip and chin filler, side view', pt: 'Preenchimento de lábios e queixo, de perfil', es: 'Relleno de labios y mentón, de perfil', fr: 'Injections lèvres et menton, de profil' },
    imageUrl: 'assets/before-after-4.webp' },
  { id: 5, ratio: '614/811', tileRatio: '1/1', kind: 'facial', beforeAfter: true,
    label: { en: 'Lip and chin filler, front view', pt: 'Preenchimento de lábios e queixo, de frente', es: 'Relleno de labios y mentón, de frente', fr: 'Injections lèvres et menton, de face' },
    imageUrl: 'assets/before-after-5.webp' },
  { id: 6, ratio: '652/832', tileRatio: '1/1', kind: 'facial', beforeAfter: true,
    label: { en: 'Lip and chin filler, side view', pt: 'Preenchimento de lábios e queixo, de perfil', es: 'Relleno de labios y mentón, de perfil', fr: 'Injections lèvres et menton, de profil' },
    imageUrl: 'assets/before-after-6.webp' },
  { id: 7, ratio: '816/834', tileRatio: '1/1', kind: 'facial', beforeAfter: true,
    label: { en: 'Acne treatment', pt: 'Tratamento de acne', es: 'Tratamiento del acné', fr: 'Traitement de l\'acné' },
    imageUrl: 'assets/before-after-7.webp' },
  { id: 8, ratio: '650/827', tileRatio: '1/1', kind: 'facial', beforeAfter: true,
    label: { en: 'Mole & wart removal', pt: 'Remoção de pintas & verrugas', es: 'Eliminación de lunares y verrugas', fr: 'Retrait de grains de beauté et verrues' },
    imageUrl: 'assets/before-after-8.webp' },
];

// ── Team ────────────────────────────────────────────────────────────────
// Solo operator — Andreia Bravim (Instagram @andreia_bravim).
const TEAM = [
  {
    id: 'andreia',
    name: 'Andreia Bravim',
    role: { en: 'Aesthetician & Cosmetologist', pt: 'Esteticista & Cosmetóloga', es: 'Esteticista y Cosmetóloga', fr: 'Esthéticienne et Cosmétologue' },
    years: 11,
    yearsInIreland: 3,
    instagram: '@andreia_bravim',
    bookingUrl: FRESHA_URL,
    photoUrl: 'assets/andreia.webp',
    workSamples: BEFORE_AFTER,
    // Her own words, as she wrote them. Keep the first person.
    bio: {
      en: 'Almost 3 years practicing my profession here in Ireland, adding up to 11 years of dedication, growth and commitment to my journey. I continue to study, learn and evolve every single day. I\'m deeply grateful to God for everything I\'ve experienced, every challenge I\'ve overcome, and everything that is still yet to come. At AB Aesthetics every treatment is mine, from the first consultation to the last touch, and the plan is built around your skin, never a one-size-fits-all menu.',
      pt: 'Quase 3 anos exercendo a minha profissão aqui na Irlanda, somando 11 anos de dedicação, crescimento e comprometimento com a minha jornada. Continuo estudando, aprendendo e evoluindo todos os dias. Sou profundamente grata a Deus por tudo o que vivi, por cada desafio que superei e por tudo o que ainda está por vir. Na AB Aesthetics todo tratamento é meu, da primeira consulta ao último detalhe, e o plano é desenhado para a sua pele, nunca um menu padrão.', es: 'Casi 3 años ejerciendo mi profesión aquí en Irlanda, que se suman a 11 años de dedicación, crecimiento y compromiso con mi camino. Sigo estudiando, aprendiendo y evolucionando cada día. Le doy gracias a Dios por todo lo que he vivido, por cada reto que he superado y por todo lo que aún está por venir. En AB Aesthetics cada tratamiento es mío, desde la primera consulta hasta el último detalle, y el plan se construye alrededor de tu piel, nunca a partir de un menú igual para todas.', fr: 'Presque 3 ans à exercer mon métier ici en Irlande, qui s\'ajoutent à 11 ans de dévouement, de progression et d\'engagement dans mon parcours. Je continue à étudier, à apprendre et à évoluer chaque jour. Je suis profondément reconnaissante à Dieu pour tout ce que j\'ai vécu, chaque épreuve surmontée et tout ce qui reste à venir. Chez AB Aesthetics, chaque soin est le mien, du premier bilan à la dernière touche, et le plan se construit autour de votre peau, jamais à partir d\'un menu identique pour toutes.',
    },
    specialties: {
      aesthetics: ['Facial Revitalization', 'Facial Lifting', 'Lymphatic Drainage'],
    },
    // Formal qualifications, shown in the About band and on her profile.
    credentials: [
      { en: 'Diploma in Aesthetics and Cosmetology',
        pt: 'Graduação em Estética e Cosmetologia', es: 'Diplomatura en Estética y Cosmetología', fr: 'Diplôme en Esthétique et Cosmétologie' },
      { en: 'Postgraduate in intradermal and subcutaneous procedures (injectables)',
        pt: 'Pós-graduação em procedimentos intradérmicos e subcutâneos (injetáveis)', es: 'Posgrado en procedimientos intradérmicos y subcutáneos (inyectables)', fr: 'Post-diplôme en procédures intradermiques et sous-cutanées (injectables)' },
    ],
    accent: 0,
  },
];

// ── Reviews (Google reviews — AB Aesthetics & Cosmetology, Cork) ────────
// All 11 Google reviews are 5★; the scrape captured aggregate only, so the
// snippets below mirror the kinds of feedback Andreia receives across
// Google and Fresha. Confirm wording with the client at E6.
const REVIEWS = [
  { author: 'Aoife M', rating: 5, service: { en: 'Facial Revitalization', pt: 'Revitalização Facial', es: 'Revitalización Facial', fr: 'Revitalisation du Visage' }, days: 38, text: { en: "Andreia is incredible. My skin felt completely renewed after the facial revitalization and the difference was visible the same day. The consultation made me feel heard. I recommend her to everyone.", pt: 'A Andreia é incrível. Minha pele ficou completamente renovada depois da revitalização facial e dava para ver a diferença no mesmo dia. Na avaliação ela realmente me escutou. Recomendo para todo mundo.', es: 'Andreia es increíble. Mi piel quedó completamente renovada después de la revitalización facial y se notaba la diferencia el mismo día. En la consulta me escuchó de verdad. Se la recomiendo a todo el mundo.', fr: 'Andreia est incroyable. Ma peau était complètement renouvelée après la revitalisation et la différence se voyait le jour même. Pendant le bilan, elle m\'a vraiment écoutée. Je la recommande à tout le monde.' }},
  { author: 'Camila R', rating: 5, service: { en: 'Deep Cleansing Facial', pt: 'Limpeza Profunda', es: 'Limpieza Facial Profunda', fr: 'Nettoyage de Peau en Profondeur' }, days: 62, text: { en: 'Cleanest, most relaxing facial I\'ve had in Cork. Andreia explains every step and the room is spotless. My skin has not broken out once since I started going.', pt: 'A limpeza facial mais cuidadosa e relaxante que já fiz em Cork. A Andreia explica cada etapa e o ambiente é impecável. Minha pele não teve nenhuma crise desde que comecei.', es: 'La limpieza facial más cuidadosa y relajante que me he hecho en Cork. Andreia explica cada paso y la sala está impecable. No me ha salido ni un grano desde que voy.', fr: 'Le soin du visage le plus soigné et le plus relaxant que j\'aie fait à Cork. Andreia explique chaque étape et la salle est impeccable. Je n\'ai plus eu une seule imperfection depuis que j\'y vais.' }},
  { author: 'Sarah O\'Connell', rating: 5, service: { en: 'Lymphatic Drainage', pt: 'Drenagem Linfática', es: 'Drenaje Linfático', fr: 'Drainage Lymphatique' }, days: 91, text: { en: 'I came in feeling sluggish and bloated and left like a new person. This is real lymphatic drainage, done with proper technique, not a quick rub. I\'ve already booked the next session.', pt: 'Cheguei cansada e inchada e saí outra pessoa. Drenagem linfática de verdade, feita com técnica. Não foi uma massagem qualquer. Já agendei a próxima sessão.', es: 'Llegué pesada e hinchada y salí como nueva. Esto es drenaje linfático de verdad, hecho con técnica, no un masaje rápido. Ya tengo reservada la siguiente sesión.', fr: 'Je suis arrivée lourde et gonflée, je suis repartie comme neuve. C\'est du vrai drainage lymphatique, fait avec technique, pas un massage express. J\'ai déjà réservé la prochaine séance.' }},
  { author: 'Luana F', rating: 5, service: { en: 'Acne Treatment', pt: 'Tratamento de Acne', es: 'Tratamiento del Acné', fr: 'Traitement de l\'Acné' }, days: 124, text: { en: 'I struggled with breakouts for years. Five sessions with Andreia and my skin is calm for the first time. She takes her time, explains everything and gives an honest opinion. Worth every cent.', pt: 'Convivi com espinhas por anos. Cinco sessões com a Andreia e minha pele está calma pela primeira vez. Ela tem paciência, explica tudo e dá uma opinião honesta. Vale cada centavo.', es: 'Llevaba años con brotes de acné. Cinco sesiones con Andreia y mi piel está tranquila por primera vez. Se toma su tiempo, te explica todo y da una opinión honesta. Vale cada céntimo.', fr: 'J\'ai eu des poussées d\'acné pendant des années. Cinq séances avec Andreia et ma peau est enfin apaisée. Elle prend son temps, explique tout et donne un avis honnête. Ça vaut chaque centime.' }},
  { author: 'Mary K', rating: 5, service: { en: 'Face Lift', pt: 'Lifting Facial', es: 'Lifting Facial', fr: 'Lifting du Visage' }, days: 178, text: { en: 'I\'m in my 50s and I was nervous about going to an aesthetician for the first time. Andreia was so warm and professional, and she talked me through every step before starting. My skin looks firmer and more lifted, and I keep getting compliments.', pt: 'Tenho 50 e poucos anos e estava nervosa para ir a uma esteticista pela primeira vez. A Andreia foi muito acolhedora e profissional, e me explicou cada etapa antes de começar. Minha pele está mais firme e levantada, e não paro de receber elogios.', es: 'Tengo cincuenta y tantos y estaba nerviosa por ir a una esteticista por primera vez. Andreia fue muy cercana y profesional, y me explicó cada paso antes de empezar. Mi piel se ve más firme y elevada, y no paro de recibir cumplidos.', fr: 'J\'ai la cinquantaine et j\'étais nerveuse à l\'idée d\'aller chez une esthéticienne pour la première fois. Andreia a été très chaleureuse et professionnelle, et elle m\'a expliqué chaque étape avant de commencer. Ma peau est plus ferme et plus tonique, et je reçois des compliments sans arrêt.' }},
  { author: 'Beatriz S', rating: 5, service: { en: 'Microneedling', pt: 'Microagulhamento', es: 'Microneedling', fr: 'Microneedling' }, days: 226, text: { en: 'Brilliant results from the microneedling. Acne scars I\'d had for years are visibly reduced after the course. Andreia is technically excellent and so easy to talk to.', pt: 'Resultados incríveis com o microagulhamento. Cicatrizes de acne que eu tinha há anos diminuíram bastante depois do protocolo. A Andreia é tecnicamente excelente e super tranquila de conversar.', es: 'Resultados buenísimos con el microneedling. Cicatrices de acné que tenía desde hacía años se han reducido mucho después del protocolo. Andreia es excelente técnicamente y da mucha confianza hablar con ella.', fr: 'Des résultats formidables avec le microneedling. Des cicatrices d\'acné que j\'avais depuis des années ont nettement diminué après le protocole. Andreia est excellente techniquement et très facile d\'accès.' }},
];

// ── Static business data ────────────────────────────────────────────────
const BUSINESS = {
  name: 'AB Aesthetics & Cosmetology',
  established: null,
  totalScore: 5.0,
  reviewsCount: 11,
  phone: '+353 83 020 8857',
  phoneDisplay: '+353 83 020 8857',
  whatsapp: '+353830208857',
  whatsappDisplay: '+353 83 020 8857',
  email: null,
  website: FRESHA_URL,
  instagram: 'https://www.instagram.com/andreia_bravim/',
  facebook: 'https://www.facebook.com/p/andreia_bravim-100069475773951/',
  address: 'Room 2, 2nd floor, 23–25 Drawbridge St, Cork, T12 F2WD, Ireland',
  area: 'Cork City Centre',
  coords: { lat: 51.8997692, lng: -8.4715026 },
  mapsUrl: 'https://www.google.com/maps/search/?api=1&query=AB%20Aesthetics%20%26%20Cosmetology&query_place_id=ChIJ4QBkkP2RREgRlLQQzQlWsvg',
  bookingUrl: FRESHA_URL,
  coverImage: 'assets/hero.webp',
  heroVideo: 'assets/hero-video.mp4',
  heroVideoWebm: 'assets/hero-video.webm',
  facadeImage: 'assets/fachada.webp',
  // Inside the room, shown in the Visit section so a first-timer knows
  // what they're walking into before they book.
  studioImages: [
    { imageUrl: 'assets/studio-1.webp',
      label: { en: 'The treatment room', pt: 'A sala de tratamento', es: 'La sala de tratamiento', fr: 'La salle de soin' } },
    { imageUrl: 'assets/studio-2.webp',
      label: { en: 'Professional equipment', pt: 'Equipamentos profissionais', es: 'Equipos profesionales', fr: 'Équipements professionnels' } },
  ],
  imageUrls: [
    'https://lh3.googleusercontent.com/gps-cs-s/APNQkAHxSBmgRkBl9pODwsxWmoILp-b_kCSKjI8ZPdn7VnFzJ6O3VIAHbGvl_sPyNlo6Ze464HpNfc9X3QRmieg94W8nYEqYpWpj-RVBkEXEDZp3Dc7daRzMjmL7tP374XyzxvmWSDg=w1920-h1080-k-no',
  ],
  hours: [
    { day: { en: 'Mon', pt: 'Seg', es: 'Lun', fr: 'Lun' }, open: '08:00', close: '20:00' },
    { day: { en: 'Tue', pt: 'Ter', es: 'Mar', fr: 'Mar' }, open: '08:00', close: '20:00' },
    { day: { en: 'Wed', pt: 'Qua', es: 'Mié', fr: 'Mer' }, open: '08:00', close: '20:00' },
    { day: { en: 'Thu', pt: 'Qui', es: 'Jue', fr: 'Jeu' }, open: '08:00', close: '20:00' },
    { day: { en: 'Fri', pt: 'Sex', es: 'Vie', fr: 'Ven' }, open: '08:00', close: '20:00' },
    { day: { en: 'Sat', pt: 'Sáb', es: 'Sáb', fr: 'Sam' }, open: '08:00', close: '19:00' },
    // Closed on Sundays. The row stays in the table so visitors see it
    // stated rather than left to guess; 'Closed' is what the components key
    // off to render the closed label and the "Closed today" status.
    { day: { en: 'Sun', pt: 'Dom', es: 'Dom', fr: 'Dim' }, open: 'Closed', close: 'Closed' },
  ],
};

// ── i18n strings ────────────────────────────────────────────────────────
const COPY = {
  nav: {
    services: { en: 'Treatments', pt: 'Tratamentos', es: 'Tratamientos', fr: 'Soins' },
    gallery:  { en: 'Gallery',    pt: 'Galeria', es: 'Galería', fr: 'Galerie' },
    team:     { en: 'About',      pt: 'Sobre', es: 'Sobre mí', fr: 'À propos' },
    reviews:  { en: 'Reviews',    pt: 'Reviews', es: 'Opiniones', fr: 'Avis' },
    visit:    { en: 'Visit',      pt: 'Visite', es: 'Visítanos', fr: 'Nous trouver' },
    contact:  { en: 'Contact',    pt: 'Contato', es: 'Contacto', fr: 'Contact' },
    book:     { en: 'Book now',   pt: 'Agendar', es: 'Reservar', fr: 'Réserver' },
  },
  hero: {
    eyebrow:    { en: '23–25 DRAWBRIDGE ST · CORK CITY CENTRE', pt: '23–25 DRAWBRIDGE ST · CENTRO DE CORK', es: '23–25 DRAWBRIDGE ST · CENTRO DE CORK', fr: '23–25 DRAWBRIDGE ST · CENTRE DE CORK' },
    rating:     { en: 'on Google reviews',             pt: 'em avaliações Google', es: 'en reseñas de Google', fr: 'sur les avis Google' },
    reviewsLbl: { en: 'reviews',                       pt: 'avaliações', es: 'reseñas', fr: 'avis' },
    primaryCta: { en: 'Book a treatment',              pt: 'Agendar um tratamento', es: 'Reservar un tratamiento', fr: 'Réserver un soin' },
    walkin:     { en: 'Free consultation included',    pt: 'Consulta gratuita incluída', es: 'Consulta gratuita incluida', fr: 'Bilan gratuit inclus' },
    secondary:  { en: 'See the work',                  pt: 'Ver o trabalho', es: 'Ver el trabajo', fr: 'Voir les résultats' },
  },
  about: {
    // "About me" band — Andreia's own words, first person. line1/line2 are
    // hers verbatim; line3 bridges to the studio.
    eyebrow:  { en: 'ABOUT ME', pt: 'SOBRE MIM', es: 'SOBRE MÍ', fr: 'À PROPOS' },
    title:    { en: 'Hi, I\'m Andreia Bravim.',
                pt: 'Oi, eu sou a Andreia Bravim.', es: 'Hola, soy Andreia Bravim.', fr: 'Bonjour, je suis Andreia Bravim.' },
    line1:    { en: 'Almost 3 years practicing my profession here in Ireland, adding up to 11 years of dedication, growth and commitment to my journey.',
                pt: 'Quase 3 anos exercendo a minha profissão aqui na Irlanda, somando 11 anos de dedicação, crescimento e comprometimento com a minha jornada.', es: 'Casi 3 años ejerciendo mi profesión aquí en Irlanda, que se suman a 11 años de dedicación, crecimiento y compromiso con mi camino.', fr: 'Presque 3 ans à exercer mon métier ici en Irlande, qui s\'ajoutent à 11 ans de dévouement, de progression et d\'engagement dans mon parcours.' },
    line2:    { en: 'I continue to study, learn and evolve every single day. I\'m deeply grateful to God for everything I\'ve experienced, every challenge I\'ve overcome, and everything that is still yet to come.',
                pt: 'Continuo estudando, aprendendo e evoluindo todos os dias. Sou profundamente grata a Deus por tudo o que vivi, por cada desafio que superei e por tudo o que ainda está por vir.', es: 'Sigo estudiando, aprendiendo y evolucionando cada día. Le doy gracias a Dios por todo lo que he vivido, por cada reto que he superado y por todo lo que aún está por venir.', fr: 'Je continue à étudier, à apprendre et à évoluer chaque jour. Je suis profondément reconnaissante à Dieu pour tout ce que j\'ai vécu, chaque épreuve surmontée et tout ce qui reste à venir.' },
    line3:    { en: 'AB Aesthetics & Cosmetology is my one-room studio on Drawbridge Street, in the centre of Cork. Every treatment here is mine, from the first consultation to the last touch. And it always starts with a free consultation, because the right plan depends on your skin, never on a price list.',
                pt: 'A AB Aesthetics & Cosmetology é o meu estúdio de uma sala só, na Drawbridge Street, no centro de Cork. Todo tratamento aqui é meu, da primeira consulta ao último detalhe. E sempre começa com uma avaliação gratuita, porque o plano certo depende da sua pele, nunca de uma tabela de preços.', es: 'AB Aesthetics & Cosmetology es mi estudio de una sola sala en Drawbridge Street, en el centro de Cork. Cada tratamiento aquí es mío, desde la primera consulta hasta el último detalle. Y siempre empieza con una consulta gratuita, porque el plan correcto depende de tu piel, nunca de una lista de precios.', fr: 'AB Aesthetics & Cosmetology, c\'est mon studio d\'une seule pièce sur Drawbridge Street, au centre de Cork. Chaque soin ici est le mien, du premier bilan à la dernière touche. Et il commence toujours par un bilan gratuit, parce que le bon plan dépend de votre peau, jamais d\'une grille tarifaire.' },
    credentialsLbl: { en: 'Qualifications', pt: 'Formação', es: 'Formación', fr: 'Formation' },
    line4:    { en: 'Every booking is with me. No juniors, no rush, no surprises.',
                pt: 'Todo agendamento é comigo. Sem juniores, sem pressa, sem surpresas.', es: 'Cada reserva es conmigo. Sin ayudantes, sin prisas, sin sorpresas.', fr: 'Chaque rendez-vous est avec moi. Pas d\'assistante, pas de précipitation, pas de surprises.' },
    follow:   { en: 'Follow the work on Instagram', pt: 'Acompanhe o trabalho no Instagram', es: 'Sigue el trabajo en Instagram', fr: 'Suivez le travail sur Instagram' },
    // Stats under the story.
    meStat1Big: { en: '11', pt: '11' }, meStat1Lbl: { en: 'years in the profession', pt: 'anos de profissão', es: 'años de profesión', fr: 'ans de métier' },
    meStat2Big: { en: '3',  pt: '3'  }, meStat2Lbl: { en: 'years in Ireland',        pt: 'anos na Irlanda', es: 'años en Irlanda', fr: 'ans en Irlande' },
    meStat3Big: { en: '5.0', pt: '5,0', es: '5,0', fr: '5,0' }, meStat3Lbl: { en: 'Google rating',         pt: 'Nota no Google', es: 'Nota en Google', fr: 'Note Google' },
    // Stats shown above the reviews carousel.
    stat1Big: { en: '5.0', pt: '5,0', es: '5,0', fr: '5,0' }, stat1Lbl: { en: 'Google rating',  pt: 'Nota no Google', es: 'Nota en Google', fr: 'Note Google' },
    stat2Big: { en: '11',  pt: '11'  }, stat2Lbl: { en: 'Google reviews', pt: 'Avaliações Google', es: 'Reseñas en Google', fr: 'Avis Google' },
    stat3Big: { en: '★',   pt: '★'   }, stat3Lbl: { en: 'All 5-star',     pt: 'Todas 5 estrelas', es: 'Todas de 5 estrellas', fr: 'Toutes 5 étoiles' },
  },
  services: {
    eyebrow:   { en: 'TREATMENTS & PRICING', pt: 'TRATAMENTOS & PREÇOS', es: 'TRATAMIENTOS Y PRECIOS', fr: 'SOINS ET TARIFS' },
    title:     { en: 'Considered work, fair prices.',
                 pt: 'Trabalho cuidado, preços justos.', es: 'Trabajo cuidado, precios justos.', fr: 'Un travail soigné, des prix justes.' },
    sub:       { en: 'Pick the section that matches what you want to treat. Prices are per single session, and where a course of sessions costs less, the package price sits right under the treatment. A few treatments need 20 extra minutes of processing time, already built into your slot.',
                 pt: 'Escolha a seção que corresponde ao que você quer tratar. Os preços são por sessão avulsa e, quando o pacote sai mais barato, o valor aparece logo abaixo do tratamento. Alguns tratamentos precisam de 20 minutos extras de processamento, já incluídos no seu horário.', es: 'Elige la sección que corresponda a lo que quieres tratar. Los precios son por sesión suelta y, cuando el pack sale más barato, el importe aparece justo debajo del tratamiento. Algunos tratamientos necesitan 20 minutos extra de reposo, ya incluidos en tu cita.', fr: 'Choisissez la section qui correspond à ce que vous voulez traiter. Les prix sont par séance et, lorsque le forfait revient moins cher, son tarif figure juste sous le soin. Quelques soins demandent 20 minutes de pose supplémentaires, déjà comprises dans votre créneau.' },
    min:       { en: 'min', pt: 'min' },
    viewAll:   { en: 'View full menu', pt: 'Ver menu completo', es: 'Ver el menú completo', fr: 'Voir tous les soins' },
    bookThis:  { en: 'Book this',      pt: 'Agendar isso', es: 'Reservar', fr: 'Réserver'    },
  },
  gallery: {
    eyebrow: { en: 'RESULTS',  pt: 'RESULTADOS', es: 'RESULTADOS', fr: 'RÉSULTATS' },
    beforeLbl: { en: 'BEFORE', pt: 'ANTES', es: 'ANTES', fr: 'AVANT' },
    afterLbl:  { en: 'AFTER',  pt: 'DEPOIS', es: 'DESPUÉS', fr: 'APRÈS' },
    title:   { en: 'Before & after.', pt: 'Antes & depois.', es: 'Antes y después.', fr: 'Avant et après.' },
    sub:     { en: 'Real clients, photographed in the studio under the same light. No filters, no retouching. Click any image to expand.',
               pt: 'Clientes reais, fotografadas no estúdio sob a mesma luz. Sem filtro, sem retoque. Clique para ampliar.', es: 'Clientas reales, fotografiadas en el estudio con la misma luz. Sin filtros y sin retoques. Haz clic en cualquier imagen para ampliarla.', fr: 'De vraies clientes, photographiées au studio sous la même lumière. Sans filtre et sans retouche. Cliquez sur une image pour l\'agrandir.' },
    follow:  { en: 'See more on Instagram', pt: 'Mais no Instagram', es: 'Ver más en Instagram', fr: 'Voir plus sur Instagram' },
  },
  team: {
    eyebrow: { en: 'THE STUDIO',  pt: 'O ESTÚDIO', es: 'EL ESTUDIO', fr: 'LE STUDIO' },
    title:   { en: 'A one-room studio. One pair of hands.',
               pt: 'Um estúdio. Um par de mãos.', es: 'Un estudio de una sala. Un solo par de manos.', fr: 'Un studio d\'une pièce. Une seule paire de mains.' },
    sub:     { en: 'Every booking is with Andreia, the founder. No juniors, no rush, no surprises.',
               pt: 'Todo agendamento é com a Andreia, fundadora. Sem juniores, sem pressa, sem surpresas.', es: 'Cada reserva es con Andreia, la fundadora. Sin ayudantes, sin prisas, sin sorpresas.', fr: 'Chaque rendez-vous est avec Andreia, la fondatrice. Pas d\'assistante, pas de précipitation, pas de surprises.' },
    years:   { en: 'years',    pt: 'anos', es: 'años', fr: 'ans'    },
    book:    { en: 'Book with',pt: 'Agendar com', es: 'Reservar con', fr: 'Réserver avec' },
    profile: { en: 'Full profile', pt: 'Perfil completo', es: 'Perfil completo', fr: 'Profil complet' },
  },
  reviews: {
    eyebrow:  { en: 'REVIEWS', pt: 'REVIEWS', es: 'OPINIONES', fr: 'AVIS' },
    title:    { en: 'What clients say.', pt: 'O que dizem.', es: 'Lo que dicen las clientas.', fr: 'Ce que disent les clientes.' },
    daysAgo:  { en: 'd ago',   pt: 'd atrás', es: 'd', fr: 'j' },
    seeAllTpl:{ en: 'See all {n} reviews on Google',
                pt: 'Ver as {n} avaliações no Google', es: 'Ver las {n} reseñas en Google', fr: 'Voir les {n} avis sur Google' },
  },
  booking: {
    eyebrow:    { en: 'CONTACT',             pt: 'CONTATO', es: 'CONTACTO', fr: 'CONTACT' },
    title:      { en: 'Three ways to book.', pt: 'Três jeitos de agendar.', es: 'Tres formas de reservar.', fr: 'Trois façons de réserver.' },
    onlineLbl:  { en: 'Online · Fresha',     pt: 'Online · Fresha', es: 'Online · Fresha', fr: 'En ligne · Fresha' },
    onlineSub:  { en: 'Live availability, pick a slot and book',
                  pt: 'Disponibilidade em tempo real, escolha e agende', es: 'Disponibilidad en tiempo real, elige tu hora y reserva', fr: 'Disponibilités en direct, choisissez un créneau et réservez' },
    whatsLbl:   { en: 'WhatsApp',            pt: 'WhatsApp' },
    whatsSub:   { en: 'Quick chat to ask about a treatment',
                  pt: 'Conversa rápida pra tirar dúvida sobre um tratamento', es: 'Un mensaje rápido para preguntar por un tratamiento', fr: 'Un message rapide pour poser une question sur un soin' },
    phoneLbl:   { en: 'Phone',               pt: 'Telefone', es: 'Teléfono', fr: 'Téléphone' },
    phoneSub:   { en: 'Call Andreia directly',
                  pt: 'Fale direto com a Andreia', es: 'Habla directamente con Andreia', fr: 'Parlez directement à Andreia' },
    walkin:     { en: 'New to aesthetics? The first consultation is free. Send a message before booking and Andreia will point you to the right place to start.',
                  pt: 'Primeira vez fazendo estética? A avaliação inicial é gratuita. Mande uma mensagem antes de agendar e a Andreia indica o melhor ponto de partida.', es: '¿Es tu primera vez en estética? La consulta inicial es gratuita. Escríbenos antes de reservar y Andreia te indica por dónde empezar.', fr: 'C\'est votre première fois en esthétique ? Le premier bilan est gratuit. Envoyez un message avant de réserver et Andreia vous indiquera par où commencer.' },
    waMsg: {
      en: 'Hi Andreia! I\'d like to book the following:',
      pt: 'Olá Andreia! Gostaria de agendar o seguinte:', es: '¡Hola Andreia! Me gustaría reservar lo siguiente:', fr: 'Bonjour Andreia ! Je souhaite réserver ceci :',
    },
    // No trailing article on purpose: the service name is appended straight
    // after this, and an article would have to agree with the name's gender
    // (es/fr) or its first letter (en "a"/"an"). Leaving it out reads
    // correctly for every treatment in all four languages.
    waSingle: {
      en: 'Hi Andreia! I\'d like to book',
      pt: 'Olá Andreia! Gostaria de agendar', es: '¡Hola Andreia! Me gustaría reservar', fr: 'Bonjour Andreia ! Je souhaite réserver',
    },
    waWith:  { en: 'with', pt: 'com', es: 'con', fr: 'avec' },
    waAny:   { en: 'with Andreia', pt: 'com a Andreia', es: 'con Andreia', fr: 'avec Andreia' },
  },
  bookingModal: {
    title:     { en: 'Book via WhatsApp', pt: 'Agendar pelo WhatsApp', es: 'Reservar por WhatsApp', fr: 'Réserver par WhatsApp' },
    step1:     { en: 'Choose treatment', pt: 'Escolha o tratamento', es: 'Elige el tratamiento', fr: 'Choisir le soin' },
    step2:     { en: 'Choose stylist',   pt: 'Escolha o profissional', es: 'Elige profesional', fr: 'Choisir la praticienne' },
    step3:     { en: 'Confirm',          pt: 'Confirmar', es: 'Confirmar', fr: 'Confirmer' },
    anyStylist:{ en: 'With Andreia',     pt: 'Com a Andreia', es: 'Con Andreia', fr: 'Avec Andreia' },
    summary:   { en: 'You\'re booking',  pt: 'Você está agendando', es: 'Estás reservando', fr: 'Vous réservez' },
    with:      { en: 'with',             pt: 'com', es: 'con', fr: 'avec' },
    duration:  { en: 'Duration',         pt: 'Duração', es: 'Duración', fr: 'Durée' },
    next:      { en: 'Continue',         pt: 'Continuar', es: 'Continuar', fr: 'Continuer' },
    back:      { en: 'Back',             pt: 'Voltar', es: 'Atrás', fr: 'Retour' },
    note:      { en: 'You\'ll finish on',pt: 'Você finaliza no', es: 'Terminarás en', fr: 'Vous finaliserez sur' },
    confirm:   { en: 'Open',             pt: 'Abrir', es: 'Abrir', fr: 'Ouvrir' },
  },
  location: {
    eyebrow:  { en: 'VISIT',            pt: 'VISITE', es: 'VISÍTANOS', fr: 'NOUS TROUVER' },
    title:    { en: '23–25 Drawbridge St, Cork City Centre.', pt: '23–25 Drawbridge St, centro de Cork.', es: '23–25 Drawbridge St, centro de Cork.', fr: '23–25 Drawbridge St, centre de Cork.' },
    addressLbl: { en: 'Address', pt: 'Endereço', es: 'Dirección', fr: 'Adresse' },
    hoursLbl:   { en: 'Opening hours', pt: 'Horários', es: 'Horario', fr: 'Horaires' },
    directions: { en: 'Get directions', pt: 'Como chegar', es: 'Cómo llegar', fr: 'Itinéraire' },
    todayOpen:  { en: 'Open until',  pt: 'Aberto até', es: 'Abierto hasta las', fr: 'Ouvert jusqu\'à' },
    todayClosed:{ en: 'Closed today', pt: 'Fechado hoje', es: 'Hoy cerrado', fr: 'Fermé aujourd\'hui' },
    closedNow:  { en: 'Closed · Opens', pt: 'Fechado · Abre', es: 'Cerrado · Abre', fr: 'Fermé · Ouvre' },
    openNow:    { en: 'Open now',    pt: 'Aberto agora', es: 'Abierto ahora', fr: 'Ouvert maintenant' },
    studioLbl:  { en: 'Inside the studio', pt: 'Por dentro do estúdio', es: 'Por dentro del estudio', fr: 'À l\'intérieur du studio' },
  },
  walkInBanner: {
    line: { en: 'The room is booked end to end, so your slot is yours alone. Every first treatment starts with a free consultation.',
            pt: 'A sala fica reservada de ponta a ponta, então o horário é só seu. Todo primeiro tratamento começa com uma avaliação gratuita.', es: 'La sala queda reservada de principio a fin, así que tu hora es solo tuya. Todo primer tratamiento empieza con una consulta gratuita.', fr: 'La salle est réservée du début à la fin, votre créneau n\'est qu\'à vous. Chaque premier soin commence par un bilan gratuit.' },
  },
  footer: {
    tag:     { en: 'Your skin, your plan.',
               pt: 'Sua pele, seu plano.', es: 'Tu piel, tu plan.', fr: 'Votre peau, votre plan.' },
    rights:  { en: 'All rights reserved.', pt: 'Todos os direitos reservados.', es: 'Todos los derechos reservados.', fr: 'Tous droits réservés.' },
    nav:     { en: 'Navigate',     pt: 'Navegação', es: 'Navegación', fr: 'Navigation' },
    contact: { en: 'Contact',      pt: 'Contato', es: 'Contacto', fr: 'Contact' },
    legal:   { en: 'Legal',        pt: 'Jurídico', es: 'Legal', fr: 'Mentions légales' },
    privacy: { en: 'Privacy',      pt: 'Privacidade', es: 'Privacidad', fr: 'Confidentialité' },
    terms:   { en: 'Terms',        pt: 'Termos', es: 'Términos', fr: 'Conditions' },
    cookies: { en: 'Cookies',      pt: 'Cookies', es: 'Cookies', fr: 'Cookies' },
    built:   { en: 'Site by Marcus Felipe', pt: 'Site por Marcus Felipe', es: 'Sitio de Marcus Felipe', fr: 'Site par Marcus Felipe' },
  },
  pages: {
    backHome: { en: '← Back to home', pt: '← Voltar ao início', es: '← Volver al inicio', fr: '← Retour à l\'accueil' },
    bookCta:  { en: 'Book with',      pt: 'Agendar com', es: 'Reservar con', fr: 'Réserver avec'        },
    yearsExp: { en: 'years experience', pt: 'anos de experiência', es: 'años de experiencia', fr: 'ans d\'expérience' },
    specialties: { en: 'Specialties',   pt: 'Especialidades', es: 'Especialidades', fr: 'Spécialités' },
    aboutMe:     { en: 'About',         pt: 'Sobre', es: 'Sobre mí', fr: 'À propos' },
    fullMenu:    { en: 'Full treatment menu', pt: 'Menu completo de tratamentos', es: 'Menú completo de tratamientos', fr: 'Tous les soins' },
    menuSub:     { en: 'Every treatment offered, grouped by what it treats, with duration, price and package deals. Not sure where to start? Book the free consultation, the first section below.',
                   pt: 'Todos os tratamentos oferecidos, agrupados pelo que tratam, com duração, preço e pacotes. Não sabe por onde começar? Agende a avaliação gratuita, que é a primeira seção abaixo.', es: 'Todos los tratamientos que ofrecemos, agrupados por lo que tratan, con duración, precio y packs. ¿No sabes por dónde empezar? Reserva la consulta gratuita, que es la primera sección de abajo.', fr: 'Tous les soins proposés, regroupés par ce qu\'ils traitent, avec durée, tarif et forfaits. Vous ne savez pas par où commencer ? Réservez le bilan gratuit, c\'est la première section ci-dessous.' },
  },
};

const GALLERY_ITEMS = BEFORE_AFTER;

window.SITE = {
  PORTFOLIO, LANGS,
  PALETTES, FONT_PAIRS, BOOKING_PROVIDERS, CATEGORIES,
  TEAM, REVIEWS, BUSINESS, COPY, GALLERY_ITEMS,
};
