// ─── BILINGUAL (EN / ES) INFRASTRUCTURE ───────────────────────────────────
// Auto-detects the visitor's browser language on first visit, remembers their
// choice, and exposes a `t(key)` translator + language toggle to every section.

const TRANSLATIONS = {
  en: {
    nav: {
      services: 'Services',
      workSamples: 'Work Samples',
      packages: 'Packages',
      faq: 'FAQ',
      getQuote: 'Get a quote',
      getFreeQuote: 'Get a free quote',
      menu: 'Menu',
    },
    hero: {
      titleLine1: 'Make your business look',
      titleAccent: 'professional online.',
      subtitlePre: 'Websites and social media marketing for small businesses, ',
      subtitleStrong: 'starting at $997',
      subtitlePost: '.',
      ctaPrimary: 'Get a free quote',
      ctaSecondary: 'See real client work',
      microcopy: 'Free 5-minute form. No calls required. Reply within 24 hours.',
    },
    valueBadges: {
      items: [
        'No monthly retainer',
        'Mobile-first design',
        'Bilingual websites available',
        'You keep your files',
      ],
    },
    testimonials: {
      eyebrow: 'Client Feedback',
      title: 'What clients are saying.',
      subtitle: 'Example reviews — real testimonials will replace these as projects launch.',
      items: [
        { quote: "Our new site looks incredible and we've already gotten more calls in two weeks than we did all last month.", name: 'Maria G.', role: 'Owner, Tax Prep Office' },
        { quote: 'The social posts finally look like they belong to the same business. Our page actually looks put-together now.', name: 'Jasmine T.', role: 'Owner, Hair Salon' },
        { quote: "Customers can finally see our menu and hours without calling to ask. It's made a real difference.", name: 'Carlos R.', role: 'Owner, Family Restaurant' },
        { quote: "Bilingual content was a game changer — we're reaching customers we never connected with before.", name: 'Dana P.', role: 'Owner, Landscaping Company' },
        { quote: 'Everything was handled in days, not months. No long contracts, no confusing back-and-forth.', name: 'Whitney K.', role: 'Owner, Boutique' },
        { quote: 'Our booking link is right on our page now and people actually use it. Simple, clean, and it works.', name: 'Sam O.', role: 'Owner, Auto Repair Shop' },
      ],
    },
    whatWeBuild: {
      eyebrow: 'What We Build',
      title: 'Three things we do well.',
      subtitle: 'No bloated retainers. Real work you can see and use immediately.',
      viewSamples: 'View samples',
      viewWebsite: 'View live website',
      realClientWork: 'Real Client Work',
      cards: [
        { title: 'One-Page Websites', body: 'Mobile-first single-page sites with services, contact form, click-to-call, and Google Maps — everything a customer needs in one scroll.' },
        { title: 'Branded Social Posts', body: '6–12 square graphics, captions, highlight covers, bio cleanup, and a monthly content calendar so your feed stays consistent.' },
        { title: 'Portrait Stories', body: 'Vertical graphics for Stories matched to your brand palette — ready to post with no extra editing.' },
      ],
    },
    sampleWork: {
      eyebrow: 'Sample Directions',
      title: 'What our work looks like for your industry.',
      subtitle: "Concept directions per industry — placeholder samples until real client work is in. Each one shows the problem we solve and the deliverables you'd get.",
      concept: 'Concept',
      viewConcept: 'View concept — Problem / Solution / Deliverables',
      modal: {
        problem: 'Problem',
        solution: 'Solution',
        deliverables: 'Deliverables',
        visualDirection: 'Visual Direction',
        getQuote: 'Get a quote',
      },
    },
    industries: [
      {
        slug: 'tax', name: 'Tax Office',
        headline: 'Trusted help for individuals & small businesses.',
        problem: 'Looks generic, no clear list of services, hard to schedule a consultation, no Spanish content for bilingual clients.',
        solution: 'A trust-forward one-page site with clear service tiers, online appointment request, and a matching Instagram presence that shares filing reminders and tips year-round.',
        deliverables: ['One-page website', '6 branded posts', 'Appointment form', 'Bilingual content', 'Google Maps embed'],
        direction: 'Calm navy + warm gold. Clean serif headlines, practical sans-serif body. Conveys reliability without feeling cold.',
      },
      {
        slug: 'salon', name: 'Hair Salon',
        headline: 'Glow-up starts here.',
        problem: 'Booking lives in DMs, posts are mismatched phone photos, no clear price list, customers ask the same questions on Instagram every week.',
        solution: 'A vibrant brand refresh with a booking-focused site, branded post templates for promos and reviews, and Stories highlights that answer FAQs at a glance.',
        deliverables: ['One-page website', '12 branded posts', 'Story highlight covers', 'Booking link section', 'Bio cleanup'],
        direction: 'Soft pinks + deep plum. Editorial type pairing. Photo-forward, feminine without being cliché.',
      },
      {
        slug: 'restaurant', name: 'Restaurant',
        headline: 'Made fresh. Served daily.',
        problem: 'Menu is a blurry PDF, hours are wrong on three different sites, no easy way to view daily specials or order takeout.',
        solution: 'A mouth-watering one-page site with a real digital menu, daily specials section, click-to-call ordering, and weekly social posts featuring the kitchen.',
        deliverables: ['One-page website', '12 branded posts', 'Digital menu', 'Click-to-call', 'Weekly specials template'],
        direction: 'Warm reds + cream. Appetizing, hand-drawn accents. Inviting and family-friendly.',
      },
    ],
    beforeAfter: {
      eyebrow: 'The Difference',
      title: 'What changes when you work with us.',
      before: 'Before',
      after: 'After',
      expand: 'Expand',
      close: 'Close',
      siteDesc: 'A real site we built — click anywhere to explore it live.',
    },
    packages: {
      eyebrow: 'Pricing',
      title: 'Straightforward packages.',
      subtitle: 'No monthly traps. No hidden fees.',
      startingPrice: 'Starting price',
      mostPopular: 'Most Popular',
      cta: 'Get my quote',
      note: 'Final quote depends on business type, number of pages, and content needs.',
      paymentPolicyLink: 'View our payment policy →',
      items: [
        {
          name: 'Social Content Kit',
          tagline: 'For businesses that only need branded social media content.',
          price: '$497',
          bullets: ['8 branded social media posts', '8 captions', 'Basic hashtag suggestions', 'Posting-ready image files', '1 revision round'],
          badge: null, featured: false,
        },
        {
          name: 'Starter Presence',
          tagline: 'For new businesses that need a simple website and starter content.',
          price: '$997',
          bullets: ['One-page website', 'Mobile-friendly design', 'Contact button or contact form', 'Basic website copy cleanup', '6 branded social media posts', '6 captions', '2 revision rounds'],
          badge: null, featured: false,
        },
        {
          name: 'Growth Presence',
          tagline: 'For businesses that need a more complete online presence.',
          price: '$1,850',
          bullets: ['Up to 3-page website', 'Mobile-friendly design', 'Contact form', 'Basic SEO page titles and descriptions', '12 branded social media posts', '12 captions', '30-day content plan', '2 revision rounds'],
          badge: 'mostPopular', featured: true,
        },
        {
          name: 'Full Digital Presence',
          tagline: 'For businesses that want a polished website and a full content package.',
          price: '$2,950',
          bullets: ['Up to 5-page website', 'Mobile-friendly design', 'Contact form', 'Basic SEO page titles and descriptions', '18 branded social media posts', '18 captions', '30-day content plan', 'Posting-ready files', '3 revision rounds'],
          badge: null, featured: false,
        },
      ],
    },
    addons: {
      eyebrow: 'Add-Ons',
      title: 'Need something extra?',
      subtitle: 'Optional add-ons priced individually — add any of these to your package as needed.',
      headers: { addon: 'Add-on', price: 'Final Price', notes: 'Notes' },
      items: [
        { name: 'Extra website page', price: '$450 per page', notes: 'Max 1 extra page on Starter. Max 2 extra pages on Growth. After that, client must upgrade.' },
        { name: 'Extra social post + caption', price: '$85 each', notes: 'For one-time project add-ons only.' },
        { name: 'Bilingual website content', price: '$350 per page', notes: 'Minimum $500. Applies to website text only.' },
        { name: 'Bilingual social media captions', price: '$30 per caption', notes: 'Minimum $180.' },
        { name: 'Logo cleanup', price: '$350', notes: 'Simple cleanup only. New logo design is quoted separately.' },
        { name: 'Rush delivery', price: '+35%', notes: 'Minimum rush fee of $300. Only available when schedule allows.' },
        { name: 'Monthly content package, 12 posts', price: '$750/month', notes: 'Includes 12 posts + captions. No posting, inbox, ads, or engagement.' },
        { name: 'Monthly content package, 20 posts', price: '$1,150/month', notes: 'Includes 20 posts + captions. No posting, inbox, ads, or engagement.' },
        { name: 'Website maintenance', price: '$175/month', notes: 'Basic updates only. Does not include redesigns, new pages, or new content packages.' },
      ],
    },
    whatYouReceive: {
      eyebrow: 'Deliverables',
      title: 'Exactly what you get.',
      socialTitle: 'For Social Media',
      websitesTitle: 'For Websites',
      social: ['6–12 branded posts', 'Matching captions', 'Bio cleanup', 'Highlight covers', 'Monthly content calendar', 'Canva / posting-ready files'],
      websites: ['One-page mobile site', 'Services section', 'Contact form', 'Click-to-call', 'Google Maps embed', 'Basic SEO', 'Mobile speed optimization'],
    },
    whyUs: {
      eyebrow: 'Why Work With Us',
      title: 'Built for small businesses.',
      reasons: [
        { title: 'Local business focus', body: 'We only work with small, local businesses — not enterprise clients.' },
        { title: 'Fast turnaround', body: 'Most projects launch within 1–2 weeks of kickoff.' },
        { title: 'Plain-English process', body: 'No jargon, no confusing proposals. Just clear next steps.' },
        { title: 'No long-term contracts', body: "Pay for what you need. Come back when you're ready for more." },
        { title: 'Clear pricing', body: 'Set packages with set deliverables. No scope creep, no surprise invoices.' },
        { title: 'Social + website match', body: 'One brand across every touchpoint customers find you on.' },
        { title: 'Mobile-first design', body: 'Built for the phone first — because thats how customers find you.' },
        { title: 'Bilingual options', body: 'English and Spanish content available, side-by-side or separately.' },
        { title: 'You keep your files', body: 'Your brand, your assets, your accounts. We hand everything over.' },
      ],
    },
    bilingual: {
      english: 'English',
      spanish: 'Español',
      title: 'English + Spanish content available.',
      body: 'We create bilingual websites, captions, and promotional posts so you can reach more of your local community — clearly, naturally, and without the awkward auto-translate feel.',
      footnote: 'Serving local small businesses and remote clients.',
    },
    founder: {
      badge: 'From the Founder',
      title: 'I work directly with every client.',
      p1: "No middlemen, no account managers, no hand-offs to a junior designer you'll never meet. When you hire DreamCode, you're working with the person actually making your website and your posts.",
      p2: "No upsells, no monthly traps. Pay once for what you need, get clean files you own forever, come back when you're ready for the next thing. That's the whole studio.",
      sign: '— The Founder',
    },
    faq: {
      eyebrow: 'Questions',
      title: 'Honest answers.',
      items: [
        { q: 'Do I need to have a logo already?', a: "Not at all. If you don't have one, we can clean up what you've got or build a simple logo treatment as part of your project. Most of our clients come to us with little or no existing branding." },
        { q: 'Can you make posts in Spanish and English?', a: 'Yes — bilingual content is one of our specialties. We can write captions and design posts in either language, or run both side-by-side so you reach your full local community.' },
        { q: 'Do I need to sign a monthly contract?', a: "Never. Every package is a one-time project. You pay for what you need, you keep your files, and you come back when you want to do more. No retainers, no auto-renewals." },
        { q: 'How fast can I get my content or website?', a: "Most projects launch in 1–2 weeks from kickoff. Simpler packages can be done in under a week. We'll give you a clear timeline before any work starts." },
        { q: 'Do you post for me, or just design the content?', a: "By default we design the content and hand it to you in posting-ready files, so you stay in control of your accounts. If you want us to schedule and post for you, we can quote that as a small add-on." },
        { q: 'What do you need from me to start?', a: "Just a few minutes on the quote form below. After that we'll ask for your business basics — what you do, your hours, any photos you have. If you don't have something, we'll work around it." },
      ],
    },
    quoteForm: {
      eyebrow: 'Get Started',
      title: 'Tell us about your business.',
      subtitle: "Takes about 5 minutes. We'll reply within 24 hours.",
      success: {
        title: 'Thanks — got it.',
        body: "We'll review your details and reply within 24 hours with a quote and next steps.",
        footnote: 'In the meantime, feel free to keep browsing — or check your email for our reply.',
      },
      labels: {
        businessName: 'Business Name', businessNamePh: "e.g. Maria's Tax Office",
        businessType: 'Type of Business', businessTypePh: 'e.g. Hair salon, contractor',
        need: 'What do you need?',
        needOptions: [{ value: 'Social media', label: 'Social media' }, { value: 'Website', label: 'Website' }, { value: 'Both', label: 'Both' }],
        logo: 'Do you have a logo?',
        logoOptions: [{ value: 'Yes', label: 'Yes' }, { value: 'No', label: 'No' }, { value: 'Sort of', label: 'Sort of' }],
        link: 'Instagram / Facebook / Website link', optional: '(optional)', linkPh: 'https://instagram.com/yourbusiness',
        yourName: 'Your Name', yourNamePh: 'Your full name',
        contact: 'Phone or Email', contactPh: 'you@example.com or (555) 123-4567',
        preferredContact: 'Preferred contact method',
        preferredOptions: [{ value: 'Email', label: 'Email' }, { value: 'Phone', label: 'Phone' }, { value: 'Either', label: 'Either' }],
      },
      errors: { generic: 'Something went wrong. Please try again.', network: 'Network error — please check your connection and try again.' },
      sending: 'Sending…',
      submit: 'Send my quote request',
    },
    footer: {
      tagline: 'Websites and branded social media for small businesses. Locally-based, bilingual, no monthly traps.',
      contact: 'Contact',
      sitemap: 'Sitemap',
      madeWithCare: 'Made with care.',
    },
  },

  es: {
    nav: {
      services: 'Servicios',
      workSamples: 'Muestras de Trabajo',
      packages: 'Paquetes',
      faq: 'Preguntas',
      getQuote: 'Cotizar',
      getFreeQuote: 'Solicitar cotización gratis',
      menu: 'Menú',
    },
    hero: {
      titleLine1: 'Haz que tu negocio se vea',
      titleAccent: 'profesional en línea.',
      subtitlePre: 'Sitios web y marketing en redes sociales para pequeños negocios, ',
      subtitleStrong: 'desde $997',
      subtitlePost: '.',
      ctaPrimary: 'Solicitar cotización gratis',
      ctaSecondary: 'Ver trabajo real de clientes',
      microcopy: 'Formulario de 5 minutos. Sin llamadas. Te respondemos en 24 horas.',
    },
    valueBadges: {
      items: [
        'Sin contrato mensual',
        'Diseño optimizado para celular',
        'Sitios web bilingües disponibles',
        'Tus archivos son tuyos',
      ],
    },
    testimonials: {
      eyebrow: 'Opiniones de Clientes',
      title: 'Lo que dicen los clientes.',
      subtitle: 'Reseñas de ejemplo — serán reemplazadas por testimonios reales a medida que se lancen los proyectos.',
      items: [
        { quote: 'Nuestro nuevo sitio se ve increíble y ya hemos recibido más llamadas en dos semanas que en todo el mes pasado.', name: 'Maria G.', role: 'Dueña, Oficina de Impuestos' },
        { quote: 'Las publicaciones finalmente se ven como del mismo negocio. Nuestra página ahora se ve organizada.', name: 'Jasmine T.', role: 'Dueña, Salón de Belleza' },
        { quote: 'Los clientes ahora pueden ver nuestro menú y horarios sin tener que llamar. Ha hecho una gran diferencia.', name: 'Carlos R.', role: 'Dueño, Restaurante Familiar' },
        { quote: 'El contenido bilingüe fue un cambio total — ahora llegamos a clientes con los que antes no conectábamos.', name: 'Dana P.', role: 'Dueña, Empresa de Jardinería' },
        { quote: 'Todo se hizo en días, no meses. Sin contratos largos ni idas y vueltas confusas.', name: 'Whitney K.', role: 'Dueña, Boutique' },
        { quote: 'El enlace para citas ya está en nuestra página y la gente lo usa. Sencillo, limpio y funciona.', name: 'Sam O.', role: 'Dueño, Taller Mecánico' },
      ],
    },
    whatWeBuild: {
      eyebrow: 'Lo Que Creamos',
      title: 'Tres cosas que hacemos bien.',
      subtitle: 'Sin contratos mensuales innecesarios. Trabajo real que puedes ver y usar de inmediato.',
      viewSamples: 'Ver muestras',
      viewWebsite: 'Ver sitio web en vivo',
      realClientWork: 'Trabajo Real de Cliente',
      cards: [
        { title: 'Sitios web de una página', body: 'Sitios de una sola página optimizados para celular, con servicios, formulario de contacto, botón de llamada directa y Google Maps — todo lo que un cliente necesita en una sola pantalla.' },
        { title: 'Publicaciones con tu marca', body: 'De 6 a 12 gráficos cuadrados, descripciones, portadas de historias destacadas, limpieza de biografía y un calendario de contenido mensual para que tu perfil se vea consistente.' },
        { title: 'Historias verticales', body: 'Gráficos verticales para historias a juego con la paleta de tu marca — listos para publicar sin edición adicional.' },
      ],
    },
    sampleWork: {
      eyebrow: 'Ejemplos de Dirección',
      title: 'Así se ve nuestro trabajo para tu industria.',
      subtitle: 'Ejemplos de dirección por industria — muestras provisionales hasta tener trabajo real de clientes. Cada una muestra el problema que resolvemos y lo que recibirías.',
      concept: 'Concepto',
      viewConcept: 'Ver concepto — Problema / Solución / Entregables',
      modal: {
        problem: 'Problema',
        solution: 'Solución',
        deliverables: 'Entregables',
        visualDirection: 'Dirección Visual',
        getQuote: 'Solicitar cotización',
      },
    },
    industries: [
      {
        slug: 'tax', name: 'Oficina de Impuestos',
        headline: 'Ayuda confiable para personas y pequeños negocios.',
        problem: 'Se ve genérico, no tiene una lista clara de servicios, es difícil agendar una consulta y no hay contenido en español para clientes bilingües.',
        solution: 'Un sitio de una página enfocado en generar confianza, con niveles de servicio claros, solicitud de citas en línea y presencia en Instagram a juego que comparte recordatorios de declaración y consejos durante todo el año.',
        deliverables: ['Sitio web de una página', '6 publicaciones con marca', 'Formulario de citas', 'Contenido bilingüe', 'Google Maps integrado'],
        direction: 'Azul marino tranquilo + dorado cálido. Títulos serif limpios, texto sans-serif práctico. Transmite confiabilidad sin sentirse frío.',
      },
      {
        slug: 'salon', name: 'Salón de Belleza',
        headline: 'Tu transformación empieza aquí.',
        problem: 'Las citas se manejan por mensajes directos, las publicaciones son fotos de celular sin coherencia, no hay lista de precios clara y los clientes hacen las mismas preguntas en Instagram cada semana.',
        solution: 'Una renovación de marca vibrante con un sitio enfocado en reservas, plantillas de publicaciones con marca para promociones y reseñas, e historias destacadas que responden preguntas frecuentes de un vistazo.',
        deliverables: ['Sitio web de una página', '12 publicaciones con marca', 'Portadas de historias destacadas', 'Sección de enlace para reservas', 'Limpieza de biografía'],
        direction: 'Rosas suaves + ciruela profundo. Combinación tipográfica editorial. Enfocado en fotos, femenino sin ser cliché.',
      },
      {
        slug: 'restaurant', name: 'Restaurante',
        headline: 'Hecho fresco. Servido a diario.',
        problem: 'El menú es un PDF borroso, los horarios están mal en tres sitios distintos y no hay una forma fácil de ver los especiales del día o pedir comida para llevar.',
        solution: 'Un sitio de una página irresistible con un menú digital real, sección de especiales del día, pedidos con botón de llamada directa y publicaciones semanales que muestran la cocina.',
        deliverables: ['Sitio web de una página', '12 publicaciones con marca', 'Menú digital', 'Botón de llamada directa', 'Plantilla de especiales semanales'],
        direction: 'Rojos cálidos + crema. Acentos apetitosos dibujados a mano. Acogedor y familiar.',
      },
    ],
    beforeAfter: {
      eyebrow: 'La Diferencia',
      title: 'Lo que cambia cuando trabajas con nosotros.',
      before: 'Antes',
      after: 'Después',
      expand: 'Ampliar',
      close: 'Cerrar',
      siteDesc: 'Un sitio real que construimos — haz clic en cualquier lugar para explorarlo.',
    },
    packages: {
      eyebrow: 'Precios',
      title: 'Paquetes sencillos y claros.',
      subtitle: 'Sin contratos mensuales. Sin cargos ocultos.',
      startingPrice: 'Precio inicial',
      mostPopular: 'Más Popular',
      cta: 'Solicitar mi cotización',
      note: 'La cotización final depende del tipo de negocio, número de páginas y necesidades de contenido.',
      paymentPolicyLink: 'Ver nuestra política de pago →',
      items: [
        {
          name: 'Paquete de Contenido Social',
          tagline: 'Para negocios que solo necesitan contenido de redes sociales con su marca.',
          price: '$497',
          bullets: ['8 publicaciones para redes sociales con marca', '8 descripciones (captions)', 'Sugerencias básicas de hashtags', 'Archivos de imagen listos para publicar', '1 ronda de revisión'],
          badge: null, featured: false,
        },
        {
          name: 'Presencia Inicial',
          tagline: 'Para negocios nuevos que necesitan un sitio web sencillo y contenido inicial.',
          price: '$997',
          bullets: ['Sitio web de una página', 'Diseño adaptado a celulares', 'Botón o formulario de contacto', 'Limpieza básica del texto del sitio', '6 publicaciones para redes sociales con marca', '6 descripciones (captions)', '2 rondas de revisión'],
          badge: null, featured: false,
        },
        {
          name: 'Presencia en Crecimiento',
          tagline: 'Para negocios que necesitan una presencia en línea más completa.',
          price: '$1,850',
          bullets: ['Sitio web de hasta 3 páginas', 'Diseño adaptado a celulares', 'Formulario de contacto', 'Títulos y descripciones SEO básicos', '12 publicaciones para redes sociales con marca', '12 descripciones (captions)', 'Plan de contenido de 30 días', '2 rondas de revisión'],
          badge: 'mostPopular', featured: true,
        },
        {
          name: 'Presencia Digital Completa',
          tagline: 'Para negocios que quieren un sitio web pulido y un paquete completo de contenido.',
          price: '$2,950',
          bullets: ['Sitio web de hasta 5 páginas', 'Diseño adaptado a celulares', 'Formulario de contacto', 'Títulos y descripciones SEO básicos', '18 publicaciones para redes sociales con marca', '18 descripciones (captions)', 'Plan de contenido de 30 días', 'Archivos listos para publicar', '3 rondas de revisión'],
          badge: null, featured: false,
        },
      ],
    },
    addons: {
      eyebrow: 'Complementos',
      title: '¿Necesitas algo extra?',
      subtitle: 'Complementos opcionales con precio individual — agrégalos a tu paquete cuando los necesites.',
      headers: { addon: 'Complemento', price: 'Precio final', notes: 'Notas' },
      items: [
        { name: 'Página adicional del sitio web', price: '$450 por página', notes: 'Máximo 1 página adicional en Starter. Máximo 2 páginas adicionales en Growth. Después de eso, el cliente debe subir de paquete.' },
        { name: 'Publicación social adicional + descripción', price: '$85 cada una', notes: 'Solo para complementos de proyectos únicos.' },
        { name: 'Contenido bilingüe del sitio web', price: '$350 por página', notes: 'Mínimo $500. Aplica solo al texto del sitio web.' },
        { name: 'Descripciones bilingües para redes sociales', price: '$30 por descripción', notes: 'Mínimo $180.' },
        { name: 'Limpieza de logo', price: '$350', notes: 'Solo limpieza simple. El diseño de un logo nuevo se cotiza por separado.' },
        { name: 'Entrega urgente', price: '+35%', notes: 'Tarifa mínima urgente de $300. Disponible solo cuando el calendario lo permite.' },
        { name: 'Paquete de contenido mensual, 12 publicaciones', price: '$750/mes', notes: 'Incluye 12 publicaciones + descripciones. No incluye publicación, gestión de mensajes, anuncios ni interacción.' },
        { name: 'Paquete de contenido mensual, 20 publicaciones', price: '$1,150/mes', notes: 'Incluye 20 publicaciones + descripciones. No incluye publicación, gestión de mensajes, anuncios ni interacción.' },
        { name: 'Mantenimiento del sitio web', price: '$175/mes', notes: 'Solo actualizaciones básicas. No incluye rediseños, páginas nuevas ni nuevos paquetes de contenido.' },
      ],
    },
    whatYouReceive: {
      eyebrow: 'Entregables',
      title: 'Exactamente lo que recibes.',
      socialTitle: 'Para Redes Sociales',
      websitesTitle: 'Para Sitios Web',
      social: ['De 6 a 12 publicaciones con marca', 'Descripciones (captions) a juego', 'Limpieza de biografía', 'Portadas de historias destacadas', 'Calendario de contenido mensual', 'Archivos listos para Canva / publicar'],
      websites: ['Sitio de una página optimizado para celular', 'Sección de servicios', 'Formulario de contacto', 'Botón de llamada directa', 'Google Maps integrado', 'SEO básico', 'Optimización de velocidad móvil'],
    },
    whyUs: {
      eyebrow: 'Por Qué Trabajar Con Nosotros',
      title: 'Hecho para pequeños negocios.',
      reasons: [
        { title: 'Enfoque en negocios locales', body: 'Solo trabajamos con pequeños negocios locales — no con grandes empresas.' },
        { title: 'Entregas rápidas', body: 'La mayoría de los proyectos se lanzan entre 1 y 2 semanas después de empezar.' },
        { title: 'Proceso fácil de entender', body: 'Sin jerga técnica ni propuestas confusas. Solo pasos claros a seguir.' },
        { title: 'Sin contratos a largo plazo', body: 'Paga solo por lo que necesitas. Vuelve cuando estés listo para más.' },
        { title: 'Precios claros', body: 'Paquetes establecidos con entregables definidos. Sin sorpresas ni cambios de alcance no acordados.' },
        { title: 'Redes sociales y sitio web a juego', body: 'Una sola marca en cada lugar donde los clientes te encuentran.' },
        { title: 'Diseño pensado primero para celular', body: 'Hecho primero para el teléfono — porque así es como los clientes te encuentran.' },
        { title: 'Opciones bilingües', body: 'Contenido disponible en inglés y español, juntos o por separado.' },
        { title: 'Tú te quedas con tus archivos', body: 'Tu marca, tus archivos, tus cuentas. Te entregamos todo.' },
      ],
    },
    bilingual: {
      english: 'Inglés',
      spanish: 'Español',
      title: 'Contenido disponible en inglés y español.',
      body: 'Creamos sitios web, descripciones y publicaciones promocionales bilingües para que llegues a más personas de tu comunidad local — de forma clara, natural y sin esa sensación de traducción automática.',
      footnote: 'Atendemos a pequeños negocios locales y clientes remotos.',
    },
    founder: {
      badge: 'Del Fundador',
      title: 'Trabajo directamente con cada cliente.',
      p1: 'Sin intermediarios, sin gerentes de cuenta, sin transferencias a un diseñador junior que nunca conocerás. Cuando contratas a DreamCode, trabajas con la persona que de verdad crea tu sitio web y tus publicaciones.',
      p2: 'Sin ventas adicionales ni contratos mensuales. Paga una sola vez por lo que necesitas, recibe archivos limpios que son tuyos para siempre, y vuelve cuando estés listo para lo siguiente. Así de simple es el estudio.',
      sign: '— El Fundador',
    },
    faq: {
      eyebrow: 'Preguntas',
      title: 'Respuestas honestas.',
      items: [
        { q: '¿Necesito tener un logo ya hecho?', a: 'Para nada. Si no tienes uno, podemos mejorar lo que ya tengas o crear un tratamiento de logo sencillo como parte de tu proyecto. La mayoría de nuestros clientes llegan con poca o ninguna marca existente.' },
        { q: '¿Pueden hacer publicaciones en español e inglés?', a: 'Sí — el contenido bilingüe es una de nuestras especialidades. Podemos escribir descripciones y diseñar publicaciones en cualquiera de los dos idiomas, o hacer ambos a la vez para que llegues a toda tu comunidad local.' },
        { q: '¿Necesito firmar un contrato mensual?', a: 'Nunca. Cada paquete es un proyecto único. Pagas por lo que necesitas, te quedas con tus archivos y vuelves cuando quieras hacer más. Sin mensualidades ni renovaciones automáticas.' },
        { q: '¿Qué tan rápido puedo tener mi contenido o sitio web?', a: 'La mayoría de los proyectos se lanzan entre 1 y 2 semanas después de comenzar. Los paquetes más sencillos pueden estar listos en menos de una semana. Te daremos un cronograma claro antes de empezar cualquier trabajo.' },
        { q: '¿Publican por mí o solo diseñan el contenido?', a: 'Por defecto diseñamos el contenido y te lo entregamos en archivos listos para publicar, para que tú mantengas el control de tus cuentas. Si quieres que programemos y publiquemos por ti, podemos cotizarlo como un servicio adicional.' },
        { q: '¿Qué necesitan de mí para empezar?', a: 'Solo unos minutos en el formulario de cotización de abajo. Después te pediremos información básica de tu negocio — a qué te dedicas, tus horarios, las fotos que tengas. Si te falta algo, lo resolvemos juntos.' },
      ],
    },
    quoteForm: {
      eyebrow: 'Comienza Aquí',
      title: 'Cuéntanos sobre tu negocio.',
      subtitle: 'Toma unos 5 minutos. Te responderemos en 24 horas.',
      success: {
        title: 'Gracias — lo recibimos.',
        body: 'Revisaremos tu información y te responderemos en 24 horas con una cotización y los próximos pasos.',
        footnote: 'Mientras tanto, puedes seguir explorando el sitio — o revisar tu correo para nuestra respuesta.',
      },
      labels: {
        businessName: 'Nombre del negocio', businessNamePh: 'Ej. Oficina de Impuestos de María',
        businessType: 'Tipo de negocio', businessTypePh: 'Ej. Salón de belleza, contratista',
        need: '¿Qué necesitas?',
        needOptions: [{ value: 'Social media', label: 'Redes sociales' }, { value: 'Website', label: 'Sitio web' }, { value: 'Both', label: 'Ambos' }],
        logo: '¿Tienes un logo?',
        logoOptions: [{ value: 'Yes', label: 'Sí' }, { value: 'No', label: 'No' }, { value: 'Sort of', label: 'Más o menos' }],
        link: 'Enlace de Instagram / Facebook / Sitio web', optional: '(opcional)', linkPh: 'https://instagram.com/tunegocio',
        yourName: 'Tu nombre', yourNamePh: 'Tu nombre completo',
        contact: 'Teléfono o correo electrónico', contactPh: 'tucorreo@ejemplo.com o (555) 123-4567',
        preferredContact: 'Método de contacto preferido',
        preferredOptions: [{ value: 'Email', label: 'Correo' }, { value: 'Phone', label: 'Teléfono' }, { value: 'Either', label: 'Cualquiera' }],
      },
      errors: { generic: 'Algo salió mal. Por favor, inténtalo de nuevo.', network: 'Error de conexión — revisa tu conexión e inténtalo de nuevo.' },
      sending: 'Enviando…',
      submit: 'Enviar mi solicitud de cotización',
    },
    footer: {
      tagline: 'Sitios web y redes sociales con marca para pequeños negocios. Locales, bilingües, sin contratos mensuales.',
      contact: 'Contacto',
      sitemap: 'Mapa del Sitio',
      madeWithCare: 'Hecho con cariño.',
    },
  },
};

function dcDetectLang() {
  try {
    const saved = window.localStorage.getItem('dc-lang');
    if (saved === 'en' || saved === 'es') return saved;
  } catch (e) {}
  const nav = ((navigator.languages && navigator.languages[0]) || navigator.language || 'en').toLowerCase();
  return nav.startsWith('es') ? 'es' : 'en';
}

function dcLookup(dict, path) {
  let cur = dict;
  for (const p of path) {
    if (cur == null) return undefined;
    cur = cur[p];
  }
  return cur;
}

const LangContext = React.createContext({ lang: 'en', setLang: () => {}, t: k => k });

function LangProvider({ children }) {
  const [lang, setLangState] = React.useState(dcDetectLang);

  React.useEffect(() => {
    document.documentElement.setAttribute('lang', lang);
  }, [lang]);

  const setLang = React.useCallback(l => {
    setLangState(l);
    try { window.localStorage.setItem('dc-lang', l); } catch (e) {}
  }, []);

  const t = React.useCallback(key => {
    const path = key.split('.');
    const hit = dcLookup(TRANSLATIONS[lang], path);
    if (hit !== undefined) return hit;
    return dcLookup(TRANSLATIONS.en, path);
  }, [lang]);

  const value = React.useMemo(() => ({ lang, setLang, t }), [lang, setLang, t]);
  return <LangContext.Provider value={value}>{children}</LangContext.Provider>;
}

function useLang() {
  return React.useContext(LangContext);
}

// Subtle pill toggle — EN | ES — styled to match the brand's gradient + glass language
function LangToggle({ compact }) {
  const { lang, setLang } = useLang();
  return (
    <div style={{
      display: 'inline-flex', alignItems: 'center', gap: 2, padding: 3,
      borderRadius: 100, background: 'rgba(255,255,255,0.55)',
      border: '1px solid rgba(42,14,26,0.12)', backdropFilter: 'blur(8px)',
    }} role="group" aria-label="Language / Idioma">
      {['en', 'es'].map(l => (
        <button
          key={l}
          type="button"
          onClick={() => setLang(l)}
          aria-pressed={lang === l}
          style={{
            padding: compact ? '4px 10px' : '5px 13px',
            borderRadius: 100, border: 'none', cursor: 'pointer',
            fontFamily: 'DM Sans, sans-serif', fontSize: compact ? 11.5 : 12.5,
            fontWeight: 700, letterSpacing: '0.04em',
            background: lang === l ? 'linear-gradient(95deg, #F62E33 0%, #D60457 60%, #6E0240 100%)' : 'transparent',
            color: lang === l ? '#fff' : 'rgba(42,14,26,0.45)',
            boxShadow: lang === l ? '0 4px 14px -4px rgba(214,4,87,0.55)' : 'none',
            transition: 'all 0.25s ease',
          }}
        >{l.toUpperCase()}</button>
      ))}
    </div>
  );
}

window.TRANSLATIONS = TRANSLATIONS;
window.LangContext = LangContext;
window.LangProvider = LangProvider;
window.useLang = useLang;
window.LangToggle = LangToggle;
