{"id":12160,"date":"2026-08-20T14:09:53","date_gmt":"2026-08-20T12:09:53","guid":{"rendered":"https:\/\/www.gimasi.com\/?page_id=12160"},"modified":"2026-09-30T09:58:39","modified_gmt":"2026-09-30T07:58:39","slug":"iot-engineering-company-hardware-firmware-cloud-gimasi","status":"publish","type":"page","link":"https:\/\/www.gimasi.com\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"12160\" class=\"elementor elementor-12160\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8df6b4c elementor-hidden-mobile e-flex e-con-boxed e-con e-parent\" data-id=\"8df6b4c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-b5d9122 e-con-full e-flex e-con e-child\" data-id=\"b5d9122\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-30ec4e0 elementor-align-center elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"30ec4e0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#WHAT\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">WHAT WE DO<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c1e1874 e-con-full e-flex e-con e-child\" data-id=\"c1e1874\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ec2ca78 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"ec2ca78\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#GIOT\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">GIoT<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-605b866 e-con-full e-flex e-con e-child\" data-id=\"605b866\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c64f4ee elementor-align-center elementor-widget elementor-widget-button\" data-id=\"c64f4ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#CASE\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">CASE STUDY<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-41b2947 e-con-full e-flex e-con e-child\" data-id=\"41b2947\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e4b000d elementor-align-center elementor-widget elementor-widget-button\" data-id=\"e4b000d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#WHO\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">WHO WE ARE<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9376205 e-con-full e-flex e-con e-parent\" data-id=\"9376205\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f381b1c elementor-widget elementor-widget-html\" data-id=\"f381b1c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\r\n<html lang=\"it\">\r\n<head>\r\n<meta charset=\"utf-8\" \/>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\r\n<title>Gimasi \u2014 Hero<\/title>\r\n\r\n<style>\r\n\r\n:root {\r\n  --void: #060b16;\r\n  --void-2: #0f2138;\r\n  --wire: #23405f;\r\n  --glow: #7fd8ff;\r\n  --glow-strong: #bdeeff;\r\n  --glow-dim: rgba(127, 216, 255, 0.45);\r\n\r\n  --mono: ui-monospace, \"SF Mono\", \"Roboto Mono\", \"Cascadia Code\", Consolas, monospace;\r\n  --sans: Arial, Helvetica, sans-serif;\r\n}\r\n\r\n* {\r\n  box-sizing: border-box;\r\n}\r\n\r\nbody {\r\n  margin: 0;\r\n  font-family: var(--sans);\r\n  background: #030509;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   HERO\r\n   ========================================================= *\/\r\n\r\n.hero {\r\n  position: relative;\r\n  min-height: 80vh;\r\n\r\n  background:\r\n    radial-gradient(\r\n      130% 95% at 50% -10%,\r\n      var(--void-2) 0%,\r\n      var(--void) 55%,\r\n      #020306 100%\r\n    );\r\n\r\n  overflow: hidden;\r\n\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   AURORA\r\n   ========================================================= *\/\r\n\r\n.hero-aurora {\r\n  position: absolute;\r\n  inset: 0;\r\n\r\n  pointer-events: none;\r\n\r\n  mix-blend-mode: screen;\r\n  filter: blur(60px);\r\n}\r\n\r\n.hero-aurora span {\r\n  position: absolute;\r\n\r\n  border-radius: 50%;\r\n  opacity: 0.55;\r\n\r\n  animation: drift 14s ease-in-out infinite;\r\n}\r\n\r\n.hero-aurora span:nth-child(1) {\r\n  width: 520px;\r\n  height: 520px;\r\n\r\n  left: 8%;\r\n  top: 10%;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle,\r\n      rgba(127,216,255,0.55),\r\n      transparent 70%\r\n    );\r\n\r\n  animation-delay: 0s;\r\n}\r\n\r\n.hero-aurora span:nth-child(2) {\r\n  width: 460px;\r\n  height: 460px;\r\n\r\n  right: 6%;\r\n  top: 30%;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle,\r\n      rgba(180,140,255,0.4),\r\n      transparent 70%\r\n    );\r\n\r\n  animation-delay: -5s;\r\n}\r\n\r\n.hero-aurora span:nth-child(3) {\r\n  width: 420px;\r\n  height: 420px;\r\n\r\n  left: 38%;\r\n  bottom: 4%;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle,\r\n      rgba(127,216,255,0.35),\r\n      transparent 70%\r\n    );\r\n\r\n  animation-delay: -9s;\r\n}\r\n\r\n@keyframes drift {\r\n\r\n  0%, 100% {\r\n    transform: translate(0, 0) scale(1);\r\n  }\r\n\r\n  50% {\r\n    transform: translate(30px, -25px) scale(1.08);\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PARTICLE CANVAS\r\n   ========================================================= *\/\r\n\r\n.hero-canvas {\r\n  position: absolute;\r\n\r\n  inset: 0;\r\n\r\n  width: 100%;\r\n  height: 100%;\r\n\r\n  display: block;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   INTERACTIVE GRID\r\n   ========================================================= *\/\r\n\r\n.hero-grid {\r\n  position: absolute;\r\n\r\n  inset: 0;\r\n\r\n  pointer-events: none;\r\n\r\n  background-image:\r\n    linear-gradient(var(--wire) 1px, transparent 1px),\r\n    linear-gradient(90deg, var(--wire) 1px, transparent 1px);\r\n\r\n  background-size: 42px 42px;\r\n\r\n  opacity: 0.5;\r\n\r\n  -webkit-mask-image:\r\n    radial-gradient(\r\n      360px 360px at var(--mx, 50%) var(--my, 50%),\r\n      #000 0%,\r\n      transparent 75%\r\n    );\r\n\r\n  mask-image:\r\n    radial-gradient(\r\n      360px 360px at var(--mx, 50%) var(--my, 50%),\r\n      #000 0%,\r\n      transparent 75%\r\n    );\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ORBITS\r\n   ========================================================= *\/\r\n\r\n.hero-orbits {\r\n  position: absolute;\r\n\r\n  top: 50%;\r\n  left: 50%;\r\n\r\n  width: 900px;\r\n  height: 900px;\r\n\r\n  transform: translate(-50%, -50%);\r\n\r\n  pointer-events: none;\r\n\r\n  opacity: 0.55;\r\n}\r\n\r\n.hero-orbits svg {\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n\r\n.orbit-ring {\r\n  fill: none;\r\n\r\n  stroke: var(--wire);\r\n\r\n  stroke-width: 1;\r\n}\r\n\r\n.orbit-spin-slow {\r\n  animation:\r\n    spin 90s linear infinite;\r\n\r\n  transform-origin: 50% 50%;\r\n}\r\n\r\n.orbit-spin-rev {\r\n  animation:\r\n    spin 130s linear infinite reverse;\r\n\r\n  transform-origin: 50% 50%;\r\n}\r\n\r\n@keyframes spin {\r\n\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CONTENT\r\n   ========================================================= *\/\r\n\r\n.hero-content {\r\n  position: relative;\r\n\r\n  z-index: 2;\r\n\r\n  max-width: 780px;\r\n\r\n  padding: 40px 28px;\r\n\r\n  text-align: center;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   EYEBROW\r\n   ========================================================= *\/\r\n\r\n.hero-eyebrow {\r\n  display: inline-flex;\r\n\r\n  align-items: center;\r\n\r\n  gap: 8px;\r\n\r\n  font-family: var(--mono);\r\n\r\n  font-size: 12px;\r\n\r\n  letter-spacing: 2px;\r\n\r\n  text-transform: uppercase;\r\n\r\n  color: var(--glow-strong);\r\n\r\n  background:\r\n    rgba(127, 216, 255, 0.12);\r\n\r\n  border:\r\n    1px solid\r\n    rgba(127, 216, 255, 0.4);\r\n\r\n  padding: 7px 14px;\r\n\r\n  border-radius: 999px;\r\n\r\n  margin-bottom: 26px;\r\n\r\n  box-shadow:\r\n    0 0 24px\r\n    rgba(127, 216, 255, 0.15);\r\n}\r\n\r\n.hero-eyebrow::before {\r\n  content: \"\";\r\n\r\n  width: 6px;\r\n  height: 6px;\r\n\r\n  border-radius: 50%;\r\n\r\n  background: var(--glow-strong);\r\n\r\n  box-shadow:\r\n    0 0 10px\r\n    3px\r\n    var(--glow-dim);\r\n\r\n  animation:\r\n    pulse 2s ease-in-out infinite;\r\n}\r\n\r\n@keyframes pulse {\r\n\r\n  0%,100% {\r\n    opacity: 1;\r\n  }\r\n\r\n  50% {\r\n    opacity: 0.4;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TITLE\r\n   ========================================================= *\/\r\n\r\n.hero-content h1 {\r\n  margin: 0 0 22px;\r\n\r\n  font-size:\r\n    clamp(34px, 5.4vw, 62px);\r\n\r\n  line-height: 1.08;\r\n\r\n  letter-spacing: -0.5px;\r\n\r\n  color: #f7fbff;\r\n}\r\n\r\n.hero-content h1 span {\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      var(--glow) 0%,\r\n      #e4faff 45%,\r\n      var(--glow) 100%\r\n    );\r\n\r\n  -webkit-background-clip: text;\r\n  background-clip: text;\r\n\r\n  color: transparent;\r\n\r\n  text-shadow:\r\n    0 0 40px\r\n    rgba(127,216,255,0.35);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SUBTITLE\r\n   ========================================================= *\/\r\n\r\n.hero-content h3 {\r\n  margin: 0 auto 25px;\r\n\r\n  max-width: 940px;\r\n\r\n  font-size: 22px;\r\n\r\n  line-height: 1.65;\r\n\r\n  color: #b9c6d8;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BUTTONS CONTAINER\r\n   ========================================================= *\/\r\n\r\n.hero-actions {\r\n\r\n  display: flex;\r\n\r\n  justify-content: center;\r\n\r\n  gap: 14px;\r\n\r\n  flex-wrap: wrap;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BASE BUTTON\r\n   ========================================================= *\/\r\n\r\n.btn {\r\n\r\n  font-family:\r\n    \"Adlam Display\",\r\n    Arial,\r\n    Helvetica,\r\n    sans-serif;\r\n\r\n  font-size: 16.5px;\r\n\r\n  font-weight: 600;\r\n\r\n  padding: 13px 24px;\r\n\r\n  border-radius: 8px;\r\n\r\n  text-decoration: none !important;\r\n\r\n  display: inline-flex;\r\n\r\n  align-items: center;\r\n\r\n  justify-content: center;\r\n\r\n  gap: 9px;\r\n\r\n  min-height: 50px;\r\n\r\n  transition:\r\n    transform 0.2s ease,\r\n    box-shadow 0.2s ease,\r\n    background 0.2s ease,\r\n    border-color 0.2s ease;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ICONS\r\n   ========================================================= *\/\r\n\r\n.btn-icon {\r\n\r\n  width: 20px;\r\n  height: 20px;\r\n\r\n  display: inline-flex;\r\n\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  flex: 0 0 20px;\r\n\r\n  position: relative;\r\n\r\n  color: currentColor;\r\n}\r\n\r\n.btn-icon svg {\r\n\r\n  width: 19px;\r\n  height: 19px;\r\n\r\n  display: block;\r\n\r\n  overflow: visible;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BUTTON 1 \u2014 EXPLORE IOT\r\n   ========================================================= *\/\r\n\r\n.btn-primary {\r\n\r\n  background: transparent;\r\n\r\n  color: #00C6BC;\r\n\r\n  border:\r\n    1px solid\r\n    rgba(255,255,255,0.22);\r\n\r\n  box-shadow:\r\n    0 0 26px\r\n    rgba(127,216,255,0.5);\r\n}\r\n\r\n\r\n\/* Rocket normal state *\/\r\n\r\n.rocket-icon {\r\n\r\n  transform: translateY(0) rotate(0deg);\r\n\r\n  transform-origin: center;\r\n\r\n  transition:\r\n    transform 0.35s cubic-bezier(.2,.8,.2,1);\r\n}\r\n\r\n\r\n\/* Rocket prepares for launch *\/\r\n\r\n.btn-primary:hover .rocket-icon {\r\n\r\n  transform:\r\n    translateY(-3px)\r\n    rotate(-8deg);\r\n}\r\n\r\n\r\n\/* Rocket takes off after click *\/\r\n\r\n.btn-primary.launching .rocket-icon {\r\n\r\n  animation:\r\n    rocketLaunch 0.75s\r\n    cubic-bezier(.2,.8,.2,1)\r\n    forwards;\r\n}\r\n\r\n@keyframes rocketLaunch {\r\n\r\n  0% {\r\n    transform:\r\n      translate(0,0)\r\n      rotate(-8deg);\r\n\r\n    opacity: 1;\r\n  }\r\n\r\n  35% {\r\n    transform:\r\n      translate(2px,-8px)\r\n      rotate(-8deg);\r\n\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    transform:\r\n      translate(12px,-45px)\r\n      rotate(-8deg);\r\n\r\n    opacity: 0;\r\n  }\r\n\r\n}\r\n\r\n\r\n.btn-primary:hover {\r\n\r\n  transform:\r\n    translateY(-2px);\r\n\r\n  box-shadow:\r\n    0 12px 34px\r\n    rgba(127,216,255,0.6);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BUTTON 2 \u2014 EXPLORE GIOT\r\n   ========================================================= *\/\r\n\r\n.btn-giot {\r\n\r\n  background: transparent;\r\n\r\n  color: #00C6BC;\r\n\r\n  border:\r\n    1px solid\r\n    rgba(255,255,255,0.22);\r\n}\r\n\r\n\r\n\/* Planet rotation *\/\r\n\r\n.planet-icon {\r\n\r\n  transform-origin: center;\r\n\r\n  transition:\r\n    transform 0.3s ease;\r\n}\r\n\r\n.btn-giot:hover .planet-icon {\r\n\r\n  animation:\r\n    planetSpin 1.2s linear infinite;\r\n}\r\n\r\n@keyframes planetSpin {\r\n\r\n  from {\r\n    transform: rotate(0deg);\r\n  }\r\n\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n\r\n}\r\n\r\n.btn-giot:hover {\r\n\r\n  border-color:\r\n    var(--glow-strong);\r\n\r\n  color:\r\n    var(--glow-strong);\r\n\r\n  transform:\r\n    translateY(-2px);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BUTTON 3 \u2014 TALK TO OUR TEAM\r\n   ========================================================= *\/\r\n\r\n.btn-ghost {\r\n\r\n  background: transparent;\r\n\r\n  color: #00C6BC;\r\n\r\n  border:\r\n    1px solid\r\n    rgba(255,255,255,0.22);\r\n}\r\n\r\n\r\n\/* Phone vibration *\/\r\n\r\n.phone-icon {\r\n\r\n  transform-origin:\r\n    50% 60%;\r\n}\r\n\r\n.btn-ghost:hover .phone-icon {\r\n\r\n  animation:\r\n    phoneShake 0.45s\r\n    ease-in-out\r\n    infinite;\r\n}\r\n\r\n@keyframes phoneShake {\r\n\r\n  0% {\r\n    transform: rotate(0deg);\r\n  }\r\n\r\n  20% {\r\n    transform: rotate(-10deg);\r\n  }\r\n\r\n  40% {\r\n    transform: rotate(9deg);\r\n  }\r\n\r\n  60% {\r\n    transform: rotate(-7deg);\r\n  }\r\n\r\n  80% {\r\n    transform: rotate(5deg);\r\n  }\r\n\r\n  100% {\r\n    transform: rotate(0deg);\r\n  }\r\n\r\n}\r\n\r\n.btn-ghost:hover {\r\n\r\n  border-color:\r\n    var(--glow-strong);\r\n\r\n  color:\r\n    var(--glow-strong);\r\n\r\n  transform:\r\n    translateY(-2px);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CLICK FEEDBACK\r\n   ========================================================= *\/\r\n\r\n.btn:active {\r\n\r\n  transform:\r\n    translateY(0)\r\n    scale(0.98);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SCROLL CUE\r\n   ========================================================= *\/\r\n\r\n.hero-scroll-cue {\r\n\r\n  position: absolute;\r\n\r\n  bottom: 28px;\r\n\r\n  left: 50%;\r\n\r\n  transform:\r\n    translateX(-50%);\r\n\r\n  z-index: 2;\r\n\r\n  font-family: var(--mono);\r\n\r\n  font-size: 11px;\r\n\r\n  letter-spacing: 1.5px;\r\n\r\n  text-transform: uppercase;\r\n\r\n  color: #7a8ca3;\r\n\r\n  display: flex;\r\n\r\n  flex-direction: column;\r\n\r\n  align-items: center;\r\n\r\n  gap: 8px;\r\n}\r\n\r\n.hero-scroll-cue span {\r\n\r\n  width: 1px;\r\n  height: 26px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      var(--glow),\r\n      transparent\r\n    );\r\n\r\n  animation:\r\n    cue 1.8s\r\n    ease-in-out\r\n    infinite;\r\n}\r\n\r\n@keyframes cue {\r\n\r\n  0% {\r\n    opacity: 0;\r\n    transform: scaleY(0);\r\n  }\r\n\r\n  40% {\r\n    opacity: 1;\r\n    transform: scaleY(1);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    transform:\r\n      scaleY(1)\r\n      translateY(6px);\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MOBILE\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 640px) {\r\n\r\n  .hero-orbits {\r\n\r\n    width: 560px;\r\n    height: 560px;\r\n  }\r\n\r\n  .hero-content {\r\n\r\n    padding:\r\n      35px 20px;\r\n  }\r\n\r\n  .hero-content h1 {\r\n\r\n    font-size:\r\n      clamp(32px, 10vw, 48px);\r\n  }\r\n\r\n  .hero-content h3 {\r\n\r\n    font-size: 17px;\r\n\r\n    line-height: 1.55;\r\n\r\n    margin-bottom: 28px;\r\n  }\r\n\r\n  .hero-actions {\r\n\r\n    gap: 10px;\r\n  }\r\n\r\n  .btn {\r\n\r\n    width: 100%;\r\n\r\n    max-width: 300px;\r\n\r\n    padding:\r\n      12px 18px;\r\n\r\n    font-size: 15px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ACCESSIBILITY\r\n   ========================================================= *\/\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n\r\n  .orbit-spin-slow,\r\n  .orbit-spin-rev,\r\n  .hero-eyebrow::before,\r\n  .hero-scroll-cue span,\r\n  .hero-aurora span,\r\n  .planet-icon,\r\n  .phone-icon,\r\n  .rocket-icon {\r\n\r\n    animation: none !important;\r\n\r\n    transition: none !important;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\r\n<\/head>\r\n\r\n\r\n<body>\r\n\r\n<section class=\"hero\" id=\"hero\">\r\n\r\n\r\n  <!-- AURORA -->\r\n\r\n  <div\r\n    class=\"hero-aurora\"\r\n    aria-hidden=\"true\">\r\n\r\n    <span><\/span>\r\n    <span><\/span>\r\n    <span><\/span>\r\n\r\n  <\/div>\r\n\r\n\r\n  <!-- PARTICLES -->\r\n\r\n  <canvas\r\n    class=\"hero-canvas\"\r\n    id=\"heroCanvas\">\r\n  <\/canvas>\r\n\r\n\r\n  <!-- GRID -->\r\n\r\n  <div\r\n    class=\"hero-grid\"\r\n    id=\"heroGrid\">\r\n  <\/div>\r\n\r\n\r\n  <!-- ORBITS -->\r\n\r\n  <div\r\n    class=\"hero-orbits\"\r\n    aria-hidden=\"true\">\r\n\r\n    <svg viewBox=\"0 0 900 900\">\r\n\r\n      <ellipse\r\n        class=\"orbit-ring orbit-spin-slow\"\r\n        cx=\"450\"\r\n        cy=\"450\"\r\n        rx=\"420\"\r\n        ry=\"180\">\r\n      <\/ellipse>\r\n\r\n      <ellipse\r\n        class=\"orbit-ring orbit-spin-rev\"\r\n        cx=\"450\"\r\n        cy=\"450\"\r\n        rx=\"300\"\r\n        ry=\"300\">\r\n      <\/ellipse>\r\n\r\n      <ellipse\r\n        class=\"orbit-ring orbit-spin-slow\"\r\n        cx=\"450\"\r\n        cy=\"450\"\r\n        rx=\"180\"\r\n        ry=\"420\">\r\n      <\/ellipse>\r\n\r\n    <\/svg>\r\n\r\n  <\/div>\r\n\r\n\r\n  <!-- CONTENT -->\r\n\r\n  <div class=\"hero-content\">\r\n\r\n\r\n    <span class=\"hero-eyebrow\">\r\n      Gimasi \u00b7 IoT \u00b7 2012\r\n    <\/span>\r\n\r\n\r\n    <h1>\r\n      Shaping the\r\n      <span>IoT<\/span>\r\n      that connects the real world.\r\n    <\/h1>\r\n\r\n\r\n    <h3>\r\n      Electronics, firmware, Cloud and in-house production:\r\n      we engineer every layer of the end-to-end IoT solution as one connected\r\n      ecosystem, from the first prototype to the certified product.\r\n    <\/h3>\r\n\r\n\r\n    <!-- BUTTONS -->\r\n\r\n    <div class=\"hero-actions\">\r\n\r\n\r\n      <!-- =================================================\r\n           BUTTON 1 \u2014 EXPLORE IOT\r\n           ================================================= -->\r\n\r\n      <a\r\n        class=\"btn btn-primary\"\r\n        id=\"iotButton\"\r\n        href=\"https:\/\/www.gimasi.com\/?page_id=5852\">\r\n\r\n        <span\r\n          class=\"btn-icon rocket-icon\"\r\n          aria-hidden=\"true\">\r\n\r\n          <svg\r\n            viewBox=\"0 0 24 24\"\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            stroke-width=\"1.8\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\">\r\n\r\n            <path\r\n              d=\"M14.5 4.5C17 2 20.5 2 22 2c0 1.5 0 5-2.5 7.5l-4 4-3-3 2-6z\">\r\n            <\/path>\r\n\r\n            <path\r\n              d=\"M8.5 8.5l-3 0.5-3 3 5 .5\">\r\n            <\/path>\r\n\r\n            <path\r\n              d=\"M15.5 15.5l-.5 3-3 3-.5-5\">\r\n            <\/path>\r\n\r\n            <circle\r\n              cx=\"17.5\"\r\n              cy=\"6.5\"\r\n              r=\"1.3\">\r\n            <\/circle>\r\n\r\n          <\/svg>\r\n\r\n        <\/span>\r\n\r\n        <span>\r\n          Explore our IoT solutions\r\n        <\/span>\r\n\r\n      <\/a>\r\n\r\n\r\n      <!-- =================================================\r\n           BUTTON 2 \u2014 EXPLORE GIOT\r\n           ================================================= -->\r\n\r\n      <a\r\n        class=\"btn btn-giot\"\r\n        href=\"https:\/\/www.gimasi.com\/?page_id=3480\">\r\n\r\n        <span\r\n          class=\"btn-icon planet-icon\"\r\n          aria-hidden=\"true\">\r\n\r\n          <svg\r\n            viewBox=\"0 0 24 24\"\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            stroke-width=\"1.7\"\r\n            stroke-linecap=\"round\">\r\n\r\n            <circle\r\n              cx=\"12\"\r\n              cy=\"12\"\r\n              r=\"8.5\">\r\n            <\/circle>\r\n\r\n            <ellipse\r\n              cx=\"12\"\r\n              cy=\"12\"\r\n              rx=\"4\"\r\n              ry=\"8.5\">\r\n            <\/ellipse>\r\n\r\n            <path\r\n              d=\"M3.7 9h16.6\">\r\n            <\/path>\r\n\r\n            <path\r\n              d=\"M3.7 15h16.6\">\r\n            <\/path>\r\n\r\n          <\/svg>\r\n\r\n        <\/span>\r\n\r\n        <span>\r\n          Explore GIoT\r\n        <\/span>\r\n\r\n      <\/a>\r\n\r\n\r\n      <!-- =================================================\r\n           BUTTON 3 \u2014 TALK TO OUR TEAM\r\n           ================================================= -->\r\n\r\n      <a\r\n        class=\"btn btn-ghost\"\r\n        href=\"https:\/\/www.gimasi.com\/?page_id=1712\">\r\n\r\n        <span\r\n          class=\"btn-icon phone-icon\"\r\n          aria-hidden=\"true\">\r\n\r\n          <svg\r\n            viewBox=\"0 0 24 24\"\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            stroke-width=\"1.8\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\">\r\n\r\n            <path\r\n              d=\"M6.5 3.5l3 2.5-2 3.5c1.2 2.6 3.3 4.7 5.9 5.9l3.5-2 2.5 3c.6.8.5 1.9-.2 2.5l-1.6 1.3c-.8.7-1.9.9-2.9.5C8.5 18.3 5.7 15.5 3.3 9.3c-.4-1-.2-2.1.5-2.9L5.1 4.8c.6-.7 1.7-.8 2.5-.2z\">\r\n            <\/path>\r\n\r\n          <\/svg>\r\n\r\n        <\/span>\r\n\r\n        <span>\r\n          Talk to our team\r\n        <\/span>\r\n\r\n      <\/a>\r\n\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n\r\n  <!-- SCROLL -->\r\n\r\n  <div class=\"hero-scroll-cue\">\r\n\r\n    <span><\/span>\r\n\r\n    scroll\r\n\r\n  <\/div>\r\n\r\n\r\n<\/section>\r\n\r\n\r\n<script>\r\n\r\n(function () {\r\n\r\n\r\n  \/* =========================================================\r\n     PARTICLE SYSTEM\r\n     ========================================================= *\/\r\n\r\n  const canvas =\r\n    document.getElementById('heroCanvas');\r\n\r\n  const grid =\r\n    document.getElementById('heroGrid');\r\n\r\n  const hero =\r\n    document.getElementById('hero');\r\n\r\n  const ctx =\r\n    canvas.getContext('2d');\r\n\r\n\r\n  let w;\r\n  let h;\r\n  let dpr;\r\n\r\n  let particles = [];\r\n\r\n\r\n  const COUNT = 80;\r\n\r\n  const LINK_DIST = 140;\r\n\r\n  const MOUSE_RADIUS = 170;\r\n\r\n\r\n  const mouse = {\r\n\r\n    x: -9999,\r\n\r\n    y: -9999,\r\n\r\n    active: false\r\n\r\n  };\r\n\r\n\r\n  \/* =========================================================\r\n     RESIZE\r\n     ========================================================= *\/\r\n\r\n  function resize() {\r\n\r\n    dpr =\r\n      Math.min(\r\n        window.devicePixelRatio || 1,\r\n        2\r\n      );\r\n\r\n    w =\r\n      hero.clientWidth;\r\n\r\n    h =\r\n      hero.clientHeight;\r\n\r\n\r\n    canvas.width =\r\n      w * dpr;\r\n\r\n    canvas.height =\r\n      h * dpr;\r\n\r\n\r\n    canvas.style.width =\r\n      w + 'px';\r\n\r\n    canvas.style.height =\r\n      h + 'px';\r\n\r\n\r\n    ctx.setTransform(\r\n      dpr,\r\n      0,\r\n      0,\r\n      dpr,\r\n      0,\r\n      0\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/* =========================================================\r\n     CREATE PARTICLES\r\n     ========================================================= *\/\r\n\r\n  function makeParticles() {\r\n\r\n    particles = [];\r\n\r\n\r\n    for (\r\n      let i = 0;\r\n      i < COUNT;\r\n      i++\r\n    ) {\r\n\r\n      particles.push({\r\n\r\n        x:\r\n          Math.random() * w,\r\n\r\n        y:\r\n          Math.random() * h,\r\n\r\n        vx:\r\n          (Math.random() - 0.5) * 0.35,\r\n\r\n        vy:\r\n          (Math.random() - 0.5) * 0.35,\r\n\r\n        r:\r\n          1.3 +\r\n          Math.random() * 1.4\r\n\r\n      });\r\n\r\n    }\r\n\r\n  }\r\n\r\n\r\n  \/* =========================================================\r\n     ANIMATION\r\n     ========================================================= *\/\r\n\r\n  function step() {\r\n\r\n    ctx.clearRect(\r\n      0,\r\n      0,\r\n      w,\r\n      h\r\n    );\r\n\r\n\r\n    for (const p of particles) {\r\n\r\n      p.x += p.vx;\r\n\r\n      p.y += p.vy;\r\n\r\n\r\n      if (\r\n        p.x < 0 ||\r\n        p.x > w\r\n      ) {\r\n\r\n        p.vx *= -1;\r\n\r\n      }\r\n\r\n\r\n      if (\r\n        p.y < 0 ||\r\n        p.y > h\r\n      ) {\r\n\r\n        p.vy *= -1;\r\n\r\n      }\r\n\r\n\r\n      if (mouse.active) {\r\n\r\n        const dx =\r\n          p.x - mouse.x;\r\n\r\n        const dy =\r\n          p.y - mouse.y;\r\n\r\n        const dist =\r\n          Math.hypot(dx, dy);\r\n\r\n\r\n        if (\r\n          dist <\r\n          MOUSE_RADIUS &&\r\n          dist >\r\n          0.01\r\n        ) {\r\n\r\n          const force =\r\n            (\r\n              MOUSE_RADIUS -\r\n              dist\r\n            ) \/\r\n            MOUSE_RADIUS;\r\n\r\n\r\n          p.x +=\r\n            (dx \/ dist) *\r\n            force *\r\n            1.7;\r\n\r\n\r\n          p.y +=\r\n            (dy \/ dist) *\r\n            force *\r\n            1.7;\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n\r\n    \/* =======================================================\r\n       CONNECTION LINES\r\n       ======================================================= *\/\r\n\r\n    for (\r\n      let i = 0;\r\n      i < particles.length;\r\n      i++\r\n    ) {\r\n\r\n      for (\r\n        let j = i + 1;\r\n        j < particles.length;\r\n        j++\r\n      ) {\r\n\r\n        const a =\r\n          particles[i];\r\n\r\n        const b =\r\n          particles[j];\r\n\r\n\r\n        const dist =\r\n          Math.hypot(\r\n            a.x - b.x,\r\n            a.y - b.y\r\n          );\r\n\r\n\r\n        if (\r\n          dist <\r\n          LINK_DIST\r\n        ) {\r\n\r\n          ctx.strokeStyle =\r\n            `rgba(\r\n              150,\r\n              226,\r\n              255,\r\n              ${0.20 *\r\n              (1 -\r\n              dist \/\r\n              LINK_DIST)}\r\n            )`;\r\n\r\n          ctx.lineWidth = 1;\r\n\r\n          ctx.beginPath();\r\n\r\n          ctx.moveTo(\r\n            a.x,\r\n            a.y\r\n          );\r\n\r\n          ctx.lineTo(\r\n            b.x,\r\n            b.y\r\n          );\r\n\r\n          ctx.stroke();\r\n\r\n        }\r\n\r\n\r\n        if (mouse.active) {\r\n\r\n          const mouseDist =\r\n            Math.hypot(\r\n              particles[i].x -\r\n              mouse.x,\r\n\r\n              particles[i].y -\r\n              mouse.y\r\n            );\r\n\r\n\r\n          if (\r\n            mouseDist <\r\n            MOUSE_RADIUS\r\n          ) {\r\n\r\n            ctx.strokeStyle =\r\n              `rgba(\r\n                150,\r\n                238,\r\n                255,\r\n                ${0.10 *\r\n                (\r\n                  1 -\r\n                  mouseDist \/\r\n                  MOUSE_RADIUS\r\n                )}\r\n              )`;\r\n\r\n            ctx.lineWidth =\r\n              1.1;\r\n\r\n            ctx.beginPath();\r\n\r\n            ctx.moveTo(\r\n              particles[i].x,\r\n              particles[i].y\r\n            );\r\n\r\n            ctx.lineTo(\r\n              mouse.x,\r\n              mouse.y\r\n            );\r\n\r\n            ctx.stroke();\r\n\r\n          }\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n\r\n    \/* =======================================================\r\n       PARTICLE GLOW\r\n       ======================================================= *\/\r\n\r\n    ctx.shadowBlur = 6;\r\n\r\n    ctx.shadowColor =\r\n      'rgba(150, 226, 255, 0.9)';\r\n\r\n    ctx.fillStyle =\r\n      'rgba(220, 245, 255, 0.95)';\r\n\r\n\r\n    for (const p of particles) {\r\n\r\n      ctx.beginPath();\r\n\r\n      ctx.arc(\r\n        p.x,\r\n        p.y,\r\n        p.r,\r\n        0,\r\n        Math.PI * 2\r\n      );\r\n\r\n      ctx.fill();\r\n\r\n    }\r\n\r\n\r\n    ctx.shadowBlur = 0;\r\n\r\n\r\n    requestAnimationFrame(step);\r\n\r\n  }\r\n\r\n\r\n  \/* =========================================================\r\n     MOUSE\r\n     ========================================================= *\/\r\n\r\n  hero.addEventListener(\r\n    'mousemove',\r\n    function (e) {\r\n\r\n      const rect =\r\n        hero.getBoundingClientRect();\r\n\r\n\r\n      mouse.x =\r\n        e.clientX -\r\n        rect.left;\r\n\r\n\r\n      mouse.y =\r\n        e.clientY -\r\n        rect.top;\r\n\r\n\r\n      mouse.active = true;\r\n\r\n\r\n      grid.style.setProperty(\r\n        '--mx',\r\n        mouse.x + 'px'\r\n      );\r\n\r\n\r\n      grid.style.setProperty(\r\n        '--my',\r\n        mouse.y + 'px'\r\n      );\r\n\r\n    }\r\n  );\r\n\r\n\r\n  hero.addEventListener(\r\n    'mouseleave',\r\n    function () {\r\n\r\n      mouse.active = false;\r\n\r\n    }\r\n  );\r\n\r\n\r\n  \/* =========================================================\r\n     WINDOW RESIZE\r\n     ========================================================= *\/\r\n\r\n  window.addEventListener(\r\n    'resize',\r\n    resize\r\n  );\r\n\r\n\r\n  resize();\r\n\r\n  makeParticles();\r\n\r\n\r\n  \/* =========================================================\r\n     START ANIMATION\r\n     ========================================================= *\/\r\n\r\n  const prefersReducedMotion =\r\n    window.matchMedia(\r\n      '(prefers-reduced-motion: reduce)'\r\n    ).matches;\r\n\r\n\r\n  if (!prefersReducedMotion) {\r\n\r\n    requestAnimationFrame(step);\r\n\r\n  } else {\r\n\r\n    step();\r\n\r\n  }\r\n\r\n\r\n  \/* =========================================================\r\n     ROCKET CLICK ANIMATION\r\n     ========================================================= *\/\r\n\r\n  const iotButton =\r\n    document.getElementById(\r\n      'iotButton'\r\n    );\r\n\r\n\r\n  iotButton.addEventListener(\r\n    'click',\r\n    function () {\r\n\r\n      \/*\r\n       * L'animazione parte immediatamente.\r\n       * Il link continua normalmente verso\r\n       * la pagina indicata nell'href.\r\n       *\/\r\n\r\n      iotButton.classList.add(\r\n        'launching'\r\n      );\r\n      void this.offsetWidth;\r\n      this.classList.add('launching');\r\n      setTimeout()\r\n\r\n    }\r\n  );\r\n\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ef70d91 e-con-full e-flex e-con e-parent\" data-id=\"ef70d91\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8cb02fd elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"8cb02fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d207b75 e-flex e-con-boxed e-con e-parent\" data-id=\"d207b75\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f0e763a e-con-full e-flex e-con e-child\" data-id=\"f0e763a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-329b861 elementor-widget-mobile__width-initial elementor-widget elementor-widget-heading\" data-id=\"329b861\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">One team.\nThe full IoT stack<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98d47f4 elementor-widget-mobile__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"98d47f4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Hardware, firmware, cloud and production teams work together throughout the project, keeping technical decisions coordinated and responsibility clear at every stage.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e154ed elementor-widget elementor-widget-menu-anchor\" data-id=\"3e154ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"WHAT\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d4c4bf7 e-con-full e-flex e-con e-child\" data-id=\"d4c4bf7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9044695 elementor-widget elementor-widget-video\" data-id=\"9044695\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;mute&quot;:&quot;yes&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/v3.mp4\" autoplay=\"\" controls=\"\" muted=\"muted\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f6865c7 e-con-full e-flex e-con e-parent\" data-id=\"f6865c7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9d1592c elementor-widget elementor-widget-html\" data-id=\"9d1592c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n\r\n  <meta charset=\"utf-8\">\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n\r\n  <title>Gimasi Production Timeline<\/title>\r\n\r\n  <style>\r\n\r\n    :root {\r\n      --ink: #162235;\r\n      --muted: #657386;\r\n\r\n      --line: #c7d1dc;\r\n\r\n      --surface: #ffffff;\r\n      --surface-soft: #f7f9fc;\r\n\r\n      --accent: #2f6f9f;\r\n      --accent-soft: #dcecf7;\r\n\r\n      --card-width: 258px;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       RESET\r\n    ================================= *\/\r\n\r\n    * {\r\n      box-sizing: border-box;\r\n    }\r\n\r\n    body {\r\n      margin: 0;\r\n      background: #ffffff;\r\n\r\n      font-family:\r\n        Arial,\r\n        Helvetica,\r\n        sans-serif;\r\n\r\n      color: var(--ink);\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       MAIN SECTION\r\n    ================================= *\/\r\n\r\n    .timeline-wrap {\r\n\r\n      position: relative;\r\n\r\n      width: min(2000px, 80vw);\r\n\r\n      margin: 0 auto;\r\n\r\n      padding:\r\n        90px\r\n        40px\r\n        110px;\r\n\r\n      overflow: hidden;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       BACKGROUND DOTS\r\n    ================================= *\/\r\n\r\n    .timeline-wrap::before {\r\n\r\n      content: \"\";\r\n\r\n      position: absolute;\r\n\r\n      inset: 0;\r\n\r\n      background-image:\r\n        radial-gradient(\r\n          var(--line) 1px,\r\n          transparent 1px\r\n        );\r\n\r\n      background-size: 26px 26px;\r\n\r\n      opacity: 0.3;\r\n\r\n      mask-image:\r\n        radial-gradient(\r\n          ellipse at center,\r\n          #000 55%,\r\n          transparent 92%\r\n        );\r\n\r\n      pointer-events: none;\r\n\r\n      z-index: 0;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       MAP\r\n    ================================= *\/\r\n\r\n    .map {\r\n\r\n      position: relative;\r\n\r\n      z-index: 1;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       ARROWS \/ CONNECTING LINES\r\n    ================================= *\/\r\n\r\n    .map-arrows {\r\n\r\n      position: absolute;\r\n\r\n      inset: 0;\r\n\r\n      width: 100%;\r\n      height: 100%;\r\n\r\n      overflow: visible;\r\n\r\n      pointer-events: none;\r\n\r\n      z-index: 0;\r\n    }\r\n\r\n\r\n    \/*\r\n      IMPORTANT:\r\n      No arrowheads.\r\n      Just clean curved lines.\r\n    *\/\r\n\r\n    .map-arrows path {\r\n\r\n      fill: none;\r\n\r\n      stroke: var(--line);\r\n\r\n      stroke-width: 2;\r\n\r\n      stroke-linecap: round;\r\n\r\n      stroke-linejoin: round;\r\n\r\n      opacity: 0.9;\r\n\r\n      transition:\r\n        stroke 0.3s ease,\r\n        opacity 0.3s ease;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       ROW\r\n    ================================= *\/\r\n\r\n    .map-row {\r\n\r\n      position: relative;\r\n\r\n      z-index: 1;\r\n\r\n      display: flex;\r\n\r\n      align-items: flex-start;\r\n\r\n      justify-content: space-between;\r\n\r\n      gap: 20px;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       NODE\r\n    ================================= *\/\r\n\r\n    .map-node {\r\n\r\n      position: relative;\r\n\r\n      width: var(--card-width);\r\n\r\n      flex:\r\n        0 0\r\n        var(--card-width);\r\n\r\n      opacity: 0;\r\n\r\n      transform:\r\n        translateY(14px)\r\n        scale(0.94);\r\n\r\n      transition:\r\n        opacity 0.6s ease,\r\n        transform 0.6s ease;\r\n    }\r\n\r\n\r\n    \/* entrance animation *\/\r\n\r\n    .map-row.in-view .map-node {\r\n\r\n      opacity: 1;\r\n\r\n      transform:\r\n        translateY(0)\r\n        scale(1);\r\n    }\r\n\r\n\r\n    .map-row.in-view .map-node.n1 {\r\n      transition-delay: 0s;\r\n    }\r\n\r\n    .map-row.in-view .map-node.n2 {\r\n      transition-delay: 0.25s;\r\n    }\r\n\r\n    .map-row.in-view .map-node.n3 {\r\n      transition-delay: 0.5s;\r\n    }\r\n\r\n    .map-row.in-view .map-node.n4 {\r\n      transition-delay: 0.75s;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       WAVY POSITION\r\n    ================================= *\/\r\n\r\n    .map-node.n1 {\r\n      margin-top: 0;\r\n    }\r\n\r\n    .map-node.n2 {\r\n      margin-top: 150px;\r\n    }\r\n\r\n    .map-node.n3 {\r\n      margin-top: 26px;\r\n    }\r\n\r\n    .map-node.n4 {\r\n      margin-top: 176px;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       NUMBER BADGE\r\n    ================================= *\/\r\n\r\n    .node-badge {\r\n\r\n      position: absolute;\r\n\r\n      top: -16px;\r\n\r\n      left: 18px;\r\n\r\n      width: 34px;\r\n      height: 34px;\r\n\r\n      border-radius: 50%;\r\n\r\n      background: var(--accent);\r\n\r\n      color: #ffffff;\r\n\r\n      font-size: 14px;\r\n\r\n      font-weight: 700;\r\n\r\n      display: flex;\r\n\r\n      align-items: center;\r\n\r\n      justify-content: center;\r\n\r\n      box-shadow:\r\n        0 6px 14px\r\n        rgba(47,111,159,0.35),\r\n\r\n        0 0 0 4px #ffffff;\r\n\r\n      z-index: 2;\r\n\r\n      transition:\r\n        transform 0.25s ease,\r\n        box-shadow 0.25s ease;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       CARD\r\n    ================================= *\/\r\n\r\n    .card {\r\n\r\n      position: relative;\r\n\r\n      padding:\r\n        22px\r\n        18px\r\n        18px;\r\n\r\n      border:\r\n        1px solid\r\n        #e1e7ee;\r\n\r\n      border-radius: 16px;\r\n\r\n      background: var(--surface);\r\n\r\n      box-shadow:\r\n        0 10px 24px\r\n        rgba(22,34,53,0.08);\r\n\r\n      transition:\r\n        transform 0.28s ease,\r\n        box-shadow 0.28s ease,\r\n        border-color 0.28s ease;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       DESKTOP HOVER\r\n    ================================= *\/\r\n\r\n    @media (hover: hover) and (pointer: fine) {\r\n\r\n      .map-node:hover .card {\r\n\r\n        transform:\r\n          translateY(-5px)\r\n          scale(1.025);\r\n\r\n        box-shadow:\r\n          0 18px 32px\r\n          rgba(22,34,53,0.14);\r\n\r\n        border-color:\r\n          rgba(47,111,159,0.35);\r\n      }\r\n\r\n\r\n      .map-node:hover .node-badge {\r\n\r\n        transform: scale(1.08);\r\n\r\n        box-shadow:\r\n          0 8px 18px\r\n          rgba(47,111,159,0.40),\r\n\r\n          0 0 0 4px #ffffff;\r\n      }\r\n\r\n\r\n      .map-node:hover .title-box {\r\n\r\n        background:\r\n          var(--accent);\r\n\r\n        color:\r\n          #ffffff;\r\n      }\r\n\r\n\r\n      .map-node:hover\r\n      .map-arrows path {\r\n\r\n        stroke:\r\n          var(--accent);\r\n      }\r\n\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       TITLE\r\n    ================================= *\/\r\n\r\n    .title-box {\r\n\r\n      display: inline-block;\r\n\r\n      margin-bottom: 12px;\r\n\r\n      padding:\r\n        7px\r\n        10px;\r\n\r\n      border-radius: 6px;\r\n\r\n      background:\r\n        var(--surface-soft);\r\n\r\n      color:\r\n        var(--ink);\r\n\r\n      font-size: 13px;\r\n\r\n      font-weight: 600;\r\n\r\n      text-transform: uppercase;\r\n\r\n      letter-spacing: 0.5px;\r\n\r\n      transition:\r\n        background 0.25s ease,\r\n        color 0.25s ease;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       TEXT\r\n    ================================= *\/\r\n\r\n    .text-box {\r\n\r\n      margin: 0;\r\n\r\n      color:\r\n        var(--muted);\r\n\r\n      font-size: 13.5px;\r\n\r\n      line-height: 1.55;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       CTA\r\n    ================================= *\/\r\n\r\n    .cta-button {\r\n\r\n      display: inline-block;\r\n\r\n      margin-top: 12px;\r\n\r\n      padding:\r\n        8px\r\n        12px;\r\n\r\n      font-size: 0.85rem;\r\n\r\n      font-weight: 600;\r\n\r\n      text-decoration: none;\r\n\r\n      color:\r\n        var(--accent);\r\n\r\n      background:\r\n        var(--accent-soft);\r\n\r\n      border-radius: 5px;\r\n\r\n      transition:\r\n        background 0.2s ease,\r\n        color 0.2s ease,\r\n        transform 0.2s ease;\r\n    }\r\n\r\n\r\n    .cta-button:hover {\r\n\r\n      background:\r\n        var(--accent);\r\n\r\n      color:\r\n        #ffffff;\r\n\r\n      transform:\r\n        translateY(-1px);\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       ACCESSIBILITY\r\n    ================================= *\/\r\n\r\n    .card:focus-visible,\r\n    .cta-button:focus-visible {\r\n\r\n      outline:\r\n        2px solid\r\n        var(--accent);\r\n\r\n      outline-offset:\r\n        4px;\r\n    }\r\n\r\n\r\n    \/* ================================\r\n       REDUCED MOTION\r\n    ================================= *\/\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n\r\n      .map-node,\r\n      .card,\r\n      .node-badge,\r\n      .title-box,\r\n      .cta-button {\r\n\r\n        transition: none !important;\r\n      }\r\n\r\n      .map-row .map-node {\r\n\r\n        opacity: 1 !important;\r\n\r\n        transform:\r\n          none !important;\r\n      }\r\n\r\n      .map-arrows path {\r\n\r\n        transition: none !important;\r\n      }\r\n    }\r\n\r\n\r\n    \/* ==================================================\r\n       TABLET\r\n    ================================================== *\/\r\n\r\n    @media (max-width: 1100px) {\r\n\r\n      .timeline-wrap {\r\n\r\n        width: 100%;\r\n\r\n        padding:\r\n          70px\r\n          25px\r\n          90px;\r\n      }\r\n\r\n\r\n      .map-row {\r\n\r\n        gap: 14px;\r\n      }\r\n\r\n\r\n      .map-node {\r\n\r\n        width: 22%;\r\n\r\n        flex:\r\n          0 0\r\n          22%;\r\n      }\r\n\r\n\r\n      .map-node.n2 {\r\n\r\n        margin-top: 110px;\r\n      }\r\n\r\n\r\n      .map-node.n4 {\r\n\r\n        margin-top: 130px;\r\n      }\r\n\r\n\r\n      .card {\r\n\r\n        padding:\r\n          20px\r\n          15px\r\n          16px;\r\n      }\r\n\r\n\r\n      .title-box {\r\n\r\n        font-size: 11px;\r\n      }\r\n\r\n\r\n      .text-box {\r\n\r\n        font-size: 12.5px;\r\n\r\n        line-height: 1.5;\r\n      }\r\n    }\r\n\r\n\r\n    \/* ==================================================\r\n       MOBILE\r\n    ================================================== *\/\r\n\r\n    @media (max-width: 900px) {\r\n\r\n      .timeline-wrap {\r\n\r\n        width: 100%;\r\n\r\n        padding:\r\n          50px\r\n          20px\r\n          70px;\r\n      }\r\n\r\n\r\n      \/*\r\n        Hide desktop connecting SVG.\r\n        On mobile the cards become\r\n        a simple vertical flow.\r\n      *\/\r\n\r\n      .map-arrows {\r\n\r\n        display: none;\r\n      }\r\n\r\n\r\n      .map-row {\r\n\r\n        flex-direction: column;\r\n\r\n        gap: 28px;\r\n      }\r\n\r\n\r\n      .map-node {\r\n\r\n        width: 100%;\r\n\r\n        flex:\r\n          none;\r\n\r\n        margin-top: 0 !important;\r\n\r\n        opacity: 1;\r\n\r\n        transform: none;\r\n      }\r\n\r\n\r\n      \/*\r\n        Small vertical connector\r\n        between cards.\r\n      *\/\r\n\r\n      .map-node:not(:last-child)::after {\r\n\r\n        content: \"\";\r\n\r\n        display: block;\r\n\r\n        width: 2px;\r\n\r\n        height: 28px;\r\n\r\n        background:\r\n          var(--line);\r\n\r\n        margin:\r\n          8px 0 0 34px;\r\n      }\r\n\r\n\r\n      .card {\r\n\r\n        padding:\r\n          24px\r\n          20px\r\n          20px;\r\n\r\n        border-radius: 14px;\r\n      }\r\n\r\n\r\n      .title-box {\r\n\r\n        font-size: 12px;\r\n      }\r\n\r\n\r\n      .text-box {\r\n\r\n        font-size: 14px;\r\n\r\n        line-height: 1.6;\r\n      }\r\n\r\n\r\n      \/*\r\n        No floating animation on mobile.\r\n      *\/\r\n\r\n      .map-row .map-node {\r\n\r\n        animation: none !important;\r\n      }\r\n    }\r\n\r\n\r\n    \/* ==================================================\r\n       SMALL MOBILE\r\n    ================================================== *\/\r\n\r\n    @media (max-width: 480px) {\r\n\r\n      .timeline-wrap {\r\n\r\n        padding:\r\n          40px\r\n          15px\r\n          55px;\r\n      }\r\n\r\n\r\n      .card {\r\n\r\n        padding:\r\n          22px\r\n          17px\r\n          18px;\r\n      }\r\n\r\n\r\n      .node-badge {\r\n\r\n        width: 31px;\r\n\r\n        height: 31px;\r\n\r\n        left: 14px;\r\n\r\n        top: -14px;\r\n\r\n        font-size: 13px;\r\n      }\r\n\r\n\r\n      .title-box {\r\n\r\n        font-size: 11px;\r\n\r\n        padding:\r\n          6px\r\n          9px;\r\n      }\r\n\r\n\r\n      .text-box {\r\n\r\n        font-size: 13.5px;\r\n      }\r\n    }\r\n\r\n  <\/style>\r\n\r\n<\/head>\r\n\r\n\r\n<body>\r\n\r\n\r\n<section\r\n  class=\"timeline-wrap\"\r\n  id=\"timelineWrap\"\r\n>\r\n\r\n\r\n  <div\r\n    class=\"map\"\r\n    id=\"map\"\r\n  >\r\n\r\n\r\n    <!-- ==========================================\r\n         CURVED CONNECTING LINES\r\n         NO ARROWHEADS\r\n    =========================================== -->\r\n\r\n    <svg\r\n      class=\"map-arrows\"\r\n      id=\"mapArrows\"\r\n      aria-hidden=\"true\"\r\n    >\r\n\r\n      <path\r\n        id=\"arrow-1\"\r\n      ><\/path>\r\n\r\n      <path\r\n        id=\"arrow-2\"\r\n      ><\/path>\r\n\r\n      <path\r\n        id=\"arrow-3\"\r\n      ><\/path>\r\n\r\n    <\/svg>\r\n\r\n\r\n    <!-- ==========================================\r\n         TIMELINE\r\n    =========================================== -->\r\n\r\n    <div\r\n      class=\"map-row\"\r\n      id=\"mapRow\"\r\n    >\r\n\r\n\r\n      <!-- ================================\r\n           STEP 1\r\n      ================================= -->\r\n\r\n      <div class=\"map-node n1\">\r\n\r\n        <span class=\"node-badge\">\r\n          1\r\n        <\/span>\r\n\r\n        <div class=\"card\">\r\n\r\n          <div class=\"title-box\">\r\n            LISTEN &amp; ASSESS\r\n          <\/div>\r\n\r\n          <p class=\"text-box\">\r\n\r\n          We review your existing technology, IoT application, and business constraints to identify the most suitable approach. If an upgrade would not create real value, however, we say so.\r\n          <\/p>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <!-- ================================\r\n           STEP 2\r\n      ================================= -->\r\n\r\n      <div class=\"map-node n2\">\r\n\r\n        <span class=\"node-badge\">\r\n          2\r\n        <\/span>\r\n\r\n        <div class=\"card\">\r\n\r\n          <div class=\"title-box\">\r\n            DESIGN &amp; PROTOTYPE\r\n          <\/div>\r\n\r\n          <p class=\"text-box\">\r\nWe design the PCB and develop the embedded firmware and enclosure in-house, building and refining each IoT prototype around your requirements. Meanwhile, integration with the GIoT Cloud Platform or your existing cloud infrastructure is considered from the start.\r\n          <\/p>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <!-- ================================\r\n           STEP 3\r\n      ================================= -->\r\n\r\n      <div class=\"map-node n3\">\r\n\r\n        <span class=\"node-badge\">\r\n          3\r\n        <\/span>\r\n\r\n        <div class=\"card\">\r\n\r\n          <div class=\"title-box\">\r\n            TEST &amp; CERTIFICATIONS\r\n          <\/div>\r\n\r\n          <p class=\"text-box\">\r\nBefore production, each IoT device undergoes functional testing and the required certification processes. As a result, potential issues can be identified before deployment while compliance and reliability are verified.\r\n          <\/p>\r\n\r\n\r\n          <a\r\n            class=\"cta-button\"\r\n            href=\"https:\/\/www.gimasi.com\/?page_id=3643\"\r\n            target=\"_blank\"\r\n            rel=\"noopener\"\r\n          >\r\n\r\n            View Compliance & Certificatins\r\n\r\n          <\/a>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <!-- ================================\r\n           STEP 4\r\n      ================================= -->\r\n\r\n      <div class=\"map-node n4\">\r\n\r\n        <span class=\"node-badge\">\r\n          4\r\n        <\/span>\r\n\r\n        <div class=\"card\">\r\n\r\n          <div class=\"title-box\">\r\n            PRODUCTION &amp; POST SALE SUPPORT\r\n          <\/div>\r\n\r\n          <p class=\"text-box\">\r\nWe manage SMT assembly, IoT device production, and quality control in Switzerland. After delivery, we also provide technical support, firmware updates, and FOTA management when required.\r\n\r\n          <\/p>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n<\/section>\r\n\r\n\r\n\r\n<script>\r\n\r\n(function () {\r\n\r\n  const map =\r\n    document.getElementById(\"map\");\r\n\r\n  const row =\r\n    document.getElementById(\"mapRow\");\r\n\r\n  const nodes =\r\n    Array.from(\r\n      row.querySelectorAll(\".map-node\")\r\n    );\r\n\r\n\r\n  const paths = [\r\n\r\n    document.getElementById(\"arrow-1\"),\r\n\r\n    document.getElementById(\"arrow-2\"),\r\n\r\n    document.getElementById(\"arrow-3\")\r\n\r\n  ];\r\n\r\n\r\n  \/*\r\n    Different curvature for each connection.\r\n  *\/\r\n\r\n  const curl = [\r\n    65,\r\n    -85,\r\n    55\r\n  ];\r\n\r\n\r\n  \/* ==========================================\r\n     BUILD CURVED CONNECTIONS\r\n  =========================================== *\/\r\n\r\n  function buildArrows() {\r\n\r\n    if (window.innerWidth <= 900) {\r\n      return;\r\n    }\r\n\r\n\r\n    const mapRect =\r\n      map.getBoundingClientRect();\r\n\r\n\r\n    for (\r\n      let i = 0;\r\n      i < paths.length;\r\n      i++\r\n    ) {\r\n\r\n      const cardA =\r\n        nodes[i].querySelector(\".card\");\r\n\r\n      const cardB =\r\n        nodes[i + 1].querySelector(\".card\");\r\n\r\n\r\n      const rectA =\r\n        cardA.getBoundingClientRect();\r\n\r\n      const rectB =\r\n        cardB.getBoundingClientRect();\r\n\r\n\r\n      \/*\r\n        Start slightly inside\r\n        the right edge.\r\n      *\/\r\n\r\n      const x1 =\r\n        rectA.right -\r\n        mapRect.left -\r\n        3;\r\n\r\n\r\n      const y1 =\r\n        rectA.top -\r\n        mapRect.top +\r\n        rectA.height \/ 2;\r\n\r\n\r\n      \/*\r\n        End slightly inside\r\n        the left edge.\r\n      *\/\r\n\r\n      const x2 =\r\n        rectB.left -\r\n        mapRect.left +\r\n        3;\r\n\r\n\r\n      const y2 =\r\n        rectB.top -\r\n        mapRect.top +\r\n        rectB.height \/ 2;\r\n\r\n\r\n      const dx =\r\n        x2 - x1;\r\n\r\n\r\n      const c =\r\n        curl[i];\r\n\r\n\r\n      const c1x =\r\n        x1 + dx * 0.35;\r\n\r\n\r\n      const c1y =\r\n        y1 + c;\r\n\r\n\r\n      const c2x =\r\n        x1 + dx * 0.65;\r\n\r\n\r\n      const c2y =\r\n        y2 - c * 0.4;\r\n\r\n\r\n      \/*\r\n        Smooth B\u00e9zier curve.\r\n      *\/\r\n\r\n      const d =\r\n        `M ${x1},${y1}\r\n         C ${c1x},${c1y}\r\n           ${c2x},${c2y}\r\n           ${x2},${y2}`;\r\n\r\n\r\n      paths[i].setAttribute(\r\n        \"d\",\r\n        d\r\n      );\r\n\r\n\r\n      \/*\r\n        Animate the line\r\n        drawing itself.\r\n      *\/\r\n\r\n      const length =\r\n        paths[i].getTotalLength();\r\n\r\n\r\n      paths[i].style.strokeDasharray =\r\n        length;\r\n\r\n      if (\r\n        !paths[i].dataset.revealed\r\n      ) {\r\n\r\n        paths[i].style.strokeDashoffset =\r\n          length;\r\n      }\r\n\r\n    }\r\n\r\n  }\r\n\r\n\r\n  \/* ==========================================\r\n     REVEAL LINE\r\n  =========================================== *\/\r\n\r\n  function revealArrow(\r\n    index,\r\n    delay\r\n  ) {\r\n\r\n    const path =\r\n      paths[index];\r\n\r\n\r\n    setTimeout(\r\n      function () {\r\n\r\n        path.style.transition =\r\n          \"stroke-dashoffset 0.9s ease\";\r\n\r\n\r\n        path.style.strokeDashoffset =\r\n          \"0\";\r\n\r\n\r\n        path.dataset.revealed =\r\n          \"1\";\r\n\r\n      },\r\n      delay\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/* ==========================================\r\n     RESIZE\r\n  =========================================== *\/\r\n\r\n  let resizeTimer;\r\n\r\n\r\n  window.addEventListener(\r\n    \"resize\",\r\n    function () {\r\n\r\n      clearTimeout(\r\n        resizeTimer\r\n      );\r\n\r\n\r\n      resizeTimer =\r\n        setTimeout(\r\n          buildArrows,\r\n          150\r\n        );\r\n\r\n    }\r\n  );\r\n\r\n\r\n  window.addEventListener(\r\n    \"load\",\r\n    buildArrows\r\n  );\r\n\r\n\r\n  setTimeout(\r\n    buildArrows,\r\n    300\r\n  );\r\n\r\n\r\n  \/* ==========================================\r\n     SCROLL REVEAL\r\n  =========================================== *\/\r\n\r\n  const observer =\r\n    new IntersectionObserver(\r\n      function (entries) {\r\n\r\n        entries.forEach(\r\n          function (entry) {\r\n\r\n            if (\r\n              entry.isIntersecting\r\n            ) {\r\n\r\n              buildArrows();\r\n\r\n\r\n              row.classList.add(\r\n                \"in-view\"\r\n              );\r\n\r\n\r\n              revealArrow(\r\n                0,\r\n                350\r\n              );\r\n\r\n\r\n              revealArrow(\r\n                1,\r\n                700\r\n              );\r\n\r\n\r\n              revealArrow(\r\n                2,\r\n                1050\r\n              );\r\n\r\n\r\n              observer.disconnect();\r\n\r\n            }\r\n\r\n          }\r\n        );\r\n\r\n      },\r\n      {\r\n        threshold: 0.2\r\n      }\r\n    );\r\n\r\n\r\n  observer.observe(map);\r\n\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n\r\n<\/body>\r\n\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f635e2a e-con-full e-flex e-con e-parent\" data-id=\"f635e2a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ba2a94c elementor-widget elementor-widget-heading\" data-id=\"ba2a94c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">TRUSTED COLLABS<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-988a5fa elementor-widget elementor-widget-heading\" data-id=\"988a5fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Partners who shape our journey<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5e7ce27 e-flex e-con-boxed e-con e-parent\" data-id=\"5e7ce27\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f6de010 e-con-full e-flex e-con e-child\" data-id=\"f6de010\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-42e01b7 elementor-widget elementor-widget-image\" data-id=\"42e01b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"219\" height=\"130\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/hemargroup-logo-partner.png\" class=\"attachment-full size-full wp-image-11116\" alt=\"HemarGroup Partner logo - IoT Engineering\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5559a23 e-con-full e-flex e-con e-child\" data-id=\"5559a23\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2d63acc elementor-widget elementor-widget-image\" data-id=\"2d63acc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/bi-telekom-logo-01-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-image-4507\" alt=\"Deutsche Telekom logo \u2013 technology and connectivity partner - IoT Engineering\" srcset=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/bi-telekom-logo-01-150x150.jpg 150w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/elementor\/thumbs\/bi-telekom-logo-01-r61gr7nh5rcjpsl4x8mqioebxia77sc4cs3y3v6go8.jpg 100w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/elementor\/thumbs\/bi-telekom-logo-01-r61gr7ngjtybwsi9ps75gmz5eu6dvwq9evtd15xuno.jpg 50w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/elementor\/thumbs\/bi-telekom-logo-01-r61gr7nh1dgwjzrrhcjmb2ihtrv1cm0jrlnfhq4qo4.jpg 90w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e1efe50 e-con-full e-flex e-con e-child\" data-id=\"e1efe50\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-57be91b elementor-widget elementor-widget-image\" data-id=\"57be91b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"150\" height=\"109\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/Swisscom_logo.svg\" class=\"attachment-thumbnail size-thumbnail wp-image-4444\" alt=\"Swisscom Logo -strategic telecom partner of Gimasi IoT Swiss Solution IoT development partner - IoT Engineering\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7384fad e-con-full e-flex e-con e-child\" data-id=\"7384fad\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c047d5 elementor-widget elementor-widget-image\" data-id=\"0c047d5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"128\" height=\"38\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/coop_logo.svg\" class=\"attachment-full size-full wp-image-4443\" alt=\"Coop logo \u2013 retail partner collaborating with Gimasi IoT solutions IoT Engineering\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e34153d e-con-full e-flex e-con e-parent\" data-id=\"e34153d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b04c79b elementor-widget elementor-widget-menu-anchor\" data-id=\"b04c79b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"GIOT\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7144351 elementor-widget elementor-widget-html\" data-id=\"7144351\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"it\">\r\n\r\n<head>\r\n\r\n<meta charset=\"UTF-8\">\r\n\r\n<meta\r\n    name=\"viewport\"\r\n    content=\"width=device-width, initial-scale=1.0\"\r\n>\r\n\r\n<title>GIoT Cloud Platform \u2014 Gimasi SA<\/title>\r\n\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   GIoT SECTION \u2014 BASE\r\n========================================================= *\/\r\n\r\n#giot {\r\n    position: relative;\r\n    overflow: hidden;\r\n\r\n    width: 100%;\r\n    height: 100%;\r\n\r\n    padding: 80px 80px 20px 100px ;\r\n\r\n    background: #071B3A;\r\n\r\n    color: #FFFFFF;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   INTERACTIVE CANVAS\r\n   SOLO DENTRO LA SEZIONE GIOT\r\n========================================================= *\/\r\n\r\n#giot-canvas {\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    width: 10%;\r\n    height: 100%;\r\n\r\n    z-index: 0;\r\n\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n\/*\r\n   Subtle dark overlay.\r\n   Keeps the network visible but discreet.\r\n*\/\r\n\r\n#giot::after {\r\n    content: \"\";\r\n\r\n    position: center;\r\n\r\n    inset: 0;\r\n\r\n    z-index: 1;\r\n\r\n    pointer-events: none;\r\n\r\n    background:\r\n        radial-gradient(\r\n            circle at 70% 45%,\r\n            rgba(16,184,174,0.08),\r\n            transparent 42%\r\n        ),\r\n        linear-gradient(\r\n            180deg,\r\n            rgba(7,27,58,0.05),\r\n            rgba(7,27,58,0.16)\r\n        );\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CONTENT\r\n========================================================= *\/\r\n\r\n#giot .giot-wrap {\r\n    position: relative;\r\n\r\n    z-index: 2;\r\n\r\n    width: min(\r\n        1100px,\r\n        calc(100% -80px)\r\n    );\r\n\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SECTION NUMBER\r\n========================================================= *\/\r\n\r\n#giot .giot-number {\r\n    position: absolute;\r\n\r\n    top: 28px;\r\n    right: 32px;\r\n\r\n    z-index: 3;\r\n\r\n    font-family:\r\n        \"Arial\",\r\n        Arial,\r\n        monospace;\r\n\r\n    font-size: 10px;\r\n\r\n    color: rgba(255,255,255,0.45);\r\n\r\n    letter-spacing: .08em;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   GRID\r\n========================================================= *\/\r\n\r\n#giot .giot-grid {\r\n\r\n    display: grid;\r\n\r\n    grid-template-columns:\r\n        minmax(0, 1fr)\r\n        minmax(0, 1fr);\r\n\r\n    gap: 70px;\r\n\r\n    align-items: center;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   EYEBROW\r\n========================================================= *\/\r\n\r\n#giot .giot-eyebrow {\r\n\r\n    margin-bottom: 18px;\r\n\r\n    font-family:\r\n        \"Arial\",\r\n        Arial,\r\n        monospace;\r\n\r\n    font-size: 11px;\r\n\r\n    line-height: 1.4;\r\n\r\n    color: #7EE0D6;\r\n\r\n    letter-spacing: .08em;\r\n\r\n    text-transform: uppercase;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TITLE\r\n========================================================= *\/\r\n\r\n#giot .giot-title {\r\n\r\n    margin: 0;\r\n\r\n    max-width: 650px;\r\n\r\n    font-family:\r\n        Arial,\r\n        Helvetica,\r\n        sans-serif;\r\n\r\n    font-size:\r\n        clamp(\r\n            36px,\r\n            4.2vw,\r\n            58px\r\n        );\r\n\r\n    line-height: 1.04;\r\n\r\n    font-weight: 600;\r\n\r\n    letter-spacing: -.035em;\r\n\r\n    color: #FFFFFF;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   FEATURES\r\n========================================================= *\/\r\n\r\n#giot .giot-features {\r\n\r\n    list-style: none;\r\n\r\n    margin: 32px 0 0;\r\n\r\n    padding: 0;\r\n\r\n    max-width: 620px;\r\n}\r\n\r\n\r\n#giot .giot-feature {\r\n\r\n    display: grid;\r\n\r\n    grid-template-columns:\r\n        100px\r\n        minmax(0, 1fr);\r\n\r\n    gap: 18px;\r\n\r\n    padding: 15px 0;\r\n\r\n    border-top:\r\n        1px solid\r\n        rgba(255,255,255,0.14);\r\n}\r\n\r\n\r\n#giot .giot-feature:first-child {\r\n    border-top: none;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   FEATURE LABEL\r\n========================================================= *\/\r\n\r\n#giot .giot-feature-label {\r\n\r\n    font-family:\r\n        \"Courier New\",\r\n        Courier,\r\n        monospace;\r\n\r\n    font-size: 12px;\r\n\r\n    line-height: 1.4;\r\n\r\n    color: #7EE0D6;\r\n\r\n    letter-spacing: .08em;\r\n\r\n    text-transform: uppercase;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   FEATURE TEXT\r\n========================================================= *\/\r\n\r\n#giot .giot-feature-text {\r\n\r\n    font-size: 16px;\r\n\r\n    line-height: 1.5;\r\n    letter-spacing: .04em;\r\n\r\n    color:\r\n        rgba(255,255,255,0.76);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BUTTON\r\n========================================================= *\/\r\n\r\n#giot .giot-button {\r\n\r\n    display: inline-flex;\r\n\r\n    align-items: center;\r\n\r\n    gap: 9px;\r\n\r\n    margin-top: 26px;\r\n\r\n    padding:\r\n        12px\r\n        17px;\r\n\r\n    border:\r\n        1px solid\r\n        rgba(255,255,255,0.35);\r\n\r\n    border-radius: 5px;\r\n\r\n    background:\r\n        rgba(255,255,255,0.06);\r\n\r\n    color: #FFFFFF;\r\n\r\n    font-family:\r\n        Arial,\r\n        Helvetica,\r\n        sans-serif;\r\n\r\n    font-size: 13px;\r\n\r\n    font-weight: 600;\r\n\r\n    text-decoration: none;\r\n\r\n    transition:\r\n        background .2s ease,\r\n        border-color .2s ease,\r\n        transform .2s ease;\r\n}\r\n\r\n\r\n#giot .giot-button::after {\r\n\r\n    content: \"\u2192\";\r\n\r\n    font-size: 15px;\r\n\r\n    line-height: 1;\r\n\r\n    transition:\r\n        transform .2s ease;\r\n}\r\n\r\n\r\n#giot .giot-button:hover {\r\n\r\n    background:\r\n        rgba(255,255,255,0.12);\r\n\r\n    border-color:\r\n        rgba(255,255,255,0.65);\r\n\r\n    transform:\r\n        translateY(-2px);\r\n}\r\n\r\n\r\n#giot .giot-button:hover::after {\r\n\r\n    transform:\r\n        translateX(3px);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   IMAGE CONTAINER\r\n========================================================= *\/\r\n\r\n#giot .giot-image-wrapper {\r\n\r\n    position: relative;\r\n\r\n    width: 100%;\r\n\r\n    overflow: hidden;\r\n\r\n    border-radius: 7px;\r\n    \r\n    border:\r\n        1px solid\r\n        rgba(255,255,255,0.14);\r\n\r\n    background:\r\n        rgba(255,255,255,0.04);\r\n\r\n    box-shadow:\r\n        0 25px 70px\r\n        rgba(0,0,0,0.24);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   IMAGE\r\n========================================================= *\/\r\n\r\n#giot .giot-image {\r\n\r\n    display: block;\r\n\r\n    width: 150%;\r\n\r\n    height: auto;\r\n\r\n    aspect-ratio: 16 \/ 9;\r\n\r\n    object-fit: cover;\r\n\r\n    transition:\r\n        transform .5s ease;\r\n}\r\n\r\n\r\n\/*\r\n   Very subtle image movement.\r\n*\/\r\n\r\n#giot .giot-image-wrapper:hover\r\n.giot-image {\r\n\r\n    transform:\r\n        scale(1.015);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   IMAGE LIGHT EFFECT\r\n========================================================= *\/\r\n\r\n#giot .giot-image-wrapper::after {\r\n\r\n    content: \"\";\r\n\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    pointer-events: none;\r\n\r\n    background:\r\n        linear-gradient(\r\n            135deg,\r\n            rgba(16,184,174,0.08),\r\n            transparent 45%\r\n        );\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TABLET\r\n========================================================= *\/\r\n\r\n@media (max-width: 900px) {\r\n\r\n    #giot {\r\n\r\n        padding:\r\n            90px 0;\r\n    }\r\n\r\n\r\n    #giot .giot-wrap {\r\n\r\n        width:\r\n            min(\r\n                720px,\r\n                calc(100% - 40px)\r\n            );\r\n    }\r\n\r\n\r\n    #giot .giot-grid {\r\n\r\n        grid-template-columns: 1fr;\r\n\r\n        gap: 45px;\r\n    }\r\n\r\n\r\n    #giot .giot-title {\r\n\r\n        font-size:\r\n            clamp(\r\n                36px,\r\n                7vw,\r\n                50px\r\n            );\r\n    }\r\n\r\n\r\n    #giot .giot-image-wrapper {\r\n\r\n        max-width: 720px;\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MOBILE\r\n========================================================= *\/\r\n\r\n@media (max-width: 600px) {\r\n\r\n    #giot {\r\n\r\n        padding:\r\n            76px 0;\r\n    }\r\n\r\n\r\n    #giot .giot-wrap {\r\n\r\n        width:\r\n            calc(100% - 32px);\r\n    }\r\n\r\n\r\n    #giot .giot-number {\r\n\r\n        top: 20px;\r\n\r\n        right: 16px;\r\n\r\n        font-size: 9px;\r\n    }\r\n\r\n\r\n    #giot .giot-eyebrow {\r\n\r\n        font-size: 10px;\r\n    }\r\n\r\n\r\n    #giot .giot-title {\r\n\r\n        font-size:\r\n            clamp(\r\n                32px,\r\n                10vw,\r\n                42px\r\n            );\r\n\r\n        line-height: 1.07;\r\n    }\r\n\r\n\r\n    #giot .giot-features {\r\n\r\n        margin-top: 25px;\r\n    }\r\n\r\n\r\n    #giot .giot-feature {\r\n\r\n        grid-template-columns:\r\n            78px\r\n            minmax(0, 1fr);\r\n\r\n        gap: 12px;\r\n\r\n        padding:\r\n            13px 0;\r\n    }\r\n\r\n\r\n    #giot .giot-feature-label {\r\n\r\n        font-size: 9px;\r\n    }\r\n\r\n\r\n    #giot .giot-feature-text {\r\n\r\n        font-size: 13px;\r\n    }\r\n\r\n\r\n    #giot .giot-image {\r\n\r\n        aspect-ratio:\r\n            4 \/ 3;\r\n    }\r\n\r\n\r\n    #giot .giot-button {\r\n\r\n        font-size: 12px;\r\n\r\n        padding:\r\n            11px 15px;\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   REDUCED MOTION\r\n========================================================= *\/\r\n\r\n@media (\r\n    prefers-reduced-motion: reduce\r\n) {\r\n\r\n    #giot .giot-button,\r\n    #giot .giot-button::after,\r\n    #giot .giot-image {\r\n\r\n        transition: none;\r\n    }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n<\/head>\r\n\r\n\r\n<body>\r\n\r\n\r\n<!-- =======================================================\r\n     GIOT SECTION\r\n======================================================= -->\r\n\r\n<section id=\"giot\">\r\n\r\n\r\n    <!-- Interactive background -->\r\n    <canvas\r\n        id=\"giot-canvas\"\r\n        aria-hidden=\"true\">\r\n    <\/canvas>\r\n\r\n\r\n    <!-- Section number -->\r\n    <div class=\"giot-number\">\r\n        09 \/ 08\r\n    <\/div>\r\n\r\n\r\n    <div class=\"giot-wrap\">\r\n\r\n        <div class=\"giot-grid\">\r\n\r\n\r\n            <!-- =================================================\r\n                 LEFT \u2014 TEXT\r\n            ================================================== -->\r\n\r\n            <div class=\"giot-content\">\r\n\r\n\r\n                <div class=\"giot-eyebrow\">\r\n                    GIOT CLOUD PLATFORM\r\n                <\/div>\r\n\r\n\r\n                <h2 class=\"giot-title\">\r\n                    GIoT:\r\n                    Connecting the complete IoT Stack.\r\n                <\/h2>\r\n                <br>\r\n<p> GIoT brings devices, data, and operations together in one cloud environment. From real-time monitoring and device management to alerts, FOTA, and secure access, the platform helps teams manage connected assets more efficiently. In addition, its flexible architecture supports integrations with existing systems and third-party devices.<\/p>\r\n\r\n                <ul class=\"giot-features\">\r\n\r\n\r\n                    <li class=\"giot-feature\">\r\n\r\n                        <div class=\"giot-feature-label\">\r\n                            Monitor\r\n                        <\/div>\r\n\r\n                        <div class=\"giot-feature-text\">\r\n                    Real-time telemetry<br>Historical data storage<br>\r\nConfigurable dashboards<br>Live device status<br>\r\nGeolocation & Geofencing alarms\r\n\r\n                        <\/div>\r\n\r\n                    <\/li>\r\n\r\n\r\n                    <li class=\"giot-feature\">\r\n\r\n                        <div class=\"giot-feature-label\">\r\n                            connectivity\r\n                        <\/div>\r\n\r\n                        <div class=\"giot-feature-text\">\r\n                            MQTT<br>WiFi Geolocation & Geofencing<br>LoRaWAN\/ NB-IoT\/ LTE-M<br>BLE Gateway<br>FOTA\r\n\r\n                        <\/div>\r\n\r\n                    <\/li>\r\n\r\n\r\n                    <li class=\"giot-feature\">\r\n\r\n                        <div class=\"giot-feature-label\">\r\n                            Automate\r\n                        <\/div>\r\n\r\n                        <div class=\"giot-feature-text\">\r\n                           Alerts rules, email &amp; events\r\n                        <\/div>\r\n\r\n                    <\/li>\r\n\r\n\r\n                    <li class=\"giot-feature\">\r\n\r\n                        <div class=\"giot-feature-label\">\r\n                            Security\r\n                        <\/div>\r\n\r\n                        <div class=\"giot-feature-text\">\r\n                            Multi-tenant architecture<br>Role-based access control<br>API authentication\r\n\r\n                        <\/div>\r\n\r\n                    <\/li>\r\n\r\n\r\n                <\/ul>\r\n\r\n\r\n                <a\r\n                    href=\"https:\/\/www.gimasi.com\/?page_id=3480\"\r\n                    class=\"giot-button\">\r\n\r\n                    Discover GIoT\r\n\r\n                <\/a>\r\n\r\n\r\n            <\/div>\r\n\r\n\r\n            <!-- =================================================\r\n                 RIGHT \u2014 IMAGE\r\n            ================================================== -->\r\n\r\n            <div class=\"giot-image-wrapper\">\r\n\r\n                <img decoding=\"async\"\r\n                    class=\"giot-image\"\r\n                    src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/08\/Site-Banner-Background-54.jpg\"\r\n                    alt=\"GIoT Cloud Platform\"\r\n                    loading=\"lazy\"\r\n                >\r\n\r\n            <\/div>\r\n\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/section>\r\n\r\n\r\n\r\n<script>\r\n\r\n\/* =========================================================\r\n   GIoT INTERACTIVE BACKGROUND\r\n   THIS EFFECT EXISTS ONLY INSIDE #giot\r\n========================================================= *\/\r\n\r\n(function () {\r\n\r\n    \"use strict\";\r\n\r\n\r\n    const section =\r\n        document.getElementById(\"giot\");\r\n\r\n    const canvas =\r\n        document.getElementById(\"giot-canvas\");\r\n\r\n\r\n    if (!section || !canvas) {\r\n        return;\r\n    }\r\n\r\n\r\n    const ctx =\r\n        canvas.getContext(\"2d\");\r\n\r\n\r\n    if (!ctx) {\r\n        return;\r\n    }\r\n\r\n\r\n    let width = 0;\r\n    let height = 0;\r\n\r\n    let nodes = [];\r\n\r\n    let animationFrame;\r\n\r\n\r\n    \/*\r\n       Mouse coordinates relative\r\n       to the GIoT section.\r\n    *\/\r\n\r\n    const mouse = {\r\n\r\n        x: 0,\r\n        y: 0,\r\n\r\n        active: false\r\n\r\n    };\r\n\r\n\r\n    const MAX_DPR = 2;\r\n\r\n\r\n    \/* =====================================================\r\n       CREATE NODES\r\n    ===================================================== *\/\r\n\r\n    function createNodes() {\r\n\r\n        const area =\r\n            width * height;\r\n\r\n\r\n        let count =\r\n            Math.floor(\r\n                area \/ 17000\r\n            );\r\n\r\n\r\n        \/*\r\n           Keep performance under control.\r\n        *\/\r\n\r\n        count =\r\n            Math.max(\r\n                24,\r\n                Math.min(\r\n                    count,\r\n                    80\r\n                )\r\n            );\r\n\r\n\r\n        nodes =\r\n            Array.from(\r\n                {\r\n                    length: count\r\n                },\r\n                function () {\r\n\r\n                    return {\r\n\r\n                        x:\r\n                            Math.random()\r\n                            * width,\r\n\r\n                        y:\r\n                            Math.random()\r\n                            * height,\r\n\r\n                        vx:\r\n                            (Math.random() - 0.5)\r\n                            * 0.25,\r\n\r\n                        vy:\r\n                            (Math.random() - 0.5)\r\n                            * 0.25,\r\n\r\n                        radius:\r\n                            Math.random()\r\n                            * 1.3\r\n                            + 0.7\r\n\r\n                    };\r\n\r\n                }\r\n            );\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       RESIZE\r\n    ===================================================== *\/\r\n\r\n    function resize() {\r\n\r\n        const rect =\r\n            section.getBoundingClientRect();\r\n\r\n\r\n        width =\r\n            rect.width;\r\n\r\n        height =\r\n            rect.height;\r\n\r\n\r\n        const dpr =\r\n            Math.min(\r\n                window.devicePixelRatio || 1,\r\n                MAX_DPR\r\n            );\r\n\r\n\r\n        canvas.width =\r\n            Math.round(\r\n                width * dpr\r\n            );\r\n\r\n        canvas.height =\r\n            Math.round(\r\n                height * dpr\r\n            );\r\n\r\n\r\n        canvas.style.width =\r\n            width + \"px\";\r\n\r\n        canvas.style.height =\r\n            height + \"px\";\r\n\r\n\r\n        ctx.setTransform(\r\n            dpr,\r\n            0,\r\n            0,\r\n            dpr,\r\n            0,\r\n            0\r\n        );\r\n\r\n\r\n        createNodes();\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       UPDATE NODES\r\n    ===================================================== *\/\r\n\r\n    function updateNodes() {\r\n\r\n        nodes.forEach(\r\n            function (node) {\r\n\r\n                node.x += node.vx;\r\n\r\n                node.y += node.vy;\r\n\r\n\r\n                if (\r\n                    node.x <= 0 ||\r\n                    node.x >= width\r\n                ) {\r\n\r\n                    node.vx *= -1;\r\n\r\n                    node.x =\r\n                        Math.max(\r\n                            0,\r\n                            Math.min(\r\n                                width,\r\n                                node.x\r\n                            )\r\n                        );\r\n                }\r\n\r\n\r\n                if (\r\n                    node.y <= 0 ||\r\n                    node.y >= height\r\n                ) {\r\n\r\n                    node.vy *= -1;\r\n\r\n                    node.y =\r\n                        Math.max(\r\n                            0,\r\n                            Math.min(\r\n                                height,\r\n                                node.y\r\n                            )\r\n                        );\r\n                }\r\n\r\n            }\r\n        );\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       DRAW\r\n    ===================================================== *\/\r\n\r\n    function draw() {\r\n\r\n        ctx.clearRect(\r\n            0,\r\n            0,\r\n            width,\r\n            height\r\n        );\r\n\r\n\r\n        const connectionDistance =\r\n            window.innerWidth < 600\r\n                ? 95\r\n                : 125;\r\n\r\n\r\n        \/*\r\n           NODE \u2192 NODE\r\n        *\/\r\n\r\n        for (\r\n            let i = 0;\r\n            i < nodes.length;\r\n            i++\r\n        ) {\r\n\r\n            const a =\r\n                nodes[i];\r\n\r\n\r\n            for (\r\n                let j = i + 1;\r\n                j < nodes.length;\r\n                j++\r\n            ) {\r\n\r\n                const b =\r\n                    nodes[j];\r\n\r\n\r\n                const dx =\r\n                    a.x - b.x;\r\n\r\n                const dy =\r\n                    a.y - b.y;\r\n\r\n\r\n                const distance =\r\n                    Math.sqrt(\r\n                        dx * dx +\r\n                        dy * dy\r\n                    );\r\n\r\n\r\n                if (\r\n                    distance <\r\n                    connectionDistance\r\n                ) {\r\n\r\n                    const opacity =\r\n                        0.18 *\r\n                        (\r\n                            1 -\r\n                            distance \/\r\n                            connectionDistance\r\n                        );\r\n\r\n\r\n                    ctx.beginPath();\r\n\r\n                    ctx.moveTo(\r\n                        a.x,\r\n                        a.y\r\n                    );\r\n\r\n                    ctx.lineTo(\r\n                        b.x,\r\n                        b.y\r\n                    );\r\n\r\n\r\n                    ctx.strokeStyle =\r\n                        `rgba(126,224,214,${opacity})`;\r\n\r\n                    ctx.lineWidth =\r\n                        0.8;\r\n\r\n                    ctx.stroke();\r\n                }\r\n            }\r\n\r\n\r\n            \/*\r\n               NODE \u2192 MOUSE\r\n            *\/\r\n\r\n            if (\r\n                mouse.active\r\n            ) {\r\n\r\n                const dx =\r\n                    a.x -\r\n                    mouse.x;\r\n\r\n                const dy =\r\n                    a.y -\r\n                    mouse.y;\r\n\r\n\r\n                const distance =\r\n                    Math.sqrt(\r\n                        dx * dx +\r\n                        dy * dy\r\n                    );\r\n\r\n\r\n                const mouseRadius =\r\n                    window.innerWidth < 600\r\n                        ? 115\r\n                        : 175;\r\n\r\n\r\n                if (\r\n                    distance <\r\n                    mouseRadius\r\n                ) {\r\n\r\n                    const opacity =\r\n                        0.65 *\r\n                        (\r\n                            1 -\r\n                            distance \/\r\n                            mouseRadius\r\n                        );\r\n\r\n\r\n                    ctx.beginPath();\r\n\r\n                    ctx.moveTo(\r\n                        a.x,\r\n                        a.y\r\n                    );\r\n\r\n                    ctx.lineTo(\r\n                        mouse.x,\r\n                        mouse.y\r\n                    );\r\n\r\n\r\n                    ctx.strokeStyle =\r\n                        `rgba(16,184,174,${opacity})`;\r\n\r\n                    ctx.lineWidth =\r\n                        1.1;\r\n\r\n                    ctx.stroke();\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        \/*\r\n           NODES\r\n        *\/\r\n\r\n        nodes.forEach(\r\n            function (node) {\r\n\r\n                ctx.beginPath();\r\n\r\n                ctx.arc(\r\n                    node.x,\r\n                    node.y,\r\n                    node.radius,\r\n                    0,\r\n                    Math.PI * 2\r\n                );\r\n\r\n\r\n                ctx.fillStyle =\r\n                    \"rgba(126,224,214,0.75)\";\r\n\r\n                ctx.fill();\r\n            }\r\n        );\r\n\r\n\r\n        \/*\r\n           MOUSE GLOW\r\n        *\/\r\n\r\n        if (\r\n            mouse.active\r\n        ) {\r\n\r\n            const gradient =\r\n                ctx.createRadialGradient(\r\n                    mouse.x,\r\n                    mouse.y,\r\n                    0,\r\n                    mouse.x,\r\n                    mouse.y,\r\n                    30\r\n                );\r\n\r\n\r\n            gradient.addColorStop(\r\n                0,\r\n                \"rgba(16,184,174,0.22)\"\r\n            );\r\n\r\n\r\n            gradient.addColorStop(\r\n                1,\r\n                \"rgba(16,184,174,0)\"\r\n            );\r\n\r\n\r\n            ctx.beginPath();\r\n\r\n            ctx.arc(\r\n                mouse.x,\r\n                mouse.y,\r\n                30,\r\n                0,\r\n                Math.PI * 2\r\n            );\r\n\r\n\r\n            ctx.fillStyle =\r\n                gradient;\r\n\r\n            ctx.fill();\r\n\r\n\r\n            \/*\r\n               Small cursor point\r\n            *\/\r\n\r\n            ctx.beginPath();\r\n\r\n            ctx.arc(\r\n                mouse.x,\r\n                mouse.y,\r\n                3,\r\n                0,\r\n                Math.PI * 2\r\n            );\r\n\r\n\r\n            ctx.fillStyle =\r\n                \"#10B8AE\";\r\n\r\n            ctx.fill();\r\n        }\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       ANIMATION\r\n    ===================================================== *\/\r\n\r\n    function animate() {\r\n\r\n        updateNodes();\r\n\r\n        draw();\r\n\r\n        animationFrame =\r\n            requestAnimationFrame(\r\n                animate\r\n            );\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       MOUSE \u2014 ONLY GIOT\r\n    ===================================================== *\/\r\n\r\n    section.addEventListener(\r\n        \"mousemove\",\r\n        function (event) {\r\n\r\n            const rect =\r\n                section.getBoundingClientRect();\r\n\r\n\r\n            mouse.x =\r\n                event.clientX -\r\n                rect.left;\r\n\r\n            mouse.y =\r\n                event.clientY -\r\n                rect.top;\r\n\r\n\r\n            mouse.active =\r\n                true;\r\n\r\n        }\r\n    );\r\n\r\n\r\n    section.addEventListener(\r\n        \"mouseleave\",\r\n        function () {\r\n\r\n            mouse.active =\r\n                false;\r\n\r\n        }\r\n    );\r\n\r\n\r\n    \/* =====================================================\r\n       TOUCH \u2014 ONLY GIOT\r\n    ===================================================== *\/\r\n\r\n    section.addEventListener(\r\n        \"touchmove\",\r\n        function (event) {\r\n\r\n            if (\r\n                !event.touches.length\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            const rect =\r\n                section.getBoundingClientRect();\r\n\r\n\r\n            const touch =\r\n                event.touches[0];\r\n\r\n\r\n            mouse.x =\r\n                touch.clientX -\r\n                rect.left;\r\n\r\n            mouse.y =\r\n                touch.clientY -\r\n                rect.top;\r\n\r\n\r\n            mouse.active =\r\n                true;\r\n\r\n        },\r\n        {\r\n            passive: true\r\n        }\r\n    );\r\n\r\n\r\n    section.addEventListener(\r\n        \"touchend\",\r\n        function () {\r\n\r\n            mouse.active =\r\n                false;\r\n\r\n        },\r\n        {\r\n            passive: true\r\n        }\r\n    );\r\n\r\n\r\n    \/* =====================================================\r\n       RESIZE\r\n    ===================================================== *\/\r\n\r\n    let resizeTimer;\r\n\r\n\r\n    window.addEventListener(\r\n        \"resize\",\r\n        function () {\r\n\r\n            clearTimeout(\r\n                resizeTimer\r\n            );\r\n\r\n\r\n            resizeTimer =\r\n                setTimeout(\r\n                    resize,\r\n                    100\r\n                );\r\n\r\n        }\r\n    );\r\n\r\n\r\n    \/* =====================================================\r\n       START\r\n    ===================================================== *\/\r\n\r\n    resize();\r\n\r\n    animate();\r\n\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n\r\n<\/body>\r\n\r\n<\/html>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-831a93b e-con-full e-flex e-con e-child\" data-id=\"831a93b\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-c7e4081 e-grid e-con-full e-con e-child\" data-id=\"c7e4081\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b00d5af elementor-widget elementor-widget-icon-box\" data-id=\"b00d5af\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h4 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tGIoT in the field: deployed devices and active tenants.\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h4>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4d5db9 elementor-widget elementor-widget-icon-box\" data-id=\"d4d5db9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\t62.000 + \t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tDEPLOYED DEVICES\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a31bfa5 elementor-widget elementor-widget-icon-box\" data-id=\"a31bfa5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\t200+ \t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tACTIVE TENANTS\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9c9b74b e-grid e-con-full e-con e-child\" data-id=\"9c9b74b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-369fbfc elementor-widget elementor-widget-image\" data-id=\"369fbfc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/GDPR-compliant_logo@2x-300x300.webp\" class=\"attachment-medium size-medium wp-image-10868\" alt=\"GDPR Compliance certification\" srcset=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/GDPR-compliant_logo@2x-300x300.webp 300w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/GDPR-compliant_logo@2x-1024x1024.webp 1024w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/elementor\/thumbs\/GDPR-compliant_logo@2x-rozpuy9bihj0rx7noebt1hqu74f51am8h22yg2ngws.webp 150w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/GDPR-compliant_logo@2x-768x768.webp 768w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/GDPR-compliant_logo@2x.webp 1420w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cde4a89 elementor-widget elementor-widget-image\" data-id=\"cde4a89\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"291\" height=\"300\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/07\/Logo-ISO-27001-291x300.webp\" class=\"attachment-medium size-medium wp-image-7667\" alt=\"Gimasi is Certified with ISO\/IEC 27001:2022 - ISMS\" srcset=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/07\/Logo-ISO-27001-291x300.webp 291w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/07\/Logo-ISO-27001.webp 477w\" sizes=\"(max-width: 291px) 100vw, 291px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5fabd29 e-con-full e-flex e-con e-parent\" data-id=\"5fabd29\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b646a85 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"b646a85\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a0195a4 e-con-full e-flex e-con e-parent\" data-id=\"a0195a4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-96997e1 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"96997e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f1a0c04 e-flex e-con-boxed e-con e-parent\" data-id=\"f1a0c04\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-65219fe e-con-full e-flex e-con e-child\" data-id=\"65219fe\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-94f6982 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"94f6982\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_top&quot;:&quot;curve-asymmetrical&quot;,&quot;animation&quot;:&quot;fadeIn&quot;}\">\n\t\t\t\t<div class=\"elementor-shape elementor-shape-top\" aria-hidden=\"true\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M0,0c0,0,0,6,0,6.7c0,18,240.2,93.6,615.2,92.6C989.8,98.5,1000,25,1000,6.7c0-0.7,0-6.7,0-6.7H0z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-488ed3e elementor-widget elementor-widget-image\" data-id=\"488ed3e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"128\" height=\"38\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/coop_logo.svg\" class=\"attachment-large size-large wp-image-4443\" alt=\"Coop logo \u2013 retail partner collaborating with Gimasi IoT solutions IoT Engineering\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-85f6124 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"85f6124\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Real-time temperature monitoring across Switzerland's largest retail network<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-840a253 elementor-widget elementor-widget-image\" data-id=\"840a253\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"408\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/12\/Screenshot-2026-02-02-124818.jpg\" class=\"attachment-large size-large wp-image-9319\" alt=\"Gimasi IoT Solutions - Swisscom Cold Chain food - protect food safety - IoT Engineering\" srcset=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/12\/Screenshot-2026-02-02-124818.jpg 727w, https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/12\/Screenshot-2026-02-02-124818-300x168.jpg 300w\" sizes=\"(max-width: 727px) 100vw, 727px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9bdcf07 e-con-full e-flex e-con e-child\" data-id=\"9bdcf07\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-dd8dcdf e-con-full e-flex e-con e-child\" data-id=\"dd8dcdf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b24b0c0 elementor-widget-mobile__width-initial elementor-widget elementor-widget-heading\" data-id=\"b24b0c0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Cold Chain Monitoring on a National Scale<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1db5ff5 elementor-widget elementor-widget-text-editor\" data-id=\"1db5ff5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Together with Coop, Gimasi developed an <strong>IoT cold-chain monitoring solution<\/strong> for more than 2,000 retail stores across Switzerland. Connected sensors continuously monitor temperature conditions and provide operational data through a centralised system. As a result, operators gain greater visibility across the cold chain and can respond quickly when critical conditions occur. In addition<strong>,<\/strong> automated monitoring helps reduce manual checks and supports more consistent temperature control across distributed locations.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-44c26cb e-con-full e-flex e-con e-child\" data-id=\"44c26cb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ec0b5eb elementor-widget elementor-widget-heading\" data-id=\"ec0b5eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">FEATURED CASE STUDY<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-48d9906 e-grid e-con-full e-con e-child\" data-id=\"48d9906\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-9b8c87f e-con-full e-flex e-con e-child\" data-id=\"9b8c87f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a7902a8 elementor-widget elementor-widget-heading\" data-id=\"a7902a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Real-time<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-02f7583 elementor-widget elementor-widget-text-editor\" data-id=\"02f7583\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Temperature Monitoring<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fbeecd e-con-full e-flex e-con e-child\" data-id=\"0fbeecd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b1a36d0 elementor-widget elementor-widget-heading\" data-id=\"b1a36d0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">2000 ~<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-134adfb elementor-widget elementor-widget-text-editor\" data-id=\"134adfb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Retail stores<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c652f03 e-con-full e-flex e-con e-parent\" data-id=\"c652f03\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fbe2e61 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"fbe2e61\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c190634 e-flex e-con-boxed e-con e-parent\" data-id=\"c190634\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-436a57d elementor-widget elementor-widget-html\" data-id=\"436a57d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- GIMASI x GOOGLE PREFERRED SOURCES -->\r\n<div class=\"gimasi-google-source\" id=\"gimasiGoogleSource\">\r\n\r\n  <div class=\"gimasi-google-source__inner\">\r\n\r\n    <div class=\"gimasi-google-source__text\">\r\n      <h3>Get more from Gimasi on Google<\/h3>\r\n      <p>\r\n        Add Gimasi as a preferred source for IoT insights,\r\n        technologies, and real-world applications.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div class=\"gimasi-google-source__button\" id=\"gimasiGoogleButton\">\r\n      <div\r\n        google-add-preferred-source-btn\r\n        data-theme=\"light\"\r\n        data-lang=\"en\">\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n  <div class=\"gimasi-confetti\" aria-hidden=\"true\"><\/div>\r\n\r\n<\/div>\r\n\r\n\r\n<!-- GOOGLE OFFICIAL SCRIPT -->\r\n<script async src=\"https:\/\/news.google.com\/swg\/js\/v1\/publisher.js\"><\/script>\r\n\r\n\r\n<style>\r\n\r\n\/* ================================\r\n   MAIN CARD\r\n================================ *\/\r\n\r\n.gimasi-google-source {\r\n  position: relative;\r\n  width: 100%;\r\n  padding: 2px;\r\n  border-radius: 18px;\r\n  overflow: hidden;\r\n  box-sizing: border-box;\r\n\r\n  \/* Animated Google border *\/\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      #4285F4,\r\n      #EA4335,\r\n      #FBBC05,\r\n      #34A853,\r\n      #4285F4\r\n    );\r\n\r\n  background-size: 300% 300%;\r\n  animation: gimasiGoogleBorder 7s linear infinite;\r\n\r\n  box-shadow:\r\n    0 8px 30px rgba(0, 0, 0, 0.05);\r\n}\r\n\r\n\r\n\/* Inner white card *\/\r\n\r\n.gimasi-google-source__inner {\r\n  position: relative;\r\n  z-index: 2;\r\n\r\n  width: 100%;\r\n  min-height: 110px;\r\n\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n\r\n  gap: 40px;\r\n\r\n  padding: 28px 34px;\r\n\r\n  background: #ffffff;\r\n  border-radius: 16px;\r\n\r\n  box-sizing: border-box;\r\n}\r\n\r\n\r\n\/* ================================\r\n   TEXT\r\n================================ *\/\r\n\r\n.gimasi-google-source__text {\r\n  max-width: 650px;\r\n}\r\n\r\n.gimasi-google-source__text h3 {\r\n  margin: 0 0 7px;\r\n\r\n  font-size: 21px;\r\n  line-height: 1.3;\r\n  font-weight: 600;\r\n\r\n  color: #1c1c1c;\r\n}\r\n\r\n.gimasi-google-source__text p {\r\n  margin: 0;\r\n\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n\r\n  color: #5f6368;\r\n}\r\n\r\n\r\n\/* ================================\r\n   GOOGLE BUTTON\r\n================================ *\/\r\n\r\n.gimasi-google-source__button {\r\n  position: relative;\r\n  flex: 0 0 auto;\r\n  z-index: 5;\r\n}\r\n\r\n\r\n\/* ================================\r\n   ANIMATED BORDER\r\n================================ *\/\r\n\r\n@keyframes gimasiGoogleBorder {\r\n\r\n  0% {\r\n    background-position: 0% 50%;\r\n  }\r\n\r\n  100% {\r\n    background-position: 300% 50%;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* ================================\r\n   CONFETTI\r\n================================ *\/\r\n\r\n.gimasi-confetti {\r\n  position: absolute;\r\n  inset: 0;\r\n\r\n  pointer-events: none;\r\n\r\n  overflow: visible;\r\n\r\n  z-index: 20;\r\n}\r\n\r\n.gimasi-confetti-piece {\r\n  position: absolute;\r\n\r\n  width: 7px;\r\n  height: 10px;\r\n\r\n  border-radius: 2px;\r\n\r\n  opacity: 0;\r\n\r\n  pointer-events: none;\r\n\r\n  animation: gimasiConfettiFall 900ms ease-out forwards;\r\n}\r\n\r\n\r\n@keyframes gimasiConfettiFall {\r\n\r\n  0% {\r\n    opacity: 1;\r\n\r\n    transform:\r\n      translate(0, 0)\r\n      rotate(0deg)\r\n      scale(1);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n\r\n    transform:\r\n      translate(var(--x), var(--y))\r\n      rotate(var(--r))\r\n      scale(0.8);\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* ================================\r\n   HOVER\r\n================================ *\/\r\n\r\n.gimasi-google-source {\r\n  transition:\r\n    box-shadow 250ms ease,\r\n    transform 250ms ease;\r\n}\r\n\r\n.gimasi-google-source:hover {\r\n  box-shadow:\r\n    0 12px 38px rgba(0, 0, 0, 0.08);\r\n\r\n  transform: translateY(-1px);\r\n}\r\n\r\n\r\n\/* ================================\r\n   MOBILE\r\n================================ *\/\r\n\r\n@media (max-width: 767px) {\r\n\r\n  .gimasi-google-source__inner {\r\n    flex-direction: column;\r\n\r\n    align-items: flex-start;\r\n\r\n    gap: 22px;\r\n\r\n    padding: 25px 24px;\r\n  }\r\n\r\n  .gimasi-google-source__text h3 {\r\n    font-size: 19px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* ================================\r\n   REDUCED MOTION\r\n================================ *\/\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n\r\n  .gimasi-google-source {\r\n    animation: none;\r\n  }\r\n\r\n  .gimasi-google-source:hover {\r\n    transform: none;\r\n  }\r\n\r\n  .gimasi-confetti-piece {\r\n    animation: none !important;\r\n    display: none;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<script>\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n\r\n  const sourceBox =\r\n    document.getElementById(\"gimasiGoogleSource\");\r\n\r\n  const googleButton =\r\n    document.getElementById(\"gimasiGoogleButton\");\r\n\r\n  const confettiContainer =\r\n    sourceBox.querySelector(\".gimasi-confetti\");\r\n\r\n\r\n  if (!googleButton || !confettiContainer) {\r\n    return;\r\n  }\r\n\r\n\r\n  googleButton.addEventListener(\"click\", function (event) {\r\n\r\n    \/*\r\n     * We don't interfere with Google's click.\r\n     * We only create the visual celebration.\r\n     *\/\r\n\r\n    createGimasiConfetti(event);\r\n\r\n  }, true);\r\n\r\n\r\n  function createGimasiConfetti(event) {\r\n\r\n    if (\r\n      window.matchMedia(\r\n        \"(prefers-reduced-motion: reduce)\"\r\n      ).matches\r\n    ) {\r\n      return;\r\n    }\r\n\r\n\r\n    const colors = [\r\n      \"#4285F4\",\r\n      \"#EA4335\",\r\n      \"#FBBC05\",\r\n      \"#34A853\"\r\n    ];\r\n\r\n\r\n    const box =\r\n      sourceBox.getBoundingClientRect();\r\n\r\n\r\n    const clickX =\r\n      event.clientX\r\n        ? event.clientX - box.left\r\n        : box.width - 80;\r\n\r\n\r\n    const clickY =\r\n      event.clientY\r\n        ? event.clientY - box.top\r\n        : box.height \/ 2;\r\n\r\n\r\n    const amount = 34;\r\n\r\n\r\n    for (let i = 0; i < amount; i++) {\r\n\r\n      const piece =\r\n        document.createElement(\"span\");\r\n\r\n\r\n      piece.className =\r\n        \"gimasi-confetti-piece\";\r\n\r\n\r\n      piece.style.backgroundColor =\r\n        colors[\r\n          Math.floor(\r\n            Math.random() * colors.length\r\n          )\r\n        ];\r\n\r\n\r\n      piece.style.left =\r\n        clickX + \"px\";\r\n\r\n\r\n      piece.style.top =\r\n        clickY + \"px\";\r\n\r\n\r\n      const angle =\r\n        Math.random() * Math.PI * 2;\r\n\r\n\r\n      const distance =\r\n        55 + Math.random() * 110;\r\n\r\n\r\n      const x =\r\n        Math.cos(angle) * distance;\r\n\r\n\r\n      const y =\r\n        Math.sin(angle) * distance\r\n        + 60;\r\n\r\n\r\n      const rotation =\r\n        (Math.random() * 720 - 360)\r\n        + \"deg\";\r\n\r\n\r\n      piece.style.setProperty(\r\n        \"--x\",\r\n        x + \"px\"\r\n      );\r\n\r\n\r\n      piece.style.setProperty(\r\n        \"--y\",\r\n        y + \"px\"\r\n      );\r\n\r\n\r\n      piece.style.setProperty(\r\n        \"--r\",\r\n        rotation\r\n      );\r\n\r\n\r\n      piece.style.animationDelay =\r\n        (Math.random() * 80) + \"ms\";\r\n\r\n\r\n      confettiContainer.appendChild(piece);\r\n\r\n\r\n      setTimeout(function () {\r\n        piece.remove();\r\n      }, 1100);\r\n\r\n    }\r\n\r\n  }\r\n\r\n});\r\n\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-57c48ed e-flex e-con-boxed e-con e-parent\" data-id=\"57c48ed\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a4c4488 elementor-align-center elementor-mobile-align-left elementor-widget elementor-widget-button\" data-id=\"a4c4488\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.swisscom.ch\/it\/business\/enterprise\/storie-di-successi\/commercio-allingrosso-e-al-dettaglio\/coop.html?srsltid=AfmBOorigerN2Zl0mJtPryEfKncPlF8lCjmQVLp0iJZLTKprxpWbVkM7\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-arrow-alt-circle-right\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read Full Case Study<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e9dd5e5 e-con-full e-flex e-con e-parent\" data-id=\"e9dd5e5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0dbd20a elementor-widget elementor-widget-html\" data-id=\"0dbd20a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   GIMASI \u2014 IOT APPLICATIONS SECTION\r\n   Self-contained Elementor Free section\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section {\r\n    --blue: #003B78;\r\n    --blue-light: #6B8ADA;\r\n    --card-bg: #F5F9FC;\r\n    --card-border: #D8E1EA;\r\n    --text: #003B78;\r\n    --muted: #667892;\r\n\r\n    position: relative;\r\n    width: 100%;\r\n    min-height: 430px;\r\n\r\n    padding: 72px 6vw;\r\n\r\n    background: #ffffff;\r\n\r\n    overflow: hidden;\r\n\r\n    isolation: isolate;\r\n\r\n    font-family:\r\n        Arial,\r\n        Helvetica,\r\n        sans-serif;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BACKGROUND CANVAS\r\n   Belongs ONLY to this section\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .triangle-canvas {\r\n    position: absolute;\r\n\r\n    top: 0;\r\n    left: 0;\r\n\r\n    width: 100%;\r\n    height: 100%;\r\n\r\n    display: block;\r\n\r\n    z-index: 0;\r\n\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CONTENT LAYER\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .iot-content {\r\n    position: relative;\r\n\r\n    z-index: 2;\r\n\r\n    width: 100%;\r\n    max-width: 1680px;\r\n\r\n    margin: 0 auto;\r\n\r\n    display: grid;\r\n\r\n    grid-template-columns:\r\n        minmax(320px, 0.85fr)\r\n        minmax(600px, 1.55fr);\r\n\r\n    gap: 70px;\r\n\r\n    align-items: center;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   LEFT SIDE\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .iot-intro {\r\n    max-width: 500px;\r\n}\r\n\r\n\r\n.gimasi-iot-section .iot-eyebrow {\r\n    margin: 0 0 24px;\r\n\r\n    font-size: 16px;\r\n\r\n    font-weight: 600;\r\n\r\n    line-height: 1.3;\r\n\r\n    color: var(--blue);\r\n\r\n    letter-spacing: 0.2px;\r\n\r\n    text-transform: uppercase;\r\n}\r\n\r\n\r\n.gimasi-iot-section .iot-title {\r\n    margin: 0;\r\n\r\n    max-width: 520px;\r\n\r\n    color: var(--blue);\r\n\r\n    font-size: clamp(\r\n        28px,\r\n        3vw,\r\n        42px\r\n    );\r\n\r\n    line-height: 1.18;\r\n\r\n    font-weight: 600;\r\n\r\n    letter-spacing: -0.5px;\r\n}\r\n\r\n\r\n\/* Paragraph *\/\r\n\r\n.gimasi-iot-section .iot-intro > p:not(.iot-eyebrow) {\r\n    color: var(--muted);\r\n\r\n    font-size: 15px;\r\n\r\n    line-height: 1.65;\r\n\r\n    margin: 22px 0 0;\r\n\r\n    max-width: 520px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BUTTON\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .iot-button {\r\n    display: inline-flex;\r\n\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    margin-top: 34px;\r\n\r\n    min-height: 42px;\r\n\r\n    padding:\r\n        11px\r\n        18px;\r\n\r\n    border-radius: 8px;\r\n\r\n    background: var(--blue);\r\n\r\n    color: #ffffff;\r\n\r\n    text-decoration: none;\r\n\r\n    font-size: 14px;\r\n\r\n    font-weight: 600;\r\n\r\n    transition:\r\n        transform 0.22s ease,\r\n        background 0.22s ease,\r\n        box-shadow 0.22s ease;\r\n}\r\n\r\n\r\n.gimasi-iot-section .iot-button:hover {\r\n    transform: translateY(-2px);\r\n\r\n    background: #002F60;\r\n\r\n    box-shadow:\r\n        0 8px 20px\r\n        rgba(0, 59, 120, 0.18);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   RIGHT SIDE \u2014 APPLICATION GRID\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .applications-grid {\r\n\r\n    display: grid;\r\n\r\n    grid-template-columns:\r\n        repeat(3, minmax(150px, 1fr));\r\n\r\n    gap: 22px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   APPLICATION CARD\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .application-card {\r\n\r\n    position: relative;\r\n\r\n    min-height: 98px;\r\n\r\n    padding:\r\n        16px\r\n        18px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--card-border);\r\n\r\n    border-radius: 7px;\r\n\r\n    background:\r\n        rgba(245, 249, 252, 0.88);\r\n\r\n    display: flex;\r\n\r\n    flex-direction: column;\r\n\r\n    justify-content: flex-start;\r\n\r\n    transition:\r\n        transform 0.25s ease,\r\n        border-color 0.25s ease,\r\n        background 0.25s ease,\r\n        box-shadow 0.25s ease;\r\n\r\n    backdrop-filter: blur(3px);\r\n}\r\n\r\n\r\n.gimasi-iot-section .application-card:hover {\r\n\r\n    transform:\r\n        translateY(-4px);\r\n\r\n    border-color:\r\n        rgba(75, 112, 208, 0.45);\r\n\r\n    background:\r\n        rgba(255, 255, 255, 0.96);\r\n\r\n    box-shadow:\r\n        0 10px 24px\r\n        rgba(0, 59, 120, 0.08);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CARD HEADER\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .application-header {\r\n\r\n    display: flex;\r\n\r\n    align-items: center;\r\n\r\n    gap: 10px;\r\n\r\n    margin-bottom: 10px;\r\n}\r\n\r\n\r\n.gimasi-iot-section .application-icon {\r\n\r\n    width: 25px;\r\n    height: 25px;\r\n\r\n    flex: 0 0 25px;\r\n\r\n    display: flex;\r\n\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    color: #000000;\r\n\r\n    font-size: 22px;\r\n\r\n    line-height: 1;\r\n}\r\n\r\n\r\n.gimasi-iot-section .application-title {\r\n\r\n    margin: 0;\r\n\r\n    color: var(--blue);\r\n\r\n    font-size: 18px;\r\n\r\n    line-height: 1.2;\r\n\r\n    font-weight: 600;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CARD TEXT\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .application-description {\r\n\r\n    margin: 0 0 0 35px;\r\n\r\n    color: var(--muted);\r\n\r\n    font-family:\r\n        Arial,\r\n        \"Arial\",\r\n        serif;\r\n\r\n    font-size: 13px;\r\n\r\n    line-height: 1.55;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TRIANGLE BACKGROUND\r\n   ========================================================= *\/\r\n\r\n.gimasi-iot-section .triangle-canvas {\r\n    opacity: 1;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TABLET\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 1100px) {\r\n\r\n    .gimasi-iot-section {\r\n\r\n        padding:\r\n            60px 35px;\r\n    }\r\n\r\n    .gimasi-iot-section .iot-content {\r\n\r\n        grid-template-columns:\r\n            1fr;\r\n\r\n        gap: 45px;\r\n    }\r\n\r\n    .gimasi-iot-section .iot-intro {\r\n\r\n        max-width: 650px;\r\n    }\r\n\r\n    .gimasi-iot-section .applications-grid {\r\n\r\n        grid-template-columns:\r\n            repeat(3, 1fr);\r\n    }\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SMALL TABLET\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 760px) {\r\n\r\n    .gimasi-iot-section {\r\n\r\n        padding:\r\n            50px 25px;\r\n    }\r\n\r\n    .gimasi-iot-section .iot-title {\r\n\r\n        font-size: 30px;\r\n    }\r\n\r\n    .gimasi-iot-section .applications-grid {\r\n\r\n        grid-template-columns:\r\n            repeat(2, 1fr);\r\n\r\n        gap: 16px;\r\n    }\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MOBILE\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 520px) {\r\n\r\n    .gimasi-iot-section {\r\n\r\n        padding:\r\n            45px 20px;\r\n\r\n        min-height: auto;\r\n    }\r\n\r\n    .gimasi-iot-section .iot-content {\r\n\r\n        gap: 35px;\r\n    }\r\n\r\n    .gimasi-iot-section .iot-eyebrow {\r\n\r\n        font-size: 13px;\r\n\r\n        margin-bottom: 17px;\r\n    }\r\n\r\n    .gimasi-iot-section .iot-title {\r\n\r\n        font-size: 27px;\r\n\r\n        line-height: 1.2;\r\n    }\r\n\r\n    .gimasi-iot-section .applications-grid {\r\n\r\n        grid-template-columns:\r\n            1fr;\r\n\r\n        gap: 13px;\r\n    }\r\n\r\n    .gimasi-iot-section .application-card {\r\n\r\n        min-height: 90px;\r\n    }\r\n\r\n    .gimasi-iot-section .triangle-canvas {\r\n\r\n        opacity: 0.65;\r\n    }\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ACCESSIBILITY\r\n   ========================================================= *\/\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n\r\n    .gimasi-iot-section .application-card,\r\n    .gimasi-iot-section .iot-button {\r\n\r\n        transition: none;\r\n    }\r\n}\r\n\r\n<\/style>\r\n<\/head>\r\n\r\n\r\n<body>\r\n\r\n\r\n<section\r\n    class=\"gimasi-iot-section\"\r\n    aria-label=\"IoT applications\"\r\n>\r\n\r\n\r\n    <!-- =====================================================\r\n         INTERACTIVE BACKGROUND\r\n         ===================================================== -->\r\n\r\n    <canvas\r\n        class=\"triangle-canvas\"\r\n        aria-hidden=\"true\">\r\n    <\/canvas>\r\n\r\n\r\n    <!-- =====================================================\r\n         MAIN CONTENT\r\n         ===================================================== -->\r\n\r\n    <div class=\"iot-content\">\r\n\r\n\r\n        <!-- =================================================\r\n             LEFT\r\n             ================================================= -->\r\n\r\n        <div class=\"iot-intro\">\r\n\r\n            <p class=\"iot-eyebrow\">\r\n                UNDERSTAND THE NEED. BUILD THE SOLUTION.\r\n            <\/p>\r\n\r\n\r\n            <h2 class=\"iot-title\">\r\n                Every Gimasi IoT solution is built around the real need.\r\n            <\/h2>\r\n\r\n\r\n            <p>\r\n                We first understand what needs to be monitored, tracked,\r\n                measured, or automated. Then, we combine the right hardware,\r\n                connectivity, software, and cloud technologies around that need.\r\n            <\/p>\r\n\r\n\r\n            <a\r\n                href=\"https:\/\/www.gimasi.com\/?page_id=1712\"\r\n                class=\"iot-button\"\r\n            >\r\n                Contact our Engineers\r\n            <\/a>\r\n                      <a\r\n                href=\"https:\/\/www.gimasi.com\/?page_id=1711\"\r\n                class=\"iot-button\"\r\n            >\r\n                See all Applications\r\n            <\/a>\r\n\r\n        <\/div>\r\n\r\n\r\n\r\n        <!-- =================================================\r\n             RIGHT \u2014 APPLICATIONS\r\n             ================================================= -->\r\n\r\n        <div class=\"applications-grid\">\r\n\r\n\r\n            <!-- MONITOR -->\r\n\r\n            <article class=\"application-card\">\r\n\r\n                <div class=\"application-header\">\r\n\r\n                    <div class=\"application-icon\">\r\n                        \u2197\r\n                    <\/div>\r\n\r\n                    <h3 class=\"application-title\">\r\n                        Monitor\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n                <p class=\"application-description\">\r\n                    Temperature \u00b7 Humidity \u00b7 Environment\r\n                <\/p>\r\n\r\n            <\/article>\r\n\r\n\r\n            <!-- TRACK -->\r\n\r\n            <article class=\"application-card\">\r\n\r\n                <div class=\"application-header\">\r\n\r\n                    <div class=\"application-icon\">\r\n                        \u2691\r\n                    <\/div>\r\n\r\n                    <h3 class=\"application-title\">\r\n                        Track\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n                <p class=\"application-description\">\r\n                    Assets \u00b7 Vehicles \u00b7 Equipment\r\n                <\/p>\r\n\r\n            <\/article>\r\n\r\n\r\n            <!-- TRIGGER -->\r\n\r\n            <article class=\"application-card\">\r\n\r\n                <div class=\"application-header\">\r\n\r\n                    <div class=\"application-icon\">\r\n                        \u26a1\r\n                    <\/div>\r\n\r\n                    <h3 class=\"application-title\">\r\n                        Trigger\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n                <p class=\"application-description\">\r\n                    Service \u00b7 Assistance \u00b7 Workflows\r\n                <\/p>\r\n\r\n            <\/article>\r\n\r\n\r\n            <!-- MEASURE -->\r\n\r\n            <article class=\"application-card\">\r\n\r\n                <div class=\"application-header\">\r\n\r\n                    <div class=\"application-icon\">\r\n                        \u2692\r\n                    <\/div>\r\n\r\n                    <h3 class=\"application-title\">\r\n                        Measure\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n                <p class=\"application-description\">\r\n                    Fill levels \u00b7 Usage \u00b7 Conditions\r\n                <\/p>\r\n\r\n            <\/article>\r\n\r\n\r\n            <!-- CONNECT -->\r\n\r\n            <article class=\"application-card\">\r\n\r\n                <div class=\"application-header\">\r\n\r\n                    <div class=\"application-icon\">\r\n                        \u25c9\r\n                    <\/div>\r\n\r\n                    <h3 class=\"application-title\">\r\n                        Connect\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n                <p class=\"application-description\">\r\n                    Smart &amp; Sustainable Agriculture\r\n                <\/p>\r\n\r\n            <\/article>\r\n\r\n\r\n            <!-- OPTIMIZE -->\r\n\r\n            <article class=\"application-card\">\r\n\r\n                <div class=\"application-header\">\r\n\r\n                    <div class=\"application-icon\">\r\n                        \u2713\r\n                    <\/div>\r\n\r\n                    <h3 class=\"application-title\">\r\n                        Optimize\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n                <p class=\"application-description\">\r\n                    Data \u00b7 Alerts \u00b7 Automation\r\n                <\/p>\r\n\r\n            <\/article>\r\n\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/section>\r\n\r\n\r\n<script>\r\n\r\n(function () {\r\n\r\n    \/* =========================================================\r\n       GIMASI INTERACTIVE TRIANGLES\r\n       ========================================================= *\/\r\n\r\n    function initTriangleBackground() {\r\n\r\n        const sections =\r\n            document.querySelectorAll(\r\n                \".gimasi-iot-section\"\r\n            );\r\n\r\n\r\n        sections.forEach(function (section) {\r\n\r\n            const canvas =\r\n                section.querySelector(\r\n                    \".triangle-canvas\"\r\n                );\r\n\r\n\r\n            if (!canvas) {\r\n                return;\r\n            }\r\n\r\n\r\n            const ctx =\r\n                canvas.getContext(\"2d\");\r\n\r\n\r\n            let width = 0;\r\n            let height = 0;\r\n\r\n\r\n            \/* -----------------------------------------------------\r\n               MOUSE\r\n               ----------------------------------------------------- *\/\r\n\r\n            const mouse = {\r\n\r\n                x: -1000,\r\n\r\n                y: -1000,\r\n\r\n                active: false\r\n\r\n            };\r\n\r\n\r\n            section.addEventListener(\r\n                \"mousemove\",\r\n                function (event) {\r\n\r\n                    const rect =\r\n                        section.getBoundingClientRect();\r\n\r\n\r\n                    mouse.x =\r\n                        event.clientX -\r\n                        rect.left;\r\n\r\n\r\n                    mouse.y =\r\n                        event.clientY -\r\n                        rect.top;\r\n\r\n\r\n                    mouse.active = true;\r\n\r\n                },\r\n                {\r\n                    passive: true\r\n                }\r\n            );\r\n\r\n\r\n            section.addEventListener(\r\n                \"mouseleave\",\r\n                function () {\r\n\r\n                    mouse.active = false;\r\n\r\n                }\r\n            );\r\n\r\n\r\n            \/* -----------------------------------------------------\r\n               TRIANGLES\r\n               ----------------------------------------------------- *\/\r\n\r\n            const triangles = [];\r\n\r\n            const triangleCount = 65;\r\n\r\n\r\n            function createTriangles() {\r\n\r\n                triangles.length = 0;\r\n\r\n\r\n                for (\r\n                    let i = 0;\r\n                    i < triangleCount;\r\n                    i++\r\n                ) {\r\n\r\n                    triangles.push({\r\n\r\n                        x:\r\n                            Math.random() *\r\n                            width,\r\n\r\n                        y:\r\n                            Math.random() *\r\n                            height,\r\n\r\n                        size:\r\n                            8 +\r\n                            Math.random() *\r\n                            15,\r\n\r\n                        rotation:\r\n                            Math.random() *\r\n                            Math.PI *\r\n                            2,\r\n\r\n                        rotationSpeed:\r\n                            (\r\n                                Math.random() -\r\n                                0.5\r\n                            ) * 0.002,\r\n\r\n                        driftX:\r\n                            (\r\n                                Math.random() -\r\n                                0.5\r\n                            ) * 0.035,\r\n\r\n                        driftY:\r\n                            (\r\n                                Math.random() -\r\n                                0.5\r\n                            ) * 0.035,\r\n\r\n                        pushX: 0,\r\n\r\n                        pushY: 0,\r\n\r\n                        opacity:\r\n                            0.12 +\r\n                            Math.random() *\r\n                            0.14\r\n\r\n                    });\r\n\r\n                }\r\n\r\n            }\r\n\r\n\r\n            \/* -----------------------------------------------------\r\n               RESIZE\r\n               ----------------------------------------------------- *\/\r\n\r\n            function resize() {\r\n\r\n                const rect =\r\n                    section.getBoundingClientRect();\r\n\r\n\r\n                width =\r\n                    rect.width;\r\n\r\n\r\n                height =\r\n                    rect.height;\r\n\r\n\r\n                if (\r\n                    width <= 0 ||\r\n                    height <= 0\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n\r\n                const dpr =\r\n                    Math.min(\r\n                        window.devicePixelRatio ||\r\n                        1,\r\n                        2\r\n                    );\r\n\r\n\r\n                canvas.width =\r\n                    width * dpr;\r\n\r\n\r\n                canvas.height =\r\n                    height * dpr;\r\n\r\n\r\n                canvas.style.width =\r\n                    width + \"px\";\r\n\r\n\r\n                canvas.style.height =\r\n                    height + \"px\";\r\n\r\n\r\n                ctx.setTransform(\r\n                    dpr,\r\n                    0,\r\n                    0,\r\n                    dpr,\r\n                    0,\r\n                    0\r\n                );\r\n\r\n\r\n                createTriangles();\r\n\r\n            }\r\n\r\n\r\n            \/* -----------------------------------------------------\r\n               DRAW OUTLINED TRIANGLE\r\n               ----------------------------------------------------- *\/\r\n\r\n            function drawTriangle(t) {\r\n\r\n                const x =\r\n                    t.x + t.pushX;\r\n\r\n\r\n                const y =\r\n                    t.y + t.pushY;\r\n\r\n\r\n                ctx.save();\r\n\r\n\r\n                ctx.translate(\r\n                    x,\r\n                    y\r\n                );\r\n\r\n\r\n                ctx.rotate(\r\n                    t.rotation\r\n                );\r\n\r\n\r\n                ctx.beginPath();\r\n\r\n\r\n                ctx.moveTo(\r\n                    0,\r\n                    -t.size\r\n                );\r\n\r\n\r\n                ctx.lineTo(\r\n                    t.size,\r\n                    t.size\r\n                );\r\n\r\n\r\n                ctx.lineTo(\r\n                    -t.size,\r\n                    t.size\r\n                );\r\n\r\n\r\n                ctx.closePath();\r\n\r\n\r\n                ctx.strokeStyle =\r\n                    \"rgba(75,112,208,\" +\r\n                    t.opacity +\r\n                    \")\";\r\n\r\n\r\n                ctx.lineWidth = 1;\r\n\r\n\r\n                ctx.stroke();\r\n\r\n\r\n                ctx.restore();\r\n\r\n            }\r\n\r\n\r\n            \/* -----------------------------------------------------\r\n               ANIMATION\r\n               ----------------------------------------------------- *\/\r\n\r\n            function animate() {\r\n\r\n                ctx.clearRect(\r\n                    0,\r\n                    0,\r\n                    width,\r\n                    height\r\n                );\r\n\r\n\r\n                triangles.forEach(\r\n                    function (t) {\r\n\r\n                        \/* Natural movement *\/\r\n\r\n                        t.x +=\r\n                            t.driftX;\r\n\r\n\r\n                        t.y +=\r\n                            t.driftY;\r\n\r\n\r\n                        t.rotation +=\r\n                            t.rotationSpeed;\r\n\r\n\r\n                        \/* Mouse interaction *\/\r\n\r\n                        if (mouse.active) {\r\n\r\n                            const dx =\r\n                                t.x -\r\n                                mouse.x;\r\n\r\n\r\n                            const dy =\r\n                                t.y -\r\n                                mouse.y;\r\n\r\n\r\n                            const distance =\r\n                                Math.sqrt(\r\n                                    dx * dx +\r\n                                    dy * dy\r\n                                );\r\n\r\n\r\n                            const radius =\r\n                                190;\r\n\r\n\r\n                            if (\r\n                                distance <\r\n                                radius\r\n                            ) {\r\n\r\n                                const force =\r\n                                    (\r\n                                        radius -\r\n                                        distance\r\n                                    ) \/\r\n                                    radius;\r\n\r\n\r\n                                const angle =\r\n                                    Math.atan2(\r\n                                        dy,\r\n                                        dx\r\n                                    );\r\n\r\n\r\n                                const targetX =\r\n                                    Math.cos(\r\n                                        angle\r\n                                    ) *\r\n                                    force *\r\n                                    65;\r\n\r\n\r\n                                const targetY =\r\n                                    Math.sin(\r\n                                        angle\r\n                                    ) *\r\n                                    force *\r\n                                    65;\r\n\r\n\r\n                                t.pushX +=\r\n                                    (\r\n                                        targetX -\r\n                                        t.pushX\r\n                                    ) * 0.16;\r\n\r\n\r\n                                t.pushY +=\r\n                                    (\r\n                                        targetY -\r\n                                        t.pushY\r\n                                    ) * 0.16;\r\n\r\n\r\n                                t.rotation +=\r\n                                    force *\r\n                                    0.025;\r\n\r\n                            } else {\r\n\r\n                                t.pushX *=\r\n                                    0.90;\r\n\r\n\r\n                                t.pushY *=\r\n                                    0.90;\r\n\r\n                            }\r\n\r\n                        } else {\r\n\r\n                            t.pushX *=\r\n                                0.94;\r\n\r\n\r\n                            t.pushY *=\r\n                                0.94;\r\n\r\n                        }\r\n\r\n\r\n                        \/* Keep triangles inside section *\/\r\n\r\n                        if (\r\n                            t.x <\r\n                            -40\r\n                        ) {\r\n\r\n                            t.x =\r\n                                width + 40;\r\n\r\n                        }\r\n\r\n\r\n                        if (\r\n                            t.x >\r\n                            width + 40\r\n                        ) {\r\n\r\n                            t.x =\r\n                                -40;\r\n\r\n                        }\r\n\r\n\r\n                        if (\r\n                            t.y <\r\n                            -40\r\n                        ) {\r\n\r\n                            t.y =\r\n                                height + 40;\r\n\r\n                        }\r\n\r\n\r\n                        if (\r\n                            t.y >\r\n                            height + 40\r\n                        ) {\r\n\r\n                            t.y =\r\n                                -40;\r\n\r\n                        }\r\n\r\n\r\n                        drawTriangle(t);\r\n\r\n                    }\r\n                );\r\n\r\n\r\n                requestAnimationFrame(\r\n                    animate\r\n                );\r\n\r\n            }\r\n\r\n\r\n            \/* -----------------------------------------------------\r\n               START\r\n               ----------------------------------------------------- *\/\r\n\r\n            resize();\r\n\r\n            animate();\r\n\r\n\r\n            window.addEventListener(\r\n                \"resize\",\r\n                resize,\r\n                {\r\n                    passive: true\r\n                }\r\n            );\r\n\r\n        });\r\n\r\n    }\r\n\r\n\r\n    \/* Elementor \/ normal browser loading *\/\r\n\r\n    if (\r\n        document.readyState ===\r\n        \"loading\"\r\n    ) {\r\n\r\n        document.addEventListener(\r\n            \"DOMContentLoaded\",\r\n            initTriangleBackground\r\n        );\r\n\r\n    } else {\r\n\r\n        initTriangleBackground();\r\n\r\n    }\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-adb264c e-con-full e-flex e-con e-parent\" data-id=\"adb264c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cddc864 elementor-widget elementor-widget-html\" data-id=\"cddc864\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =========================================================\r\n     GIMASI \u2014 READY-TO-USE DEVICES \/ PRODUCT PORTFOLIO\r\n     Add this section AFTER the existing .gimasi-iot-section\r\n     ========================================================= -->\r\n\r\n<section class=\"gimasi-products-section\"\r\n         aria-label=\"Gimasi IoT product portfolio\">\r\n\r\n\r\n    <!-- =====================================================\r\n         BACKGROUND TRIANGLES\r\n         Uses the same visual language as the previous section\r\n         ===================================================== -->\r\n\r\n    <canvas\r\n        class=\"products-triangle-canvas\"\r\n        aria-hidden=\"true\">\r\n    <\/canvas>\r\n\r\n\r\n    <!-- =====================================================\r\n         CONTENT\r\n         ===================================================== -->\r\n\r\n    <div class=\"products-content\">\r\n\r\n\r\n        <!-- =================================================\r\n             SECTION INTRO\r\n             ================================================= -->\r\n\r\n        <div class=\"products-intro\">\r\n\r\n            <h2 class=\"products-title\">\r\n                Need a ready-to-use device?\r\n            <\/h2>\r\n\r\n            <p class=\"products-subtitle\">\r\n                Our portfolio covers the most common IoT applications, including environmental monitoring, cold-chain monitoring, asset tracking, and smart service workflows. In addition, selected devices can be adapted to specific application requirements.\r\n            <\/p>\r\n\r\n        <\/div>\r\n\r\n\r\n\r\n        <!-- =================================================\r\n             PRODUCT GRID\r\n             ================================================= -->\r\n\r\n        <div class=\"products-grid\">\r\n\r\n\r\n            <!-- =================================================\r\n                 SENSOR CLIMA XL\r\n                 ================================================= -->\r\n\r\n            <a\r\n                href=\"https:\/\/www.gimasi.com\/?page_id=2202\"\r\n                class=\"product-card\"\r\n                aria-label=\"Discover Sensor Clima XL\">\r\n\r\n\r\n                <div class=\"product-image-wrap\">\r\n\r\n                    <!--\r\n                    REPLACE THIS IMAGE URL\r\n                    with your actual WordPress image URL.\r\n                    -->\r\n\r\n                    <img decoding=\"async\"\r\n                        src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/SENSOR_CLIMA_XL16.04.26.jpg\"\r\n                        alt=\"Sensor Clima XL\"\r\n                        class=\"product-image\"\r\n                        loading=\"lazy\"\r\n                    >\r\n\r\n\r\n                    <!-- subtle image overlay -->\r\n\r\n                    <div class=\"product-image-overlay\"><\/div>\r\n\r\n\r\n                    <!-- product name -->\r\n\r\n                    <div class=\"product-name\">\r\n\r\n                        <span>\r\n                            Sensor Clima XL\r\n                        <\/span>\r\n\r\n                        <span class=\"product-arrow\">\r\n                            \u2192\r\n                        <\/span>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"product-meta\">\r\n\r\n                    Industrial Cold Chain\r\n                    <span>\u00b7<\/span>\r\n                    LoRaWAN\r\n                    <span>\u00b7<\/span>\r\n                    IP67\r\n\r\n                <\/div>\r\n\r\n\r\n            <\/a>\r\n\r\n\r\n\r\n            <!-- =================================================\r\n                 SENSOR CLIMA\r\n                 ================================================= -->\r\n\r\n            <a\r\n                href=\"https:\/\/www.gimasi.com\/?page_id=1921\"\r\n                class=\"product-card\"\r\n                aria-label=\"Discover Sensor Clima\">\r\n\r\n\r\n                <div class=\"product-image-wrap\">\r\n\r\n                    <!--\r\n                    REPLACE THIS IMAGE URL\r\n                    with your actual WordPress image URL.\r\n                    -->\r\n\r\n                    <img decoding=\"async\"\r\n                        src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/07\/Gemini_Generated_Image_kivz9ukivz9ukivz.jpg\"\r\n                        alt=\"Sensor Clima\"\r\n                        class=\"product-image\"\r\n                        loading=\"lazy\"\r\n                    >\r\n\r\n\r\n                    <div class=\"product-image-overlay\"><\/div>\r\n\r\n\r\n                    <div class=\"product-name\">\r\n\r\n                        <span>\r\n                            Sensor Clima\r\n                        <\/span>\r\n\r\n                        <span class=\"product-arrow\">\r\n                            \u2192\r\n                        <\/span>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"product-meta\">\r\n\r\n                    Environmental Monitoring\r\n                    <span>\u00b7<\/span>\r\n                    LoRaWAN\r\n                    <span>\u00b7<\/span>\r\n                    IP67\r\n\r\n                <\/div>\r\n\r\n\r\n            <\/a>\r\n\r\n\r\n\r\n            <!-- =================================================\r\n                 SERVICE BUTTON\r\n                 ================================================= -->\r\n\r\n            <a\r\n                href=\"https:\/\/www.gimasi.com\/?page_id=1922\"\r\n                class=\"product-card\"\r\n                aria-label=\"Discover Service Button\">\r\n\r\n\r\n                <div class=\"product-image-wrap\">\r\n\r\n                    <!--\r\n                    REPLACE THIS IMAGE URL\r\n                    with your actual WordPress image URL.\r\n                    -->\r\n\r\n                    <img decoding=\"async\"\r\n                        src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/08\/LinkedIn-Carousel-23-e1787121444830.jpg\"\r\n                        alt=\"Service Button\"\r\n                        class=\"product-image\"\r\n                        loading=\"lazy\"\r\n                    >\r\n\r\n\r\n                    <div class=\"product-image-overlay\"><\/div>\r\n\r\n\r\n                    <div class=\"product-name\">\r\n\r\n                        <span>\r\n                            Service Button\r\n                        <\/span>\r\n\r\n                        <span class=\"product-arrow\">\r\n                            \u2192\r\n                        <\/span>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"product-meta\">\r\n\r\n                    Wireless Call Button\r\n                    <span>\u00b7<\/span>\r\n                    NB-IoT \/ LTE-M\r\n                    <span>\u00b7<\/span>\r\n                    IP54\r\n\r\n                <\/div>\r\n\r\n\r\n            <\/a>\r\n\r\n\r\n        <\/div>\r\n\r\n\r\n\r\n        <!-- =================================================\r\n             CTA\r\n             ================================================= -->\r\n\r\n        <div class=\"products-footer\">\r\n\r\n            <a\r\n                href=\"https:\/\/www.gimasi.com\/?page_id=1940\"\r\n                class=\"products-button\">\r\n\r\n                Compare all products\r\n\r\n                <span>\r\n                    \u2192\r\n                <\/span>\r\n\r\n            <\/a>\r\n\r\n        <\/div>\r\n\r\n\r\n    <\/div>\r\n\r\n<\/section>\r\n\r\n\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   GIMASI \u2014 PRODUCT PORTFOLIO SECTION\r\n   ========================================================= *\/\r\n\r\n\r\n\/* =========================================================\r\n   SECTION\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section {\r\n\r\n    --products-blue: #003B78;\r\n\r\n    --products-blue-dark: #002F60;\r\n\r\n    --products-border: #D8E1EA;\r\n\r\n    --products-bg: #F5F9FC;\r\n\r\n    --products-muted: #667892;\r\n\r\n    position: relative;\r\n\r\n    width: 100%;\r\n\r\n    padding:\r\n        72px 6vw\r\n        78px;\r\n\r\n    background: #FFFFFF;\r\n\r\n    overflow: hidden;\r\n\r\n    isolation: isolate;\r\n\r\n    font-family:\r\n        Arial,\r\n        Helvetica,\r\n        sans-serif;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BACKGROUND CANVAS\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.products-triangle-canvas {\r\n\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    width: 100%;\r\n    height: 100%;\r\n\r\n    display: block;\r\n\r\n    z-index: 0;\r\n\r\n    pointer-events: none;\r\n\r\n    opacity: 0.8;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CONTENT\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.products-content {\r\n\r\n    position: relative;\r\n\r\n    z-index: 2;\r\n\r\n    width: 100%;\r\n\r\n    max-width: 1120px;\r\n\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   INTRO\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.products-intro {\r\n\r\n    text-align: center;\r\n\r\n    margin-bottom: 42px;\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.products-title {\r\n\r\n    margin: 0;\r\n\r\n    color:\r\n        var(--products-blue);\r\n\r\n    font-size:\r\n        clamp(\r\n            27px,\r\n            3vw,\r\n            38px\r\n        );\r\n\r\n    line-height: 1.15;\r\n\r\n    font-weight: 600;\r\n\r\n    letter-spacing:\r\n        -0.5px;\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.products-subtitle {\r\n\r\n    margin:\r\n        10px 0 0;\r\n\r\n    color:\r\n        var(--products-blue);\r\n\r\n    font-size:\r\n        clamp(\r\n            16px,\r\n            1.5vw,\r\n            20px\r\n        );\r\n\r\n    line-height: 1.45;\r\n\r\n    font-weight: 400;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCT GRID\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.products-grid {\r\n\r\n    display: grid;\r\n\r\n    grid-template-columns:\r\n        repeat(\r\n            3,\r\n            minmax(0, 1fr)\r\n        );\r\n\r\n    gap: 38px;\r\n\r\n    align-items: start;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCT CARD\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-card {\r\n\r\n    display: block;\r\n\r\n    position: relative;\r\n\r\n    color: inherit;\r\n\r\n    text-decoration: none;\r\n\r\n    outline: none;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   IMAGE WRAPPER\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-image-wrap {\r\n\r\n    position: relative;\r\n\r\n    width: 100%;\r\n\r\n    aspect-ratio:\r\n        0.84 \/ 1;\r\n\r\n    overflow: hidden;\r\n\r\n    border-radius: 10px;\r\n\r\n    background:\r\n        var(--products-bg);\r\n\r\n    border:\r\n        1px solid\r\n        rgba(\r\n            216,\r\n            225,\r\n            234,\r\n            0.9\r\n        );\r\n\r\n    box-shadow:\r\n        0 4px 18px\r\n        rgba(\r\n            0,\r\n            59,\r\n            120,\r\n            0.04\r\n        );\r\n\r\n    transition:\r\n        transform 0.28s ease,\r\n        box-shadow 0.28s ease,\r\n        border-color 0.28s ease;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   IMAGE\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-image {\r\n\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    width: 100%;\r\n    height: 100%;\r\n\r\n    display: block;\r\n\r\n    object-fit: cover;\r\n\r\n    object-position: center;\r\n\r\n    transition:\r\n        transform 0.5s\r\n        cubic-bezier(\r\n            0.22,\r\n            1,\r\n            0.36,\r\n            1\r\n        );\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   IMAGE OVERLAY\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-image-overlay {\r\n\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    z-index: 1;\r\n\r\n    background:\r\n        linear-gradient(\r\n            to bottom,\r\n            rgba(0,0,0,0)\r\n            55%,\r\n\r\n            rgba(0,0,0,0.04)\r\n            70%,\r\n\r\n            rgba(0,0,0,0.42)\r\n            100%\r\n        );\r\n\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCT NAME\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-name {\r\n\r\n    position: absolute;\r\n\r\n    left: 0;\r\n    right: 0;\r\n\r\n    bottom: 0;\r\n\r\n    z-index: 2;\r\n\r\n    display: flex;\r\n\r\n    align-items: center;\r\n\r\n    justify-content: space-between;\r\n\r\n    gap: 15px;\r\n\r\n    padding:\r\n        22px 18px\r\n        17px;\r\n\r\n    color: #FFFFFF;\r\n\r\n    font-size:\r\n        clamp(\r\n            19px,\r\n            2vw,\r\n            25px\r\n        );\r\n\r\n    line-height: 1.1;\r\n\r\n    font-weight: 700;\r\n\r\n    text-transform: uppercase;\r\n\r\n    letter-spacing:\r\n        0.2px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCT ARROW\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-arrow {\r\n\r\n    display: flex;\r\n\r\n    align-items: center;\r\n\r\n    justify-content: center;\r\n\r\n    flex:\r\n        0 0 31px;\r\n\r\n    width: 31px;\r\n    height: 31px;\r\n\r\n    border:\r\n        1px solid\r\n        rgba(\r\n            255,\r\n            255,\r\n            255,\r\n            0.65\r\n        );\r\n\r\n    border-radius: 50%;\r\n\r\n    background:\r\n        rgba(\r\n            0,\r\n            59,\r\n            120,\r\n            0.35\r\n        );\r\n\r\n    font-size: 16px;\r\n\r\n    transition:\r\n        transform 0.25s ease,\r\n        background 0.25s ease;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCT META\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-meta {\r\n\r\n    margin-top: 12px;\r\n\r\n    padding:\r\n        0 3px;\r\n\r\n    color:\r\n        var(--products-muted);\r\n\r\n    font-size: 12px;\r\n\r\n    line-height: 1.5;\r\n\r\n    font-weight: 500;\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.product-meta span {\r\n\r\n    padding:\r\n        0 4px;\r\n\r\n    color:\r\n        #A9B5C4;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   HOVER\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-card:hover\r\n.product-image-wrap {\r\n\r\n    transform:\r\n        translateY(-5px);\r\n\r\n    border-color:\r\n        rgba(\r\n            75,\r\n            112,\r\n            208,\r\n            0.4\r\n        );\r\n\r\n    box-shadow:\r\n        0 18px 38px\r\n        rgba(\r\n            0,\r\n            59,\r\n            120,\r\n            0.13\r\n        );\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.product-card:hover\r\n.product-image {\r\n\r\n    transform:\r\n        scale(1.035);\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.product-card:hover\r\n.product-arrow {\r\n\r\n    transform:\r\n        translateX(3px);\r\n\r\n    background:\r\n        rgba(\r\n            0,\r\n            59,\r\n            120,\r\n            0.75\r\n        );\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   FOCUS\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.product-card:focus-visible\r\n.product-image-wrap {\r\n\r\n    outline:\r\n        3px solid\r\n        rgba(\r\n            75,\r\n            112,\r\n            208,\r\n            0.45\r\n        );\r\n\r\n    outline-offset:\r\n        4px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   FOOTER \/ CTA\r\n   ========================================================= *\/\r\n\r\n.gimasi-products-section\r\n.products-footer {\r\n\r\n    display: flex;\r\n\r\n    justify-content: flex-end;\r\n\r\n    margin-top: 26px;\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.products-button {\r\n\r\n    display: inline-flex;\r\n\r\n    align-items: center;\r\n\r\n    gap: 12px;\r\n\r\n    min-height: 42px;\r\n\r\n    padding:\r\n        11px 17px;\r\n\r\n    border-radius: 8px;\r\n\r\n    background:\r\n        var(--products-blue);\r\n\r\n    color: #FFFFFF;\r\n\r\n    text-decoration: none;\r\n\r\n    font-size: 13px;\r\n\r\n    font-weight: 600;\r\n\r\n    transition:\r\n        transform 0.22s ease,\r\n        background 0.22s ease,\r\n        box-shadow 0.22s ease;\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.products-button span {\r\n\r\n    font-size: 16px;\r\n\r\n    line-height: 1;\r\n\r\n    transition:\r\n        transform 0.22s ease;\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.products-button:hover {\r\n\r\n    background:\r\n        var(--products-blue-dark);\r\n\r\n    transform:\r\n        translateY(-2px);\r\n\r\n    box-shadow:\r\n        0 8px 20px\r\n        rgba(\r\n            0,\r\n            59,\r\n            120,\r\n            0.18\r\n        );\r\n}\r\n\r\n\r\n.gimasi-products-section\r\n.products-button:hover span {\r\n\r\n    transform:\r\n        translateX(3px);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TABLET\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 900px) {\r\n\r\n    .gimasi-products-section {\r\n\r\n        padding:\r\n            60px 35px\r\n            65px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-grid {\r\n\r\n        gap: 22px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .product-name {\r\n\r\n        font-size: 20px;\r\n\r\n        padding:\r\n            19px 15px\r\n            15px;\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SMALL TABLET\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 720px) {\r\n\r\n    .gimasi-products-section {\r\n\r\n        padding:\r\n            55px 25px\r\n            60px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-grid {\r\n\r\n        grid-template-columns:\r\n            repeat(\r\n                2,\r\n                minmax(0, 1fr)\r\n            );\r\n\r\n        gap: 22px;\r\n    }\r\n\r\n\r\n    \/*\r\n     * Make the third card span the full width\r\n     * on small tablets.\r\n     *\/\r\n\r\n    .gimasi-products-section\r\n    .product-card:last-child {\r\n\r\n        grid-column:\r\n            1 \/ -1;\r\n\r\n        max-width:\r\n            calc(\r\n                50% - 11px\r\n            );\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-footer {\r\n\r\n        margin-top: 28px;\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MOBILE\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 520px) {\r\n\r\n    .gimasi-products-section {\r\n\r\n        padding:\r\n            48px 20px\r\n            52px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-intro {\r\n\r\n        margin-bottom: 28px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-title {\r\n\r\n        font-size: 27px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-subtitle {\r\n\r\n        margin-top: 8px;\r\n\r\n        font-size: 15px;\r\n\r\n        line-height: 1.4;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-grid {\r\n\r\n        grid-template-columns: 1fr;\r\n\r\n        gap: 22px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .product-card:last-child {\r\n\r\n        grid-column: auto;\r\n\r\n        max-width: none;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .product-image-wrap {\r\n\r\n        aspect-ratio:\r\n            1 \/ 1.05;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .product-name {\r\n\r\n        font-size: 20px;\r\n\r\n        padding:\r\n            20px 16px\r\n            15px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .product-meta {\r\n\r\n        font-size: 11px;\r\n\r\n        margin-top: 9px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-footer {\r\n\r\n        justify-content: flex-start;\r\n\r\n        margin-top: 28px;\r\n    }\r\n\r\n\r\n    .gimasi-products-section\r\n    .products-button {\r\n\r\n        width: 100%;\r\n\r\n        justify-content: center;\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   REDUCED MOTION\r\n   ========================================================= *\/\r\n\r\n@media (\r\n    prefers-reduced-motion: reduce\r\n) {\r\n\r\n    .gimasi-products-section\r\n    .product-image-wrap,\r\n\r\n    .gimasi-products-section\r\n    .product-image,\r\n\r\n    .gimasi-products-section\r\n    .product-arrow,\r\n\r\n    .gimasi-products-section\r\n    .products-button,\r\n\r\n    .gimasi-products-section\r\n    .products-button span {\r\n\r\n        transition: none;\r\n    }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n\r\n<script>\r\n\r\n\/* =========================================================\r\n   GIMASI \u2014 PRODUCT SECTION TRIANGLES\r\n   ========================================================= *\/\r\n\r\n(function () {\r\n\r\n    \"use strict\";\r\n\r\n\r\n    function initProductTriangles() {\r\n\r\n        const sections =\r\n            document.querySelectorAll(\r\n                \".gimasi-products-section\"\r\n            );\r\n\r\n\r\n        sections.forEach(function (section) {\r\n\r\n\r\n            const canvas =\r\n                section.querySelector(\r\n                    \".products-triangle-canvas\"\r\n                );\r\n\r\n\r\n            if (!canvas) {\r\n                return;\r\n            }\r\n\r\n\r\n            const ctx =\r\n                canvas.getContext(\"2d\");\r\n\r\n\r\n            if (!ctx) {\r\n                return;\r\n            }\r\n\r\n\r\n            let width = 0;\r\n\r\n            let height = 0;\r\n\r\n\r\n            let triangles = [];\r\n\r\n\r\n            \/*\r\n             * -----------------------------------------------------\r\n             * MOUSE\r\n             * -----------------------------------------------------\r\n             *\/\r\n\r\n            const mouse = {\r\n\r\n                x: -1000,\r\n\r\n                y: -1000,\r\n\r\n                active: false\r\n\r\n            };\r\n\r\n\r\n            section.addEventListener(\r\n                \"mousemove\",\r\n                function (event) {\r\n\r\n                    const rect =\r\n                        section.getBoundingClientRect();\r\n\r\n\r\n                    mouse.x =\r\n                        event.clientX -\r\n                        rect.left;\r\n\r\n\r\n                    mouse.y =\r\n                        event.clientY -\r\n                        rect.top;\r\n\r\n\r\n                    mouse.active = true;\r\n\r\n                },\r\n                {\r\n                    passive: true\r\n                }\r\n            );\r\n\r\n\r\n            section.addEventListener(\r\n                \"mouseleave\",\r\n                function () {\r\n\r\n                    mouse.active = false;\r\n\r\n                }\r\n            );\r\n\r\n\r\n            \/*\r\n             * -----------------------------------------------------\r\n             * CREATE TRIANGLES\r\n             * -----------------------------------------------------\r\n             *\/\r\n\r\n            function createTriangles() {\r\n\r\n                triangles = [];\r\n\r\n\r\n                const area =\r\n                    width * height;\r\n\r\n\r\n                \/*\r\n                 * Sparse background.\r\n                 *\/\r\n\r\n                const count =\r\n                    Math.min(\r\n                        70,\r\n                        Math.max(\r\n                            35,\r\n                            Math.floor(\r\n                                area \/ 19000\r\n                            )\r\n                        )\r\n                    );\r\n\r\n\r\n                for (\r\n                    let i = 0;\r\n                    i < count;\r\n                    i++\r\n                ) {\r\n\r\n                    triangles.push({\r\n\r\n                        x:\r\n                            Math.random()\r\n                            * width,\r\n\r\n                        y:\r\n                            Math.random()\r\n                            * height,\r\n\r\n                        size:\r\n                            7 +\r\n                            Math.random()\r\n                            * 14,\r\n\r\n                        rotation:\r\n                            Math.random()\r\n                            * Math.PI * 2,\r\n\r\n                        rotationSpeed:\r\n                            (\r\n                                Math.random()\r\n                                - 0.5\r\n                            ) * 0.0015,\r\n\r\n                        driftX:\r\n                            (\r\n                                Math.random()\r\n                                - 0.5\r\n                            ) * 0.025,\r\n\r\n                        driftY:\r\n                            (\r\n                                Math.random()\r\n                                - 0.5\r\n                            ) * 0.025,\r\n\r\n                        pushX: 0,\r\n\r\n                        pushY: 0,\r\n\r\n                        opacity:\r\n                            0.08 +\r\n                            Math.random()\r\n                            * 0.11\r\n\r\n                    });\r\n\r\n                }\r\n\r\n            }\r\n\r\n\r\n            \/*\r\n             * -----------------------------------------------------\r\n             * RESIZE\r\n             * -----------------------------------------------------\r\n             *\/\r\n\r\n            function resize() {\r\n\r\n                const rect =\r\n                    section.getBoundingClientRect();\r\n\r\n\r\n                width =\r\n                    rect.width;\r\n\r\n\r\n                height =\r\n                    rect.height;\r\n\r\n\r\n                if (\r\n                    width <= 0 ||\r\n                    height <= 0\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n\r\n                const dpr =\r\n                    Math.min(\r\n                        window.devicePixelRatio || 1,\r\n                        2\r\n                    );\r\n\r\n\r\n                canvas.width =\r\n                    Math.round(\r\n                        width * dpr\r\n                    );\r\n\r\n\r\n                canvas.height =\r\n                    Math.round(\r\n                        height * dpr\r\n                    );\r\n\r\n\r\n                canvas.style.width =\r\n                    width + \"px\";\r\n\r\n\r\n                canvas.style.height =\r\n                    height + \"px\";\r\n\r\n\r\n                ctx.setTransform(\r\n                    dpr,\r\n                    0,\r\n                    0,\r\n                    dpr,\r\n                    0,\r\n                    0\r\n                );\r\n\r\n\r\n                createTriangles();\r\n\r\n            }\r\n\r\n\r\n            \/*\r\n             * -----------------------------------------------------\r\n             * DRAW TRIANGLE\r\n             * -----------------------------------------------------\r\n             *\/\r\n\r\n            function drawTriangle(triangle) {\r\n\r\n                const x =\r\n                    triangle.x +\r\n                    triangle.pushX;\r\n\r\n\r\n                const y =\r\n                    triangle.y +\r\n                    triangle.pushY;\r\n\r\n\r\n                ctx.save();\r\n\r\n\r\n                ctx.translate(\r\n                    x,\r\n                    y\r\n                );\r\n\r\n\r\n                ctx.rotate(\r\n                    triangle.rotation\r\n                );\r\n\r\n\r\n                ctx.beginPath();\r\n\r\n\r\n                ctx.moveTo(\r\n                    0,\r\n                    -triangle.size\r\n                );\r\n\r\n\r\n                ctx.lineTo(\r\n                    triangle.size,\r\n                    triangle.size\r\n                );\r\n\r\n\r\n                ctx.lineTo(\r\n                    -triangle.size,\r\n                    triangle.size\r\n                );\r\n\r\n\r\n                ctx.closePath();\r\n\r\n\r\n                ctx.strokeStyle =\r\n                    \"rgba(75,112,208,\" +\r\n                    triangle.opacity +\r\n                    \")\";\r\n\r\n\r\n                ctx.lineWidth = 1;\r\n\r\n\r\n                ctx.stroke();\r\n\r\n\r\n                ctx.restore();\r\n\r\n            }\r\n\r\n\r\n            \/*\r\n             * -----------------------------------------------------\r\n             * ANIMATION\r\n             * -----------------------------------------------------\r\n             *\/\r\n\r\n            function animate() {\r\n\r\n\r\n                ctx.clearRect(\r\n                    0,\r\n                    0,\r\n                    width,\r\n                    height\r\n                );\r\n\r\n\r\n                triangles.forEach(\r\n                    function (triangle) {\r\n\r\n\r\n                        \/*\r\n                         * Slow autonomous movement\r\n                         *\/\r\n\r\n                        triangle.x +=\r\n                            triangle.driftX;\r\n\r\n\r\n                        triangle.y +=\r\n                            triangle.driftY;\r\n\r\n\r\n                        triangle.rotation +=\r\n                            triangle.rotationSpeed;\r\n\r\n\r\n                        \/*\r\n                         * -------------------------------------------------\r\n                         * MOUSE INTERACTION\r\n                         * -------------------------------------------------\r\n                         *\/\r\n\r\n                        if (\r\n                            mouse.active\r\n                        ) {\r\n\r\n                            const dx =\r\n                                triangle.x -\r\n                                mouse.x;\r\n\r\n\r\n                            const dy =\r\n                                triangle.y -\r\n                                mouse.y;\r\n\r\n\r\n                            const distance =\r\n                                Math.sqrt(\r\n                                    dx * dx +\r\n                                    dy * dy\r\n                                );\r\n\r\n\r\n                            const radius =\r\n                                170;\r\n\r\n\r\n                            if (\r\n                                distance <\r\n                                radius\r\n                            ) {\r\n\r\n                                const force =\r\n                                    (\r\n                                        radius -\r\n                                        distance\r\n                                    ) \/ radius;\r\n\r\n\r\n                                const angle =\r\n                                    Math.atan2(\r\n                                        dy,\r\n                                        dx\r\n                                    );\r\n\r\n\r\n                                const targetX =\r\n                                    Math.cos(angle)\r\n                                    * force\r\n                                    * 55;\r\n\r\n\r\n                                const targetY =\r\n                                    Math.sin(angle)\r\n                                    * force\r\n                                    * 55;\r\n\r\n\r\n                                triangle.pushX +=\r\n                                    (\r\n                                        targetX -\r\n                                        triangle.pushX\r\n                                    ) * 0.14;\r\n\r\n\r\n                                triangle.pushY +=\r\n                                    (\r\n                                        targetY -\r\n                                        triangle.pushY\r\n                                    ) * 0.14;\r\n\r\n\r\n                                triangle.rotation +=\r\n                                    force * 0.018;\r\n\r\n                            } else {\r\n\r\n                                triangle.pushX *= 0.91;\r\n\r\n                                triangle.pushY *= 0.91;\r\n\r\n                            }\r\n\r\n                        } else {\r\n\r\n                            triangle.pushX *= 0.94;\r\n\r\n                            triangle.pushY *= 0.94;\r\n\r\n                        }\r\n\r\n\r\n                        \/*\r\n                         * Keep inside canvas\r\n                         *\/\r\n\r\n                        if (\r\n                            triangle.x <\r\n                            -40\r\n                        ) {\r\n\r\n                            triangle.x =\r\n                                width + 40;\r\n\r\n                        }\r\n\r\n\r\n                        if (\r\n                            triangle.x >\r\n                            width + 40\r\n                        ) {\r\n\r\n                            triangle.x =\r\n                                -40;\r\n\r\n                        }\r\n\r\n\r\n                        if (\r\n                            triangle.y <\r\n                            -40\r\n                        ) {\r\n\r\n                            triangle.y =\r\n                                height + 40;\r\n\r\n                        }\r\n\r\n\r\n                        if (\r\n                            triangle.y >\r\n                            height + 40\r\n                        ) {\r\n\r\n                            triangle.y =\r\n                                -40;\r\n\r\n                        }\r\n\r\n\r\n                        drawTriangle(\r\n                            triangle\r\n                        );\r\n\r\n                    }\r\n                );\r\n\r\n\r\n                requestAnimationFrame(\r\n                    animate\r\n                );\r\n\r\n            }\r\n\r\n\r\n            \/*\r\n             * -----------------------------------------------------\r\n             * START\r\n             * -----------------------------------------------------\r\n             *\/\r\n\r\n            resize();\r\n\r\n            animate();\r\n\r\n\r\n            let resizeTimeout;\r\n\r\n\r\n            window.addEventListener(\r\n                \"resize\",\r\n                function () {\r\n\r\n                    clearTimeout(\r\n                        resizeTimeout\r\n                    );\r\n\r\n\r\n                    resizeTimeout =\r\n                        setTimeout(\r\n                            resize,\r\n                            100\r\n                        );\r\n\r\n                },\r\n                {\r\n                    passive: true\r\n                }\r\n            );\r\n\r\n        });\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * Elementor compatibility\r\n     *\/\r\n\r\n    if (\r\n        document.readyState ===\r\n        \"loading\"\r\n    ) {\r\n\r\n        document.addEventListener(\r\n            \"DOMContentLoaded\",\r\n            initProductTriangles\r\n        );\r\n\r\n    } else {\r\n\r\n        initProductTriangles();\r\n\r\n    }\r\n\r\n\r\n})();\r\n\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ea5d34f e-con-full e-flex e-con e-parent\" data-id=\"ea5d34f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-83e8014 e-con-full e-flex e-con e-child\" data-id=\"83e8014\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d70b612 eael-wpforms-labels-yes eael-wpforms-form-button-custom elementor-widget elementor-widget-eael-wpforms\" data-id=\"d70b612\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"eael-wpforms.default\">\n\t\t\t\t\t            <div class=\"eael-contact-form eael-wpforms eael-wpforms-align-default\">\n                                <div class=\"wpforms-container \" id=\"wpforms-12125\"><form id=\"wpforms-form-12125\" class=\"wpforms-validate wpforms-form wpforms-ajax-form\" data-formid=\"12125\" method=\"post\" enctype=\"multipart\/form-data\" action=\"\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F12160\" data-token=\"dd9a77fff0f513f8f2f49227a570e8ba\" data-token-time=\"1791244067\"><div class=\"wpforms-head-container\"><\/div><noscript class=\"wpforms-error-noscript\">Please enable JavaScript in your browser to complete this form.<\/noscript><div class=\"wpforms-field-container\"><div id=\"wpforms-12125-field_1-container\" class=\"wpforms-field wpforms-field-name\" data-field-id=\"1\"><label class=\"wpforms-field-label\" for=\"wpforms-12125-field_1\">Name  <span class=\"wpforms-required-label\">*<\/span><\/label><input type=\"text\" id=\"wpforms-12125-field_1\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][1]\" required><\/div><div id=\"wpforms-12125-field_3-container\" class=\"wpforms-field wpforms-field-email\" data-field-id=\"3\"><label class=\"wpforms-field-label\" for=\"wpforms-12125-field_3\">Email <span class=\"wpforms-required-label\">*<\/span><\/label><input type=\"email\" id=\"wpforms-12125-field_3\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][3]\" spellcheck=\"false\" required><\/div>\t\t<div id=\"wpforms-12125-field_6-container\"\n\t\t\tclass=\"wpforms-field wpforms-field-text\"\n\t\t\tdata-field-type=\"text\"\n\t\t\tdata-field-id=\"6\"\n\t\t\t>\n\t\t\t<label class=\"wpforms-field-label\" for=\"wpforms-12125-field_6\" >What Email Message<\/label>\n\t\t\t<input type=\"text\" id=\"wpforms-12125-field_6\" class=\"wpforms-field-medium\" name=\"wpforms[fields][6]\" >\n\t\t<\/div>\n\t\t<div id=\"wpforms-12125-field_2-container\" class=\"wpforms-field wpforms-field-text\" data-field-id=\"2\"><label class=\"wpforms-field-label\" for=\"wpforms-12125-field_2\">Company<\/label><input type=\"text\" id=\"wpforms-12125-field_2\" class=\"wpforms-field-medium\" name=\"wpforms[fields][2]\" ><\/div><div id=\"wpforms-12125-field_7-container\" class=\"wpforms-field wpforms-field-select wpforms-field-select-style-modern\" data-field-id=\"7\"><label class=\"wpforms-field-label\" for=\"wpforms-12125-field_7\">What can we help you with?<\/label><select id=\"wpforms-12125-field_7\" class=\"wpforms-field-medium choicesjs-select\" data-size-class=\"wpforms-field-row wpforms-field-medium\" data-search-enabled=\"\" name=\"wpforms[fields][7]\"><option value=\"\" class=\"placeholder\" disabled  selected='selected'><\/option><option value=\"IoT Development\"  class=\"choice-1 depth-1\"  >IoT Development<\/option><option value=\"Hardware Development\"  class=\"choice-2 depth-1\"  >Hardware Development<\/option><option value=\"Software Development\"  class=\"choice-4 depth-1\"  >Software Development<\/option><option value=\"Existing IoT Project\"  class=\"choice-3 depth-1\"  >Existing IoT Project<\/option><option value=\"Other\"  class=\"choice-5 depth-1\"  >Other<\/option><\/select><\/div><div id=\"wpforms-12125-field_5-container\" class=\"wpforms-field wpforms-field-textarea\" data-field-id=\"5\"><label class=\"wpforms-field-label\" for=\"wpforms-12125-field_5\">Message<\/label><textarea id=\"wpforms-12125-field_5\" class=\"wpforms-field-medium\" name=\"wpforms[fields][5]\" ><\/textarea><\/div><div id=\"wpforms-12125-field_4-container\" class=\"wpforms-field wpforms-field-radio\" data-field-id=\"4\"><label class=\"wpforms-field-label\">Privacy Policy <span class=\"wpforms-required-label\">*<\/span><\/label><ul id=\"wpforms-12125-field_4\" class=\"wpforms-field-required\"><li class=\"choice-1 depth-1\"><input type=\"radio\" id=\"wpforms-12125-field_4_1\" name=\"wpforms[fields][4]\" value=\"I have read and accepted the Privacy Policy\" required ><label class=\"wpforms-field-label-inline\" for=\"wpforms-12125-field_4_1\">I have read and accepted the Privacy Policy<\/label><\/li><\/ul><\/div><script>\n\t\t\t\t( function() {\n\t\t\t\t\tconst style = document.createElement( 'style' );\n\t\t\t\t\tstyle.appendChild( document.createTextNode( '#wpforms-12125-field_6-container { position: absolute !important; overflow: hidden !important; display: inline !important; height: 1px !important; width: 1px !important; z-index: -1000 !important; padding: 0 !important; } #wpforms-12125-field_6-container input { visibility: hidden; } #wpforms-conversational-form-page #wpforms-12125-field_6-container label { counter-increment: none; }' ) );\n\t\t\t\t\tdocument.head.appendChild( style );\n\t\t\t\t\tdocument.currentScript?.remove();\n\t\t\t\t} )();\n\t\t\t<\/script><\/div><!-- .wpforms-field-container --><div class=\"wpforms-recaptcha-container wpforms-is-turnstile\" ><div class=\"wpforms-turnstile\" data-sitekey=\"0x4AAAAAAEit5kzvFz4xOGEW\" data-action=\"FormID-12125\"><\/div><input type=\"text\" name=\"g-recaptcha-hidden\" class=\"wpforms-recaptcha-hidden\" style=\"position:absolute!important;clip:rect(0,0,0,0)!important;height:1px!important;width:1px!important;border:0!important;overflow:hidden!important;padding:0!important;margin:0!important;\" data-rule-turnstile=\"1\"><\/div><div class=\"wpforms-submit-container\" ><input type=\"hidden\" name=\"wpforms[id]\" value=\"12125\"><input type=\"hidden\" name=\"wpforms[time_token]\" value=\"1791244067.f5d7c60473b70fcb7e0f8121f6d9514b20acbe106282f9a180fc8288e406b047\"><input type=\"hidden\" name=\"page_title\" value=\"\"><input type=\"hidden\" name=\"page_url\" value=\"https:\/\/www.gimasi.com\/index.php?rest_route=\/wp\/v2\/pages\/12160\"><input type=\"hidden\" name=\"url_referer\" value=\"\"><button type=\"submit\" name=\"wpforms[submit]\" id=\"wpforms-submit-12125\" class=\"wpforms-submit\" data-alt-text=\"Invio in corso...\" data-submit-text=\"Send\" aria-live=\"assertive\" value=\"wpforms-submit\">Send<\/button><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gimasi.com\/wp-content\/plugins\/wpforms-lite\/assets\/images\/submit-spin.svg\" class=\"wpforms-submit-spinner\" style=\"display: none;\" width=\"26\" height=\"26\" alt=\"Loading\"><\/div><\/form><\/div>  <!-- .wpforms-container -->            <\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1ceba8a e-con-full e-flex e-con e-child\" data-id=\"1ceba8a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-bd952b1 e-con-full e-flex e-con e-child\" data-id=\"bd952b1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8fc5022 elementor-widget elementor-widget-heading\" data-id=\"8fc5022\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Designed in Gimasi. Built for the field. Supported by our team.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-506c153 e-con-full e-flex e-con e-child\" data-id=\"506c153\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1583a5d e-grid e-con-full e-con e-child\" data-id=\"1583a5d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-158a44c e-con-full e-flex e-con e-child\" data-id=\"158a44c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-44073d1 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"44073d1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d3b1f09 elementor-widget elementor-widget-icon-box\" data-id=\"d3b1f09\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h4 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tDesign\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h4>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tPCB \u00b7 Firmware \u00b7 Hardware \u00b7 Software\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d4cea47 e-con-full e-flex e-con e-child\" data-id=\"d4cea47\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8562651 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"8562651\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5cd7796 elementor-widget elementor-widget-icon-box\" data-id=\"5cd7796\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h4 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tBuild\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h4>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tSMT\u00b7 Assembly Line\u00b7 Testing\u00b7 3D\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-070e55e e-con-full e-flex e-con e-child\" data-id=\"070e55e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-82ba117 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"82ba117\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3bed47c elementor-widget elementor-widget-icon-box\" data-id=\"3bed47c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h4 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tTeam\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h4>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tFrom idea to field-ready product.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc5e4dd elementor-widget elementor-widget-menu-anchor\" data-id=\"dc5e4dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"WHO\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e720139 elementor-align-left elementor-mobile-align-left elementor-widget elementor-widget-button\" data-id=\"e720139\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm elementor-animation-grow\" href=\"https:\/\/www.gimasi.com\/?page_id=3743\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-users\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Meet the Team <\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-23b88e0 e-flex e-con-boxed e-con e-parent\" data-id=\"23b88e0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-107de10 e-con-full e-flex e-con e-child\" data-id=\"107de10\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e639a17 elementor-widget elementor-widget-heading\" data-id=\"e639a17\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Our Partners say...<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c7091d elementor-widget elementor-widget-text-editor\" data-id=\"5c7091d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Our results are measured not only by what we build, but also by the long-term partnerships we develop with our customers.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-dc0cd41 elementor-section-height-min-height elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-items-middle\" data-id=\"dc0cd41\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4f90cf9\" data-id=\"4f90cf9\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-68eac61 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"68eac61\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-5dbf2e9\" data-id=\"5dbf2e9\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ed7a2a8 elementor-invisible elementor-widget elementor-widget-eael-testimonial\" data-id=\"ed7a2a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;zoomIn&quot;}\" data-widget_type=\"eael-testimonial.default\">\n\t\t\t\t\t\n\t<div id=\"eael-testimonial-ed7a2a8\" class=\"eael-testimonial-item clearfix  content-bottom-icon-title-inline\">\n\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\t\t<div class=\"eael-testimonial-content\">\n\t\t\t\t<div class=\"eael-testimonial-text\"><p>&#8220;We appreciate GIMASI\u2019s flexibility and their ability to respond directly to our individual needs. Their friendly support makes the collaboration pleasant and reliable.&#8221;<\/p><\/div>\t\t\t<\/div>\n\t\t\t<div class=\"eael-testimonial-content eael-testimonial-inline-bio\">\n\t\t\t\t\t\t\t\t<div class=\"bio-text\"><p class=\"eael-testimonial-user\" style=\"display: block; float: none;\">TRINQ <\/p><p class=\"eael-testimonial-user-company\">CEO<\/p><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\n\t\t\n\t\t<span class=\"eael-testimonial-quote\"><\/span>\n\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-dfffb24\" data-id=\"dfffb24\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ae77e97 elementor-invisible elementor-widget elementor-widget-eael-testimonial\" data-id=\"ae77e97\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;zoomIn&quot;}\" data-widget_type=\"eael-testimonial.default\">\n\t\t\t\t\t\n\t<div id=\"eael-testimonial-ae77e97\" class=\"eael-testimonial-item clearfix testimonial-avatar-rounded content-bottom-icon-title-inline\">\n\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\t\t<div class=\"eael-testimonial-content\">\n\t\t\t\t<div class=\"eael-testimonial-text\"><p>Gimasi proved to be a highly professional and valuable partner in designing a cold chain monitoring system, helping improve processes, enhance quality control, save time and energy, and reduce food waste. Their after-sales support was also excellent, responsive and reliable.<\/p><\/div>\t\t\t<\/div>\n\t\t\t<div class=\"eael-testimonial-content eael-testimonial-inline-bio\">\n\t\t\t\t\t\t\t\t<div class=\"bio-text\"><p class=\"eael-testimonial-user\" style=\"display: block; float: none;\">COOP<\/p><p class=\"eael-testimonial-user-company\">Leiter IT Service Center OT<\/p><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\n\t\t\n\t\t<span class=\"eael-testimonial-quote\"><\/span>\n\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b0c3aa8 elementor-invisible elementor-widget elementor-widget-eael-testimonial\" data-id=\"b0c3aa8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;zoomIn&quot;,&quot;_animation_delay&quot;:200}\" data-widget_type=\"eael-testimonial.default\">\n\t\t\t\t\t\n\t<div id=\"eael-testimonial-b0c3aa8\" class=\"eael-testimonial-item clearfix  content-bottom-icon-title-inline\">\n\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\t\t<div class=\"eael-testimonial-content\">\n\t\t\t\t<div class=\"eael-testimonial-text\"><p>Since 2016, Swisscom has collaborated with Gimasi on multiple IoT projects, from custom sensor hardware and software to large-scale deployments. Gimasi combines strong expertise in low-power and LoRaWAN technologies with a proactive approach and consistent quality. Their work on Coop\u2019s cold chain monitoring and large-scale LoRaWAN FOTA solutions has helped Swisscom deliver innovative IoT solutions for its customers.<\/p><\/div>\t\t\t<\/div>\n\t\t\t<div class=\"eael-testimonial-content eael-testimonial-inline-bio\">\n\t\t\t\t\t\t\t<div class=\"eael-testimonial-image\">\n\t\t\t\t\t\t\t\t\t<figure><img decoding=\"async\" src=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/05\/Swisscom_logo.svg\" title=\"Swisscom \u2013 Connectivity and IoT partnership\" alt=\"Swisscom Logo -strategic telecom partner of Gimasi IoT Swiss Solution IoT development partner - IoT Engineering\" loading=\"lazy\" \/><\/figure>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"bio-text\"><p class=\"eael-testimonial-user\">SWISSCOM<\/p><p class=\"eael-testimonial-user-company\">Solution Architect II (AG)<\/p><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\n\t\t\n\t\t<span class=\"eael-testimonial-quote\"><\/span>\n\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-c6a9838\" data-id=\"c6a9838\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4df4545 elementor-invisible elementor-widget elementor-widget-eael-testimonial\" data-id=\"4df4545\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;zoomIn&quot;}\" data-widget_type=\"eael-testimonial.default\">\n\t\t\t\t\t\n\t<div id=\"eael-testimonial-4df4545\" class=\"eael-testimonial-item clearfix testimonial-avatar-rounded content-bottom-icon-title-inline\">\n\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\t\t<div class=\"eael-testimonial-content\">\n\t\t\t\t<div class=\"eael-testimonial-text\"><div>We are pleased to collaborate with Gimasi team, which are always demonstrating their strong support and expertise in the IoT field.<\/div><\/div>\t\t\t<\/div>\n\t\t\t<div class=\"eael-testimonial-content eael-testimonial-inline-bio\">\n\t\t\t\t\t\t\t\t<div class=\"bio-text\"><p class=\"eael-testimonial-user\" style=\"display: block; float: none;\">HemarGroup<\/p><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\n\t\t\n\t\t<span class=\"eael-testimonial-quote\"><\/span>\n\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e252f2 elementor-widget__width-auto elementor-absolute elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"4e252f2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/static.live.templately.com\/agency\/2022\/10\/515516d9-test-bg-shape.png\" title=\"\" alt=\"\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0fcdc90 elementor-widget__width-auto elementor-absolute elementor-hidden-mobile e-transform e-transform elementor-widget elementor-widget-image\" data-id=\"0fcdc90\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;,&quot;_transform_rotateZ_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:180,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:11,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:372,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/static.live.templately.com\/agency\/2022\/10\/515516d9-test-bg-shape.png\" title=\"\" alt=\"\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-fbda79c e-con-full elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"fbda79c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6450958 elementor-widget elementor-widget-html\" data-id=\"6450958\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\r\n<html lang=\"it\">\r\n<head>\r\n<meta charset=\"utf-8\" \/>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\r\n<title>Gimasi \u2014 IoT Blocks<\/title>\r\n\r\n<style>\r\n  :root {\r\n    --ink: #162235;\r\n    --muted: #657386;\r\n    --line: #c7d1dc;\r\n    --surface-soft: #f4f6fa;\r\n    --accent: #2f6f9f;\r\n    --accent-soft: #dcecf7;\r\n    --mono: ui-monospace, \"SF Mono\", \"Roboto Mono\", \"Cascadia Code\", Consolas, monospace;\r\n    --sans: Arial, Helvetica, sans-serif;\r\n  }\r\n\r\n  * { box-sizing: border-box; }\r\n  body { margin: 0; font-family: var(--sans); color: var(--ink); background: #fff; }\r\n\r\n  .blocks-wrap {\r\n    position: relative;\r\n    background: var(--surface-soft);\r\n    padding: 56px 24px 64px;\r\n    overflow: hidden;\r\n  }\r\n  .blocks-wrap::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0;\r\n    background-image: radial-gradient(var(--line) 1px, transparent 1px);\r\n    background-size: 26px 26px;\r\n    opacity: 0.4;\r\n    mask-image: radial-gradient(ellipse at center, #000 55%, transparent 92%);\r\n    pointer-events: none;\r\n  }\r\n\r\n  .blocks-header {\r\n    position: relative;\r\n    z-index: 1;\r\n    max-width: 600px;\r\n    margin: 0 auto 32px;\r\n    text-align: center;\r\n  }\r\n  .blocks-eyebrow {\r\n    display: inline-block;\r\n    font-family: var(--mono);\r\n    font-size: 11.5px;\r\n    letter-spacing: 1.5px;\r\n    text-transform: uppercase;\r\n    color: var(--accent);\r\n    background: var(--accent-soft);\r\n    padding: 6px 12px;\r\n    border-radius: 999px;\r\n    margin-bottom: 16px;\r\n  }\r\n  .blocks-header h2 {\r\n    margin: 0 0 12px;\r\n    font-size: clamp(24px, 3vw, 32px);\r\n  }\r\n  .blocks-header p {\r\n    margin: 0;\r\n    color: var(--muted);\r\n    line-height: 1.6;\r\n  }\r\n\r\n  .blocks-canvas {\r\n    position: relative;\r\n    z-index: 1;\r\n    max-width: 980px;\r\n    margin: 0 auto;\r\n    height: 540px;\r\n    border: 1px solid #e1e7ee;\r\n    border-radius: 20px;\r\n    background: rgba(255,255,255,0.65);\r\n    overflow: hidden;\r\n    touch-action: none;\r\n  }\r\n\r\n  .block {\r\n    position: absolute;\r\n    width: 138px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n    text-align: center;\r\n    padding: 14px 10px;\r\n    cursor: grab;\r\n    user-select: none;\r\n    color: #fff;\r\n    box-shadow: 0 10px 22px rgba(22,34,53,0.18);\r\n    touch-action: none;\r\n    will-change: transform;\r\n  }\r\n  .block:active { cursor: grabbing; }\r\n  .block.dragging {\r\n    box-shadow: 0 20px 38px rgba(22,34,53,0.3);\r\n    z-index: 10;\r\n  }\r\n\r\n  .block .k-title {\r\n    font-size: 13px;\r\n    font-weight: 700;\r\n    letter-spacing: 0.2px;\r\n    line-height: 1.25;\r\n    text-shadow: 0 1px 3px rgba(0,0,0,0.25);\r\n  }\r\n  .block .k-sub {\r\n    font-family: var(--mono);\r\n    font-size: 9px;\r\n    letter-spacing: 0.4px;\r\n    text-transform: uppercase;\r\n    opacity: 0.85;\r\n    margin-top: 4px;\r\n  }\r\n\r\n  .shape-circle { height: 138px; border-radius: 50%; }\r\n\r\n  .shape-hex {\r\n    height: 126px;\r\n    clip-path: polygon(25% 4%, 75% 4%, 98% 50%, 75% 96%, 25% 96%, 2% 50%);\r\n    border-radius: 4px;\r\n  }\r\n\r\n  .shape-chip {\r\n    height: 104px;\r\n    border-radius: 14px;\r\n  }\r\n  .shape-chip::before,\r\n  .shape-chip::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 18%;\r\n    right: 18%;\r\n    height: 3px;\r\n    background-color: rgba(255,255,255,0.55);\r\n    mask-image: repeating-linear-gradient(to right, #000 0 6px, transparent 6px 13px);\r\n    -webkit-mask-image: repeating-linear-gradient(to right, #000 0 6px, transparent 6px 13px);\r\n  }\r\n  .shape-chip::before { top: -3px; }\r\n  .shape-chip::after  { bottom: -3px; }\r\n\r\n  .blocks-hint {\r\n    position: relative;\r\n    z-index: 1;\r\n    text-align: center;\r\n    margin-top: 22px;\r\n    font-family: var(--mono);\r\n    font-size: 12px;\r\n    letter-spacing: 0.5px;\r\n    color: var(--muted);\r\n  }\r\n\r\n  @media (max-width: 900px) {\r\n    .blocks-canvas { height: 760px; }\r\n    .block { width: 116px; }\r\n    .shape-circle { height: 116px; }\r\n    .shape-hex { height: 106px; }\r\n    .shape-chip { height: 90px; }\r\n  }\r\n<\/style>\r\n<\/head>\r\n\r\n<body>\r\n\r\n<section class=\"blocks-wrap\" id=\"blocksWrap\">\r\n\r\n  <div class=\"blocks-header\">\r\n    <span class=\"blocks-eyebrow\">Your stack, like a set of building blocks<\/span>\r\n    <h2>The IoT universe, block by block<\/h2>\r\n    <p>Grab it, throw it, stack it. Each block is a layer of the full IoT stack \u2014 with its own physics, its own gravity, its own place.<\/p>\r\n  <\/div>\r\n\r\n  <div class=\"blocks-canvas\" id=\"blocksCanvas\"><\/div>\r\n\r\n  <p class=\"blocks-hint\">\/\/ drag a block \u2014 it bounces, slides, and settles on the others<\/p>\r\n\r\n<\/section>\r\n\r\n<script>\r\n(function () {\r\n  const canvas = document.getElementById('blocksCanvas');\r\n\r\n  \/\/ ingredienti dello stack IoT completo \u2014 ognuno con un colore proprio\r\n  const items = [\r\n    { title: 'Sensors',         sub: 'Sensing layer',        shape: 'hex',    color: '#0d9488' },\r\n    { title: 'Connectivity',    sub: 'BLE \u00b7 LoRa \u00b7 NB-IoT',   shape: 'circle', color: '#2563eb' },\r\n    { title: 'Edge Computing',  sub: 'On-device logic',       shape: 'chip',   color: '#7c3aed' },\r\n    { title: 'Firmware',        sub: 'Embedded software',     shape: 'hex',    color: '#b45309' },\r\n    { title: 'Cloud',           sub: 'Data platform',         shape: 'circle', color: '#0284c7' },\r\n    { title: 'Security',        sub: 'Security by design',    shape: 'chip',   color: '#dc2626' },\r\n    { title: 'PCB & Hardware',  sub: 'Electronics design',    shape: 'hex',    color: '#16a34a' },\r\n    { title: 'SMT Production',  sub: 'Swiss manufacturing',   shape: 'circle', color: '#ea580c' },\r\n    { title: 'FOTA & Support',  sub: 'Lifecycle care',        shape: 'chip',   color: '#db2777' }\r\n  ];\r\n\r\n  \/\/ ===== fisica: costanti =====\r\n  const GRAVITY = 0.55;\r\n  const RESTITUTION = 0.42;     \/\/ quanto rimbalzano\r\n  const AIR_FRICTION = 0.992;   \/\/ resistenza dell'aria (sempre attiva)\r\n  const SURFACE_FRICTION = 0.90; \/\/ attrito quando poggiano su pavimento\/altro blocco (fa \"scivolare fino a fermarsi\")\r\n  const REST_EPS = 0.55;         \/\/ sotto questa velocit\u00e0 verticale, il blocco si considera \"appoggiato\"\r\n\r\n  let W = canvas.clientWidth;\r\n  let H = canvas.clientHeight;\r\n\r\n  const blocks = items.map((item, i) => {\r\n    const el = document.createElement('div');\r\n    el.className = `block shape-${item.shape}`;\r\n    el.style.background = item.color;\r\n    el.innerHTML = `<div class=\"k-title\">${item.title}<\/div><div class=\"k-sub\">${item.sub}<\/div>`;\r\n    canvas.appendChild(el);\r\n\r\n    const w = 138;\r\n    const h = item.shape === 'circle' ? 138 : (item.shape === 'hex' ? 126 : 104);\r\n\r\n    \/\/ sparsi a caso, con parecchia sovrapposizione: un mucchio disordinato, non ordinato\r\n    const x = 10 + Math.random() * (W - w - 20);\r\n    const y = H - h - Math.random() * (h * 2.2);\r\n    const rot = (Math.random() * 24 - 12); \/\/ leggera inclinazione casuale\r\n\r\n    return {\r\n      el, w, h,\r\n      x, y,\r\n      vx: (Math.random() - 0.5) * 2,\r\n      vy: 0,\r\n      rot,\r\n      dragging: false\r\n    };\r\n  });\r\n\r\n  function applySize() {\r\n    W = canvas.clientWidth;\r\n    H = canvas.clientHeight;\r\n  }\r\n\r\n  function resolvePair(a, b) {\r\n    const overlapX = Math.min(a.x + a.w, b.x + b.w) - Math.max(a.x, b.x);\r\n    const overlapY = Math.min(a.y + a.h, b.y + b.h) - Math.max(a.y, b.y);\r\n    if (overlapX <= 0 || overlapY <= 0) return;\r\n\r\n    const aCenterX = a.x + a.w \/ 2, bCenterX = b.x + b.w \/ 2;\r\n    const aCenterY = a.y + a.h \/ 2, bCenterY = b.y + b.h \/ 2;\r\n\r\n    if (overlapX < overlapY) {\r\n      \/\/ separazione orizzontale\r\n      const dir = aCenterX < bCenterX ? -1 : 1;\r\n      const push = overlapX \/ (a.dragging || b.dragging ? 1 : 2);\r\n      if (!a.dragging) a.x += dir * push;\r\n      if (!b.dragging) b.x -= dir * push;\r\n      if (!a.dragging) a.vx = -a.vx * RESTITUTION;\r\n      if (!b.dragging) b.vx = -b.vx * RESTITUTION;\r\n    } else {\r\n      \/\/ separazione verticale (uno si appoggia sull'altro)\r\n      const dir = aCenterY < bCenterY ? -1 : 1;\r\n      const push = overlapY \/ (a.dragging || b.dragging ? 1 : 2);\r\n      if (!a.dragging) a.y += dir * push;\r\n      if (!b.dragging) b.y -= dir * push;\r\n\r\n      if (dir === -1) {\r\n        \/\/ a sopra, b sotto: a \"atterra\" su b\r\n        if (!a.dragging) {\r\n          a.vy = Math.abs(a.vy) < REST_EPS ? 0 : -a.vy * RESTITUTION;\r\n          a.vx *= SURFACE_FRICTION;\r\n        }\r\n        if (!b.dragging) b.vy = Math.max(b.vy, 0);\r\n      } else {\r\n        if (!b.dragging) {\r\n          b.vy = Math.abs(b.vy) < REST_EPS ? 0 : -b.vy * RESTITUTION;\r\n          b.vx *= SURFACE_FRICTION;\r\n        }\r\n        if (!a.dragging) a.vy = Math.max(a.vy, 0);\r\n      }\r\n    }\r\n  }\r\n\r\n  function step() {\r\n    for (const b of blocks) {\r\n      if (b.dragging) continue;\r\n\r\n      b.vy += GRAVITY;\r\n      b.x += b.vx;\r\n      b.y += b.vy;\r\n      b.vx *= AIR_FRICTION;\r\n\r\n      \/\/ pareti\r\n      if (b.x < 0) { b.x = 0; b.vx = -b.vx * RESTITUTION; }\r\n      if (b.x + b.w > W) { b.x = W - b.w; b.vx = -b.vx * RESTITUTION; }\r\n\r\n      \/\/ soffitto (raro, ma per sicurezza)\r\n      if (b.y < 0) { b.y = 0; b.vy = -b.vy * RESTITUTION; }\r\n\r\n      \/\/ pavimento\r\n      if (b.y + b.h > H) {\r\n        b.y = H - b.h;\r\n        if (Math.abs(b.vy) < REST_EPS) {\r\n          b.vy = 0;\r\n        } else {\r\n          b.vy = -b.vy * RESTITUTION;\r\n        }\r\n        b.vx *= SURFACE_FRICTION;\r\n      }\r\n    }\r\n\r\n    \/\/ risoluzione delle collisioni tra blocchi (due passate per maggiore stabilit\u00e0)\r\n    for (let pass = 0; pass < 2; pass++) {\r\n      for (let i = 0; i < blocks.length; i++) {\r\n        for (let j = i + 1; j < blocks.length; j++) {\r\n          resolvePair(blocks[i], blocks[j]);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const b of blocks) {\r\n      b.el.style.transform = `translate(${b.x}px, ${b.y}px) rotate(${b.rot}deg)`;\r\n    }\r\n\r\n    requestAnimationFrame(step);\r\n  }\r\n\r\n  \/\/ ===== drag: Pointer Events (mouse + touch) =====\r\n  let lastPointerTime = 0;\r\n\r\n  function bindDrag(b) {\r\n    let offsetX = 0, offsetY = 0;\r\n    let prevX = 0, prevY = 0, prevT = 0;\r\n\r\n    b.el.addEventListener('pointerdown', (e) => {\r\n      b.dragging = true;\r\n      b.rot = 0;\r\n      b.el.classList.add('dragging');\r\n      b.el.setPointerCapture(e.pointerId);\r\n\r\n      const rect = canvas.getBoundingClientRect();\r\n      offsetX = e.clientX - rect.left - b.x;\r\n      offsetY = e.clientY - rect.top - b.y;\r\n      prevX = b.x; prevY = b.y; prevT = performance.now();\r\n    });\r\n\r\n    b.el.addEventListener('pointermove', (e) => {\r\n      if (!b.dragging) return;\r\n      const rect = canvas.getBoundingClientRect();\r\n      const x = e.clientX - rect.left - offsetX;\r\n      const y = e.clientY - rect.top - offsetY;\r\n\r\n      b.x = Math.max(0, Math.min(W - b.w, x));\r\n      b.y = Math.max(-800, Math.min(H - b.h, y));\r\n\r\n      const now = performance.now();\r\n      const dt = Math.max(now - prevT, 1);\r\n      \/\/ stima la velocit\u00e0 di rilascio, per un piccolo \"lancio\" quando molli il blocco\r\n      b.vx = ((b.x - prevX) \/ dt) * 14;\r\n      b.vy = ((b.y - prevY) \/ dt) * 14;\r\n      prevX = b.x; prevY = b.y; prevT = now;\r\n    });\r\n\r\n    function release(e) {\r\n      if (!b.dragging) return;\r\n      b.dragging = false;\r\n      b.el.classList.remove('dragging');\r\n      try { b.el.releasePointerCapture(e.pointerId); } catch (err) {}\r\n    }\r\n\r\n    b.el.addEventListener('pointerup', release);\r\n    b.el.addEventListener('pointercancel', release);\r\n  }\r\n\r\n  blocks.forEach(bindDrag);\r\n\r\n  window.addEventListener('resize', applySize);\r\n  applySize();\r\n  requestAnimationFrame(step);\r\n})();\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-867886b elementor-section-content-top elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"867886b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-299c305\" data-id=\"299c305\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f4be8b6 elementor-widget-mobile__width-initial elementor-widget elementor-widget-heading\" data-id=\"f4be8b6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Frequently Asked Questions<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97f6e79 elementor-widget-mobile__width-initial elementor-widget elementor-widget-accordion\" data-id=\"97f6e79\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"accordion.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1591\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-1591\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">What does Gimasi do?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1591\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-1591\"><p>Gimasi develops Swiss-engineered IoT solutions, including custom hardware, embedded firmware, cloud platforms, and connected systems. We support projects from initial concept and development through production and long-term support.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1592\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-1592\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Does Gimasi develop custom IoT solutions?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1592\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-1592\"><p data-start=\"945\" data-end=\"1117\">Yes. Gimasi can adapt an existing device or develop a completely custom IoT solution. Depending on the application, this can include electronics, firmware, connectivity, mechanical design, cloud integration, and production.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1593\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-1593\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Does Gimasi develop both IoT hardware and software?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1593\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-1593\"><p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"7667\" data-end=\"7855\"><strong data-start=\"7667\" data-end=\"7855\">Yes. Our team develops IoT hardware, embedded firmware, cloud software, and integrations. As a result, hardware and software can be designed and tested together throughout the project.<\/strong><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1594\" class=\"elementor-tab-title\" data-tab=\"4\" role=\"button\" aria-controls=\"elementor-tab-content-1594\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">What industries does Gimasi support?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1594\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"region\" aria-labelledby=\"elementor-tab-title-1594\"><p>Gimasi develops IoT solutions for logistics, cold chain monitoring, industrial applications, asset tracking, smart facilities, environmental monitoring, waste management, and other connected applications.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1595\" class=\"elementor-tab-title\" data-tab=\"5\" role=\"button\" aria-controls=\"elementor-tab-content-1595\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Does Gimasi provide an IoT cloud platform?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1595\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"5\" role=\"region\" aria-labelledby=\"elementor-tab-title-1595\"><p>Yes. GIoT Cloud Platform provides device management, real-time monitoring, alerts, analytics, remote configuration, and integrations. It can support Gimasi devices as well as selected third-party hardware.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1596\" class=\"elementor-tab-title\" data-tab=\"6\" role=\"button\" aria-controls=\"elementor-tab-content-1596\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Where are Gimasi IoT solutions developed?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1596\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"6\" role=\"region\" aria-labelledby=\"elementor-tab-title-1596\"><p>Gimasi is headquartered in Mendrisio, Switzerland. Our team combines engineering, software, production, and technical expertise across Switzerland, Germany, and Bulgaria to support IoT projects for customers across Europe.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1597\" class=\"elementor-tab-title\" data-tab=\"7\" role=\"button\" aria-controls=\"elementor-tab-content-1597\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Can Gimasi take an IoT project from idea to production?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1597\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"7\" role=\"region\" aria-labelledby=\"elementor-tab-title-1597\"><p>Yes. Gimasi can support the complete IoT product lifecycle, from technical assessment and electronics design to firmware, prototyping, testing, certification, production, and post-deployment support.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>WHAT WE DO GIoT CASE STUDY WHO WE ARE Gimasi \u2014 Hero Gimasi \u00b7 IoT \u00b7 2012 Shaping the IoT [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-12160","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gimasi IoT Engineering &amp; Development<\/title>\n<meta name=\"description\" content=\"With +14 years of experience, Gimasi delivers end-to-end, hardware, software, firmware, cloud; from the first idea to reliable deployment.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.gimasi.com\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gimasi IoT Engineering &amp; Development\" \/>\n<meta property=\"og:description\" content=\"With +14 years of experience, Gimasi delivers end-to-end, hardware, software, firmware, cloud; from the first idea to reliable deployment.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.gimasi.com\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-30T07:58:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/hemargroup-logo-partner.png\" \/>\n\t<meta property=\"og:image:width\" content=\"219\" \/>\n\t<meta property=\"og:image:height\" content=\"130\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"29 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/\",\"url\":\"https:\\\/\\\/www.gimasi.com\\\/\",\"name\":\"Gimasi IoT Engineering & Development\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.gimasi.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/hemargroup-logo-partner.png\",\"datePublished\":\"2026-08-20T12:09:53+00:00\",\"dateModified\":\"2026-09-30T07:58:39+00:00\",\"description\":\"With +14 years of experience, Gimasi delivers end-to-end, hardware, software, firmware, cloud; from the first idea to reliable deployment.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.gimasi.com\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.gimasi.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/hemargroup-logo-partner.png\",\"contentUrl\":\"https:\\\/\\\/www.gimasi.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/hemargroup-logo-partner.png\",\"width\":219,\"height\":130,\"caption\":\"HemarGroup Partner logo - IoT Engineering\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.gimasi.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Home\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#website\",\"url\":\"https:\\\/\\\/www.gimasi.com\\\/\",\"name\":\"www2.gimasi.com\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.gimasi.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#organization\",\"name\":\"Gimasi SA\",\"url\":\"https:\\\/\\\/www.gimasi.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.gimasi.com\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/cropped-gimasilogo.png\",\"contentUrl\":\"https:\\\/\\\/www.gimasi.com\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/cropped-gimasilogo.png\",\"width\":170,\"height\":33,\"caption\":\"Gimasi SA\"},\"image\":{\"@id\":\"https:\\\/\\\/www.gimasi.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/gimasi-sa\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gimasi IoT Engineering & Development","description":"With +14 years of experience, Gimasi delivers end-to-end, hardware, software, firmware, cloud; from the first idea to reliable deployment.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.gimasi.com\/","og_locale":"en_US","og_type":"article","og_title":"Gimasi IoT Engineering & Development","og_description":"With +14 years of experience, Gimasi delivers end-to-end, hardware, software, firmware, cloud; from the first idea to reliable deployment.","og_url":"https:\/\/www.gimasi.com\/","article_modified_time":"2026-09-30T07:58:39+00:00","og_image":[{"width":219,"height":130,"url":"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/hemargroup-logo-partner.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"29 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.gimasi.com\/","url":"https:\/\/www.gimasi.com\/","name":"Gimasi IoT Engineering & Development","isPartOf":{"@id":"https:\/\/www.gimasi.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.gimasi.com\/#primaryimage"},"image":{"@id":"https:\/\/www.gimasi.com\/#primaryimage"},"thumbnailUrl":"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/hemargroup-logo-partner.png","datePublished":"2026-08-20T12:09:53+00:00","dateModified":"2026-09-30T07:58:39+00:00","description":"With +14 years of experience, Gimasi delivers end-to-end, hardware, software, firmware, cloud; from the first idea to reliable deployment.","breadcrumb":{"@id":"https:\/\/www.gimasi.com\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.gimasi.com\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.gimasi.com\/#primaryimage","url":"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/hemargroup-logo-partner.png","contentUrl":"https:\/\/www.gimasi.com\/wp-content\/uploads\/2026\/06\/hemargroup-logo-partner.png","width":219,"height":130,"caption":"HemarGroup Partner logo - IoT Engineering"},{"@type":"BreadcrumbList","@id":"https:\/\/www.gimasi.com\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.gimasi.com\/"},{"@type":"ListItem","position":2,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/www.gimasi.com\/#website","url":"https:\/\/www.gimasi.com\/","name":"www2.gimasi.com","description":"","publisher":{"@id":"https:\/\/www.gimasi.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.gimasi.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.gimasi.com\/#organization","name":"Gimasi SA","url":"https:\/\/www.gimasi.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.gimasi.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/04\/cropped-gimasilogo.png","contentUrl":"https:\/\/www.gimasi.com\/wp-content\/uploads\/2025\/04\/cropped-gimasilogo.png","width":170,"height":33,"caption":"Gimasi SA"},"image":{"@id":"https:\/\/www.gimasi.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/gimasi-sa\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.gimasi.com\/index.php?rest_route=\/wp\/v2\/pages\/12160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gimasi.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gimasi.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gimasi.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gimasi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12160"}],"version-history":[{"count":154,"href":"https:\/\/www.gimasi.com\/index.php?rest_route=\/wp\/v2\/pages\/12160\/revisions"}],"predecessor-version":[{"id":12466,"href":"https:\/\/www.gimasi.com\/index.php?rest_route=\/wp\/v2\/pages\/12160\/revisions\/12466"}],"wp:attachment":[{"href":"https:\/\/www.gimasi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}