diff --git a/404.html b/404.html index e4305fd..a2cf777 100644 --- a/404.html +++ b/404.html @@ -64,7 +64,11 @@
- +
+ + +
+
(661) 581-7278 @@ -90,6 +94,17 @@ Tumbleweed Removal Contact
+
+ + + Language / Idioma: + +
+ + +
+
+
@@ -287,6 +302,7 @@ + diff --git a/acton-landscaping.html b/acton-landscaping.html index e0f9a3d..f65ae27 100644 --- a/acton-landscaping.html +++ b/acton-landscaping.html @@ -114,7 +114,11 @@
- +
+ + +
+
(661) 581-7278 @@ -135,6 +139,17 @@ Featured Projects Service Areas Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -518,6 +533,7 @@
+ diff --git a/app.js b/app.js index e1ad4a9..0902355 100644 --- a/app.js +++ b/app.js @@ -246,10 +246,23 @@ document.addEventListener('DOMContentLoaded', () => { if (selectedSize === 'acreage' && !timeText.includes('Days')) { timeText = '1 - 2 Days (Full Crew)'; } + if (document.documentElement.lang === 'es') { + timeText = timeText.replace(/Same Day/gi, 'Mismo Día') + .replace(/Same-Day/gi, 'Mismo Día') + .replace(/Hours/gi, 'Horas') + .replace(/Days/gi, 'Días') + .replace(/Routine/gi, 'Rutina') + .replace(/\(Full Crew\)/gi, '(Equipo Completo)'); + } timeDisplay.textContent = timeText; } } + // Listen for language changes to update localized calculator output + window.addEventListener('languageChanged', () => { + updateEstimate(); + }); + // Listen to all calculator radio buttons const calcInputs = document.querySelectorAll('input[name="calc-service"], input[name="calc-size"], input[name="calc-condition"]'); calcInputs.forEach(input => { diff --git a/contact.html b/contact.html index da9a0d6..9442ec0 100644 --- a/contact.html +++ b/contact.html @@ -94,7 +94,11 @@
- +
+ + +
+
(661) 581-7278 @@ -115,6 +119,17 @@ Service Areas Customer Reviews Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -541,6 +556,7 @@ + diff --git a/index.html b/index.html index 7441c5d..2d24713 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@ - + diff --git a/lancaster-landscaping.html b/lancaster-landscaping.html index 493d49a..af03031 100644 --- a/lancaster-landscaping.html +++ b/lancaster-landscaping.html @@ -110,7 +110,11 @@
- +
+ + +
+
(661) 581-7278 @@ -131,6 +135,17 @@ Featured Projects Service Areas Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -514,6 +529,7 @@
+ diff --git a/locations.html b/locations.html index 298cc3e..d46ea37 100644 --- a/locations.html +++ b/locations.html @@ -197,7 +197,11 @@
- +
+ + +
+
(661) 581-7278 @@ -218,6 +222,17 @@ Featured Projects Service Areas Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -661,6 +676,7 @@
+ diff --git a/palmdale-landscaping.html b/palmdale-landscaping.html index 78a78da..167babd 100644 --- a/palmdale-landscaping.html +++ b/palmdale-landscaping.html @@ -110,7 +110,11 @@
- +
+ + +
+
(661) 581-7278 @@ -131,6 +135,17 @@ Featured Projects Service Areas Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -514,6 +529,7 @@
+ diff --git a/privacy-policy.html b/privacy-policy.html index af7694a..fd35dc8 100644 --- a/privacy-policy.html +++ b/privacy-policy.html @@ -120,7 +120,11 @@
- +
+ + +
+
(661) 581-7278 @@ -141,6 +145,17 @@ Featured Projects Service Areas Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -469,6 +484,7 @@
+ diff --git a/quartz-hill-landscaping.html b/quartz-hill-landscaping.html index 5a887ec..248ff02 100644 --- a/quartz-hill-landscaping.html +++ b/quartz-hill-landscaping.html @@ -109,7 +109,11 @@
- +
+ + +
+
(661) 581-7278 @@ -130,6 +134,17 @@ Featured Projects Service Areas Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -513,6 +528,7 @@
+ diff --git a/rosamond-landscaping.html b/rosamond-landscaping.html index 5d02fa3..a4ea07c 100644 --- a/rosamond-landscaping.html +++ b/rosamond-landscaping.html @@ -114,7 +114,11 @@
- +
+ + +
+
(661) 581-7278 @@ -135,6 +139,17 @@ Featured Projects Service Areas Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -518,6 +533,7 @@
+ diff --git a/service-areas.html b/service-areas.html index 298cc3e..d46ea37 100644 --- a/service-areas.html +++ b/service-areas.html @@ -197,7 +197,11 @@
- +
+ + +
+
(661) 581-7278 @@ -218,6 +222,17 @@ Featured Projects Service Areas Contact Us +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -661,6 +676,7 @@
+ diff --git a/styles.css b/styles.css index 01f72d0..d018914 100644 --- a/styles.css +++ b/styles.css @@ -79,6 +79,7 @@ html { scroll-behavior: smooth; color-scheme: light; font-size: 16px; + overflow-x: hidden; } body { @@ -2116,6 +2117,11 @@ textarea.form-control { font-size: 1.1rem; } + .hero-title { + font-size: clamp(1.85rem, 7.5vw, 2.4rem); + word-break: break-word; + } + .logo-symbol { width: 36px; height: 36px; @@ -2127,9 +2133,13 @@ textarea.form-control { padding: 6px; } + #header-quote-btn, .header-cta-group .open-quote-btn { - padding: 7px 11px; - font-size: 0.78rem; + display: none !important; + } + + .announcement-bar .lang-switch { + display: none !important; } .mobile-sticky-bar { @@ -2200,6 +2210,21 @@ textarea.form-control { } } +/* Specific Smartphone Adjustments (<= 480px) */ +@media (max-width: 480px) { + #header-quote-btn, + .header-cta-group .open-quote-btn { + display: none !important; + } + .announcement-bar .lang-switch { + display: none !important; + } + .announcement-bar { + padding: 8px 12px; + font-size: 0.74rem; + } +} + /* ========================================================================== YARD CLEANUP SECTION & FEATURED PROJECTS SECTION (2-SECTION SPLIT) ========================================================================== */ @@ -2563,3 +2588,91 @@ section#projects { } } +/* ========================================================================== + LANGUAGE SWITCHER (EN / ES) + ========================================================================== */ +.lang-switch { + display: inline-flex; + align-items: center; + background: rgba(15, 23, 42, 0.06); + border: 1.5px solid rgba(15, 23, 42, 0.12); + border-radius: 20px; + padding: 3px; + gap: 2px; + user-select: none; + flex-shrink: 0; + transition: all var(--transition-fast); +} + +.lang-switch:hover { + border-color: var(--neon-green); + box-shadow: 0 0 12px rgba(0, 230, 118, 0.3); +} + +.lang-btn { + background: transparent; + border: none; + color: #64748b; + font-family: var(--font-body); + font-size: 0.74rem; + font-weight: 800; + letter-spacing: 0.06em; + padding: 5px 11px; + border-radius: 14px; + cursor: pointer; + transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1); + display: inline-flex; + align-items: center; + justify-content: center; + line-height: 1; +} + +.lang-btn:hover { + color: #0f172a; +} + +.lang-btn.active { + background: #0f172a; + color: var(--neon-lime); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 0 10px rgba(0, 230, 118, 0.45); +} + +/* Top bar variant */ +.top-bar .lang-switch { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.16); +} + +.top-bar .lang-btn { + color: #94a3b8; + font-size: 0.7rem; + padding: 3px 8px; +} + +.top-bar .lang-btn.active { + background: var(--neon-lime); + color: #05080b; + box-shadow: 0 0 10px rgba(0, 230, 118, 0.6); +} + +/* Mobile drawer container */ +.mobile-lang-wrap { + display: flex; + align-items: center; + justify-content: space-between; + padding: 14px 18px; + background: rgba(255, 255, 255, 0.05); + border-radius: var(--radius-md); + margin-bottom: 20px; + border: 1px solid rgba(255, 255, 255, 0.08); +} + +.mobile-lang-label { + font-size: 0.85rem; + font-weight: 700; + color: #cbd5e1; + display: flex; + align-items: center; + gap: 6px; +} + diff --git a/terms-of-service.html b/terms-of-service.html index 64129a1..df263db 100644 --- a/terms-of-service.html +++ b/terms-of-service.html @@ -69,7 +69,11 @@
- +
+ + +
+
(661) 581-7278 @@ -94,6 +98,17 @@ Tumbleweed Removal Contact
+
+ + + Language / Idioma: + +
+ + +
+
+
@@ -350,6 +365,7 @@ + diff --git a/translations.js b/translations.js new file mode 100644 index 0000000..63a4257 --- /dev/null +++ b/translations.js @@ -0,0 +1,479 @@ +/** + * NEXT GEN LANDSCAPING & YARD CARE (AV YARD PRO) + * Enterprise-Grade Bilingual Internationalization (i18n) Engine + * Antelope Valley (Palmdale, Lancaster, Quartz Hill, Acton, Rosamond) + */ + +(function() { + 'use strict'; + + // Rich HTML translations for headings and highlights that contain styled neon spans + const htmlDictionary = { + "calc.title": { + en: 'Transparent Pricing for High Desert Yards', + es: 'Precios Transparentes para Jardines del Alto Desierto' + }, + "ba.title": { + en: 'See the Same-Day Cleanup', + es: 'Vea la Limpieza el Mismo Día' + }, + "projects.title": { + en: 'Beyond Cleanouts: Custom Desert Living', + es: 'Más Allá de Limpiezas: Vida Desértica a Medida' + }, + "services.title": { + en: 'Complete Yard & Landscaping Services', + es: 'Servicios Completos de Jardinería y Mantenimiento' + }, + "areas.title": { + en: 'Proudly Serving the Entire Antelope Valley', + es: 'Sirviendo con Orgullo a Todo Antelope Valley' + }, + "reviews.title": { + en: 'What High Desert Homeowners Say', + es: 'Lo que Dicen los Propietarios del Desierto' + }, + "faq.title": { + en: 'Frequently Asked Questions', + es: 'Preguntas Frecuentes' + }, + "cta.title": { + en: 'Ready To Reclaim Your High Desert Yard?', + es: '¿Listo Para Recuperar Su Jardín del Alto Desierto?' + }, + "modal.title": { + en: 'Request Your Free Estimate', + es: 'Solicite Su Presupuesto Gratis' + } + }; + + // Comprehensive plain text dictionary + const dictionary = { + // --- Top Announcement Bar --- + "High Desert Notice": "Aviso del Alto Desierto", + "LA & Kern County Fire Clearance Deadlines Approaching! Fast 48-Hour Weed Abatement Available.": "¡Se acercan los plazos de desbroce contra incendios de LA y Kern! Desbroce rápido en 48 horas.", + "Get Instant Estimate →": "Obtener Presupuesto Inmediato →", + "Get Instant Estimate →": "Obtener Presupuesto Inmediato →", + "Direct: (661) 581-7278": "Directo: (661) 581-7278", + "24-Hr Text Dispatch Available": "Despacho por Mensaje 24 Horas", + + // --- Navigation Links --- + "Services": "Servicios", + "Cost Calculator": "Calculadora de Costos", + "Before & After": "Antes y Después", + "Projects": "Proyectos", + "Featured Projects": "Proyectos Destacados", + "Service Areas": "Zonas de Servicio", + "All Service Areas": "Todas las Zonas de Servicio", + "All Services": "Todos los Servicios", + "Reviews": "Opiniones", + "Customer Reviews": "Opiniones de Clientes", + "Contact": "Contacto", + "Contact Us": "Contáctenos", + "Free Estimate": "Presupuesto Gratis", + "Get Free Estimate": "Obtener Presupuesto Gratis", + "Request Instant Quote": "Solicitar Presupuesto Inmediato", + "Language / Idioma:": "Idioma / Lenguaje:", + "Home": "Inicio", + + // --- Hero Section --- + "Antelope Valley High-Desert Yard Specialists": "Especialistas en Jardinería del Alto Desierto de Antelope Valley", + "Rugged Desert.": "Desierto Agreste.", + "Precision Lawns.": "Césped de Precisión.", + "Zero Compromise.": "Cero Compromisos.", + "Tumbleweeds, unkempt desert brush, or high water bills? Next Gen transforms harsh Antelope Valley properties into pristine, fire-safe showpieces. Fast turnarounds across Palmdale, Lancaster, Quartz Hill, and surrounding desert communities.": "¿Rodadoras, maleza desértica o altas facturas de agua? Next Gen transforma terrenos difíciles de Antelope Valley en propiedades impecables y seguras contra incendios. Servicio rápido en Palmdale, Lancaster, Quartz Hill y comunidades vecinas.", + "Calculate Your Estimate": "Calcular Su Presupuesto", + "Calculate Yard Cost": "Calcular Costo de Jardín", + "Call (661) 581-7278": "Llamar (661) 581-7278", + "Direct Call (661) 581-7278": "Llamar Directo (661) 581-7278", + + // --- Stats Ticker --- + "Zero Tractor Damage": "Cero Daño de Tractor", + "Lightweight Walk-Behind Precision": "Precisión Manual Ligera", + "Walk-Behind Precision Only": "Solo Precisión Manual y Cortacésped", + "Emergency Storm Cleanups": "Limpiezas de Emergencia", + "24-48 Hr Fast Dispatch": "Despacho Rápido en 24-48 Horas", + "Avg Water Bill Savings": "Ahorro Promedio en Agua", + "Smart Drip & Turf Solutions": "Soluciones de Riego y Césped", + "Fire Code Compliance": "Cumplimiento contra Incendios", + "LA County Defensible Space": "Espacio Defensivo del Condado de LA", + + // --- Calculator Section --- + "Instant Estimation Engine": "Calculadora de Estimación Inmediata", + "Transparent Pricing for High Desert Yards": "Precios Transparentes para Jardines del Alto Desierto", + "Customize your property parameters below. Get an immediate ballpark estimate tailored for Antelope Valley parcel sizes, soil types, and fire safety codes.": "Personalice los parámetros de su propiedad a continuación. Obtenga un presupuesto aproximado e inmediato adaptado a los tamaños de lote, tipos de suelo y normas contra incendios de Antelope Valley.", + "Select Primary Service Needed": "Seleccione el Servicio Principal", + "Select Yard or Parcel Footprint": "Seleccione el Tamaño del Terreno", + "Yard Condition / Growth Severity": "Condición del Terreno / Severidad", + + // Calculator Service Options + "Tumbleweed & Cleanout": "Limpieza y Retiro de Rodadoras", + "Windstorm brush, trashout, deep haul": "Maleza de tormenta, basura y retiro profundo", + "Fire Hazard Clearance": "Desbroce contra Incendios", + "100ft defensible space, weed whacking, raking": "Espacio defensivo de 100 pies, desbroce y rastrillado", + "Artificial Turf / Putting Green": "Césped Sintético / Putting Green", + "Cool-blade UV turf, zero water maintenance": "Césped UV refrescante, cero agua", + "Desert Xeriscaping & Rock": "Jardinería Desértica (Xeriscape) y Rocas", + "DG, river stone, desert agaves & drip": "Granito, piedra de río, agaves y riego por goteo", + "Tree Trimming & Palms": "Poda de Árboles y Palmeras", + "Wind mitigation, skinning & pruning": "Prevención contra viento, afeitado y poda", + "Routine Yard Maintenance": "Mantenimiento Periódico de Jardín", + "Bi-weekly / monthly edging & detailing": "Orillado y detallado quincenal o mensual", + + // Calculator Size Options + "Front Yard Only": "Solo Patio Delantero", + "Up to ~2,000 sq ft": "Hasta ~2,000 pies²", + "Standard Suburb Lot": "Lote Residencial Estándar", + "1/4 Acre (Front & Back)": "1/4 Acre (Delantero y Trasero)", + "Half-Acre Parcel": "Terreno de Medio Acre", + "~20,000 sq ft": "~20,000 pies²", + "Large Residential Parcel": "Terreno Residencial Grande", + "Comprehensive crew clearance": "Despeje integral con cuadrilla completa", + + // Calculator Severity Options + "Light / Moderate": "Ligero / Moderado", + "Surface weeds, basic tidying": "Maleza superficial, limpieza básica", + "Heavy Overgrowth": "Crecimiento Denso / Pesado", + "Tall foxtails, tumbleweed build-up": "Pasto alto, colas de zorro y rodadoras", + "Severe / Jungle": "Severo / Muy Denso", + "Waist-high brush, debris & heavy hauling": "Maleza a la cintura, escombros y retiro pesado", + + // Calculator Output Box + "Estimated Price Range": "Rango de Precio Estimado", + "*All-inclusive: labor, equipment, disposal & hauling.": "*Todo incluido: mano de obra, equipo, traslado y descarga.", + "Lock In This Estimate & Book": "Asegurar Este Presupuesto y Reservar", + "Free in-person confirmation walkthrough before any work begins.": "Recorrido de confirmación en persona gratis antes de comenzar cualquier trabajo.", + "Commercial Haul Included": "Transporte Comercial Incluido", + "County Defensible Space Compliant": "Cumplimiento de Espacio Defensivo del Condado", + + // --- Before / After Section --- + "Authentic High Desert Results": "Resultados Auténticos del Alto Desierto", + "See the Same-Day Cleanup": "Vea la Limpieza el Mismo Día", + "Slide the divider to see the exact same property before and after our crew arrived: waist-high weeds, tumbleweeds, and yard trash completely cleared down to clean, raked, fire-safe ground.": "Deslice el divisor para ver la misma propiedad antes y después de nuestro equipo: maleza a la cintura, rodadoras y basura completamente despejadas hasta dejar el suelo limpio, rastrillado y seguro contra incendios.", + "Drag the neon divider or tap anywhere to compare before & after": "Deslice el divisor de neón o toque en cualquier parte para comparar el antes y después", + "Same-Day Crew Turnaround": "Entrega del Equipo el Mismo Día", + "100% Hand-Raked Ground Finish": "Acabado de Suelo Rastrillado a Mano al 100%", + "Fenceline & Pipe Safe (No Heavy Tractors)": "Seguro para Cercas y Tuberías (Sin Tractores)", + "Full Trailer Haul-Away Included": "Retiro Completo en Remolque Incluido", + "AFTER": "DESPUÉS", + ": CLEANED YARD": ": TERRENO LIMPIO", + "BEFORE": "ANTES", + ": OVERGROWN": ": CON MALEZA", + + // --- Featured Projects --- + "Featured AV Installations": "Instalaciones Destacadas en AV", + "Beyond Cleanouts: Custom Desert Living": "Más Allá de Limpiezas: Vida Desértica a Medida", + "Explore drought-tolerant xeriscaping, decorative river rockscapes, and synthetic turf installations engineered to withstand 105°F+ High Desert heat and heavy seasonal winds.": "Explore jardines xeriscaping tolerantes a la sequía, rocas decorativas de río e instalaciones de césped sintético diseñadas para soportar más de 105°F y fuertes vientos.", + "Modern Xeriscape & River Rock": "Xeriscape Moderno y Roca de Río", + "Replaced weed-choked dirt with decomposed granite, decorative river boulders, and automated drip agave beds.": "Reemplazamos tierra con maleza por granito descompuesto, rocas decorativas de río y canteros de agave con riego por goteo.", + "Water Savings:": "Ahorro de Agua:", + "Turnaround:": "Tiempo de Ejecución:", + "3 Days": "3 Días", + "Luxury Turf & Yard Remodel": "Césped de Lujo y Remodelación de Patio", + "Triple-layer UV-rated artificial turf resilient against desert wind gusts and summer highs above 105°F.": "Césped artificial de triple capa resistente a los fuertes vientos del desierto y veranos de más de 105°F.", + "Request Similar Xeriscape Quote": "Solicitar Presupuesto de Xeriscape Similar", + "Request Similar Turf Quote": "Solicitar Presupuesto de Césped Similar", + "Warranty:": "Garantía:", + "15-Year": "15 Años", + "Maintenance:": "Mantenimiento:", + "Zero Mow": "Cero Corte", + "Fire Clearance Lot Trash-Out": "Desbroce de Lote y Retiro de Residuos", + "Cleared 1/2 acre of windblown Russian thistle tumbleweeds, dry sage, and debris to pass LA County fire inspection.": "Despejamos medio acre de rodadoras de cardo ruso, pasto seco y escombros para aprobar la inspección de bomberos.", + "County Status:": "Estado del Condado:", + "100% Passed": "100% Aprobado", + "Haul-Away:": "Retiro de Carga:", + "2 Full Trailers": "2 Remolques Llenos", + + // --- Core Services --- + "Built For Antelope Valley": "Diseñado para Antelope Valley", + "Complete Yard & Landscaping Services": "Servicios Completos de Jardinería y Mantenimiento", + "We don't do cookie-cutter coastal landscaping. Our equipment, crews, and materials are engineered for High Desert caliche soil, seasonal windstorms, and California drought restrictions.": "No hacemos jardinería costera genérica. Nuestro equipo, cuadrillas y materiales están preparados para el suelo de caliche, tormentas de viento y restricciones de sequía de California.", + + // Service 1 + "LA County Weed Abatement": "Desbroce contra Incendios Condado de LA", + "Stay ahead of LA County and Kern County fire inspection notices. We cut, weed whack, rake, and clear properties to meet strict 100-foot defensible space requirements before deadlines hit.": "Anticípese a las inspecciones de incendios de LA y Kern. Cortamos, desbrozamos, rastrillamos y limpiamos su propiedad para cumplir con el espacio defensivo de 100 pies antes del plazo límite.", + "100-Foot Fire Defensible Perimeter": "Perímetro Defensivo contra Incendios de 100 Pies", + "High-Power Weed Whacking, Mowing & Raking": "Desbroce de Alta Potencia, Corte y Rastrillado", + "Guaranteed County Inspection Sign-Off": "Aprobación Garantizada de Inspección del Condado", + "Get Fire Clearance Quote": "Presupuesto de Desbroce contra Incendios", + "View Weed Abatement Details →": "Ver Detalles de Desbroce →", + + // Service 2 + "Tumbleweed & Windstorm Hauling": "Retiro de Rodadoras y Limpieza de Tormentas", + "When the Antelope Valley 60mph winds blow, tumbleweeds stack to the roofline against your fences and sheds. We eradicate the piles and haul everything to the transfer station.": "Cuando los vientos de 60 mph de Antelope Valley azotan, las rodadoras se apilan hasta los techos contra cercas y cobertizos. Erradicamos los montones y transportamos todo a los centros autorizados.", + "Fence Line & Rooftop Tumbleweed Removal": "Retiro de Rodadoras en Cercas y Techos", + "High-Capacity Hauling & Dump Trailers": "Remolques de Volteo y Carga Pesada de Gran Capacidad", + "Property Trash-Out & Lot Cleans": "Limpieza Integral de Terrenos y Residuos", + "Book Cleanout": "Reservar Limpieza", + "View Tumbleweed Details →": "Ver Detalles de Rodadoras →", + + // Service 3 + "Artificial Turf & Putting Greens": "Césped Sintético y Putting Greens", + "Enjoy an emerald green yard year-round without paying astronomical water rates. We install commercial-grade, anti-microbial turf with specialized heat-deflecting cooling infill.": "Disfrute de un jardín verde esmeralda todo el año sin pagar facturas de agua astronómicas. Instalamos césped comercial antimicrobiano con relleno refrigerante contra el calor.", + "UV-Stabilized (No Fade In Desert Sun)": "Protección UV (Sin Decoloración por Sol del Desierto)", + "Pet-Friendly with Rapid Drainage Base": "Apto para Mascotas con Base de Drenaje Rápido", + "Custom Backyard Putting Greens": "Putting Greens Personalizados para Patios", + "Get Turf Estimate": "Obtener Presupuesto de Césped", + + // Service 4 + "Desert Xeriscape & Rockscaping": "Jardinería Desértica (Xeriscape) y Rocas", + "Stunning architectural landscaping engineered to thrive in the High Desert. We blend decomposed granite, California gold river rock, decorative boulders, and water-wise agaves.": "Hermosa jardinería arquitectónica diseñada para prosperar en el Alto Desierto. Combinamos granito descompuesto, piedra de río dorada, rocas decorativas y agaves resistentes.", + "Decomposed Granite & Crushed Stone": "Granito Descompuesto y Piedra Triturada", + "Heavy-Duty Commercial Weed Barrier Fabric": "Malla Profesional de Alta Densidad contra Maleza", + "Architectural Desert Boulders & Succulents": "Rocas Arquitectónicas y Suculentas del Desierto", + "Explore Rockscaping": "Explorar Jardinería con Rocas", + + // Service 5 + "Tree Trimming & Palm Pruning": "Poda de Árboles y Palmeras", + "High winds in Palmdale and Lancaster topple untrimmed trees and dead palm fronds. We thin tree canopies for wind passage, skin palms, and grind dangerous stumps safely.": "Los fuertes vientos en Palmdale y Lancaster derriban árboles sin podar y palmas secas. Aclareamos copas para el paso del viento, afeitamos palmeras y trituramos tocones peligrosos.", + "Wind Mitigation Canopy Thinning": "Aclareo de Copas para Mitigar Vientos Fuertes", + "Palm Frond Skinning & Seed Removal": "Afeitado de Palmeras y Retiro de Semillas", + "Complete Stump Grinding & Root Extraction": "Trituración Completa de Tocones y Extracción de Raíces", + "Quote Tree Work": "Presupuesto de Trabajo en Árboles", + + // Service 6 + "Smart Irrigation & Drip Repair": "Reparación de Riego por Goteo Inteligente", + "Desert soil requires dialed-in watering. Leaky valves or broken lines skyrocket your utility bill. We diagnose underground leaks, replace cracked manifolds, and tune drip systems.": "El suelo desértico requiere riego exacto. Válvulas con fugas o líneas rotas disparan su factura. Diagnosticamos fugas subterráneas, reemplazamos colectores agrietados y calibramos goteo.", + "Subsurface Drip Line Conversions": "Conversión a Líneas de Riego por Goteo Subterráneo", + "Smart Wi-Fi Weather-Sensing Controllers": "Controladores Wi-Fi Inteligentes con Sensor de Clima", + "Anti-Siphon Valve & Backflow Replacement": "Reemplazo de Válvulas Anti-Sifón y Antirretorno", + "Schedule Irrigation Check": "Programar Revisión de Riego", + + // --- Service Areas --- + "Local Territory Coverage": "Cobertura Territorial Local", + "Proudly Serving the Entire Antelope Valley": "Sirviendo con Orgullo a Todo Antelope Valley", + "Our crews live and work right here in the High Desert. We arrive equipped with commercial-grade trimmers, mowers, haul trailers, and hand tools suited for residential yards and neighborhood properties alike.": "Nuestras cuadrillas viven y trabajan aquí mismo en el Alto Desierto. Llegamos equipados con desbrozadoras comerciales, cortacéspedes, remolques y herramientas de mano aptas para cualquier propiedad.", + "West Palmdale": "Palmdale Oeste", + "East Palmdale": "Palmdale Este", + "Lancaster West": "Lancaster Oeste", + "Quartz Hill": "Quartz Hill", + "Rosamond & Mojave": "Rosamond y Mojave", + "Acton & Agua Dulce": "Acton y Agua Dulce", + "View All Antelope Valley Service Areas & Regulations →": "Ver Todas las Zonas de Servicio y Regulaciones de Antelope Valley →", + "View All Service Areas →": "Ver Todas las Zonas de Servicio →", + "All Service Areas →": "Todas las Zonas de Servicio →", + + // --- Reviews Section --- + "Real Antelope Valley Feedback": "Opiniones Reales de Antelope Valley", + "What High Desert Homeowners Say": "Lo que Dicen los Propietarios del Desierto", + "Don't just take our word for it. Here is how Next Gen has helped neighbors in Palmdale, Lancaster, and Quartz Hill regain control of their properties.": "No solo se quede con nuestra palabra. Así es como Next Gen ha ayudado a vecinos en Palmdale, Lancaster y Quartz Hill a recuperar sus terrenos.", + "\"We received a weed abatement violation notice from LA County Fire with a 2-week deadline. Next Gen showed up the next morning with commercial weed trimmers and had our full half-acre cleared, raked, and hauled into their trailer before sundown. The inspector signed off with zero issues. Lifesavers!\"": "\"Recibimos un aviso de infracción por maleza de los Bomberos del Condado de LA con un plazo de 2 semanas. Next Gen llegó a la mañana siguiente con desbrozadoras comerciales y dejó nuestro medio acre despejado, rastrillado y cargado en su remolque antes de caer el sol. El inspector lo firmó sin un solo problema. ¡Nos salvaron!\"", + "\"After the winter windstorms, our backyard had tumbleweeds literally stacked 8 feet high against our vinyl fence. These guys had the proper heavy-duty trailers and cleared everything in 3 hours. Super polite, fair pricing, and they left the yard spotless.\"": "\"Después de las tormentas de viento invernales, nuestro patio trasero tenía rodadoras apiladas a 8 pies de altura contra nuestra cerca de vinilo. Estos chicos llegaron con remolques de carga pesada y despejaron todo en 3 horas. Súper amables, precio justo y dejaron el patio impecable.\"", + "\"We ditched our dead grass for artificial turf and desert rockscape. Our water bill dropped by over $220/month in the summer, and our dogs love the turf. The green is so vibrant and stays cool even when Palmdale hits 104 degrees. Highly recommend!\"": "\"Reemplazamos el pasto seco por césped artificial y rocas de desierto. Nuestra factura de agua bajó más de $220/mes en el verano y a nuestros perros les fascina. El verde es vibrante y se mantiene fresco incluso a 104 grados en Palmdale. ¡Muy recomendados!\"", + + // --- FAQs Section --- + "Common Questions": "Preguntas Frecuentes", + "Frequently Asked Questions": "Preguntas Frecuentes", + "Everything you need to know about our Antelope Valley yard care, county weed deadlines, and pricing.": "Todo lo que necesita saber sobre el cuidado de jardines, plazos de maleza del condado y precios en Antelope Valley.", + "What are the LA County and Kern County weed abatement deadlines?": "¿Cuáles son los plazos de desbroce contra incendios de los condados de LA y Kern?", + "In the Antelope Valley, LA County Agricultural Commissioner and Fire Department inspections typically begin in mid-to-late spring and enforce 100-foot defensible space clearance around structures and 10-foot road buffers. Failure to clear can result in county-enforced contractor billing and heavy penalty fees. Next Gen guarantees work that passes county inspection on the first visit.": "En Antelope Valley, las inspecciones de bomberos del Condado de LA comienzan a mediados de primavera y exigen un espacio defensivo de 100 pies alrededor de estructuras y márgenes de 10 pies en caminos. No limpiar puede ocasionar multas severas y cobros del condado. Next Gen garantiza trabajos que aprueban la inspección en la primera visita.", + "How does artificial turf hold up in high Antelope Valley summer heat?": "¿Cómo resiste el césped sintético el intenso calor veraniego de Antelope Valley?", + "We exclusively install UV-stabilized commercial turf with special cooling infill designed to withstand 110°F+ desert temperatures without melting, fading, or discoloring. It also includes an engineered perforated backing that drains quickly during rare desert cloudbursts and prevents pet odor buildup.": "Instalamos exclusivamente césped comercial con protección UV y relleno refrigerante especial para soportar más de 110°F sin derretirse ni desteñirse. Además, cuenta con base perforada que drena rápidamente y previene la acumulación de olores de mascotas.", + "Do you haul away the debris, or do I need to rent a dumpster?": "¿Se llevan los escombros o necesito rentar un contenedor de basura?", + "We handle 100% of the hauling. Our fleet is equipped with high-capacity dump trailers and commercial trucks. All tumbleweeds, tree clippings, dead brush, and yard trash are loaded and legally disposed of at authorized local green-waste facilities in Palmdale and Lancaster.": "Nosotros nos encargamos del 100% del retiro y transporte. Nuestra flota cuenta con remolques de volteo de alta capacidad. Todas las rodadoras, ramas podadas y maleza seca se cargan y depositan legalmente en instalaciones de reciclaje verde autorizadas en Palmdale y Lancaster.", + "Can I get an estimate by texting photos of my yard?": "¿Puedo obtener un presupuesto enviando fotos de mi patio por mensaje?", + "Yes! You can text photos and your address directly to (661) 581-7278. We can often provide a same-hour ballpark estimate, followed by a quick in-person verification before any tools touch the ground.": "¡Sí! Puede enviar fotos y su dirección directamente al (661) 581-7278. A menudo entregamos un estimado en la misma hora, seguido de una confirmación rápida en persona antes de iniciar los trabajos.", + "What equipment do you use for yard cleanups and weed clearing?": "¿Qué herramientas y equipos usan para la limpieza de patios y desbroce?", + "We use commercial-grade walk-behind mowers, high-powered gas weed trimmers/whackers, heavy-duty landscape rakes, blowers, and our haul truck & trailer. We specialize in residential yards, standard lots, and parcels up to a half-acre—getting directly up against fences, walls, and corners that heavy machinery and tractors can't reach.": "Usamos cortacéspedes comerciales de empuje, desbrozadoras a gas de alta potencia, rastrillos reforzados, sopladoras y remolques de volteo. Nos especializamos en patios residenciales y terrenos de hasta medio acre, llegando directamente contra cercas y paredes donde los tractores pesados no pueden entrar sin causar daños.", + + // --- Final CTA --- + "Ready To Reclaim Your High Desert Yard?": "¿Listo Para Recuperar Su Jardín del Alto Desierto?", + "Don't let windblown tumbleweeds and fire hazards take over. Get an honest, zero-pressure quote from the local Next Gen team that knows Antelope Valley soil inside and out.": "No permita que las rodadoras y los peligros de incendio se apoderen de su propiedad. Obtenga un presupuesto honesto del equipo local de Next Gen que conoce el terreno de Antelope Valley al detalle.", + "Request Free On-Site Quote": "Solicitar Presupuesto en el Lugar Gratis", + + // --- Modal Form --- + "Quick Response Guarantee": "Garantía de Respuesta Rápida", + "Request Your Free Estimate": "Solicite Su Presupuesto Gratis", + "Fill out the form below or call us directly. Next Gen responds within 15 minutes during daylight hours.": "Complete el formulario a continuación o llámenos directamente. Next Gen responde en menos de 15 minutos en horas diurnas.", + "Full Name *": "Nombre Completo *", + "Mobile Phone (for quote text) *": "Teléfono Móvil (para texto de presupuesto) *", + "Property Address / City *": "Dirección de la Propiedad / Ciudad *", + "Service Needed": "Servicio Solicitado", + "Select a Service": "Seleccione un Servicio", + "Weed Abatement (Fire Clearance)": "Desbroce contra Incendios (Fire Clearance)", + "Tumbleweed Removal & Hauling": "Retiro y Transporte de Rodadoras", + "Synthetic Turf Installation": "Instalación de Césped Sintético", + "Desert Xeriscape & Rockscaping": "Jardinería Desértica (Xeriscape) y Rocas", + "Tree Trimming & Palm Pruning": "Poda de Árboles y Palmeras", + "Smart Irrigation & Drip Repair": "Reparación de Riego por Goteo", + "Complete Property Cleanup / Trash-Out": "Limpieza Completa de Propiedad / Desalojo", + "Notes / Yard Size": "Notas / Tamaño del Terreno", + "Submit for Fast Quote →": "Enviar Para Presupuesto Rápido →", + + // --- Footer --- + "Antelope Valley's premier landscaping, fire hazard weed abatement, desert rockscaping, and synthetic turf contractor. Palmdale & Lancaster, California.": "El principal contratista de jardinería, desbroce contra incendios, rocas desérticas y césped sintético en Antelope Valley. Palmdale y Lancaster, California.", + "Working Hours": "Horario de Trabajo", + "Mon – Fri: 6:30 AM – 7:00 PM": "Lun – Vie: 6:30 AM – 7:00 PM", + "Saturday: 7:00 AM – 6:00 PM": "Sábado: 7:00 AM – 6:00 PM", + "Sunday: Emergency Storm Calls": "Domingo: Llamadas de Emergencia", + "24-Hr Antelope Valley Dispatch": "Despacho 24 Horas en Antelope Valley", + "Next Gen Landscaping & Yard Care. All rights reserved.": "Next Gen Landscaping & Yard Care. Todos los derechos reservados.", + "Privacy Policy (CCPA / CPRA)": "Política de Privacidad (CCPA / CPRA)", + "Terms of Service": "Términos de Servicio", + "Licensed, Bonded & Insured • High Desert Fire Hazard Compliant": "Licenciados, Asegurados y Afianzados • Cumplimiento contra Incendios del Alto Desierto", + "Licensed, Bonded & Insured • Residential Hand-Tool Precision": "Licenciados, Asegurados y Afianzados • Precisión Manual Residencial", + "Palmdale, CA (93550, 93551)": "Palmdale, CA (93550, 93551)", + "Lancaster, CA (93534, 93535)": "Lancaster, CA (93534, 93535)", + "Quartz Hill, CA (93536)": "Quartz Hill, CA (93536)", + "Acton & Agua Dulce": "Acton y Agua Dulce", + "Rosamond & Mojave": "Rosamond y Mojave", + + // Subpage & Hub Pages + "Same-Day & 48-Hour On-Site Estimates Across All High Desert Zip Codes.": "Presupuestos en el sitio el mismo día y en 48 horas en todos los códigos postales del Alto Desierto.", + "All Antelope Valley Service Areas & Regulations": "Todas las Zonas de Servicio y Regulaciones de Antelope Valley", + "High Desert Landscaping & Weed Abatement Locations": "Ubicaciones de Jardinería y Desbroce en el Alto Desierto", + "Fast 24-48 hour response times for LA County Fire defensible space compliance, tumbleweed clearing, desert rockscaping, and water-saving synthetic turf throughout the Antelope Valley.": "Respuesta rápida de 24 a 48 horas para cumplimiento de espacio defensivo contra incendios del Condado de LA, retiro de rodadoras, jardinería xeriscape y césped sintético en todo Antelope Valley.", + "Palmdale Yard Care & Weed Abatement": "Cuidado de Jardines y Desbroce en Palmdale", + "Lancaster Yard Care & Weed Abatement": "Cuidado de Jardines y Desbroce en Lancaster", + "Quartz Hill Yard Care & Weed Abatement": "Cuidado de Jardines y Desbroce en Quartz Hill", + "Acton & Agua Dulce Yard Care": "Cuidado de Jardines en Acton y Agua Dulce", + "Rosamond & Mojave Yard Care": "Cuidado de Jardines en Rosamond y Mojave" + }; + + /** + * Set Application Language + * @param {'en'|'es'} lang + */ + function setLanguage(lang) { + if (lang !== 'es') lang = 'en'; + + // 1. Save state in localStorage + try { + localStorage.setItem('avyardpro_lang', lang); + } catch (e) {} + + // 2. Set document language + document.documentElement.lang = lang; + + // 3. Update all toggle button active classes + document.querySelectorAll('.lang-btn').forEach(btn => { + const btnLang = btn.getAttribute('data-lang'); + if (btnLang === lang) { + btn.classList.add('active'); + btn.setAttribute('aria-pressed', 'true'); + } else { + btn.classList.remove('active'); + btn.setAttribute('aria-pressed', 'false'); + } + }); + + // 4. Update rich HTML elements with data-i18n-html + document.querySelectorAll('[data-i18n-html]').forEach(el => { + const key = el.getAttribute('data-i18n-html'); + if (htmlDictionary[key] && htmlDictionary[key][lang]) { + el.innerHTML = htmlDictionary[key][lang]; + } + }); + + // 5. Update text elements + const targets = document.querySelectorAll( + 'h1, h2, h3, h4, h5, p, span, a, button, label, summary, div.stat-label, div.calc-option-title, div.calc-option-desc, div.faq-answer' + ); + + targets.forEach(el => { + // Don't overwrite elements handled by data-i18n-html + if (el.hasAttribute('data-i18n-html') || el.closest('[data-i18n-html]')) { + return; + } + + // Skip elements that contain other complex children unless it's pure text or text + svg + if (el.children.length > 0 && !el.classList.contains('badge') && !el.classList.contains('btn') && !el.classList.contains('showcase-stat') && !el.classList.contains('announcement-link')) { + return; + } + + // Store initial English text on first pass + if (typeof el._originalText === 'undefined') { + el._originalText = el.textContent.trim(); + } + + const original = el._originalText; + + if (lang === 'es') { + if (dictionary[original]) { + const svg = el.querySelector('svg'); + if (svg) { + const svgHtml = svg.outerHTML; + el.innerHTML = svgHtml + ' ' + dictionary[original]; + } else { + el.textContent = dictionary[original]; + } + } + } else { + // Restore original English text + const svg = el.querySelector('svg'); + if (svg) { + const svgHtml = svg.outerHTML; + el.innerHTML = svgHtml + ' ' + original; + } else { + el.textContent = original; + } + } + }); + + // 6. Translate select options in forms + document.querySelectorAll('select option').forEach(opt => { + if (typeof opt._originalText === 'undefined') { + opt._originalText = opt.textContent.trim(); + } + const orig = opt._originalText; + if (lang === 'es' && dictionary[orig]) { + opt.textContent = dictionary[orig]; + } else if (lang === 'en') { + opt.textContent = orig; + } + }); + + // 7. Translate input & textarea placeholders + document.querySelectorAll('input[placeholder], textarea[placeholder]').forEach(input => { + if (typeof input._originalPlaceholder === 'undefined') { + input._originalPlaceholder = input.getAttribute('placeholder') || ''; + } + const orig = input._originalPlaceholder; + if (lang === 'es' && dictionary[orig]) { + input.setAttribute('placeholder', dictionary[orig]); + } else if (lang === 'en') { + input.setAttribute('placeholder', orig); + } + }); + + // 8. Dispatch event for calculators, sliders, or other components + window.dispatchEvent(new CustomEvent('languageChanged', { detail: { lang } })); + } + + // Expose globally + window.setAppLanguage = setLanguage; + + // Initialize immediately or on DOMContentLoaded + function initLanguage() { + // Check URL query parameter: ?lang=es or ?lang=en + const urlParams = new URLSearchParams(window.location.search); + const urlLang = urlParams.get('lang'); + + let activeLang = 'en'; + try { + activeLang = urlLang || localStorage.getItem('avyardpro_lang') || 'en'; + } catch (e) { + activeLang = urlLang || 'en'; + } + + // Attach click listeners to all language switch buttons + document.querySelectorAll('.lang-btn').forEach(btn => { + btn.addEventListener('click', (e) => { + e.preventDefault(); + const target = btn.getAttribute('data-lang'); + if (target) { + setLanguage(target); + } + }); + }); + + // Apply active language + setLanguage(activeLang); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initLanguage); + } else { + initLanguage(); + } +})(); diff --git a/tumbleweed-removal.html b/tumbleweed-removal.html index fa97b07..2551669 100644 --- a/tumbleweed-removal.html +++ b/tumbleweed-removal.html @@ -78,7 +78,11 @@
- +
+ + +
+
(661) 581-7278 @@ -97,6 +101,17 @@ Before & After Service Areas Contact +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -447,6 +462,7 @@ + diff --git a/weed-abatement.html b/weed-abatement.html index 4ea82e1..a288205 100644 --- a/weed-abatement.html +++ b/weed-abatement.html @@ -78,7 +78,11 @@
- +
+ + +
+
(661) 581-7278 @@ -97,6 +101,17 @@ Before & After Service Areas Contact +
+ + + Language / Idioma: + +
+ + +
+
+
@@ -456,6 +471,7 @@ +