Elige idioma
Search

Gestión de la seguridad de presas y embalses

OFITECO acumula más de 50 años de experiencia en la gestión de la seguridad de presas y embalses.
Recientemente OFITECO ha trabajado en Reventazón (Costa Rica) y Bucaramanga (Colombia).

el desarrollo tecnológico de nuestros clientes y de la sociedad

NUESTRAS ÁREAS GEOGRÁFICAS

Integración tecnológica en los 5 continentes

Actualmente, OFITECO cuenta con oficinas en más de 30 países de todo el mundo, constituyendo una empresa global y liderando la gestión de infraestructuras a
nivel internacional.

Somos profesionales que aunamos el mejor talento y el conocimiento de vanguardia para llevarlo hasta nuestros clientes. Construimos alianzas con vocación de
permanencia, llegando donde nos necesiten y cuando nos necesiten.

ACTUALIDAD

Lo último en OFITECO

p.text { font-size: 36px; text-shadow: 1px 1px 13px #EF3600; /* horizontal offset, vertical offset, blur radius, color */ } @media all and (max-width: 900px) { p.text { font-size: 24px !important; line-height: 1.; } }

En OFITECO, nos comprometemos con el progreso de la sociedad sin
comprometer su bienestar, presente y futuro

p.text { font-size: 36px; text-shadow: 1px 1px 13px #000000; /* horizontal offset, vertical offset, blur radius, color */ }

Lorem ipsum dolor sit lorem ipsum dolor

.reveal { overflow: hidden !important; } gsap.registerPlugin(ScrollTrigger); let revealContainers = document.querySelectorAll(".reveal"); revealContainers.forEach((container) => { let image = container.querySelector("img"); let tl = gsap.timeline({ scrollTrigger: { trigger: container, } }); tl.set(container, { autoAlpha: 1 }); tl.from(container, 1.5, { xPercent: -100, ease: Power2.out }); tl.from(image, 1.5, { xPercent: 100, scale: 1.3, delay: -1.5, ease: Power2.out }); });
.reveal-text { visibility: hidden; } .elementor-editor-active .reveal-text { visibility: visible; } .line { position: relative; overflow: hidden; display: flex; } window.addEventListener("load", function () { let splitWords = function (selector) { var elements = document.querySelectorAll(selector); elements.forEach(function (el) { el.dataset.splitText = el.textContent; el.innerHTML = el.textContent .split(/\s/) .map(function (word) { return word .split("-") .map(function (word) { return '' + word + ""; }) .join('-'); }) .join(' '); }); }; let splitLines = function (selector) { var elements = document.querySelectorAll(selector); splitWords(selector); elements.forEach(function (el) { var lines = getLines(el); var wrappedLines = ""; lines.forEach(function (wordsArr) { wrappedLines += ''; wordsArr.forEach(function (word) { wrappedLines += word.outerHTML; }); wrappedLines += ""; }); el.innerHTML = wrappedLines; }); }; let getLines = function (el) { var lines = []; var line; var words = el.querySelectorAll("span"); var lastTop; for (var i = 0; i { const lines = element.querySelectorAll(".words"); let tl = gsap.timeline({ scrollTrigger: { trigger: element, // toggleActions: "restart none none reset" } }); tl.set(element, { autoAlpha: 1 }); tl.from(lines, 0.7, { yPercent: 100, ease: Power3.out, stagger: 0.1, delay: 0.4 }); }); });
.line-wrapper { overflow: hidden; } // wait until DOM is ready document.addEventListener("DOMContentLoaded", function(event) { // wait until window is loaded - all images, styles-sheets, fonts, links, and other media assets // you could also use addEventListener() instead window.onload = function() { // OPTIONAL - waits til next tick render to run code (prevents running in the middle of render tick) window.requestAnimationFrame(function() { gsap.registerPlugin(ScrollTrigger); const linesText = document.querySelectorAll(".fade-up"); linesText.forEach((lineText, i) => { const split = new SplitType(lineText, { types: "lines" }); split.lines.map((line) => { const wrapEl = document.createElement("div"); wrapEl.classList.add("line-wrapper"); // or wrapEl.style.overflow = 'hidden' line.parentNode.appendChild(wrapEl); wrapEl.appendChild(line); }); gsap.from(split.lines, { opacity: 0, y: "100", duration: 1.8, ease: "power4", stagger: 0.1, delay: 0.4 scrollTrigger: { trigger: lineText, // markers: true, start: "top bottom", end: "bottom bottom", // toggleActions: "play none reverse none" } }); }); }); }; });
var $ = jQuery $(document).ready(function(){ var cardCount = $('.card-carousel .swiper-slide').length; var currentCardIndex = 0; function updateCardCounter() { var currentCardNumber = (currentCardIndex + 1).toString().padStart(2, '0'); var totalCardCount = cardCount.toString().padStart(2, '0'); $('.card-carousel .card-counter').text(currentCardNumber + ' de ' + totalCardCount); } updateCardCounter(); $('.card-carousel .card-prev').on('click', function(){ $(this).closest('.card-carousel').find('.elementor-swiper-button-prev').trigger('click'); $(this).closest('.card-carousel').find('.swiper-container').trigger('mouseleave'); currentCardIndex--; if (currentCardIndex = cardCount) { currentCardIndex = 0; } updateCardCounter(); }) $('.card-carousel .card-prev a, .card-carousel .card-next a').on('click', function(e){ e.preventDefault() }) })
var $ = jQuery $(document).ready(function(){ $('.card-carousel .card-prev').on('click', function(){ $(this).closest('.card-carousel').find('.prev-arrow').trigger('click') $(this).closest('.card-carousel').find('.swiper-container').trigger('mouseleave') }) $('.card-carousel .card-next').on('click', function(){ $(this).closest('.card-carousel').find('.next-arrow').trigger('click') $(this).closest('.card-carousel').find('.swiper-container').trigger('mouseleave') }) $('.card-carousel .card-prev a, .card-carousel .card-next a').on('click', function(e){ e.preventDefault() }) }) .prev-arrow, .next-arrow{ cursor: pointer; }
var $ = jQuery $(document).ready(function(){ $('.card-carousel2 .card-prev2').on('click', function(){ $(this).closest('.card-carousel2').find('.prev-arrow').trigger('click') $(this).closest('.card-carousel2').find('.swiper-container').trigger('mouseleave') }) $('.card-carousel2 .card-next2').on('click', function(){ $(this).closest('.card-carousel2').find('.next-arrow').trigger('click') $(this).closest('.card-carousel2').find('.swiper-container').trigger('mouseleave') }) $('.card-carousel2 .card-prev2 a, .card-carousel2 .card-next2 a').on('click', function(e){ e.preventDefault() }) })