@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap");.odins-timeline,
.odins-timeline * {
box-sizing: border-box;
font-family: "Inter", sans-serif;
}.odins-timeline {
width: 100%;
min-height: 100vh;
margin: 0 auto;
padding: 0;
background: #eef3f5;
color: #050505;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}.odins-timeline-inner {
width: min(90vw, 1650px);
padding: clamp(32px, 5vw, 70px) 0;
}.odins-timeline-header {
display: flex;
align-items: center;
gap: 32px;
margin-bottom: clamp(48px, 7vw, 90px);
padding: 0 clamp(20px, 4vw, 64px);
font-size: clamp(12px, 1vw, 18px);
font-weight: 400;
letter-spacing: 0.28em;
color: #5d6670;
}.odins-scroll-pill {
border: 1px solid #6d747a;
border-radius: 999px;
padding: 10px 28px;
}.odins-timeline-years {
display: flex;
justify-content: space-between;
padding: 0 clamp(28px, 6vw, 96px);
margin-bottom: 46px;
}.odins-timeline-year-label {
font-size: clamp(20px, 2vw, 36px);
font-weight: 400;
color: #626b72;
cursor: pointer;
transition: color 0.3s ease, font-weight 0.3s ease;
}.odins-timeline-year-label.active {
color: #050505;
font-weight: 700;
}.odins-timeline-line {
position: relative;
height: 44px;
margin-bottom: clamp(80px, 10vw, 130px);
}.odins-timeline-line::before {
content: "";
position: absolute;
top: 50%;
left: 0;
width: 100%;
height: 3px;
background: #cfd5de;
transform: translateY(-50%);
}.odins-timeline-dots {
position: absolute;
inset: 0;
display: flex;
justify-content: space-between;
padding: 0 clamp(28px, 6vw, 96px);
}.odins-timeline-dot {
width: clamp(22px, 2.5vw, 44px);
height: clamp(22px, 2.5vw, 44px);
border: 0;
border-radius: 50%;
background: #cfd5de;
align-self: center;
cursor: pointer;
padding: 0;
transition: background 0.35s ease, transform 0.35s ease;
}.odins-timeline-dot.active {
background: #a6f24a;
transform: scale(1.08);
}.odins-timeline-content {
display: grid;
grid-template-columns: 1fr 1.1fr auto;
align-items: center;
gap: clamp(32px, 6vw, 100px);
padding: 0 clamp(20px, 4vw, 64px);
}.odins-timeline-title {
margin: 0 0 clamp(36px, 7vw, 86px);
font-size: clamp(32px, 4vw, 58px);
line-height: 0.98;
font-weight: 400;
letter-spacing: -0.05em;
color: #050505;
}.odins-timeline-year {
margin: 0;
font-size: clamp(82px, 12vw, 150px);
line-height: 0.8;
font-weight: 400;
letter-spacing: -0.08em;
color: #050505;
}.odins-timeline-description {
max-width: 560px;
margin: 0;
font-size: clamp(20px, 2vw, 32px);
line-height: 1.28;
font-weight: 400;
letter-spacing: -0.04em;
color: #050505;
}.odins-timeline-controls {
display: flex;
gap: 28px;
}.odins-timeline-controls button {
width: clamp(58px, 5vw, 82px);
height: clamp(58px, 5vw, 82px);
border: 0;
border-radius: 50%;
background: #a6f24a;
color: #050505;
font-size: clamp(28px, 3vw, 42px);
font-weight: 400;
cursor: pointer;
line-height: 1;
transition: transform 0.25s ease, opacity 0.25s ease;
}.odins-timeline-controls button:hover {
transform: scale(1.06);
}.odins-timeline-controls button:disabled {
opacity: 0.35;
cursor: not-allowed;
}/* Responsive tablet y móvil */
@media (max-width: 900px) {
.odins-timeline {
min-height: 100vh;
align-items: center;
}.odins-timeline-inner {
width: 100%;
padding: 42px 0;
}.odins-timeline-header {
flex-direction: column;
align-items: flex-start;
gap: 14px;
margin-bottom: 48px;
}.odins-timeline-years {
overflow-x: auto;
gap: 48px;
justify-content: flex-start;
padding-bottom: 14px;
}.odins-timeline-dots {
gap: 48px;
overflow-x: auto;
justify-content: flex-start;
}.odins-timeline-line::before {
width: 900px;
}.odins-timeline-content {
grid-template-columns: 1fr;
gap: 36px;
}.odins-timeline-title {
margin-bottom: 36px;
}.odins-timeline-controls {
justify-content: flex-start;
}
}@media (max-width: 520px) {
.odins-timeline-header {
padding: 0 24px;
}.odins-timeline-years {
padding: 0 24px 14px;
}.odins-timeline-dots {
padding: 0 24px;
}.odins-timeline-content {
padding: 0 24px;
}.odins-scroll-pill {
padding: 8px 22px;
}
}
(function () {
function initOdinsTimelines() {
const timelines = document.querySelectorAll(".odins-timeline");timelines.forEach(function (timeline) {
if (timeline.dataset.initialized === "true") return;
timeline.dataset.initialized = "true";const timelineData = [
{
year: "2014",
title: "Nacimiento de
la compañía.",
description: "Constitución de la empresa y lanzamiento de la primera plataforma Country Explorer orientada a Open Data."
},
{
year: "2016",
title: "Consolidación y Reconocimientos.
Alianzas estratégicas.",
description: "Reconocimientos destacados como los enerTIC Awards 2014, obtención del sello PYME Innovadora del Ministerio de Economía y Competitividad, y el sello de Empresa Innovadora de Base Tecnológica de ANCES. Asociación con FREMM y TIMUR, además del desarrollo de la plataforma Smart Agriculture basada en FIWARE."
},
{
year: "2018",
title: "Transformación Educativa.
Riego inteligente y
energía solar.",
description: "Despliegue de Smart Cole, un sistema de monitorización en colegios públicos de la Región de Murcia. Implementación de sistemas de riego inteligente en parques y jardines de ciudades como Salamanca, Arnedo, Barcelona, Logroño, Marbella, Badajoz, Murcia, Teruel y Elche. Desarrollo de sistemas de monitorización para bancos de ensayos destinados al estudio de características físicas de seguidores solares."
},
{
year: "2020",
title: "Despliegues Avanzados
en Smart Agro, Primer NB-IoT de España
Proyectos hídricos y
analítica satelital.",
description: "Primer despliegue del datalogger Mex06 para Smart Agro, incorporación del controlador IPex12 como programador de riego avanzado y solución para IMIDA con control de accesos y visualización 3D de edificios. Primer proyecto en JCyL con siete pilotos relacionados con el ciclo del agua y primer dispositivo NB-IoT desplegado en España con Telefónica (MEX03 en Grijota, Palencia). Integración de servicios basados en imágenes Sentinel-2 e inteligencia artificial."
},
{
year: "2022",
title: "Investigación científica
y nuevas plataformas verdes.",
description: "Sensorización de la Rambla del Albujón. Proyecto Campus as Living Lab y desarrollo de una plataforma web para configuración de dispositivos IoT de forma centralizada. Proyectos con la Universidad de Granada: despliegue de dataloggers y sensores para cultivos y estudio dendrocronológico; monitorización de temperatura y humedad en altura en Sierra Nevada para investigación de microclimas. Pilotos asociados al ciclo del agia en Castellón."
},
{
year: "2024",
title: "Expansión Global.
Décimo Aniversario.",
description: "Expansión de proyectos por España, apertura de OdinS Colombia, celebración del décimo aniversario, renovación completa de la web, nuevo departamento de sostenibilidad y acciones sociales, presentación global de Quantix Edge Security en la Torre Nasdaq de Times Square e inclusión en el registro de Huella de Carbono del MITECO."
},
{
year: "2026",
title: "Nuevas Plataformas.
Aceleración Internacional.",
description: "Nuevas plataformas: WiKeeper, WiCube y WiInspire, ampliación de oficinas, nueva línea de negocio: Ingrovia, desarrollo de Grovex y Grovex+, primera participación en la feria Sahara Expo en Egipto y en diversos eventos del norte de África, instalación de boyas inteligentes en Benidorm, constitución de Quantix Edge Security y obtención del Premio Mayte Spínola a la Innovación, ESG Industria y Premio Cámara 2025 a la innovación."
}
];let currentIndex = 0;const yearsContainer = timeline.querySelector(".odins-timeline-years");
const dotsContainer = timeline.querySelector(".odins-timeline-dots");
const title = timeline.querySelector(".odins-timeline-title");
const year = timeline.querySelector(".odins-timeline-year");
const description = timeline.querySelector(".odins-timeline-description");
const prevBtn = timeline.querySelector(".odins-prev");
const nextBtn = timeline.querySelector(".odins-next");timelineData.forEach(function (item, index) {
const yearLabel = document.createElement("span");
yearLabel.className = "odins-timeline-year-label";
yearLabel.textContent = item.year;
yearLabel.addEventListener("click", function () {
currentIndex = index;
updateTimeline();
});
yearsContainer.appendChild(yearLabel);const dot = document.createElement("button");
dot.className = "odins-timeline-dot";
dot.type = "button";
dot.setAttribute("aria-label", "Ver año " + item.year);
dot.addEventListener("click", function () {
currentIndex = index;
updateTimeline();
});
dotsContainer.appendChild(dot);
});function updateTimeline() {
const data = timelineData[currentIndex];title.innerHTML = data.title;
year.textContent = data.year;
description.textContent = data.description;timeline.querySelectorAll(".odins-timeline-year-label").forEach(function (label, index) {
label.classList.toggle("active", index === currentIndex);
});timeline.querySelectorAll(".odins-timeline-dot").forEach(function (dot, index) {
dot.classList.toggle("active", index === currentIndex);
});prevBtn.disabled = currentIndex === 0;
nextBtn.disabled = currentIndex === timelineData.length - 1;
}prevBtn.addEventListener("click", function () {
if (currentIndex > 0) {
currentIndex--;
updateTimeline();
}
});nextBtn.addEventListener("click", function () {
if (currentIndex < timelineData.length - 1) {
currentIndex++;
updateTimeline();
}
});updateTimeline();
});
}if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initOdinsTimelines);
} else {
initOdinsTimelines();
}
})();