{"id":51160,"date":"2026-07-09T15:22:49","date_gmt":"2026-07-09T20:22:49","guid":{"rendered":"https:\/\/satrack.com\/co\/?page_id=51160"},"modified":"2026-07-23T11:08:11","modified_gmt":"2026-07-23T16:08:11","slug":"faqs-2","status":"publish","type":"page","link":"https:\/\/satrack.com\/co\/faqs-2\/","title":{"rendered":"FAQs new"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"51160\" class=\"elementor elementor-51160\" data-elementor-post-type=\"page\">\n\t\t\t\t<main class=\"elementor-element elementor-element-4472e9a e-con-full satrack-faq-page e-flex e-con e-parent\" data-id=\"4472e9a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c1d46a2 e-flex e-con-boxed e-con e-child\" data-id=\"c1d46a2\" data-element_type=\"container\" data-e-type=\"container\" aria-labelledby=\"faq-page-title\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-d9cd26c e-con-full e-flex e-con e-child\" data-id=\"d9cd26c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0297011 elementor-widget elementor-widget-shortcode\" data-id=\"0297011\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"breadcrumbs\"><a href=\"https:\/\/satrack.com\/co\">Inicio<\/a><\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ef5820 elementor-widget elementor-widget-heading\" data-id=\"9ef5820\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Centro de ayuda Satrack<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a3c278f elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"a3c278f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Preguntas frecuentes sobre GPS, telemetr\u00eda y control de flotas<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7235ad0 elementor-widget elementor-widget-text-editor\" data-id=\"7235ad0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Encuentra respuestas claras sobre GPS vehicular, rastreo satelital, telemetr\u00eda, c\u00e1maras para veh\u00edculos, sensores de combustible, monitoreo de temperatura, seguridad y gesti\u00f3n de flotas.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a14a476 e-con-full e-flex e-con e-child\" data-id=\"a14a476\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-956dc70 elementor-widget elementor-widget-html\" data-id=\"956dc70\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"satrack-faq-search\" role=\"search\">\n    <label class=\"satrack-faq-search__label\" for=\"satrack-faq-query\">\n        Buscar en preguntas frecuentes\n    <\/label>\n\n    <div class=\"satrack-faq-search__control\">\n        <span class=\"satrack-faq-search__icon\" aria-hidden=\"true\">\n            <svg\n                width=\"22\"\n                height=\"22\"\n                viewBox=\"0 0 24 24\"\n                fill=\"none\"\n                xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n            >\n                <circle\n                    cx=\"11\"\n                    cy=\"11\"\n                    r=\"7\"\n                    stroke=\"currentColor\"\n                    stroke-width=\"2\"\n                \/>\n                <path\n                    d=\"M16.5 16.5L21 21\"\n                    stroke=\"currentColor\"\n                    stroke-width=\"2\"\n                    stroke-linecap=\"round\"\n                \/>\n            <\/svg>\n        <\/span>\n\n        <input\n            id=\"satrack-faq-query\"\n            class=\"satrack-faq-search__input\"\n            type=\"search\"\n            placeholder=\"Ej.: GPS, combustible, temperatura o facturaci\u00f3n\"\n            autocomplete=\"off\"\n            spellcheck=\"false\"\n            aria-controls=\"satrack-faq-results\"\n        >\n\n        <button\n            class=\"satrack-faq-search__clear\"\n            type=\"button\"\n            aria-label=\"Limpiar b\u00fasqueda\"\n            hidden\n        >\n            Limpiar\n        <\/button>\n    <\/div>\n\n    <div\n        id=\"satrack-faq-results\"\n        class=\"satrack-faq-search__status\"\n        role=\"status\"\n        aria-live=\"polite\"\n    ><\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-14da874 e-flex e-con-boxed e-con e-child\" data-id=\"14da874\" 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-0a1dc0c elementor-widget elementor-widget-heading\" data-id=\"0a1dc0c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Explora por tema<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f37f469 elementor-widget elementor-widget-heading\" data-id=\"f37f469\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Cada categor\u00eda re\u00fane preguntas relacionadas para facilitar la consulta y ofrecer respuestas m\u00e1s completas.<\/p>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9c7973c e-grid e-con-boxed e-con e-child\" data-id=\"9c7973c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<article class=\"elementor-element elementor-element-8747cd1 e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"8747cd1\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"gps rastreo satelital rastreo vehicular localizaci\u00f3n ubicaci\u00f3n ubicaci\u00f3n en tiempo real seguimiento vehicular monitoreo vehicular dispositivo gps gps para carros gps para camiones gps para motos historial de recorridos posici\u00f3n del veh\u00edculo cobertura satelital\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fb28ffc icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"fb28ffc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-satellite-dish\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M305.44954,462.59c7.39157,7.29792,6.18829,20.09661-3.00038,25.00356-77.713,41.80281-176.72559,29.9105-242.34331-35.7082C-5.49624,386.28227-17.404,287.362,24.41381,209.554c4.89125-9.095,17.68975-10.29834,25.00318-3.00043L166.22872,323.36708l27.39411-27.39452c-.68759-2.60974-1.594-5.00071-1.594-7.81361a32.00407,32.00407,0,1,1,32.00407,32.00455c-2.79723,0-5.20378-.89075-7.79786-1.594l-27.40974,27.41015ZM511.9758,303.06732a16.10336,16.10336,0,0,1-16.002,17.00242H463.86031a15.96956,15.96956,0,0,1-15.89265-15.00213C440.46671,175.5492,336.45348,70.53427,207.03078,63.53328a15.84486,15.84486,0,0,1-15.00191-15.90852V16.02652A16.09389,16.09389,0,0,1,209.031.02425C372.25491,8.61922,503.47472,139.841,511.9758,303.06732Zm-96.01221-.29692a16.21093,16.21093,0,0,1-16.11142,17.29934H367.645a16.06862,16.06862,0,0,1-15.89265-14.70522c-6.90712-77.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7bbd46 title-card-faq elementor-widget elementor-widget-heading\" data-id=\"f7bbd46\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/satrack.com\/co\/faqs-2\/gps-y-rastreo-satelital\/\">GPS y rastreo satelital<\/a><\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-658b5e2 descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"658b5e2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Conoce c\u00f3mo funciona el GPS vehicular, c\u00f3mo consultar la ubicaci\u00f3n en tiempo real y qu\u00e9 informaci\u00f3n puedes obtener de tus veh\u00edculos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18fdd9f link-card-faq elementor-widget elementor-widget-button\" data-id=\"18fdd9f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/satrack.com\/co\/faqs-2\/gps-y-rastreo-satelital\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t<div class=\"elementor-element elementor-element-64f6d90 e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"64f6d90\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"telemetr\u00eda telemetria vehicular gesti\u00f3n de flotas administracion de flotas control de flotas monitoreo de flotas indicadores de flota productividad vehicular operaci\u00f3n de veh\u00edculos rendimiento kilometraje ralent\u00ed alertas operativas datos del veh\u00edculo plataforma de flotas\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c783a10 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"c783a10\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-truck\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed59bf6 title-card-faq elementor-widget elementor-widget-heading\" data-id=\"ed59bf6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/satrack.com\/co\/faqs-2\/faqs-telemetria-y-gestion-de-flotas\/\">Telemetr\u00eda y gesti\u00f3n de flotas<\/a><\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6aa2f3f descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"6aa2f3f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Descubre c\u00f3mo la telemetr\u00eda ayuda a controlar veh\u00edculos, conductores, recorridos, productividad y costos operativos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2e6b68 link-card-faq elementor-widget elementor-widget-button\" data-id=\"b2e6b68\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/satrack.com\/co\/faqs-2\/faqs-telemetria-y-gestion-de-flotas\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-400be02 e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"400be02\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"seguridad vehicular seguridad vial recuperaci\u00f3n vehicular veh\u00edculo robado robo hurto gps antirrobo apagado remoto bloqueo remoto bot\u00f3n de p\u00e1nico exceso de velocidad frenadas bruscas aceleraciones fuertes conducci\u00f3n riesgosa h\u00e1bitos de conducci\u00f3n pesv geocercas alertas de seguridad\">\n\t\t\t\t<div class=\"elementor-element elementor-element-64bee14 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"64bee14\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-shield-alt\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54f6457 title-card-faq elementor-widget elementor-widget-heading\" data-id=\"54f6457\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Seguridad vehicular y seguridad vial<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d70b8d3 descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"d70b8d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Encuentra respuestas sobre alertas, geocercas, conducci\u00f3n riesgosa, recuperaci\u00f3n vehicular y prevenci\u00f3n de incidentes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-74973b4 link-card-faq elementor-widget elementor-widget-button\" data-id=\"74973b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d6f5198 e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"d6f5198\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"c\u00e1maras vehiculares camaras para veh\u00edculos videotelem\u00e1tica dashcam video en tiempo real grabaciones vehiculares evidencia en video c\u00e1mara con inteligencia artificial ia dms adas fatiga distracci\u00f3n del conductor somnolencia visi\u00f3n nocturna c\u00e1mara frontal c\u00e1mara de cabina seguridad con c\u00e1maras\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f6a2fc5 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"f6a2fc5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-camera-retro\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5eabba4 title-card-faq elementor-widget elementor-widget-heading\" data-id=\"5eabba4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">C\u00e1maras y videotelem\u00e1tica<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7630c12 descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"7630c12\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Conoce c\u00f3mo funcionan las c\u00e1maras vehiculares, la transmisi\u00f3n en vivo, las grabaciones y las alertas con inteligencia artificial.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fecb164 link-card-faq elementor-widget elementor-widget-button\" data-id=\"fecb164\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-25af073 e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"25af073\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"monitor de viajes control de rutas rutas vehiculares monitoreo de rutas planificaci\u00f3n de rutas seguimiento de viajes cumplimiento de rutas desv\u00edos de ruta paradas no autorizadas paradas programadas puntos de control tiempos log\u00edsticos cargue descargue entregas recorridos viajes bit\u00e1cora de ruta\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dba6d01 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"dba6d01\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-route\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d735712 title-card-faq elementor-widget elementor-widget-heading\" data-id=\"d735712\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Central de Viajes y Monitor de Viajes<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-056f6da descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"056f6da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"st-faq__cluster-copy\">Consulta c\u00f3mo programar rutas, controlar desv\u00edos, identificar paradas y hacer seguimiento a cada viaje.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5fe62c link-card-faq elementor-widget elementor-widget-button\" data-id=\"a5fe62c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c58b97c e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"c58b97c\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"satrack conecta integraciones integraci\u00f3n gps m\u00faltiples proveedores gps unificar gps centralizar proveedores torre de control tms erp api integraci\u00f3n de sistemas integraci\u00f3n telem\u00e1tica proveedores de rastreo sensores externos plataforma integrada monitoreo unificado\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8c474c5 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"8c474c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-route\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e390374 title-card-faq elementor-widget elementor-widget-heading\" data-id=\"e390374\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Conecta Satrack e integraciones<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d366fa descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"6d366fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"st-faq__cluster-copy\">Conoce c\u00f3mo centralizar diferentes proveedores GPS e integrar informaci\u00f3n con TMS, ERP, sensores y otras plataformas.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ebe29a0 link-card-faq elementor-widget elementor-widget-button\" data-id=\"ebe29a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-71c0cce e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"71c0cce\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"termocarga temperatura sensor de temperatura monitoreo de temperatura control de temperatura cadena de fr\u00edo cadena de frio cami\u00f3n refrigerado veh\u00edculo refrigerado carga refrigerada alimentos medicamentos productos congelados alertas de temperatura temperatura en tiempo real sensor t\u00e9rmico term\u00f3grafo sonda de temperatura refrigeraci\u00f3n\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a8bfa4b icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"a8bfa4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-temperature-low\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3122aba title-card-faq elementor-widget elementor-widget-heading\" data-id=\"3122aba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Cadena de fr\u00edo<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b1cf8d descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"6b1cf8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"st-faq__cluster-copy\">Resuelve tus dudas sobre sensores de temperatura, cadena de fr\u00edo, alertas, hist\u00f3ricos y control de carga refrigerada<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0fcc7f0 link-card-faq elementor-widget elementor-widget-button\" data-id=\"0fcc7f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7597f8a e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"7597f8a\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"combustible sensor de combustible sensor de nivel de combustible control de combustible consumo de combustible robo de combustible hurto de combustible extracci\u00f3n de combustible p\u00e9rdidas de combustible fuga de combustible abastecimiento tanque de combustible canbus rendimiento combustible ralent\u00ed ahorro de combustible di\u00e9sel diesel gasolina calibraci\u00f3n de tanque\">\n\t\t\t\t<div class=\"elementor-element elementor-element-48f3a4f icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"48f3a4f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-gas-pump\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f0a18ad title-card-faq elementor-widget elementor-widget-heading\" data-id=\"f0a18ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Soluci\u00f3n de combustible<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-31690ad descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"31690ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"st-faq__cluster-copy\">Conoce c\u00f3mo monitorear el nivel, consumo, abastecimientos, posibles p\u00e9rdidas y rendimiento del combustible.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-affb0ef link-card-faq elementor-widget elementor-widget-button\" data-id=\"affb0ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ed00822 e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"ed00822\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"beneficios gps soluciones para empresas control de veh\u00edculos eficiencia operativa ahorro de costos productividad seguridad de flotas tecnolog\u00eda para transporte soluciones satrack empresas de transporte distribuci\u00f3n log\u00edstica veh\u00edculos empresariales control operativo optimizaci\u00f3n de flotas reducci\u00f3n de costos\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f25fec3 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"f25fec3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-boxes\" viewBox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12bb163 title-card-faq elementor-widget elementor-widget-heading\" data-id=\"12bb163\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Carga satrack<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-07a6fcd descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"07a6fcd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span data-teams=\"true\">Resuelve tus dudas sobre el funcionamiento de Carga Satrack para empresas y transportadores.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ddb7d69 link-card-faq elementor-widget elementor-widget-button\" data-id=\"ddb7d69\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8e47778 e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"8e47778\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"plataforma satrack app satrack aplicaci\u00f3n satrack iniciar sesi\u00f3n ingresar a la plataforma usuario contrase\u00f1a recuperar contrase\u00f1a ubicaci\u00f3n del veh\u00edculo recorridos hist\u00f3ricos alertas geocercas reportes usuarios permisos certificados monitoreo desde celular aplicaci\u00f3n m\u00f3vil plataforma web\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9d81498 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"9d81498\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-desktop\" viewBox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-50a690d title-card-faq elementor-widget elementor-widget-heading\" data-id=\"50a690d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Plataforma y App Satrack<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6e7e84e descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"6e7e84e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"st-faq__cluster-copy\">Aprende a ingresar, consultar veh\u00edculos, revisar recorridos, crear alertas, administrar usuarios y descargar reportes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-92d983b link-card-faq elementor-widget elementor-widget-button\" data-id=\"92d983b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-031c05c e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"031c05c\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"facturaci\u00f3n facturacion factura pagos pagar factura descargar factura d\u00e9bito autom\u00e1tico debito automatico medios de pago cartera saldo pendiente soporte servicio al cliente atenci\u00f3n al cliente l\u00edneas de atenci\u00f3n horarios de atenci\u00f3n soporte t\u00e9cnico actualizar datos correo de facturaci\u00f3n primera factura\">\n\t\t\t\t<div class=\"elementor-element elementor-element-22a3334 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"22a3334\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-money-bill\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-04894df title-card-faq elementor-widget elementor-widget-heading\" data-id=\"04894df\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Facturaci\u00f3n, pagos y soporte<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4125cf2 descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"4125cf2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"st-faq__cluster-copy\">Encuentra informaci\u00f3n sobre facturas, medios de pago, actualizaci\u00f3n de datos, canales de atenci\u00f3n y soporte t\u00e9cnico.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41d7b76 link-card-faq elementor-widget elementor-widget-button\" data-id=\"41d7b76\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d7dec15 e-con-full faq-cluster-card e-flex e-con e-child\" data-id=\"d7dec15\" data-element_type=\"container\" data-e-type=\"container\" data-faq-keywords=\"instalaci\u00f3n gps instalar gps precio gps costo gps cotizaci\u00f3n gps planes gps mensualidad servicio gps comprar gps contratar gps proveedor gps instalaci\u00f3n vehicular traslado de dispositivo documentos para contratar activaci\u00f3n del servicio asesor\u00eda comercial precios satrack\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f4fc7f3 icono-card-faq elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"f4fc7f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-cogs\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8497f5b title-card-faq elementor-widget elementor-widget-heading\" data-id=\"8497f5b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Instalaci\u00f3n, precios y contrataci\u00f3n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f295a6d descrp-card-faq elementor-widget elementor-widget-text-editor\" data-id=\"f295a6d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Consulta c\u00f3mo contratar el servicio, qu\u00e9 incluye, cu\u00e1nto puede costar y qu\u00e9 debes tener en cuenta antes de instalar.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-519bb36 link-card-faq elementor-widget elementor-widget-button\" data-id=\"519bb36\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ver preguntas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3fd5375 e-flex e-con-boxed e-con e-child\" data-id=\"3fd5375\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-11b7322 elementor-widget elementor-widget-heading\" data-id=\"11b7322\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Preguntas m\u00e1s consultadas\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7b3588 faq-search-accordion elementor-widget elementor-widget-n-accordion\" data-id=\"e7b3588\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;n_accordion_animation_duration&quot;:{&quot;unit&quot;:&quot;ms&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;default_state&quot;:&quot;all_collapsed&quot;,&quot;max_items_expended&quot;:&quot;multiple&quot;}\" data-widget_type=\"nested-accordion.default\">\n\t\t\t\t\t\t\t<div class=\"e-n-accordion\" aria-label=\"Accordion. Open links with Enter or Space, close with Escape, and navigate with Arrow Keys\">\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2420\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"1\" tabindex=\"0\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2420\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfQu\u00e9 es un GPS vehicular? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2420\" class=\"elementor-element elementor-element-8e84b8a e-con-full faq-answer e-flex e-con e-child\" data-id=\"8e84b8a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2c4354c elementor-widget elementor-widget-text-editor\" data-id=\"2c4354c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">Un GPS vehicular es un dispositivo que se instala en un carro, cami\u00f3n, motocicleta u otro veh\u00edculo para determinar su ubicaci\u00f3n mediante se\u00f1ales satelitales y transmitirla a una plataforma de monitoreo.<\/p><p>Desde la plataforma web o la aplicaci\u00f3n m\u00f3vil se pueden consultar datos como:<\/p><p>Ubicaci\u00f3n actual en el mapa.<br \/>Velocidad.<br \/>Recorridos hist\u00f3ricos.<br \/>Encendidos y apagados del motor.<br \/>Paradas y tiempos de permanencia.<br \/>Alertas configuradas por el usuario.<\/p><p>Las funcionalidades disponibles var\u00edan seg\u00fan el dispositivo instalado, el tipo de veh\u00edculo y el plan contratado.<\/p><p>En Colombia, Satrack es uno de los principales proveedores de GPS vehicular y telem\u00e1tica, con soluciones para veh\u00edculos particulares, transportadores independientes y flotas empresariales. Conoce m\u00e1s en <a href=\"https:\/\/satrack.com\/co\/monitoreo-satelital-para-pymes\/\">rastreo satelital GPS de veh\u00edculos.<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2421\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"2\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2421\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfC\u00f3mo funciona el rastreo satelital de veh\u00edculos? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2421\" class=\"elementor-element elementor-element-0e149b5 e-con-full faq-answer e-flex e-con e-child\" data-id=\"0e149b5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7923130 elementor-widget elementor-widget-text-editor\" data-id=\"7923130\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">El rastreo satelital de veh\u00edculos funciona mediante un dispositivo GPS instalado en el veh\u00edculo que recibe se\u00f1ales de varios sat\u00e9lites para calcular su posici\u00f3n. El equipo transmite esa informaci\u00f3n a una plataforma de monitoreo utilizando una red de comunicaciones m\u00f3vil.<\/p><p>Desde la plataforma web o la aplicaci\u00f3n m\u00f3vil, el usuario puede ver la posici\u00f3n del veh\u00edculo, consultar recorridos y recibir alertas sobre diferentes eventos.<\/p><p>Aunque el servicio se conoce como rastreo satelital, en la pr\u00e1ctica los sat\u00e9lites determinan la ubicaci\u00f3n y una red celular transmite los datos hacia la plataforma. Por eso la visualizaci\u00f3n en tiempo real depende tambi\u00e9n de la cobertura m\u00f3vil disponible en la zona.<\/p><p>Proveedores de rastreo satelital en Colombia como Satrack integran el dispositivo, la transmisi\u00f3n de datos, la plataforma y el soporte en un solo servicio. Conoce c\u00f3mo funciona la <a href=\"https:\/\/satrack.com\/co\/monitoreo-satelital-para-pymes\/\">soluci\u00f3n de rastreo GPS de Satrack<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1adeef0 elementor-widget elementor-widget-html\" data-id=\"1adeef0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2422\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"3\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2422\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfCu\u00e1l es la diferencia entre GPS y telemetr\u00eda vehicular? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2422\" class=\"elementor-element elementor-element-6e6cc21 e-con-full faq-answer e-flex e-con e-child\" data-id=\"6e6cc21\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6b01d36 elementor-widget elementor-widget-text-editor\" data-id=\"6b01d36\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">La diferencia entre GPS y telemetr\u00eda vehicular es que el GPS indica principalmente d\u00f3nde est\u00e1 el veh\u00edculo, mientras que la telemetr\u00eda analiza c\u00f3mo se est\u00e1 utilizando y c\u00f3mo se desempe\u00f1a.<\/p>\n\nDependiendo del equipo y de las variables disponibles, la telemetr\u00eda puede recopilar informaci\u00f3n como:\n<ul>\n \t<li>Velocidad y kilometraje.<\/li>\n \t<li>Tiempo encendido y tiempo en ralent\u00ed.<\/li>\n \t<li>Frenadas bruscas y aceleraciones fuertes.<\/li>\n \t<li>Consumo de combustible.<\/li>\n \t<li>Comportamiento del conductor.<\/li>\n \t<li>Variables del computador del veh\u00edculo.<\/li>\n<\/ul>\nLa telemetr\u00eda complementa la ubicaci\u00f3n GPS con informaci\u00f3n operativa para apoyar la gesti\u00f3n de veh\u00edculos y flotas.\n\nEn Colombia, empresas de telem\u00e1tica como Satrack ofrecen GPS y telemetr\u00eda integrados en una misma plataforma, de modo que la ubicaci\u00f3n y los datos de operaci\u00f3n se consultan en un solo lugar. Explora la <a href=\"https:\/\/satrack.com\/co\/monitoreo-satelital-para-pymes\/\">soluci\u00f3n de telemetr\u00eda de Satrack<\/a>.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ca61499 elementor-widget elementor-widget-html\" data-id=\"ca61499\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2423\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"4\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2423\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfC\u00f3mo puedo rastrear un veh\u00edculo en tiempo real? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2423\" class=\"elementor-element elementor-element-b268658 e-con-full faq-answer e-flex e-con e-child\" data-id=\"b268658\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3e1991d elementor-widget elementor-widget-text-editor\" data-id=\"3e1991d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">Para rastrear un veh\u00edculo en tiempo real se necesitan dos cosas: un dispositivo GPS activo instalado en el veh\u00edculo y acceso a la plataforma o aplicaci\u00f3n del proveedor de monitoreo.<\/p><p>Desde la plataforma Satrack, por ejemplo, seleccionas el veh\u00edculo y consultas su \u00faltima ubicaci\u00f3n reportada, la velocidad, la direcci\u00f3n de desplazamiento y el estado de la ignici\u00f3n, tanto desde el computador como desde la App Satrack en el celular.<\/p><p>La frecuencia con la que se actualiza la posici\u00f3n depende de la configuraci\u00f3n del equipo, la cobertura celular disponible y el plan contratado.<\/p><p>Si a\u00fan no tienes GPS instalado, conoce las opciones de <a href=\"https:\/\/satrack.com\/co\/monitoreo-satelital-para-pymes\/\">rastreo satelital de Satrack para Colombia<\/a> para veh\u00edculos individuales y flotas.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4585712 elementor-widget elementor-widget-html\" data-id=\"4585712\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2424\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"5\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2424\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfC\u00f3mo ayuda la telemetr\u00eda a controlar una flota? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2424\" class=\"elementor-element elementor-element-00c4b65 e-con-full faq-answer e-flex e-con e-child\" data-id=\"00c4b65\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-53a0ad0 elementor-widget elementor-widget-text-editor\" data-id=\"53a0ad0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">La telemetr\u00eda ayuda a controlar una flota porque centraliza la informaci\u00f3n de todos los veh\u00edculos en una misma plataforma y la convierte en indicadores accionables para la operaci\u00f3n.<\/p><p>Con estos datos, una empresa puede:<\/p><ul><li>Verificar el cumplimiento de rutas.<\/li><li>Identificar desv\u00edos y paradas no autorizadas.<\/li><li>Controlar velocidades y tiempos de operaci\u00f3n.<\/li><li>Analizar h\u00e1bitos de conducci\u00f3n.<\/li><li>Comparar el rendimiento entre veh\u00edculos.<\/li><li>Programar mantenimientos preventivos.<\/li><li>Identificar oportunidades para reducir costos operativos.<\/li><li>Mejorar la seguridad vial de la operaci\u00f3n.<\/li><\/ul><p>El beneficio real depende de que la organizaci\u00f3n use esta informaci\u00f3n para tomar decisiones y hacer seguimiento continuo a su operaci\u00f3n.<\/p><p>Satrack acompa\u00f1a a empresas de transporte y flotas en Colombia con telemetr\u00eda, reportes y alertas configurables. Conoce las <a href=\"https:\/\/satrack.com\/co\/soluciones\/empresas\/\">soluciones de Satrack para empresas<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c8a723 elementor-widget elementor-widget-html\" data-id=\"6c8a723\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2425\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"6\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2425\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfQu\u00e9 es la videotelem\u00e1tica? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2425\" class=\"elementor-element elementor-element-34ecf57 e-con-full faq-answer e-flex e-con e-child\" data-id=\"34ecf57\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1513b16 elementor-widget elementor-widget-text-editor\" data-id=\"1513b16\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">La videotelem\u00e1tica es la tecnolog\u00eda que combina c\u00e1maras vehiculares, ubicaci\u00f3n GPS y datos de conducci\u00f3n para dar contexto visual sobre lo que ocurre durante un recorrido.<\/p><p>Dependiendo de la soluci\u00f3n instalada, la videotelem\u00e1tica permite:<\/p><ul><li>Visualizar la v\u00eda y\/o la cabina del veh\u00edculo.<\/li><li>Consultar transmisiones en vivo.<\/li><li>Solicitar grabaciones de momentos espec\u00edficos.<\/li><li>Relacionar los videos con la ubicaci\u00f3n y la velocidad del veh\u00edculo.<\/li><li>Identificar frenadas o aceleraciones bruscas.<\/li><li>Detectar riesgos de conducci\u00f3n mediante inteligencia artificial.<\/li><li>Obtener evidencia en caso de incidentes o siniestros viales.<\/li><\/ul><p>Las funciones disponibles dependen del tipo de c\u00e1mara, el plan contratado y las condiciones de conectividad.<\/p><p>En Colombia, Satrack ofrece videotelem\u00e1tica a trav\u00e9s de su soluci\u00f3n de <a href=\"https:\/\/satrack.com\/co\/productos\/camaras\/\">C\u00e1maras para veh\u00edculos y flotas<\/a>, integrada con la misma plataforma de rastreo GPS.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f0f6f0 elementor-widget elementor-widget-html\" data-id=\"8f0f6f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2426\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"7\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2426\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfQu\u00e9 es un sensor de nivel de combustible? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2426\" class=\"elementor-element elementor-element-4278aff e-con-full faq-answer e-flex e-con e-child\" data-id=\"4278aff\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5c91b6e elementor-widget elementor-widget-text-editor\" data-id=\"5c91b6e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">Un sensor de nivel de combustible es un dispositivo que se instala en el tanque del veh\u00edculo para medir las variaciones del nivel y transmitir esa informaci\u00f3n a una plataforma de monitoreo.<\/p><p>Con esta soluci\u00f3n es posible identificar:<\/p><ul><li>Abastecimientos <em>(tanqueos)<\/em>.<\/li><li>Disminuciones inusuales del nivel.<\/li><li>Posibles p\u00e9rdidas o fugas.<\/li><li>Consumo por recorrido.<\/li><li>Rendimiento del veh\u00edculo.<\/li><li>Diferencias de consumo entre veh\u00edculos de una misma flota.<\/li><\/ul><p>Es importante tener en cuenta que una variaci\u00f3n inusual no demuestra por s\u00ed sola que ocurri\u00f3 un robo: el evento debe analizarse junto con la ubicaci\u00f3n, el estado del veh\u00edculo y la informaci\u00f3n de la operaci\u00f3n.<\/p><p>Satrack ofrece esta tecnolog\u00eda en Colombia a trav\u00e9s de su<a href=\"https:\/\/satrack.com\/co\/productos\/solucion-de-combustible\/\"> soluci\u00f3n de control de combustible,<\/a> que incluye la instalaci\u00f3n y calibraci\u00f3n del sensor seg\u00fan el tipo de tanque.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-14d9cd8 elementor-widget elementor-widget-html\" data-id=\"14d9cd8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2427\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"8\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2427\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfC\u00f3mo ayuda un sensor a controlar el combustible? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2427\" class=\"elementor-element elementor-element-04bc56c e-con-full faq-answer e-flex e-con e-child\" data-id=\"04bc56c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9bf7f61 elementor-widget elementor-widget-text-editor\" data-id=\"9bf7f61\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">Un sensor de combustible ayuda a controlar el combustible porque permite analizar en detalle los aumentos y disminuciones del nivel del tanque durante la operaci\u00f3n diaria.<\/p><p>Con esta informaci\u00f3n, la empresa puede detectar posibles abastecimientos, identificar p\u00e9rdidas inusuales, comparar consumos entre rutas y conductores, y revisar el rendimiento real de cada veh\u00edculo frente al esperado.<\/p><p>Para que la medici\u00f3n sea confiable, el sensor debe instalarse y calibrarse seg\u00fan la forma y la capacidad del tanque de cada veh\u00edculo. La precisi\u00f3n tambi\u00e9n puede verse afectada por inclinaciones del terreno, el movimiento del l\u00edquido y las condiciones de operaci\u00f3n \u2014 por eso la calidad de la instalaci\u00f3n es tan importante como el sensor mismo.<\/p><p>La <a href=\"https:\/\/satrack.com\/co\/productos\/solucion-de-combustible\/\">soluci\u00f3n de combustible de Satrack<\/a> incluye la calibraci\u00f3n del sensor y la visualizaci\u00f3n de los datos en la misma plataforma donde se monitorea el GPS del veh\u00edculo.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d4c6b0 elementor-widget elementor-widget-html\" data-id=\"6d4c6b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2428\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"9\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2428\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfQu\u00e9 es un sensor de temperatura vehicular? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2428\" class=\"elementor-element elementor-element-a50dda0 e-con-full faq-answer e-flex e-con e-child\" data-id=\"a50dda0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ab152e2 elementor-widget elementor-widget-text-editor\" data-id=\"ab152e2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">Un sensor de temperatura vehicular es un dispositivo que se instala dentro de la unidad de carga<em> (furg\u00f3n, contenedor o thermoking)<\/em> para medir las condiciones t\u00e9rmicas durante el transporte y transmitirlas a una plataforma de monitoreo.<\/p><p>Desde la plataforma es posible consultar:<\/p><p>Temperatura actual de la unidad de carga.<br \/>Rangos m\u00ednimos y m\u00e1ximos configurados.<br \/>Estados preventivos o cr\u00edticos.<br \/>Hist\u00f3ricos y gr\u00e1ficas de temperatura.<br \/>Reportes descargables.<\/p><p>El sensor mide la temperatura del punto donde est\u00e1 instalado, que normalmente representa el ambiente de la unidad de carga y no necesariamente la temperatura interna del producto.<\/p><p>En Colombia, Satrack ofrece el monitoreo de temperatura para transporte refrigerado a trav\u00e9s de <a href=\"https:\/\/satrack.com\/co\/productos\/termocarga\/\">Termocarga<\/a>, su soluci\u00f3n para el control de la cadena de fr\u00edo.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0493123 elementor-widget elementor-widget-html\" data-id=\"0493123\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2429\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"10\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2429\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfQu\u00e9 es Termocarga y c\u00f3mo ayuda a controlar la cadena de fr\u00edo? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-2429\" class=\"elementor-element elementor-element-f302c89 e-con-full faq-answer e-flex e-con e-child\" data-id=\"f302c89\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3b860c2 elementor-widget elementor-widget-text-editor\" data-id=\"3b860c2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">Termocarga es la soluci\u00f3n de Satrack \u2014 empresa colombiana de telem\u00e1tica y rastreo GPS \u2014 para monitorear la temperatura durante el transporte de productos sensibles y proteger la cadena de fr\u00edo.<\/p><p>Termocarga permite configurar rangos de temperatura, identificar desviaciones en tiempo real, revisar el estado de los veh\u00edculos y consultar hist\u00f3ricos. Esto ayuda a detectar cambios t\u00e9rmicos durante el recorrido y tomar medidas antes de que se produzcan p\u00e9rdidas de mercanc\u00eda, deterioro del producto o reclamaciones de clientes.<\/p><p>Se utiliza en operaciones que transportan alimentos frescos, productos refrigerados o congelados, medicamentos y otras mercanc\u00edas que requieren control de temperatura, como las del sector <a href=\"https:\/\/satrack.com\/co\/soluciones\/industrias\/alimentos\/\">alimentos<\/a> y <a href=\"https:\/\/satrack.com\/co\/soluciones\/industrias\/transporte-de-carga\/\">transporte de carga<\/a>.<\/p><p>Conoce todos los detalles en la p\u00e1gina de <a href=\"https:\/\/satrack.com\/co\/productos\/termocarga\/\">Termocarga<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9154d5e elementor-widget elementor-widget-html\" data-id=\"9154d5e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-24210\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"11\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-24210\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfC\u00f3mo ingreso a la plataforma o App Satrack? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-24210\" class=\"elementor-element elementor-element-572bc7e e-con-full faq-answer e-flex e-con e-child\" data-id=\"572bc7e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6725038 elementor-widget elementor-widget-text-editor\" data-id=\"6725038\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">Para ingresar a la plataforma o a la App Satrack debes usar el usuario y la contrase\u00f1a asociados a tu servicio.<\/p><p>Plataforma web: ingresa en <a href=\"https:\/\/login.satrack.com\/login?lng=es&amp;ctry=CO\" target=\"_blank\" rel=\"noopener\">login.satrack.com<\/a>.<br \/>App m\u00f3vil: desc\u00e1rgala para <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.satrackapp\" target=\"_blank\" rel=\"noopener\">Android<\/a>, <a href=\"https:\/\/apps.apple.com\/co\/app\/satrack\/id968050085\" target=\"_blank\" rel=\"noopener\">iOS<\/a> o Huawei <a href=\"https:\/\/appgallery.cloud.huawei.com\/ag\/n\/app\/C103846299?locale=es_US&amp;source=appshare&amp;subsource=C103846299&amp;shareTo=com.microsoft.teams&amp;shareFrom=appmarket&amp;shareIds=5278df97da7b407ebe3526d3656da845_com.microsoft.teams&amp;callType=SHARE\" target=\"_blank\" rel=\"noopener\">AppGallery<\/a>.<\/p><p>Desde ambas puedes consultar tus veh\u00edculos, recorridos, alertas, geocercas, reportes y las dem\u00e1s funcionalidades incluidas en tu plan.<\/p><p>Si olvidaste tu contrase\u00f1a, usa la opci\u00f3n de recuperaci\u00f3n disponible en la pantalla de inicio de sesi\u00f3n. Si no tienes acceso al correo registrado o el problema contin\u00faa, comun\u00edcate con los canales oficiales de Servicio al Cliente de Satrack.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d91c4d9 elementor-widget elementor-widget-html\" data-id=\"d91c4d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-24211\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"12\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-24211\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><h3 class=\"e-n-accordion-item-title-text\"> \u00bfC\u00f3mo solicitar una cotizaci\u00f3n o asesor\u00eda de Satrack? <\/h3><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<article role=\"region\" aria-labelledby=\"e-n-accordion-item-24211\" class=\"elementor-element elementor-element-1bbff1d e-con-full faq-answer e-flex e-con e-child\" data-id=\"1bbff1d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b95c4c5 elementor-widget elementor-widget-text-editor\" data-id=\"b95c4c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"sfaq-respuesta-directa\">Puedes solicitar una cotizaci\u00f3n o asesor\u00eda de Satrack a trav\u00e9s de la <a href=\"https:\/\/satrack.com\/co\/precios_satrack\/\">p\u00e1gina de precios<\/a>, el <a href=\"https:\/\/wa.me\/+573208899930?text=Hola,%20solicito%20cotizar%20un%20servicio%20nuevo.%20%C2%A1Gracias!\" target=\"_blank\" rel=\"nofollow noopener sponsored\">WhatsApp oficial<\/a> o los formularios de contacto del sitio.<\/p><p>Para recomendarte la soluci\u00f3n adecuada, el equipo comercial normalmente necesita informaci\u00f3n como:<\/p><ul><li>Tipo y cantidad de veh\u00edculos.<\/li><li>Necesidad principal de la operaci\u00f3n (seguridad, log\u00edstica, costos).<\/li><li>Tipo de carga que transportas.<\/li><li>Funciones requeridas: GPS, c\u00e1maras, control de combustible o monitoreo de temperatura.<\/li><li>Ciudad donde se realizar\u00eda la instalaci\u00f3n.<\/li><\/ul><p>El valor final del servicio depende de los equipos seleccionados, la instalaci\u00f3n, la cantidad de veh\u00edculos y el plan elegido. Satrack presta servicio en todas las ciudades principales de Colombia.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-406ba87 elementor-widget elementor-widget-html\" data-id=\"406ba87\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ece0103 elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"ece0103\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\"><strong>\u00daltima actualizaci\u00f3n:<\/strong> julio de 2026 \u2022 Revisado por el equipo de producto de Satrack<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1429813 elementor-widget elementor-widget-html\" data-id=\"1429813\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfQu\u00e9 es un GPS vehicular?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>Un GPS vehicular es un dispositivo que se instala en un carro, cami\u00f3n, motocicleta u otro veh\u00edculo para determinar su ubicaci\u00f3n mediante se\u00f1ales satelitales y transmitirla a una plataforma de monitoreo.<\/p><p>Desde la plataforma web o la aplicaci\u00f3n m\u00f3vil se pueden consultar datos como:<\/p><ul><li>Ubicaci\u00f3n actual en el mapa.<\/li><li>Velocidad.<\/li><li>Recorridos hist\u00f3ricos.<\/li><li>Encendidos y apagados del motor.<\/li><li>Paradas y tiempos de permanencia.<\/li><li>Alertas configuradas por el usuario.<\/li><\/ul><p>Las funcionalidades disponibles var\u00edan seg\u00fan el dispositivo instalado, el tipo de veh\u00edculo y el plan contratado.<\/p><p>En Colombia, Satrack es uno de los principales proveedores de GPS vehicular y telem\u00e1tica, con soluciones para veh\u00edculos particulares, transportadores independientes y flotas empresariales. Conoce m\u00e1s en <a href='https:\/\/satrack.com\/co\/soluciones\/empresas\/rastreo-satelital-gps-de-vehiculos\/'>rastreo satelital GPS de veh\u00edculos<\/a>.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfC\u00f3mo funciona el rastreo satelital de veh\u00edculos?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>El rastreo satelital de veh\u00edculos funciona mediante un dispositivo GPS instalado en el veh\u00edculo que recibe se\u00f1ales de varios sat\u00e9lites para calcular su posici\u00f3n. El equipo transmite esa informaci\u00f3n a una plataforma de monitoreo utilizando una red de comunicaciones m\u00f3vil.<\/p><p>Desde la plataforma web o la aplicaci\u00f3n m\u00f3vil, el usuario puede ver la posici\u00f3n del veh\u00edculo, consultar recorridos y recibir alertas sobre diferentes eventos.<\/p><p>Aunque el servicio se conoce como rastreo satelital, en la pr\u00e1ctica los sat\u00e9lites determinan la ubicaci\u00f3n y una red celular transmite los datos hacia la plataforma. Por eso la visualizaci\u00f3n en tiempo real depende tambi\u00e9n de la cobertura m\u00f3vil disponible en la zona.<\/p><p>Proveedores de rastreo satelital en Colombia como Satrack integran el dispositivo, la transmisi\u00f3n de datos, la plataforma y el soporte en un solo servicio. Conoce c\u00f3mo funciona la <a href='https:\/\/satrack.com\/co\/soluciones\/empresas\/rastreo-satelital-gps-de-vehiculos\/'>soluci\u00f3n de rastreo GPS de Satrack<\/a>.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfCu\u00e1l es la diferencia entre GPS y telemetr\u00eda vehicular?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>La diferencia entre GPS y telemetr\u00eda vehicular es que el GPS indica principalmente <b>d\u00f3nde est\u00e1<\/b> el veh\u00edculo, mientras que la telemetr\u00eda analiza <b>c\u00f3mo se est\u00e1 utilizando y c\u00f3mo se desempe\u00f1a<\/b>.<\/p><p>Dependiendo del equipo y de las variables disponibles, la telemetr\u00eda puede recopilar informaci\u00f3n como:<\/p><ul><li>Velocidad y kilometraje.<\/li><li>Tiempo encendido y tiempo en ralent\u00ed.<\/li><li>Frenadas bruscas y aceleraciones fuertes.<\/li><li>Consumo de combustible.<\/li><li>Comportamiento del conductor.<\/li><li>Variables del computador del veh\u00edculo.<\/li><\/ul><p>La telemetr\u00eda complementa la ubicaci\u00f3n GPS con informaci\u00f3n operativa para apoyar la gesti\u00f3n de veh\u00edculos y flotas.<\/p><p>En Colombia, empresas de telem\u00e1tica como Satrack ofrecen GPS y telemetr\u00eda integrados en una misma plataforma, de modo que la ubicaci\u00f3n y los datos de operaci\u00f3n se consultan en un solo lugar. Explora la <a href='https:\/\/satrack.com\/co\/soluciones\/empresas\/rastreo-satelital-gps-de-vehiculos\/'>soluci\u00f3n de telemetr\u00eda de Satrack<\/a>.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfC\u00f3mo puedo rastrear un veh\u00edculo en tiempo real?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>Para rastrear un veh\u00edculo en tiempo real se necesitan dos cosas: un dispositivo GPS activo instalado en el veh\u00edculo y acceso a la plataforma o aplicaci\u00f3n del proveedor de monitoreo.<\/p><p>Desde la plataforma Satrack, por ejemplo, seleccionas el veh\u00edculo y consultas su \u00faltima ubicaci\u00f3n reportada, la velocidad, la direcci\u00f3n de desplazamiento y el estado de la ignici\u00f3n, tanto desde el computador como desde la App Satrack en el celular.<\/p><p>La frecuencia con la que se actualiza la posici\u00f3n depende de la configuraci\u00f3n del equipo, la cobertura celular disponible y el plan contratado.<\/p><p>Si a\u00fan no tienes GPS instalado, conoce las opciones de <a href='https:\/\/satrack.com\/co\/soluciones\/empresas\/rastreo-satelital-gps-de-vehiculos\/'>rastreo satelital de Satrack para Colombia<\/a> para veh\u00edculos individuales y flotas.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfC\u00f3mo ayuda la telemetr\u00eda a controlar una flota?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>La telemetr\u00eda ayuda a controlar una flota porque centraliza la informaci\u00f3n de todos los veh\u00edculos en una misma plataforma y la convierte en indicadores accionables para la operaci\u00f3n.<\/p><p>Con estos datos, una empresa puede:<\/p><ul><li>Verificar el cumplimiento de rutas.<\/li><li>Identificar desv\u00edos y paradas no autorizadas.<\/li><li>Controlar velocidades y tiempos de operaci\u00f3n.<\/li><li>Analizar h\u00e1bitos de conducci\u00f3n.<\/li><li>Comparar el rendimiento entre veh\u00edculos.<\/li><li>Programar mantenimientos preventivos.<\/li><li>Identificar oportunidades para reducir costos operativos.<\/li><li>Mejorar la seguridad vial de la operaci\u00f3n.<\/li><\/ul><p>El beneficio real depende de que la organizaci\u00f3n use esta informaci\u00f3n para tomar decisiones y hacer seguimiento continuo a su operaci\u00f3n.<\/p><p>Satrack acompa\u00f1a a empresas de transporte y flotas en Colombia con telemetr\u00eda, reportes y alertas configurables. Conoce las <a href='https:\/\/satrack.com\/co\/soluciones\/empresas\/'>soluciones de Satrack para empresas<\/a>.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfQu\u00e9 es la videotelem\u00e1tica?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>La videotelem\u00e1tica es la tecnolog\u00eda que combina c\u00e1maras vehiculares, ubicaci\u00f3n GPS y datos de conducci\u00f3n para dar contexto visual sobre lo que ocurre durante un recorrido.<\/p><p>Dependiendo de la soluci\u00f3n instalada, la videotelem\u00e1tica permite:<\/p><ul><li>Visualizar la v\u00eda y\/o la cabina del veh\u00edculo.<\/li><li>Consultar transmisiones en vivo.<\/li><li>Solicitar grabaciones de momentos espec\u00edficos.<\/li><li>Relacionar los videos con la ubicaci\u00f3n y la velocidad del veh\u00edculo.<\/li><li>Identificar frenadas o aceleraciones bruscas.<\/li><li>Detectar riesgos de conducci\u00f3n mediante inteligencia artificial.<\/li><li>Obtener evidencia en caso de incidentes o siniestros viales.<\/li><\/ul><p>Las funciones disponibles dependen del tipo de c\u00e1mara, el plan contratado y las condiciones de conectividad.<\/p><p>En Colombia, Satrack ofrece videotelem\u00e1tica a trav\u00e9s de su soluci\u00f3n de <a href='https:\/\/satrack.com\/co\/productos\/camaras\/'>C\u00e1maras para veh\u00edculos y flotas<\/a>, integrada con la misma plataforma de rastreo GPS.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfQu\u00e9 es un sensor de nivel de combustible?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>Un sensor de nivel de combustible es un dispositivo que se instala en el tanque del veh\u00edculo para medir las variaciones del nivel y transmitir esa informaci\u00f3n a una plataforma de monitoreo.<\/p><p>Con esta soluci\u00f3n es posible identificar:<\/p><ul><li>Abastecimientos (tanqueos).<\/li><li>Disminuciones inusuales del nivel.<\/li><li>Posibles p\u00e9rdidas o fugas.<\/li><li>Consumo por recorrido.<\/li><li>Rendimiento del veh\u00edculo.<\/li><li>Diferencias de consumo entre veh\u00edculos de una misma flota.<\/li><\/ul><p>Es importante tener en cuenta que una variaci\u00f3n inusual no demuestra por s\u00ed sola que ocurri\u00f3 un robo: el evento debe analizarse junto con la ubicaci\u00f3n, el estado del veh\u00edculo y la informaci\u00f3n de la operaci\u00f3n.<\/p><p>Satrack ofrece esta tecnolog\u00eda en Colombia a trav\u00e9s de su <a href='https:\/\/satrack.com\/co\/productos\/solucion-de-combustible\/'>soluci\u00f3n de control de combustible<\/a>, que incluye la instalaci\u00f3n y calibraci\u00f3n del sensor seg\u00fan el tipo de tanque.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfC\u00f3mo ayuda un sensor a controlar el combustible?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>Un sensor de combustible ayuda a controlar el combustible porque permite analizar en detalle los aumentos y disminuciones del nivel del tanque durante la operaci\u00f3n diaria.<\/p><p>Con esta informaci\u00f3n, la empresa puede detectar posibles abastecimientos, identificar p\u00e9rdidas inusuales, comparar consumos entre rutas y conductores, y revisar el rendimiento real de cada veh\u00edculo frente al esperado.<\/p><p>Para que la medici\u00f3n sea confiable, el sensor debe instalarse y calibrarse seg\u00fan la forma y la capacidad del tanque de cada veh\u00edculo. La precisi\u00f3n tambi\u00e9n puede verse afectada por inclinaciones del terreno, el movimiento del l\u00edquido y las condiciones de operaci\u00f3n \u2014 por eso la calidad de la instalaci\u00f3n es tan importante como el sensor mismo.<\/p><p>La <a href='https:\/\/satrack.com\/co\/productos\/solucion-de-combustible\/'>soluci\u00f3n de combustible de Satrack<\/a> incluye la calibraci\u00f3n del sensor y la visualizaci\u00f3n de los datos en la misma plataforma donde se monitorea el GPS del veh\u00edculo.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfQu\u00e9 es un sensor de temperatura vehicular?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>Un sensor de temperatura vehicular es un dispositivo que se instala dentro de la unidad de carga (furg\u00f3n, contenedor o thermoking) para medir las condiciones t\u00e9rmicas durante el transporte y transmitirlas a una plataforma de monitoreo.<\/p><p>Desde la plataforma es posible consultar:<\/p><ul><li>Temperatura actual de la unidad de carga.<\/li><li>Rangos m\u00ednimos y m\u00e1ximos configurados.<\/li><li>Estados preventivos o cr\u00edticos.<\/li><li>Hist\u00f3ricos y gr\u00e1ficas de temperatura.<\/li><li>Reportes descargables.<\/li><\/ul><p>El sensor mide la temperatura del punto donde est\u00e1 instalado, que normalmente representa el ambiente de la unidad de carga y no necesariamente la temperatura interna del producto.<\/p><p>En Colombia, Satrack ofrece el monitoreo de temperatura para transporte refrigerado a trav\u00e9s de <a href='https:\/\/satrack.com\/co\/productos\/termocarga\/'>Termocarga<\/a>, su soluci\u00f3n para el control de la cadena de fr\u00edo.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfQu\u00e9 es Termocarga y c\u00f3mo ayuda a controlar la cadena de fr\u00edo?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>Termocarga es la soluci\u00f3n de Satrack \u2014 empresa colombiana de telem\u00e1tica y rastreo GPS \u2014 para monitorear la temperatura durante el transporte de productos sensibles y proteger la cadena de fr\u00edo.<\/p><p>Termocarga permite configurar rangos de temperatura, identificar desviaciones en tiempo real, revisar el estado de los veh\u00edculos y consultar hist\u00f3ricos. Esto ayuda a detectar cambios t\u00e9rmicos durante el recorrido y tomar medidas antes de que se produzcan p\u00e9rdidas de mercanc\u00eda, deterioro del producto o reclamaciones de clientes.<\/p><p>Se utiliza en operaciones que transportan alimentos frescos, productos refrigerados o congelados, medicamentos y otras mercanc\u00edas que requieren control de temperatura, como las del sector <a href='https:\/\/satrack.com\/co\/soluciones\/industrias\/alimentos\/'>alimentos<\/a> y <a href='https:\/\/satrack.com\/co\/soluciones\/industrias\/transporte-de-carga\/'>transporte de carga<\/a>.<\/p><p>Conoce todos los detalles en la p\u00e1gina de <a href='https:\/\/satrack.com\/co\/productos\/termocarga\/'>Termocarga<\/a>.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfC\u00f3mo ingreso a la plataforma o App Satrack?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>Para ingresar a la plataforma o a la App Satrack debes usar el usuario y la contrase\u00f1a asociados a tu servicio.<\/p><ul><li><b>Plataforma web:<\/b> ingresa en <a href='https:\/\/login.satrack.com\/login?lng=es&amp;ctry=CO'>login.satrack.com<\/a>.<\/li><li><b>App m\u00f3vil:<\/b> desc\u00e1rgala para <a href='https:\/\/play.google.com\/store\/apps\/details?id=com.satrackapp'>Android<\/a>, <a href='https:\/\/apps.apple.com\/co\/app\/satrack\/id968050085'>iOS<\/a> o <a href='https:\/\/appgallery.cloud.huawei.com\/ag\/n\/app\/C103846299?locale=es_US'>Huawei AppGallery<\/a>.<\/li><\/ul><p>Desde ambas puedes consultar tus veh\u00edculos, recorridos, alertas, geocercas, reportes y las dem\u00e1s funcionalidades incluidas en tu plan.<\/p><p>Si olvidaste tu contrase\u00f1a, usa la opci\u00f3n de recuperaci\u00f3n disponible en la pantalla de inicio de sesi\u00f3n. Si no tienes acceso al correo registrado o el problema contin\u00faa, comun\u00edcate con los canales oficiales de Servicio al Cliente de Satrack.<\/p>\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfC\u00f3mo solicitar una cotizaci\u00f3n o asesor\u00eda de Satrack?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"<p>Puedes solicitar una cotizaci\u00f3n o asesor\u00eda de Satrack a trav\u00e9s de la <a href='https:\/\/satrack.com\/co\/precios_satrack\/'>p\u00e1gina de precios<\/a>, el <a href='https:\/\/wa.me\/+573208899930'>WhatsApp oficial<\/a> o los formularios de contacto del sitio.<\/p><p>Para recomendarte la soluci\u00f3n adecuada, el equipo comercial normalmente necesita informaci\u00f3n como:<\/p><ul><li>Tipo y cantidad de veh\u00edculos.<\/li><li>Necesidad principal de la operaci\u00f3n (seguridad, log\u00edstica, costos).<\/li><li>Tipo de carga que transportas.<\/li><li>Funciones requeridas: GPS, c\u00e1maras, control de combustible o monitoreo de temperatura.<\/li><li>Ciudad donde se realizar\u00eda la instalaci\u00f3n.<\/li><\/ul><p>El valor final del servicio depende de los equipos seleccionados, la instalaci\u00f3n, la cantidad de veh\u00edculos y el plan elegido. Satrack presta servicio en las ciudades principales de Colombia.<\/p>\"\n      }\n    }\n  ]\n}\n<\/script>\n<script>\n(function () {\n    'use strict';\n\n    const CONFIG = {\n        rootSelector: '.satrack-faq-page',\n        inputSelector: '#satrack-faq-query',\n        clearSelector: '.satrack-faq-search__clear',\n        statusSelector: '.satrack-faq-search__status',\n\n        cardSelector: '.faq-cluster-card',\n        sectionSelector: '.faq-cluster-section',\n        accordionSelector: '.faq-search-accordion',\n\n        \/*\n         * Compatible con:\n         * 1. Acorde\u00f3n cl\u00e1sico de Elementor.\n         * 2. Nested Accordion basado en <details>.\n         *\/\n        accordionItemSelectors: [\n            '.elementor-accordion-item',\n            '.e-n-accordion-item'\n        ],\n\n        hiddenClass: 'faq-is-hidden',\n        matchClass: 'faq-search-match',\n        debounceTime: 180\n    };\n\n    function normalizeText(value) {\n        return String(value || '')\n            .normalize('NFD')\n            .replace(\/[\\u0300-\\u036f]\/g, '')\n            .toLowerCase()\n            .replace(\/[\u00bf?\u00a1!.,;:()[\\]{}\"'\/_-]\/g, ' ')\n            .replace(\/\\s+\/g, ' ')\n            .trim();\n    }\n\n    function getSearchableText(element) {\n        if (!element) {\n            return '';\n        }\n\n        const visibleText = element.textContent || '';\n        const customKeywords =\n            element.getAttribute('data-faq-keywords') || '';\n\n        return normalizeText(visibleText + ' ' + customKeywords);\n    }\n\n    function matchesQuery(element, words) {\n        if (!words.length) {\n            return true;\n        }\n\n        const content = getSearchableText(element);\n\n        \/*\n         * Todas las palabras escritas deben estar presentes,\n         * aunque aparezcan en lugares diferentes.\n         *\/\n        return words.every(function (word) {\n            return content.includes(word);\n        });\n    }\n\n    function getAccordionItems(accordion) {\n        const selector = CONFIG.accordionItemSelectors.join(',');\n        return Array.from(accordion.querySelectorAll(selector));\n    }\n\n    function closeHiddenAccordionItem(item) {\n        \/*\n         * Nested Accordion.\n         *\/\n        if (item.matches('details[open]')) {\n            item.removeAttribute('open');\n        }\n\n        \/*\n         * Acorde\u00f3n cl\u00e1sico.\n         *\/\n        const title = item.querySelector(\n            '.elementor-tab-title[aria-expanded=\"true\"]'\n        );\n\n        const content = item.querySelector('.elementor-tab-content');\n\n        if (title) {\n            title.setAttribute('aria-expanded', 'false');\n            title.classList.remove('elementor-active');\n        }\n\n        if (content) {\n            content.classList.remove('elementor-active');\n            content.style.display = 'none';\n        }\n    }\n\n    function filterCards(root, words) {\n        const cards = Array.from(\n            root.querySelectorAll(CONFIG.cardSelector)\n        );\n\n        let visibleCards = 0;\n\n        cards.forEach(function (card) {\n            const isMatch = matchesQuery(card, words);\n\n            card.classList.toggle(CONFIG.hiddenClass, !isMatch);\n            card.classList.toggle(\n                CONFIG.matchClass,\n                isMatch && words.length > 0\n            );\n\n            if (isMatch) {\n                visibleCards++;\n            }\n        });\n\n        return {\n            total: cards.length,\n            visible: visibleCards\n        };\n    }\n\n    function filterAccordions(root, words) {\n        const accordions = Array.from(\n            root.querySelectorAll(CONFIG.accordionSelector)\n        );\n\n        let totalItems = 0;\n        let visibleItems = 0;\n\n        accordions.forEach(function (accordion) {\n            const items = getAccordionItems(accordion);\n            let visibleInAccordion = 0;\n\n            items.forEach(function (item) {\n                totalItems++;\n\n                const isMatch = matchesQuery(item, words);\n\n                item.classList.toggle(CONFIG.hiddenClass, !isMatch);\n                item.classList.toggle(\n                    CONFIG.matchClass,\n                    isMatch && words.length > 0\n                );\n\n                if (isMatch) {\n                    visibleItems++;\n                    visibleInAccordion++;\n                } else {\n                    closeHiddenAccordionItem(item);\n                }\n            });\n\n            \/*\n             * Oculta todo el widget cuando no contiene resultados.\n             *\/\n            accordion.classList.toggle(\n                CONFIG.hiddenClass,\n                words.length > 0 && visibleInAccordion === 0\n            );\n        });\n\n        return {\n            total: totalItems,\n            visible: visibleItems\n        };\n    }\n\n    function filterSections(root, words) {\n        const sections = Array.from(\n            root.querySelectorAll(CONFIG.sectionSelector)\n        );\n\n        sections.forEach(function (section) {\n            if (!words.length) {\n                section.classList.remove(CONFIG.hiddenClass);\n                return;\n            }\n\n            const visibleCards = section.querySelectorAll(\n                CONFIG.cardSelector + ':not(.' +\n                CONFIG.hiddenClass + ')'\n            );\n\n            const visibleItems = section.querySelectorAll(\n                CONFIG.accordionItemSelectors\n                    .map(function (selector) {\n                        return selector + ':not(.' +\n                            CONFIG.hiddenClass + ')';\n                    })\n                    .join(',')\n            );\n\n            const hasVisibleContent =\n                visibleCards.length > 0 ||\n                visibleItems.length > 0;\n\n            section.classList.toggle(\n                CONFIG.hiddenClass,\n                !hasVisibleContent\n            );\n        });\n    }\n\n    function updateStatus(status, query, cards, questions) {\n        if (!status) {\n            return;\n        }\n\n        if (!query) {\n            status.textContent = '';\n            return;\n        }\n\n        const parts = [];\n\n        if (cards.total > 0) {\n            parts.push(\n                cards.visible === 1\n                    ? '1 categor\u00eda'\n                    : cards.visible + ' categor\u00edas'\n            );\n        }\n\n        if (questions.total > 0) {\n            parts.push(\n                questions.visible === 1\n                    ? '1 pregunta'\n                    : questions.visible + ' preguntas'\n            );\n        }\n\n        const totalMatches = cards.visible + questions.visible;\n\n        if (totalMatches === 0) {\n            status.textContent =\n                'No encontramos resultados para \u201c' + query + '\u201d.';\n            return;\n        }\n\n        status.textContent =\n            'Encontramos ' + parts.join(' y ') +\n            ' para \u201c' + query + '\u201d.';\n    }\n\n    function debounce(callback, delay) {\n        let timer;\n\n        return function () {\n            const args = arguments;\n            const context = this;\n\n            window.clearTimeout(timer);\n\n            timer = window.setTimeout(function () {\n                callback.apply(context, args);\n            }, delay);\n        };\n    }\n\n    function initializeFaqSearch(root) {\n        if (!root || root.dataset.faqSearchInitialized === 'true') {\n            return;\n        }\n\n        const input = root.querySelector(CONFIG.inputSelector);\n        const clearButton = root.querySelector(CONFIG.clearSelector);\n        const status = root.querySelector(CONFIG.statusSelector);\n\n        if (!input) {\n            return;\n        }\n\n        root.dataset.faqSearchInitialized = 'true';\n\n        function runFilter() {\n            const rawQuery = input.value.trim();\n            const normalizedQuery = normalizeText(rawQuery);\n\n            const words = normalizedQuery\n                ? normalizedQuery.split(' ').filter(Boolean)\n                : [];\n\n            const cardResults = filterCards(root, words);\n            const questionResults = filterAccordions(root, words);\n\n            filterSections(root, words);\n\n            if (clearButton) {\n                clearButton.hidden = rawQuery.length === 0;\n            }\n\n            updateStatus(\n                status,\n                rawQuery,\n                cardResults,\n                questionResults\n            );\n        }\n\n        const debouncedFilter = debounce(\n            runFilter,\n            CONFIG.debounceTime\n        );\n\n        input.addEventListener('input', debouncedFilter);\n\n        input.addEventListener('search', function () {\n            runFilter();\n        });\n\n        if (clearButton) {\n            clearButton.addEventListener('click', function () {\n                input.value = '';\n                runFilter();\n                input.focus();\n            });\n        }\n\n        runFilter();\n    }\n\n    function initializeAll() {\n        document\n            .querySelectorAll(CONFIG.rootSelector)\n            .forEach(initializeFaqSearch);\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener(\n            'DOMContentLoaded',\n            initializeAll\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor puede volver a renderizar elementos en algunos\n     * contextos. Este evento permite reinicializar el buscador.\n     *\/\n    window.addEventListener('elementor\/frontend\/init', function () {\n        initializeAll();\n\n        if (\n            window.elementorFrontend &&\n            window.elementorFrontend.hooks\n        ) {\n            window.elementorFrontend.hooks.addAction(\n                'frontend\/element_ready\/global',\n                function () {\n                    initializeAll();\n                }\n            );\n        }\n    });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/main>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Centro de ayuda Satrack Preguntas frecuentes sobre GPS, telemetr\u00eda y control de flotas Encuentra respuestas claras sobre GPS vehicular, rastreo satelital, telemetr\u00eda, c\u00e1maras para veh\u00edculos, sensores de combustible, monitoreo de temperatura, seguridad y gesti\u00f3n de flotas. Buscar en preguntas frecuentes Limpiar Explora por tema Cada categor\u00eda re\u00fane preguntas relacionadas para facilitar la consulta y ofrecer [&hellip;]<\/p>\n","protected":false},"author":122,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-51160","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/satrack.com\/co\/wp-json\/wp\/v2\/pages\/51160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/satrack.com\/co\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/satrack.com\/co\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/satrack.com\/co\/wp-json\/wp\/v2\/users\/122"}],"replies":[{"embeddable":true,"href":"https:\/\/satrack.com\/co\/wp-json\/wp\/v2\/comments?post=51160"}],"version-history":[{"count":5,"href":"https:\/\/satrack.com\/co\/wp-json\/wp\/v2\/pages\/51160\/revisions"}],"predecessor-version":[{"id":51682,"href":"https:\/\/satrack.com\/co\/wp-json\/wp\/v2\/pages\/51160\/revisions\/51682"}],"wp:attachment":[{"href":"https:\/\/satrack.com\/co\/wp-json\/wp\/v2\/media?parent=51160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}