{"id":9,"date":"2026-08-03T22:33:14","date_gmt":"2026-08-03T22:33:14","guid":{"rendered":"https:\/\/togrowagencia.com\/en\/?page_id=9"},"modified":"2026-11-09T21:06:20","modified_gmt":"2026-11-09T21:06:20","slug":"custom-software-development-company","status":"publish","type":"page","link":"https:\/\/togrowagencia.com\/en\/custom-software-development-company\/","title":{"rendered":"Custom Software"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9\" class=\"elementor elementor-9\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3ed55d9 e-flex e-con-boxed e-con e-parent\" data-id=\"3ed55d9\" 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-3c64192 elementor-widget elementor-widget-html\" data-id=\"3c64192\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-aa-hero\" class=\"tgus-aa-hero\">\r\n  <style>\r\n    #tgus-aa-hero {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-1: #0d0d16;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-blue-d: #2563eb;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-violet-d: #6d5ef0;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-glass: rgba(18,18,30,.6);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4rem, 9vw, 6rem) clamp(1.25rem, 5vw, 4rem) 0;\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-aa-hero *, #tgus-aa-hero *::before, #tgus-aa-hero *::after { box-sizing: border-box; }\r\n\r\n    \/* ================================================================\r\n       LIGHT RAYS \u2014 ported from React Bits' <LightRays\/> (JS+CSS variant,\r\n       originally built on the `ogl` WebGL wrapper). Elementor widgets\r\n       can't import npm packages, so this is a from-scratch vanilla-JS\r\n       WebGL2 rewrite: same vertex\/fragment shader math (ray strength,\r\n       falloff, mouse-follow, noise, distortion), same render loop shape,\r\n       but using the raw WebGL API directly instead of ogl's\r\n       Renderer\/Program\/Mesh wrappers. Recolored from the component's\r\n       default white to ToGrow's cyan (raysColor below); origin set to\r\n       top-center to rise up behind the headline like the bars did.\r\n       ================================================================ *\/\r\n    \/* ================================================================\r\n       FLOATING PARTICLES \u2014 independent Canvas 2D layer, decoupled from\r\n       the WebGL rays canvas on purpose (mixing a 2D and a WebGL context\r\n       on the same <canvas> forces a costly context fallback in some\r\n       browsers). Sits behind the rays (z-index -1 vs rays' 0): soft\r\n       blue dots that drift slowly and pulse in size\/opacity, no\r\n       connecting lines, no mouse interaction \u2014 ambient only.\r\n       ================================================================ *\/\r\n    #tgus-aa-hero .tgus-particles-host {\r\n      position: absolute; inset: 0; z-index: -1;\r\n      overflow: hidden;\r\n      pointer-events: none;\r\n    }\r\n    #tgus-aa-hero .tgus-particles-host canvas {\r\n      display: block;\r\n      width: 100%; height: 100%;\r\n    }\r\n\r\n    #tgus-aa-hero .tgus-rays-host {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      overflow: hidden;\r\n      pointer-events: none;\r\n    }\r\n    #tgus-aa-hero .tgus-rays-host canvas {\r\n      display: block;\r\n      width: 100%; height: 100%;\r\n    }\r\n\r\n    #tgus-aa-hero .tgus-bars-fade {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      background:\r\n        linear-gradient(180deg, var(--tgus-bg-0) 0%, rgba(5,5,10,.35) 14%, transparent 30%),\r\n        linear-gradient(0deg, var(--tgus-bg-0) 0%, transparent 18%);\r\n    }\r\n\r\n    #tgus-aa-hero .tgus-aa-inner { position: relative; z-index: 2; max-width: 780px; margin: 0 auto; text-align: center; }\r\n\r\n    #tgus-aa-hero .tgus-aa-badge {\r\n      display: inline-flex; align-items: center;\r\n      background: var(--tgus-glass);\r\n      backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);\r\n      border: 1px solid var(--tgus-border);\r\n      border-radius: 999px;\r\n      padding: .3em;\r\n      margin: 0 0 2rem !important;\r\n      opacity: 0; transform: translateY(10px);\r\n      animation: tgus-aa-in .7s var(--tgus-ease) forwards;\r\n      font-size: .85rem !important;\r\n    }\r\n    #tgus-aa-hero .tgus-badge-chip {\r\n      background: linear-gradient(135deg, var(--tgus-blue), var(--tgus-violet));\r\n      color: #fff !important;\r\n      font-weight: 700 !important;\r\n      padding: .5em 1em;\r\n      border-radius: 999px;\r\n    }\r\n    #tgus-aa-hero .tgus-badge-label {\r\n      display: inline-flex; align-items: center; gap: .4em;\r\n      padding: .5em 1.1em .5em .9em;\r\n      color: var(--tgus-text) !important;\r\n      font-weight: 500 !important;\r\n    }\r\n    #tgus-aa-hero .tgus-badge-label svg { width: .8em; height: .8em; }\r\n\r\n    #tgus-aa-hero h1 {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(2.5rem, 6.5vw, 4.75rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.05 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 0 1.25rem !important;\r\n      color: var(--tgus-text) !important;\r\n      opacity: 0; transform: translateY(16px);\r\n      animation: tgus-aa-in .8s var(--tgus-ease) .08s forwards;\r\n    }\r\n    \/* ================================================================\r\n       HEADLINE REVEAL \u2014 sweeping gradient band via background-clip:text.\r\n       Single line here (copy is a single sentence, not two stacked\r\n       phrases like the automation variant), so only one reveal line +\r\n       one gradient word (\"off-the-shelf\") rather than a two-line\r\n       sequence \u2014 the sequencing logic in the script below degrades\r\n       cleanly to a single pass when only one line is present.\r\n       ================================================================ *\/\r\n    #tgus-aa-hero .tgus-reveal {\r\n      display: inline-block;\r\n      background-clip: text; -webkit-background-clip: text;\r\n      color: transparent;\r\n      background-size: 100% 100%;\r\n      transform: translateY(-2px);\r\n    }\r\n    #tgus-aa-hero .tgus-grad-word {\r\n      display: inline-block;\r\n      color: transparent;\r\n    }\r\n    #tgus-aa-hero .tgus-grad-word.tgus-grad-active {\r\n      background-image: linear-gradient(to right, var(--tgus-cyan), var(--tgus-blue), var(--tgus-violet), var(--tgus-cyan));\r\n      background-size: 300% 100%;\r\n      background-clip: text; -webkit-background-clip: text;\r\n      animation: tgus-grad-move 3.2s ease-in-out infinite alternate;\r\n    }\r\n    @keyframes tgus-grad-move { 0% { background-position: 0% 50%; } 100% { background-position: 100% 50%; } }\r\n\r\n    #tgus-aa-hero p.tgus-aa-sub {\r\n      font-size: clamp(1.05rem, 2vw, 1.25rem) !important;\r\n      line-height: 1.6 !important;\r\n      color: #c7c7d3 !important;\r\n      max-width: 560px; margin: 0 auto 2.5rem !important;\r\n      opacity: 0; transform: translateY(16px);\r\n      animation: tgus-aa-in .8s var(--tgus-ease) .18s forwards;\r\n    }\r\n    #tgus-aa-hero p.tgus-aa-sub strong {\r\n      color: var(--tgus-text) !important;\r\n      font-weight: 700 !important;\r\n    }\r\n    #tgus-aa-hero .tgus-aa-ctas {\r\n      display: flex; gap: .9rem; justify-content: center; flex-wrap: wrap;\r\n      opacity: 0; transform: translateY(16px);\r\n      animation: tgus-aa-in .8s var(--tgus-ease) .28s forwards;\r\n    }\r\n    @keyframes tgus-aa-in { to { opacity: 1; transform: translateY(0); } }\r\n\r\n    \/* ================================================================\r\n       GLASS BUTTON \u2014 dexter-st port (see previous section notes).\r\n       ================================================================ *\/\r\n    #tgus-aa-hero .tgus-btn-wrapper { position: relative; display: inline-block; isolation: isolate; }\r\n    #tgus-aa-hero .tgus-btn {\r\n      --border-radius: 999px;\r\n      --pad: 4px;\r\n      --transition: .4s;\r\n      --hue: 217deg;\r\n      position: relative;\r\n      isolation: isolate;\r\n      user-select: none;\r\n      display: flex; align-items: center; justify-content: center;\r\n      gap: .5em;\r\n      padding: .7em .95em .7em 1.15em;\r\n      font-family: var(--tgus-font-body) !important;\r\n      font-size: 1rem !important;\r\n      font-weight: 600 !important;\r\n      text-decoration: none !important;\r\n      color: var(--tgus-text) !important;\r\n      background-color: #111219;\r\n      border: solid 1px rgba(255,255,255,.14);\r\n      border-radius: var(--border-radius);\r\n      cursor: pointer;\r\n      box-shadow:\r\n        inset 0 1px 1px rgba(255,255,255,.2),\r\n        inset 0 2px 2px rgba(255,255,255,.15),\r\n        inset 0 4px 4px rgba(255,255,255,.08),\r\n        inset 0 8px 8px rgba(255,255,255,.04);\r\n      transition: box-shadow var(--transition), border-color var(--transition), background-color var(--transition), transform var(--transition);\r\n    }\r\n    #tgus-aa-hero .tgus-btn::before {\r\n      content: ''; position: absolute; z-index: -1;\r\n      top: calc(-1 * var(--pad)); left: calc(-1 * var(--pad));\r\n      width: calc(100% + var(--pad) * 2); height: calc(100% + var(--pad) * 2);\r\n      border-radius: calc(var(--border-radius) + var(--pad));\r\n      pointer-events: none;\r\n      background-image: linear-gradient(0deg, #0004, #000a);\r\n      box-shadow: 1px 1px 1px #fff2, 2px 2px 2px #fff1, -1px -1px 1px #0002, -2px -2px 2px #0001;\r\n      transition: box-shadow var(--transition);\r\n    }\r\n    #tgus-aa-hero .tgus-btn::after {\r\n      content: ''; position: absolute; inset: 0; z-index: 1;\r\n      border-radius: inherit; pointer-events: none;\r\n      background-image: linear-gradient(0deg, #fff, hsl(var(--hue) 100% 70%), hsla(var(--hue),100%,70%,.5) 8%, transparent);\r\n      opacity: 0;\r\n      transition: opacity var(--transition);\r\n    }\r\n    #tgus-aa-hero .tgus-btn:hover { border-color: hsla(var(--hue),100%,80%,.4); transform: translateY(-1px); }\r\n    #tgus-aa-hero .tgus-btn:hover::after { opacity: 1; mask-image: linear-gradient(0deg, #fff, transparent); }\r\n    #tgus-aa-hero .tgus-btn:active { border-color: hsla(var(--hue),100%,80%,.7); background-color: hsla(var(--hue),50%,20%,.5); }\r\n    #tgus-aa-hero .tgus-btn:active::after { opacity: 1; mask-image: linear-gradient(0deg, #fff, transparent); filter: brightness(180%); }\r\n    #tgus-aa-hero .tgus-btn:focus-visible { outline: 2px solid var(--tgus-cyan); outline-offset: 3px; }\r\n\r\n    #tgus-aa-hero .tgus-btn-primary { --button-color: linear-gradient(180deg, var(--tgus-blue), var(--tgus-blue-d)); background-image: var(--button-color); border-color: rgba(255,255,255,.22); }\r\n    #tgus-aa-hero .tgus-btn-primary::after { background-image: linear-gradient(0deg, #fff, hsl(190 100% 75%), hsla(190,100%,75%,.5) 8%, transparent); }\r\n\r\n    #tgus-aa-hero .tgus-btn-svg { width: 1.1em; height: 1.1em; flex-shrink: 0; fill: none; stroke: currentColor; stroke-width: 2; }\r\n\r\n    #tgus-aa-hero .tgus-letters { position: relative; z-index: 2; display: inline-flex; }\r\n    #tgus-aa-hero .tgus-letter {\r\n      position: relative;\r\n      display: inline-block;\r\n      color: #fff !important;\r\n      opacity: 0;\r\n      transform: translateY(4px);\r\n      animation: tgus-letter-in .4s var(--tgus-ease) forwards;\r\n      animation-delay: calc(var(--i, 0) * 22ms);\r\n      transition: text-shadow .3s var(--tgus-ease);\r\n    }\r\n    #tgus-aa-hero .tgus-btn:hover .tgus-letter { text-shadow: 0 0 6px rgba(255,255,255,.55); }\r\n    @keyframes tgus-letter-in { to { opacity: 1; transform: translateY(0); } }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-aa-hero .tgus-aa-badge, #tgus-aa-hero h1, #tgus-aa-hero p.tgus-aa-sub, #tgus-aa-hero .tgus-aa-ctas, #tgus-aa-hero .tgus-letter {\r\n        animation-duration: .01ms !important; opacity: 1 !important; transform: none !important;\r\n      }\r\n      #tgus-aa-hero .tgus-card { transition: none !important; opacity: 1 !important; transform: none !important; }\r\n    }\r\n\r\n    #tgus-aa-hero .tgus-scroll-track {\r\n      position: relative;\r\n      z-index: 2;\r\n      margin-top: clamp(2rem, 5vw, 3rem);\r\n      padding-bottom: clamp(2rem, 5vw, 3rem);\r\n    }\r\n    #tgus-aa-hero .tgus-glow-wrap {\r\n      position: relative;\r\n      isolation: isolate;\r\n      max-width: 1080px;\r\n      margin: 0 auto;\r\n    }\r\n    #tgus-aa-hero .tgus-spin {\r\n      position: absolute;\r\n      overflow: hidden;\r\n      pointer-events: none;\r\n    }\r\n    #tgus-aa-hero .tgus-spin::before {\r\n      content: '';\r\n      position: absolute;\r\n      inset: -30%;\r\n      rotate: 10deg;\r\n      animation: tgus-speen 8s cubic-bezier(.56,.15,.28,.86) infinite;\r\n    }\r\n    @keyframes tgus-speen { 0% { rotate: 10deg; } 50% { rotate: 190deg; } to { rotate: 370deg; } }\r\n\r\n    #tgus-aa-hero .tgus-spin-blur {\r\n      inset: 0;\r\n      z-index: -2;\r\n      border-radius: 26px;\r\n      filter: blur(24px);\r\n    }\r\n    #tgus-aa-hero .tgus-spin-blur::before {\r\n      background: linear-gradient(-45deg, var(--tgus-violet-d), transparent 44% 56%, var(--tgus-blue));\r\n    }\r\n\r\n    #tgus-aa-hero .tgus-spin-intense {\r\n      inset: -6px;\r\n      z-index: -2;\r\n      border-radius: 30px;\r\n      filter: blur(6px);\r\n    }\r\n    #tgus-aa-hero .tgus-spin-intense::before {\r\n      background: linear-gradient(-45deg, var(--tgus-violet), transparent 44% 56%, var(--tgus-cyan));\r\n    }\r\n\r\n    #tgus-aa-hero .tgus-spin-inside {\r\n      inset: -3px;\r\n      z-index: -1;\r\n      border-radius: 28px;\r\n      filter: blur(1px);\r\n    }\r\n    #tgus-aa-hero .tgus-spin-inside::before {\r\n      background: linear-gradient(-45deg, #ffffff, transparent 44% 56%, #d6f3ff);\r\n    }\r\n\r\n    #tgus-aa-hero .tgus-glow-wrap[data-paused=\"true\"] .tgus-spin::before { animation-play-state: paused; }\r\n\r\n    #tgus-aa-hero .tgus-card-perspective { position: relative; width: 100%; max-width: 1080px; margin: 0 auto; }\r\n    #tgus-aa-hero .tgus-card {\r\n      position: relative; z-index: 1; max-width: none; margin: 0;\r\n      height: clamp(20rem, 42vw, 34rem);\r\n      border: 3px solid rgba(255,255,255,.14);\r\n      border-radius: 26px;\r\n      background: var(--tgus-bg-2);\r\n      padding: clamp(.5rem, 1.2vw, 1rem);\r\n      box-shadow: 0 40px 90px -30px rgba(0,0,0,.6), 0 0 0 1px rgba(255,255,255,.04) inset;\r\n      opacity: 0; transform: translateY(24px);\r\n      transition: opacity .8s var(--tgus-ease), transform .8s var(--tgus-ease);\r\n    }\r\n    #tgus-aa-hero .tgus-card.tgus-in-view { opacity: 1; transform: translateY(0); }\r\n    #tgus-aa-hero .tgus-card-inner {\r\n      width: 100%; height: 100%; border-radius: 18px; overflow: hidden;\r\n      background: #101018; display: flex; align-items: center; justify-content: center;\r\n    }\r\n    #tgus-aa-hero .tgus-card-inner img {\r\n      width: 100%; height: 100%; object-fit: contain;\r\n      display: block;\r\n    }\r\n    #tgus-aa-hero .tgus-card-placeholder {\r\n      width: 100%; height: 100%;\r\n      display: flex; align-items: center; justify-content: center;\r\n      color: var(--tgus-text-dim); font-size: .9rem;\r\n      background: #101018;\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-aa-hero .tgus-spin::before { animation-duration: 45s !important; }\r\n      #tgus-aa-hero .tgus-grad-word.tgus-grad-active { animation: none !important; background-position: 50% 50% !important; }\r\n    }\r\n    @media (max-width: 768px) {\r\n      #tgus-aa-hero .tgus-card { border-width: 2px; border-radius: 20px; }\r\n      #tgus-aa-hero .tgus-aa-ctas { flex-direction: column; align-items: stretch; }\r\n      #tgus-aa-hero .tgus-btn { justify-content: center; }\r\n    }\r\n    @media (max-width: 420px) { #tgus-aa-hero { padding-left: 1rem; padding-right: 1rem; } }\r\n  <\/style>\r\n\r\n  <div class=\"tgus-particles-host\" id=\"tgus-aa-particles\" aria-hidden=\"true\"><\/div>\r\n  <div class=\"tgus-rays-host\" id=\"tgus-aa-rays\" aria-hidden=\"true\"><\/div>\r\n  <div class=\"tgus-bars-fade\" aria-hidden=\"true\"><\/div>\r\n\r\n  <div class=\"tgus-aa-inner\">\r\n    <h1><span class=\"tgus-reveal\" id=\"tgus-aa-reveal-1\">When <span class=\"tgus-grad-word\">off-the-shelf<\/span> runs out<\/span><\/h1>\r\n\r\n    <p class=\"tgus-aa-sub\">\r\n      ToGrow is a <strong>custom software development company<\/strong> with five in-house engineers. We build the apps, integrations and internal tools that standard platforms can't handle.\r\n    <\/p>\r\n\r\n    <div class=\"tgus-aa-ctas\">\r\n      <span class=\"tgus-btn-wrapper\">\r\n        <a class=\"tgus-btn tgus-btn-primary\" href=\"https:\/\/api.whatsapp.com\/send?phone=573103597580\" target=\"_blank\" rel=\"noopener\" aria-label=\"Book a call\">\r\n          <span class=\"tgus-letters\" aria-hidden=\"true\" data-tgus-letters>Book a call<\/span>\r\n          <svg class=\"tgus-btn-svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\r\n        <\/a>\r\n      <\/span>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"tgus-scroll-track\">\r\n    <div class=\"tgus-card-perspective\">\r\n      <div class=\"tgus-glow-wrap\" id=\"tgus-aa-glow\" data-paused=\"true\">\r\n        <div class=\"tgus-spin tgus-spin-blur\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"tgus-spin tgus-spin-intense\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"tgus-spin tgus-spin-inside\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"tgus-card\" id=\"tgus-aa-scroll-card\">\r\n          <div class=\"tgus-card-inner\">\r\n            <img src=\"https:\/\/togrowagencia.com\/en\/wp-content\/uploads\/2026\/08\/Group-1577.png\" alt=\"Custom software development company \u2014 ToGrow Agency dashboard\" loading=\"lazy\" decoding=\"async\">\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      var root = document.getElementById('tgus-aa-hero');\r\n      if(!root) return;\r\n      var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n\r\n      \/* ============ Floating particles \u2014 ambient Canvas 2D layer ============\r\n         Independent dots drifting slowly with a gentle size\/opacity\r\n         pulse. No connecting lines (kept intentionally sparse per\r\n         direction), no mouse interaction. Paused off-screen and under\r\n         prefers-reduced-motion the same way LightRays is. *\/\r\n      var particlesHost = root.querySelector('#tgus-aa-particles');\r\n      if(particlesHost && !reduceMotion){\r\n        (function initParticles(){\r\n          var canvas = document.createElement('canvas');\r\n          particlesHost.appendChild(canvas);\r\n          var ctx = canvas.getContext('2d');\r\n          if(!ctx) return;\r\n\r\n          var PARTICLE_COLORS = ['rgba(255,255,255,'];\r\n          var COUNT_DESKTOP = 46;\r\n          var COUNT_MOBILE = 24;\r\n\r\n          var dpr = Math.min(window.devicePixelRatio || 1, 2);\r\n          var w = 0, h = 0;\r\n          var particles = [];\r\n          var rafId = null;\r\n          var isVisible = false;\r\n\r\n          function rand(min, max){ return min + Math.random() * (max - min); }\r\n\r\n          function makeParticle(){\r\n            return {\r\n              x: rand(0, 1),\r\n              y: rand(0, 1),\r\n              vx: rand(-0.012, 0.012),\r\n              vy: rand(-0.02, -0.004), \/\/ gentle upward drift, like rising motes\r\n              r: rand(1.1, 3.2),\r\n              baseAlpha: rand(0.1, 0.28),\r\n              pulseSpeed: rand(0.6, 1.4),\r\n              pulsePhase: rand(0, Math.PI * 2),\r\n              color: PARTICLE_COLORS[Math.floor(Math.random() * PARTICLE_COLORS.length)]\r\n            };\r\n          }\r\n\r\n          function seed(){\r\n            var count = window.innerWidth <= 768 ? COUNT_MOBILE : COUNT_DESKTOP;\r\n            particles = [];\r\n            for(var i = 0; i < count; i++) particles.push(makeParticle());\r\n          }\r\n\r\n          function resize(){\r\n            dpr = Math.min(window.devicePixelRatio || 1, 2);\r\n            w = particlesHost.clientWidth;\r\n            h = particlesHost.clientHeight;\r\n            canvas.width = Math.max(1, Math.floor(w * dpr));\r\n            canvas.height = Math.max(1, Math.floor(h * dpr));\r\n            ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\r\n          }\r\n\r\n          function tick(t){\r\n            rafId = requestAnimationFrame(tick);\r\n            ctx.clearRect(0, 0, w, h);\r\n            for(var i = 0; i < particles.length; i++){\r\n              var p = particles[i];\r\n              p.x += p.vx * 0.016;\r\n              p.y += p.vy * 0.016;\r\n              \/\/ wrap around softly on all edges so motion never resets visibly\r\n              if(p.x < -0.05) p.x = 1.05;\r\n              if(p.x > 1.05) p.x = -0.05;\r\n              if(p.y < -0.05){ p.y = 1.05; p.x = rand(0, 1); }\r\n\r\n              var pulse = 0.5 + 0.5 * Math.sin(t * 0.001 * p.pulseSpeed + p.pulsePhase);\r\n              var alpha = p.baseAlpha * (0.55 + 0.45 * pulse);\r\n              var radius = p.r * (0.85 + 0.25 * pulse);\r\n\r\n              var px = p.x * w, py = p.y * h;\r\n              var glow = ctx.createRadialGradient(px, py, 0, px, py, radius * 4);\r\n              glow.addColorStop(0, p.color + alpha + ')');\r\n              glow.addColorStop(1, p.color + '0)');\r\n              ctx.fillStyle = glow;\r\n              ctx.beginPath();\r\n              ctx.arc(px, py, radius * 4, 0, Math.PI * 2);\r\n              ctx.fill();\r\n\r\n              ctx.fillStyle = p.color + Math.min(1, alpha + 0.12) + ')';\r\n              ctx.beginPath();\r\n              ctx.arc(px, py, radius, 0, Math.PI * 2);\r\n              ctx.fill();\r\n            }\r\n          }\r\n\r\n          function start(){\r\n            if(rafId) return;\r\n            rafId = requestAnimationFrame(tick);\r\n          }\r\n          function stop(){\r\n            if(rafId){ cancelAnimationFrame(rafId); rafId = null; }\r\n          }\r\n\r\n          seed();\r\n          resize();\r\n          window.addEventListener('resize', function(){ resize(); });\r\n\r\n          if('IntersectionObserver' in window){\r\n            var io = new IntersectionObserver(function(entries){\r\n              entries.forEach(function(e){\r\n                isVisible = e.isIntersecting;\r\n                if(isVisible) start(); else stop();\r\n              });\r\n            }, { threshold: 0.1 });\r\n            io.observe(particlesHost);\r\n          } else {\r\n            start();\r\n          }\r\n        })();\r\n      }\r\n\r\n      \/* ============ LightRays \u2014 vanilla WebGL2 port of React Bits' component ============\r\n         Same shader math as the source (rayStrength: angle-based falloff\r\n         with distance\/fade falloff, dual-frequency sum, optional mouse\r\n         steering\/noise\/distortion), rebuilt without `ogl` since Elementor\r\n         widgets can't import npm packages. Paused off-screen via the\r\n         same IntersectionObserver pattern the source used, and paused\r\n         entirely under prefers-reduced-motion. *\/\r\n      var raysHost = root.querySelector('#tgus-aa-rays');\r\n      if(raysHost && !reduceMotion){\r\n        (function initLightRays(){\r\n          var raysColor = '#5ec8f2';        \/\/ tgus-cyan\r\n          var raysOrigin = 'top-center';\r\n          var raysSpeed = 1.1;\r\n          var lightSpread = 0.9;\r\n          var rayLength = 1.35;\r\n          var pulsating = false;\r\n          var fadeDistance = 1.0;\r\n          var saturation = 1.0;\r\n          var followMouse = true;\r\n          var mouseInfluence = 0.12;\r\n          var noiseAmount = 0.06;\r\n          var distortion = 0.04;\r\n\r\n          function hexToRgb(hex){\r\n            var m = \/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$\/i.exec(hex);\r\n            return m ? [parseInt(m[1],16)\/255, parseInt(m[2],16)\/255, parseInt(m[3],16)\/255] : [1,1,1];\r\n          }\r\n          function getAnchorAndDir(origin, w, h){\r\n            var outside = 0.2;\r\n            switch(origin){\r\n              case 'top-left': return { anchor:[0, -outside*h], dir:[0,1] };\r\n              case 'top-right': return { anchor:[w, -outside*h], dir:[0,1] };\r\n              case 'left': return { anchor:[-outside*w, 0.5*h], dir:[1,0] };\r\n              case 'right': return { anchor:[(1+outside)*w, 0.5*h], dir:[-1,0] };\r\n              case 'bottom-left': return { anchor:[0, (1+outside)*h], dir:[0,-1] };\r\n              case 'bottom-center': return { anchor:[0.5*w, (1+outside)*h], dir:[0,-1] };\r\n              case 'bottom-right': return { anchor:[w, (1+outside)*h], dir:[0,-1] };\r\n              default: return { anchor:[0.5*w, -outside*h], dir:[0,1] };\r\n            }\r\n          }\r\n\r\n          var canvas = document.createElement('canvas');\r\n          raysHost.appendChild(canvas);\r\n          var gl = canvas.getContext('webgl', { alpha: true, premultipliedAlpha: false })\r\n                 || canvas.getContext('experimental-webgl', { alpha: true, premultipliedAlpha: false });\r\n          if(!gl) return; \/\/ no WebGL support \u2014 host stays empty, section still works without the effect\r\n\r\n          var vertSrc =\r\n            'attribute vec2 position;' +\r\n            'varying vec2 vUv;' +\r\n            'void main(){ vUv = position * 0.5 + 0.5; gl_Position = vec4(position, 0.0, 1.0); }';\r\n\r\n          var fragSrc =\r\n            'precision highp float;' +\r\n            'uniform float iTime; uniform vec2 iResolution;' +\r\n            'uniform vec2 rayPos; uniform vec2 rayDir; uniform vec3 raysColor;' +\r\n            'uniform float raysSpeed; uniform float lightSpread; uniform float rayLength;' +\r\n            'uniform float pulsating; uniform float fadeDistance; uniform float saturation;' +\r\n            'uniform vec2 mousePos; uniform float mouseInfluence; uniform float noiseAmount; uniform float distortion;' +\r\n            'varying vec2 vUv;' +\r\n            'float noise(vec2 st){ return fract(sin(dot(st.xy, vec2(12.9898,78.233))) * 43758.5453123); }' +\r\n            'float rayStrength(vec2 raySource, vec2 rayRefDirection, vec2 coord, float seedA, float seedB, float speed){' +\r\n            '  vec2 sourceToCoord = coord - raySource;' +\r\n            '  vec2 dirNorm = normalize(sourceToCoord);' +\r\n            '  float cosAngle = dot(dirNorm, rayRefDirection);' +\r\n            '  float distortedAngle = cosAngle + distortion * sin(iTime * 2.0 + length(sourceToCoord) * 0.01) * 0.2;' +\r\n            '  float spreadFactor = pow(max(distortedAngle, 0.0), 1.0 \/ max(lightSpread, 0.001));' +\r\n            '  float distance = length(sourceToCoord);' +\r\n            '  float maxDistance = iResolution.x * rayLength;' +\r\n            '  float lengthFalloff = clamp((maxDistance - distance) \/ maxDistance, 0.0, 1.0);' +\r\n            '  float fadeFalloff = clamp((iResolution.x * fadeDistance - distance) \/ (iResolution.x * fadeDistance), 0.5, 1.0);' +\r\n            '  float pulse = pulsating > 0.5 ? (0.8 + 0.2 * sin(iTime * speed * 3.0)) : 1.0;' +\r\n            '  float baseStrength = clamp(' +\r\n            '    (0.45 + 0.15 * sin(distortedAngle * seedA + iTime * speed)) +' +\r\n            '    (0.3 + 0.2 * cos(-distortedAngle * seedB + iTime * speed)), 0.0, 1.0);' +\r\n            '  return baseStrength * lengthFalloff * fadeFalloff * spreadFactor * pulse;' +\r\n            '}' +\r\n            'void main(){' +\r\n            '  vec2 fragCoord = gl_FragCoord.xy;' +\r\n            '  vec2 coord = vec2(fragCoord.x, iResolution.y - fragCoord.y);' +\r\n            '  vec2 finalRayDir = rayDir;' +\r\n            '  if(mouseInfluence > 0.0){' +\r\n            '    vec2 mouseScreenPos = mousePos * iResolution.xy;' +\r\n            '    vec2 mouseDirection = normalize(mouseScreenPos - rayPos);' +\r\n            '    finalRayDir = normalize(mix(rayDir, mouseDirection, mouseInfluence));' +\r\n            '  }' +\r\n            '  vec4 rays1 = vec4(1.0) * rayStrength(rayPos, finalRayDir, coord, 36.2214, 21.11349, 1.5 * raysSpeed);' +\r\n            '  vec4 rays2 = vec4(1.0) * rayStrength(rayPos, finalRayDir, coord, 22.3991, 18.0234, 1.1 * raysSpeed);' +\r\n            '  vec4 fragColor = rays1 * 0.5 + rays2 * 0.4;' +\r\n            '  if(noiseAmount > 0.0){' +\r\n            '    float n = noise(coord * 0.01 + iTime * 0.1);' +\r\n            '    fragColor.rgb *= (1.0 - noiseAmount + noiseAmount * n);' +\r\n            '  }' +\r\n            '  float brightness = 1.0 - (coord.y \/ iResolution.y);' +\r\n            '  fragColor.x *= 0.1 + brightness * 0.8;' +\r\n            '  fragColor.y *= 0.3 + brightness * 0.6;' +\r\n            '  fragColor.z *= 0.5 + brightness * 0.5;' +\r\n            '  if(saturation != 1.0){' +\r\n            '    float gray = dot(fragColor.rgb, vec3(0.299, 0.587, 0.114));' +\r\n            '    fragColor.rgb = mix(vec3(gray), fragColor.rgb, saturation);' +\r\n            '  }' +\r\n            '  fragColor.rgb *= raysColor;' +\r\n            '  gl_FragColor = fragColor;' +\r\n            '}';\r\n\r\n          function compileShader(type, src){\r\n            var s = gl.createShader(type);\r\n            gl.shaderSource(s, src);\r\n            gl.compileShader(s);\r\n            if(!gl.getShaderParameter(s, gl.COMPILE_STATUS)){\r\n              console.warn('LightRays shader error:', gl.getShaderInfoLog(s));\r\n              gl.deleteShader(s);\r\n              return null;\r\n            }\r\n            return s;\r\n          }\r\n          var vert = compileShader(gl.VERTEX_SHADER, vertSrc);\r\n          var frag = compileShader(gl.FRAGMENT_SHADER, fragSrc);\r\n          if(!vert || !frag) return;\r\n\r\n          var program = gl.createProgram();\r\n          gl.attachShader(program, vert);\r\n          gl.attachShader(program, frag);\r\n          gl.linkProgram(program);\r\n          if(!gl.getProgramParameter(program, gl.LINK_STATUS)){\r\n            console.warn('LightRays program link error:', gl.getProgramInfoLog(program));\r\n            return;\r\n          }\r\n          gl.useProgram(program);\r\n\r\n          \/\/ full-screen triangle (same technique as ogl's Triangle helper)\r\n          var posBuffer = gl.createBuffer();\r\n          gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer);\r\n          gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,-1, 3,-1, -1,3]), gl.STATIC_DRAW);\r\n          var posLoc = gl.getAttribLocation(program, 'position');\r\n          gl.enableVertexAttribArray(posLoc);\r\n          gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, 0, 0);\r\n\r\n          var u = {\r\n            iTime: gl.getUniformLocation(program, 'iTime'),\r\n            iResolution: gl.getUniformLocation(program, 'iResolution'),\r\n            rayPos: gl.getUniformLocation(program, 'rayPos'),\r\n            rayDir: gl.getUniformLocation(program, 'rayDir'),\r\n            raysColor: gl.getUniformLocation(program, 'raysColor'),\r\n            raysSpeed: gl.getUniformLocation(program, 'raysSpeed'),\r\n            lightSpread: gl.getUniformLocation(program, 'lightSpread'),\r\n            rayLength: gl.getUniformLocation(program, 'rayLength'),\r\n            pulsating: gl.getUniformLocation(program, 'pulsating'),\r\n            fadeDistance: gl.getUniformLocation(program, 'fadeDistance'),\r\n            saturation: gl.getUniformLocation(program, 'saturation'),\r\n            mousePos: gl.getUniformLocation(program, 'mousePos'),\r\n            mouseInfluence: gl.getUniformLocation(program, 'mouseInfluence'),\r\n            noiseAmount: gl.getUniformLocation(program, 'noiseAmount'),\r\n            distortion: gl.getUniformLocation(program, 'distortion')\r\n          };\r\n\r\n          var rgb = hexToRgb(raysColor);\r\n          gl.uniform3f(u.raysColor, rgb[0], rgb[1], rgb[2]);\r\n          gl.uniform1f(u.raysSpeed, raysSpeed);\r\n          gl.uniform1f(u.lightSpread, lightSpread);\r\n          gl.uniform1f(u.rayLength, rayLength);\r\n          gl.uniform1f(u.pulsating, pulsating ? 1.0 : 0.0);\r\n          gl.uniform1f(u.fadeDistance, fadeDistance);\r\n          gl.uniform1f(u.saturation, saturation);\r\n          gl.uniform1f(u.mouseInfluence, mouseInfluence);\r\n          gl.uniform1f(u.noiseAmount, noiseAmount);\r\n          gl.uniform1f(u.distortion, distortion);\r\n\r\n          var dpr = Math.min(window.devicePixelRatio || 1, 2);\r\n          var mouse = { x: 0.5, y: 0.5 };\r\n          var smoothMouse = { x: 0.5, y: 0.5 };\r\n          var isVisible = false;\r\n          var rafId = null;\r\n\r\n          function resize(){\r\n            dpr = Math.min(window.devicePixelRatio || 1, 2);\r\n            var wCSS = raysHost.clientWidth, hCSS = raysHost.clientHeight;\r\n            var w = Math.max(1, Math.floor(wCSS * dpr));\r\n            var h = Math.max(1, Math.floor(hCSS * dpr));\r\n            canvas.width = w;\r\n            canvas.height = h;\r\n            gl.viewport(0, 0, w, h);\r\n            gl.uniform2f(u.iResolution, w, h);\r\n            var placement = getAnchorAndDir(raysOrigin, w, h);\r\n            gl.uniform2f(u.rayPos, placement.anchor[0], placement.anchor[1]);\r\n            gl.uniform2f(u.rayDir, placement.dir[0], placement.dir[1]);\r\n          }\r\n\r\n          function onMouseMove(e){\r\n            var rect = raysHost.getBoundingClientRect();\r\n            mouse.x = (e.clientX - rect.left) \/ rect.width;\r\n            mouse.y = (e.clientY - rect.top) \/ rect.height;\r\n          }\r\n          if(followMouse) window.addEventListener('mousemove', onMouseMove);\r\n          window.addEventListener('resize', resize);\r\n\r\n          function loop(t){\r\n            rafId = requestAnimationFrame(loop);\r\n            gl.uniform1f(u.iTime, t * 0.001);\r\n            if(followMouse && mouseInfluence > 0.0){\r\n              var smoothing = 0.92;\r\n              smoothMouse.x = smoothMouse.x * smoothing + mouse.x * (1 - smoothing);\r\n              smoothMouse.y = smoothMouse.y * smoothing + mouse.y * (1 - smoothing);\r\n              gl.uniform2f(u.mousePos, smoothMouse.x, smoothMouse.y);\r\n            }\r\n            gl.drawArrays(gl.TRIANGLES, 0, 3);\r\n          }\r\n\r\n          function start(){\r\n            if(rafId) return;\r\n            resize();\r\n            rafId = requestAnimationFrame(loop);\r\n          }\r\n          function stop(){\r\n            if(rafId){ cancelAnimationFrame(rafId); rafId = null; }\r\n          }\r\n\r\n          if('IntersectionObserver' in window){\r\n            var io = new IntersectionObserver(function(entries){\r\n              entries.forEach(function(e){\r\n                isVisible = e.isIntersecting;\r\n                if(isVisible) start(); else stop();\r\n              });\r\n            }, { threshold: 0.1 });\r\n            io.observe(raysHost);\r\n          } else {\r\n            start();\r\n          }\r\n        })();\r\n      }\r\n\r\n      \/* split button labels into per-letter spans with staggered --i *\/\r\n      root.querySelectorAll('[data-tgus-letters]').forEach(function(el){\r\n        var text = el.textContent;\r\n        el.textContent = '';\r\n        text.split('').forEach(function(ch, i){\r\n          var span = document.createElement('span');\r\n          span.className = 'tgus-letter';\r\n          span.style.setProperty('--i', i);\r\n          span.textContent = ch === ' ' ? '\\u00A0' : ch;\r\n          el.appendChild(span);\r\n        });\r\n      });\r\n\r\n      \/* ============ Headline text reveal \u2014 sweeping gradient band ============\r\n         Only one line in this variant (single-sentence copy), so the\r\n         sequence degrades to a single sweep pass. *\/\r\n      var revealLines = [\r\n        root.querySelector('#tgus-aa-reveal-1')\r\n      ].filter(Boolean);\r\n\r\n      if(revealLines.length){\r\n        var TGUS_COLORS = ['#5ec8f2', '#3b82f6', '#8b7cf6', '#ffffff', '#6d5ef0'];\r\n        var TGUS_TEXT_COLOR = '#f4f4f8';\r\n        var BAND_HALF = 17;\r\n        var SWEEP_START = -BAND_HALF;\r\n        var SWEEP_END = 100 + BAND_HALF;\r\n\r\n        var sweepEase = function(t){\r\n          return t < 0.5 ? 4 * t*t*t : 1 - Math.pow(-2*t+2, 3) \/ 2;\r\n        };\r\n        var buildGradient = function(pos){\r\n          var bandStart = pos - BAND_HALF, bandEnd = pos + BAND_HALF;\r\n          if(bandStart >= 100) return 'linear-gradient(90deg,' + TGUS_TEXT_COLOR + ',' + TGUS_TEXT_COLOR + ')';\r\n          var n = TGUS_COLORS.length, parts = [];\r\n          if(bandStart > 0) parts.push(TGUS_TEXT_COLOR + ' 0%', TGUS_TEXT_COLOR + ' ' + bandStart.toFixed(2) + '%');\r\n          TGUS_COLORS.forEach(function(c, i){\r\n            var pct = n === 1 ? pos : bandStart + (i \/ (n - 1)) * BAND_HALF * 2;\r\n            parts.push(c + ' ' + pct.toFixed(2) + '%');\r\n          });\r\n          if(bandEnd < 100) parts.push('transparent ' + bandEnd.toFixed(2) + '%', 'transparent 100%');\r\n          return 'linear-gradient(90deg,' + parts.join(',') + ')';\r\n        };\r\n        var activateGradWord = function(lineEl){\r\n          var word = lineEl.querySelector('.tgus-grad-word');\r\n          if(word) word.classList.add('tgus-grad-active');\r\n        };\r\n        var sweepOne = function(el, duration, onDone){\r\n          var start = performance.now();\r\n          el.style.backgroundImage = buildGradient(SWEEP_START);\r\n          function tick(){\r\n            var t = Math.min((performance.now() - start) \/ duration, 1);\r\n            var pos = SWEEP_START + (SWEEP_END - SWEEP_START) * sweepEase(t);\r\n            el.style.backgroundImage = buildGradient(pos);\r\n            if(t < 1) requestAnimationFrame(tick);\r\n            else {\r\n              activateGradWord(el);\r\n              if(onDone) onDone();\r\n            }\r\n          }\r\n          requestAnimationFrame(tick);\r\n        };\r\n        var runSweepSequence = function(){\r\n          var LINE_DURATION = 650;\r\n          sweepOne(revealLines[0], LINE_DURATION);\r\n        };\r\n\r\n        if(reduceMotion){\r\n          revealLines.forEach(function(el){\r\n            el.style.backgroundImage = buildGradient(SWEEP_END);\r\n            activateGradWord(el);\r\n          });\r\n        } else if('IntersectionObserver' in window){\r\n          var revealFired = false;\r\n          var revealIo = new IntersectionObserver(function(entries){\r\n            entries.forEach(function(e){\r\n              if(e.isIntersecting && !revealFired){\r\n                revealFired = true;\r\n                setTimeout(runSweepSequence, 300);\r\n              }\r\n            });\r\n          }, { threshold: .1 });\r\n          revealIo.observe(revealLines[0]);\r\n        } else {\r\n          revealLines.forEach(function(el){\r\n            el.style.backgroundImage = buildGradient(SWEEP_END);\r\n            activateGradWord(el);\r\n          });\r\n        }\r\n      }\r\n\r\n      \/* ============ Card entrance \u2014 subtle fade + slide on first view ============ *\/\r\n      var cardEl = root.querySelector('.tgus-card');\r\n      if(cardEl){\r\n        if(reduceMotion || !('IntersectionObserver' in window)){\r\n          cardEl.classList.add('tgus-in-view');\r\n        } else {\r\n          var cardIo = new IntersectionObserver(function(entries){\r\n            entries.forEach(function(e){\r\n              if(e.isIntersecting){ cardEl.classList.add('tgus-in-view'); cardIo.unobserve(cardEl); }\r\n            });\r\n          }, { threshold: .15 });\r\n          cardIo.observe(cardEl);\r\n        }\r\n      }\r\n\r\n      \/* ============ Glow: pause the spin off-screen \u2014 perf ============ *\/\r\n      var glow = root.querySelector('#tgus-aa-glow');\r\n      if(glow && 'IntersectionObserver' in window){\r\n        var glowIo = new IntersectionObserver(function(entries){\r\n          entries.forEach(function(e){ glow.setAttribute('data-paused', e.isIntersecting ? 'false' : 'true'); });\r\n        }, { threshold: .1 });\r\n        glowIo.observe(glow);\r\n      }\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db5d8b0 elementor-widget elementor-widget-html\" data-id=\"db5d8b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-stack-section\" class=\"tgus-stack-section\">\r\n  <style>\r\n    #tgus-stack-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(1.5rem, 3vw, 2.5rem) 0;\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-stack-section *, #tgus-stack-section *::before, #tgus-stack-section *::after { box-sizing: border-box; }\r\n\r\n    \/* ================================================================\r\n       DOUBLE MARQUEE \u2014 two rows of logos, opposite directions, same\r\n       infinite-loop technique as the hero's image mosaic: each row\r\n       duplicates its logo set and translates exactly -50%, resetting\r\n       without a visible seam. Row 1 scrolls left, row 2 scrolls right.\r\n       ================================================================ *\/\r\n    #tgus-stack-marquee-wrap {\r\n      position: relative;\r\n      z-index: 2;\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: clamp(1.5rem, 3vw, 2.25rem);\r\n      -webkit-mask-image: linear-gradient(90deg, transparent 0%, black 8%, black 92%, transparent 100%);\r\n      mask-image: linear-gradient(90deg, transparent 0%, black 8%, black 92%, transparent 100%);\r\n    }\r\n    .tgus-stack-row {\r\n      display: flex;\r\n      overflow: hidden;\r\n    }\r\n    .tgus-stack-track {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: clamp(2.5rem, 5vw, 4rem);\r\n      flex-shrink: 0;\r\n      will-change: transform;\r\n      padding: 0 clamp(1.25rem, 2.5vw, 2rem);\r\n    }\r\n    .tgus-stack-track.tgus-marquee-left {\r\n      animation: tgus-marquee-left 90s linear infinite;\r\n    }\r\n    .tgus-stack-track.tgus-marquee-right {\r\n      animation: tgus-marquee-right 90s linear infinite;\r\n    }\r\n    @keyframes tgus-marquee-left {\r\n      from { transform: translateX(0); }\r\n      to { transform: translateX(-50%); }\r\n    }\r\n    @keyframes tgus-marquee-right {\r\n      from { transform: translateX(-50%); }\r\n      to { transform: translateX(0); }\r\n    }\r\n\r\n    .tgus-stack-logo {\r\n      flex: none;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      height: clamp(4rem, 7vw, 5.5rem);\r\n      opacity: .7;\r\n      filter: grayscale(1) brightness(1.6);\r\n      transition: opacity .35s var(--tgus-ease), filter .35s var(--tgus-ease), transform .35s var(--tgus-ease);\r\n    }\r\n    .tgus-stack-logo img {\r\n      height: 100%;\r\n      width: auto;\r\n      max-width: clamp(8rem, 11vw, 11rem);\r\n      object-fit: contain;\r\n      display: block;\r\n    }\r\n    @media (hover: hover) and (pointer: fine) {\r\n      .tgus-stack-logo:hover {\r\n        opacity: 1;\r\n        filter: grayscale(0) brightness(1);\r\n        transform: translateY(-2px);\r\n      }\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      .tgus-stack-track.tgus-marquee-left,\r\n      .tgus-stack-track.tgus-marquee-right {\r\n        animation: none !important;\r\n      }\r\n      .tgus-stack-row { overflow-x: auto; }\r\n    }\r\n\r\n    @media (max-width: 560px) {\r\n      .tgus-stack-track { gap: 2.25rem; }\r\n      .tgus-stack-logo { height: 3.25rem; }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-stack-marquee-wrap\" aria-hidden=\"true\">\r\n    <!-- Fila 1 \u2014 scroll a la izquierda -->\r\n    <div class=\"tgus-stack-row\">\r\n      <div class=\"tgus-stack-track tgus-marquee-left\" id=\"tgus-stack-track-1\"><\/div>\r\n    <\/div>\r\n    <!-- Fila 2 \u2014 scroll a la derecha -->\r\n    <div class=\"tgus-stack-row\">\r\n      <div class=\"tgus-stack-track tgus-marquee-right\" id=\"tgus-stack-track-2\"><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <span style=\"position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);\">\r\n    Tech stack: Android Studio, Angular, C, Django, Java, JavaScript, Laravel, HTML5, MariaDB, C++, MongoDB, Node.js, Nuxt.js, PHP, PostgreSQL, .NET, Python, React, Spring Boot, CSS, Symfony, Vue.js\r\n  <\/span>\r\n\r\n  <script>\r\n    (function(){\r\n      var root = document.getElementById('tgus-stack-section');\r\n      if(!root) return;\r\n\r\n      \/* Logo set \u2014 de-duplicated from the supplied list (C.png, MongoDB.png\r\n         and CSS.png each appeared twice in the source list; kept once). *\/\r\n      var LOGOS = [\r\n        { name: 'Android Studio', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Android-Studio.png' },\r\n        { name: 'Angular', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Angular.png' },\r\n        { name: 'C', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_C.png' },\r\n        { name: 'Django', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Django.png' },\r\n        { name: 'Java', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Java.png' },\r\n        { name: 'JavaScript', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_JavaScript.png' },\r\n        { name: 'Laravel', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Laravel.png' },\r\n        { name: 'HTML5', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_HTML5.png' },\r\n        { name: 'MariaDB', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_MariaDB.png' },\r\n        { name: 'C++', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_C-1.png' },\r\n        { name: 'MongoDB', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_MongoDB.png' },\r\n        { name: 'Node.js', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Nodejs.png' },\r\n        { name: 'Nuxt.js', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_NuxtJS.png' },\r\n        { name: 'PHP', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_PHP.png' },\r\n        { name: 'PostgreSQL', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_PostgreSQL.png' },\r\n        { name: '.NET', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Punto-Net.png' },\r\n        { name: 'Python', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Python.png' },\r\n        { name: 'React', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_React.png' },\r\n        { name: 'Spring Boot', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Spring-Boot.png' },\r\n        { name: 'CSS', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_CSS.png' },\r\n        { name: 'Symfony', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_Symfony.png' },\r\n        { name: 'Vue.js', src: 'http:\/\/togrowagencia.com\/wp-content\/uploads\/2024\/08\/Logos-Lenguajes-de-Programacion_VueJS.png' }\r\n      ];\r\n\r\n      \/* Split the 22 logos into two roughly even halves \u2014 one per row \u2014\r\n         so each row loops a shorter, distinct set rather than both rows\r\n         showing the exact same sequence in mirrored motion. *\/\r\n      var mid = Math.ceil(LOGOS.length \/ 2);\r\n      var rowSets = [LOGOS.slice(0, mid), LOGOS.slice(mid)];\r\n\r\n      function buildTrack(trackEl, logos){\r\n        \/\/ duplicate the set once so translateX(-50%) loops seamlessly\r\n        var doubled = logos.concat(logos);\r\n        doubled.forEach(function(logo){\r\n          var span = document.createElement('span');\r\n          span.className = 'tgus-stack-logo';\r\n          var img = document.createElement('img');\r\n          img.src = logo.src;\r\n          img.alt = logo.name;\r\n          img.loading = 'lazy';\r\n          img.decoding = 'async';\r\n          img.onerror = function(){ span.style.display = 'none'; };\r\n          span.appendChild(img);\r\n          trackEl.appendChild(span);\r\n        });\r\n      }\r\n\r\n      var track1 = root.querySelector('#tgus-stack-track-1');\r\n      var track2 = root.querySelector('#tgus-stack-track-2');\r\n      if(track1) buildTrack(track1, rowSets[0]);\r\n      if(track2) buildTrack(track2, rowSets[1]);\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b01928f elementor-widget elementor-widget-html\" data-id=\"b01928f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-deliver-section\" class=\"tgus-deliver-section\">\r\n  <style>\r\n    #tgus-deliver-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4.5rem, 9vw, 7.5rem) clamp(1.25rem, 5vw, 4rem);\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-deliver-section *, #tgus-deliver-section *::before, #tgus-deliver-section *::after { box-sizing: border-box; }\r\n\r\n    \/* ================================================================\r\n       SECTION BACKDROP \u2014 faint dot-grid plus one ambient glow. The\r\n       glow is centered well inside the section's own box (not anchored\r\n       to a corner or edge) so its blur falloff never reaches the\r\n       section's clipped boundary \u2014 anchoring to a corner was cutting\r\n       the glow off in a hard visible edge against the section's own\r\n       overflow:hidden. A centered, large, low-opacity glow reads as\r\n       atmosphere; a corner-anchored one reads as a clipped sticker.\r\n       ================================================================ *\/\r\n    #tgus-deliver-grid {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      background-image: radial-gradient(circle, rgba(255,255,255,.05) 1px, transparent 1.4px);\r\n      background-size: 26px 26px;\r\n      -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 45%, black, transparent 75%);\r\n      mask-image: radial-gradient(ellipse 70% 60% at 50% 45%, black, transparent 75%);\r\n      pointer-events: none;\r\n    }\r\n    #tgus-deliver-ambient {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      pointer-events: none;\r\n      overflow: hidden;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    #tgus-deliver-ambient span {\r\n      position: absolute;\r\n      width: 52rem; height: 40rem;\r\n      border-radius: 50%;\r\n      filter: blur(120px);\r\n      opacity: .18;\r\n      background: radial-gradient(ellipse, var(--tgus-blue) 0%, transparent 70%);\r\n      animation: tgus-deliver-drift 24s cubic-bezier(.16,1,.3,1) infinite alternate;\r\n    }\r\n    @keyframes tgus-deliver-drift {\r\n      from { transform: translate(0, 0); }\r\n      to { transform: translate(-2.5rem, 3rem); }\r\n    }\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-deliver-ambient span { animation: none !important; }\r\n    }\r\n\r\n    #tgus-deliver-inner {\r\n      position: relative; z-index: 2;\r\n      max-width: 1160px;\r\n      margin: 0 auto;\r\n      display: grid;\r\n      grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\r\n      gap: clamp(2.5rem, 6vw, 5rem);\r\n      align-items: center;\r\n    }\r\n\r\n    #tgus-deliver-copy { min-width: 0; }\r\n\r\n    #tgus-deliver-eyebrow {\r\n      display: inline-flex; align-items: center; gap: .5em;\r\n      font-size: .8rem !important;\r\n      font-weight: 600 !important;\r\n      letter-spacing: .08em;\r\n      text-transform: uppercase;\r\n      color: var(--tgus-cyan) !important;\r\n      margin: 0 0 .9rem !important;\r\n      opacity: 0; transform: translateY(10px);\r\n      animation: tgus-deliver-in .7s var(--tgus-ease) forwards;\r\n    }\r\n    #tgus-deliver-eyebrow::before {\r\n      content: '';\r\n      width: 1.4rem; height: 1px;\r\n      background: var(--tgus-cyan);\r\n      display: inline-block;\r\n    }\r\n    #tgus-deliver-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.9rem, 3.4vw, 2.6rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.18 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 0 1.25rem !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n    #tgus-deliver-title .tgus-word {\r\n      display: inline-block;\r\n      opacity: 0;\r\n      transform: translateY(16px);\r\n      animation: tgus-deliver-in .6s var(--tgus-ease) forwards;\r\n      animation-delay: calc(60ms * var(--i, 0) + 60ms);\r\n    }\r\n    #tgus-deliver-copy p {\r\n      font-size: 1.02rem !important;\r\n      line-height: 1.65 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: 0 0 1.1rem !important;\r\n      max-width: 46ch;\r\n      opacity: 0; transform: translateY(14px);\r\n      animation: tgus-deliver-in .8s var(--tgus-ease) .14s forwards;\r\n    }\r\n    #tgus-deliver-copy p:nth-of-type(2) { animation-delay: .2s; }\r\n\r\n    #tgus-deliver-markets {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: .5rem;\r\n      margin-top: 1.5rem;\r\n      opacity: 0; transform: translateY(14px);\r\n      animation: tgus-deliver-in .8s var(--tgus-ease) .26s forwards;\r\n    }\r\n    #tgus-deliver-markets span {\r\n      font-size: .78rem !important;\r\n      font-weight: 600 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      background: rgba(255,255,255,.04);\r\n      border: 1px solid var(--tgus-border);\r\n      border-radius: 999px;\r\n      padding: .35rem .85rem;\r\n    }\r\n\r\n    @keyframes tgus-deliver-in { to { opacity: 1; transform: translateY(0); } }\r\n\r\n    \/* ================================================================\r\n       HERO PHOTO \u2014 single dynamic shot of someone actually using the\r\n       software, replacing the static 3-tablet stack. Soft ambient glow\r\n       (blue\/violet, matching the section's accent palette) sits behind\r\n       the frame; a subtle grain\/noise texture overlays the photo itself\r\n       so it doesn't sit flat against the dark background \u2014 same spirit\r\n       as the hero's glow orbs, tuned much quieter since this is a\r\n       supporting visual, not the focal hero moment.\r\n       ================================================================ *\/\r\n    #tgus-deliver-visual {\r\n      position: relative;\r\n      min-width: 0;\r\n      min-height: clamp(20rem, 34vw, 30rem);\r\n      opacity: 0; transform: translateY(20px);\r\n      animation: tgus-deliver-in 1s var(--tgus-ease) .18s forwards;\r\n    }\r\n    #tgus-deliver-glow {\r\n      position: absolute;\r\n      inset: -15%;\r\n      z-index: 0;\r\n      background:\r\n        radial-gradient(closest-side, rgba(59,130,246,.28), transparent 70%) 15% 20% \/ 55% 55% no-repeat,\r\n        radial-gradient(closest-side, rgba(139,124,246,.24), transparent 70%) 85% 75% \/ 55% 55% no-repeat;\r\n      filter: blur(28px);\r\n      pointer-events: none;\r\n    }\r\n    #tgus-deliver-photo-frame {\r\n      position: relative;\r\n      z-index: 1;\r\n      width: 100%;\r\n      height: 100%;\r\n      min-height: clamp(20rem, 34vw, 30rem);\r\n      border-radius: 1.25rem;\r\n      overflow: hidden;\r\n      border: 1px solid var(--tgus-border);\r\n      box-shadow: 0 40px 90px -30px rgba(0,0,0,.65);\r\n    }\r\n    #tgus-deliver-photo-frame img {\r\n      position: absolute;\r\n      inset: 0;\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: cover;\r\n      display: block;\r\n    }\r\n    \/* fades the photo's bottom edge into the section background instead\r\n       of a hard crop, so the image feels like it dissolves rather than\r\n       sits as a boxed screenshot *\/\r\n    #tgus-deliver-photo-frame::after {\r\n      content: '';\r\n      position: absolute;\r\n      inset: 0;\r\n      z-index: 3;\r\n      pointer-events: none;\r\n      background: linear-gradient(to bottom, transparent 55%, var(--tgus-bg-0) 96%);\r\n    }\r\n    \/* grain texture \u2014 CSS-only, no image asset needed *\/\r\n    #tgus-deliver-grain {\r\n      content: '';\r\n      position: absolute;\r\n      inset: 0;\r\n      z-index: 2;\r\n      pointer-events: none;\r\n      background-image: url(\"data:image\/svg+xml;utf8,<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'\/><feColorMatrix type='saturate' values='0'\/><\/filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'\/><\/svg>\");\r\n      opacity: .22;\r\n      mix-blend-mode: overlay;\r\n    }\r\n    \/* directional color wash to tie the photo into the section palette *\/\r\n    #tgus-deliver-wash {\r\n      content: '';\r\n      position: absolute;\r\n      inset: 0;\r\n      z-index: 2;\r\n      pointer-events: none;\r\n      background: linear-gradient(135deg, rgba(37,99,235,.22) 0%, transparent 45%, transparent 65%, rgba(109,94,240,.2) 100%);\r\n      mix-blend-mode: soft-light;\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-deliver-eyebrow, #tgus-deliver-title .tgus-word, #tgus-deliver-copy p,\r\n      #tgus-deliver-markets, #tgus-deliver-visual {\r\n        animation-duration: .01ms !important; opacity: 1 !important; transform: none !important;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 860px) {\r\n      #tgus-deliver-inner { grid-template-columns: 1fr; }\r\n      #tgus-deliver-visual { order: -1; min-height: clamp(16rem, 60vw, 22rem); margin-bottom: 1rem; }\r\n      #tgus-deliver-photo-frame { min-height: clamp(16rem, 60vw, 22rem); }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-deliver-grid\" aria-hidden=\"true\"><\/div>\r\n  <div id=\"tgus-deliver-ambient\" aria-hidden=\"true\"><span><\/span><\/div>\r\n\r\n  <div id=\"tgus-deliver-inner\">\r\n    <div id=\"tgus-deliver-copy\">\r\n      <p id=\"tgus-deliver-eyebrow\">Custom software<\/p>\r\n      <h2 id=\"tgus-deliver-title\" aria-label=\"Custom software development company built around how your business actually runs\"><span id=\"tgus-deliver-title-words\" aria-hidden=\"true\"><\/span><\/h2>\r\n      <p>As a <strong>custom software development company<\/strong>, we design and build web platforms, mobile apps and internal tools tailored to your operation \u2014 not a template stretched to fit.<\/p>\r\n      <p>We've delivered projects across industries of every scale, from small teams to large operations, and our track record as a software factory reflects the practices we follow on every build.<\/p>\r\n      <div id=\"tgus-deliver-markets\">\r\n        <span>Colombia<\/span>\r\n        <span>Peru<\/span>\r\n        <span>Mexico<\/span>\r\n        <span>Dominican Republic<\/span>\r\n        <span>United States<\/span>\r\n        <span>Chile<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"tgus-deliver-visual\" aria-hidden=\"true\">\r\n      <div id=\"tgus-deliver-glow\"><\/div>\r\n      <div id=\"tgus-deliver-photo-frame\">\r\n        <img src=\"https:\/\/images.unsplash.com\/photo-1517694712202-14dd9538aa97?auto=format&fit=crop&w=1200&q=75\" alt=\"\" loading=\"lazy\" decoding=\"async\" onerror=\"this.onerror=null;this.style.background='linear-gradient(135deg,var(--tgus-blue),var(--tgus-violet))';this.style.opacity='.35';this.removeAttribute('src');\">\r\n        <div id=\"tgus-deliver-wash\"><\/div>\r\n        <div id=\"tgus-deliver-grain\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      var root = document.getElementById('tgus-deliver-section');\r\n      if(!root) return;\r\n      var target = root.querySelector('#tgus-deliver-title-words');\r\n      if(!target) return;\r\n      var text = 'Custom software development company built around how your business actually runs';\r\n      text.split(' ').forEach(function(word, i){\r\n        var span = document.createElement('span');\r\n        span.className = 'tgus-word';\r\n        span.style.setProperty('--i', i);\r\n        span.textContent = word;\r\n        target.appendChild(span);\r\n        target.appendChild(document.createTextNode(' '));\r\n      });\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bda6d76 elementor-widget elementor-widget-html\" data-id=\"bda6d76\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-team-section\" class=\"tgus-team-section\">\r\n  <style>\r\n    #tgus-team-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-blue-d: #2563eb;\r\n      --tgus-blue-400: #3b82f6;\r\n      --tgus-blue-500: #2563eb;\r\n      --tgus-blue-600: #1d4ed8;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-cyan-300: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4.5rem, 9vw, 7.5rem) clamp(1.25rem, 5vw, 4rem);\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-team-section *, #tgus-team-section *::before, #tgus-team-section *::after { box-sizing: border-box; }\r\n\r\n    \/* ================================================================\r\n       SECTION BACKDROP \u2014 faint dot-grid plus one ambient glow, centered\r\n       well inside the section's own box rather than anchored to a\r\n       corner. A corner-anchored glow gets clipped by the section's own\r\n       overflow:hidden, showing up as a hard-edged patch of color instead\r\n       of a soft ambient field \u2014 centering it avoids that entirely.\r\n       ================================================================ *\/\r\n    #tgus-team-grid {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      background-image: radial-gradient(circle, rgba(255,255,255,.05) 1px, transparent 1.4px);\r\n      background-size: 26px 26px;\r\n      -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 50%, black, transparent 75%);\r\n      mask-image: radial-gradient(ellipse 70% 60% at 50% 50%, black, transparent 75%);\r\n      pointer-events: none;\r\n    }\r\n    #tgus-team-ambient {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      pointer-events: none;\r\n      overflow: hidden;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    #tgus-team-ambient span {\r\n      width: 50rem; height: 38rem;\r\n      border-radius: 50%;\r\n      filter: blur(120px);\r\n      opacity: .16;\r\n      background: radial-gradient(ellipse, var(--tgus-violet) 0%, transparent 70%);\r\n      animation: tgus-team-drift 26s cubic-bezier(.16,1,.3,1) infinite alternate;\r\n    }\r\n    @keyframes tgus-team-drift {\r\n      from { transform: translate(0, 0); }\r\n      to { transform: translate(2rem, -1.5rem); }\r\n    }\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-team-ambient span { animation: none !important; }\r\n    }\r\n\r\n    #tgus-team-inner {\r\n      position: relative; z-index: 2;\r\n      max-width: 1160px;\r\n      margin: 0 auto;\r\n      display: grid;\r\n      grid-template-columns: minmax(0, .9fr) minmax(0, 1fr);\r\n      gap: clamp(2.5rem, 6vw, 5rem);\r\n      align-items: center;\r\n    }\r\n\r\n    #tgus-team-copy { min-width: 0; }\r\n\r\n    #tgus-team-eyebrow {\r\n      display: inline-flex; align-items: center; gap: .5em;\r\n      font-size: .8rem !important;\r\n      font-weight: 600 !important;\r\n      letter-spacing: .08em;\r\n      text-transform: uppercase;\r\n      color: var(--tgus-cyan) !important;\r\n      margin: 0 0 .9rem !important;\r\n      opacity: 0; transform: translateY(10px);\r\n      animation: tgus-team-in .7s var(--tgus-ease) forwards;\r\n    }\r\n    #tgus-team-eyebrow::before {\r\n      content: '';\r\n      width: 1.4rem; height: 1px;\r\n      background: var(--tgus-cyan);\r\n      display: inline-block;\r\n    }\r\n    #tgus-team-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.9rem, 3.4vw, 2.6rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.18 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 0 1.25rem !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n    #tgus-team-title .tgus-word {\r\n      display: inline-block;\r\n      opacity: 0;\r\n      transform: translateY(16px);\r\n      animation: tgus-team-in .6s var(--tgus-ease) forwards;\r\n      animation-delay: calc(60ms * var(--i, 0) + 60ms);\r\n    }\r\n    #tgus-team-copy p {\r\n      font-size: 1.02rem !important;\r\n      line-height: 1.65 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: 0 0 1.5rem !important;\r\n      max-width: 46ch;\r\n      opacity: 0; transform: translateY(14px);\r\n      animation: tgus-team-in .8s var(--tgus-ease) .14s forwards;\r\n    }\r\n\r\n    #tgus-team-list {\r\n      list-style: none;\r\n      margin: 0 0 1.75rem !important;\r\n      padding: 0 !important;\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: .65rem;\r\n    }\r\n    #tgus-team-list li {\r\n      display: flex;\r\n      align-items: flex-start;\r\n      gap: .65rem;\r\n      font-size: .95rem !important;\r\n      line-height: 1.5 !important;\r\n      color: var(--tgus-text) !important;\r\n      opacity: 0; transform: translateY(10px);\r\n      animation: tgus-team-in .6s var(--tgus-ease) forwards;\r\n    }\r\n    #tgus-team-list li:nth-child(1) { animation-delay: .22s; }\r\n    #tgus-team-list li:nth-child(2) { animation-delay: .27s; }\r\n    #tgus-team-list li:nth-child(3) { animation-delay: .32s; }\r\n    #tgus-team-list li:nth-child(4) { animation-delay: .37s; }\r\n    #tgus-team-list li:nth-child(5) { animation-delay: .42s; }\r\n    #tgus-team-list li:nth-child(6) { animation-delay: .47s; }\r\n    #tgus-team-list svg {\r\n      flex-shrink: 0;\r\n      width: 1.1em; height: 1.1em;\r\n      margin-top: .15em;\r\n      color: var(--tgus-cyan);\r\n    }\r\n\r\n    \/* ================================================================\r\n       CTA BUTTON \u2014 standard project button (Uiverse dexter-st glass\r\n       button, recolored to brand blue). See hero button for the\r\n       canonical version; this is the same component reused here.\r\n       ================================================================ *\/\r\n    #tgus-team-cta-wrap {\r\n      position: relative;\r\n      display: inline-block;\r\n      opacity: 0; transform: translateY(14px);\r\n      animation: tgus-team-in .8s var(--tgus-ease) .52s forwards;\r\n    }\r\n    #tgus-team-cta {\r\n      --border-radius: 24px;\r\n      --padding: 4px;\r\n      --transition: .4s;\r\n\r\n      position: relative;\r\n      isolation: isolate;\r\n      user-select: none;\r\n      display: flex !important;\r\n      align-items: center;\r\n      justify-content: center;\r\n      gap: .6rem;\r\n      padding: .9rem .9rem .9rem 1.5rem !important;\r\n      font-family: var(--tgus-font-body) !important;\r\n      font-size: .95rem !important;\r\n      font-weight: 600 !important;\r\n      text-decoration: none !important;\r\n      color: #fff !important;\r\n\r\n      background-image: linear-gradient(180deg, var(--tgus-blue-400) 0%, var(--tgus-blue-600) 100%);\r\n      box-shadow:\r\n        inset 0px 1px 1px rgba(255,255,255,.45),\r\n        inset 0px 2px 3px rgba(255,255,255,.3),\r\n        inset 0px 4px 6px rgba(255,255,255,.15),\r\n        inset 0px 10px 14px rgba(255,255,255,.08),\r\n        0px -1px 1px rgba(0,0,0,.05),\r\n        0px -3px 4px rgba(0,0,0,.1),\r\n        0px -8px 14px rgba(0,0,0,.18),\r\n        0px 8px 20px -6px rgba(10,40,110,.55);\r\n\r\n      border: solid 1px rgba(255,255,255,.28) !important;\r\n      border-radius: var(--border-radius);\r\n      cursor: pointer;\r\n\r\n      transition: box-shadow var(--transition), border var(--transition), background-image var(--transition), transform var(--transition);\r\n    }\r\n    #tgus-team-cta::before {\r\n      content: \"\";\r\n      position: absolute;\r\n      top: calc(0px - var(--padding));\r\n      left: calc(0px - var(--padding));\r\n      width: calc(100% + var(--padding) * 2);\r\n      height: calc(100% + var(--padding) * 2);\r\n      border-radius: calc(var(--border-radius) + var(--padding));\r\n      pointer-events: none;\r\n      background-image: linear-gradient(0deg, #0004, #000a);\r\n      z-index: -1;\r\n      transition: box-shadow var(--transition), filter var(--transition);\r\n      box-shadow:\r\n        1px 1px 1px rgba(255,255,255,.12),\r\n        2px 2px 2px rgba(255,255,255,.06),\r\n        -1px -1px 1px rgba(0,0,0,.13),\r\n        -2px -2px 2px rgba(0,0,0,.06);\r\n    }\r\n    #tgus-team-cta::after {\r\n      content: \"\";\r\n      position: absolute;\r\n      top: 0; left: 0;\r\n      width: 100%; height: 100%;\r\n      border-radius: inherit;\r\n      pointer-events: none;\r\n      background-image: linear-gradient(0deg, #fff, var(--tgus-cyan-300), var(--tgus-blue-500) 50%, transparent 85%);\r\n      opacity: 0;\r\n      transition: opacity var(--transition), filter var(--transition);\r\n    }\r\n    #tgus-team-cta:hover {\r\n      border: solid 1px rgba(94,200,242,.5) !important;\r\n      background-image: linear-gradient(180deg, var(--tgus-cyan-300) 0%, var(--tgus-blue-500) 100%);\r\n      transform: translateY(-1px);\r\n    }\r\n    #tgus-team-cta:hover::after {\r\n      opacity: 1;\r\n      -webkit-mask-image: linear-gradient(0deg, #fff, transparent);\r\n      mask-image: linear-gradient(0deg, #fff, transparent);\r\n    }\r\n    #tgus-team-cta:active {\r\n      border: solid 1px rgba(94,200,242,.7) !important;\r\n      background-image: linear-gradient(180deg, var(--tgus-blue-500) 0%, var(--tgus-blue-600) 100%);\r\n      transform: translateY(0) scale(.99);\r\n    }\r\n    #tgus-team-cta:active::after {\r\n      opacity: 1;\r\n      filter: brightness(200%);\r\n      -webkit-mask-image: linear-gradient(0deg, #fff, transparent);\r\n      mask-image: linear-gradient(0deg, #fff, transparent);\r\n    }\r\n    #tgus-team-cta:focus-visible {\r\n      outline: 2px solid var(--tgus-cyan-300);\r\n      outline-offset: 3px;\r\n    }\r\n    #tgus-team-cta-letters {\r\n      position: relative; z-index: 2;\r\n      display: inline-flex;\r\n      color: rgba(255,255,255,.92);\r\n      text-shadow: 0 1px 1px rgba(0,0,0,.25);\r\n    }\r\n    #tgus-team-cta-svg {\r\n      display: flex;\r\n      height: 18px; width: 18px;\r\n      fill: none;\r\n      stroke: #fff;\r\n      stroke-width: 2;\r\n      filter: drop-shadow(0 1px 1px rgba(0,0,0,.25));\r\n      transition: transform var(--transition);\r\n    }\r\n    #tgus-team-cta:hover #tgus-team-cta-svg {\r\n      transform: translateX(2px);\r\n    }\r\n\r\n    @keyframes tgus-team-in { to { opacity: 1; transform: translateY(0); } }\r\n\r\n    \/* ================================================================\r\n       SINGLE PHOTO \u2014 replaces the 3-phone stack with one dynamic shot\r\n       of a team actually working, same treatment as the previous\r\n       section's photo: ambient glow behind the frame, directional\r\n       color wash + grain overlay on the photo itself, and a bottom\r\n       fade so it dissolves into the section background instead of\r\n       ending in a hard crop.\r\n       ================================================================ *\/\r\n    #tgus-team-visual {\r\n      position: relative;\r\n      min-width: 0;\r\n      min-height: clamp(18rem, 30vw, 26rem);\r\n      opacity: 0; transform: translateY(20px);\r\n      animation: tgus-team-in 1s var(--tgus-ease) .2s forwards;\r\n    }\r\n    #tgus-team-glow {\r\n      position: absolute;\r\n      inset: -15%;\r\n      z-index: 0;\r\n      background:\r\n        radial-gradient(closest-side, rgba(139,124,246,.26), transparent 70%) 20% 25% \/ 55% 55% no-repeat,\r\n        radial-gradient(closest-side, rgba(59,130,246,.22), transparent 70%) 80% 80% \/ 55% 55% no-repeat;\r\n      filter: blur(28px);\r\n      pointer-events: none;\r\n    }\r\n    #tgus-team-photo-frame {\r\n      position: relative;\r\n      z-index: 1;\r\n      width: 100%;\r\n      height: 100%;\r\n      min-height: clamp(18rem, 30vw, 26rem);\r\n      border-radius: 1.25rem;\r\n      overflow: hidden;\r\n      border: 1px solid var(--tgus-border);\r\n      box-shadow: 0 40px 90px -30px rgba(0,0,0,.65);\r\n    }\r\n    #tgus-team-photo-frame img {\r\n      position: absolute;\r\n      inset: 0;\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: cover;\r\n      display: block;\r\n    }\r\n    \/* dissolves the photo into the section background at the bottom\r\n       edge instead of ending in a hard crop *\/\r\n    #tgus-team-photo-frame::after {\r\n      content: '';\r\n      position: absolute;\r\n      inset: 0;\r\n      z-index: 3;\r\n      pointer-events: none;\r\n      background: linear-gradient(to bottom, transparent 55%, var(--tgus-bg-0) 96%);\r\n    }\r\n    #tgus-team-grain {\r\n      position: absolute;\r\n      inset: 0;\r\n      z-index: 2;\r\n      pointer-events: none;\r\n      background-image: url(\"data:image\/svg+xml;utf8,<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'\/><feColorMatrix type='saturate' values='0'\/><\/filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'\/><\/svg>\");\r\n      opacity: .22;\r\n      mix-blend-mode: overlay;\r\n    }\r\n    #tgus-team-wash {\r\n      position: absolute;\r\n      inset: 0;\r\n      z-index: 2;\r\n      pointer-events: none;\r\n      background: linear-gradient(135deg, rgba(109,94,240,.22) 0%, transparent 45%, transparent 65%, rgba(37,99,235,.2) 100%);\r\n      mix-blend-mode: soft-light;\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-team-eyebrow, #tgus-team-title .tgus-word, #tgus-team-copy p, #tgus-team-list li,\r\n      #tgus-team-cta-wrap, #tgus-team-visual {\r\n        animation-duration: .01ms !important; opacity: 1 !important; transform: none !important;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 860px) {\r\n      #tgus-team-inner { grid-template-columns: 1fr; }\r\n      #tgus-team-visual { order: -1; min-height: clamp(14rem, 60vw, 20rem); margin-bottom: 1rem; }\r\n      #tgus-team-photo-frame { min-height: clamp(14rem, 60vw, 20rem); }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-team-grid\" aria-hidden=\"true\"><\/div>\r\n  <div id=\"tgus-team-ambient\" aria-hidden=\"true\"><span><\/span><\/div>\r\n\r\n  <div id=\"tgus-team-inner\">\r\n    <div id=\"tgus-team-visual\" aria-hidden=\"true\">\r\n      <div id=\"tgus-team-glow\"><\/div>\r\n      <div id=\"tgus-team-photo-frame\">\r\n        <img src=\"https:\/\/images.unsplash.com\/photo-1522071820081-009f0129c71c?auto=format&fit=crop&w=1200&q=75\" alt=\"\" loading=\"lazy\" decoding=\"async\" onerror=\"this.onerror=null;this.style.background='linear-gradient(135deg,var(--tgus-violet),var(--tgus-blue))';this.style.opacity='.35';this.removeAttribute('src');\">\r\n        <div id=\"tgus-team-wash\"><\/div>\r\n        <div id=\"tgus-team-grain\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"tgus-team-copy\">\r\n      <p id=\"tgus-team-eyebrow\">Dedicated team<\/p>\r\n      <h2 id=\"tgus-team-title\" aria-label=\"A structured team, built around your project\"><span id=\"tgus-team-title-words\" aria-hidden=\"true\"><\/span><\/h2>\r\n      <p>Hiring a dedicated development team starts with your goals, timeline and scope. From there, we structure the right team around the skills your project actually needs.<\/p>\r\n\r\n      <ul id=\"tgus-team-list\">\r\n        <li>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\r\n          We define the essential requirements together.\r\n        <\/li>\r\n        <li>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\r\n          We select experts who understand your needs.\r\n        <\/li>\r\n        <li>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\r\n          We build a team focused on outcomes.\r\n        <\/li>\r\n        <li>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\r\n          We plan the project from start to finish.\r\n        <\/li>\r\n        <li>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\r\n          We design UX\/UI your users will actually enjoy.\r\n        <\/li>\r\n        <li>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\r\n          We run rigorous testing before launch.\r\n        <\/li>\r\n      <\/ul>\r\n\r\n      <span id=\"tgus-team-cta-wrap\">\r\n        <a id=\"tgus-team-cta\" href=\"https:\/\/api.whatsapp.com\/send?phone=573103597580\" target=\"_blank\" rel=\"noopener\">\r\n          <span id=\"tgus-team-cta-letters\">Ready to build with us?<\/span>\r\n          <svg id=\"tgus-team-cta-svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\r\n        <\/a>\r\n      <\/span>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      var root = document.getElementById('tgus-team-section');\r\n      if(!root) return;\r\n      var target = root.querySelector('#tgus-team-title-words');\r\n      if(!target) return;\r\n      var text = 'A structured team, built around your project';\r\n      text.split(' ').forEach(function(word, i){\r\n        var span = document.createElement('span');\r\n        span.className = 'tgus-word';\r\n        span.style.setProperty('--i', i);\r\n        span.textContent = word;\r\n        target.appendChild(span);\r\n        target.appendChild(document.createTextNode(' '));\r\n      });\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f16dd45 elementor-widget elementor-widget-html\" data-id=\"f16dd45\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-ondemand-section\" class=\"tgus-ondemand-section\">\r\n  <style>\r\n    #tgus-ondemand-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-blue-400: #3b82f6;\r\n      --tgus-blue-500: #2563eb;\r\n      --tgus-blue-600: #1d4ed8;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-violet-d: #6d5ef0;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-cyan-300: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4.5rem, 9vw, 7.5rem) clamp(1.25rem, 5vw, 4rem);\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-ondemand-section *, #tgus-ondemand-section *::before, #tgus-ondemand-section *::after { box-sizing: border-box; }\r\n\r\n    \/* section backdrop \u2014 same treatment as the other sections: faint\r\n       dot-grid + one centered ambient glow, never anchored to a corner\r\n       so its falloff never meets this section's own clipped edge *\/\r\n    #tgus-ondemand-grid {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      background-image: radial-gradient(circle, rgba(255,255,255,.05) 1px, transparent 1.4px);\r\n      background-size: 26px 26px;\r\n      -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 50%, black, transparent 75%);\r\n      mask-image: radial-gradient(ellipse 70% 60% at 50% 50%, black, transparent 75%);\r\n      pointer-events: none;\r\n    }\r\n    #tgus-ondemand-ambient {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      pointer-events: none;\r\n      overflow: hidden;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    #tgus-ondemand-ambient span {\r\n      width: 50rem; height: 38rem;\r\n      border-radius: 50%;\r\n      filter: blur(120px);\r\n      opacity: .16;\r\n      background: radial-gradient(ellipse, var(--tgus-blue) 0%, transparent 70%);\r\n    }\r\n\r\n    #tgus-ondemand-inner {\r\n      position: relative; z-index: 2;\r\n      display: flex;\r\n      justify-content: center;\r\n    }\r\n\r\n    \/* ================================================================\r\n       CARD \u2014 adapted from a Uiverse-style glass card (radial color\r\n       blobs behind, rotating gradient sweep on the border via\r\n       ::before). Recolored from the original violet\/pink\/magenta trio\r\n       to this project's blue \u2192 violet \u2192 cyan palette. Widened well\r\n       past the source's 19rem (that size fit a small feature list;\r\n       this card carries a heading + two paragraphs + a CTA, so it\r\n       needs real reading width) and switched from a fixed width to a\r\n       fluid max-width so it doesn't overflow on narrow viewports.\r\n       ================================================================ *\/\r\n    \/* ================================================================\r\n       CARD BORDER \u2014 the source component used a fixed-position,\r\n       z-index:200 pseudo-element banking on a very specific stacking\r\n       context (parent at z-index:-10) to stay visually behind the\r\n       card content. That's fragile outside its original DOM \u2014 here it\r\n       was rendering on TOP of the text instead of behind it. Replaced\r\n       with a standard, predictable technique: the border lives on a\r\n       wrapper one layer behind the card, sized 1px larger on each\r\n       side, with the gradient as its background \u2014 no z-index tricks,\r\n       no fixed positioning, so it can't ever escape in front of the\r\n       card's own content.\r\n       ================================================================ *\/\r\n    #tgus-ondemand-card-wrap {\r\n      position: relative;\r\n      width: 100%;\r\n      max-width: 1080px;\r\n      border-radius: 1.5rem;\r\n      padding: 1px;\r\n      background: linear-gradient(100deg, rgba(94,200,242,.5) 0%, rgba(109,94,240,.5) 45%, rgba(255,255,255,.08) 75%);\r\n      opacity: 0; transform: translateY(20px);\r\n      animation: tgus-ondemand-in 1s var(--tgus-ease) .1s forwards;\r\n    }\r\n    #tgus-ondemand-card {\r\n      position: relative;\r\n      display: grid;\r\n      grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr);\r\n      align-items: center;\r\n      gap: clamp(1.5rem, 4vw, 3rem);\r\n      width: 100%;\r\n      padding: clamp(2rem, 4vw, 3rem);\r\n      background-color: hsla(228, 45%, 10%, 1);\r\n      background-image:\r\n        radial-gradient(ellipse 90% 70% at 15% 15%, rgba(59,130,246,.35) 0%, transparent 65%),\r\n        radial-gradient(ellipse 100% 70% at 100% 100%, rgba(37,99,235,.4) 0%, transparent 65%);\r\n      border-radius: calc(1.5rem - 1px);\r\n      box-shadow: 0px -16px 24px 0px rgba(255,255,255,.06) inset;\r\n      overflow: hidden;\r\n    }\r\n    #tgus-ondemand-copy {\r\n      display: flex;\r\n      flex-direction: column;\r\n      align-items: flex-start;\r\n      gap: 1.5rem;\r\n      text-align: left;\r\n      min-width: 0;\r\n    }\r\n\r\n    #tgus-ondemand-eyebrow {\r\n      display: inline-flex; align-items: center; gap: .5em;\r\n      font-size: .8rem !important;\r\n      font-weight: 600 !important;\r\n      letter-spacing: .08em;\r\n      text-transform: uppercase;\r\n      color: var(--tgus-cyan) !important;\r\n    }\r\n    #tgus-ondemand-eyebrow::before,\r\n    #tgus-ondemand-eyebrow::after {\r\n      content: '';\r\n      width: 1.4rem; height: 1px;\r\n      background: var(--tgus-cyan);\r\n      display: inline-block;\r\n    }\r\n    #tgus-ondemand-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.7rem, 3.2vw, 2.35rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.2 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n    #tgus-ondemand-card p {\r\n      font-size: 1rem !important;\r\n      line-height: 1.6 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: 0 !important;\r\n      max-width: 48ch;\r\n    }\r\n    #tgus-ondemand-card p a {\r\n      color: var(--tgus-cyan) !important;\r\n      text-decoration: underline !important;\r\n      text-decoration-color: rgba(94,200,242,.4) !important;\r\n    }\r\n    #tgus-ondemand-line {\r\n      width: 100%;\r\n      height: 1px;\r\n      background-color: var(--tgus-border);\r\n      border: none;\r\n      margin: 0 !important;\r\n    }\r\n\r\n    @keyframes tgus-ondemand-in { to { opacity: 1; transform: translateY(0); } }\r\n\r\n    \/* ================================================================\r\n       CTA BUTTON \u2014 standard project button (Uiverse dexter-st glass\r\n       button, recolored to brand blue). Same component as the hero\r\n       and dedicated-team CTA.\r\n       ================================================================ *\/\r\n    #tgus-ondemand-cta-wrap {\r\n      position: relative; z-index: 1;\r\n      display: inline-block;\r\n    }\r\n    #tgus-ondemand-cta {\r\n      --border-radius: 24px;\r\n      --padding: 4px;\r\n      --transition: .4s;\r\n\r\n      position: relative;\r\n      isolation: isolate;\r\n      user-select: none;\r\n      display: flex !important;\r\n      align-items: center;\r\n      justify-content: center;\r\n      gap: .6rem;\r\n      padding: .9rem .9rem .9rem 1.5rem !important;\r\n      font-family: var(--tgus-font-body) !important;\r\n      font-size: .95rem !important;\r\n      font-weight: 600 !important;\r\n      text-decoration: none !important;\r\n      color: #fff !important;\r\n\r\n      background-image: linear-gradient(180deg, var(--tgus-blue-400) 0%, var(--tgus-blue-600) 100%);\r\n      box-shadow:\r\n        inset 0px 1px 1px rgba(255,255,255,.45),\r\n        inset 0px 2px 3px rgba(255,255,255,.3),\r\n        inset 0px 4px 6px rgba(255,255,255,.15),\r\n        inset 0px 10px 14px rgba(255,255,255,.08),\r\n        0px -1px 1px rgba(0,0,0,.05),\r\n        0px -3px 4px rgba(0,0,0,.1),\r\n        0px -8px 14px rgba(0,0,0,.18),\r\n        0px 8px 20px -6px rgba(10,40,110,.55);\r\n\r\n      border: solid 1px rgba(255,255,255,.28) !important;\r\n      border-radius: var(--border-radius);\r\n      cursor: pointer;\r\n\r\n      transition: box-shadow var(--transition), border var(--transition), background-image var(--transition), transform var(--transition);\r\n    }\r\n    #tgus-ondemand-cta::before {\r\n      content: \"\";\r\n      position: absolute;\r\n      top: calc(0px - var(--padding));\r\n      left: calc(0px - var(--padding));\r\n      width: calc(100% + var(--padding) * 2);\r\n      height: calc(100% + var(--padding) * 2);\r\n      border-radius: calc(var(--border-radius) + var(--padding));\r\n      pointer-events: none;\r\n      background-image: linear-gradient(0deg, #0004, #000a);\r\n      z-index: -1;\r\n      transition: box-shadow var(--transition), filter var(--transition);\r\n      box-shadow:\r\n        1px 1px 1px rgba(255,255,255,.12),\r\n        2px 2px 2px rgba(255,255,255,.06),\r\n        -1px -1px 1px rgba(0,0,0,.13),\r\n        -2px -2px 2px rgba(0,0,0,.06);\r\n    }\r\n    #tgus-ondemand-cta::after {\r\n      content: \"\";\r\n      position: absolute;\r\n      top: 0; left: 0;\r\n      width: 100%; height: 100%;\r\n      border-radius: inherit;\r\n      pointer-events: none;\r\n      background-image: linear-gradient(0deg, #fff, var(--tgus-cyan-300), var(--tgus-blue-500) 50%, transparent 85%);\r\n      opacity: 0;\r\n      transition: opacity var(--transition), filter var(--transition);\r\n    }\r\n    #tgus-ondemand-cta:hover {\r\n      border: solid 1px rgba(94,200,242,.5) !important;\r\n      background-image: linear-gradient(180deg, var(--tgus-cyan-300) 0%, var(--tgus-blue-500) 100%);\r\n      transform: translateY(-1px);\r\n    }\r\n    #tgus-ondemand-cta:hover::after {\r\n      opacity: 1;\r\n      -webkit-mask-image: linear-gradient(0deg, #fff, transparent);\r\n      mask-image: linear-gradient(0deg, #fff, transparent);\r\n    }\r\n    #tgus-ondemand-cta:active {\r\n      border: solid 1px rgba(94,200,242,.7) !important;\r\n      background-image: linear-gradient(180deg, var(--tgus-blue-500) 0%, var(--tgus-blue-600) 100%);\r\n      transform: translateY(0) scale(.99);\r\n    }\r\n    #tgus-ondemand-cta:active::after {\r\n      opacity: 1;\r\n      filter: brightness(200%);\r\n      -webkit-mask-image: linear-gradient(0deg, #fff, transparent);\r\n      mask-image: linear-gradient(0deg, #fff, transparent);\r\n    }\r\n    #tgus-ondemand-cta:focus-visible {\r\n      outline: 2px solid var(--tgus-cyan-300);\r\n      outline-offset: 3px;\r\n    }\r\n    #tgus-ondemand-cta-letters {\r\n      position: relative; z-index: 2;\r\n      display: inline-flex;\r\n      color: rgba(255,255,255,.92);\r\n      text-shadow: 0 1px 1px rgba(0,0,0,.25);\r\n    }\r\n    #tgus-ondemand-cta-svg {\r\n      display: flex;\r\n      height: 18px; width: 18px;\r\n      fill: none;\r\n      stroke: #fff;\r\n      stroke-width: 2;\r\n      filter: drop-shadow(0 1px 1px rgba(0,0,0,.25));\r\n      transition: transform var(--transition);\r\n    }\r\n    #tgus-ondemand-cta:hover #tgus-ondemand-cta-svg {\r\n      transform: translateX(2px);\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-ondemand-card-wrap { animation-duration: .01ms !important; opacity: 1 !important; transform: none !important; }\r\n    }\r\n\r\n    \/* ================================================================\r\n       GLOBE \u2014 swapped from the earlier hand-rolled Canvas 2D land-mask\r\n       approximation to a real d3-geo implementation (ported from a\r\n       working reference component): d3.geoOrthographic() projection +\r\n       an actual Natural Earth land GeoJSON fetched at runtime, with a\r\n       proper point-in-polygon test generating the dot-matrix. This\r\n       gives geographically accurate continent silhouettes instead of\r\n       hand-tuned ellipses. d3 loads from a CDN script tag (no npm\/\r\n       build step), so it's compatible with the Elementor widget\r\n       constraint the rest of this project follows.\r\n       ================================================================ *\/\r\n    #tgus-ondemand-globe-wrap {\r\n      position: relative;\r\n      flex: 1;\r\n      width: 100%;\r\n      max-width: 380px;\r\n      margin: 0 auto;\r\n      min-height: 260px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      user-select: none;\r\n    }\r\n    #tgus-ondemand-globe-canvas {\r\n      width: min(100%, 380px);\r\n      aspect-ratio: 1 \/ 1;\r\n      cursor: grab;\r\n      opacity: 0;\r\n      transition: opacity 1s ease;\r\n      touch-action: none;\r\n      display: block;\r\n    }\r\n    #tgus-ondemand-globe-canvas:active { cursor: grabbing; }\r\n\r\n    #tgus-ondemand-globe-tooltip {\r\n      position: absolute;\r\n      z-index: 5;\r\n      pointer-events: none;\r\n      display: flex;\r\n      align-items: center;\r\n      gap: .45rem;\r\n      background: hsla(228,40%,15%,.98);\r\n      border: 1px solid var(--tgus-border);\r\n      padding: .4rem .7rem;\r\n      border-radius: .5rem;\r\n      font-size: .78rem;\r\n      font-weight: 600;\r\n      color: var(--tgus-text);\r\n      white-space: nowrap;\r\n      transform: translate(-50%, -130%);\r\n      opacity: 0;\r\n      transition: opacity .15s ease;\r\n      box-shadow: 0 10px 24px -8px rgba(0,0,0,.6);\r\n    }\r\n    #tgus-ondemand-globe-tooltip.tgus-is-visible { opacity: 1; }\r\n\r\n    @media (max-width: 720px) {\r\n      #tgus-ondemand-card { grid-template-columns: 1fr; }\r\n      #tgus-ondemand-copy { align-items: center; text-align: center; }\r\n      #tgus-ondemand-globe-wrap { max-width: 220px; min-height: 220px; order: -1; }\r\n    }\r\n\r\n    @media (max-width: 480px) {\r\n      #tgus-ondemand-card { padding: 1.75rem; gap: 1.25rem; }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-ondemand-grid\" aria-hidden=\"true\"><\/div>\r\n  <div id=\"tgus-ondemand-ambient\" aria-hidden=\"true\"><span><\/span><\/div>\r\n\r\n  <div id=\"tgus-ondemand-inner\">\r\n    <div id=\"tgus-ondemand-card-wrap\">\r\n      <div id=\"tgus-ondemand-card\">\r\n        <div id=\"tgus-ondemand-copy\">\r\n          <p id=\"tgus-ondemand-eyebrow\">On-demand platforms<\/p>\r\n          <h2 id=\"tgus-ondemand-title\">Want to build your own ride-hailing or delivery app?<\/h2>\r\n          <p>Build your on-demand platform with an application designed entirely around your business.<\/p>\r\n          <hr id=\"tgus-ondemand-line\">\r\n          <p>A dedicated <a href=\"[LINK_SOFTWARE_COMPANY_PAGE]\">software development<\/a> team works as a virtual extension of your company. Working outside your office cuts certain costs, and having more people on the build speeds up delivery.<\/p>\r\n\r\n          <span id=\"tgus-ondemand-cta-wrap\">\r\n            <a id=\"tgus-ondemand-cta\" href=\"https:\/\/api.whatsapp.com\/send?phone=573103597580\" target=\"_blank\" rel=\"noopener\">\r\n              <span id=\"tgus-ondemand-cta-letters\">I want to build my app<\/span>\r\n              <svg id=\"tgus-ondemand-cta-svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\r\n            <\/a>\r\n          <\/span>\r\n        <\/div>\r\n\r\n        <div id=\"tgus-ondemand-globe-wrap\">\r\n          <div id=\"tgus-ondemand-globe-tooltip\" role=\"tooltip\"><\/div>\r\n          <canvas id=\"tgus-ondemand-globe-canvas\" role=\"img\" aria-label=\"Globe showing cities where ToGrow has worked with clients: Bogot\u00e1, Medell\u00edn, Cali, Miami, Los Angeles, Houston and New York\"><\/canvas>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/d3\/7.9.0\/d3.min.js\" defer><\/script>\r\n  <script defer>\r\n  (function(){\r\n    var canvas = document.getElementById('tgus-ondemand-globe-canvas');\r\n    var tooltip = document.getElementById('tgus-ondemand-globe-tooltip');\r\n    if(!canvas) return;\r\n\r\n    var reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n\r\n    \/* Cities where ToGrow has worked with clients \u2014 same set used\r\n       across the \"Where we work\" section, at city-level precision\r\n       instead of country-level. *\/\r\n    var CITIES = [\r\n      { name: 'Bogot\u00e1', flag: '\ud83c\udde8\ud83c\uddf4', lon: -74.08, lat: 4.71 },\r\n      { name: 'Medell\u00edn', flag: '\ud83c\udde8\ud83c\uddf4', lon: -75.57, lat: 6.25 },\r\n      { name: 'Cali', flag: '\ud83c\udde8\ud83c\uddf4', lon: -76.52, lat: 3.45 },\r\n      { name: 'Miami', flag: '\ud83c\uddfa\ud83c\uddf8', lon: -80.19, lat: 25.76 },\r\n      { name: 'Los Angeles', flag: '\ud83c\uddfa\ud83c\uddf8', lon: -118.24, lat: 34.05 },\r\n      { name: 'Houston', flag: '\ud83c\uddfa\ud83c\uddf8', lon: -95.37, lat: 29.76 },\r\n      { name: 'New York', flag: '\ud83c\uddfa\ud83c\uddf8', lon: -74.01, lat: 40.71 }\r\n    ];\r\n\r\n    function startWhenReady(){\r\n      if(!window.d3){ setTimeout(startWhenReady, 50); return; }\r\n      boot();\r\n    }\r\n    startWhenReady();\r\n\r\n    function boot(){\r\n      var ctx = canvas.getContext('2d');\r\n      var wrap = canvas.parentElement;\r\n\r\n      var W = 0, H = 0, dpr = Math.min(window.devicePixelRatio || 1, 2);\r\n      var radius = 0;\r\n      var projection = d3.geoOrthographic().clipAngle(90);\r\n      var path = d3.geoPath(projection, ctx);\r\n      var graticule = d3.geoGraticule();\r\n\r\n      \/* Rotation starts centered on the Americas (longitude ~90\u00b0W),\r\n         since every marked city sits there \u2014 opening on lon=0\r\n         (Africa\/Europe) would show a globe face with none of the\r\n         markers visible. *\/\r\n      var rotation = [90, -14];\r\n      var autoRotate = !reduced;\r\n      var speed = 0.045;\r\n      var land = null;\r\n      var dots = [];\r\n      var markerScreenPos = [];\r\n\r\n      function sizeCanvas(){\r\n        W = wrap.clientWidth || 300;\r\n        H = W;\r\n        radius = (Math.min(W, H) \/ 2) * 0.94;\r\n        canvas.width = W * dpr;\r\n        canvas.height = H * dpr;\r\n        canvas.style.width = W + 'px';\r\n        canvas.style.height = H + 'px';\r\n        ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\r\n        projection.scale(radius).translate([W \/ 2, H \/ 2]);\r\n      }\r\n      sizeCanvas();\r\n      if('ResizeObserver' in window){\r\n        new ResizeObserver(function(){ sizeCanvas(); draw(); }).observe(wrap);\r\n      } else {\r\n        window.addEventListener('resize', function(){ sizeCanvas(); draw(); });\r\n      }\r\n\r\n      \/\/ ---- dot-matrix from real land geometry ----\r\n      function pointInRing(pt, ring){\r\n        var x = pt[0], y = pt[1], inside = false;\r\n        for(var i=0, j=ring.length-1; i<ring.length; j=i++){\r\n          var xi=ring[i][0], yi=ring[i][1], xj=ring[j][0], yj=ring[j][1];\r\n          var intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) \/ (yj - yi) + xi);\r\n          if(intersect) inside = !inside;\r\n        }\r\n        return inside;\r\n      }\r\n      function pointInFeature(pt, feature){\r\n        var g = feature.geometry;\r\n        if(g.type === 'Polygon'){\r\n          if(!pointInRing(pt, g.coordinates[0])) return false;\r\n          for(var i=1;i<g.coordinates.length;i++){ if(pointInRing(pt, g.coordinates[i])) return false; }\r\n          return true;\r\n        }\r\n        if(g.type === 'MultiPolygon'){\r\n          for(var p=0;p<g.coordinates.length;p++){\r\n            var poly = g.coordinates[p];\r\n            if(pointInRing(pt, poly[0])){\r\n              var inHole = false;\r\n              for(var k=1;k<poly.length;k++){ if(pointInRing(pt, poly[k])){ inHole = true; break; } }\r\n              if(!inHole) return true;\r\n            }\r\n          }\r\n          return false;\r\n        }\r\n        return false;\r\n      }\r\n      function dotsForFeature(feature, spacingDeg){\r\n        var out = [];\r\n        var bounds = d3.geoBounds(feature);\r\n        var minLng = bounds[0][0], minLat = bounds[0][1], maxLng = bounds[1][0], maxLat = bounds[1][1];\r\n        for(var lng = minLng; lng <= maxLng; lng += spacingDeg){\r\n          for(var lat = minLat; lat <= maxLat; lat += spacingDeg){\r\n            if(pointInFeature([lng, lat], feature)) out.push([lng, lat]);\r\n          }\r\n        }\r\n        return out;\r\n      }\r\n\r\n      fetch('https:\/\/raw.githubusercontent.com\/martynafford\/natural-earth-geojson\/refs\/heads\/master\/110m\/physical\/ne_110m_land.json')\r\n        .then(function(r){ return r.json(); })\r\n        .then(function(json){\r\n          land = json;\r\n          var spacing = 1.3;\r\n          land.features.forEach(function(f){\r\n            dotsForFeature(f, spacing).forEach(function(d){ dots.push(d); });\r\n          });\r\n          draw();\r\n        })\r\n        .catch(function(){ draw(); });\r\n\r\n      function draw(){\r\n        ctx.clearRect(0, 0, W, H);\r\n\r\n        \/\/ base sphere \u2014 dark, matching the card's own blue gradient\r\n        \/\/ behind it rather than competing with a bright fill\r\n        ctx.beginPath();\r\n        ctx.arc(W\/2, H\/2, radius, 0, 2*Math.PI);\r\n        ctx.fillStyle = '#070911';\r\n        ctx.fill();\r\n        ctx.lineWidth = 1.1;\r\n        ctx.strokeStyle = 'rgba(255,255,255,.16)';\r\n        ctx.stroke();\r\n\r\n        \/\/ graticule\r\n        ctx.beginPath(); path(graticule());\r\n        ctx.strokeStyle = 'rgba(255,255,255,.08)'; ctx.lineWidth = .6; ctx.stroke();\r\n\r\n        \/\/ land dot-matrix\r\n        ctx.fillStyle = 'rgba(94,200,242,.55)';\r\n        for(var i=0;i<dots.length;i++){\r\n          var pr = projection(dots[i]);\r\n          if(!pr) continue;\r\n          ctx.beginPath();\r\n          ctx.arc(pr[0], pr[1], 1.15, 0, 2*Math.PI);\r\n          ctx.fill();\r\n        }\r\n\r\n        \/\/ city markers (larger + glow) + record screen position for tooltip\r\n        markerScreenPos = [];\r\n        for(var c=0;c<CITIES.length;c++){\r\n          var city = CITIES[c];\r\n          var vis = isFrontFacing([city.lon, city.lat]);\r\n          var pm = projection([city.lon, city.lat]);\r\n          if(!pm || !vis) continue;\r\n          ctx.save();\r\n          ctx.shadowColor = '#5ec8f2'; ctx.shadowBlur = 8;\r\n          ctx.fillStyle = '#5ec8f2';\r\n          ctx.beginPath(); ctx.arc(pm[0], pm[1], 3.1, 0, 2*Math.PI); ctx.fill();\r\n          ctx.restore();\r\n          markerScreenPos.push({ x: pm[0], y: pm[1], city: city });\r\n        }\r\n      }\r\n\r\n      function isFrontFacing(coord){\r\n        var r = projection.rotate();\r\n        var angle = d3.geoDistance(coord, [-r[0], -r[1]]);\r\n        return angle < Math.PI\/2;\r\n      }\r\n\r\n      \/\/ ---- animation \/ auto-rotation ----\r\n      var timer = d3.timer(function(){\r\n        if(autoRotate){\r\n          rotation[0] += speed;\r\n          projection.rotate(rotation);\r\n          draw();\r\n        }\r\n      });\r\n\r\n      if('IntersectionObserver' in window){\r\n        var io = new IntersectionObserver(function(es){\r\n          var visible = es[0].isIntersecting;\r\n          if(!dragging) autoRotate = visible && !reduced;\r\n        }, { threshold:.01 });\r\n        io.observe(canvas);\r\n      }\r\n\r\n      \/\/ ---- drag to rotate ----\r\n      var dragging = false, lastX = 0, lastY = 0;\r\n      function pointerDown(x, y){\r\n        dragging = true; autoRotate = false; lastX = x; lastY = y;\r\n        canvas.style.cursor = 'grabbing';\r\n      }\r\n      function pointerMove(x, y){\r\n        if(!dragging) return;\r\n        var dx = x - lastX, dy = y - lastY;\r\n        rotation[0] += dx * 0.35;\r\n        rotation[1] = Math.max(-85, Math.min(85, rotation[1] - dy * 0.35));\r\n        lastX = x; lastY = y;\r\n        projection.rotate(rotation);\r\n        draw();\r\n      }\r\n      function pointerUp(){\r\n        dragging = false;\r\n        canvas.style.cursor = 'grab';\r\n        setTimeout(function(){ if(!reduced) autoRotate = true; }, 400);\r\n      }\r\n\r\n      canvas.addEventListener('pointerdown', function(e){ pointerDown(e.clientX, e.clientY); });\r\n      window.addEventListener('pointermove', function(e){ pointerMove(e.clientX, e.clientY); });\r\n      window.addEventListener('pointerup', pointerUp);\r\n\r\n      \/\/ ---- tooltip on hover ----\r\n      if(tooltip){\r\n        canvas.addEventListener('mousemove', function(e){\r\n          if(dragging){ tooltip.classList.remove('tgus-is-visible'); return; }\r\n          var rect = canvas.getBoundingClientRect();\r\n          var mx = e.clientX - rect.left, my = e.clientY - rect.top;\r\n          var hit = null, best = 10;\r\n          for(var i=0;i<markerScreenPos.length;i++){\r\n            var m = markerScreenPos[i];\r\n            var d = Math.hypot(mx - m.x, my - m.y);\r\n            if(d < best){ best = d; hit = m; }\r\n          }\r\n          if(hit){\r\n            tooltip.innerHTML = '<span>'+hit.city.flag+'<\/span><span>'+hit.city.name+'<\/span>';\r\n            tooltip.style.left = hit.x + 'px';\r\n            tooltip.style.top = hit.y + 'px';\r\n            tooltip.classList.add('tgus-is-visible');\r\n            canvas.style.cursor = 'pointer';\r\n          } else {\r\n            tooltip.classList.remove('tgus-is-visible');\r\n            canvas.style.cursor = dragging ? 'grabbing' : 'grab';\r\n          }\r\n        });\r\n        canvas.addEventListener('mouseleave', function(){\r\n          tooltip.classList.remove('tgus-is-visible');\r\n        });\r\n      }\r\n\r\n      setTimeout(function(){ canvas.style.opacity = 1; }, 60);\r\n\r\n      window.addEventListener('beforeunload', function(){\r\n        timer.stop();\r\n      });\r\n    }\r\n  })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-05d269c elementor-widget elementor-widget-html\" data-id=\"05d269c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-stats-section\" class=\"tgus-stats-section\">\r\n  <style>\r\n    #tgus-stats-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-blue-light: #60a5fa;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4rem, 8vw, 6.5rem) clamp(1.25rem, 5vw, 4rem);\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-stats-section *, #tgus-stats-section *::before, #tgus-stats-section *::after { box-sizing: border-box; }\r\n\r\n    \/* section backdrop \u2014 a centered ambient glow rather than one\r\n       anchored to the top edge. Anchoring it at top:-10rem meant its\r\n       blur falloff got clipped by the section's own overflow:hidden,\r\n       showing up as a hard-edged patch instead of soft atmosphere \u2014\r\n       same fix applied to the other sections' ambient glows. *\/\r\n    #tgus-stats-ambient {\r\n      position: absolute; inset: 0;\r\n      z-index: 0;\r\n      pointer-events: none;\r\n      overflow: hidden;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    #tgus-stats-ambient span {\r\n      width: 62rem; height: 38rem;\r\n      border-radius: 50%;\r\n      background: radial-gradient(ellipse, rgba(59,130,246,.32) 0%, rgba(37,99,235,.14) 45%, transparent 75%);\r\n      filter: blur(30px);\r\n    }\r\n\r\n    #tgus-stats-header {\r\n      position: relative; z-index: 2;\r\n      max-width: 720px;\r\n      margin: 0 auto clamp(2.5rem, 5vw, 3.5rem);\r\n      text-align: center;\r\n    }\r\n\r\n    #tgus-stats-eyebrow {\r\n      display: inline-flex; align-items: center; gap: .5em;\r\n      font-size: .8rem !important;\r\n      font-weight: 600 !important;\r\n      letter-spacing: .08em;\r\n      text-transform: uppercase;\r\n      color: var(--tgus-cyan) !important;\r\n      margin: 0 0 .6rem !important;\r\n    }\r\n    #tgus-stats-eyebrow::before,\r\n    #tgus-stats-eyebrow::after {\r\n      content: '';\r\n      width: 1.4rem; height: 1px;\r\n      background: var(--tgus-cyan);\r\n      display: inline-block;\r\n    }\r\n    #tgus-stats-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.6rem, 2.8vw, 2.1rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.25 !important;\r\n      letter-spacing: -0.01em !important;\r\n      margin: 0 !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n\r\n    \/* ================================================================\r\n       CARDS \u2014 large-format layout (big gradient number, label, short\r\n       description, faint inset grid texture, corner icon), matching\r\n       the reference's card structure. Recolored from the reference's\r\n       white\u2192grey number fade to this project's blue palette, and kept\r\n       the section's own copy (Track record \/ 15+ years \/ etc.)\r\n       instead of the reference's placeholder stats.\r\n       ================================================================ *\/\r\n    #tgus-stats-grid {\r\n      position: relative; z-index: 2;\r\n      display: grid;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      gap: 1.25rem;\r\n      max-width: 1160px;\r\n      margin: 0 auto;\r\n    }\r\n\r\n    .tgus-stat {\r\n      position: relative;\r\n      background: #0a0a10;\r\n      border: 1px solid var(--tgus-border);\r\n      border-radius: 1.25rem;\r\n      padding: clamp(2.25rem, 4vw, 3rem) 1.5rem;\r\n      min-height: clamp(15rem, 22vw, 19rem);\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      gap: .35rem;\r\n      overflow: hidden;\r\n    }\r\n    \/* faint grid texture inside each card, masked to fade toward the\r\n       edges; blue-tinted radial glow layered underneath it so the\r\n       card reads as blue-lit rather than flat charcoal *\/\r\n    .tgus-stat::before {\r\n      content: '';\r\n      position: absolute;\r\n      inset: 0;\r\n      z-index: 0;\r\n      background:\r\n        radial-gradient(ellipse 90% 70% at 50% 0%, rgba(59,130,246,.16) 0%, transparent 70%),\r\n        linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px),\r\n        linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px);\r\n      background-size: 100% 100%, 32px 32px, 32px 32px;\r\n      -webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 30%, black, transparent 75%);\r\n      mask-image: radial-gradient(ellipse 80% 70% at 50% 30%, black, transparent 75%);\r\n      pointer-events: none;\r\n    }\r\n\r\n    \/* number carries a real vertical fade \u2014 bright, almost-white at\r\n       the top, dropping to a darker, more saturated blue toward the\r\n       bottom \u2014 plus a soft top-edge glow (via text-shadow) so it\r\n       reads as a lit, embossed numeral rather than a flat gradient\r\n       fill, matching the reference's specular highlight. *\/\r\n    .tgus-stat strong {\r\n      position: relative; z-index: 1;\r\n      display: block;\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(2.75rem, 6vw, 4rem) !important;\r\n      font-weight: 800 !important;\r\n      background: linear-gradient(180deg, #ffffff 0%, #d8e9ff 22%, var(--tgus-blue-light) 55%, var(--tgus-blue) 100%);\r\n      -webkit-background-clip: text;\r\n      background-clip: text;\r\n      color: transparent !important;\r\n      filter: drop-shadow(0 0 18px rgba(96,165,250,.35));\r\n      line-height: 1;\r\n      letter-spacing: -0.02em;\r\n    }\r\n    .tgus-stat > span {\r\n      position: relative; z-index: 1;\r\n      display: block;\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: 1.15rem !important;\r\n      font-weight: 700 !important;\r\n      color: var(--tgus-text) !important;\r\n    }\r\n    .tgus-stat p {\r\n      position: relative; z-index: 1;\r\n      font-size: .88rem !important;\r\n      line-height: 1.55 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: .4rem 0 0 !important;\r\n      max-width: 26ch;\r\n    }\r\n\r\n    \/* icon sits in normal flow below the description, not pinned to\r\n       the card's bottom edge \u2014 a pinned icon overlapped the last line\r\n       of longer descriptions since paragraph height varies per card *\/\r\n    .tgus-stat-icon {\r\n      position: relative; z-index: 1;\r\n      margin-top: 1rem;\r\n      width: 2.5rem;\r\n      height: 2.5rem;\r\n      border-radius: 50%;\r\n      background: rgba(59,130,246,.1);\r\n      border: 1px solid rgba(94,200,242,.25);\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    .tgus-stat-icon svg {\r\n      width: 1.1rem; height: 1.1rem;\r\n      color: var(--tgus-cyan);\r\n    }\r\n\r\n    @media (max-width: 860px) {\r\n      #tgus-stats-grid { grid-template-columns: 1fr; gap: 1rem; }\r\n      .tgus-stat { min-height: auto; padding: 2rem 1.5rem 4rem; }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-stats-ambient\" aria-hidden=\"true\"><span><\/span><\/div>\r\n\r\n  <div id=\"tgus-stats-header\">\r\n    <p id=\"tgus-stats-eyebrow\">Track record<\/p>\r\n    <h2 id=\"tgus-stats-title\">Over 15 years driving custom software and mobile app development<\/h2>\r\n  <\/div>\r\n\r\n  <div id=\"tgus-stats-grid\">\r\n    <div class=\"tgus-stat\">\r\n      <strong><span class=\"tgus-count\" data-count-to=\"15\">0<\/span>+<\/strong>\r\n      <span>Years in business<\/span>\r\n      <p>Years of experience delivering custom software across industries.<\/p>\r\n      <span class=\"tgus-stat-icon\" aria-hidden=\"true\">\r\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 3\"\/><\/svg>\r\n      <\/span>\r\n    <\/div>\r\n    <div class=\"tgus-stat\">\r\n      <strong><span class=\"tgus-count\" data-count-to=\"150\">0<\/span>+<\/strong>\r\n      <span>Software projects delivered<\/span>\r\n      <p>Software projects successfully delivered across multiple industries.<\/p>\r\n      <span class=\"tgus-stat-icon\" aria-hidden=\"true\">\r\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"14\" rx=\"2\"\/><path d=\"M3 9h18\"\/><\/svg>\r\n      <\/span>\r\n    <\/div>\r\n    <div class=\"tgus-stat\">\r\n      <strong><span class=\"tgus-count\" data-count-to=\"30\">0<\/span>+<\/strong>\r\n      <span>Industries served<\/span>\r\n      <p>Different industries trusting us to build their software.<\/p>\r\n      <span class=\"tgus-stat-icon\" aria-hidden=\"true\">\r\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"\/><circle cx=\"12\" cy=\"7\" r=\"4\"\/><\/svg>\r\n      <\/span>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      var root = document.getElementById('tgus-stats-section');\r\n      if(!root) return;\r\n      var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n      var counters = root.querySelectorAll('.tgus-count');\r\n      if(!counters.length) return;\r\n\r\n      function animateCount(el){\r\n        var target = parseInt(el.getAttribute('data-count-to'), 10) || 0;\r\n        if(reduceMotion){ el.textContent = target; return; }\r\n        var duration = 1400;\r\n        var start = performance.now();\r\n        \/\/ ease-out cubic \u2014 fast start, gentle settle, matching the\r\n        \/\/ rest of the project's animation easing philosophy\r\n        function ease(t){ return 1 - Math.pow(1 - t, 3); }\r\n        function tick(now){\r\n          var t = Math.min((now - start) \/ duration, 1);\r\n          var value = Math.round(ease(t) * target);\r\n          el.textContent = value;\r\n          if(t < 1) requestAnimationFrame(tick);\r\n          else el.textContent = target;\r\n        }\r\n        requestAnimationFrame(tick);\r\n      }\r\n\r\n      if('IntersectionObserver' in window){\r\n        var fired = new WeakSet();\r\n        var io = new IntersectionObserver(function(entries){\r\n          entries.forEach(function(entry){\r\n            if(entry.isIntersecting && !fired.has(entry.target)){\r\n              fired.add(entry.target);\r\n              animateCount(entry.target);\r\n              io.unobserve(entry.target);\r\n            }\r\n          });\r\n        }, { threshold: .4 });\r\n        counters.forEach(function(el){ io.observe(el); });\r\n      } else {\r\n        counters.forEach(animateCount);\r\n      }\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1898901 elementor-widget elementor-widget-html\" data-id=\"1898901\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-projects-section\" class=\"tgus-projects-section\">\r\n  <style>\r\n    #tgus-projects-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4.5rem, 9vw, 7.5rem) 0;\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n\r\n    \/* section backdrop \u2014 faint dot-grid + one centered ambient glow,\r\n       same treatment as the rest of the page. Centered rather than\r\n       anchored to a corner\/edge so its blur falloff never meets this\r\n       section's own clipped boundary. *\/\r\n    #tgus-projects-grid {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      background-image: radial-gradient(circle, rgba(255,255,255,.05) 1px, transparent 1.4px);\r\n      background-size: 26px 26px;\r\n      -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 50%, black, transparent 75%);\r\n      mask-image: radial-gradient(ellipse 70% 60% at 50% 50%, black, transparent 75%);\r\n      pointer-events: none;\r\n    }\r\n    #tgus-projects-ambient {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      pointer-events: none;\r\n      overflow: hidden;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    #tgus-projects-ambient span {\r\n      width: 56rem; height: 34rem;\r\n      border-radius: 50%;\r\n      background: radial-gradient(ellipse, rgba(59,130,246,.2) 0%, rgba(139,124,246,.1) 45%, transparent 75%);\r\n      filter: blur(30px);\r\n      animation: tgus-projects-drift 25s cubic-bezier(.16,1,.3,1) infinite alternate;\r\n    }\r\n    @keyframes tgus-projects-drift {\r\n      from { transform: translate(0, 0); }\r\n      to { transform: translate(-2rem, 2rem); }\r\n    }\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-projects-ambient span { animation: none !important; }\r\n    }\r\n    #tgus-projects-section *, #tgus-projects-section *::before, #tgus-projects-section *::after { box-sizing: border-box; }\r\n\r\n    #tgus-projects-header {\r\n      position: relative; z-index: 2;\r\n      max-width: 680px;\r\n      margin: 0 auto clamp(2.75rem, 6vw, 4rem);\r\n      padding: 0 clamp(1.25rem, 5vw, 4rem);\r\n      text-align: center;\r\n    }\r\n    #tgus-projects-eyebrow {\r\n      display: inline-flex; align-items: center; gap: .5em;\r\n      font-size: .8rem !important;\r\n      font-weight: 600 !important;\r\n      letter-spacing: .08em;\r\n      text-transform: uppercase;\r\n      color: var(--tgus-cyan) !important;\r\n      margin: 0 0 .9rem !important;\r\n    }\r\n    #tgus-projects-eyebrow::before,\r\n    #tgus-projects-eyebrow::after {\r\n      content: '';\r\n      width: 1.4rem; height: 1px;\r\n      background: var(--tgus-cyan);\r\n      display: inline-block;\r\n    }\r\n    #tgus-projects-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.9rem, 3.6vw, 2.75rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.2 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n\r\n    \/* ================================================================\r\n       CAROUSEL \u2014 center card large and raised, side cards smaller and\r\n       dimmed, matching the reference. Built as a horizontally\r\n       scrollable flex track with CSS scroll-snap doing the heavy\r\n       lifting (native, no animation library) \u2014 JS only tracks which\r\n       card is centered (to toggle the \"active\" size\/opacity) and\r\n       drives the prev\/next buttons + dots.\r\n       ================================================================ *\/\r\n    #tgus-projects-viewport {\r\n      position: relative;\r\n      z-index: 2;\r\n    }\r\n    #tgus-projects-track {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: clamp(1rem, 2.5vw, 1.75rem);\r\n      overflow-x: auto;\r\n      scroll-snap-type: x mandatory;\r\n      scroll-behavior: smooth;\r\n      padding: 1rem clamp(1.25rem, 40vw, 42vw); \/* generous side padding so first\/last cards can reach center *\/\r\n      -ms-overflow-style: none;\r\n      scrollbar-width: none;\r\n    }\r\n    #tgus-projects-track::-webkit-scrollbar { display: none; }\r\n\r\n    .tgus-project-card {\r\n      position: relative;\r\n      flex: none;\r\n      width: clamp(220px, 26vw, 340px);\r\n      aspect-ratio: 4 \/ 5;\r\n      border-radius: 1.25rem;\r\n      overflow: hidden;\r\n      scroll-snap-align: center;\r\n      cursor: pointer;\r\n      background: #111119;\r\n      border: 1px solid var(--tgus-border);\r\n      opacity: .45;\r\n      transform: scale(.88);\r\n      transition: opacity .5s var(--tgus-ease), transform .5s var(--tgus-ease), box-shadow .5s var(--tgus-ease), border-color .5s var(--tgus-ease);\r\n      box-shadow: 0 20px 40px -20px rgba(0,0,0,.4);\r\n      outline: none;\r\n      -webkit-tap-highlight-color: transparent;\r\n      -webkit-appearance: none;\r\n      appearance: none;\r\n      padding: 0;\r\n    }\r\n    .tgus-project-card.tgus-is-active {\r\n      opacity: 1;\r\n      transform: scale(1);\r\n      box-shadow: 0 40px 80px -25px rgba(0,0,0,.7);\r\n      border-color: rgba(94,200,242,.3);\r\n      z-index: 2;\r\n    }\r\n    .tgus-project-card img {\r\n      position: absolute;\r\n      inset: 0;\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: cover;\r\n      display: block;\r\n      pointer-events: none;\r\n    }\r\n    .tgus-project-card:focus-visible {\r\n      outline: 2px solid var(--tgus-cyan);\r\n      outline-offset: 3px;\r\n    }\r\n\r\n    \/* prev\/next controls *\/\r\n    .tgus-projects-arrow {\r\n      position: absolute;\r\n      top: 50%;\r\n      transform: translateY(-50%);\r\n      z-index: 3;\r\n      width: 3rem; height: 3rem;\r\n      border-radius: 50%;\r\n      background: rgba(255,255,255,.08);\r\n      border: 1px solid var(--tgus-border);\r\n      color: var(--tgus-text);\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      cursor: pointer;\r\n      transition: background .3s var(--tgus-ease), transform .3s var(--tgus-ease), border-color .3s var(--tgus-ease);\r\n      -webkit-tap-highlight-color: transparent;\r\n      outline: none;\r\n      -webkit-appearance: none;\r\n      appearance: none;\r\n    }\r\n    .tgus-projects-arrow:hover {\r\n      background: rgba(94,200,242,.14);\r\n      border-color: rgba(94,200,242,.35);\r\n    }\r\n    .tgus-projects-arrow:active {\r\n      background: rgba(94,200,242,.22);\r\n      transform: translateY(-50%) scale(.94);\r\n    }\r\n    .tgus-projects-arrow:focus-visible {\r\n      outline: 2px solid var(--tgus-cyan);\r\n      outline-offset: 3px;\r\n    }\r\n    .tgus-projects-arrow svg { width: 1.2rem; height: 1.2rem; }\r\n    #tgus-projects-prev { left: clamp(.5rem, 3vw, 2rem); }\r\n    #tgus-projects-next { right: clamp(.5rem, 3vw, 2rem); }\r\n\r\n    @media (max-width: 640px) {\r\n      .tgus-projects-arrow { display: none; }\r\n    }\r\n\r\n    \/* dots *\/\r\n    #tgus-projects-dots {\r\n      display: flex;\r\n      justify-content: center;\r\n      align-items: center;\r\n      gap: .5rem;\r\n      margin-top: clamp(1.5rem, 3vw, 2rem);\r\n      position: relative; z-index: 2;\r\n    }\r\n    .tgus-projects-dot {\r\n      width: .5rem; height: .5rem;\r\n      border-radius: 50%;\r\n      background: var(--tgus-border);\r\n      border: none;\r\n      padding: 0;\r\n      cursor: pointer;\r\n      transition: background .3s var(--tgus-ease), transform .3s var(--tgus-ease);\r\n      outline: none;\r\n      -webkit-tap-highlight-color: transparent;\r\n    }\r\n    .tgus-projects-dot:focus-visible {\r\n      outline: 2px solid var(--tgus-cyan);\r\n      outline-offset: 2px;\r\n    }\r\n    .tgus-projects-dot.tgus-is-active {\r\n      background: var(--tgus-cyan);\r\n      transform: scale(1.3);\r\n    }\r\n\r\n    \/* ================================================================\r\n       LIGHTBOX \u2014 click any card to view its image full-size. Simple\r\n       overlay, no external library: fixed-position dim backdrop,\r\n       image capped to viewport, closes on backdrop click, close\r\n       button, or Escape.\r\n       ================================================================ *\/\r\n    #tgus-projects-lightbox {\r\n      position: fixed;\r\n      inset: 0;\r\n      z-index: 999;\r\n      background: rgba(3,3,6,.92);\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      padding: clamp(1.5rem, 5vw, 4rem);\r\n      opacity: 0;\r\n      pointer-events: none;\r\n      transition: opacity .3s var(--tgus-ease);\r\n    }\r\n    #tgus-projects-lightbox.tgus-is-open {\r\n      opacity: 1;\r\n      pointer-events: auto;\r\n    }\r\n    #tgus-projects-lightbox img {\r\n      max-width: 100%;\r\n      max-height: 100%;\r\n      border-radius: 1rem;\r\n      box-shadow: 0 40px 90px -20px rgba(0,0,0,.8);\r\n      opacity: 0;\r\n      transform: scale(.96);\r\n      transition: opacity .35s var(--tgus-ease), transform .35s var(--tgus-ease);\r\n    }\r\n    #tgus-projects-lightbox.tgus-is-open img {\r\n      opacity: 1;\r\n      transform: scale(1);\r\n    }\r\n    #tgus-projects-lightbox-close {\r\n      position: absolute;\r\n      top: clamp(1rem, 3vw, 2rem);\r\n      right: clamp(1rem, 3vw, 2rem);\r\n      width: 2.75rem; height: 2.75rem;\r\n      border-radius: 50%;\r\n      background: rgba(255,255,255,.08);\r\n      border: 1px solid var(--tgus-border);\r\n      color: var(--tgus-text);\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      cursor: pointer;\r\n    }\r\n    #tgus-projects-lightbox-close svg { width: 1.1rem; height: 1.1rem; }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      .tgus-project-card, .tgus-projects-arrow, .tgus-projects-dot,\r\n      #tgus-projects-lightbox, #tgus-projects-lightbox img {\r\n        transition: none !important;\r\n      }\r\n      #tgus-projects-track { scroll-behavior: auto; }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-projects-grid\" aria-hidden=\"true\"><\/div>\r\n  <div id=\"tgus-projects-ambient\" aria-hidden=\"true\"><span><\/span><\/div>\r\n\r\n  <div id=\"tgus-projects-header\">\r\n    <p id=\"tgus-projects-eyebrow\">Our work<\/p>\r\n    <h2 id=\"tgus-projects-title\">Our Projects<\/h2>\r\n  <\/div>\r\n\r\n  <div id=\"tgus-projects-viewport\">\r\n    <button class=\"tgus-projects-arrow\" id=\"tgus-projects-prev\" type=\"button\" aria-label=\"Previous project\">\r\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 18l-6-6 6-6\"\/><\/svg>\r\n    <\/button>\r\n\r\n    <div id=\"tgus-projects-track\">\r\n      <button class=\"tgus-project-card\" type=\"button\" data-index=\"0\" aria-label=\"Open project image 1\">\r\n        <img src=\"https:\/\/togrowagencia.com\/en\/wp-content\/uploads\/2026\/08\/MC7-scaled-1.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n      <\/button>\r\n      <button class=\"tgus-project-card\" type=\"button\" data-index=\"1\" aria-label=\"Open project image 2\">\r\n        <img src=\"https:\/\/togrowagencia.com\/en\/wp-content\/uploads\/2026\/08\/MC5-scaled-1.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n      <\/button>\r\n      <button class=\"tgus-project-card\" type=\"button\" data-index=\"2\" aria-label=\"Open project image 3\">\r\n        <img src=\"https:\/\/togrowagencia.com\/en\/wp-content\/uploads\/2026\/08\/edicionesmc2-scaled-1.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n      <\/button>\r\n      <button class=\"tgus-project-card\" type=\"button\" data-index=\"3\" aria-label=\"Open project image 4\">\r\n        <img src=\"https:\/\/togrowagencia.com\/en\/wp-content\/uploads\/2026\/08\/MC4-2-scaled-1.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n      <\/button>\r\n      <button class=\"tgus-project-card\" type=\"button\" data-index=\"4\" aria-label=\"Open project image 5\">\r\n        <img src=\"https:\/\/togrowagencia.com\/en\/wp-content\/uploads\/2026\/08\/MC2-2-scaled-1.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n      <\/button>\r\n      <button class=\"tgus-project-card\" type=\"button\" data-index=\"5\" aria-label=\"Open project image 6\">\r\n        <img src=\"https:\/\/togrowagencia.com\/en\/wp-content\/uploads\/2026\/08\/azumc5-scaled-1.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n      <\/button>\r\n      <button class=\"tgus-project-card\" type=\"button\" data-index=\"6\" aria-label=\"Open project image 7\">\r\n        <img src=\"https:\/\/togrowagencia.com\/en\/wp-content\/uploads\/2026\/08\/azumc4-scaled-1.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <button class=\"tgus-projects-arrow\" id=\"tgus-projects-next\" type=\"button\" aria-label=\"Next project\">\r\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 18l6-6-6-6\"\/><\/svg>\r\n    <\/button>\r\n  <\/div>\r\n\r\n  <div id=\"tgus-projects-dots\" role=\"tablist\" aria-label=\"Select project\"><\/div>\r\n\r\n  <div id=\"tgus-projects-lightbox\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Project image preview\">\r\n    <button id=\"tgus-projects-lightbox-close\" type=\"button\" aria-label=\"Close preview\">\r\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 6 6 18M6 6l12 12\"\/><\/svg>\r\n    <\/button>\r\n    <img decoding=\"async\" id=\"tgus-projects-lightbox-img\" src=\"\" alt=\"\">\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      var root = document.getElementById('tgus-projects-section');\r\n      if(!root) return;\r\n\r\n      var track = root.querySelector('#tgus-projects-track');\r\n      var cards = Array.prototype.slice.call(root.querySelectorAll('.tgus-project-card'));\r\n      var dotsHost = root.querySelector('#tgus-projects-dots');\r\n      var prevBtn = root.querySelector('#tgus-projects-prev');\r\n      var nextBtn = root.querySelector('#tgus-projects-next');\r\n      var lightbox = root.querySelector('#tgus-projects-lightbox');\r\n      var lightboxImg = root.querySelector('#tgus-projects-lightbox-img');\r\n      var lightboxClose = root.querySelector('#tgus-projects-lightbox-close');\r\n      if(!track || !cards.length) return;\r\n\r\n      var activeIndex = 0;\r\n\r\n      \/\/ build dots\r\n      var dots = cards.map(function(_, i){\r\n        var dot = document.createElement('button');\r\n        dot.type = 'button';\r\n        dot.className = 'tgus-projects-dot';\r\n        dot.setAttribute('role', 'tab');\r\n        dot.setAttribute('aria-label', 'Go to project ' + (i + 1));\r\n        dot.addEventListener('click', function(){ scrollToIndex(i); });\r\n        dotsHost.appendChild(dot);\r\n        return dot;\r\n      });\r\n\r\n      function setActive(index){\r\n        activeIndex = index;\r\n        cards.forEach(function(card, i){\r\n          card.classList.toggle('tgus-is-active', i === index);\r\n        });\r\n        dots.forEach(function(dot, i){\r\n          dot.classList.toggle('tgus-is-active', i === index);\r\n        });\r\n      }\r\n\r\n      function scrollToIndex(index){\r\n        index = Math.max(0, Math.min(cards.length - 1, index));\r\n        cards[index].scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' });\r\n      }\r\n\r\n      \/\/ detect which card is nearest the track's horizontal center on\r\n      \/\/ scroll (native scroll-snap does the physical snapping; this\r\n      \/\/ just figures out which card that landed us on, to drive the\r\n      \/\/ active-state styling + dots, since scroll-snap alone gives us\r\n      \/\/ no callback for \"which item is centered now\")\r\n      var scrollRaf = null;\r\n      function updateActiveFromScroll(){\r\n        scrollRaf = null;\r\n        var trackRect = track.getBoundingClientRect();\r\n        var center = trackRect.left + trackRect.width \/ 2;\r\n        var closest = 0, closestDist = Infinity;\r\n        cards.forEach(function(card, i){\r\n          var r = card.getBoundingClientRect();\r\n          var cardCenter = r.left + r.width \/ 2;\r\n          var dist = Math.abs(cardCenter - center);\r\n          if(dist < closestDist){ closestDist = dist; closest = i; }\r\n        });\r\n        if(closest !== activeIndex) setActive(closest);\r\n      }\r\n      track.addEventListener('scroll', function(){\r\n        if(scrollRaf) return;\r\n        scrollRaf = requestAnimationFrame(updateActiveFromScroll);\r\n      }, { passive: true });\r\n\r\n      prevBtn.addEventListener('click', function(){ scrollToIndex(activeIndex - 1); });\r\n      nextBtn.addEventListener('click', function(){ scrollToIndex(activeIndex + 1); });\r\n\r\n      \/\/ click a card: if it's already the active\/centered one, open\r\n      \/\/ the lightbox; if it's a side card, just bring it to center\r\n      \/\/ first (matches the reference's \"click centers, click again\r\n      \/\/ opens\" feel without a confusing double-purpose click target)\r\n      cards.forEach(function(card, i){\r\n        card.addEventListener('click', function(){\r\n          if(i === activeIndex){\r\n            openLightbox(card.querySelector('img').src);\r\n          } else {\r\n            scrollToIndex(i);\r\n          }\r\n        });\r\n      });\r\n\r\n      function openLightbox(src){\r\n        lightboxImg.src = src;\r\n        lightbox.classList.add('tgus-is-open');\r\n        document.body.style.overflow = 'hidden';\r\n      }\r\n      function closeLightbox(){\r\n        lightbox.classList.remove('tgus-is-open');\r\n        document.body.style.overflow = '';\r\n      }\r\n      lightboxClose.addEventListener('click', closeLightbox);\r\n      lightbox.addEventListener('click', function(e){\r\n        if(e.target === lightbox) closeLightbox();\r\n      });\r\n      window.addEventListener('keydown', function(e){\r\n        if(e.key === 'Escape') closeLightbox();\r\n      });\r\n\r\n      \/\/ initial state: center the middle card on load\r\n      setActive(Math.floor(cards.length \/ 2));\r\n      requestAnimationFrame(function(){\r\n        scrollToIndex(Math.floor(cards.length \/ 2));\r\n      });\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fecd0c6 elementor-widget elementor-widget-html\" data-id=\"fecd0c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-process-section\" class=\"tgus-process-section\">\r\n  <style>\r\n    #tgus-process-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-text-dimmer: #5a5c6c;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4.5rem, 9vw, 7.5rem) clamp(1.25rem, 5vw, 4rem);\r\n      overflow-x: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-process-section *, #tgus-process-section *::before, #tgus-process-section *::after { box-sizing: border-box; }\r\n\r\n    \/* faint ambient glow, centered, consistent with the rest of the\r\n       page's section backdrops *\/\r\n    #tgus-process-ambient {\r\n      position: absolute; inset: 0;\r\n      z-index: 0;\r\n      pointer-events: none;\r\n      overflow: hidden;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    #tgus-process-ambient span {\r\n      width: 56rem; height: 34rem;\r\n      border-radius: 50%;\r\n      background: radial-gradient(ellipse, rgba(59,130,246,.18) 0%, transparent 70%);\r\n      filter: blur(30px);\r\n    }\r\n\r\n    #tgus-process-header {\r\n      position: relative; z-index: 2;\r\n      max-width: 680px;\r\n      margin: 0 auto clamp(3rem, 6vw, 4.5rem);\r\n      text-align: center;\r\n    }\r\n    #tgus-process-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.9rem, 3.6vw, 2.75rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.2 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 0 .9rem !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n    #tgus-process-header p {\r\n      font-size: 1.02rem !important;\r\n      line-height: 1.6 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: 0 !important;\r\n      max-width: 56ch;\r\n      margin-inline: auto;\r\n    }\r\n\r\n    \/* ================================================================\r\n       TWO-COLUMN SCROLL STORY \u2014 left column: numbered steps against a\r\n       vertical progress line that fills as you scroll past each step\r\n       (tracked via IntersectionObserver, height set with a CSS\r\n       variable per step rather than one continuous animated line, so\r\n       each segment fills independently as its own step becomes\r\n       active \u2014 closer to the reference's per-step fill behavior than\r\n       a single scrubbed line would be). Right column: one sticky\r\n       photo frame that crossfades between images as the active step\r\n       changes, so scrolling the text panel visibly drives the image.\r\n       ================================================================ *\/\r\n    #tgus-process-layout {\r\n      position: relative;\r\n      z-index: 2;\r\n      max-width: 1200px;\r\n      margin: 0 auto;\r\n      display: grid;\r\n      grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);\r\n      gap: clamp(2rem, 5vw, 4rem);\r\n      align-items: start;\r\n    }\r\n\r\n    #tgus-process-steps {\r\n      list-style: none;\r\n      margin: 0 !important;\r\n      padding: 0 !important;\r\n    }\r\n    .tgus-step {\r\n      position: relative;\r\n      display: grid;\r\n      grid-template-columns: 1.75rem 2px minmax(0, 1fr);\r\n      column-gap: 1.1rem;\r\n      padding-bottom: clamp(2.5rem, 5vw, 3.5rem);\r\n    }\r\n    .tgus-step:last-child { padding-bottom: 0; }\r\n\r\n    .tgus-step-num {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: .85rem !important;\r\n      font-weight: 700 !important;\r\n      color: var(--tgus-text-dimmer) !important;\r\n      line-height: 1.4;\r\n      transition: color .4s var(--tgus-ease);\r\n    }\r\n    .tgus-step.tgus-active .tgus-step-num { color: var(--tgus-cyan) !important; }\r\n\r\n    \/* the vertical line lives in its own track column so the fill\r\n       bar can be a simple height transition instead of a scroll-\r\n       scrubbed transform, which is more reliable across browsers and\r\n       avoids jank on the sticky-image side *\/\r\n    .tgus-step-track {\r\n      position: relative;\r\n      width: 2px;\r\n      height: 100%;\r\n      margin-top: .4rem;\r\n      background: var(--tgus-border);\r\n      border-radius: 2px;\r\n      justify-self: center;\r\n    }\r\n    .tgus-step-track::before {\r\n      content: '';\r\n      position: absolute;\r\n      top: 0; left: 0;\r\n      width: 100%;\r\n      height: 0%;\r\n      background: linear-gradient(180deg, var(--tgus-cyan), var(--tgus-blue));\r\n      border-radius: 2px;\r\n      transition: height .6s var(--tgus-ease);\r\n    }\r\n    .tgus-step.tgus-active .tgus-step-track::before,\r\n    .tgus-step.tgus-passed .tgus-step-track::before {\r\n      height: 100%;\r\n    }\r\n\r\n    .tgus-step-body h3 {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.3rem, 2vw, 1.6rem) !important;\r\n      font-weight: 700 !important;\r\n      color: var(--tgus-text-dimmer) !important;\r\n      margin: 0 0 .3rem !important;\r\n      transition: color .4s var(--tgus-ease);\r\n    }\r\n    .tgus-step.tgus-active .tgus-step-body h3 { color: var(--tgus-text) !important; }\r\n\r\n    .tgus-step-body .tgus-step-kicker {\r\n      display: block;\r\n      font-size: .85rem !important;\r\n      font-weight: 600 !important;\r\n      color: var(--tgus-text-dimmer) !important;\r\n      margin: 0 0 .75rem !important;\r\n      transition: color .4s var(--tgus-ease);\r\n    }\r\n    .tgus-step.tgus-active .tgus-step-kicker { color: var(--tgus-cyan) !important; }\r\n\r\n    .tgus-step-body p {\r\n      font-size: .95rem !important;\r\n      line-height: 1.6 !important;\r\n      color: var(--tgus-text-dimmer) !important;\r\n      margin: 0 !important;\r\n      max-width: 52ch;\r\n      opacity: .6;\r\n      transition: color .4s var(--tgus-ease), opacity .4s var(--tgus-ease);\r\n    }\r\n    .tgus-step.tgus-active .tgus-step-body p {\r\n      color: var(--tgus-text-dim) !important;\r\n      opacity: 1;\r\n    }\r\n\r\n    \/* ================================================================\r\n       STICKY CAVEAT (Elementor): position:sticky requires every\r\n       ancestor up to the scrolling viewport to have overflow:visible\r\n       on the sticky's axis. This widget's own markup is clean (only\r\n       overflow-x:hidden on the root, nothing else in the ancestor\r\n       chain), but Elementor's own column\/section wrappers OUTSIDE\r\n       this widget sometimes set overflow:hidden or a transform on the\r\n       column that contains the widget \u2014 either one silently breaks\r\n       sticky with no console error. If this still doesn't stick once\r\n       pasted into the page, check the Elementor column\/section\r\n       wrapping this widget: Advanced tab \u2192 remove any \"Overflow:\r\n       Hidden\" setting and any CSS transform on that column\/section.\r\n       ================================================================ *\/\r\n    #tgus-process-visual {\r\n      position: sticky;\r\n      top: clamp(1rem, 4vw, 2.5rem);\r\n      align-self: start;\r\n      border-radius: 1.25rem;\r\n      overflow: hidden;\r\n      border: 1px solid var(--tgus-border);\r\n      box-shadow: 0 40px 90px -30px rgba(0,0,0,.6);\r\n      aspect-ratio: 4 \/ 3;\r\n      background: var(--tgus-bg-2);\r\n      will-change: transform;\r\n    }\r\n    #tgus-process-visual img {\r\n      position: absolute;\r\n      inset: 0;\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: cover;\r\n      opacity: 0;\r\n      transition: opacity .6s var(--tgus-ease);\r\n    }\r\n    #tgus-process-visual img.tgus-visual-active { opacity: 1; }\r\n    #tgus-process-visual-inner {\r\n      position: relative;\r\n      width: 100%;\r\n      height: 100%;\r\n    }\r\n\r\n    #tgus-process-note {\r\n      position: relative; z-index: 2;\r\n      margin: clamp(2.5rem, 5vw, 3.5rem) auto 0 !important;\r\n      padding-top: clamp(1.5rem, 3vw, 2rem);\r\n      border-top: 1px solid var(--tgus-border);\r\n      font-size: .95rem !important;\r\n      line-height: 1.6 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      max-width: 1200px;\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      .tgus-step-track::before, .tgus-step-num, .tgus-step-body h3,\r\n      .tgus-step-kicker, .tgus-step-body p, #tgus-process-visual img {\r\n        transition: none !important;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 860px) {\r\n      #tgus-process-layout { grid-template-columns: 1fr; }\r\n      #tgus-process-visual {\r\n        position: relative;\r\n        top: 0;\r\n        order: -1;\r\n        margin-bottom: 2rem;\r\n        aspect-ratio: 16 \/ 10;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-process-ambient\" aria-hidden=\"true\"><span><\/span><\/div>\r\n\r\n  <div id=\"tgus-process-header\">\r\n    <h2 id=\"tgus-process-title\">An agile, transparent build process<\/h2>\r\n    <p>This agile approach shortens timelines, with delivery typically running 3 to 12 months depending on complexity.<\/p>\r\n  <\/div>\r\n\r\n  <div id=\"tgus-process-layout\">\r\n    <ol id=\"tgus-process-steps\">\r\n      <li class=\"tgus-step\" data-step=\"0\">\r\n        <span class=\"tgus-step-num\">01<\/span>\r\n        <div class=\"tgus-step-track\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"tgus-step-body\">\r\n          <h3>Initial consultation<\/h3>\r\n          <span class=\"tgus-step-kicker\">Goals &amp; requirements<\/span>\r\n          <p>We define your goals and requirements.<\/p>\r\n        <\/div>\r\n      <\/li>\r\n      <li class=\"tgus-step\" data-step=\"1\">\r\n        <span class=\"tgus-step-num\">02<\/span>\r\n        <div class=\"tgus-step-track\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"tgus-step-body\">\r\n          <h3>Design<\/h3>\r\n          <span class=\"tgus-step-kicker\">Prototype &amp; UX<\/span>\r\n          <p>We build a prototype shaped around your vision.<\/p>\r\n        <\/div>\r\n      <\/li>\r\n      <li class=\"tgus-step\" data-step=\"2\">\r\n        <span class=\"tgus-step-num\">03<\/span>\r\n        <div class=\"tgus-step-track\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"tgus-step-body\">\r\n          <h3>Development<\/h3>\r\n          <span class=\"tgus-step-kicker\">Build &amp; engineering<\/span>\r\n          <p>We build the solution with modern technologies.<\/p>\r\n        <\/div>\r\n      <\/li>\r\n      <li class=\"tgus-step\" data-step=\"3\">\r\n        <span class=\"tgus-step-num\">04<\/span>\r\n        <div class=\"tgus-step-track\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"tgus-step-body\">\r\n          <h3>Testing<\/h3>\r\n          <span class=\"tgus-step-kicker\">Quality &amp; performance<\/span>\r\n          <p>We verify quality and performance before launch.<\/p>\r\n        <\/div>\r\n      <\/li>\r\n      <li class=\"tgus-step\" data-step=\"4\">\r\n        <span class=\"tgus-step-num\">05<\/span>\r\n        <div class=\"tgus-step-track\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"tgus-step-body\">\r\n          <h3>Ongoing support<\/h3>\r\n          <span class=\"tgus-step-kicker\">Maintenance<\/span>\r\n          <p>We provide maintenance and keep the system up to date.<\/p>\r\n        <\/div>\r\n      <\/li>\r\n    <\/ol>\r\n\r\n    <div id=\"tgus-process-visual\" aria-hidden=\"true\">\r\n      <div id=\"tgus-process-visual-inner\">\r\n        <img data-step-image=\"0\" class=\"tgus-visual-active\" src=\"https:\/\/images.unsplash.com\/photo-1552664730-d307ca884978?auto=format&fit=crop&w=1000&q=75\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n        <img data-step-image=\"1\" src=\"https:\/\/images.unsplash.com\/photo-1559028012-481c04fa702d?auto=format&fit=crop&w=1000&q=75\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n        <img data-step-image=\"2\" src=\"https:\/\/images.unsplash.com\/photo-1517694712202-14dd9538aa97?auto=format&fit=crop&w=1000&q=75\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n        <img data-step-image=\"3\" src=\"https:\/\/images.unsplash.com\/photo-1551288049-bebda4e38f71?auto=format&fit=crop&w=1000&q=75\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n        <img data-step-image=\"4\" src=\"https:\/\/images.unsplash.com\/photo-1522071820081-009f0129c71c?auto=format&fit=crop&w=1000&q=75\" alt=\"\" loading=\"lazy\" decoding=\"async\">\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <p id=\"tgus-process-note\">For example, we built an ERP for a manufacturing company that cut operating costs by 20%.<\/p>\r\n\r\n  <script>\r\n    (function(){\r\n      var root = document.getElementById('tgus-process-section');\r\n      if(!root) return;\r\n      var steps = Array.prototype.slice.call(root.querySelectorAll('.tgus-step'));\r\n      var images = Array.prototype.slice.call(root.querySelectorAll('[data-step-image]'));\r\n      if(!steps.length) return;\r\n\r\n      function setActive(index){\r\n        steps.forEach(function(step, i){\r\n          step.classList.remove('tgus-active', 'tgus-passed');\r\n          if(i < index) step.classList.add('tgus-passed');\r\n          if(i === index) step.classList.add('tgus-active');\r\n        });\r\n        images.forEach(function(img){\r\n          var isMatch = img.getAttribute('data-step-image') === String(index);\r\n          img.classList.toggle('tgus-visual-active', isMatch);\r\n        });\r\n      }\r\n\r\n      setActive(0);\r\n\r\n      if('IntersectionObserver' in window){\r\n        var io = new IntersectionObserver(function(entries){\r\n          entries.forEach(function(entry){\r\n            if(entry.isIntersecting){\r\n              var idx = parseInt(entry.target.getAttribute('data-step'), 10);\r\n              setActive(idx);\r\n            }\r\n          });\r\n        }, {\r\n          \/\/ fires when a step's card crosses the vertical middle of\r\n          \/\/ the viewport, so the change lands roughly when the user\r\n          \/\/ is reading that step rather than at its very top\/bottom edge\r\n          rootMargin: '-45% 0px -45% 0px',\r\n          threshold: 0\r\n        });\r\n        steps.forEach(function(step){ io.observe(step); });\r\n      }\r\n\r\n      \/* ============ manual sticky (scroll-driven) ============\r\n         CSS position:sticky is the primary mechanism (cheap, native,\r\n         no JS needed when it works). But sticky silently breaks if\r\n         ANY ancestor between this element and the scrolling viewport\r\n         has overflow other than visible, or a transform \u2014 a common\r\n         situation once this widget is pasted inside Elementor's own\r\n         column\/section wrappers, which sit outside this markup and\r\n         outside our control, with no console warning when it\r\n         happens. Rather than trying to detect that failure (there's\r\n         no reliable cross-browser way to ask \"did your sticky\r\n         actually anchor\"), this computes the same pinned position on\r\n         every scroll tick and applies it directly as a redundant\r\n         mechanism \u2014 when native sticky also works, both produce the\r\n         same numeric position, so there's no conflict.\r\n         ================================================================ *\/\r\n      var visual = root.querySelector('#tgus-process-visual');\r\n      var layout = root.querySelector('#tgus-process-layout');\r\n\r\n      if(visual && layout){\r\n        var rafPending = false;\r\n        var pinnedLeft = null;\r\n\r\n        function isDesktopLayout(){\r\n          return window.matchMedia('(min-width: 861px)').matches;\r\n        }\r\n        function pinnedTopPx(){\r\n          var cs = window.getComputedStyle(visual);\r\n          var v = parseFloat(cs.top);\r\n          return isNaN(v) ? 0 : v;\r\n        }\r\n        function clearManualPin(){\r\n          visual.style.position = '';\r\n          visual.style.top = '';\r\n          visual.style.left = '';\r\n          visual.style.width = '';\r\n          pinnedLeft = null;\r\n        }\r\n\r\n        function updatePin(){\r\n          rafPending = false;\r\n          if(!isDesktopLayout()){ clearManualPin(); return; }\r\n\r\n          var layoutRect = layout.getBoundingClientRect();\r\n          var pinTop = pinnedTopPx();\r\n\r\n          \/\/ column top hasn't reached the pin line yet \u2014 normal flow.\r\n          \/\/ Read the natural (unpinned) position here, before any\r\n          \/\/ absolute positioning is applied, so pinnedLeft is captured\r\n          \/\/ from the grid's real layout rather than from a previous\r\n          \/\/ frame's already-absolute position.\r\n          if(layoutRect.top >= pinTop){\r\n            clearManualPin();\r\n            return;\r\n          }\r\n\r\n          if(pinnedLeft === null){\r\n            clearManualPin(); \/\/ ensure natural position before measuring\r\n            var naturalRect = visual.getBoundingClientRect();\r\n            var naturalLayoutRect = layout.getBoundingClientRect();\r\n            pinnedLeft = naturalRect.left - naturalLayoutRect.left;\r\n          }\r\n\r\n          var visualHeight = visual.offsetHeight || visual.getBoundingClientRect().height;\r\n          var visualWidth = visual.offsetWidth || visual.getBoundingClientRect().width;\r\n          var maxTopInLayout = Math.max(layout.offsetHeight - visualHeight, 0);\r\n          var desiredTopInLayout = Math.min(pinTop - layoutRect.top, maxTopInLayout);\r\n\r\n          visual.style.position = 'absolute';\r\n          visual.style.top = desiredTopInLayout + 'px';\r\n          visual.style.left = pinnedLeft + 'px';\r\n          visual.style.width = visualWidth + 'px';\r\n        }\r\n\r\n        function requestUpdate(){\r\n          if(rafPending) return;\r\n          rafPending = true;\r\n          requestAnimationFrame(updatePin);\r\n        }\r\n\r\n        \/\/ the column needs position:relative so the manual\r\n        \/\/ absolute-positioned pin anchors against it, not against\r\n        \/\/ the nearest other positioned ancestor up the DOM\r\n        layout.style.position = 'relative';\r\n\r\n        window.addEventListener('scroll', requestUpdate, { passive: true });\r\n        window.addEventListener('resize', function(){\r\n          pinnedLeft = null;\r\n          requestUpdate();\r\n        });\r\n        requestUpdate();\r\n      }\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93d20cf elementor-widget elementor-widget-html\" data-id=\"93d20cf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-markets-section\" class=\"tgus-markets-section\">\r\n  <style>\r\n    #tgus-markets-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4.5rem, 9vw, 7.5rem) clamp(1.25rem, 5vw, 4rem);\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-markets-section *, #tgus-markets-section *::before, #tgus-markets-section *::after { box-sizing: border-box; }\r\n\r\n    #tgus-markets-inner {\r\n      position: relative; z-index: 2;\r\n      max-width: 1040px;\r\n      margin: 0 auto;\r\n    }\r\n\r\n    #tgus-markets-header { max-width: 700px; margin: 0 0 clamp(2.5rem, 5vw, 3.5rem); }\r\n\r\n    #tgus-markets-eyebrow {\r\n      display: inline-flex; align-items: center; gap: .5em;\r\n      font-size: .8rem !important;\r\n      font-weight: 600 !important;\r\n      letter-spacing: .08em;\r\n      text-transform: uppercase;\r\n      color: var(--tgus-cyan) !important;\r\n      margin: 0 0 .9rem !important;\r\n    }\r\n    #tgus-markets-eyebrow::before {\r\n      content: '';\r\n      width: 1.4rem; height: 1px;\r\n      background: var(--tgus-cyan);\r\n      display: inline-block;\r\n    }\r\n    #tgus-markets-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.9rem, 3.4vw, 2.6rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.2 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 0 1rem !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n    #tgus-markets-header p {\r\n      font-size: 1.02rem !important;\r\n      line-height: 1.65 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: 0 !important;\r\n      max-width: 64ch;\r\n    }\r\n\r\n    #tgus-markets-grid {\r\n      display: grid;\r\n      grid-template-columns: repeat(2, minmax(0, 1fr));\r\n      gap: 1px;\r\n      background: var(--tgus-border);\r\n      border: 1px solid var(--tgus-border);\r\n      border-radius: 1.1rem;\r\n      overflow: hidden;\r\n    }\r\n    .tgus-market-card {\r\n      background: var(--tgus-bg-2);\r\n      padding: clamp(1.75rem, 3vw, 2.25rem);\r\n      min-width: 0;\r\n    }\r\n    .tgus-market-card h3 {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: 1.2rem !important;\r\n      font-weight: 700 !important;\r\n      color: var(--tgus-text) !important;\r\n      margin: 0 0 .6rem !important;\r\n    }\r\n    .tgus-market-card p {\r\n      font-size: .95rem !important;\r\n      line-height: 1.6 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: 0 !important;\r\n    }\r\n    .tgus-market-cities {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: .4rem;\r\n      margin-top: .9rem;\r\n    }\r\n    .tgus-market-cities span {\r\n      font-size: .74rem !important;\r\n      font-weight: 600 !important;\r\n      color: var(--tgus-cyan) !important;\r\n      background: rgba(94,200,242,.08);\r\n      border: 1px solid rgba(94,200,242,.18);\r\n      border-radius: 999px;\r\n      padding: .3rem .7rem;\r\n    }\r\n\r\n    @media (max-width: 700px) {\r\n      #tgus-markets-grid { grid-template-columns: 1fr; }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-markets-inner\">\r\n    <div id=\"tgus-markets-header\">\r\n      <p id=\"tgus-markets-eyebrow\">Where we work<\/p>\r\n      <h2 id=\"tgus-markets-title\">Built for growing businesses across Latin America and the US<\/h2>\r\n      <p>More than 15 years and 150+ projects delivered, using modern technologies like Python, React, Node.js and AWS combined with agile methods, for small and mid-sized companies across a wide range of industries.<\/p>\r\n    <\/div>\r\n\r\n    <div id=\"tgus-markets-grid\">\r\n      <div class=\"tgus-market-card\">\r\n        <h3>Latin America<\/h3>\r\n        <p>From inventory management to logistics digitization, we build custom CRMs and mobile apps for local businesses, including e-commerce platforms that help companies compete in a fast-moving digital market.<\/p>\r\n        <div class=\"tgus-market-cities\">\r\n          <span>Bogot\u00e1<\/span>\r\n          <span>Medell\u00edn<\/span>\r\n          <span>Cali<\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"tgus-market-card\">\r\n        <h3>United States<\/h3>\r\n        <p>We build custom applications for retail, logistics and service industries, including on-demand delivery platforms with AI-optimized routing, designed for measurable, scalable return on investment.<\/p>\r\n        <div class=\"tgus-market-cities\">\r\n          <span>Miami<\/span>\r\n          <span>Los Angeles<\/span>\r\n          <span>Houston<\/span>\r\n          <span>New York<\/span>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80fff1d elementor-widget elementor-widget-html\" data-id=\"80fff1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-faq-section\" class=\"tgus-faq-section\">\r\n  <style>\r\n    #tgus-faq-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4.5rem, 9vw, 7.5rem) clamp(1.25rem, 5vw, 4rem);\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-faq-section *, #tgus-faq-section *::before, #tgus-faq-section *::after { box-sizing: border-box; }\r\n\r\n    #tgus-faq-inner {\r\n      position: relative; z-index: 2;\r\n      max-width: 820px;\r\n      margin: 0 auto;\r\n      min-width: 0;\r\n    }\r\n\r\n    #tgus-faq-header { text-align: center; margin: 0 0 clamp(2.25rem, 5vw, 3rem); }\r\n\r\n    #tgus-faq-eyebrow {\r\n      display: inline-flex; align-items: center; gap: .5em;\r\n      font-size: clamp(.72rem, 1.6vw, .8rem) !important;\r\n      font-weight: 600 !important;\r\n      letter-spacing: .08em;\r\n      text-transform: uppercase;\r\n      color: var(--tgus-cyan) !important;\r\n      margin: 0 0 .9rem !important;\r\n    }\r\n    #tgus-faq-eyebrow::before,\r\n    #tgus-faq-eyebrow::after {\r\n      content: '';\r\n      width: 1.4rem; height: 1px;\r\n      background: var(--tgus-cyan);\r\n      display: inline-block;\r\n      flex-shrink: 0;\r\n    }\r\n    #tgus-faq-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(1.5rem, 5.5vw, 2.6rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.2 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n\r\n    #tgus-faq-list {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: .6rem;\r\n      min-width: 0;\r\n      width: 100%;\r\n    }\r\n    .tgus-faq-item {\r\n      background: var(--tgus-bg-2);\r\n      border: 1px solid var(--tgus-border);\r\n      border-radius: .9rem;\r\n      overflow: hidden;\r\n      min-width: 0;\r\n      width: 100%;\r\n    }\r\n    .tgus-faq-q {\r\n      width: 100%;\r\n      max-width: 100%;\r\n      min-width: 0;\r\n      display: flex;\r\n      flex-wrap: nowrap;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      gap: clamp(.6rem, 2vw, 1rem);\r\n      background: none !important;\r\n      border: none !important;\r\n      text-align: left;\r\n      white-space: normal;\r\n      padding: clamp(.9rem, 3vw, 1.1rem) clamp(1rem, 3.5vw, 1.35rem) !important;\r\n      font-family: var(--tgus-font-body) !important;\r\n      font-size: clamp(.9rem, 2.4vw, .98rem) !important;\r\n      font-weight: 600 !important;\r\n      line-height: 1.4 !important;\r\n      color: var(--tgus-text) !important;\r\n      cursor: pointer;\r\n      outline: none;\r\n      -webkit-tap-highlight-color: transparent;\r\n      box-sizing: border-box;\r\n    }\r\n    .tgus-faq-q:focus-visible {\r\n      outline: 2px solid var(--tgus-cyan);\r\n      outline-offset: -2px;\r\n    }\r\n    .tgus-faq-q span {\r\n      flex: 1 1 auto;\r\n      min-width: 0;\r\n      max-width: 100%;\r\n      white-space: normal !important;\r\n      overflow-wrap: anywhere;\r\n      word-break: break-word;\r\n      hyphens: auto;\r\n      display: -webkit-box;\r\n      -webkit-box-orient: vertical;\r\n      -webkit-line-clamp: 2;\r\n      line-clamp: 2;\r\n      overflow: hidden;\r\n    }\r\n    .tgus-faq-q svg {\r\n      flex-shrink: 0;\r\n      width: clamp(1rem, 3vw, 1.1rem);\r\n      height: clamp(1rem, 3vw, 1.1rem);\r\n      color: var(--tgus-cyan);\r\n      transition: transform .3s var(--tgus-ease);\r\n    }\r\n    .tgus-faq-item[data-open=\"true\"] .tgus-faq-q svg { transform: rotate(45deg); }\r\n\r\n    .tgus-faq-a {\r\n      max-height: 0;\r\n      overflow: hidden;\r\n      transition: max-height .35s var(--tgus-ease);\r\n    }\r\n    .tgus-faq-a p {\r\n      margin: 0 !important;\r\n      padding: 0 clamp(1rem, 3.5vw, 1.35rem) clamp(.9rem, 3vw, 1.1rem) !important;\r\n      font-size: clamp(.85rem, 2.2vw, .92rem) !important;\r\n      line-height: 1.6 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      .tgus-faq-a, .tgus-faq-q svg { transition: none !important; }\r\n    }\r\n\r\n    \/* ================================================================\r\n       RESPONSIVE \u2014 tablet and below: tighten section padding and\r\n       question row spacing so the accordion doesn't feel oversized\r\n       once the surrounding page content is also narrower.\r\n       ================================================================ *\/\r\n    @media (max-width: 768px) {\r\n      #tgus-faq-header { margin-bottom: 2rem; }\r\n      #tgus-faq-eyebrow { margin-bottom: .7rem !important; }\r\n      #tgus-faq-list { gap: .5rem; }\r\n      .tgus-faq-item { border-radius: .75rem; }\r\n    }\r\n\r\n    \/* Small phones: question text wraps to 2+ lines routinely at this\r\n       width, so the row switches from a single-line flex layout to\r\n       letting the label wrap freely while keeping the chevron pinned\r\n       to the top instead of vertically centered against a now-tall\r\n       question \u2014 centering a short icon against 3 lines of text\r\n       looks off-balance. *\/\r\n    @media (max-width: 420px) {\r\n      #tgus-faq-section { padding-left: 1rem; padding-right: 1rem; }\r\n      #tgus-faq-inner { max-width: 100%; }\r\n      #tgus-faq-title { letter-spacing: -0.01em !important; }\r\n      .tgus-faq-q {\r\n        align-items: flex-start;\r\n        gap: .75rem;\r\n        padding: .85rem .95rem !important;\r\n      }\r\n      .tgus-faq-q svg { margin-top: .15rem; }\r\n      .tgus-faq-a p { padding: 0 .95rem .85rem !important; }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-faq-inner\">\r\n    <div id=\"tgus-faq-header\">\r\n      <p id=\"tgus-faq-eyebrow\">FAQ<\/p>\r\n      <h2 id=\"tgus-faq-title\">Questions we get about custom software development<\/h2>\r\n    <\/div>\r\n\r\n    <div id=\"tgus-faq-list\">\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>What is custom software development and how does it help my business?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>A custom software development company builds tailored solutions \u2014 like CRMs, internal tools or mobile apps \u2014 designed around how your business actually works, not the other way around. It typically increases efficiency by up to 30% and reduces operating costs. <a href=\"\/en\/contact\/\" style=\"color:var(--tgus-cyan);text-decoration:underline;\">Reach out for a free consultation.<\/a><\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>How much does custom software development cost?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>Cost depends on complexity \u2014 from around $5,000 USD for basic apps to $50,000 USD for enterprise systems. We put together a custom quote based on what your project actually needs.<\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>How long does it take to build custom software with ToGrow?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>A typical project takes 3 to 12 months depending on scope. We use agile methods to speed up delivery. Ready to start? Get in touch for a timeline tailored to your project.<\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>Why choose ToGrow for custom software development?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>ToGrow is a custom software development company with 15+ years of experience and 150+ projects delivered \u2014 from mobile apps to ERPs \u2014 for growing businesses across Latin America and the US. We also offer <a href=\"\/en\/ai-automation\/\" style=\"color:var(--tgus-cyan);text-decoration:underline;\">AI automation<\/a> to complement your software.<\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>What technologies does ToGrow use for custom software?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>We build with modern technologies like Python, React, Node.js and AWS to deliver software that's scalable and secure, adapted to your specific needs.<\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>Can you build a custom mobile app for my business?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>Yes \u2014 we design custom apps for both Android and iOS, including delivery platforms and e-commerce experiences. Tell us about your idea and we'll take it from there.<\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>How does ToGrow's custom software development process work?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>We follow an agile process: needs analysis, design, development, testing and ongoing support. We work with you at every stage to make sure the result actually fits.<\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>Do you offer support after the software is built?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>Yes \u2014 we provide ongoing support and maintenance to keep your software updated and performing well long after launch.<\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>Can you integrate AI into my custom software?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>Yes \u2014 we integrate AI, from chatbots to predictive analysis, to make your software work harder for you. We've built AI-enabled CRMs for growing companies. Let's explore what fits your case.<\/p><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tgus-faq-item\" data-tgus-faq>\r\n        <button class=\"tgus-faq-q\" type=\"button\">\r\n          <span>How do I get started with a custom software project?<\/span>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"tgus-faq-a\"><p>Just reach out for a free consultation. We analyze your needs, define the scope, and put together a dedicated team. Start your project today \u2014 message us on WhatsApp.<\/p><\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      var root = document.getElementById('tgus-faq-section');\r\n      if(!root) return;\r\n      var openItems = root.querySelectorAll('[data-tgus-faq]');\r\n\r\n      openItems.forEach(function(item){\r\n        var btn = item.querySelector('.tgus-faq-q');\r\n        var answer = item.querySelector('.tgus-faq-a');\r\n        btn.addEventListener('click', function(){\r\n          var isOpen = item.getAttribute('data-open') === 'true';\r\n          item.setAttribute('data-open', isOpen ? 'false' : 'true');\r\n          answer.style.maxHeight = isOpen ? '0px' : (answer.scrollHeight + 'px');\r\n        });\r\n      });\r\n\r\n      \/\/ recompute the open answer's max-height on resize\/orientation\r\n      \/\/ change \u2014 the FAQ text reflows to more\/fewer lines at\r\n      \/\/ different viewport widths, and a stale pixel max-height\r\n      \/\/ would either clip the answer or leave a gap under it\r\n      var resizeRaf = null;\r\n      window.addEventListener('resize', function(){\r\n        if(resizeRaf) return;\r\n        resizeRaf = requestAnimationFrame(function(){\r\n          resizeRaf = null;\r\n          openItems.forEach(function(item){\r\n            if(item.getAttribute('data-open') === 'true'){\r\n              var answer = item.querySelector('.tgus-faq-a');\r\n              answer.style.maxHeight = answer.scrollHeight + 'px';\r\n            }\r\n          });\r\n        });\r\n      });\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43d2204 elementor-widget elementor-widget-html\" data-id=\"43d2204\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"tgus-finalcta-section\" class=\"tgus-finalcta-section\">\r\n  <style>\r\n    #tgus-finalcta-section {\r\n      --tgus-bg-0: #05050a;\r\n      --tgus-bg-2: #15151f;\r\n      --tgus-blue: #3b82f6;\r\n      --tgus-blue-400: #3b82f6;\r\n      --tgus-blue-500: #2563eb;\r\n      --tgus-blue-600: #1d4ed8;\r\n      --tgus-violet: #8b7cf6;\r\n      --tgus-violet-d: #6d5ef0;\r\n      --tgus-cyan: #5ec8f2;\r\n      --tgus-cyan-300: #5ec8f2;\r\n      --tgus-text: #f4f4f8;\r\n      --tgus-text-dim: #9a9aa8;\r\n      --tgus-border: rgba(255,255,255,.08);\r\n      --tgus-ease: cubic-bezier(.16,1,.3,1);\r\n      --tgus-font-display: 'Bricolage Grotesque', system-ui, sans-serif;\r\n      --tgus-font-body: 'Plus Jakarta Sans', system-ui, sans-serif;\r\n\r\n      position: relative;\r\n      background: var(--tgus-bg-0);\r\n      color: var(--tgus-text);\r\n      font-family: var(--tgus-font-body) !important;\r\n      padding: clamp(4.5rem, 9vw, 7.5rem) clamp(1.25rem, 5vw, 4rem);\r\n      overflow: hidden;\r\n      isolation: isolate;\r\n      min-width: 0;\r\n    }\r\n    #tgus-finalcta-section *, #tgus-finalcta-section *::before, #tgus-finalcta-section *::after { box-sizing: border-box; }\r\n\r\n    \/* section backdrop \u2014 faint dot-grid + one centered ambient glow,\r\n       same treatment used across the rest of the page *\/\r\n    #tgus-finalcta-grid {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      background-image: radial-gradient(circle, rgba(255,255,255,.05) 1px, transparent 1.4px);\r\n      background-size: 26px 26px;\r\n      -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, black, transparent 75%);\r\n      mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, black, transparent 75%);\r\n      pointer-events: none;\r\n    }\r\n    #tgus-finalcta-ambient {\r\n      position: absolute; inset: 0; z-index: 0;\r\n      pointer-events: none;\r\n      overflow: hidden;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    #tgus-finalcta-ambient span {\r\n      width: 58rem; height: 34rem;\r\n      border-radius: 50%;\r\n      background: radial-gradient(ellipse, rgba(37,99,235,.28) 0%, rgba(109,94,240,.14) 45%, transparent 75%);\r\n      filter: blur(28px);\r\n      animation: tgus-finalcta-drift 24s cubic-bezier(.16,1,.3,1) infinite alternate;\r\n    }\r\n    @keyframes tgus-finalcta-drift {\r\n      from { transform: translate(0, 0); }\r\n      to { transform: translate(-2rem, 1.5rem); }\r\n    }\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #tgus-finalcta-ambient span { animation: none !important; }\r\n    }\r\n\r\n    #tgus-finalcta-inner {\r\n      position: relative; z-index: 2;\r\n      max-width: 720px;\r\n      margin: 0 auto;\r\n      text-align: center;\r\n    }\r\n\r\n    #tgus-finalcta-title {\r\n      font-family: var(--tgus-font-display) !important;\r\n      font-size: clamp(2rem, 4vw, 3rem) !important;\r\n      font-weight: 700 !important;\r\n      line-height: 1.15 !important;\r\n      letter-spacing: -0.02em !important;\r\n      margin: 0 0 1.1rem !important;\r\n      color: var(--tgus-text) !important;\r\n      text-wrap: balance;\r\n    }\r\n    #tgus-finalcta-inner > p {\r\n      font-size: 1.05rem !important;\r\n      line-height: 1.65 !important;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: 0 auto clamp(2rem, 4vw, 2.5rem) !important;\r\n      max-width: 56ch;\r\n    }\r\n\r\n    \/* ================================================================\r\n       CTA BUTTONS \u2014 standard project button (Uiverse dexter-st glass\r\n       button, recolored to brand blue). Same component used across\r\n       the hero, dedicated-team, on-demand and other CTAs. The ghost\r\n       secondary button gets the same glass treatment but with a\r\n       transparent\/neutral fill instead of the blue gradient, so the\r\n       primary (WhatsApp) still reads as the stronger action.\r\n       ================================================================ *\/\r\n    #tgus-finalcta-actions {\r\n      display: flex;\r\n      gap: .9rem;\r\n      justify-content: center;\r\n      flex-wrap: wrap;\r\n      margin-bottom: clamp(3rem, 6vw, 4.5rem);\r\n    }\r\n\r\n    .tgus-finalcta-btn {\r\n      --border-radius: 24px;\r\n      --padding: 4px;\r\n      --transition: .4s;\r\n\r\n      position: relative;\r\n      isolation: isolate;\r\n      user-select: none;\r\n      display: flex !important;\r\n      align-items: center;\r\n      justify-content: center;\r\n      gap: .6rem;\r\n      padding: .9rem .9rem .9rem 1.5rem !important;\r\n      font-family: var(--tgus-font-body) !important;\r\n      font-size: .95rem !important;\r\n      font-weight: 600 !important;\r\n      text-decoration: none !important;\r\n      color: #fff !important;\r\n      border-radius: var(--border-radius);\r\n      cursor: pointer;\r\n      outline: none;\r\n      -webkit-tap-highlight-color: transparent;\r\n      transition: box-shadow var(--transition), border var(--transition), background-image var(--transition), background-color var(--transition), transform var(--transition);\r\n    }\r\n    .tgus-finalcta-btn::before {\r\n      content: \"\";\r\n      position: absolute;\r\n      top: calc(0px - var(--padding));\r\n      left: calc(0px - var(--padding));\r\n      width: calc(100% + var(--padding) * 2);\r\n      height: calc(100% + var(--padding) * 2);\r\n      border-radius: calc(var(--border-radius) + var(--padding));\r\n      pointer-events: none;\r\n      background-image: linear-gradient(0deg, #0004, #000a);\r\n      z-index: -1;\r\n      transition: box-shadow var(--transition), filter var(--transition);\r\n      box-shadow:\r\n        1px 1px 1px rgba(255,255,255,.12),\r\n        2px 2px 2px rgba(255,255,255,.06),\r\n        -1px -1px 1px rgba(0,0,0,.13),\r\n        -2px -2px 2px rgba(0,0,0,.06);\r\n    }\r\n    .tgus-finalcta-btn::after {\r\n      content: \"\";\r\n      position: absolute;\r\n      top: 0; left: 0;\r\n      width: 100%; height: 100%;\r\n      border-radius: inherit;\r\n      pointer-events: none;\r\n      background-image: linear-gradient(0deg, #fff, var(--tgus-cyan-300), var(--tgus-blue-500) 50%, transparent 85%);\r\n      opacity: 0;\r\n      transition: opacity var(--transition), filter var(--transition);\r\n    }\r\n    .tgus-finalcta-btn:focus-visible {\r\n      outline: 2px solid var(--tgus-cyan-300);\r\n      outline-offset: 3px;\r\n    }\r\n    .tgus-finalcta-btn .tgus-btn-letters {\r\n      position: relative; z-index: 2;\r\n      color: rgba(255,255,255,.92);\r\n      text-shadow: 0 1px 1px rgba(0,0,0,.25);\r\n    }\r\n    .tgus-finalcta-btn svg {\r\n      position: relative; z-index: 2;\r\n      width: 16px; height: 16px;\r\n      flex-shrink: 0;\r\n      fill: none;\r\n      stroke: #fff;\r\n      stroke-width: 2;\r\n      filter: drop-shadow(0 1px 1px rgba(0,0,0,.25));\r\n      transition: transform var(--transition);\r\n    }\r\n    .tgus-finalcta-btn:hover svg { transform: translateX(2px); }\r\n\r\n    \/* primary \u2014 filled blue gradient, same as the rest of the project *\/\r\n    .tgus-finalcta-btn.tgus-primary {\r\n      background-image: linear-gradient(180deg, var(--tgus-blue-400) 0%, var(--tgus-blue-600) 100%);\r\n      box-shadow:\r\n        inset 0px 1px 1px rgba(255,255,255,.45),\r\n        inset 0px 2px 3px rgba(255,255,255,.3),\r\n        inset 0px 4px 6px rgba(255,255,255,.15),\r\n        inset 0px 10px 14px rgba(255,255,255,.08),\r\n        0px -1px 1px rgba(0,0,0,.05),\r\n        0px -3px 4px rgba(0,0,0,.1),\r\n        0px -8px 14px rgba(0,0,0,.18),\r\n        0px 8px 20px -6px rgba(10,40,110,.55);\r\n      border: solid 1px rgba(255,255,255,.28) !important;\r\n    }\r\n    .tgus-finalcta-btn.tgus-primary:hover {\r\n      border-color: rgba(94,200,242,.5) !important;\r\n      background-image: linear-gradient(180deg, var(--tgus-cyan-300) 0%, var(--tgus-blue-500) 100%);\r\n      transform: translateY(-1px);\r\n    }\r\n    .tgus-finalcta-btn.tgus-primary:hover::after {\r\n      opacity: 1;\r\n      -webkit-mask-image: linear-gradient(0deg, #fff, transparent);\r\n      mask-image: linear-gradient(0deg, #fff, transparent);\r\n    }\r\n    .tgus-finalcta-btn.tgus-primary:active {\r\n      border-color: rgba(94,200,242,.7) !important;\r\n      background-image: linear-gradient(180deg, var(--tgus-blue-500) 0%, var(--tgus-blue-600) 100%);\r\n      transform: translateY(0) scale(.99);\r\n    }\r\n    .tgus-finalcta-btn.tgus-primary:active::after {\r\n      opacity: 1;\r\n      filter: brightness(200%);\r\n      -webkit-mask-image: linear-gradient(0deg, #fff, transparent);\r\n      mask-image: linear-gradient(0deg, #fff, transparent);\r\n    }\r\n\r\n    \/* ghost \u2014 same glass mechanics, neutral dark fill instead of the\r\n       blue gradient, so it reads as the secondary action *\/\r\n    .tgus-finalcta-btn.tgus-ghost {\r\n      background-color: #111219;\r\n      box-shadow:\r\n        inset 0px 1px 1px rgba(255,255,255,.16),\r\n        inset 0px 2px 3px rgba(255,255,255,.1),\r\n        inset 0px 4px 6px rgba(255,255,255,.05),\r\n        0px -1px 1px rgba(0,0,0,.05),\r\n        0px -3px 4px rgba(0,0,0,.1);\r\n      border: solid 1px var(--tgus-border) !important;\r\n    }\r\n    .tgus-finalcta-btn.tgus-ghost .tgus-btn-letters {\r\n      color: var(--tgus-text) !important;\r\n    }\r\n    .tgus-finalcta-btn.tgus-ghost:hover {\r\n      border-color: rgba(94,200,242,.4) !important;\r\n      background-color: #15161f;\r\n      transform: translateY(-1px);\r\n    }\r\n    .tgus-finalcta-btn.tgus-ghost:hover::after {\r\n      opacity: .5;\r\n      -webkit-mask-image: linear-gradient(0deg, #fff, transparent);\r\n      mask-image: linear-gradient(0deg, #fff, transparent);\r\n    }\r\n    .tgus-finalcta-btn.tgus-ghost:active {\r\n      transform: translateY(0) scale(.99);\r\n    }\r\n\r\n    #tgus-related {\r\n      position: relative; z-index: 2;\r\n      border-top: 1px solid var(--tgus-border);\r\n      padding-top: clamp(2rem, 4vw, 2.5rem);\r\n    }\r\n    #tgus-related p {\r\n      font-size: .78rem !important;\r\n      font-weight: 600 !important;\r\n      letter-spacing: .06em;\r\n      text-transform: uppercase;\r\n      color: var(--tgus-text-dim) !important;\r\n      margin: 0 0 1rem !important;\r\n    }\r\n    #tgus-related-links {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      justify-content: center;\r\n      gap: .6rem;\r\n    }\r\n    #tgus-related-links a,\r\n    #tgus-related-links a:visited {\r\n      font-size: .88rem !important;\r\n      font-weight: 500 !important;\r\n      color: var(--tgus-text) !important;\r\n      background: var(--tgus-bg-2);\r\n      border: 1px solid var(--tgus-border);\r\n      border-radius: 999px;\r\n      padding: .5rem 1.1rem;\r\n      text-decoration: none !important;\r\n      transition: border-color .3s var(--tgus-ease), color .3s var(--tgus-ease);\r\n    }\r\n    #tgus-related-links a:hover {\r\n      border-color: rgba(94,200,242,.4);\r\n      color: var(--tgus-cyan) !important;\r\n    }\r\n\r\n    @media (max-width: 480px) {\r\n      #tgus-finalcta-actions { flex-direction: column; align-items: stretch; }\r\n      .tgus-finalcta-btn { justify-content: center; }\r\n    }\r\n  <\/style>\r\n\r\n  <div id=\"tgus-finalcta-grid\" aria-hidden=\"true\"><\/div>\r\n  <div id=\"tgus-finalcta-ambient\" aria-hidden=\"true\"><span><\/span><\/div>\r\n\r\n  <div id=\"tgus-finalcta-inner\">\r\n    <h2 id=\"tgus-finalcta-title\">Ready to transform your business?<\/h2>\r\n    <p>Whether you need custom software, a mobile app or an enterprise system, ToGrow is your partner. We offer free project consultations and custom quotes built around your business \u2014 reach out on WhatsApp or request a quote to take your company to the next level with software built exclusively for you.<\/p>\r\n\r\n    <div id=\"tgus-finalcta-actions\">\r\n      <a class=\"tgus-finalcta-btn tgus-primary\" href=\"https:\/\/api.whatsapp.com\/send?phone=573103597580\" target=\"_blank\" rel=\"noopener\">\r\n        <span class=\"tgus-btn-letters\">Book a call<\/span>\r\n        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\r\n      <\/a>\r\n      <a class=\"tgus-finalcta-btn tgus-ghost\" href=\"https:\/\/api.whatsapp.com\/send?phone=573103597580\" target=\"_blank\" rel=\"noopener\">\r\n        <span class=\"tgus-btn-letters\">Request a quote<\/span>\r\n      <\/a>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>When off-the-shelf runs out ToGrow is a custom software development company with five in-house engineers. We build the apps, integrations and internal tools that standard platforms can&#8217;t handle. Book a call Tech stack: Android Studio, Angular, C, Django, Java, JavaScript, Laravel, HTML5, MariaDB, C++, MongoDB, Node.js, Nuxt.js, PHP, PostgreSQL, .NET, Python, React, Spring Boot, CSS, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-9","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/togrowagencia.com\/en\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/togrowagencia.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/togrowagencia.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/togrowagencia.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/togrowagencia.com\/en\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":50,"href":"https:\/\/togrowagencia.com\/en\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":1892,"href":"https:\/\/togrowagencia.com\/en\/wp-json\/wp\/v2\/pages\/9\/revisions\/1892"}],"wp:attachment":[{"href":"https:\/\/togrowagencia.com\/en\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}