var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // var stdin_exports = {}; __export(stdin_exports, { default: () => stdin_default, featureConfig: () => featureConfig }); module.exports = __toCommonJS(stdin_exports); // virtual:core/dataSources.ts var dataSources = []; // virtual:core/automations.ts var automations = [ { name: "web_solicitud_contacto", description: "Public: recoge el formulario de calpipe.es, valida en servidor, guarda el lead en web__leads y avisa por correo a Jose Luis", public: true } ]; // virtual:core/seo.ts var seo = { routes: [ { path: "/", role: "page", h1: "Calpipe \u2014 Inspecci\xF3n y ensayos no destructivos" } ] }; // virtual:page.tsx var import_react14 = __toESM(require("react")); // virtual:core/styles.ts var CSS = ` @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@300;400;500;600;700&display=swap'); .cp-root *, .cp-root *::before, .cp-root *::after { box-sizing: border-box; } .cp-root { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .cp-root ::selection { background: #EFE6A8; color: #0B141B; } .cp-root h1, .cp-root h2, .cp-root h3, .cp-root h4, .cp-root p, .cp-root figure { margin: 0; } .cp-root button { font: inherit; } .cp-root input, .cp-root textarea, .cp-root select { font: inherit; } /* El revelado al entrar en pantalla YA NO vive aqui: se pinta en linea desde components/Reveal.tsx. Con clases, que el contenido se viera dependia de que .cp-rev.cp-in le ganase a .cp-rev en la hoja del sitio publicado, y no le ganaba: la seccion de servicios salia en blanco con las dos clases puestas. Lo unico que queda aqui de aquello es respetar a quien pide menos animacion, y eso ahora se comprueba en JavaScript antes de esconder nada. */ @media (prefers-reduced-motion: reduce) { .cp-kenburns, .cp-fade, .cp-line > span, .cp-bob, .cp-ping, .cp-marquee-track { animation: none !important; } } /* --- Hero ---------------------------------------------------------------- */ @keyframes cpKen { from { transform: scale(1.08) translate3d(0,0,0); } to { transform: scale(1.22) translate3d(-1.5%, -1.5%, 0); } } .cp-kenburns { animation: cpKen 26s ease-out forwards; } @keyframes cpRise { from { opacity: 0; transform: translate3d(0, 110%, 0); } to { opacity: 1; transform: none; } } .cp-line > span { display: inline-block; animation: cpRise 1.15s cubic-bezier(.19,1,.22,1) both; } @keyframes cpFade { from { opacity: 0; transform: translate3d(0, 16px, 0); } to { opacity: 1; transform: none; } } .cp-fade { animation: cpFade 1s cubic-bezier(.19,1,.22,1) both; } @keyframes cpBob { 0%, 100% { transform: translateY(0); opacity: .5 } 50% { transform: translateY(7px); opacity: 1 } } .cp-bob { animation: cpBob 2.4s ease-in-out infinite; } @keyframes cpMarquee { from { transform: translate3d(0,0,0); } to { transform: translate3d(-50%,0,0); } } .cp-marquee-track { display: flex; width: max-content; animation: cpMarquee 34s linear infinite; } .cp-marquee:hover .cp-marquee-track { animation-play-state: paused; } @keyframes cpPing { 0% { transform: scale(1); opacity: .55 } 70%, 100% { transform: scale(3.4); opacity: 0 } } .cp-ping { animation: cpPing 2.6s cubic-bezier(0,0,.2,1) infinite; } @keyframes cpSpin { to { transform: rotate(360deg) } } .cp-spin { animation: cpSpin .8s linear infinite; } /* --- Interacciones ------------------------------------------------------- */ .cp-card { transition: transform .5s cubic-bezier(.19,1,.22,1), border-color .35s ease, background .35s ease; } .cp-card:hover { transform: translateY(-6px); } .cp-card .cp-card-img { transition: transform 1.1s cubic-bezier(.19,1,.22,1), filter .6s ease; } .cp-card:hover .cp-card-img { transform: scale(1.07); filter: saturate(1.1) contrast(1.04); } .cp-card:hover .cp-arrow { transform: translateX(5px); } .cp-arrow { transition: transform .4s cubic-bezier(.19,1,.22,1); } .cp-navlink { position: relative; } .cp-navlink::after { content: ''; position: absolute; left: 0; right: 100%; bottom: -6px; height: 1px; background: #EFE6A8; transition: right .45s cubic-bezier(.19,1,.22,1); } .cp-navlink:hover::after { right: 0; } .cp-btn { transition: filter .35s ease, background .35s ease, color .35s ease, border-color .35s ease, opacity .35s ease; } .cp-btn:hover { filter: brightness(1.07); } .cp-btn:active { filter: brightness(0.94); } .cp-btn-fantasma:hover { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.30); } /* La segunda accion es un enlace, no un boton gemelo del primero. */ .cp-enlace { transition: color .3s ease; } .cp-enlace:hover { color: #ffffff !important; } .cp-chev { transition: transform .35s cubic-bezier(.19,1,.22,1); } .cp-enlace:hover .cp-chev { transform: translateX(3px); } /* La pista de bajar: una raya fina con un tramo que la recorre. Sin flechas. */ @keyframes cpHilo { 0% { transform: translateY(-100%); opacity: 0 } 25% { opacity: 1 } 75% { opacity: 1 } 100% { transform: translateY(240%); opacity: 0 } } .cp-hilo { animation: cpHilo 2.6s cubic-bezier(.5,0,.5,1) infinite; } .cp-fab { display: flex; align-items: center; justify-content: center; gap: 10px; height: 54px; padding: 0 22px 0 18px; border-radius: 999px; transition: transform .45s cubic-bezier(.19,1,.22,1), box-shadow .45s ease; } .cp-fab:hover { transform: scale(1.05); } /* En el movil el boton es un circulo: una pastilla con texto se come el ancho de la pantalla y tapa el contenido justo donde menos sitio hay. */ @media (max-width: 760px) { .cp-fab { height: 54px; width: 54px; padding: 0; gap: 0; } .cp-fab-texto { display: none; } .cp-fab-punto { display: none; } } .cp-input { transition: border-color .25s ease, background .25s ease, box-shadow .25s ease; } .cp-input:focus { outline: none; border-color: rgba(239,230,168,.75); background: rgba(255,255,255,.06); box-shadow: 0 0 0 4px rgba(239,230,168,.10); } .cp-input::placeholder { color: rgba(255,255,255,.30); } /* Chrome pinta lo autorrellenado con su propio azul claro y sobre fondo oscuro el campo queda ilegible. La sombra interior es la unica forma de taparlo. */ .cp-root .cp-input:-webkit-autofill, .cp-root .cp-input:-webkit-autofill:hover, .cp-root .cp-input:-webkit-autofill:focus { -webkit-text-fill-color: #ffffff; caret-color: #ffffff; -webkit-box-shadow: 0 0 0 1000px #16242E inset; box-shadow: 0 0 0 1000px #16242E inset; transition: background-color 100000s ease-in-out 0s; } .cp-root select.cp-input option { background: #101E27; color: #fff; } .cp-tab { transition: color .3s ease, background .3s ease, border-color .3s ease; } .cp-sector { transition: color .4s cubic-bezier(.19,1,.22,1), transform .4s cubic-bezier(.19,1,.22,1); } .cp-sector:hover { transform: translateX(10px); } .cp-dot { transition: transform .35s cubic-bezier(.19,1,.22,1); } .cp-pin:hover .cp-dot { transform: scale(1.55); } .cp-pin:hover .cp-pin-label { opacity: 1; transform: translate(-50%, -2px); } .cp-pin-label { opacity: 0; transform: translate(-50%, 4px); transition: opacity .3s ease, transform .3s ease; } /* Lo que solo existe en el movil (pistas de deslizar, avisos de carrusel). */ .cp-solo-movil { display: none; } @media (max-width: 760px) { .cp-solo-movil { display: flex; } } /* --- Rejillas responsivas ------------------------------------------------ */ .cp-grid-serv { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; } .cp-grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; } .cp-grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } .cp-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; } .cp-split { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: 64px; align-items: start; } /* El pie mantiene sus dos columnas SIEMPRE, tambien en el movil: apiladas ocupaban dos pantallas para cinco enlaces y cuatro datos de contacto. */ .cp-pie-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; } @media (max-width: 420px) { .cp-pie-cols { gap: 16px; } .cp-pie-cols a, .cp-pie-cols button { font-size: 13px !important; } } .cp-metodo { display: grid; grid-template-columns: 1fr 1fr; gap: 0; } .cp-nav-links { display: flex; gap: 30px; align-items: center; } .cp-nav-cta { display: flex; gap: 10px; align-items: center; } .cp-hero-pad { padding: 0 56px; } .cp-pad { padding: 132px 56px; } .cp-pad-s { padding: 96px 56px; } /* El boton de menu solo existe cuando los enlaces no caben. */ .cp-burger { display: none !important; } @media (max-width: 1080px) { .cp-burger { display: flex !important; } } @media (max-width: 1080px) { .cp-grid-serv { grid-template-columns: repeat(2, 1fr); } .cp-grid-4 { grid-template-columns: repeat(2, 1fr); } .cp-grid-3 { grid-template-columns: repeat(2, 1fr); } /* !important obligatorio: las secciones ajustan el reparto de columnas con un estilo EN LINEA (0.9fr 1.1fr y parecidos), y en linea gana a la hoja. Sin esto, el formulario de contacto se salia por la derecha del movil y media pantalla quedaba fuera. */ .cp-split { grid-template-columns: 1fr !important; gap: 36px !important; } .cp-nav-links { display: none; } } /* ------------------------------------------------------------------------ El movil no es la version pequena del escritorio: es la que mas se usa. Con los margenes del escritorio, cada seccion ocupaba una pantalla entera de aire y la pagina se hacia un tunel de scroll. Aqui se aprieta TODO lo que en el escritorio respira: margenes, alturas de foto y espacios entre bloques. Los !important son a proposito: esos tamanos viven en estilos en linea (que es como se escriben las apps) y desde la hoja no hay otra forma de ganarles. ------------------------------------------------------------------------ */ @media (max-width: 760px) { /* Ocho tarjetas en columna son ocho pantallas de scroll. En el movil se convierten en un carrusel que se desliza con el dedo: la misma informacion, una pantalla. Sangra hasta el borde para que se vea que hay mas a la derecha. */ .cp-grid-serv { display: flex; grid-template-columns: none; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding: 0 20px 6px; margin: 0 -20px; } .cp-grid-serv::-webkit-scrollbar { display: none; } .cp-grid-serv > * { flex: 0 0 80%; scroll-snap-align: center; } /* La foto de los sectores no desaparece en el movil: sube ARRIBA de la lista y se queda como una banda apaisada. Escondida no se veia el trabajo; en vertical robaba media pantalla. */ .cp-sectores { display: flex !important; flex-direction: column; } .cp-sector-foto { order: -1; margin-bottom: 22px; } .cp-sector-foto > div { position: relative !important; top: auto !important; aspect-ratio: 16 / 10 !important; } .cp-grid-3 { grid-template-columns: 1fr; } /* Las cifras se quedan en dos columnas: una sola las convierte en cuatro pantallazos seguidos y hay que bajar para leer cuatro numeros. */ .cp-grid-4 { grid-template-columns: repeat(2, 1fr); gap: 14px 18px; } .cp-grid-2 { grid-template-columns: 1fr; gap: 16px; } .cp-metodo { grid-template-columns: 1fr; } .cp-hero-pad { padding: 0 20px; } .cp-pad { padding: 58px 20px; } .cp-pad-s { padding: 44px 20px; } .cp-nav-cta .cp-hide-sm { display: none; } .cp-hero-top { padding-top: 112px !important; padding-bottom: 24px !important; } .cp-root h2 { margin-bottom: 24px !important; } .cp-serv-img { aspect-ratio: 16 / 10 !important; } .cp-serv-cuerpo { padding: 14px 16px 16px !important; } .cp-sector-fila { padding: 12px 0 !important; } .cp-metodo-foto, .cp-metodo-foto-cont { min-height: 200px !important; } .cp-metodo-foto-cont { padding: 20px !important; } .cp-metodo-lista { padding: 18px 20px 22px !important; } .cp-split { grid-template-columns: 1fr !important; gap: 26px !important; } } @media (max-width: 420px) { .cp-grid-4 { gap: 12px 14px; } } `; // virtual:core/brand.ts var T = { ink: "#070D12", ink2: "#0B141B", ink3: "#101E27", slate: "#2F4655", slateSoft: "rgba(47,70,85,0.55)", steel: "#5D8098", line: "rgba(255,255,255,0.10)", lineSoft: "rgba(255,255,255,0.06)", glass: "rgba(255,255,255,0.035)", glassHi: "rgba(255,255,255,0.07)", cream: "#EFE6A8", creamDim: "rgba(239,230,168,0.16)", white: "#FFFFFF", text: "rgba(255,255,255,0.94)", text2: "rgba(255,255,255,0.60)", text3: "rgba(255,255,255,0.36)", // Superficie clara, para las secciones que respiran paper: "#F4F5F3", paperInk: "#0E1A22", paperInk2: "rgba(14,26,34,0.62)", paperLine: "rgba(14,26,34,0.10)" }; var FONT_DISPLAY = "'Space Grotesk', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"; var FONT_BODY = "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, sans-serif"; var W = "https://upload.wikimedia.org/wikipedia/commons/thumb/"; var IMG = { // La portada pide la mayor que sirve Wikimedia de este fichero: por encima // de 1920 devuelve 400, y a 1280 se veia empastada en una pantalla ancha. heroRefineria: W + "7/7d/Blue_hour_fog_over_Preemraff_oil_refinery_by_Brofjorden.jpg/1920px-Blue_hour_fog_over_Preemraff_oil_refinery_by_Brofjorden.jpg", refineriaNoche: W + "1/10/Night_at_Valero_Refinery_in_Chalmette_Louisiana_01.jpg/1280px-Night_at_Valero_Refinery_in_Chalmette_Louisiana_01.jpg", tuberiaObra: W + "2/25/Constructing_natural_gas_pipe%2C_Finland.jpg/1280px-Constructing_natural_gas_pipe%2C_Finland.jpg", tuberiaInvierno: W + "f/fc/Constructing_natural_gas_line_in_winter%2C_Finland.jpg/1920px-Constructing_natural_gas_line_in_winter%2C_Finland.jpg", ultrasonidos: W + "9/95/Ultrasonic_pipeline_test.jpg/1280px-Ultrasonic_pipeline_test.jpg", ultrasonidosPantalla: W + "3/30/Ultrasonic_Testing_Machine_showing_readings.jpg/1280px-Ultrasonic_Testing_Machine_showing_readings.jpg", ultrasonidosCampo: W + "1/12/SBB_NEAT_-_Ultrasonic_Testing_%2825479008920%29.jpg/1280px-SBB_NEAT_-_Ultrasonic_Testing_%2825479008920%29.jpg", soldadura: W + "e/e3/Welding_a_water_supply_pipe.jpg/1280px-Welding_a_water_supply_pipe.jpg", tanques: W + "9/92/Refinery_Tanks_5.jpg/1280px-Refinery_Tanks_5.jpg", tanques2: W + "8/8b/Storage_tanks_at_Kurnell_Refinery.jpg/1280px-Storage_tanks_at_Kurnell_Refinery.jpg", haz: W + "e/e1/Tube_bundle_of_a_shell_%26_tube_heat_exchanger_%28before_assembly%29_-_2.jpg/1280px-Tube_bundle_of_a_shell_%26_tube_heat_exchanger_%28before_assembly%29_-_2.jpg", haz2: W + "b/ba/Cologne_Germany_Bundle-extractor-01.jpg/1280px-Cologne_Germany_Bundle-extractor-01.jpg", plataforma: W + "4/48/00_3783_Oil_and_gas_platform_in_Norway.jpg/1280px-00_3783_Oil_and_gas_platform_in_Norway.jpg", valvulas: W + "e/ef/EGL_401_valve_station_near_Hermsdorf.jpg/1280px-EGL_401_valve_station_near_Hermsdorf.jpg", particulas: W + "e/e2/SSG._Zachery_Doering%2C_49th_Maintenance_Squadront%2C_performs_a_magnetic_particle_inspection_at_Holloman_AFB.jpg/1280px-SSG._Zachery_Doering%2C_49th_Maintenance_Squadront%2C_performs_a_magnetic_particle_inspection_at_Holloman_AFB.jpg", penetrantes: W + "d/d5/Amn_Hector_Chacon%2C_49th_Maintenance_Squadron%2C_performs_a_liquid_penetrant_inspection_at_Holloman_AFB.jpg/1280px-Amn_Hector_Chacon%2C_49th_Maintenance_Squadron%2C_performs_a_liquid_penetrant_inspection_at_Holloman_AFB.jpg", penetrantes2: W + "c/cd/KD-Check_Anwendungsbild.jpg/1280px-KD-Check_Anwendungsbild.jpg", molch: W + "0/03/M%C3%BCnster%2C_Albachten%2C_Molchschleuse_--_2015_--_5449.jpg/1280px-M%C3%BCnster%2C_Albachten%2C_Molchschleuse_--_2015_--_5449.jpg", gnl: W + "1/19/00919_NOR_Hammerfest_Melkoya_LNG_Terminal_day_V-P.jpg/1280px-00919_NOR_Hammerfest_Melkoya_LNG_Terminal_day_V-P.jpg", turbina: W + "0/01/Turbine_hall_and_power_network_in_Iru_Thermal_Power_Plant.jpg/1280px-Turbine_hall_and_power_network_in_Iru_Thermal_Power_Plant.jpg", inspectores: W + "e/eb/35th_MXS_Nondestructive_Inspection_Airmen_ensure_safety_and_mission_readiness_%289240945%29.jpg/1280px-35th_MXS_Nondestructive_Inspection_Airmen_ensure_safety_and_mission_readiness_%289240945%29.jpg", grieta: W + "3/3b/Cracked_crank_shaft.jpg/1280px-Cracked_crank_shaft.jpg" }; var TEL = "+34625306712"; var TEL_HUMANO = "+34 625 306 712"; var EMAIL = "joseluis.beneitez@calpipe.es"; var WHATSAPP_TEXTO = { es: "\xA1Hola Jos\xE9 Luis! Me gustar\xEDa saber m\xE1s sobre los servicios que ofrece Calpipe.", en: "Hi Jos\xE9 Luis! I would like to know more about the services Calpipe offers." }; function waUrl(lang) { const texto = WHATSAPP_TEXTO[lang] || WHATSAPP_TEXTO.es; return "https://wa.me/" + TEL.replace("+", "") + "?text=" + encodeURIComponent(texto); } var DIRECCION = "Calle Arturo Soria 320, 4C \xB7 28033 Madrid"; var DIRECCION_MAPA = "https://www.google.com/maps/search/?api=1&query=" + encodeURIComponent("Calle Arturo Soria 320, 28033 Madrid"); var LINKEDIN = "https://www.linkedin.com/company/calpipe-spain/"; // virtual:components/Nav.tsx var import_react2 = __toESM(require("react")); var import_lucide_react = require("lucide-react"); // virtual:components/Logo.tsx var import_react = __toESM(require("react")); // virtual:core/logo.ts var LOGO_HORIZONTAL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAB9CAYAAAB+mB1wAAAcYUlEQVR42u2deZRdRZ3HP/e+152FQAQCsgREo8geFB3GPQfZFBEX4rjjhqITPTqoiDoKCjjjOTqjg6OijkFFHTcUFMYBZBlRQQyLMA6yKCBEIULCltD97rvzR1XZlefrdPq9ukvd9/2cc093ln59b91avvWr35IsPXQ5fUjs1bV/3h84HHgmsDuwCJhHPUiAHBgDWvae1wGXAR8Errd/nyGEEEIIUQLtPn+XWpGSW1H1TmAZMCeSZ0qBrYGjgGcDLwMu9J5LCCGEEKJwMeLjLEDbA98CzgcOs+Iq84RXHsGzdazQOht4nL3nVK9cCCGEEGUKLHeMthT4ObDc/jnz/j1l6viQCKxzHWAB8HErsBK9ciGEEEKUJbBSK6T2By7CWHwmrahqRfx8ziJ3FMZ3LJMVSwghhBBlCKwUY93ZETgX2BZj+RlrwPM5R/028IJpjkWFEEIIIYILLBeFtxJYbMVVu4HPeqD9muu1CyGEEKJogZVh/K0Obai4cn5Xu9qviiQUQgghROECqw2cSHOdwN0zzUcWLCGEEEKUJLCeATyJKafwpuEE1SM9gksIIYQQojCBdRSjcXR2p5zchRBCCFGWwPobmm3ZcRasVbJgCSGEEKIsgbVbw4WHs1j9SD5YQgghhChLfCxs8PN17DNehrFgpajosxBCCCEovpxMu4EWrBzjU+aSqL5Hx4NCCCGEKFNgEdhilFB9NKJ/D28GrvRqLQohhBBCUFaxZwJYjdo1SfUwAfwSOBL4gsSVEEIIIYjMgpV7VqMvA98DVmOKRVfFQ8AtPdnqhRBCCCGiElgp8FbgczV7PlmuhBBCCBGdwMqsiLnciqt2jZKWdiWuhBBCCBGjwHLHgz9mKkKvo2YVQgghBHJyH5rVSuAphBBCCBFGYCU9hZSFEEIIIdARoRBCjBaJvdIed4d8BIrei+n7Q+L1A53ICAksIQJNsNSoMHnTnz+vQWTxdGIqrVGgjvpC8cmos2kEVcsL5BqVOSlXnwzbNhJYYlRp2YGb1WhiadmFPS/JPSC1v687Au3vrBMu8nlfYA9gESZn323AdcBdI5bixVnyqhoLqVfSLCvxd3aZCsjaHtgBmAusBe7E5FL0/2+Zoi+vqO9VPSdM1w55rGmfJLDEKAqrrGegzAXmbGK3NF7gLspNHusox5fRt9B0vXlgC0+EJAU+ZwY82NP+RQtL/7neBhwH7NPn/92PiYg+Dbim5MW1LmNhPjBWguUgBzbYPt/tOarrliCu5gJvBF5uxfZCr3/eBVwGfBaTgigpeJFPvITYfhT+lt54LWpMumdzY7JbwWavX5/022GBZ1FM+rTdeEHzVu71x3vsfc1qTpDAEqMorgAOwpRSeiqwixUY001+7YIFVg7ci6mEcEqPL0hRz78UeBHwTGA34FElmeIngbuB64H/Bs61z05BC5lbtLcEvg0cysZ5/HJv4d0KWA680C6+ZzVUZCWexWou8Dzg+cD+wI7278rgAeB24ArgB1bM5AVaD9273Nu+26V9xmLLzgevstcngeML7Aepl7Px0bbvHQLsBWxXUuk5N//cAlwKfB+4sWRLbuKNya2AFwCHAfvZdhnfRPu1CxRYbjN6C3AqcPZs2iRZeujy9UMMKGdufy3wVfugyoMl6rqgdIGDgZOBp9f0Xr9qx1PoCd1NCrvbieLFNakbehfwr3Yhywp87q8Cr8bUKW1PE0HtjiTa9h6eDFzbMJHli9jXAO/HHJXWgZ8AH7JCK/TC7hbf7YBfAYut2E+9I9JeS6s7qjoZOKmAe3KfNw84EVMNZVEN3sMjwNftu/hDCSLLH19vB94N7FrT8XMM8JXNbZMUIUZHXJ0CXGDFlfPByDxTeJVX1y7+rwFeaf/cChjMkmGOQ34JHG0/u6rn73pHUzsBHwcust93A85L7tjlsbZNM8zxVzqDtdItvMc1bJ504moe8DW7UOzhHcl0S+4LXe935xir8mXAe73Ne0gxk1sRs9iOtTHPF7B3vmh7Vr73Yny0soBWErdAP9EKyn+04qrqMdnBuEu83s4VhxbwLvqJq22B84FPW3Hl98m8Bpe7l89hLP6bNU9JYAlGINebGxgf8BZ2Z1pueTvYKq/U83s4wfs+xETeAY4FvoExv3c84VXF87tndYveJPAca8HYOaDIcovhTn0sFTP1mdz+HA0J2XdtPw/4Ieb4q+MJ+XZPG5XZD3wxA/DPVnSHXNjdO9zXq5+7uU7f84DHBVwznfDfC3Mk9yQ7BvIajMm2Jyh2AH6EObYsQmS5cbbIbnwPt+3Q2yeTGlzOqj0P48eZS2AJ5HNFhjF1v8WzTLRqHtm4L7DnLBaCmZ7/UOAMb2fcrtnCP2bfzRMxvjhzvYmtqhDrpGFRhG6jsdJaijZ1VFp1/58E3gOsKGBhnxigX4X0h3S/exvgHIx/UceOgaRGY7Lttf1/Yo7Ls4D9xRcu3/VE5liNdYkThEfoiFBIXJkBcCDGh6JTsLN6KDJPZA0zRt2x6KOA/+iJVqojTmQdAHwk8GQee360UGPhdcDLbDuP19jS5hb3T9iNRjfwwl5lP3BC91PAEvsu2jXuNy7i8kw2HWk9qBXvBODZnrgiAivwblYYz7gBTkfcN8c3i9bhakn0EjoC5LSewREL2wXyOXkH5titE0HfcgvrOzB+U5nGQ5B5rouJkv2IFykXg6/YuN0c5TRD7Dqh+xRMwEUWgahwLgb7WIEewjfUiasdMP5t3UgyGiReKpOtyyz2HFsnb/dx7KvD5Y5wkhqa74nwOGQfYFkki0ovnSEngo7deb4hwFFj2QvrHDuZy8oezrn7+Zj0A91I2tTd95FMOT03pS+8OTLfPjcujw10dO7e4ysx6VO6kQhoP21DR3mw+r/UzHv2JXan/GgvWVlVPIzJIHyz/dqpOOFbEwTWIfb7TkR93U00dwTYIe4HPCYigeVP5ocAHx6RbOpl8PzIauz5ebqWYSIeY0+X4VKALIts8+Aczfez6+WtQ74L93OHE6d1ch0ml9+MIrk9ggkmn4Yxzz4XeHwNLRsPYpIwnoNJhnd7BSUbmsJS4jvWTDEZrlcNURPPTVj79EzsMU3mS+zu9oESMmk3GTfv7R3hMbl75/s1aNO3E1M5nmJ5F4l3nLmnFVjJkEfW48ATIuuTzvp7A3Df5qzJ7RESV/ti8iC9sE+jdWvkQLcA+Ft7nYBJL3CqXWha2tHPaoe0Q2QTmRNCF2CsmMO+750jfocLMZFWEljDWwPHmEpgGaMvU5PSZSzCHIHnkYrdUHOqG99EJrBa1vCBBNbUAnUcJiJlvpetOfUc3dOadWTnH7bQiqwjMRlkr1K2/FkxP8CAykscvM438KRAk86cQM+fD1lEeBDGMTlnxPCMM1WtIxlwTuoOKHKSIaJXE69WaBPEbohnyYeYl5IAkcRbBBL9c4eMZM1LNoxk9n5/gzmu3ixftCYLLCdETsOUIfBL+7QjCAX1K8zvBVwMvMRaNySyytmtpRWERL8JczyYBrBW5gHM4aHM6qOcJoHIrcEhcsfleqe1eRfdyFOgdCvIZ9jCuOscjfGX3iyXnXaDLVcdawk40X7fijCSzM8JswDjl3UwprSCfLKKE1du8K8CVpck5u4CvgRcWZN3m2IKvt4MrB/gZ7fG5LTaqkFh9qM4FlJMjqIrgXsG2NjNwUQv7q/mDPIu1gDXAPfPco5IMBb9PTCO6rGOSdcOD2FqSt5f8HM4S9l1wOnAn2YzP7cbfCz4UkwU0mQkCSY355nmAt/BZL29WyKrMLGzDhNCfF6FzrBV75LfjUmGOIyldFeMv8IzI0oPIKb6QWIF9nK7qA/D0ZijlbmyZA08Jn+ASfFw9xCfNRdT2eLECMeku99fAa8Abqr7/NxuaHj+9hjn8G6fYp6xW+V2AD5jBWRLcw9FOJmfZsVVu0QfrKQGARfuCP2HGJ/FZIg+lmBM6sdgom7myJJFjH5DK6y4GhuibyZ2Y3igFe6dEUsRFMKifi8mN9zaIeelDcD7MeWSDiy4kHMR/bEDvNGKq7Ln52y2YyBtaNTM+zDRGk3bNbvjwpcAz4pscMQiYsH4ubU8H7gyrk4NrJFusjrfK4Y9zPOkmJDuGz0BKeI5hrkPuMLLJTdoX3Bj63wljx3YkniVFVetId+Fq3l4QWSRma4dbgN+7fmoljk/54Mm32yKuMowoZ+vizR792yiDN+luaeQnWIHkxogG8HUAM66tDZgBGUC/FndK9qj8vUBhLGrmLFOx4MDv4t7A+WMcuvHQ5G2x71DRjdTRXbzJlkfDsM42HYbOpDdkefBmHp1mSasQpwaRbj2VO62eK0nGgv12liPaiHzvCdxLjGVj2kSz4msJMSgvjpbYoqGyuQuhBBCSGAVnr17zwhLQgyaAHJvmdyFEEIICSwKtuqkmMLNoyA6EuIuhSKEEEJIYEXCHIYvjxITW6kLCyGEENQy7J+GOYC3A1qwcsL6cyWBRa18r4QQQggJLGLMnpsUlM9DflNCCEYo/cdYn3JUQkhgMZqJ9gCuxdQf6gZo6yWYOlBCCDFKAqvFlEtDriap9F0kwEI1hQQWFVqubsCk5L+CsD5ir8SUupkjS5ag3kft7UClq9TH4+4LXa9KxjC50J4ngTW0SG0N2X6T9ushkQaDJUzVFs6HyHOYS2BRWTbvdcCRwO/6+DklAyZIA5gAvmzF1WdV6kbUlHWYjPadQJ83oSaNdrO5IdBnvQJ4a4MrbBTNRE/poUGZD5wMPNmr1RsTk4HmpaQMkSWBRd9iv+dacTUeeHFI7bUSOAmTUqIrZ3VBvaKK3wY8N+AktI+CMqL0mdoROHvIPtAGdgWWqlkZpkLJQcB37RjKhzhB2QvYrccNhlkWi65ybnoM8MFZGjqc4WQ98BvgR97f5RJY5XN1QcVpnZjaAPzWCiyZy0XdFtbD7FXU54s4+sEWwIsIW+pEfWCwd7HYXiHXoUEYq7gddgE+OuRnXQK8DFhTtMiSwOrPQwU2uuso69XMgvpacvMC6meKOPtC1elpVA8xXI3U2N/FsLVNc2AZxhp4UNH+WBJY1e9MhKCmxxJCtGpQ4PfBGsyZeU2c3KmB8aEOTu4M6c/2LOBVwJn28zook7sQQmgTxGhZblbX4D7GkX8mwB8bEAnqImPfTMFWOQksIYTob61Q9GM9cjZdW4O+MKa8kEwANzZAYLlgs6VMBZolElhCCEGpofGi2kX9YeAyqvf/GWU/MOentAq4zctvF7NwzzFBHIuLtFZLYAkhhI4IqaFzfYJJE3EXU8c6VfWBDSg/5BkN1A1jElhCCCFGbUHfgEmKmSidTeW5Ia8FzrKaIaM5m6eHizzylMASQghRJ3HVwVis3gnc1IAjqZjFVQuTUugYpo7M84b4WN6LOfKUwBJCCDES+dfGgFOAz9sFPlPTVCZyJ4HlGAtWqyFC1/Wzn2HKgrWKEljtQEpQ+bRm32bKNSSEiGW+Kuqzc8+h3Ymp44FPSlxV9i5coffVwGuBCykwV1QFbeiOoD9NJLUIt5E1bNaDZFvkSCuoddQQAS3l6ufI0X+Gz74IU2fuFxJXlb6LDRh/qw9hAgzqJK7yIeemFGMh/SJwQdE+Ze1AL+UZwCfs5yUVdrwkcP6VJPDzuI66GNjdU9JCUMOkgkJC+4HA85T7rMx+9m1WUJ0DXM6UdV/iamMmMVnUkwKCCSaA+4CbgUuB72Nq5bp30alhbjSGyER/BvCeIQtnlyKw3JnsEVZkXV6xVShUR+jYz5wsYJCAKVY5z3MiFIIaObV+nqljgSxAvpmPAUuGLDIryhVWKXA3cCDGyTl0JF9mF7tH+iyeEld/PSYvwDiatwtonwlMOaKsz9qe1axP/gZYMWB/7AK3AreXddPtQIpyHDgXeC9wPrC25EgDP3FYCIW/EFgU0DTq6ictAd6OqeTdDSCuFLositioXAZ8J+DnHm/7vvprfEJrdQEbTfpk1c4LKDLeJDYAaygnw3m3hiLXj/z7CcMbhrKYBFYObA18we5K1lY0UFJguyGOC117nII5fw59bwt61PiwPKx5RxTAAs/RtRNgblAQTLyM2z5QVC6qLkrBMBs/xiLFQQzvom3bYND+mJcpHtuBLUhdjBVpi8g781x7FaHCuwGPBbVwiaImWiesQggsWSWIPupKFvP6vIt8xNsgiyX5bDvwMV2rBh0grXE4bCKfKyGEEKL5tAsQE6Ej71ANMlSMVgghhCCuc90HkPk3VtaqCYQQQoh6Cqw7JbCi5fdqAiGEEKKeAusaOc5Fh/PjulbiWAghhKinwDqPZvhNMUIRXmCsV9fb96YwZyGEEKJmAuvHwB1aqKMSWAnwLUwW5JYsWEIwysEuQmhM1tjJ/XQJLGLJAZJiEozqnVFYZO0cLa6axIH56gdC1GpMzo3JLaZtF+zTgTcBT0D18epMB1MJ/CMYq6OKooYdwK7v74qpeTXu1aWkxONfUY/J/PFeQdxWiRO7fGKF6D8md8FUmljvlfWp01jZaOy69PsPA69hquaUJnpqWU19DHOk+3GvGKcIz/H26yNWdHVLulJZTKiLZb8L7A38nRXZWYl9IdcmV4i+G+BtgHfY7ydLnp9nPXbb3q79CuD1wNeYKvaoQV4vcXUN8HLtcikyOjMHDsFUrz8DU+x2QwltvQa4rafEjKh2Qs+BM4F9gUsw7hRF1uVL7OffhKnpmmoTJcRGG58cOBXYGfghcJ9dH6ueM93YvRHPuuZK5WRWbJ1lF5kveYVeW9pVV4aruTQGXA68GJNcVBNv8QvrwfYqi/XAd4G/B+6XyKrNkcQc4AP2KovbgA9bcSc3ACH+2sH9bfaqG78DPgh8HWilPf49beArdmG5yf456TGPj8qkn1P+ua2zHHY8U2MKfMa+k3skrko1R2c9BVaLvOYBrwZ+gPH9UuqU+swDHW/uK+N6DLAS47ahkwQh6OuPXOaY3NzrsRhD1dFAlva56RZwKfBUjCnubvt3rR4fkZl+UVVnoDGGg7rFNLXt7ITthcBBwArMMZXEFbO2ADLEcWHLezdFXzmmtuQy+767WliDbZImhxybbW/uK+Nym9l/Ax7tpWYRcW2cxabHZDdAgF5Ss8ttyk8HFqXTLEotYJ01de0LHAt8D7jVLvRsxi9KK7piHIgZJtDgduAi4CTgAIwv0MXeQi9xNTtxfF9k99y273gF5mgq08IahHWeSMkj8QXsAguBY+T0TujIeVE9D9mLBvrxdu3G6A3tGXx/UmvB+qK9xu0PbgNsMc2E5f5u3HMaLmuRmIs54txmwN/rxOU/Yfwfxkryf5jA+ODca7/6bZnKB2NggXULcQUDpJ6ZeT/gl/LBCbJJWg38GdguQl/A52GihrW5CsMcJZGtfEwmmICRu+yYzBv2PtzYfVF7hobIvBww7gjjDnvVlQ0BJuQ7gf+rcJFNvSNPLa6D81Pg3ZENXhdwsqcVWFoIhk/M+wBwHea4PZajV3cSsMSKgkcU+KAjQppj5ekAV9qNZDfw6VNdxu7u6SycPLOeo79Wja62/bow0II0bp9xvOTjTXcM2NGONYjv1cUYC2yMvmtb6zUG27AAfDMygeLmsS0wiRWFaJrI/WZDg3nc8yxIB2gY37JSxytUB6gqSZkI8/7amHQHn/acD2O6//V6jUFTnXwDk/4gtgS9ExjrlRBNGpOp3QD/rIFuEG4dn0j1rkXDB/EngV9j/Ok6kVhcEkxAybBHGnUR7DnVHxM+hMkA7Uf6UPOi7mD8xx6syPqmDZ+ONinYT2kFzasg4/x+75DAEk2fkNYDyzFOzu2aiyzn7LkOuDrApNMaYGIuwuE0LfnnpgteOQdTx3PMS4VQ9/57ufcuqzpebdq8kFfYFqnexUZj8mrgLV7/zhrkyH+xBJZoMs6h+UbgcEzUSpuNk4hSs+R5CfBtKwhbQ97j3QNYPhJMkEeIXXPqpcuYzRF4F3Mstibg7r1r3/2HgY95eXTq6O/oP+/KIdsgsZuMtWx+rkDnIvGA51xPQ/xifjeLlDe+q8jqId+D+7k/zVLouXGzpoHRjy6g58uYChap5wAfq8tM7j3bFySwBCNwVNgCrgKeDpzHxklEXVBB1ZerN3mvtbIMcySUeUJtrf3cyU18nosQbmMqOFwaOO/aZz2xlc2wmEza//s1uxi1Ak20udcX3g+8FvijJ7TwqijU4WrbdvvVED4quedzdoaX8qU7wztwx+tf9Nosb8BmC9sOE5sxJlxfbNm+eOuQ/nsuUu4m4Fz7/cQMY7LjJZ3+UkOPCl1y838HDgN+25NEtE5jcnMuN14+BVzb2mHJ3jRodzIOvB3YckC17wbBj4FfKHM6TToWaFlLytcxRbMfBeyACYFPa3C1gD9gSixcH6DvpRgn/6uBo4D5PVnCfWuG//tfjEnDkgaYzJ3/0//aSXNZj5jx78OvZPBfwBuZKhlVRF+4xi6cDwE7Aotq0g9cG3wDOC5AHjc3p10B7AI8xRPvm3oHK4ETIwwQmakv3gPcAByBKU+V9Ak0Sr30ROcBrw/UF9169BM7Fnb1fn/W5x7cWFkBnN3g9ciNyZttv7sH2B6Tc7NVo3G5udeZWH/PZOmhy5vkMLfAKuAdB/QlcTuGfwD+JQKfHTFYIk83Ue6CqVTwWCu43ECfU8G93Y6plrAm4ETqPmcPzNHYEd7mw2cN8B3go5hj1NATufu8FwInAE+bZmzeaHeyp5eQed23Co0BewN7ATvbjVpu+0Gr5IVmEhNZdWHP3BZiYc8xmeHfBSyd5v9eY3ffK3t+jgblYMrsmHifHROL+ojSa4HPWYsXAfui+5z59ve/zs5D9IkevQQ4BfifEdns91pq97TjclcrhvNZtO9cyvVbc6cAP8VERyKBJYHFCCe6y2s6YRUlbpygPAB4vJ3g11lRc5Xn41HURO5/7n7A/vZ+EsxR4K8xx2GTgRe0meaNVk3HeBHiJvWE6wH2Pexkf8ddmGSsq7y5Mx+BhXwRsA+w2Arq++yYuKHP+hJ6vcJueJ5ixf22GJ+339v3cNM0woOGV+FoRb7u/uX9qi6TYIQTkaY1S3RXRGSbnyV5U1UYWgUUTO8XcJDZhfy6Ge6jjMU99wILkhpFauUFLaj+O7jKXptjSWhqCpfEbiwumaEd8oKizFyVgYs9q0e/IJFsxNw56jgmBxq7EliCEY8yHKXn7Cco8xJLMmU95aCo6D6mC93vjlDi1X6LV7dAcVfXMZF446K3L2QlLMS9v9+/v+6I+81GPyYlsISQoKziPhQ8osWrydbCWH6/QInkhBBCCCEksIQQQgghJLCEEEIIIYQElhBCCCGEBJYQQgghhASWEEIIIYSQwBJCCCGEkMASQgghhJDAEkIIIYQQElhCCCGEEBJYQgghhBASWEIIIYQQQgJLCCGEEEICSwghhBBCAksIIYQQQgJLCCGEEEJIYAkhhBBCSGAVyiP2yu01CDmwQV1DCCGEEKMusHKgBUwCq4AEyAb8rAT4hf2+qy4ihBBCCB0RwqlWXLWBziwE2oT9mW8BV1vBJoElhBBCiJEWWJl9nlXAMVYcta14yvocGeb2/2QYq9U4cAlwrP0ciSshhBBCyIJlRVELOAt4FnCpFU8t+5Weo8DU/tvdwMnAYcD9Q/pwCSGEEGLEaTfwmTIrmn4OLAMOB14KPB3YBViAOTpcA1wPnA98G/iDJ7wkroQQQggxMP8PThT3KT11umcAAAAASUVORK5CYII="; // virtual:components/Logo.tsx function Logo({ alto = 30, blanco = false, style }) { return /* @__PURE__ */ import_react.default.createElement( "img", { src: LOGO_HORIZONTAL, alt: "Calpipe", style: { height: alto, width: "auto", display: "block", filter: blanco ? "brightness(0) invert(1)" : "none", ...style }, "data-gufi-src": "components/Logo.tsx:21" } ); } // virtual:core/copy.ts var NAV = { es: [ { id: "servicios", label: "Servicios" }, { id: "metodos", label: "M\xE9todos" }, { id: "sectores", label: "Sectores" }, { id: "mundo", label: "Presencia" }, { id: "contacto", label: "Contacto" } ], en: [ { id: "servicios", label: "Services" }, { id: "metodos", label: "Methods" }, { id: "sectores", label: "Sectors" }, { id: "mundo", label: "Worldwide" }, { id: "contacto", label: "Contact" } ] }; var HERO = { es: { kicker: "Inspecci\xF3n \xB7 Ensayos No Destructivos \xB7 Certificaci\xF3n", line1: "Lo que no se ve", line2: "es lo que falla.", sub: "Inspeccionamos tuber\xEDa, tanques, recipientes y soldadura antes de que el fallo tenga precio. Ensayos no destructivos convencionales y avanzados, inspecci\xF3n de terceros y auditor\xEDa de proveedores \u2014 en Espa\xF1a y all\xE1 donde est\xE9 el equipo.", cta1: "Pedir presupuesto", cta2: "Ver servicios", tagline: "Partnering for a Better Future", scroll: "Desliza" }, en: { kicker: "Inspection \xB7 Non-Destructive Testing \xB7 Certification", line1: "What you cannot see", line2: "is what fails.", sub: "We inspect piping, tanks, vessels and welds before failure has a price tag. Conventional and advanced non-destructive testing, third party inspection and vendor auditing \u2014 in Spain and wherever your equipment is built.", cta1: "Request a quote", cta2: "See services", tagline: "Partnering for a Better Future", scroll: "Scroll" } }; var MARQUEE = [ "VT", "PT", "MT", "RT", "UT", "PAUT", "TOFD", "ECT", "RFET", "IRIS", "MFL", "NFT", "LRUT", "API 510", "API 570", "API 653", "ASNT", "PCN", "CSWIP", "ISO 9712", "AWS CWI", "BGAS" ]; var MANIFIESTO = { es: { kicker: "Por qu\xE9 existimos", lines: [ "Una soldadura mal ejecutada", "no avisa. Una pared que ha", "perdido mil\xEDmetros, tampoco." ], body: "El prop\xF3sito de nuestro negocio es garantizar la seguridad operativa del equipo y de quien lo opera: cumplir la norma y entregar el resultado m\xE1s exacto posible. Eso es lo que hay detr\xE1s de cada informe que firmamos.", firma: "Misi\xF3n Calpipe" }, en: { kicker: "Why we exist", lines: [ "A bad weld does not", "warn you. Neither does a", "wall that lost millimetres." ], body: "The larger purpose of our business is ensuring operational safety to the equipment and the operators: meeting the standards and offering the most accurate results to our customers. That is what sits behind every report we sign.", firma: "Calpipe mission" } }; var STATS = { es: [ { n: 13, suf: "", label: "Pa\xEDses con cobertura" }, { n: 12, suf: "+", label: "M\xE9todos de ensayo" }, { n: 100, suf: "%", label: "Inspectores certificados" }, { n: 24, suf: "h", label: "Respuesta a una petici\xF3n" } ], en: [ { n: 13, suf: "", label: "Countries covered" }, { n: 12, suf: "+", label: "Testing methods" }, { n: 100, suf: "%", label: "Certified inspectors" }, { n: 24, suf: "h", label: "Response to a request" } ] }; var SERVICIOS = { es: [ { id: "tpi", t: "Inspecci\xF3n independiente (TPI)", d: "Inspecci\xF3n y certificaci\xF3n independiente (TIC) para Oil & Gas, petroqu\xEDmica, energ\xEDa, miner\xEDa, ingenier\xEDa, construcci\xF3n e infraestructura. Ayudamos al cliente a cumplir en calidad, seguridad, medio ambiente y responsabilidad social.", img: IMG.refineriaNoche, tags: ["TIC", "Certificaci\xF3n", "Auditor\xEDa"] }, { id: "vendor", t: "Inspecci\xF3n de proveedores", d: "Inspecci\xF3n de fabricante en cualquier parte del mundo: seguimiento de fabricaci\xF3n, testigo de pruebas, liberaci\xF3n de material y auditor\xEDa de taller antes de que el equipo salga de f\xE1brica.", img: IMG.tuberiaObra, tags: ["Auditor\xEDa de taller", "Seguimiento", "Testigo"] }, { id: "ndt", t: "END convencionales", d: "Visual, l\xEDquidos penetrantes, part\xEDculas magn\xE9ticas, radiograf\xEDa y ultrasonidos. La base de todo: el ensayo correcto, hecho por quien est\xE1 certificado para hacerlo.", img: IMG.penetrantes, tags: ["VT", "PT", "MT", "RT", "UT"] }, { id: "paut", t: "Phased Array y TOFD", d: "Barrido electr\xF3nico de alta velocidad sin partes m\xF3viles, control por software del haz y excelente probabilidad de detecci\xF3n en defectos de media pared, incluso mal orientados o lejos del eje de soldadura.", img: IMG.ultrasonidosPantalla, tags: ["PAUT", "TOFD", "Omniscan MX"] }, { id: "tubos", t: "Inspecci\xF3n de tubos", d: "Haces tubulares completos de intercambiadores y calderas: corrientes inducidas, campo remoto, ultrasonido rotativo interno, flujo magn\xE9tico disperso y campo cercano. Con mapa de placa tubular y porcentaje de p\xE9rdida tubo a tubo.", img: IMG.haz, tags: ["ECT", "RFET", "IRIS", "MFL", "NFT"] }, { id: "lrut", t: "Ondas guiadas (LRUT)", d: "Ultrasonido de largo alcance: decenas de metros de tuber\xEDa desde un solo punto de ensayo. Enterrada, aislada, recubierta, en servicio o fuera de servicio \u2014 sin desmontar el aislamiento en toda la l\xEDnea.", img: IMG.valvulas, tags: ["LRUT", "Largo alcance", "En servicio"] }, { id: "tanques", t: "Inspecci\xF3n de tanques", d: "Fondo, envolvente y techo de tanques de almacenamiento seg\xFAn API 653: medici\xF3n de espesores, integridad de soldadura y evaluaci\xF3n de aptitud para el servicio.", img: IMG.tanques, tags: ["API 653", "Espesores", "Fondo"] }, { id: "assessment", t: "Evaluaci\xF3n t\xE9cnica", d: "Evaluaci\xF3n de obra mec\xE1nica y de obra civil: revisi\xF3n documental, verificaci\xF3n en campo y criterio t\xE9cnico independiente sobre lo que se ha construido de verdad.", img: IMG.turbina, tags: ["Mec\xE1nica", "Civil", "Documental"] } ], en: [ { id: "tpi", t: "Third Party Inspection", d: "Independent inspection and certification (TIC) for Oil & Gas, Petrochemical, Power, Mining, Engineering, Construction and Infrastructure. We help clients meet growing challenges in quality, health, safety, environmental and social responsibility.", img: IMG.refineriaNoche, tags: ["TIC", "Certification", "Audit"] }, { id: "vendor", t: "Worldwide vendor inspection", d: "Vendor inspection anywhere in the world: manufacturing surveillance, witness testing, material release and shop auditing before the equipment ever leaves the factory.", img: IMG.tuberiaObra, tags: ["Vendor audit", "Expediting", "Witness"] }, { id: "ndt", t: "Conventional NDT", d: "Visual, liquid penetrant, magnetic particle, radiography and ultrasonic inspection. The foundation of everything: the right test, run by someone certified to run it.", img: IMG.penetrantes, tags: ["VT", "PT", "MT", "RT", "UT"] }, { id: "paut", t: "Phased Array & TOFD", d: "High speed electronic scanning without moving parts, software control of beam characteristics and excellent PoD for mid-wall defects \u2014 even mis-oriented or away from the weld centreline.", img: IMG.ultrasonidosPantalla, tags: ["PAUT", "TOFD", "Omniscan MX"] }, { id: "tubos", t: "Tube inspection", d: "Full tube bundles of heat exchangers and boilers: eddy current, remote field, internal rotary ultrasound, magnetic flux leakage and near field testing. Delivered with a tubesheet map and wall loss tube by tube.", img: IMG.haz, tags: ["ECT", "RFET", "IRIS", "MFL", "NFT"] }, { id: "lrut", t: "Guided waves (LRUT)", d: "Long range ultrasonic testing: tens of metres of pipe from a single test point. Bare, buried, insulated or coated, on stream and off stream \u2014 without stripping the insulation along the whole line.", img: IMG.valvulas, tags: ["LRUT", "GWT", "On stream"] }, { id: "tanques", t: "Tank inspection", d: "Bottom, shell and roof of storage tanks to API 653: thickness measurement, weld integrity and fitness for service assessment.", img: IMG.tanques, tags: ["API 653", "Thickness", "Floor"] }, { id: "assessment", t: "Technical assessment", d: "Mechanical and civil works assessment: document review, field verification and independent technical judgement on what was actually built.", img: IMG.turbina, tags: ["Mechanical", "Civil", "Documents"] } ] }; var METODOS = { es: [ { id: "conv", t: "END convencionales", img: IMG.particulas, lead: "Los cinco de siempre, bien hechos.", items: [ ["VT", "Inspecci\xF3n visual \u2014 la primera y la que m\xE1s defectos encuentra cuando se hace en serio."], ["PT", "L\xEDquidos penetrantes \u2014 discontinuidades abiertas a la superficie en cualquier material no poroso."], ["MT", "Part\xEDculas magn\xE9ticas \u2014 grietas superficiales y sub-superficiales en material ferromagn\xE9tico."], ["RT", "Radiograf\xEDa \u2014 imagen del interior de la soldadura, con su pel\xEDcula y su interpretaci\xF3n."], ["UT", "Ultrasonidos \u2014 espesor remanente y defectos volum\xE9tricos, sin abrir nada."] ] }, { id: "paut", t: "Phased Array y TOFD", img: IMG.ultrasonidosPantalla, lead: "Ultrasonido con el haz gobernado por software.", items: [ ["Velocidad", "Barrido electr\xF3nico de alta velocidad, sin partes m\xF3viles."], ["Control", "Caracter\xEDsticas del haz controladas por software: \xE1ngulos, foco y apertura."], ["Geometr\xEDa", "Flexibilidad para geometr\xEDas complejas donde el palpador fijo no llega."], ["PoD", "Excelente probabilidad de detecci\xF3n en defectos de media pared."], ["Orientaci\xF3n", "Detecta aunque el defecto est\xE9 mal orientado o alejado del eje de la soldadura."], ["Equipo", "Omniscan MX (o equivalente) de Olympus y Tomoview para an\xE1lisis e informe."] ] }, { id: "tubos", t: "Inspecci\xF3n de tubos", img: IMG.haz2, lead: "El m\xE9todo lo elige el material del tubo, no el cat\xE1logo.", items: [ ["ECT", "Corrientes inducidas \u2014 la m\xE1s r\xE1pida (1 a 2 m/s), excelente detecci\xF3n y dimensionado de picadura peque\xF1a. Material no ferromagn\xE9tico."], ["RFT", "Campo remoto \u2014 velocidad media (0,1 a 0,6 m/s), buen dimensionado en defectos volum\xE9tricos. Ferromagn\xE9tico."], ["IRIS", "Ultrasonido rotativo interno \u2014 la mejor resoluci\xF3n, imagen C-scan y dimensionado real. Exige tubo limpio y lleno de agua."], ["NFT / MFL", "Campo cercano para defectos de di\xE1metro interior a alta velocidad; flujo disperso para defectos de di\xE1metro exterior."] ] }, { id: "lrut", t: "Ondas guiadas (LRUT)", img: IMG.molch, lead: "Decenas de metros de l\xEDnea desde un solo collar.", items: [ ["Tuber\xEDa", "Inspecci\xF3n y monitorizaci\xF3n de l\xEDneas completas, incluidos cruces de carretera y tramos enterrados."], ["Caldera", "Tubos de caldera y tuber\xEDa de proceso sin desmontar el aislamiento en toda su longitud."], ["Chapa", "Inspecci\xF3n y monitorizaci\xF3n de chapa."], ["Anclajes", "Barras de anclaje enterradas y cables de puentes colgantes."], ["Estado", "Desnuda, enterrada, aislada o recubierta, ferrosa y no ferrosa, en servicio y fuera de servicio."] ] } ], en: [ { id: "conv", t: "Conventional NDT", img: IMG.particulas, lead: "The classic five, done properly.", items: [ ["VT", "Visual inspection \u2014 the first one, and the one that finds most defects when taken seriously."], ["PT", "Liquid penetrant \u2014 surface breaking discontinuities on any non porous material."], ["MT", "Magnetic particle \u2014 surface and near surface cracks on ferromagnetic material."], ["RT", "Radiography \u2014 an image of the inside of the weld, with its film and its interpretation."], ["UT", "Ultrasonic \u2014 remaining wall thickness and volumetric defects, without opening anything."] ] }, { id: "paut", t: "Phased Array & TOFD", img: IMG.ultrasonidosPantalla, lead: "Ultrasound with the beam driven by software.", items: [ ["Speed", "High speed electronic scanning without moving parts."], ["Control", "Improved capability through software control of beam characteristics."], ["Geometry", "Greater flexibility for inspection of complex geometries."], ["PoD", "Excellent probability of detection for mid-wall defects."], ["Orientation", "Detection even if defects are mis-oriented or away from the weld centreline."], ["Kit", "Omniscan MX (or similar) from Olympus and Tomoview for analysis and reporting."] ] }, { id: "tubos", t: "Tube inspection", img: IMG.haz2, lead: "The tube material picks the method, not the brochure.", items: [ ["ECT", "Eddy current \u2014 fastest pulling speed (1 to 2 m/s), excellent detection and sizing of small pitting. Non ferromagnetic."], ["RFT", "Remote field \u2014 medium pulling speed (0.1 to 0.6 m/s), good sizing on volumetric defects. Ferromagnetic."], ["IRIS", "Internal rotary UT \u2014 best resolution, C-scan imagery and real defect sizing. Tubes must be clean and full of water."], ["NFT / MFL", "Near field for ID defects at high speed; magnetic flux leakage for OD defects."] ] }, { id: "lrut", t: "Guided waves (LRUT)", img: IMG.molch, lead: "Tens of metres of line from a single collar.", items: [ ["Pipeline", "Inspection and monitoring of full lines, including road crossings and buried sections."], ["Boiler", "Boiler tube and process piping without stripping insulation along the whole length."], ["Plate", "Plate inspection and monitoring."], ["Anchors", "Buried anchored rod inspection and suspension bridge cables."], ["Condition", "Bare, buried, insulated and coated, ferrous and non ferrous, on stream and off stream."] ] } ] }; var SECTORES = { es: [ { t: "Petr\xF3leo y gas", d: "L\xEDneas, estaciones y plantas de proceso, donde la corrosi\xF3n no avisa." }, { t: "Petroqu\xEDmica", d: "Reactores, columnas e intercambiadores, en parada y en marcha." }, { t: "Generaci\xF3n el\xE9ctrica", d: "Calderas, tuber\xEDa de vapor y turbinas, con la planta parada o en servicio." }, { t: "Miner\xEDa", d: "Estructura, tolvas y tuber\xEDa de pulpa sometidas a abrasi\xF3n constante." }, { t: "Ingenier\xEDa", d: "Verificaci\xF3n en f\xE1brica de lo que la ingenier\xEDa ha especificado." }, { t: "Construcci\xF3n", d: "Estructura met\xE1lica y soldadura de obra, con su acta y su norma." }, { t: "Infraestructura", d: "Puentes, dep\xF3sitos y conducciones enterradas o de dif\xEDcil acceso." }, { t: "Nuclear", d: "El sector con la norma m\xE1s exigente: procedimiento, cualificaci\xF3n y trazabilidad." } ], en: [ { t: "Oil & Gas", d: "Lines, stations and process plants, where corrosion gives no warning." }, { t: "Petrochemical", d: "Reactors, columns and heat exchangers, on shutdown and on stream." }, { t: "Power generation", d: "Boilers, steam piping and turbines, plant down or in service." }, { t: "Mining", d: "Structures, hoppers and slurry piping under constant abrasion." }, { t: "Engineering", d: "Shop verification of what engineering actually specified." }, { t: "Construction", d: "Structural steel and site welding, with its report and its code." }, { t: "Infrastructure", d: "Bridges, tanks and buried or hard to reach pipelines." }, { t: "Nuclear", d: "The strictest code there is: procedure, qualification and traceability." } ] }; var PAISES = [ { es: "Espa\xF1a", en: "Spain", lat: 40.42, lon: -3.7, base: true, socio: "" }, { es: "Portugal", en: "Portugal", lat: 38.72, lon: -9.14, socio: "" }, { es: "CIS", en: "CIS", lat: 55.75, lon: 37.62, socio: "" }, { es: "Arabia Saud\xED", en: "Saudi Arabia", lat: 24.71, lon: 46.68, socio: "ASTRON" }, { es: "EAU", en: "UAE", lat: 24.45, lon: 54.38, socio: "" }, { es: "Qatar", en: "Qatar", lat: 25.29, lon: 51.53, socio: "" }, { es: "Om\xE1n", en: "Oman", lat: 23.59, lon: 58.41, socio: "" }, { es: "Kuwait", en: "Kuwait", lat: 29.38, lon: 47.98, socio: "" }, { es: "Singapur", en: "Singapore", lat: 1.35, lon: 103.82, socio: "" }, { es: "India", en: "India", lat: 19.08, lon: 72.88, socio: "" }, { es: "Corea", en: "Korea", lat: 37.57, lon: 126.98, socio: "" }, { es: "China", en: "China", lat: 39.9, lon: 116.41, socio: "" }, { es: "Jap\xF3n", en: "Japan", lat: 35.68, lon: 139.65, socio: "" } ]; var MUNDO = { es: { kicker: "Presencia", t: "Donde se fabrica su equipo,\nall\xED va el inspector.", d: "Calpipe trabaja asociada a compa\xF1\xEDas internacionales de inspecci\xF3n y certificaci\xF3n \u2014 entre ellas ASTRON \u2014 para cubrir la inspecci\xF3n de proveedores en trece pa\xEDses. La mayor parte de los servicios se prestan en Espa\xF1a; la red hace el resto.", base: "Base en Espa\xF1a", socio: "Socio local", leyenda: "Pasa el cursor por cualquier punto" }, en: { kicker: "Worldwide", t: "Wherever your equipment\nis built, the inspector goes.", d: "Calpipe is associated with international third party inspection and certification companies \u2014 ASTRON among them \u2014 to cover vendor inspection across thirteen countries. Most services are delivered in Spain; the network covers the rest.", base: "Based in Spain", socio: "Local partner", leyenda: "Hover over any point" } }; var CONTACTO = { es: { kicker: "Hablemos", t: "Cu\xE9ntenos qu\xE9 hay que inspeccionar.", d: "Escr\xEDbanos y le contestamos con un alcance y un precio. Si prefiere hablar, el WhatsApp es el camino m\xE1s r\xE1pido.", wa: "Escribir por WhatsApp", waSub: "Respuesta el mismo d\xEDa", mail: "Enviar un correo", tel: "Llamar", form: { nombre: "Nombre y apellidos", empresa: "Empresa", email: "Email", telefono: "Tel\xE9fono", pais: "Pa\xEDs", servicio: "Servicio de inter\xE9s", servicioVacio: "Selecciona un servicio", mensaje: "Cu\xE9ntenos el alcance: qu\xE9 equipo, qu\xE9 material, d\xF3nde y para cu\xE1ndo.", enviar: "Enviar solicitud", enviando: "Enviando...", ok: "Recibido. Le contestamos hoy mismo.", okSub: "Su solicitud ya est\xE1 en nuestro sistema y Jos\xE9 Luis tiene el aviso en su correo.", otra: "Enviar otra solicitud", errNombre: "Necesitamos su nombre.", errEmail: "Ese email no parece v\xE1lido.", err: "No hemos podido enviarlo. Pruebe por WhatsApp o correo.", legal: "Sus datos se usan solo para responderle. No hay newsletter ni terceros." } }, en: { kicker: "Let's talk", t: "Tell us what needs inspecting.", d: "Write to us and you get a scope and a price back. If you would rather talk, WhatsApp is the fastest route.", wa: "Message on WhatsApp", waSub: "Same day reply", mail: "Send an email", tel: "Call", form: { nombre: "Full name", empresa: "Company", email: "Email", telefono: "Phone", pais: "Country", servicio: "Service of interest", servicioVacio: "Select a service", mensaje: "Tell us the scope: what equipment, what material, where and by when.", enviar: "Send request", enviando: "Sending...", ok: "Received. You will hear from us today.", okSub: "Your request is already in our system and Jos\xE9 Luis has the alert in his inbox.", otra: "Send another request", errNombre: "We need your name.", errEmail: "That email does not look valid.", err: "We could not send it. Try WhatsApp or email instead.", legal: "Your data is used only to reply to you. No newsletter, no third parties." } } }; var FOOTER = { es: { rights: "Todos los derechos reservados.", claim: "Inspecci\xF3n y ensayos no destructivos", hecho: "Hecho con Gufi" }, en: { rights: "All rights reserved.", claim: "Inspection and non-destructive testing", hecho: "Built with Gufi" } }; // virtual:components/Nav.tsx function Nav({ lang, setLang, irA }) { const [bajado, setBajado] = (0, import_react2.useState)(false); const [abierto, setAbierto] = (0, import_react2.useState)(false); (0, import_react2.useEffect)(() => { const h = () => setBajado(window.scrollY > 40); h(); window.addEventListener("scroll", h, { passive: true }); return () => window.removeEventListener("scroll", h); }, []); (0, import_react2.useEffect)(() => { if (typeof document === "undefined") return; const previo = document.body.style.overflow; document.body.style.overflow = abierto ? "hidden" : previo || ""; return () => { document.body.style.overflow = previo || ""; }; }, [abierto]); const links = NAV[lang]; const saltar = (id) => { setAbierto(false); irA(id); }; return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement( "nav", { style: { position: "fixed", top: 0, left: 0, right: 0, zIndex: 90, background: bajado ? "rgba(7,13,18,0.72)" : "transparent", backdropFilter: bajado ? "blur(22px) saturate(1.4)" : "none", WebkitBackdropFilter: bajado ? "blur(22px) saturate(1.4)" : "none", borderBottom: "1px solid " + (bajado ? T.lineSoft : "transparent"), transition: "background .5s ease, border-color .5s ease, backdrop-filter .5s ease", fontFamily: FONT_BODY }, "data-gufi-src": "components/Nav.tsx:43" }, /* @__PURE__ */ import_react2.default.createElement( "div", { style: { maxWidth: 1320, margin: "0 auto", height: bajado ? 64 : 82, transition: "height .5s cubic-bezier(.19,1,.22,1)", display: "flex", alignItems: "center", justifyContent: "space-between", padding: "0 22px", gap: 20 }, "data-gufi-src": "components/Nav.tsx:58" }, /* @__PURE__ */ import_react2.default.createElement( "button", { onClick: () => saltar("inicio"), "aria-label": "Calpipe", style: { background: "none", border: "none", cursor: "pointer", padding: 0, display: "flex" }, "data-gufi-src": "components/Nav.tsx:71" }, /* @__PURE__ */ import_react2.default.createElement(Logo, { alto: bajado ? 22 : 26, blanco: true, style: { transition: "height .5s cubic-bezier(.19,1,.22,1)" } }) ), /* @__PURE__ */ import_react2.default.createElement("div", { className: "cp-nav-links", "data-gufi-src": "components/Nav.tsx:79" }, links.map((l) => /* @__PURE__ */ import_react2.default.createElement( "button", { key: l.id, className: "cp-navlink", onClick: () => saltar(l.id), style: { background: "none", border: "none", cursor: "pointer", color: T.text2, fontSize: 13.5, fontWeight: 500, letterSpacing: "0.01em", padding: 0 }, onMouseEnter: (e) => { e.currentTarget.style.color = T.white; }, onMouseLeave: (e) => { e.currentTarget.style.color = T.text2; }, "data-gufi-src": "components/Nav.tsx:81" }, l.label ))), /* @__PURE__ */ import_react2.default.createElement("div", { className: "cp-nav-cta", "data-gufi-src": "components/Nav.tsx:103" }, /* @__PURE__ */ import_react2.default.createElement( "div", { className: "cp-hide-sm", style: { display: "flex", alignItems: "center", border: "1px solid " + T.line, borderRadius: 999, padding: 2, marginRight: 4 }, "data-gufi-src": "components/Nav.tsx:104" }, ["es", "en"].map((l) => /* @__PURE__ */ import_react2.default.createElement( "button", { key: l, onClick: () => setLang(l), className: "cp-tab", style: { background: lang === l ? T.cream : "transparent", color: lang === l ? T.ink : T.text3, border: "none", borderRadius: 999, padding: "4px 11px", fontSize: 11, fontWeight: 700, letterSpacing: "0.08em", cursor: "pointer" }, "data-gufi-src": "components/Nav.tsx:116" }, l.toUpperCase() )) ), /* @__PURE__ */ import_react2.default.createElement( "button", { className: "cp-btn cp-hide-sm", onClick: () => saltar("contacto"), style: { background: T.white, color: T.ink, border: "none", borderRadius: 999, padding: "10px 20px", fontSize: 13, fontWeight: 600, cursor: "pointer" }, "data-gufi-src": "components/Nav.tsx:137" }, lang === "es" ? "Contactar" : "Contact" ), /* @__PURE__ */ import_react2.default.createElement( "button", { onClick: () => setAbierto(true), "aria-label": "Menu", className: "cp-burger", style: { background: "none", border: "none", color: T.white, cursor: "pointer", padding: 6, alignItems: "center" }, "data-gufi-src": "components/Nav.tsx:154" }, /* @__PURE__ */ import_react2.default.createElement(import_lucide_react.Menu, { size: 22 }) )) ) ), abierto && /* @__PURE__ */ import_react2.default.createElement( "div", { style: { position: "fixed", inset: 0, zIndex: 95, background: "rgba(7,13,18,0.97)", backdropFilter: "blur(24px)", WebkitBackdropFilter: "blur(24px)", display: "flex", flexDirection: "column", padding: "22px", fontFamily: FONT_BODY }, "data-gufi-src": "components/Nav.tsx:174" }, /* @__PURE__ */ import_react2.default.createElement("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", height: 60 }, "data-gufi-src": "components/Nav.tsx:188" }, /* @__PURE__ */ import_react2.default.createElement(Logo, { alto: 24, blanco: true }), /* @__PURE__ */ import_react2.default.createElement( "button", { onClick: () => setAbierto(false), "aria-label": "Cerrar", style: { background: "none", border: "none", color: T.white, cursor: "pointer", padding: 6 }, "data-gufi-src": "components/Nav.tsx:190" }, /* @__PURE__ */ import_react2.default.createElement(import_lucide_react.X, { size: 24 }) )), /* @__PURE__ */ import_react2.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 4, marginTop: 34, flex: 1 }, "data-gufi-src": "components/Nav.tsx:199" }, links.map((l, i) => /* @__PURE__ */ import_react2.default.createElement( "button", { key: l.id, onClick: () => saltar(l.id), className: "cp-fade", style: { background: "none", border: "none", borderBottom: "1px solid " + T.lineSoft, color: T.white, textAlign: "left", fontSize: 30, fontWeight: 500, letterSpacing: "-0.02em", padding: "18px 0", cursor: "pointer", animationDelay: i * 60 + "ms" }, "data-gufi-src": "components/Nav.tsx:201" }, l.label ))), /* @__PURE__ */ import_react2.default.createElement("div", { style: { display: "flex", gap: 10, alignItems: "center", paddingBottom: 20 }, "data-gufi-src": "components/Nav.tsx:224" }, ["es", "en"].map((l) => /* @__PURE__ */ import_react2.default.createElement( "button", { key: l, onClick: () => setLang(l), style: { background: lang === l ? T.cream : "transparent", color: lang === l ? T.ink : T.text3, border: "1px solid " + (lang === l ? T.cream : T.line), borderRadius: 999, padding: "8px 16px", fontSize: 12, fontWeight: 700, letterSpacing: "0.08em", cursor: "pointer" }, "data-gufi-src": "components/Nav.tsx:226" }, l.toUpperCase() )), /* @__PURE__ */ import_react2.default.createElement( "button", { onClick: () => saltar("contacto"), style: { flex: 1, background: T.white, color: T.ink, border: "none", borderRadius: 999, padding: "13px 20px", fontSize: 14, fontWeight: 600, cursor: "pointer" }, "data-gufi-src": "components/Nav.tsx:244" }, lang === "es" ? "Contactar" : "Contact" )) )); } // virtual:components/Fab.tsx var import_react3 = __toESM(require("react")); function Fab({ lang }) { const [visible, setVisible] = (0, import_react3.useState)(false); (0, import_react3.useEffect)(() => { const h = () => setVisible(window.scrollY > 520); h(); window.addEventListener("scroll", h, { passive: true }); return () => window.removeEventListener("scroll", h); }, []); return /* @__PURE__ */ import_react3.default.createElement( "a", { href: waUrl(lang), target: "_blank", rel: "noopener noreferrer", className: "cp-fab", "aria-label": "WhatsApp", style: { position: "fixed", right: 18, bottom: "calc(18px + env(safe-area-inset-bottom, 0px))", zIndex: 80, background: "#25D366", color: "#0A2B14", textDecoration: "none", fontFamily: FONT_BODY, fontSize: 14, fontWeight: 700, boxShadow: "0 14px 40px rgba(37,211,102,0.32), 0 2px 10px rgba(0,0,0,0.3)", opacity: visible ? 1 : 0, transform: visible ? "none" : "translateY(22px) scale(0.9)", pointerEvents: visible ? "auto" : "none", transition: "opacity .5s cubic-bezier(.19,1,.22,1), transform .5s cubic-bezier(.19,1,.22,1)", border: "none" }, "data-gufi-src": "components/Fab.tsx:21" }, /* @__PURE__ */ import_react3.default.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", "data-gufi-src": "components/Fab.tsx:46" }, /* @__PURE__ */ import_react3.default.createElement("path", { d: "M17.47 14.38c-.3-.15-1.75-.86-2.02-.96-.27-.1-.47-.15-.67.15-.2.3-.77.96-.94 1.16-.17.2-.35.22-.64.07-.3-.15-1.25-.46-2.38-1.47-.88-.78-1.47-1.75-1.65-2.05-.17-.3-.02-.46.13-.6.13-.13.3-.35.45-.52.15-.17.2-.3.3-.5.1-.2.05-.37-.02-.52-.08-.15-.67-1.6-.92-2.2-.24-.58-.49-.5-.67-.51h-.57c-.2 0-.52.07-.79.37-.27.3-1.04 1.01-1.04 2.47s1.06 2.86 1.21 3.06c.15.2 2.1 3.2 5.08 4.49.71.3 1.26.49 1.69.63.71.22 1.36.19 1.87.12.57-.09 1.75-.72 2-1.41.25-.69.25-1.28.17-1.41-.07-.13-.27-.2-.57-.35z", "data-gufi-src": "components/Fab.tsx:47" }), /* @__PURE__ */ import_react3.default.createElement("path", { d: "M12.04 2C6.58 2 2.13 6.45 2.13 11.91c0 1.75.46 3.45 1.32 4.95L2 22l5.25-1.38a9.87 9.87 0 0 0 4.79 1.22h.01c5.46 0 9.91-4.45 9.91-9.91 0-2.65-1.03-5.14-2.9-7.01A9.82 9.82 0 0 0 12.04 2zm0 18.15h-.01a8.2 8.2 0 0 1-4.19-1.15l-.3-.18-3.12.82.83-3.04-.2-.31a8.17 8.17 0 0 1-1.25-4.38c0-4.54 3.7-8.24 8.25-8.24 2.2 0 4.27.86 5.83 2.42a8.19 8.19 0 0 1 2.41 5.83c0 4.54-3.7 8.23-8.25 8.23z", "data-gufi-src": "components/Fab.tsx:48" })), /* @__PURE__ */ import_react3.default.createElement("span", { className: "cp-fab-texto", "data-gufi-src": "components/Fab.tsx:50" }, "WhatsApp"), /* @__PURE__ */ import_react3.default.createElement( "span", { className: "cp-fab-punto", style: { position: "absolute", right: 14, top: 12, width: 9, height: 9, borderRadius: 999, background: T.cream, boxShadow: "0 0 0 2px #25D366" }, "data-gufi-src": "components/Fab.tsx:51" } ) ); } // virtual:sections/Hero.tsx var import_react4 = __toESM(require("react")); var import_lucide_react2 = require("lucide-react"); function Hero({ lang, irA }) { const c = HERO[lang]; const [y, setY] = (0, import_react4.useState)(0); (0, import_react4.useEffect)(() => { let ticking = false; const h = () => { if (ticking) return; ticking = true; requestAnimationFrame(() => { setY(window.scrollY); ticking = false; }); }; h(); window.addEventListener("scroll", h, { passive: true }); return () => window.removeEventListener("scroll", h); }, []); const p = Math.min(y, 900); return /* @__PURE__ */ import_react4.default.createElement( "section", { id: "inicio", style: { position: "relative", minHeight: "100vh", display: "flex", flexDirection: "column", justifyContent: "flex-end", overflow: "hidden", background: T.ink }, "data-gufi-src": "sections/Hero.tsx:30" }, /* @__PURE__ */ import_react4.default.createElement("div", { style: { position: "absolute", inset: 0, overflow: "hidden" }, "data-gufi-src": "sections/Hero.tsx:43" }, /* @__PURE__ */ import_react4.default.createElement( "div", { className: "cp-kenburns", style: { position: "absolute", inset: "-6%", backgroundImage: "url(" + IMG.heroRefineria + ")", backgroundSize: "cover", backgroundPosition: "center 55%", transform: "translate3d(0," + p * 0.28 + "px,0)", filter: "saturate(0.82) contrast(1.06)" }, "data-gufi-src": "sections/Hero.tsx:44" } ), /* @__PURE__ */ import_react4.default.createElement("div", { style: { position: "absolute", inset: 0, background: "linear-gradient(to top, " + T.ink + " 2%, rgba(7,13,18,0.72) 34%, rgba(7,13,18,0.30) 68%, rgba(7,13,18,0.62) 100%)" }, "data-gufi-src": "sections/Hero.tsx:59" }), /* @__PURE__ */ import_react4.default.createElement("div", { style: { position: "absolute", inset: 0, background: "linear-gradient(100deg, rgba(7,13,18,0.86) 0%, rgba(7,13,18,0.35) 46%, rgba(7,13,18,0.05) 78%)" }, "data-gufi-src": "sections/Hero.tsx:60" }), /* @__PURE__ */ import_react4.default.createElement("div", { style: { position: "absolute", inset: 0, background: "radial-gradient(120% 90% at 15% 90%, rgba(47,70,85,0.42) 0%, rgba(7,13,18,0) 62%)" }, "data-gufi-src": "sections/Hero.tsx:61" })), /* @__PURE__ */ import_react4.default.createElement( "div", { className: "cp-hero-pad cp-hero-top", style: { position: "relative", zIndex: 2, width: "100%", maxWidth: 1320, margin: "0 auto", paddingTop: 150, paddingBottom: 34, opacity: Math.max(0, 1 - p / 620), transform: "translate3d(0," + p * -0.06 + "px,0)" }, "data-gufi-src": "sections/Hero.tsx:65" }, /* @__PURE__ */ import_react4.default.createElement( "div", { className: "cp-fade", style: { display: "inline-flex", alignItems: "center", gap: 12, marginBottom: 26, animationDelay: "160ms" }, "data-gufi-src": "sections/Hero.tsx:79" }, /* @__PURE__ */ import_react4.default.createElement("span", { style: { width: 40, height: 1, background: T.cream, display: "block" }, "data-gufi-src": "sections/Hero.tsx:89" }), /* @__PURE__ */ import_react4.default.createElement( "span", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.22em", textTransform: "uppercase", color: T.cream }, "data-gufi-src": "sections/Hero.tsx:90" }, c.kicker ) ), /* @__PURE__ */ import_react4.default.createElement( "h1", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(42px, 8.2vw, 118px)", lineHeight: 0.95, letterSpacing: "-0.045em", fontWeight: 600, color: T.white, maxWidth: "15ch", marginBottom: 30 }, "data-gufi-src": "sections/Hero.tsx:104" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "cp-line", style: { display: "block", overflow: "hidden", paddingBottom: "0.06em" }, "data-gufi-src": "sections/Hero.tsx:116" }, /* @__PURE__ */ import_react4.default.createElement("span", { style: { animationDelay: "260ms" }, "data-gufi-src": "sections/Hero.tsx:117" }, c.line1)), /* @__PURE__ */ import_react4.default.createElement("span", { className: "cp-line", style: { display: "block", overflow: "hidden", paddingBottom: "0.06em" }, "data-gufi-src": "sections/Hero.tsx:119" }, /* @__PURE__ */ import_react4.default.createElement("span", { style: { animationDelay: "400ms", color: T.cream }, "data-gufi-src": "sections/Hero.tsx:120" }, c.line2)) ), /* @__PURE__ */ import_react4.default.createElement( "p", { className: "cp-fade", style: { fontFamily: FONT_BODY, fontSize: "clamp(15px, 1.35vw, 18px)", lineHeight: 1.62, color: T.text2, maxWidth: 620, marginBottom: 38, animationDelay: "600ms" }, "data-gufi-src": "sections/Hero.tsx:124" }, c.sub ), /* @__PURE__ */ import_react4.default.createElement( "div", { className: "cp-fade", style: { display: "flex", gap: 6, flexWrap: "wrap", alignItems: "center", animationDelay: "740ms" }, "data-gufi-src": "sections/Hero.tsx:139" }, /* @__PURE__ */ import_react4.default.createElement( "button", { className: "cp-btn", onClick: () => irA("contacto"), style: { background: T.white, color: T.ink, border: "none", borderRadius: 980, padding: "13px 26px", fontFamily: FONT_BODY, fontSize: 15, fontWeight: 500, letterSpacing: "-0.01em", cursor: "pointer" }, "data-gufi-src": "sections/Hero.tsx:143" }, c.cta1 ), /* @__PURE__ */ import_react4.default.createElement( "button", { className: "cp-enlace", onClick: () => irA("servicios"), style: { display: "inline-flex", alignItems: "center", gap: 5, background: "none", border: "none", color: "rgba(255,255,255,0.78)", padding: "13px 16px", fontFamily: FONT_BODY, fontSize: 15, fontWeight: 500, letterSpacing: "-0.01em", cursor: "pointer" }, "data-gufi-src": "sections/Hero.tsx:165" }, c.cta2, /* @__PURE__ */ import_react4.default.createElement(import_lucide_react2.ChevronRight, { size: 16, className: "cp-chev" }) ) ), /* @__PURE__ */ import_react4.default.createElement( "div", { className: "cp-fade", style: { display: "flex", alignItems: "center", gap: 12, marginTop: 46, animationDelay: "980ms" }, "data-gufi-src": "sections/Hero.tsx:189" }, /* @__PURE__ */ import_react4.default.createElement( "span", { style: { width: 1, height: 26, background: "rgba(255,255,255,0.14)", overflow: "hidden", display: "block", position: "relative" }, "data-gufi-src": "sections/Hero.tsx:193" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "cp-hilo", style: { position: "absolute", inset: 0, background: T.cream, display: "block" }, "data-gufi-src": "sections/Hero.tsx:203" }) ), /* @__PURE__ */ import_react4.default.createElement( "span", { style: { fontFamily: FONT_BODY, fontSize: 11, letterSpacing: "0.18em", textTransform: "uppercase", color: T.text3 }, "data-gufi-src": "sections/Hero.tsx:205" }, c.scroll ) ) ), /* @__PURE__ */ import_react4.default.createElement( "div", { className: "cp-marquee", style: { position: "relative", zIndex: 2, borderTop: "1px solid " + T.lineSoft, borderBottom: "1px solid " + T.lineSoft, background: "rgba(7,13,18,0.55)", backdropFilter: "blur(14px)", WebkitBackdropFilter: "blur(14px)", overflow: "hidden", maskImage: "linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent)", WebkitMaskImage: "linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent)" }, "data-gufi-src": "sections/Hero.tsx:220" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "cp-marquee-track", "data-gufi-src": "sections/Hero.tsx:235" }, [0, 1].map((copia) => /* @__PURE__ */ import_react4.default.createElement("div", { key: copia, style: { display: "flex", alignItems: "center" }, "aria-hidden": copia === 1, "data-gufi-src": "sections/Hero.tsx:237" }, MARQUEE.map((m, i) => /* @__PURE__ */ import_react4.default.createElement( "span", { key: copia + "-" + i, style: { display: "inline-flex", alignItems: "center", gap: 26, padding: "15px 0", fontFamily: FONT_DISPLAY, fontSize: 12.5, fontWeight: 500, letterSpacing: "0.16em", color: T.text3, whiteSpace: "nowrap" }, "data-gufi-src": "sections/Hero.tsx:239" }, /* @__PURE__ */ import_react4.default.createElement("span", { style: { paddingLeft: 26 }, "data-gufi-src": "sections/Hero.tsx:254" }, m), /* @__PURE__ */ import_react4.default.createElement("span", { style: { width: 3, height: 3, borderRadius: 999, background: T.creamDim }, "data-gufi-src": "sections/Hero.tsx:255" }) ))))) ) ); } // virtual:sections/Manifiesto.tsx var import_react6 = __toESM(require("react")); // virtual:components/Reveal.tsx var import_react5 = __toESM(require("react")); var DESDE = { up: "translate3d(0, 26px, 0)", left: "translate3d(-24px, 0, 0)", scale: "scale(1.06)" }; var CURVA = "cubic-bezier(.19,1,.22,1)"; function Reveal({ children, delay = 0, variante = "up", style, className, umbral = 0.12 }) { const ref = (0, import_react5.useRef)(null); const [dentro, setDentro] = (0, import_react5.useState)(false); (0, import_react5.useEffect)(() => { const el = ref.current; if (!el) return; const sinAnimacion = typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches; if (sinAnimacion || typeof IntersectionObserver === "undefined") { setDentro(true); return; } const io = new IntersectionObserver( (entradas) => { for (const e of entradas) { if (e.isIntersecting) { setDentro(true); io.disconnect(); return; } } }, { threshold: umbral, rootMargin: "0px 0px -6% 0px" } ); io.observe(el); return () => io.disconnect(); }, [umbral]); return /* @__PURE__ */ import_react5.default.createElement( "div", { ref, className, style: { opacity: dentro ? 1 : 0, transform: dentro ? "none" : DESDE[variante], transition: "opacity .9s " + CURVA + " " + delay + "ms, transform .9s " + CURVA + " " + delay + "ms", willChange: dentro ? "auto" : "opacity, transform", ...style }, "data-gufi-src": "components/Reveal.tsx:81" }, children ); } // virtual:sections/Manifiesto.tsx function Contador({ hasta, sufijo }) { const ref = (0, import_react6.useRef)(null); const [v, setV] = (0, import_react6.useState)(0); (0, import_react6.useEffect)(() => { const el = ref.current; if (!el) return; if (typeof IntersectionObserver === "undefined") { setV(hasta); return; } let raf = 0; const io = new IntersectionObserver( (entradas) => { if (!entradas.some((e) => e.isIntersecting)) return; io.disconnect(); const t0 = performance.now(); const dur = 1400; const paso = (t) => { const k = Math.min(1, (t - t0) / dur); const e = 1 - Math.pow(1 - k, 3); setV(Math.round(hasta * e)); if (k < 1) raf = requestAnimationFrame(paso); }; raf = requestAnimationFrame(paso); }, { threshold: 0.4 } ); io.observe(el); return () => { io.disconnect(); if (raf) cancelAnimationFrame(raf); }; }, [hasta]); return /* @__PURE__ */ import_react6.default.createElement( "div", { ref, style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(30px, 4.6vw, 62px)", fontWeight: 600, letterSpacing: "-0.045em", color: T.white, lineHeight: 1, fontVariantNumeric: "tabular-nums" }, "data-gufi-src": "sections/Manifiesto.tsx:44" }, v, /* @__PURE__ */ import_react6.default.createElement("span", { style: { color: T.cream }, "data-gufi-src": "sections/Manifiesto.tsx:57" }, sufijo) ); } function Manifiesto({ lang }) { const c = MANIFIESTO[lang]; const stats = STATS[lang]; return /* @__PURE__ */ import_react6.default.createElement( "section", { className: "cp-pad", style: { background: T.ink, position: "relative", overflow: "hidden" }, "data-gufi-src": "sections/Manifiesto.tsx:67" }, /* @__PURE__ */ import_react6.default.createElement( "div", { style: { position: "absolute", top: "-30%", right: "-10%", width: 780, height: 780, borderRadius: "50%", background: "radial-gradient(circle, rgba(47,70,85,0.5) 0%, rgba(7,13,18,0) 68%)", pointerEvents: "none" }, "data-gufi-src": "sections/Manifiesto.tsx:72" } ), /* @__PURE__ */ import_react6.default.createElement("div", { style: { maxWidth: 1320, margin: "0 auto", position: "relative" }, "data-gufi-src": "sections/Manifiesto.tsx:85" }, /* @__PURE__ */ import_react6.default.createElement(Reveal, null, /* @__PURE__ */ import_react6.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.22em", textTransform: "uppercase", color: T.cream, marginBottom: 40 }, "data-gufi-src": "sections/Manifiesto.tsx:87" }, c.kicker )), /* @__PURE__ */ import_react6.default.createElement( "h2", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(30px, 5.4vw, 74px)", lineHeight: 1.06, letterSpacing: "-0.04em", fontWeight: 500, color: T.white, marginBottom: 46 }, "data-gufi-src": "sections/Manifiesto.tsx:102" }, c.lines.map((l, i) => /* @__PURE__ */ import_react6.default.createElement(Reveal, { key: i, delay: i * 120 }, /* @__PURE__ */ import_react6.default.createElement("span", { style: { display: "block", color: i === c.lines.length - 1 ? T.text3 : T.white }, "data-gufi-src": "sections/Manifiesto.tsx:115" }, l))) ), /* @__PURE__ */ import_react6.default.createElement(Reveal, { delay: 200 }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "cp-split", style: { borderTop: "1px solid " + T.lineSoft, paddingTop: 34 }, "data-gufi-src": "sections/Manifiesto.tsx:121" }, /* @__PURE__ */ import_react6.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11, letterSpacing: "0.18em", textTransform: "uppercase", color: T.text3 }, "data-gufi-src": "sections/Manifiesto.tsx:122" }, c.firma ), /* @__PURE__ */ import_react6.default.createElement( "p", { style: { fontFamily: FONT_BODY, fontSize: "clamp(16px, 1.5vw, 20px)", lineHeight: 1.68, color: T.text2, maxWidth: 720 }, "data-gufi-src": "sections/Manifiesto.tsx:133" }, c.body ))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "cp-grid-4", style: { marginTop: "clamp(52px, 7vw, 96px)" }, "data-gufi-src": "sections/Manifiesto.tsx:147" }, stats.map((s, i) => /* @__PURE__ */ import_react6.default.createElement(Reveal, { key: i, delay: i * 90 }, /* @__PURE__ */ import_react6.default.createElement("div", { style: { borderTop: "1px solid " + T.line, paddingTop: 18 }, "data-gufi-src": "sections/Manifiesto.tsx:150" }, /* @__PURE__ */ import_react6.default.createElement(Contador, { hasta: s.n, sufijo: s.suf }), /* @__PURE__ */ import_react6.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 13, color: T.text3, marginTop: 12, lineHeight: 1.45 }, "data-gufi-src": "sections/Manifiesto.tsx:152" }, s.label )))))) ); } // virtual:sections/Servicios.tsx var import_react7 = __toESM(require("react")); var import_lucide_react3 = require("lucide-react"); function Servicios({ lang, irA, pedirPresupuesto }) { const items = SERVICIOS[lang]; const [abierto, setAbierto] = (0, import_react7.useState)(null); const ficha = abierto === null ? null : items[abierto]; (0, import_react7.useEffect)(() => { if (ficha === null) return; const h = (e) => { if (e.key === "Escape") setAbierto(null); }; window.addEventListener("keydown", h); const previo = document.body.style.overflow; document.body.style.overflow = "hidden"; return () => { window.removeEventListener("keydown", h); document.body.style.overflow = previo || ""; }; }, [ficha]); return /* @__PURE__ */ import_react7.default.createElement( "section", { id: "servicios", className: "cp-pad", style: { background: T.paper, color: T.paperInk, position: "relative" }, "data-gufi-src": "sections/Servicios.tsx:37" }, /* @__PURE__ */ import_react7.default.createElement("div", { style: { maxWidth: 1320, margin: "0 auto" }, "data-gufi-src": "sections/Servicios.tsx:42" }, /* @__PURE__ */ import_react7.default.createElement( "div", { className: "cp-split", style: { alignItems: "end", marginBottom: 56 }, "data-gufi-src": "sections/Servicios.tsx:43" }, /* @__PURE__ */ import_react7.default.createElement(Reveal, null, /* @__PURE__ */ import_react7.default.createElement("div", { "data-gufi-src": "sections/Servicios.tsx:48" }, /* @__PURE__ */ import_react7.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 700, letterSpacing: "0.22em", textTransform: "uppercase", color: T.slate, marginBottom: 18 }, "data-gufi-src": "sections/Servicios.tsx:49" }, lang === "es" ? "Servicios" : "Services" ), /* @__PURE__ */ import_react7.default.createElement( "h2", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(32px, 4.6vw, 62px)", lineHeight: 1.02, letterSpacing: "-0.045em", fontWeight: 600, color: T.paperInk, whiteSpace: "pre-line" }, "data-gufi-src": "sections/Servicios.tsx:62" }, lang === "es" ? "Ocho formas de mirar\ndentro del metal." : "Eight ways of looking\ninside the metal." ))), /* @__PURE__ */ import_react7.default.createElement(Reveal, { delay: 120 }, /* @__PURE__ */ import_react7.default.createElement( "p", { style: { fontFamily: FONT_BODY, fontSize: 16.5, lineHeight: 1.68, color: T.paperInk2, maxWidth: 520, paddingBottom: 6 }, "data-gufi-src": "sections/Servicios.tsx:78" }, lang === "es" ? "Del ensayo convencional a la onda guiada de largo alcance. Cada servicio con su norma, su inspector certificado y su informe." : "From conventional testing to long range guided waves. Every service with its code, its certified inspector and its report." )) ), /* @__PURE__ */ import_react7.default.createElement("div", { className: "cp-grid-serv", "data-gufi-src": "sections/Servicios.tsx:95" }, items.map((s, i) => /* @__PURE__ */ import_react7.default.createElement(Reveal, { key: s.id, delay: i % 4 * 80 }, /* @__PURE__ */ import_react7.default.createElement( "button", { className: "cp-card", onClick: () => setAbierto(i), style: { width: "100%", textAlign: "left", border: "1px solid rgba(14,26,34,0.10)", borderRadius: 20, overflow: "hidden", background: "#fff", cursor: "pointer", padding: 0, display: "block", boxShadow: "0 1px 2px rgba(14,26,34,0.04)" }, "data-gufi-src": "sections/Servicios.tsx:98" }, /* @__PURE__ */ import_react7.default.createElement("div", { className: "cp-serv-img", style: { position: "relative", aspectRatio: "4 / 3", overflow: "hidden", background: T.slate }, "data-gufi-src": "sections/Servicios.tsx:114" }, /* @__PURE__ */ import_react7.default.createElement( "img", { src: s.img, alt: "", loading: "lazy", className: "cp-card-img", style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }, "data-gufi-src": "sections/Servicios.tsx:115" } ), /* @__PURE__ */ import_react7.default.createElement( "div", { style: { position: "absolute", inset: 0, background: "linear-gradient(to top, rgba(11,20,27,0.78) 0%, rgba(11,20,27,0.10) 55%, rgba(11,20,27,0) 100%)" }, "data-gufi-src": "sections/Servicios.tsx:122" } ), /* @__PURE__ */ import_react7.default.createElement( "div", { style: { position: "absolute", left: 16, right: 16, bottom: 14, display: "flex", gap: 6, flexWrap: "wrap" }, "data-gufi-src": "sections/Servicios.tsx:129" }, s.tags.map((t) => /* @__PURE__ */ import_react7.default.createElement( "span", { key: t, style: { fontFamily: FONT_DISPLAY, fontSize: 10, fontWeight: 600, letterSpacing: "0.1em", color: T.cream, border: "1px solid rgba(239,230,168,0.34)", borderRadius: 999, padding: "3px 9px", background: "rgba(7,13,18,0.30)", backdropFilter: "blur(6px)", WebkitBackdropFilter: "blur(6px)" }, "data-gufi-src": "sections/Servicios.tsx:141" }, t )) )), /* @__PURE__ */ import_react7.default.createElement("div", { className: "cp-serv-cuerpo", style: { padding: "18px 18px 20px" }, "data-gufi-src": "sections/Servicios.tsx:163" }, /* @__PURE__ */ import_react7.default.createElement("div", { style: { display: "flex", alignItems: "start", justifyContent: "space-between", gap: 10 }, "data-gufi-src": "sections/Servicios.tsx:164" }, /* @__PURE__ */ import_react7.default.createElement( "h3", { style: { fontFamily: FONT_DISPLAY, fontSize: 18, fontWeight: 600, letterSpacing: "-0.02em", color: T.paperInk, lineHeight: 1.22 }, "data-gufi-src": "sections/Servicios.tsx:165" }, s.t ), /* @__PURE__ */ import_react7.default.createElement(import_lucide_react3.ArrowUpRight, { size: 17, className: "cp-arrow", style: { color: T.slate, flexShrink: 0, marginTop: 2 } })), /* @__PURE__ */ import_react7.default.createElement( "p", { style: { fontFamily: FONT_BODY, fontSize: 13.5, lineHeight: 1.58, color: T.paperInk2, marginTop: 9, display: "-webkit-box", WebkitLineClamp: 3, WebkitBoxOrient: "vertical", overflow: "hidden" }, "data-gufi-src": "sections/Servicios.tsx:179" }, s.d )) )))), /* @__PURE__ */ import_react7.default.createElement( "div", { className: "cp-solo-movil", style: { alignItems: "center", gap: 9, marginTop: 14, fontFamily: FONT_BODY, fontSize: 11.5, letterSpacing: "0.14em", textTransform: "uppercase", color: "rgba(14,26,34,0.38)" }, "data-gufi-src": "sections/Servicios.tsx:201" }, /* @__PURE__ */ import_react7.default.createElement("span", { style: { width: 26, height: 1, background: "rgba(14,26,34,0.22)", display: "block" }, "data-gufi-src": "sections/Servicios.tsx:214" }), lang === "es" ? "Desliza para ver los ocho" : "Swipe to see all eight" )), ficha && /* @__PURE__ */ import_react7.default.createElement( "div", { onClick: () => setAbierto(null), style: { position: "fixed", inset: 0, zIndex: 120, background: "rgba(7,13,18,0.80)", backdropFilter: "blur(14px)", WebkitBackdropFilter: "blur(14px)", display: "flex", alignItems: "center", justifyContent: "center", padding: 20 }, "data-gufi-src": "sections/Servicios.tsx:221" }, /* @__PURE__ */ import_react7.default.createElement( "div", { onClick: (e) => e.stopPropagation(), className: "cp-fade", style: { background: T.ink2, border: "1px solid " + T.line, borderRadius: 22, maxWidth: 880, width: "100%", maxHeight: "88vh", overflowY: "auto", position: "relative" }, "data-gufi-src": "sections/Servicios.tsx:236" }, /* @__PURE__ */ import_react7.default.createElement( "button", { onClick: () => setAbierto(null), "aria-label": "Cerrar", style: { position: "absolute", top: 14, right: 14, zIndex: 2, width: 36, height: 36, borderRadius: 999, background: "rgba(7,13,18,0.6)", border: "1px solid " + T.line, color: T.white, cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center", backdropFilter: "blur(8px)", WebkitBackdropFilter: "blur(8px)" }, "data-gufi-src": "sections/Servicios.tsx:250" }, /* @__PURE__ */ import_react7.default.createElement(import_lucide_react3.X, { size: 17 }) ), /* @__PURE__ */ import_react7.default.createElement("div", { style: { position: "relative", height: 260, overflow: "hidden" }, "data-gufi-src": "sections/Servicios.tsx:275" }, /* @__PURE__ */ import_react7.default.createElement("img", { src: ficha.img, alt: "", style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }, "data-gufi-src": "sections/Servicios.tsx:276" }), /* @__PURE__ */ import_react7.default.createElement("div", { style: { position: "absolute", inset: 0, background: "linear-gradient(to top, " + T.ink2 + " 2%, rgba(11,20,27,0.2) 70%)" }, "data-gufi-src": "sections/Servicios.tsx:277" })), /* @__PURE__ */ import_react7.default.createElement("div", { style: { padding: "4px 30px 30px" }, "data-gufi-src": "sections/Servicios.tsx:280" }, /* @__PURE__ */ import_react7.default.createElement( "h3", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(24px, 3vw, 36px)", fontWeight: 600, letterSpacing: "-0.03em", color: T.white, marginBottom: 16 }, "data-gufi-src": "sections/Servicios.tsx:281" }, ficha.t ), /* @__PURE__ */ import_react7.default.createElement("p", { style: { fontFamily: FONT_BODY, fontSize: 16, lineHeight: 1.72, color: T.text2 }, "data-gufi-src": "sections/Servicios.tsx:293" }, ficha.d), /* @__PURE__ */ import_react7.default.createElement("div", { style: { display: "flex", gap: 7, flexWrap: "wrap", marginTop: 22 }, "data-gufi-src": "sections/Servicios.tsx:295" }, ficha.tags.map((t) => /* @__PURE__ */ import_react7.default.createElement( "span", { key: t, style: { fontFamily: FONT_DISPLAY, fontSize: 11, fontWeight: 600, letterSpacing: "0.1em", color: T.cream, border: "1px solid " + T.creamDim, borderRadius: 999, padding: "5px 12px" }, "data-gufi-src": "sections/Servicios.tsx:297" }, t ))), /* @__PURE__ */ import_react7.default.createElement( "button", { className: "cp-btn", onClick: () => { pedirPresupuesto(ficha.id); setAbierto(null); irA("contacto"); }, style: { marginTop: 28, display: "inline-flex", alignItems: "center", gap: 9, background: T.white, color: T.ink, border: "none", borderRadius: 980, padding: "13px 24px", fontFamily: FONT_BODY, fontSize: 14.5, fontWeight: 500, cursor: "pointer" }, "data-gufi-src": "sections/Servicios.tsx:315" }, lang === "es" ? "Pedir presupuesto de este servicio" : "Request a quote for this service", /* @__PURE__ */ import_react7.default.createElement(import_lucide_react3.ArrowRight, { size: 16 }) )) ) ) ); } // virtual:sections/Metodos.tsx var import_react8 = __toESM(require("react")); function Metodos({ lang }) { const bloques = METODOS[lang]; const [activo, setActivo] = (0, import_react8.useState)(0); const b = bloques[activo]; return /* @__PURE__ */ import_react8.default.createElement( "section", { id: "metodos", className: "cp-pad", style: { background: T.ink2, position: "relative", overflow: "hidden" }, "data-gufi-src": "sections/Metodos.tsx:12" }, /* @__PURE__ */ import_react8.default.createElement( "div", { style: { position: "absolute", inset: 0, backgroundImage: "linear-gradient(rgba(255,255,255,0.028) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.028) 1px, transparent 1px)", backgroundSize: "76px 76px", maskImage: "radial-gradient(90% 70% at 50% 0%, #000, transparent)", WebkitMaskImage: "radial-gradient(90% 70% at 50% 0%, #000, transparent)", pointerEvents: "none" }, "data-gufi-src": "sections/Metodos.tsx:17" } ), /* @__PURE__ */ import_react8.default.createElement("div", { style: { maxWidth: 1320, margin: "0 auto", position: "relative" }, "data-gufi-src": "sections/Metodos.tsx:30" }, /* @__PURE__ */ import_react8.default.createElement(Reveal, null, /* @__PURE__ */ import_react8.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.22em", textTransform: "uppercase", color: T.cream, marginBottom: 18 }, "data-gufi-src": "sections/Metodos.tsx:32" }, lang === "es" ? "Metodos" : "Methods" )), /* @__PURE__ */ import_react8.default.createElement(Reveal, { delay: 80 }, /* @__PURE__ */ import_react8.default.createElement( "h2", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(32px, 4.6vw, 62px)", lineHeight: 1.02, letterSpacing: "-0.045em", fontWeight: 600, color: T.white, maxWidth: "17ch", marginBottom: 44 }, "data-gufi-src": "sections/Metodos.tsx:47" }, lang === "es" ? "El metodo lo decide la pieza." : "The part decides the method." )), /* @__PURE__ */ import_react8.default.createElement(Reveal, { delay: 140 }, /* @__PURE__ */ import_react8.default.createElement( "div", { style: { display: "flex", gap: 8, overflowX: "auto", paddingBottom: 6, marginBottom: 34, scrollbarWidth: "none" }, "data-gufi-src": "sections/Metodos.tsx:65" }, bloques.map((x, i) => /* @__PURE__ */ import_react8.default.createElement( "button", { key: x.id, onClick: () => setActivo(i), className: "cp-tab", style: { flexShrink: 0, background: activo === i ? T.cream : "rgba(255,255,255,0.04)", color: activo === i ? T.ink : T.text2, border: "1px solid " + (activo === i ? T.cream : T.line), borderRadius: 999, padding: "11px 20px", fontFamily: FONT_BODY, fontSize: 13.5, fontWeight: activo === i ? 700 : 500, cursor: "pointer", whiteSpace: "nowrap" }, "data-gufi-src": "sections/Metodos.tsx:76" }, x.t )) )), /* @__PURE__ */ import_react8.default.createElement( "div", { key: b.id, className: "cp-metodo cp-fade", style: { border: "1px solid " + T.line, borderRadius: 24, overflow: "hidden", background: T.ink3 }, "data-gufi-src": "sections/Metodos.tsx:101" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "cp-metodo-foto", style: { position: "relative", minHeight: 320 }, "data-gufi-src": "sections/Metodos.tsx:111" }, /* @__PURE__ */ import_react8.default.createElement( "img", { src: b.img, alt: "", loading: "lazy", style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" }, "data-gufi-src": "sections/Metodos.tsx:112" } ), /* @__PURE__ */ import_react8.default.createElement( "div", { style: { position: "absolute", inset: 0, background: "linear-gradient(120deg, rgba(11,20,27,0.10) 0%, rgba(16,30,39,0.86) 88%)" }, "data-gufi-src": "sections/Metodos.tsx:118" } ), /* @__PURE__ */ import_react8.default.createElement("div", { className: "cp-metodo-foto-cont", style: { position: "relative", padding: 34, display: "flex", flexDirection: "column", justifyContent: "flex-end", height: "100%", minHeight: 320 }, "data-gufi-src": "sections/Metodos.tsx:125" }, /* @__PURE__ */ import_react8.default.createElement( "div", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(22px, 2.6vw, 34px)", fontWeight: 600, letterSpacing: "-0.03em", color: T.white, textShadow: "0 2px 24px rgba(0,0,0,0.5)" }, "data-gufi-src": "sections/Metodos.tsx:126" }, b.t ), /* @__PURE__ */ import_react8.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 15, color: T.cream, marginTop: 10, maxWidth: 340, lineHeight: 1.5 }, "data-gufi-src": "sections/Metodos.tsx:138" }, b.lead ))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "cp-metodo-lista", style: { padding: "30px 34px 34px" }, "data-gufi-src": "sections/Metodos.tsx:153" }, b.items.map(([k, v], i) => /* @__PURE__ */ import_react8.default.createElement( "div", { key: k, className: "cp-fade", style: { display: "flex", gap: 18, padding: "16px 0", borderBottom: i === b.items.length - 1 ? "none" : "1px solid " + T.lineSoft, animationDelay: 120 + i * 70 + "ms" }, "data-gufi-src": "sections/Metodos.tsx:155" }, /* @__PURE__ */ import_react8.default.createElement( "div", { style: { fontFamily: FONT_DISPLAY, fontSize: 12, fontWeight: 700, letterSpacing: "0.09em", color: T.cream, minWidth: 86, paddingTop: 3 }, "data-gufi-src": "sections/Metodos.tsx:166" }, k ), /* @__PURE__ */ import_react8.default.createElement("div", { style: { fontFamily: FONT_BODY, fontSize: 14.5, lineHeight: 1.62, color: T.text2 }, "data-gufi-src": "sections/Metodos.tsx:179" }, v) ))) )) ); } // virtual:sections/Sectores.tsx var import_react9 = __toESM(require("react")); var FOTOS = [ IMG.plataforma, IMG.refineriaNoche, IMG.turbina, IMG.grieta, IMG.ultrasonidosCampo, IMG.soldadura, IMG.tuberiaInvierno, IMG.gnl ]; function Sectores({ lang }) { const items = SECTORES[lang]; const [sobre, setSobre] = (0, import_react9.useState)(0); return /* @__PURE__ */ import_react9.default.createElement( "section", { id: "sectores", className: "cp-pad", style: { background: T.ink, position: "relative", overflow: "hidden" }, "data-gufi-src": "sections/Sectores.tsx:23" }, /* @__PURE__ */ import_react9.default.createElement("div", { style: { maxWidth: 1320, margin: "0 auto" }, "data-gufi-src": "sections/Sectores.tsx:28" }, /* @__PURE__ */ import_react9.default.createElement(Reveal, null, /* @__PURE__ */ import_react9.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.22em", textTransform: "uppercase", color: T.cream, marginBottom: 18 }, "data-gufi-src": "sections/Sectores.tsx:30" }, lang === "es" ? "Sectores" : "Sectors" )), /* @__PURE__ */ import_react9.default.createElement(Reveal, { delay: 80 }, /* @__PURE__ */ import_react9.default.createElement( "h2", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(30px, 4.6vw, 62px)", lineHeight: 1.02, letterSpacing: "-0.045em", fontWeight: 600, color: T.white, marginBottom: 40, maxWidth: "18ch" }, "data-gufi-src": "sections/Sectores.tsx:45" }, lang === "es" ? "Donde el fallo no es una opci\xF3n." : "Where failure is not an option." )), /* @__PURE__ */ import_react9.default.createElement("div", { className: "cp-split cp-sectores", style: { gridTemplateColumns: "1.15fr 0.85fr", alignItems: "start" }, "data-gufi-src": "sections/Sectores.tsx:61" }, /* @__PURE__ */ import_react9.default.createElement("div", { "data-gufi-src": "sections/Sectores.tsx:62" }, items.map((s, i) => { const activo = sobre === i; return /* @__PURE__ */ import_react9.default.createElement(Reveal, { key: s.t, delay: i * 45 }, /* @__PURE__ */ import_react9.default.createElement( "div", { className: "cp-sector cp-sector-fila", onMouseEnter: () => setSobre(i), onClick: () => setSobre(i), style: { display: "flex", alignItems: "baseline", gap: 16, padding: "16px 0", borderBottom: "1px solid " + T.lineSoft, cursor: "pointer" }, "data-gufi-src": "sections/Sectores.tsx:67" }, /* @__PURE__ */ import_react9.default.createElement( "span", { style: { fontFamily: FONT_DISPLAY, fontSize: 11, fontWeight: 600, letterSpacing: "0.1em", color: activo ? T.cream : "rgba(255,255,255,0.20)", transition: "color .4s ease", minWidth: 24 }, "data-gufi-src": "sections/Sectores.tsx:80" }, String(i + 1).padStart(2, "0") ), /* @__PURE__ */ import_react9.default.createElement("span", { style: { minWidth: 0 }, "data-gufi-src": "sections/Sectores.tsx:93" }, /* @__PURE__ */ import_react9.default.createElement( "span", { style: { display: "block", fontFamily: FONT_DISPLAY, fontSize: "clamp(20px, 3.1vw, 40px)", fontWeight: 500, letterSpacing: "-0.035em", lineHeight: 1.12, color: activo ? T.white : T.text3, transition: "color .4s ease" }, "data-gufi-src": "sections/Sectores.tsx:94" }, s.t ), /* @__PURE__ */ import_react9.default.createElement( "span", { style: { display: "block", fontFamily: FONT_BODY, fontSize: 13.5, lineHeight: 1.5, color: activo ? T.text2 : "rgba(255,255,255,0.28)", marginTop: 5, transition: "color .4s ease" }, "data-gufi-src": "sections/Sectores.tsx:108" }, s.d )) )); })), /* @__PURE__ */ import_react9.default.createElement(Reveal, { delay: 120, variante: "scale", className: "cp-sector-foto" }, /* @__PURE__ */ import_react9.default.createElement( "div", { style: { position: "sticky", top: 110, borderRadius: 20, overflow: "hidden", border: "1px solid " + T.line, aspectRatio: "4 / 5", background: T.ink3 }, "data-gufi-src": "sections/Sectores.tsx:129" }, FOTOS.map((f, i) => /* @__PURE__ */ import_react9.default.createElement( "img", { key: f, src: f, alt: "", loading: "lazy", style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", opacity: sobre === i ? 1 : 0, transform: sobre === i ? "scale(1)" : "scale(1.06)", transition: "opacity .8s cubic-bezier(.19,1,.22,1), transform 1.2s cubic-bezier(.19,1,.22,1)" }, "data-gufi-src": "sections/Sectores.tsx:141" } )), /* @__PURE__ */ import_react9.default.createElement( "div", { style: { position: "absolute", inset: 0, background: "linear-gradient(to top, rgba(7,13,18,0.86) 0%, rgba(7,13,18,0.05) 62%)" }, "data-gufi-src": "sections/Sectores.tsx:158" } ), /* @__PURE__ */ import_react9.default.createElement("div", { style: { position: "absolute", left: 20, right: 20, bottom: 18 }, "data-gufi-src": "sections/Sectores.tsx:165" }, /* @__PURE__ */ import_react9.default.createElement( "div", { style: { fontFamily: FONT_DISPLAY, fontSize: 19, fontWeight: 600, letterSpacing: "-0.02em", color: T.white }, "data-gufi-src": "sections/Sectores.tsx:166" }, items[sobre].t ), /* @__PURE__ */ import_react9.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 13, lineHeight: 1.5, color: T.text2, marginTop: 4 }, "data-gufi-src": "sections/Sectores.tsx:177" }, items[sobre].d )) )))) ); } // virtual:sections/Mundo.tsx var import_react10 = __toESM(require("react")); // virtual:core/mapa.ts var COLS = 170; var FILAS = 67; var LAT_N = 84; var LAT_S = -58; var MASCARA = "AAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAH/H///AAAAAAAAAAAAAAAAAAAAAACeH///gAAwAAAAAAAAAAAAAAAAAAAAA///4AAAAAAAAAYAAAAAAAAAAAAAAA//+AAAAAAAAP/wABQAAAAAA3IpaAH//AAAAAAgL////B8AAAH4AA/CG8Af/gAAA4AAH///////AIH///6xZDgP/AAAD/4H//////////x//////A6D+AAAB/4///////////AH/////AHAfAEAA8////////////gH/////gAADgAAA+f/////////+/gA8A///wDwAAAAAPi/////////7EAAAAD//+AfwAAADAY/////////gHAAAAAf//8H8AAAAQQf////////gBwAAAAD///z/wAAA2P//////////AQAAAAAf////4AAAB///////////oAAAAAAB////ggAAAP//////////4AAAAAAAf///8AAAAD//////////8AAAAAAAH///+gAAAA/v4ef/////+AAAAAAAD////AAAAB8M8Dz/////+CAAAAAAA////AAAAAeAt/8//////AAAAAAAAH///gAAAAHgBP/P////4gQAAAAAAA///4AAAAAnwAv//////EYAAAAAAAH//8AAAAAP8AD//////wYAAAAAAAA//+AAAAAH/xB//////+AAAAAAAAAD/5AAAAAD//////////gAAAAAAAABfgIAAAAB///78/////wAAAAAAAAAD4AAAAAA///+/h////4AAAAAAAAAAeAAAAAAP///3/B///8AAAAAAAAAAHgCAAAAH///8/4P+/8AAAAAAAAAAB8wEAAAB////v8B+H4AAAAAAAAAAAH4AAAAAf///5+APA+AgAAAAAAAAAAHgAAAAH////eADgHwAAAAAAAAAAAAcAAAAB////8AA4B+AAAAAAAAAAAACDgAAAP////YAGADAAAAAAAAAAAAAB/gAAB////+ABAAACAAAAAAAAAAAA/8AAAP////AAEAgBgAAAAAAAAAAAH/wAABA///wAAAkGAAAAAAAAAAAAD//AAAAD//4AAAHDgAAAAAAAAAAAB//wAAAA//4AAAAx4AAAAAAAAAAAAf//AAAAP/8AAAAEdBAAAAAAAAAAAH//+AAAD//AAAABgAHgAAAAAAAAAB///wAAAf/gAAAAAAA8AAAAAAAAAAP//+AAAH/8AAAAAQAOgAAAAAAAAAD///AAAB//AAAAAAAAAAAAAAAAAAAf//gAAAf/wAAAAAAGAAAAAAAAAAAH//4AAAH/8IAAAAADiAAAAAAAAAAAf/8AAAB//MAAAAAH8wAAAAAAAAAAD//AAAAf/DAAAAAD/8AAAAAAAAAAA//wAAAH/gwAAAAD//gAAAAAAAAAAP/wAAAA/8MAAAAB//8AAAAAAAAAAD/wAAAAP+CAAAAAf//gAAAAAAAAAB/8AAAAD/AAAAAAH//4AAAAAAAAAAf+AAAAAfwAAAAAB//+AAAAAAAAAAH/gAAAAD4AAAAAAP//gAAAAAAAAAB/wAAAAA4AAAAAADgfwAAAAAAAAAAfwAAAAAAAAAAAAAAB8AAAAAAAAAAP8AAAAAAAAAAAAAAAeAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAIAIAAAAAAAAHAAAAAAAAAAAAAAAAAAEAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; var TIERRA = (() => { const bytes = typeof atob === "function" ? atob(MASCARA) : ""; const out = []; for (let i = 0; i < COLS * FILAS; i++) { const b = bytes.charCodeAt(i >> 3); if (!b) continue; if (b >> 7 - (i & 7) & 1) out.push({ cx: i % COLS, cy: Math.floor(i / COLS) }); } return out; })(); function aPunto(lat, lon) { return { x: (lon + 180) / 360 * 100, y: (LAT_N - lat) / (LAT_N - LAT_S) * 100 }; } // virtual:sections/Mundo.tsx function Mundo({ lang }) { const c = MUNDO[lang]; const [sobre, setSobre] = (0, import_react10.useState)(null); const puntos = (0, import_react10.useMemo)( () => PAISES.map((p, i) => { const q = aPunto(p.lat, p.lon); return { ...p, i, cx: q.x / 100 * COLS, cy: q.y / 100 * FILAS, px: q.x, py: q.y }; }), [] ); const casa = puntos[0]; const activo = sobre === null ? null : puntos[sobre]; return /* @__PURE__ */ import_react10.default.createElement( "section", { id: "mundo", className: "cp-pad", style: { background: T.ink2, position: "relative", overflow: "hidden" }, "data-gufi-src": "sections/Mundo.tsx:35" }, /* @__PURE__ */ import_react10.default.createElement("div", { style: { maxWidth: 1320, margin: "0 auto" }, "data-gufi-src": "sections/Mundo.tsx:40" }, /* @__PURE__ */ import_react10.default.createElement(Reveal, null, /* @__PURE__ */ import_react10.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.22em", textTransform: "uppercase", color: T.cream, marginBottom: 18 }, "data-gufi-src": "sections/Mundo.tsx:42" }, c.kicker )), /* @__PURE__ */ import_react10.default.createElement(Reveal, { delay: 70 }, /* @__PURE__ */ import_react10.default.createElement( "h2", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(30px, 4.2vw, 56px)", lineHeight: 1.04, letterSpacing: "-0.045em", fontWeight: 600, color: T.white, whiteSpace: "pre-line", marginBottom: 20 }, "data-gufi-src": "sections/Mundo.tsx:57" }, c.t )), /* @__PURE__ */ import_react10.default.createElement(Reveal, { delay: 130 }, /* @__PURE__ */ import_react10.default.createElement( "p", { style: { fontFamily: FONT_BODY, fontSize: "clamp(15px, 1.4vw, 17.5px)", lineHeight: 1.7, color: T.text2, maxWidth: 640, marginBottom: 40 }, "data-gufi-src": "sections/Mundo.tsx:73" }, c.d )), /* @__PURE__ */ import_react10.default.createElement(Reveal, { delay: 160, variante: "scale" }, /* @__PURE__ */ import_react10.default.createElement("div", { style: { position: "relative" }, "data-gufi-src": "sections/Mundo.tsx:88" }, /* @__PURE__ */ import_react10.default.createElement( "svg", { viewBox: "0 0 " + COLS + " " + FILAS, style: { width: "100%", height: "auto", display: "block", overflow: "visible" }, "data-gufi-src": "sections/Mundo.tsx:89" }, /* @__PURE__ */ import_react10.default.createElement("g", { "data-gufi-src": "sections/Mundo.tsx:93" }, TIERRA.map((t, i) => /* @__PURE__ */ import_react10.default.createElement("circle", { key: i, cx: t.cx + 0.5, cy: t.cy + 0.5, r: 0.33, fill: "rgba(255,255,255,0.13)", "data-gufi-src": "sections/Mundo.tsx:95" }))), /* @__PURE__ */ import_react10.default.createElement("g", { fill: "none", strokeLinecap: "round", "data-gufi-src": "sections/Mundo.tsx:100" }, puntos.slice(1).map((p) => { const mx = (casa.cx + p.cx) / 2; const my = (casa.cy + p.cy) / 2 - Math.abs(p.cx - casa.cx) * 0.17; const act = sobre === p.i; return /* @__PURE__ */ import_react10.default.createElement( "path", { key: "r" + p.i, d: "M " + casa.cx + " " + casa.cy + " Q " + mx + " " + my + " " + p.cx + " " + p.cy, stroke: act ? "rgba(239,230,168,0.7)" : "rgba(239,230,168,0.12)", strokeWidth: act ? 0.42 : 0.2, style: { transition: "stroke .35s ease, stroke-width .35s ease" }, "data-gufi-src": "sections/Mundo.tsx:106" } ); })), /* @__PURE__ */ import_react10.default.createElement( "circle", { cx: casa.cx, cy: casa.cy, r: 1.6, fill: "none", stroke: T.cream, strokeWidth: 0.22, className: "cp-ping", style: { transformOrigin: casa.cx + "px " + casa.cy + "px" }, "data-gufi-src": "sections/Mundo.tsx:117" } ), puntos.map((p) => { const act = sobre === p.i; return /* @__PURE__ */ import_react10.default.createElement( "g", { key: p.en, onMouseEnter: () => setSobre(p.i), onMouseLeave: () => setSobre(null), onClick: () => setSobre(act ? null : p.i), style: { cursor: "pointer" }, "data-gufi-src": "sections/Mundo.tsx:131" }, /* @__PURE__ */ import_react10.default.createElement("circle", { cx: p.cx, cy: p.cy, r: 2.8, fill: "transparent", "data-gufi-src": "sections/Mundo.tsx:138" }), /* @__PURE__ */ import_react10.default.createElement( "circle", { cx: p.cx, cy: p.cy, r: p.base ? 1.3 : act ? 1.15 : 0.72, fill: p.base || act ? T.cream : "#7FA3B8", style: { transition: "r .3s ease, fill .3s ease" }, "data-gufi-src": "sections/Mundo.tsx:139" } ) ); }) ), activo && /* @__PURE__ */ import_react10.default.createElement( "div", { style: { position: "absolute", left: activo.px + "%", top: activo.py + "%", transform: "translate(" + (activo.px > 62 ? "-100%" : "0") + ", -50%) translateX(" + (activo.px > 62 ? "-14px" : "14px") + ")", pointerEvents: "none", background: "rgba(7,13,18,0.88)", border: "1px solid " + T.line, borderRadius: 12, padding: "9px 14px", backdropFilter: "blur(14px)", WebkitBackdropFilter: "blur(14px)", whiteSpace: "nowrap", boxShadow: "0 10px 34px rgba(0,0,0,0.42)" }, "data-gufi-src": "sections/Mundo.tsx:153" }, /* @__PURE__ */ import_react10.default.createElement( "div", { style: { fontFamily: FONT_DISPLAY, fontSize: 14.5, fontWeight: 600, letterSpacing: "-0.015em", color: activo.base ? T.cream : T.white }, "data-gufi-src": "sections/Mundo.tsx:172" }, lang === "es" ? activo.es : activo.en ), /* @__PURE__ */ import_react10.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11.5, color: T.text3, marginTop: 2, letterSpacing: "0.02em" }, "data-gufi-src": "sections/Mundo.tsx:183" }, activo.base ? c.base : activo.socio ? c.socio + ": " + activo.socio : c.socio ) ))), /* @__PURE__ */ import_react10.default.createElement(Reveal, { delay: 220 }, /* @__PURE__ */ import_react10.default.createElement( "div", { style: { display: "flex", alignItems: "center", gap: 22, flexWrap: "wrap", marginTop: 26, fontFamily: FONT_BODY, fontSize: 12, color: T.text3 }, "data-gufi-src": "sections/Mundo.tsx:200" }, /* @__PURE__ */ import_react10.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: 8 }, "data-gufi-src": "sections/Mundo.tsx:212" }, /* @__PURE__ */ import_react10.default.createElement("span", { style: { width: 8, height: 8, borderRadius: 999, background: T.cream, display: "block" }, "data-gufi-src": "sections/Mundo.tsx:213" }), c.base), /* @__PURE__ */ import_react10.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: 8 }, "data-gufi-src": "sections/Mundo.tsx:216" }, /* @__PURE__ */ import_react10.default.createElement("span", { style: { width: 6, height: 6, borderRadius: 999, background: "#7FA3B8", display: "block" }, "data-gufi-src": "sections/Mundo.tsx:217" }), c.socio), /* @__PURE__ */ import_react10.default.createElement("span", { style: { opacity: 0.7 }, "data-gufi-src": "sections/Mundo.tsx:220" }, c.leyenda) ))) ); } // virtual:sections/Claim.tsx var import_react11 = __toESM(require("react")); function Claim({ lang }) { return /* @__PURE__ */ import_react11.default.createElement("section", { style: { position: "relative", height: "clamp(220px, 42vh, 420px)", overflow: "hidden", background: T.ink }, "data-gufi-src": "sections/Claim.tsx:18" }, /* @__PURE__ */ import_react11.default.createElement( "img", { src: IMG.tuberiaInvierno, alt: "", loading: "lazy", style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }, "data-gufi-src": "sections/Claim.tsx:19" } ), /* @__PURE__ */ import_react11.default.createElement( "div", { style: { position: "absolute", inset: 0, background: "linear-gradient(105deg, rgba(7,13,18,0.88) 6%, rgba(7,13,18,0.34) 62%, rgba(7,13,18,0.58) 100%)" }, "data-gufi-src": "sections/Claim.tsx:25" } ), /* @__PURE__ */ import_react11.default.createElement("div", { className: "cp-hero-pad", style: { position: "absolute", inset: 0, display: "flex", alignItems: "center" }, "data-gufi-src": "sections/Claim.tsx:32" }, /* @__PURE__ */ import_react11.default.createElement("div", { style: { maxWidth: 1320, margin: "0 auto", width: "100%" }, "data-gufi-src": "sections/Claim.tsx:33" }, /* @__PURE__ */ import_react11.default.createElement(Reveal, null, /* @__PURE__ */ import_react11.default.createElement(Logo, { alto: 26, blanco: true, style: { marginBottom: 16, opacity: 0.9 } }), /* @__PURE__ */ import_react11.default.createElement( "div", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(21px, 3.4vw, 44px)", fontWeight: 500, letterSpacing: "-0.035em", color: T.white, fontStyle: "italic", maxWidth: "16ch", lineHeight: 1.12 }, "data-gufi-src": "sections/Claim.tsx:36" }, "Partnering for a Better Future" ), /* @__PURE__ */ import_react11.default.createElement( "div", { style: { fontFamily: FONT_DISPLAY, fontSize: 12, letterSpacing: "0.16em", textTransform: "uppercase", color: T.cream, marginTop: 14 }, "data-gufi-src": "sections/Claim.tsx:50" }, lang === "es" ? "Desde Espa\xF1a, para todo el mundo" : "From Spain, for the whole world" ))))); } // virtual:sections/Contacto.tsx var import_react12 = __toESM(require("react")); var import_lucide_react4 = require("lucide-react"); var VACIO = { nombre: "", empresa: "", email: "", telefono: "", pais: "", servicio: "", mensaje: "" }; var IconoWhatsApp = ({ tam = 20 }) => /* @__PURE__ */ import_react12.default.createElement("svg", { width: tam, height: tam, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", "data-gufi-src": "sections/Contacto.tsx:10" }, /* @__PURE__ */ import_react12.default.createElement("path", { d: "M12.04 2C6.58 2 2.13 6.45 2.13 11.91c0 1.75.46 3.45 1.32 4.95L2 22l5.25-1.38a9.87 9.87 0 0 0 4.79 1.22c5.46 0 9.91-4.45 9.91-9.91 0-2.65-1.03-5.14-2.9-7.01A9.82 9.82 0 0 0 12.04 2zm5.43 12.38c-.3-.15-1.75-.86-2.02-.96-.27-.1-.47-.15-.67.15-.2.3-.77.96-.94 1.16-.17.2-.35.22-.64.07-.3-.15-1.25-.46-2.38-1.47-.88-.78-1.47-1.75-1.65-2.05-.17-.3-.02-.46.13-.6.13-.13.3-.35.45-.52.15-.17.2-.3.3-.5.1-.2.05-.37-.02-.52-.08-.15-.67-1.6-.92-2.2-.24-.58-.49-.5-.67-.51h-.57c-.2 0-.52.07-.79.37-.27.3-1.04 1.01-1.04 2.47s1.06 2.86 1.21 3.06c.15.2 2.1 3.2 5.08 4.49.71.3 1.26.49 1.69.63.71.22 1.36.19 1.87.12.57-.09 1.75-.72 2-1.41.25-.69.25-1.28.17-1.41-.07-.13-.27-.2-.57-.35z", "data-gufi-src": "sections/Contacto.tsx:11" })); function useMovil() { const [movil, setMovil] = (0, import_react12.useState)(false); (0, import_react12.useEffect)(() => { if (typeof matchMedia !== "function") return; const mq = matchMedia("(max-width: 760px)"); const h = () => setMovil(mq.matches); h(); if (mq.addEventListener) mq.addEventListener("change", h); else mq.addListener(h); return () => { if (mq.removeEventListener) mq.removeEventListener("change", h); else mq.removeListener(h); }; }, []); return movil; } function Formulario({ lang, gufi, servicioPedido }) { const c = CONTACTO[lang]; const f = c.form; const servicios = SERVICIOS[lang]; const [form, setForm] = (0, import_react12.useState)({ ...VACIO, servicio: servicioPedido || "" }); const [trampa, setTrampa] = (0, import_react12.useState)(""); const [enviando, setEnviando] = (0, import_react12.useState)(false); const [enviado, setEnviado] = (0, import_react12.useState)(false); const [error, setError] = (0, import_react12.useState)(""); const set = (k, v) => setForm((p) => ({ ...p, [k]: v })); (0, import_react12.useEffect)(() => { if (servicioPedido) setForm((p) => ({ ...p, servicio: servicioPedido })); }, [servicioPedido]); const enviar = async (e) => { e.preventDefault(); if (enviando) return; setError(""); if (!form.nombre.trim()) { setError(f.errNombre); return; } if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(form.email.trim())) { setError(f.errEmail); return; } if (trampa) { setEnviado(true); return; } setEnviando(true); try { const r = await gufi.publicAutomation("web_solicitud_contacto").run({ nombre: form.nombre.trim(), empresa: form.empresa.trim(), email: form.email.trim(), telefono: form.telefono.trim(), pais: form.pais.trim(), servicio: form.servicio, mensaje: form.mensaje.trim(), origen: typeof window !== "undefined" ? window.location.hostname || "calpipe.es" : "calpipe.es" }); const err = r && (r.error || r.result && r.result.error); if (err) throw new Error(String(err)); setEnviado(true); setForm({ ...VACIO }); } catch (err) { setError(f.err); } finally { setEnviando(false); } }; const inputStyle = { width: "100%", background: "rgba(255,255,255,0.035)", border: "1px solid " + T.line, borderRadius: 12, padding: "13px 15px", fontFamily: FONT_BODY, fontSize: 15, color: T.white, outline: "none" }; const labelStyle = { display: "block", fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.11em", textTransform: "uppercase", color: T.text3, marginBottom: 7 }; if (enviado) { return /* @__PURE__ */ import_react12.default.createElement("div", { style: { textAlign: "center", padding: "36px 10px" }, "data-gufi-src": "sections/Contacto.tsx:127" }, /* @__PURE__ */ import_react12.default.createElement( "div", { style: { width: 62, height: 62, borderRadius: 999, background: "rgba(239,230,168,0.14)", border: "1px solid " + T.creamDim, display: "flex", alignItems: "center", justifyContent: "center", color: T.cream, margin: "0 auto 22px" }, "data-gufi-src": "sections/Contacto.tsx:128" }, /* @__PURE__ */ import_react12.default.createElement(import_lucide_react4.Check, { size: 28 }) ), /* @__PURE__ */ import_react12.default.createElement( "div", { style: { fontFamily: FONT_DISPLAY, fontSize: 24, fontWeight: 600, letterSpacing: "-0.025em", color: T.white, marginBottom: 10 }, "data-gufi-src": "sections/Contacto.tsx:144" }, f.ok ), /* @__PURE__ */ import_react12.default.createElement("p", { style: { fontFamily: FONT_BODY, fontSize: 14.5, lineHeight: 1.6, color: T.text2, maxWidth: 380, margin: "0 auto 26px" }, "data-gufi-src": "sections/Contacto.tsx:156" }, f.okSub), /* @__PURE__ */ import_react12.default.createElement( "button", { className: "cp-btn", onClick: () => setEnviado(false), style: { background: "rgba(255,255,255,0.06)", color: T.white, border: "1px solid " + T.line, borderRadius: 999, padding: "11px 22px", fontFamily: FONT_BODY, fontSize: 13.5, fontWeight: 600, cursor: "pointer" }, "data-gufi-src": "sections/Contacto.tsx:159" }, f.otra )); } return /* @__PURE__ */ import_react12.default.createElement("form", { onSubmit: enviar, noValidate: true, "data-gufi-src": "sections/Contacto.tsx:181" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "cp-grid-2", style: { gap: 14, marginBottom: 14 }, "data-gufi-src": "sections/Contacto.tsx:182" }, /* @__PURE__ */ import_react12.default.createElement("div", { "data-gufi-src": "sections/Contacto.tsx:183" }, /* @__PURE__ */ import_react12.default.createElement("label", { style: labelStyle, htmlFor: "cp-nombre", "data-gufi-src": "sections/Contacto.tsx:184" }, f.nombre), /* @__PURE__ */ import_react12.default.createElement( "input", { id: "cp-nombre", className: "cp-input", style: inputStyle, value: form.nombre, onChange: (e) => set("nombre", e.target.value), autoComplete: "name", maxLength: 120, "data-gufi-src": "sections/Contacto.tsx:185" } )), /* @__PURE__ */ import_react12.default.createElement("div", { "data-gufi-src": "sections/Contacto.tsx:188" }, /* @__PURE__ */ import_react12.default.createElement("label", { style: labelStyle, htmlFor: "cp-empresa", "data-gufi-src": "sections/Contacto.tsx:189" }, f.empresa), /* @__PURE__ */ import_react12.default.createElement( "input", { id: "cp-empresa", className: "cp-input", style: inputStyle, value: form.empresa, onChange: (e) => set("empresa", e.target.value), autoComplete: "organization", maxLength: 120, "data-gufi-src": "sections/Contacto.tsx:190" } ))), /* @__PURE__ */ import_react12.default.createElement("div", { className: "cp-grid-2", style: { gap: 14, marginBottom: 14 }, "data-gufi-src": "sections/Contacto.tsx:195" }, /* @__PURE__ */ import_react12.default.createElement("div", { "data-gufi-src": "sections/Contacto.tsx:196" }, /* @__PURE__ */ import_react12.default.createElement("label", { style: labelStyle, htmlFor: "cp-email", "data-gufi-src": "sections/Contacto.tsx:197" }, f.email), /* @__PURE__ */ import_react12.default.createElement( "input", { id: "cp-email", className: "cp-input", style: inputStyle, type: "email", value: form.email, onChange: (e) => set("email", e.target.value), autoComplete: "email", maxLength: 160, "data-gufi-src": "sections/Contacto.tsx:198" } )), /* @__PURE__ */ import_react12.default.createElement("div", { "data-gufi-src": "sections/Contacto.tsx:201" }, /* @__PURE__ */ import_react12.default.createElement("label", { style: labelStyle, htmlFor: "cp-tel", "data-gufi-src": "sections/Contacto.tsx:202" }, f.telefono), /* @__PURE__ */ import_react12.default.createElement( "input", { id: "cp-tel", className: "cp-input", style: inputStyle, type: "tel", value: form.telefono, onChange: (e) => set("telefono", e.target.value), autoComplete: "tel", maxLength: 40, "data-gufi-src": "sections/Contacto.tsx:203" } ))), /* @__PURE__ */ import_react12.default.createElement("div", { className: "cp-grid-2", style: { gap: 14, marginBottom: 14 }, "data-gufi-src": "sections/Contacto.tsx:208" }, /* @__PURE__ */ import_react12.default.createElement("div", { "data-gufi-src": "sections/Contacto.tsx:209" }, /* @__PURE__ */ import_react12.default.createElement("label", { style: labelStyle, htmlFor: "cp-pais", "data-gufi-src": "sections/Contacto.tsx:210" }, f.pais), /* @__PURE__ */ import_react12.default.createElement( "input", { id: "cp-pais", className: "cp-input", style: inputStyle, value: form.pais, onChange: (e) => set("pais", e.target.value), autoComplete: "country-name", maxLength: 60, "data-gufi-src": "sections/Contacto.tsx:211" } )), /* @__PURE__ */ import_react12.default.createElement("div", { "data-gufi-src": "sections/Contacto.tsx:214" }, /* @__PURE__ */ import_react12.default.createElement("label", { style: labelStyle, htmlFor: "cp-serv", "data-gufi-src": "sections/Contacto.tsx:215" }, f.servicio), /* @__PURE__ */ import_react12.default.createElement( "select", { id: "cp-serv", className: "cp-input", style: { ...inputStyle, color: form.servicio ? T.white : "rgba(255,255,255,0.35)" }, value: form.servicio, onChange: (e) => set("servicio", e.target.value), "data-gufi-src": "sections/Contacto.tsx:216" }, /* @__PURE__ */ import_react12.default.createElement("option", { value: "", "data-gufi-src": "sections/Contacto.tsx:219" }, f.servicioVacio), servicios.map((s) => /* @__PURE__ */ import_react12.default.createElement("option", { key: s.id, value: s.id, "data-gufi-src": "sections/Contacto.tsx:221" }, s.t)) ))), /* @__PURE__ */ import_react12.default.createElement("div", { style: { marginBottom: 16 }, "data-gufi-src": "sections/Contacto.tsx:227" }, /* @__PURE__ */ import_react12.default.createElement("label", { style: labelStyle, htmlFor: "cp-msg", "data-gufi-src": "sections/Contacto.tsx:228" }, lang === "es" ? "Mensaje" : "Message"), /* @__PURE__ */ import_react12.default.createElement( "textarea", { id: "cp-msg", className: "cp-input", style: { ...inputStyle, minHeight: 110, resize: "vertical", lineHeight: 1.55 }, placeholder: f.mensaje, value: form.mensaje, onChange: (e) => set("mensaje", e.target.value), maxLength: 4e3, "data-gufi-src": "sections/Contacto.tsx:229" } )), /* @__PURE__ */ import_react12.default.createElement( "input", { tabIndex: -1, autoComplete: "off", "aria-hidden": "true", value: trampa, onChange: (e) => setTrampa(e.target.value), style: { position: "absolute", left: "-9999px", width: 1, height: 1, opacity: 0 }, "data-gufi-src": "sections/Contacto.tsx:236" } ), error && /* @__PURE__ */ import_react12.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 9, background: "rgba(244,63,94,0.10)", border: "1px solid rgba(244,63,94,0.28)", color: "#FDA4AF", borderRadius: 12, padding: "11px 14px", fontFamily: FONT_BODY, fontSize: 13.5, marginBottom: 14 }, "data-gufi-src": "sections/Contacto.tsx:241" }, /* @__PURE__ */ import_react12.default.createElement(import_lucide_react4.AlertCircle, { size: 16, style: { flexShrink: 0 } }), error), /* @__PURE__ */ import_react12.default.createElement( "button", { type: "submit", className: "cp-btn", disabled: enviando, style: { width: "100%", display: "inline-flex", alignItems: "center", justifyContent: "center", gap: 10, background: enviando ? "rgba(255,255,255,0.55)" : T.white, color: T.ink, border: "none", borderRadius: 980, padding: "15px 26px", fontFamily: FONT_BODY, fontSize: 15.5, fontWeight: 500, cursor: enviando ? "wait" : "pointer" }, "data-gufi-src": "sections/Contacto.tsx:252" }, enviando ? /* @__PURE__ */ import_react12.default.createElement("span", { className: "cp-spin", style: { width: 15, height: 15, borderRadius: 999, border: "2px solid rgba(7,13,18,0.25)", borderTopColor: T.ink, display: "inline-block" }, "data-gufi-src": "sections/Contacto.tsx:261" }) : /* @__PURE__ */ import_react12.default.createElement(import_lucide_react4.Send, { size: 16 }), enviando ? f.enviando : f.enviar ), /* @__PURE__ */ import_react12.default.createElement("p", { style: { fontFamily: FONT_BODY, fontSize: 11.5, lineHeight: 1.5, color: T.text3, textAlign: "center", marginTop: 14 }, "data-gufi-src": "sections/Contacto.tsx:271" }, f.legal)); } function Contacto({ lang, gufi, peticion }) { const c = CONTACTO[lang]; const movil = useMovil(); const [abierto, setAbierto] = (0, import_react12.useState)(false); (0, import_react12.useEffect)(() => { if (peticion.n > 0 && peticion.servicio && movil) setAbierto(true); }, [peticion, movil]); (0, import_react12.useEffect)(() => { if (typeof document === "undefined") return; const previo = document.body.style.overflow; document.body.style.overflow = abierto ? "hidden" : previo || ""; const esc = (e) => { if (e.key === "Escape") setAbierto(false); }; if (abierto) window.addEventListener("keydown", esc); return () => { document.body.style.overflow = previo || ""; window.removeEventListener("keydown", esc); }; }, [abierto]); const vias = [ { href: waUrl(lang), externo: true, t: c.wa, s: c.waSub, acento: "#25D366", icono: /* @__PURE__ */ import_react12.default.createElement(IconoWhatsApp, null) }, { href: "mailto:" + EMAIL, externo: false, t: c.mail, s: EMAIL, acento: T.cream, icono: /* @__PURE__ */ import_react12.default.createElement(import_lucide_react4.Mail, { size: 20 }) }, { href: "tel:" + TEL, externo: false, t: c.tel, s: TEL_HUMANO, acento: T.steel, icono: /* @__PURE__ */ import_react12.default.createElement(import_lucide_react4.Phone, { size: 20 }) }, { href: DIRECCION_MAPA, externo: true, t: lang === "es" ? "Venir a vernos" : "Visit us", s: DIRECCION, acento: T.text2, icono: /* @__PURE__ */ import_react12.default.createElement(import_lucide_react4.MapPin, { size: 20 }) } ]; return /* @__PURE__ */ import_react12.default.createElement("section", { id: "contacto", className: "cp-pad", style: { background: T.ink, position: "relative", overflow: "hidden" }, "data-gufi-src": "sections/Contacto.tsx:325" }, /* @__PURE__ */ import_react12.default.createElement("div", { style: { position: "absolute", inset: 0, backgroundImage: "url(" + IMG.tanques2 + ")", backgroundSize: "cover", backgroundPosition: "center", opacity: 0.14, filter: "grayscale(0.5)" }, "data-gufi-src": "sections/Contacto.tsx:326" }), /* @__PURE__ */ import_react12.default.createElement("div", { style: { position: "absolute", inset: 0, background: "linear-gradient(to bottom, " + T.ink + " 0%, rgba(7,13,18,0.86) 40%, " + T.ink + " 100%)" }, "data-gufi-src": "sections/Contacto.tsx:332" }), /* @__PURE__ */ import_react12.default.createElement("div", { style: { maxWidth: 1320, margin: "0 auto", position: "relative" }, "data-gufi-src": "sections/Contacto.tsx:334" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "cp-split", style: { gridTemplateColumns: "0.9fr 1.1fr", gap: 56 }, "data-gufi-src": "sections/Contacto.tsx:335" }, /* @__PURE__ */ import_react12.default.createElement("div", { "data-gufi-src": "sections/Contacto.tsx:336" }, /* @__PURE__ */ import_react12.default.createElement(Reveal, null, /* @__PURE__ */ import_react12.default.createElement("div", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.22em", textTransform: "uppercase", color: T.cream, marginBottom: 18 }, "data-gufi-src": "sections/Contacto.tsx:338" }, c.kicker)), /* @__PURE__ */ import_react12.default.createElement(Reveal, { delay: 70 }, /* @__PURE__ */ import_react12.default.createElement("h2", { style: { fontFamily: FONT_DISPLAY, fontSize: "clamp(30px, 4.2vw, 56px)", lineHeight: 1.02, letterSpacing: "-0.045em", fontWeight: 600, color: T.white, marginBottom: 18 }, "data-gufi-src": "sections/Contacto.tsx:347" }, c.t)), /* @__PURE__ */ import_react12.default.createElement(Reveal, { delay: 130 }, /* @__PURE__ */ import_react12.default.createElement("p", { style: { fontFamily: FONT_BODY, fontSize: 16.5, lineHeight: 1.7, color: T.text2, maxWidth: 460, marginBottom: 26 }, "data-gufi-src": "sections/Contacto.tsx:356" }, c.d)), movil ? ( /* En el movil, tres accesos directos y UN boton. Cuatro tarjetas grandes mas el formulario entero eran cinco pantallas para decir «escribenos». */ /* @__PURE__ */ import_react12.default.createElement(Reveal, { delay: 170 }, /* @__PURE__ */ import_react12.default.createElement("div", { style: { display: "flex", gap: 10, marginBottom: 14 }, "data-gufi-src": "sections/Contacto.tsx:369" }, vias.slice(0, 3).map((v) => /* @__PURE__ */ import_react12.default.createElement( "a", { key: v.t, href: v.href, target: v.externo ? "_blank" : void 0, rel: v.externo ? "noopener noreferrer" : void 0, "aria-label": v.t, style: { flex: 1, height: 52, borderRadius: 14, border: "1px solid " + T.line, background: T.glass, display: "flex", alignItems: "center", justifyContent: "center", color: v.acento, textDecoration: "none" }, "data-gufi-src": "sections/Contacto.tsx:371" }, v.icono ))), /* @__PURE__ */ import_react12.default.createElement( "button", { className: "cp-btn", onClick: () => setAbierto(true), style: { width: "100%", background: T.white, color: T.ink, border: "none", borderRadius: 980, padding: "15px 24px", fontFamily: FONT_BODY, fontSize: 15.5, fontWeight: 500, letterSpacing: "-0.01em", cursor: "pointer" }, "data-gufi-src": "sections/Contacto.tsx:389" }, lang === "es" ? "Cont\xE1ctanos" : "Contact us" ), /* @__PURE__ */ import_react12.default.createElement( "a", { href: DIRECCION_MAPA, target: "_blank", rel: "noopener noreferrer", style: { display: "flex", alignItems: "center", gap: 8, marginTop: 16, color: T.text3, fontFamily: FONT_BODY, fontSize: 13, textDecoration: "none", justifyContent: "center" }, "data-gufi-src": "sections/Contacto.tsx:402" }, /* @__PURE__ */ import_react12.default.createElement(import_lucide_react4.MapPin, { size: 13 }), DIRECCION )) ) : /* @__PURE__ */ import_react12.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 10 }, "data-gufi-src": "sections/Contacto.tsx:417" }, vias.map((v, i) => /* @__PURE__ */ import_react12.default.createElement(Reveal, { key: v.t, delay: 180 + i * 80 }, /* @__PURE__ */ import_react12.default.createElement( "a", { href: v.href, target: v.externo ? "_blank" : void 0, rel: v.externo ? "noopener noreferrer" : void 0, className: "cp-card", style: { display: "flex", alignItems: "center", gap: 15, padding: "16px 18px", borderRadius: 16, border: "1px solid " + T.line, background: T.glass, textDecoration: "none", backdropFilter: "blur(10px)", WebkitBackdropFilter: "blur(10px)" }, "data-gufi-src": "sections/Contacto.tsx:420" }, /* @__PURE__ */ import_react12.default.createElement("span", { style: { width: 42, height: 42, borderRadius: 12, display: "flex", alignItems: "center", justifyContent: "center", background: "rgba(255,255,255,0.05)", color: v.acento, flexShrink: 0 }, "data-gufi-src": "sections/Contacto.tsx:433" }, v.icono), /* @__PURE__ */ import_react12.default.createElement("span", { style: { minWidth: 0 }, "data-gufi-src": "sections/Contacto.tsx:440" }, /* @__PURE__ */ import_react12.default.createElement("span", { style: { display: "block", fontFamily: FONT_BODY, fontSize: 15, fontWeight: 600, color: T.white }, "data-gufi-src": "sections/Contacto.tsx:441" }, v.t), /* @__PURE__ */ import_react12.default.createElement("span", { style: { display: "block", fontFamily: FONT_BODY, fontSize: 13, color: T.text3, marginTop: 2, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, "data-gufi-src": "sections/Contacto.tsx:444" }, v.s)) ))))), !movil && /* @__PURE__ */ import_react12.default.createElement(Reveal, { delay: 120 }, /* @__PURE__ */ import_react12.default.createElement("div", { style: { border: "1px solid " + T.line, borderRadius: 24, padding: "clamp(22px, 3vw, 34px)", background: "rgba(16,30,39,0.72)", backdropFilter: "blur(22px)", WebkitBackdropFilter: "blur(22px)" }, "data-gufi-src": "sections/Contacto.tsx:461" }, /* @__PURE__ */ import_react12.default.createElement(Formulario, { lang, gufi, servicioPedido: peticion.servicio }))))), abierto && /* @__PURE__ */ import_react12.default.createElement( "div", { className: "cp-fade", style: { position: "fixed", inset: 0, zIndex: 130, background: T.ink2, overflowY: "auto", paddingBottom: "calc(28px + env(safe-area-inset-bottom, 0px))" }, "data-gufi-src": "sections/Contacto.tsx:476" }, /* @__PURE__ */ import_react12.default.createElement("div", { style: { position: "sticky", top: 0, zIndex: 2, display: "flex", alignItems: "center", gap: 12, padding: "16px 20px", background: "rgba(11,20,27,0.92)", backdropFilter: "blur(18px)", WebkitBackdropFilter: "blur(18px)", borderBottom: "1px solid " + T.lineSoft }, "data-gufi-src": "sections/Contacto.tsx:484" }, /* @__PURE__ */ import_react12.default.createElement("span", { style: { fontFamily: FONT_DISPLAY, fontSize: 17, fontWeight: 600, letterSpacing: "-0.02em", color: T.white }, "data-gufi-src": "sections/Contacto.tsx:492" }, lang === "es" ? "Pedir presupuesto" : "Request a quote"), /* @__PURE__ */ import_react12.default.createElement( "button", { onClick: () => setAbierto(false), "aria-label": lang === "es" ? "Cerrar" : "Close", style: { marginLeft: "auto", width: 34, height: 34, borderRadius: 999, background: "rgba(255,255,255,0.06)", border: "1px solid " + T.line, color: T.white, cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center" }, "data-gufi-src": "sections/Contacto.tsx:498" }, /* @__PURE__ */ import_react12.default.createElement(import_lucide_react4.X, { size: 17 }) )), /* @__PURE__ */ import_react12.default.createElement("div", { style: { padding: "20px" }, "data-gufi-src": "sections/Contacto.tsx:512" }, /* @__PURE__ */ import_react12.default.createElement(Formulario, { lang, gufi, servicioPedido: peticion.servicio })) )); } // virtual:sections/Footer.tsx var import_react13 = __toESM(require("react")); var import_lucide_react5 = require("lucide-react"); function Footer({ lang, irA }) { const c = FOOTER[lang]; return /* @__PURE__ */ import_react13.default.createElement("footer", { style: { background: T.ink, borderTop: "1px solid " + T.lineSoft }, "data-gufi-src": "sections/Footer.tsx:11" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "cp-pad-s", style: { maxWidth: 1320, margin: "0 auto", paddingTop: 64, paddingBottom: 40 }, "data-gufi-src": "sections/Footer.tsx:12" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "cp-split", style: { gridTemplateColumns: "1.2fr 1fr", gap: 44, alignItems: "start" }, "data-gufi-src": "sections/Footer.tsx:13" }, /* @__PURE__ */ import_react13.default.createElement("div", { "data-gufi-src": "sections/Footer.tsx:14" }, /* @__PURE__ */ import_react13.default.createElement(Logo, { alto: 30, blanco: true, style: { marginBottom: 18 } }), /* @__PURE__ */ import_react13.default.createElement( "p", { style: { fontFamily: FONT_BODY, fontSize: 14.5, lineHeight: 1.65, color: T.text3, maxWidth: 380 }, "data-gufi-src": "sections/Footer.tsx:16" }, c.claim, /* @__PURE__ */ import_react13.default.createElement("span", { style: { display: "block", marginTop: 6, color: T.text2, fontStyle: "italic" }, "data-gufi-src": "sections/Footer.tsx:26" }, "Partnering for a Better Future") )), /* @__PURE__ */ import_react13.default.createElement("div", { className: "cp-pie-cols", "data-gufi-src": "sections/Footer.tsx:32" }, /* @__PURE__ */ import_react13.default.createElement("div", { "data-gufi-src": "sections/Footer.tsx:33" }, /* @__PURE__ */ import_react13.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.16em", textTransform: "uppercase", color: T.text3, marginBottom: 14 }, "data-gufi-src": "sections/Footer.tsx:34" }, lang === "es" ? "Secciones" : "Sections" ), /* @__PURE__ */ import_react13.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 9, alignItems: "flex-start" }, "data-gufi-src": "sections/Footer.tsx:47" }, NAV[lang].map((l) => /* @__PURE__ */ import_react13.default.createElement( "button", { key: l.id, onClick: () => irA(l.id), style: { background: "none", border: "none", padding: 0, cursor: "pointer", color: T.text2, fontFamily: FONT_BODY, fontSize: 14, transition: "color .25s ease" }, onMouseEnter: (e) => { e.currentTarget.style.color = T.cream; }, onMouseLeave: (e) => { e.currentTarget.style.color = T.text2; }, "data-gufi-src": "sections/Footer.tsx:49" }, l.label )))), /* @__PURE__ */ import_react13.default.createElement("div", { "data-gufi-src": "sections/Footer.tsx:71" }, /* @__PURE__ */ import_react13.default.createElement( "div", { style: { fontFamily: FONT_BODY, fontSize: 11, fontWeight: 600, letterSpacing: "0.16em", textTransform: "uppercase", color: T.text3, marginBottom: 14 }, "data-gufi-src": "sections/Footer.tsx:72" }, lang === "es" ? "Contacto" : "Contact" ), /* @__PURE__ */ import_react13.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 11 }, "data-gufi-src": "sections/Footer.tsx:85" }, /* @__PURE__ */ import_react13.default.createElement( "a", { href: "mailto:" + EMAIL, style: { display: "flex", gap: 9, alignItems: "center", color: T.text2, fontFamily: FONT_BODY, fontSize: 14, textDecoration: "none", wordBreak: "break-all" }, "data-gufi-src": "sections/Footer.tsx:86" }, /* @__PURE__ */ import_react13.default.createElement(import_lucide_react5.Mail, { size: 14, style: { flexShrink: 0 } }), EMAIL ), /* @__PURE__ */ import_react13.default.createElement( "a", { href: "tel:" + TEL, style: { display: "flex", gap: 9, alignItems: "center", color: T.text2, fontFamily: FONT_BODY, fontSize: 14, textDecoration: "none" }, "data-gufi-src": "sections/Footer.tsx:93" }, /* @__PURE__ */ import_react13.default.createElement(import_lucide_react5.Phone, { size: 14, style: { flexShrink: 0 } }), TEL_HUMANO ), /* @__PURE__ */ import_react13.default.createElement( "a", { href: waUrl(lang), target: "_blank", rel: "noopener noreferrer", style: { display: "flex", gap: 9, alignItems: "center", color: "#25D366", fontFamily: FONT_BODY, fontSize: 14, textDecoration: "none", fontWeight: 600 }, "data-gufi-src": "sections/Footer.tsx:100" }, /* @__PURE__ */ import_react13.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", style: { flexShrink: 0 }, "data-gufi-src": "sections/Footer.tsx:106" }, /* @__PURE__ */ import_react13.default.createElement("path", { d: "M12.04 2C6.58 2 2.13 6.45 2.13 11.91c0 1.75.46 3.45 1.32 4.95L2 22l5.25-1.38a9.87 9.87 0 0 0 4.79 1.22c5.46 0 9.91-4.45 9.91-9.91 0-2.65-1.03-5.14-2.9-7.01A9.82 9.82 0 0 0 12.04 2z", "data-gufi-src": "sections/Footer.tsx:107" })), "WhatsApp" ), /* @__PURE__ */ import_react13.default.createElement( "a", { href: DIRECCION_MAPA, target: "_blank", rel: "noopener noreferrer", style: { display: "flex", gap: 9, alignItems: "flex-start", color: T.text3, fontFamily: FONT_BODY, fontSize: 13.5, textDecoration: "none", lineHeight: 1.5 }, "data-gufi-src": "sections/Footer.tsx:111" }, /* @__PURE__ */ import_react13.default.createElement(import_lucide_react5.MapPin, { size: 14, style: { flexShrink: 0, marginTop: 3 } }), DIRECCION ), /* @__PURE__ */ import_react13.default.createElement( "a", { href: LINKEDIN, target: "_blank", rel: "noopener noreferrer", style: { display: "flex", gap: 9, alignItems: "center", color: T.text3, fontFamily: FONT_BODY, fontSize: 13.5, textDecoration: "none" }, "data-gufi-src": "sections/Footer.tsx:120" }, /* @__PURE__ */ import_react13.default.createElement(import_lucide_react5.Linkedin, { size: 14, style: { flexShrink: 0 } }), "LinkedIn" ))))), /* @__PURE__ */ import_react13.default.createElement( "div", { style: { marginTop: 52, paddingTop: 22, borderTop: "1px solid " + T.lineSoft, display: "flex", justifyContent: "space-between", alignItems: "center", gap: 16, flexWrap: "wrap" }, "data-gufi-src": "sections/Footer.tsx:134" }, /* @__PURE__ */ import_react13.default.createElement("div", { style: { fontFamily: FONT_BODY, fontSize: 12.5, color: T.text3 }, "data-gufi-src": "sections/Footer.tsx:146" }, "\xA9 ", (/* @__PURE__ */ new Date()).getFullYear(), " Calpipe. ", c.rights), /* @__PURE__ */ import_react13.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 18 }, "data-gufi-src": "sections/Footer.tsx:149" }, /* @__PURE__ */ import_react13.default.createElement("span", { style: { fontFamily: FONT_DISPLAY, fontSize: 11, letterSpacing: "0.14em", color: "rgba(255,255,255,0.22)" }, "data-gufi-src": "sections/Footer.tsx:150" }, c.hecho.toUpperCase()), /* @__PURE__ */ import_react13.default.createElement( "button", { onClick: () => irA("inicio"), "aria-label": "Arriba", className: "cp-btn", style: { width: 38, height: 38, borderRadius: 999, background: "rgba(255,255,255,0.05)", border: "1px solid " + T.line, color: T.white, cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center" }, "data-gufi-src": "sections/Footer.tsx:153" }, /* @__PURE__ */ import_react13.default.createElement(import_lucide_react5.ArrowUp, { size: 16 }) )) ))); } // virtual:page.tsx var CLAVE_IDIOMA = "calpipe_lang"; function idiomaInicial() { if (typeof window === "undefined") return "es"; try { const g = window.localStorage.getItem(CLAVE_IDIOMA); if (g === "es" || g === "en") return g; } catch (e) { } const n = (navigator.language || "es").toLowerCase(); return n.indexOf("es") === 0 ? "es" : "en"; } function SitioCalpipe({ id, gufi }) { const [lang, setLangEstado] = (0, import_react14.useState)("es"); const [peticion, setPeticion] = (0, import_react14.useState)({ servicio: "", n: 0 }); (0, import_react14.useEffect)(() => { setLangEstado(idiomaInicial()); }, []); const setLang = (0, import_react14.useCallback)((l) => { setLangEstado(l); try { window.localStorage.setItem(CLAVE_IDIOMA, l); } catch (e) { } if (typeof document !== "undefined") document.documentElement.lang = l; }, []); (0, import_react14.useEffect)(() => { if (typeof document !== "undefined") document.documentElement.lang = lang; }, [lang]); const pedirPresupuesto = (0, import_react14.useCallback)((servicio) => { setPeticion((p) => ({ servicio, n: p.n + 1 })); }, []); const irA = (0, import_react14.useCallback)((destino) => { const el = typeof document !== "undefined" ? document.getElementById(destino) : null; if (!el) return; const y = el.getBoundingClientRect().top + window.scrollY - (destino === "inicio" ? 0 : 72); window.scrollTo({ top: y, behavior: "smooth" }); }, []); return /* @__PURE__ */ import_react14.default.createElement( "div", { id, className: "cp-root", style: { background: T.ink, color: T.text, fontFamily: FONT_BODY, minHeight: "100vh", overflowX: "hidden" }, "data-gufi-src": "page.tsx:83" }, /* @__PURE__ */ import_react14.default.createElement("style", { dangerouslySetInnerHTML: { __html: CSS }, "data-gufi-src": "page.tsx:94" }), /* @__PURE__ */ import_react14.default.createElement(Nav, { lang, setLang, irA }), /* @__PURE__ */ import_react14.default.createElement(Hero, { lang, irA }), /* @__PURE__ */ import_react14.default.createElement(Manifiesto, { lang }), /* @__PURE__ */ import_react14.default.createElement(Servicios, { lang, irA, pedirPresupuesto }), /* @__PURE__ */ import_react14.default.createElement(Metodos, { lang }), /* @__PURE__ */ import_react14.default.createElement(Sectores, { lang }), /* @__PURE__ */ import_react14.default.createElement(Mundo, { lang }), /* @__PURE__ */ import_react14.default.createElement(Claim, { lang }), /* @__PURE__ */ import_react14.default.createElement(Contacto, { lang, gufi, peticion }), /* @__PURE__ */ import_react14.default.createElement(Footer, { lang, irA }), /* @__PURE__ */ import_react14.default.createElement(Fab, { lang }) ); } // virtual:core/index.tsx var featureConfig = { meta: { name: "sitio_calpipe", label: "Web Calpipe", description: "Sitio publico de Calpipe: inspeccion, ensayos no destructivos y certificacion. Con formulario de contacto que entra en el ERP y avisa por correo.", icon: "Globe", public: true }, dataSources, automations, seo }; // var stdin_default = SitioCalpipe;