{"id":11245,"date":"2025-07-23T06:28:08","date_gmt":"2025-07-23T06:28:08","guid":{"rendered":"https:\/\/ganapathys126.sg-host.com\/?page_id=11245"},"modified":"2026-01-01T07:53:38","modified_gmt":"2026-01-01T07:53:38","slug":"api","status":"publish","type":"page","link":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/","title":{"rendered":"API"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11245\" class=\"elementor elementor-11245\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-63febb4 grad-bg-color e-flex e-con-boxed e-con e-parent\" data-id=\"63febb4\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-d68e9d8 e-con-full e-flex e-con e-child\" data-id=\"d68e9d8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-04f6863 elementor-widget elementor-widget-heading\" data-id=\"04f6863\" 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\">The Future of API Testing is Here: Drive ROI with Qyrus' <span class=\"green-text\">AI-First Approach.<\/span><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21afe46 main-cta green-cta arrr-cta  bannerr-cta elementor-align-left elementor-widget elementor-widget-button\" data-id=\"21afe46\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Get Started<\/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-5e60cfa e-con-full e-flex e-con e-child\" data-id=\"5e60cfa\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d253954 elementor-widget elementor-widget-video_popup_widget\" data-id=\"d253954\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"video_popup_widget.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n    <div class=\"video-popup-wrapper position-relative d-inline-block\">\n                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-6.webp\" class=\"img-fluid vid-thumb\" alt=\"Video Thumbnail\" \/>\n        \n            <\/div>\n\n    \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-971125d e-flex e-con-boxed e-con e-parent\" data-id=\"971125d\" 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-f9948e0 trusted-by-wrapper elementor-widget elementor-widget-heading\" data-id=\"f9948e0\" 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\">Powering Quality For<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a0675bc trust-carousal elementor-widget elementor-widget-image-carousel\" data-id=\"a0675bc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;slides_to_show&quot;:&quot;6&quot;,&quot;navigation&quot;:&quot;none&quot;,&quot;autoplay_speed&quot;:0,&quot;speed&quot;:4000,&quot;slides_to_show_tablet_extra&quot;:&quot;4&quot;,&quot;slides_to_show_tablet&quot;:&quot;3&quot;,&quot;slides_to_show_mobile&quot;:&quot;2&quot;,&quot;slides_to_show_mobile_extra&quot;:&quot;2&quot;,&quot;image_spacing_custom_mobile_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:20,&quot;sizes&quot;:[]},&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:45,&quot;sizes&quot;:[]},&quot;autoplay&quot;:&quot;yes&quot;,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;infinite&quot;:&quot;yes&quot;,&quot;image_spacing_custom_laptop&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_tablet_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image-carousel.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-image-carousel-wrapper swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Image Carousel\" dir=\"ltr\">\n\t\t\t<div class=\"elementor-image-carousel swiper-wrapper\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 7\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Untitled-2_shawbrook-1.svg\" alt=\"Untitled-2_shawbrook\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 7\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/columbia.svg\" alt=\"columbia\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 7\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/subaru.svg\" alt=\"subaru\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 of 7\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/shawbrook.svg\" alt=\"_shawbrook\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"5 of 7\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/john.svg\" alt=\"_john\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"6 of 7\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/monument.svg\" alt=\"_monument\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"7 of 7\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/patelco.svg\" alt=\"_patelco\" \/><\/figure><\/div>\t\t\t<\/div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5d31df9 grad-bg-or api-video-popup-sec e-flex e-con-boxed e-con e-parent\" data-id=\"5d31df9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4a6c116 e-con-full e-flex e-con e-child\" data-id=\"4a6c116\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5004e9d elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"5004e9d\" 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\">The Command Centre: Intelligent, Codeless, Complete API Mastery<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-694b468 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"694b468\" 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 style=\"font-weight: 400;\">Automate every interaction, validate every response, and drive faster releases.<\/span><\/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-b3a0957 e-con-full e-flex e-con e-child\" data-id=\"b3a0957\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-89323f1 e-con-full e-flex e-con e-child\" data-id=\"89323f1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-93208d6 elementor-widget__width-initial zig-img elementor-widget elementor-widget-image\" data-id=\"93208d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5-1.svg\" class=\"attachment-large size-large wp-image-14132\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b34368e e-con-full e-flex e-con e-child\" data-id=\"b34368e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0e27e99 elementor-widget elementor-widget-heading\" data-id=\"0e27e99\" 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\">Intelligent Automation: The AI Brain Behind Flawless APIs<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c53365 elementor-widget elementor-widget-text-editor\" data-id=\"3c53365\" 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 style=\"font-weight: 400;\">Streamline API test creation with Qyrus&#8217; AI Bot (Nova) and ensure comprehensive coverage by automatically suggesting assertions and generating tests from UI interactions. <\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a5842b shadow-cta green-cta elementor-align-right elementor-widget elementor-widget-button\" data-id=\"9a5842b\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Get Started<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7459a40 e-con-full e-flex e-con e-child\" data-id=\"7459a40\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-59786a1 elementor-widget elementor-widget-video_popup_widget\" data-id=\"59786a1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"video_popup_widget.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n    <div class=\"video-popup-wrapper position-relative d-inline-block\">\n                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-8.svg\" class=\"img-fluid vid-thumb\" alt=\"Video Thumbnail\" \/>\n        \n                    <a href=\"#\" data-bs-toggle=\"modal\" data-bs-target=\"#videoModal_59786a1\" class=\"video-play-button position-absolute top-50 start-50 translate-middle\">\n                <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/07\/play.svg\" alt=\"Play Icon\" \/>\n            <\/a>\n            <\/div>\n\n            <!-- Bootstrap Modal -->\n        <div class=\"modal fade\" id=\"videoModal_59786a1\" tabindex=\"-1\" aria-hidden=\"true\">\n            <div class=\"modal-dialog modal-lg modal-dialog-centered\">\n                <div class=\"modal-content bg-dark\">\n                    <div class=\"modal-header border-0\">\n                        <a type=\"button\" class=\"btn-close btn-close-white\" data-bs-dismiss=\"modal\" aria-label=\"Close\"><\/a>\n                    <\/div>\n                    <div class=\"modal-body p-0\">\n                        <div class=\"ratio ratio-16x9\">\n                            <iframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/-WxBUl2IXBw?si=9p7M3oBCsj3rLdc_&amp;controls=0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <script>\n            jQuery(document).ready(function($) {\n                $('#videoModal_59786a1').on('hidden.bs.modal', function () {\n                    var $iframe = $(this).find('iframe');\n                    if ($iframe.length) {\n                        $iframe.attr('src', $iframe.attr('src'));\n                    }\n                });\n            });\n        <\/script>\n    \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-80a7bc3 e-con-full e-flex e-con e-child\" data-id=\"80a7bc3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-8eb7e78 e-con-full e-flex e-con e-child\" data-id=\"8eb7e78\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7802843 elementor-widget elementor-widget-video_popup_widget\" data-id=\"7802843\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"video_popup_widget.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n    <div class=\"video-popup-wrapper position-relative d-inline-block\">\n                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-8-copy-2.svg\" class=\"img-fluid vid-thumb\" alt=\"Video Thumbnail\" \/>\n        \n                    <a href=\"#\" data-bs-toggle=\"modal\" data-bs-target=\"#videoModal_7802843\" class=\"video-play-button position-absolute top-50 start-50 translate-middle\">\n                <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/07\/play.svg\" alt=\"Play Icon\" \/>\n            <\/a>\n            <\/div>\n\n            <!-- Bootstrap Modal -->\n        <div class=\"modal fade\" id=\"videoModal_7802843\" tabindex=\"-1\" aria-hidden=\"true\">\n            <div class=\"modal-dialog modal-lg modal-dialog-centered\">\n                <div class=\"modal-content bg-dark\">\n                    <div class=\"modal-header border-0\">\n                        <a type=\"button\" class=\"btn-close btn-close-white\" data-bs-dismiss=\"modal\" aria-label=\"Close\"><\/a>\n                    <\/div>\n                    <div class=\"modal-body p-0\">\n                        <div class=\"ratio ratio-16x9\">\n                            <iframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/82T7vnz0UZ4?si=cfS-gZy1vB6pWx5f&amp;controls=0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <script>\n            jQuery(document).ready(function($) {\n                $('#videoModal_7802843').on('hidden.bs.modal', function () {\n                    var $iframe = $(this).find('iframe');\n                    if ($iframe.length) {\n                        $iframe.attr('src', $iframe.attr('src'));\n                    }\n                });\n            });\n        <\/script>\n    \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a8eec76 e-con-full e-flex e-con e-child\" data-id=\"a8eec76\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6a84ba8 elementor-widget__width-initial zig-img elementor-widget elementor-widget-image\" data-id=\"6a84ba8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6-1.svg\" class=\"attachment-large size-large wp-image-14133\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-28b38bd e-con-full e-flex e-con e-child\" data-id=\"28b38bd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8b51f39 elementor-widget elementor-widget-heading\" data-id=\"8b51f39\" 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\">Build Without Code: The Canvas for Effortless API Creation <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a043060 elementor-widget elementor-widget-text-editor\" data-id=\"a043060\" 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 style=\"font-weight: 400;\">Experience codeless API testing through an intuitive graphical interface, which includes point-and-click and drag-and-drop functionalities, significantly simplifying test design and reducing the reliance on coding efforts..<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eca7c18 shadow-cta green-cta elementor-align-right elementor-widget elementor-widget-button\" data-id=\"eca7c18\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Get Started<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-60b131b e-con-full e-flex e-con e-child\" data-id=\"60b131b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-2dbfdfa e-con-full e-flex e-con e-child\" data-id=\"2dbfdfa\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-985a77a elementor-widget__width-initial zig-img elementor-widget elementor-widget-image\" data-id=\"985a77a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7-1.svg\" class=\"attachment-large size-large wp-image-14134\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c56b50e e-con-full e-flex e-con e-child\" data-id=\"c56b50e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ac3466 elementor-widget elementor-widget-heading\" data-id=\"6ac3466\" 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\">Holistic Assurance: Mastering Every API Interaction<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b93f942 elementor-widget elementor-widget-text-editor\" data-id=\"b93f942\" 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 style=\"font-weight: 400;\">Leverage an end-to-end API testing solution, supporting Functional, Performance, and API Process Testing for REST, SOAP, and GraphQL APIs with features like data parameterization, database assertions, and integrations with tools such as Jira.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7305b74 shadow-cta green-cta elementor-align-right elementor-widget elementor-widget-button\" data-id=\"7305b74\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Get Started<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f071327 e-con-full e-flex e-con e-child\" data-id=\"f071327\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fbad76f elementor-widget elementor-widget-video_popup_widget\" data-id=\"fbad76f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"video_popup_widget.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n    <div class=\"video-popup-wrapper position-relative d-inline-block\">\n                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-8-copy.svg\" class=\"img-fluid vid-thumb\" alt=\"Video Thumbnail\" \/>\n        \n                    <a href=\"#\" data-bs-toggle=\"modal\" data-bs-target=\"#videoModal_fbad76f\" class=\"video-play-button position-absolute top-50 start-50 translate-middle\">\n                <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/07\/play.svg\" alt=\"Play Icon\" \/>\n            <\/a>\n            <\/div>\n\n            <!-- Bootstrap Modal -->\n        <div class=\"modal fade\" id=\"videoModal_fbad76f\" tabindex=\"-1\" aria-hidden=\"true\">\n            <div class=\"modal-dialog modal-lg modal-dialog-centered\">\n                <div class=\"modal-content bg-dark\">\n                    <div class=\"modal-header border-0\">\n                        <a type=\"button\" class=\"btn-close btn-close-white\" data-bs-dismiss=\"modal\" aria-label=\"Close\"><\/a>\n                    <\/div>\n                    <div class=\"modal-body p-0\">\n                        <div class=\"ratio ratio-16x9\">\n                            <iframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/9qRVhvvrzbg?si=W7vgxOwXtmArEtBG&amp;controls=0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <script>\n            jQuery(document).ready(function($) {\n                $('#videoModal_fbad76f').on('hidden.bs.modal', function () {\n                    var $iframe = $(this).find('iframe');\n                    if ($iframe.length) {\n                        $iframe.attr('src', $iframe.attr('src'));\n                    }\n                });\n            });\n        <\/script>\n    \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a1d15a7 grad-bg-color e-flex e-con-boxed e-con e-parent\" data-id=\"a1d15a7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-dd4116d e-con-full e-flex e-con e-child\" data-id=\"dd4116d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e0f7c1f elementor-widget__width-inherit elementor-widget elementor-widget-flow_chart_section\" data-id=\"e0f7c1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"flow_chart_section.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"svg-tooltip\" style=\"position:absolute;display:none;padding:8px 10px;background:#080056;color:#fff;border-radius:6px;font:13px\/1.4 Arial;pointer-events:none;z-index:9999;\"><\/div><div class=\"flowchart-wrapper\" data-breakpoint=\"767\">\n        <div class=\"flowchart-svg-container\"><\/div>\n    <\/div><script>\njQuery(function ($) {\n  const wrapper = document.querySelector(\".flowchart-wrapper\");\n  if (!wrapper) return;\n  \n  const breakpoint = parseInt(wrapper.getAttribute(\"data-breakpoint\")) || 767;\n  const desktopBoxes = [{\"_id\":\"5afb0c1\",\"svg_id\":\"c-1\",\"parent_title\":\"Create\",\"description\":\"\\nCreate API Process\",\"popup_media_type\":null,\"video_file\":null,\"popup_image\":null,\"align\":\"center\",\"content_type\":\"text\",\"title\":\"\",\"link_text\":\"\",\"link_url\":{\"url\":\"\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"video_iframe\":null,\"video_url\":null,\"width\":220,\"height\":120,\"gap\":12,\"dx\":0,\"dy\":0},{\"_id\":\"9794a97\",\"title\":\"Create\",\"svg_id\":\"\",\"content_type\":\"text\",\"parent_title\":\"\",\"description\":\"\",\"link_text\":\"\",\"link_url\":{\"url\":\"\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"popup_media_type\":null,\"video_iframe\":null,\"video_url\":null,\"video_file\":null,\"popup_image\":null,\"width\":220,\"height\":120,\"align\":\"right\",\"gap\":12,\"dx\":0,\"dy\":0}];\n  const mobileBoxes = [{\"_id\":\"3e12390\",\"svg_id\":\"c-1-mobile\",\"content_type\":\"video_popup\",\"video_url\":{\"url\":\"https:\\\/\\\/www.youtube.com\\\/watch?v=ejf9tuaOoaQ&t=2s&pp=0gcJCQMKAYcqIYzv\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"video_file\":{\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/Untitled-video.mp4\",\"id\":10369,\"size\":\"\",\"alt\":\"\",\"source\":\"library\"},\"align\":\"center\",\"title\":null,\"description\":null,\"link_text\":null,\"link_url\":null,\"popup_media_type\":\"video\",\"video_iframe\":\"\",\"popup_image\":null,\"width\":220,\"height\":120,\"gap\":12,\"dx\":0,\"dy\":0},{\"svg_id\":\"c-2-mobile\",\"content_type\":\"video_popup\",\"popup_media_type\":\"image\",\"video_url\":null,\"video_file\":null,\"popup_image\":{\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/whats-new-nov_-1.jpg\",\"id\":18296,\"size\":\"\",\"alt\":\"Nov release notes\",\"source\":\"library\"},\"align\":\"center\",\"_id\":\"171810a\",\"title\":null,\"description\":null,\"link_text\":null,\"link_url\":null,\"video_iframe\":null,\"width\":220,\"height\":120,\"gap\":12,\"dx\":0,\"dy\":0},{\"svg_id\":\"c-3-mobile\",\"title\":\"Test\",\"description\":\"Lorem Ipsum\",\"link_text\":\"Read  more\",\"link_url\":{\"url\":\"#\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"popup_media_type\":null,\"video_url\":null,\"video_file\":null,\"popup_image\":null,\"align\":\"center\",\"_id\":\"ea864b1\",\"content_type\":\"text\",\"video_iframe\":null,\"width\":220,\"height\":120,\"gap\":12,\"dx\":0,\"dy\":0}];\n  const desktopSvgHtml = \"<div class=\\\"flow-chart-svg__missing\\\" style=\\\"color:#888\\\">SVG not found.<\\\/div>\";\n  const mobileSvgHtml = \"<div class=\\\"Flowchart-enterprise.svg\\\"><?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\r\\n<svg xmlns=\\\"http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\\" xmlns:xlink=\\\"http:\\\/\\\/www.w3.org\\\/1999\\\/xlink\\\" viewBox=\\\"0 0 1193.57 2035.43\\\">\\r\\n  \\r\\n  <defs>\\r\\n    <style>\\r\\n      .cls-1 {\\r\\n        font-size: 22.37px;\\r\\n      }\\r\\n\\r\\n      .cls-1, .cls-2 {\\r\\n        fill: #fff;\\r\\n        font-family: Sora-Medium, Sora;\\r\\n        font-weight: 500;\\r\\n      }\\r\\n\\r\\n      .cls-3 {\\r\\n        filter: url(#outer-glow-2);\\r\\n      }\\r\\n\\r\\n      .cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9, .cls-10, .cls-11, .cls-12, .cls-13, .cls-14, .cls-15, .cls-16, .cls-17 {\\r\\n        stroke: #39b54a;\\r\\n        stroke-miterlimit: 10;\\r\\n      }\\r\\n\\r\\n      .cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9, .cls-10, .cls-11, .cls-14, .cls-15, .cls-16, .cls-17 {\\r\\n        fill: #1e1b57;\\r\\n        stroke-dasharray: 5;\\r\\n      }\\r\\n\\r\\n      .cls-4 {\\r\\n        filter: url(#outer-glow-3);\\r\\n      }\\r\\n\\r\\n      .cls-5 {\\r\\n        filter: url(#outer-glow-7);\\r\\n      }\\r\\n\\r\\n      .cls-6 {\\r\\n        filter: url(#outer-glow-8);\\r\\n      }\\r\\n\\r\\n      .cls-7 {\\r\\n        filter: url(#outer-glow-6);\\r\\n      }\\r\\n\\r\\n      .cls-8 {\\r\\n        filter: url(#outer-glow-9);\\r\\n      }\\r\\n\\r\\n      .cls-9 {\\r\\n        filter: url(#outer-glow-4);\\r\\n      }\\r\\n\\r\\n      .cls-10 {\\r\\n        filter: url(#outer-glow-5);\\r\\n      }\\r\\n\\r\\n      .cls-11 {\\r\\n        filter: url(#outer-glow-1);\\r\\n      }\\r\\n\\r\\n      .cls-18 {\\r\\n        fill: #95b704;\\r\\n      }\\r\\n\\r\\n      .cls-19 {\\r\\n        fill: #46df93;\\r\\n      }\\r\\n\\r\\n      .cls-20 {\\r\\n        fill: #ff0039;\\r\\n      }\\r\\n\\r\\n      .cls-21 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-22 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-2 {\\r\\n        font-size: 32.62px;\\r\\n      }\\r\\n\\r\\n      .cls-23 {\\r\\n        fill: #39b54a;\\r\\n      }\\r\\n\\r\\n      .cls-24 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-25 {\\r\\n        fill: #c1ff00;\\r\\n      }\\r\\n\\r\\n      .cls-26 {\\r\\n        letter-spacing: -.06em;\\r\\n      }\\r\\n\\r\\n      .cls-27 {\\r\\n        letter-spacing: -.06em;\\r\\n      }\\r\\n\\r\\n      .cls-28 {\\r\\n        letter-spacing: -.06em;\\r\\n      }\\r\\n\\r\\n      .cls-29 {\\r\\n        letter-spacing: -.02em;\\r\\n      }\\r\\n\\r\\n      .cls-30 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-12, .cls-13 {\\r\\n        fill: none;\\r\\n        stroke-width: 3px;\\r\\n      }\\r\\n\\r\\n      .cls-31 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-32 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-33 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-34 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-35 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-13 {\\r\\n        stroke-dasharray: 5.01 5.01;\\r\\n      }\\r\\n\\r\\n      .cls-36 {\\r\\n        letter-spacing: -.01em;\\r\\n      }\\r\\n\\r\\n      .cls-37 {\\r\\n        letter-spacing: -.01em;\\r\\n      }\\r\\n\\r\\n      .cls-38 {\\r\\n        letter-spacing: -.01em;\\r\\n      }\\r\\n\\r\\n      .cls-14 {\\r\\n        filter: url(#outer-glow-11);\\r\\n      }\\r\\n\\r\\n      .cls-15 {\\r\\n        filter: url(#outer-glow-10);\\r\\n      }\\r\\n\\r\\n      .cls-16 {\\r\\n        filter: url(#outer-glow-12);\\r\\n      }\\r\\n\\r\\n      .cls-17 {\\r\\n        filter: url(#outer-glow-13);\\r\\n      }\\r\\n\\r\\n      .cls-39 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-40 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-41 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-42 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-43 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n\\r\\n      .cls-44 {\\r\\n        letter-spacing: 0em;\\r\\n      }\\r\\n    <\\\/style>\\r\\n    <filter id=\\\"outer-glow-1\\\" x=\\\"301.44\\\" y=\\\"572.87\\\" width=\\\"591\\\" height=\\\"443\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur\\\" stdDeviation=\\\"50\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff85\\\" flood-opacity=\\\".85\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-2\\\" x=\\\"353.79\\\" y=\\\"-50.78\\\" width=\\\"506\\\" height=\\\"442\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-2\\\" stdDeviation=\\\"50\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff85\\\" flood-opacity=\\\".85\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-2\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-3\\\" x=\\\"347.79\\\" y=\\\"936.22\\\" width=\\\"507\\\" height=\\\"442\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-3\\\" stdDeviation=\\\"50\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff85\\\" flood-opacity=\\\".85\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-3\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-4\\\" x=\\\"-15.21\\\" y=\\\"1264.22\\\" width=\\\"579\\\" height=\\\"449\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-4\\\" stdDeviation=\\\"50\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff85\\\" flood-opacity=\\\".85\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-4\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-5\\\" x=\\\"371.79\\\" y=\\\"1271.02\\\" width=\\\"461\\\" height=\\\"442\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-5\\\" stdDeviation=\\\"50\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff85\\\" flood-opacity=\\\".85\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-5\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-6\\\" x=\\\"359.79\\\" y=\\\"1622.22\\\" width=\\\"481\\\" height=\\\"442\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-6\\\" stdDeviation=\\\"50\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff85\\\" flood-opacity=\\\".85\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-6\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-7\\\" x=\\\"354.79\\\" y=\\\"277.22\\\" width=\\\"507\\\" height=\\\"442\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-7\\\" stdDeviation=\\\"50\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff85\\\" flood-opacity=\\\".85\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-7\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-8\\\" x=\\\"480.79\\\" y=\\\"208.22\\\" width=\\\"245\\\" height=\\\"245\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-8\\\" stdDeviation=\\\"25\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff79\\\" flood-opacity=\\\"1\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-8\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-9\\\" x=\\\"192.79\\\" y=\\\"50.22\\\" width=\\\"245\\\" height=\\\"245\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-9\\\" stdDeviation=\\\"25\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff79\\\" flood-opacity=\\\"1\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-9\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-10\\\" x=\\\"151.83\\\" y=\\\"1192.36\\\" width=\\\"244\\\" height=\\\"245\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-10\\\" stdDeviation=\\\"25\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff79\\\" flood-opacity=\\\"1\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-10\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-11\\\" x=\\\"476.79\\\" y=\\\"1210.26\\\" width=\\\"245\\\" height=\\\"245\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-11\\\" stdDeviation=\\\"25\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff79\\\" flood-opacity=\\\"1\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-11\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-12\\\" x=\\\"476.44\\\" y=\\\"824.87\\\" width=\\\"244\\\" height=\\\"244\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-12\\\" stdDeviation=\\\"25\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff79\\\" flood-opacity=\\\"1\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-12\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n    <filter id=\\\"outer-glow-13\\\" x=\\\"476.79\\\" y=\\\"1550.22\\\" width=\\\"245\\\" height=\\\"245\\\" filterUnits=\\\"userSpaceOnUse\\\">\\r\\n      <feOffset dx=\\\"0\\\" dy=\\\"0\\\"\\\/>\\r\\n      <feGaussianBlur result=\\\"blur-13\\\" stdDeviation=\\\"25\\\"\\\/>\\r\\n      <feFlood flood-color=\\\"#00ff79\\\" flood-opacity=\\\"1\\\"\\\/>\\r\\n      <feComposite in2=\\\"blur-13\\\" operator=\\\"in\\\"\\\/>\\r\\n      <feComposite in=\\\"SourceGraphic\\\"\\\/>\\r\\n    <\\\/filter>\\r\\n  <\\\/defs>\\r\\n  <g id=\\\"Layer_4\\\" data-name=\\\"Layer 4\\\">\\r\\n    <g>\\r\\n      <line class=\\\"cls-12\\\" x1=\\\"344\\\" y1=\\\"172.58\\\" x2=\\\"471.52\\\" y2=\\\"172.58\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"469.33 180.06 482.28 172.58 469.33 165.1 469.33 180.06\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <line class=\\\"cls-12\\\" x1=\\\"603.36\\\" y1=\\\"239.77\\\" x2=\\\"603.36\\\" y2=\\\"393.81\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"595.88 391.62 603.36 404.57 610.84 391.62 595.88 391.62\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <line class=\\\"cls-12\\\" x1=\\\"603.36\\\" y1=\\\"567.83\\\" x2=\\\"603.36\\\" y2=\\\"622.35\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"595.88 620.16 603.36 633.11 610.84 620.16 595.88 620.16\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <line class=\\\"cls-12\\\" x1=\\\"275.28\\\" y1=\\\"1146.56\\\" x2=\\\"275.28\\\" y2=\\\"1395.83\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"267.8 1393.64 275.28 1406.6 282.76 1393.64 267.8 1393.64\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <line class=\\\"cls-12\\\" x1=\\\"599.18\\\" y1=\\\"1057.49\\\" x2=\\\"599.18\\\" y2=\\\"1031.54\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"606.66 1055.3 599.18 1068.25 591.7 1055.3 606.66 1055.3\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <line class=\\\"cls-12\\\" x1=\\\"599.18\\\" y1=\\\"1275.78\\\" x2=\\\"599.18\\\" y2=\\\"1226.98\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"606.66 1273.59 599.18 1286.54 591.7 1273.59 606.66 1273.59\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <line class=\\\"cls-12\\\" x1=\\\"599.18\\\" y1=\\\"1742.29\\\" x2=\\\"599.18\\\" y2=\\\"1564.12\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"606.66 1740.1 599.18 1753.05 591.7 1740.1 606.66 1740.1\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <polyline class=\\\"cls-12\\\" points=\\\"487.99 1154.54 275.28 1154.54 275.28 496.48 505.96 496.48\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"485.8 1147.06 498.75 1154.54 485.8 1162.02 485.8 1147.06\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <line class=\\\"cls-12\\\" x1=\\\"511.39\\\" y1=\\\"1502.75\\\" x2=\\\"410.42\\\" y2=\\\"1502.75\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"509.2 1495.27 522.15 1502.75 509.2 1510.23 509.2 1495.27\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <polyline class=\\\"cls-12\\\" points=\\\"820.37 809.87 895.69 809.87 895.69 1498.54 692.48 1498.54\\\"\\\/>\\r\\n      <polygon class=\\\"cls-23\\\" points=\\\"694.67 1491.06 681.71 1498.54 694.67 1506.02 694.67 1491.06\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <rect class=\\\"cls-13\\\" x=\\\"385.67\\\" y=\\\"633.11\\\" width=\\\"434.7\\\" height=\\\"398.43\\\" rx=\\\"60.78\\\" ry=\\\"60.78\\\"\\\/>\\r\\n  <\\\/g>\\r\\n  <g id=\\\"Layer_2\\\" data-name=\\\"Layer 2\\\">\\r\\n    <rect class=\\\"cls-11\\\" x=\\\"452.67\\\" y=\\\"724.28\\\" width=\\\"288.89\\\" height=\\\"140.12\\\"\\\/>\\r\\n    <rect id=\\\"c-1-mobile\\\" class=\\\"cls-3 c-1-mobile\\\" x=\\\"504.33\\\" y=\\\"100.25\\\" width=\\\"204.54\\\" height=\\\"140.12\\\"\\\/>\\r\\n    <rect class=\\\"cls-4\\\" x=\\\"498.75\\\" y=\\\"1086.86\\\" width=\\\"204.54\\\" height=\\\"140.12\\\"\\\/>\\r\\n    <rect id=\\\"c-3-mobile\\\" class=\\\"cls-9 c-3-mobile\\\" x=\\\"135.72\\\" y=\\\"1415.06\\\" width=\\\"276.92\\\" height=\\\"146.72\\\"\\\/>\\r\\n    <rect class=\\\"cls-10\\\" x=\\\"523.05\\\" y=\\\"1421.66\\\" width=\\\"158.66\\\" height=\\\"140.12\\\"\\\/>\\r\\n    <rect class=\\\"cls-7\\\" x=\\\"510.65\\\" y=\\\"1772.82\\\" width=\\\"178.84\\\" height=\\\"140.12\\\"\\\/>\\r\\n    <rect id=\\\"c-2-mobile\\\" class=\\\"cls-5 c-2-mobile\\\" x=\\\"505.96\\\" y=\\\"427.72\\\" width=\\\"204.54\\\" height=\\\"140.12\\\"\\\/>\\r\\n  <\\\/g>\\r\\n  <g id=\\\"Layer_3\\\" data-name=\\\"Layer 3\\\">\\r\\n    <text class=\\\"cls-1\\\" transform=\\\"translate(478.56 777.91)\\\"><tspan x=\\\"0\\\" y=\\\"0\\\">E<\\\/tspan><tspan class=\\\"cls-38\\\" x=\\\"13.38\\\" y=\\\"0\\\">x<\\\/tspan><tspan x=\\\"25.95\\\" y=\\\"0\\\">ecu<\\\/tspan><tspan class=\\\"cls-42\\\" x=\\\"67.51\\\" y=\\\"0\\\">t<\\\/tspan><tspan x=\\\"77.04\\\" y=\\\"0\\\">e <\\\/tspan><tspan class=\\\"cls-29\\\" x=\\\"95.79\\\" y=\\\"0\\\">W<\\\/tspan><tspan class=\\\"cls-24\\\" x=\\\"118.79\\\" y=\\\"0\\\">eb <\\\/tspan><tspan class=\\\"cls-27\\\" x=\\\"153.06\\\" y=\\\"0\\\">T<\\\/tspan><tspan x=\\\"165.07\\\" y=\\\"0\\\">es<\\\/tspan><tspan class=\\\"cls-35\\\" x=\\\"191\\\" y=\\\"0\\\">t<\\\/tspan><tspan class=\\\"cls-24\\\" x=\\\"200.51\\\" y=\\\"0\\\">s in<\\\/tspan><tspan x=\\\"7.33\\\" y=\\\"26.85\\\">b<\\\/tspan><tspan class=\\\"cls-31\\\" x=\\\"22.85\\\" y=\\\"26.85\\\">r<\\\/tspan><tspan class=\\\"cls-36\\\" x=\\\"32\\\" y=\\\"26.85\\\">o<\\\/tspan><tspan class=\\\"cls-33\\\" x=\\\"46.92\\\" y=\\\"26.85\\\">w<\\\/tspan><tspan x=\\\"66.36\\\" y=\\\"26.85\\\">sers on D<\\\/tspan><tspan class=\\\"cls-35\\\" x=\\\"170.83\\\" y=\\\"26.85\\\">e<\\\/tspan><tspan x=\\\"184.52\\\" y=\\\"26.85\\\">vice<\\\/tspan><tspan class=\\\"cls-44\\\" x=\\\"93.32\\\" y=\\\"53.69\\\">f<\\\/tspan><tspan x=\\\"101.78\\\" y=\\\"53.69\\\">arm<\\\/tspan><\\\/text>\\r\\n    <text class=\\\"cls-1 c-1-mobile\\\" transform=\\\"translate(583.83 136.46)\\\"><tspan class=\\\"cls-27\\\" x=\\\"0\\\" y=\\\"0\\\">T<\\\/tspan><tspan class=\\\"cls-24\\\" x=\\\"12.01\\\" y=\\\"0\\\">est<\\\/tspan><tspan x=\\\"-26.24\\\" y=\\\"26.84\\\">C<\\\/tspan><tspan class=\\\"cls-32\\\" x=\\\"-8.41\\\" y=\\\"26.84\\\">r<\\\/tspan><tspan x=\\\".74\\\" y=\\\"26.84\\\">eation<\\\/tspan><tspan x=\\\"-35.35\\\" y=\\\"53.69\\\">and Script<\\\/tspan><tspan x=\\\"-23.94\\\" y=\\\"80.54\\\">Building<\\\/tspan><\\\/text>\\r\\n    <text class=\\\"cls-1 c-2-mobile\\\" transform=\\\"translate(524.61 477.35)\\\"><tspan x=\\\"0\\\" y=\\\"0\\\">Configu<\\\/tspan><tspan class=\\\"cls-32\\\" x=\\\"91.81\\\" y=\\\"0\\\">r<\\\/tspan><tspan x=\\\"100.96\\\" y=\\\"0\\\">e <\\\/tspan><tspan class=\\\"cls-27\\\" x=\\\"119.71\\\" y=\\\"0\\\">T<\\\/tspan><tspan x=\\\"131.72\\\" y=\\\"0\\\">est<\\\/tspan><tspan x=\\\"34.14\\\" y=\\\"26.84\\\">da<\\\/tspan><tspan class=\\\"cls-43\\\" x=\\\"62.66\\\" y=\\\"26.84\\\">t<\\\/tspan><tspan x=\\\"72.21\\\" y=\\\"26.84\\\">a and<\\\/tspan><tspan x=\\\"10.69\\\" y=\\\"53.69\\\">E<\\\/tspan><tspan class=\\\"cls-34\\\" x=\\\"24.07\\\" y=\\\"53.69\\\">n<\\\/tspan><tspan x=\\\"38.39\\\" y=\\\"53.69\\\">vi<\\\/tspan><tspan class=\\\"cls-31\\\" x=\\\"58.28\\\" y=\\\"53.69\\\">r<\\\/tspan><tspan x=\\\"67.43\\\" y=\\\"53.69\\\">onment<\\\/tspan><\\\/text>\\r\\n    <text class=\\\"cls-1\\\" transform=\\\"translate(538.45 1136.5)\\\"><tspan x=\\\"0\\\" y=\\\"0\\\">Select <\\\/tspan><tspan class=\\\"cls-26\\\" x=\\\"77.6\\\" y=\\\"0\\\">T<\\\/tspan><tspan x=\\\"89.62\\\" y=\\\"0\\\">est<\\\/tspan><tspan x=\\\"5.68\\\" y=\\\"26.84\\\">E<\\\/tspan><tspan class=\\\"cls-38\\\" x=\\\"19.06\\\" y=\\\"26.84\\\">x<\\\/tspan><tspan x=\\\"31.63\\\" y=\\\"26.84\\\">ecution<\\\/tspan><tspan x=\\\"36.45\\\" y=\\\"53.69\\\">In<\\\/tspan><tspan class=\\\"cls-44\\\" x=\\\"58.02\\\" y=\\\"53.69\\\">fr<\\\/tspan><tspan x=\\\"75.69\\\" y=\\\"53.69\\\">a<\\\/tspan><\\\/text>\\r\\n    <text class=\\\"cls-1\\\" transform=\\\"translate(552.82 1481.24)\\\"><tspan class=\\\"cls-30\\\" x=\\\"0\\\" y=\\\"0\\\">P<\\\/tspan><tspan x=\\\"14.38\\\" y=\\\"0\\\">a<\\\/tspan><tspan class=\\\"cls-44\\\" x=\\\"27.38\\\" y=\\\"0\\\">r<\\\/tspan><tspan x=\\\"36.6\\\" y=\\\"0\\\">allelly<\\\/tspan><tspan x=\\\"5.73\\\" y=\\\"26.84\\\">E<\\\/tspan><tspan class=\\\"cls-38\\\" x=\\\"19.1\\\" y=\\\"26.84\\\">x<\\\/tspan><tspan x=\\\"31.68\\\" y=\\\"26.84\\\">ecu<\\\/tspan><tspan class=\\\"cls-42\\\" x=\\\"73.24\\\" y=\\\"26.84\\\">t<\\\/tspan><tspan x=\\\"82.77\\\" y=\\\"26.84\\\">e<\\\/tspan><tspan class=\\\"cls-26\\\" x=\\\"21.34\\\" y=\\\"53.69\\\">T<\\\/tspan><tspan x=\\\"33.36\\\" y=\\\"53.69\\\">es<\\\/tspan><tspan class=\\\"cls-33\\\" x=\\\"59.28\\\" y=\\\"53.69\\\">t<\\\/tspan><tspan x=\\\"68.79\\\" y=\\\"53.69\\\">s<\\\/tspan><\\\/text>\\r\\n    <text class=\\\"cls-1\\\" transform=\\\"translate(538.65 1849.3)\\\"><tspan x=\\\"0\\\" y=\\\"0\\\">CI <\\\/tspan><tspan class=\\\"cls-22\\\" x=\\\"29.95\\\" y=\\\"0\\\">P<\\\/tspan><tspan x=\\\"44.54\\\" y=\\\"0\\\">ipeline<\\\/tspan><\\\/text>\\r\\n    <text class=\\\"cls-1 c-3-mobile\\\" transform=\\\"translate(164.32 1476.52)\\\"><tspan class=\\\"cls-39\\\" x=\\\"0\\\" y=\\\"0\\\">R<\\\/tspan><tspan x=\\\"15.66\\\" y=\\\"0\\\">eg<\\\/tspan><tspan class=\\\"cls-31\\\" x=\\\"44.63\\\" y=\\\"0\\\">r<\\\/tspan><tspan class=\\\"cls-24\\\" x=\\\"53.78\\\" y=\\\"0\\\">ession <\\\/tspan><tspan class=\\\"cls-27\\\" x=\\\"133.49\\\" y=\\\"0\\\">T<\\\/tspan><tspan x=\\\"145.5\\\" y=\\\"0\\\">esting<\\\/tspan><tspan x=\\\"61.14\\\" y=\\\"26.84\\\">and <\\\/tspan><tspan class=\\\"cls-26\\\" x=\\\"109.03\\\" y=\\\"26.84\\\">T<\\\/tspan><tspan x=\\\"121.05\\\" y=\\\"26.84\\\">est<\\\/tspan><tspan x=\\\"34.88\\\" y=\\\"53.69\\\">Main<\\\/tspan><tspan class=\\\"cls-41\\\" x=\\\"90.33\\\" y=\\\"53.69\\\">t<\\\/tspan><tspan x=\\\"99.86\\\" y=\\\"53.69\\\">enance<\\\/tspan><\\\/text>\\r\\n    <text class=\\\"cls-2\\\" transform=\\\"translate(445.35 684.54)\\\"><tspan class=\\\"cls-40\\\" x=\\\"0\\\" y=\\\"0\\\">R<\\\/tspan><tspan x=\\\"22.84\\\" y=\\\"0\\\">esponsi<\\\/tspan><tspan class=\\\"cls-37\\\" x=\\\"154.47\\\" y=\\\"0\\\">v<\\\/tspan><tspan x=\\\"172.78\\\" y=\\\"0\\\">e <\\\/tspan><tspan class=\\\"cls-28\\\" x=\\\"200.12\\\" y=\\\"0\\\">T<\\\/tspan><tspan class=\\\"cls-21\\\" x=\\\"217.64\\\" y=\\\"0\\\">esting<\\\/tspan><\\\/text>\\r\\n  <\\\/g>\\r\\n  <g id=\\\"Layer_5\\\" data-name=\\\"Layer 5\\\">\\r\\n    <circle class=\\\"cls-6\\\" cx=\\\"603.36\\\" cy=\\\"330.38\\\" r=\\\"46.42\\\"\\\/>\\r\\n    <circle class=\\\"cls-8\\\" cx=\\\"315.65\\\" cy=\\\"172.58\\\" r=\\\"46.42\\\"\\\/>\\r\\n    <circle class=\\\"cls-15\\\" cx=\\\"273.79\\\" cy=\\\"1314.85\\\" r=\\\"46.42\\\"\\\/>\\r\\n    <circle class=\\\"cls-14\\\" cx=\\\"599.18\\\" cy=\\\"1332.96\\\" r=\\\"46.42\\\"\\\/>\\r\\n    <circle class=\\\"cls-16\\\" cx=\\\"598.51\\\" cy=\\\"946.91\\\" r=\\\"46.42\\\"\\\/>\\r\\n    <circle class=\\\"cls-17\\\" cx=\\\"599.45\\\" cy=\\\"1673.03\\\" r=\\\"46.42\\\"\\\/>\\r\\n    <g>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M316.97,159.89c-3.05,0-5.51,2.48-5.51,5.51s2.48,5.51,5.51,5.51,5.51-2.48,5.51-5.51-2.46-5.51-5.51-5.51ZM316.97,168.44c-1.68,0-3.04-1.36-3.04-3.04s1.36-3.04,3.04-3.04,3.04,1.36,3.04,3.04-1.36,3.04-3.04,3.04Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M330.5,162.93l-3.06-.68c-.21-.69-.49-1.36-.83-2l1.68-2.65c.32-.49.24-1.13-.17-1.54l-1.78-1.8c-.41-.41-1.04-.49-1.54-.17l-2.65,1.68c-.63-.34-1.31-.62-2-.83l-.69-3.06c-.12-.57-.63-.97-1.21-.97h-2.54c-.58,0-1.08.4-1.21.97l-.68,3.06c-.69.21-1.37.49-2,.83l-2.65-1.68c-.49-.32-1.13-.24-1.54.17l-1.8,1.8c-.41.41-.49,1.04-.17,1.54l1.68,2.65c-.34.64-.62,1.31-.83,2l-3.06.68c-.57.12-.97.63-.97,1.21v2.54c0,.58.4,1.08.97,1.21l3.06.68c.21.69.49,1.36.83,2l-1.68,2.65c-.32.49-.24,1.13.17,1.54l1.8,1.8c.41.41,1.04.49,1.54.17l2.65-1.68c.64.34,1.31.62,2,.83l.68,3.06c.12.57.63.97,1.21.97h2.54c.58,0,1.08-.4,1.21-.97l.68-3.06c.69-.21,1.36-.49,2-.83l2.65,1.68c.49.32,1.13.24,1.54-.17l1.8-1.8c.41-.41.49-1.04.17-1.54l-1.68-2.65c.34-.64.62-1.31.83-2l3.06-.68c.57-.12.97-.63.97-1.21v-2.54c0-.58-.4-1.09-.97-1.21h0ZM328.99,165.68l-2.83.63c-.47.11-.84.47-.93.93-.21.95-.58,1.85-1.1,2.68-.25.4-.25.92,0,1.32l1.55,2.45-.39.39-2.45-1.55c-.4-.25-.92-.25-1.32,0-.83.52-1.72.9-2.67,1.1-.47.11-.84.47-.93.93l-.63,2.82h-.56l-.63-2.82c-.11-.47-.47-.84-.93-.93-.95-.21-1.85-.58-2.68-1.12-.4-.25-.92-.25-1.32,0l-2.46,1.57-.39-.39,1.55-2.45c.25-.4.25-.92,0-1.32-.52-.83-.9-1.72-1.1-2.67-.11-.47-.47-.84-.93-.93l-2.82-.63v-.56l2.82-.63c.47-.11.84-.47.93-.93.21-.95.58-1.85,1.1-2.68.25-.4.25-.92,0-1.32l-1.57-2.46.39-.39,2.45,1.55c.4.25.92.25,1.34,0,.81-.52,1.71-.9,2.68-1.12.46-.11.83-.47.93-.93l.63-2.82h.56l.63,2.82c.11.46.46.84.93.93.96.22,1.87.59,2.68,1.12.4.25.92.25,1.34,0l2.45-1.55.39.39-1.55,2.45c-.25.4-.25.92,0,1.32.52.84.9,1.74,1.1,2.68.11.47.47.84.93.93l2.83.63v.56Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M297.65,190.55c-.68,0-1.24.56-1.24,1.24s.56,1.24,1.24,1.24,1.24-.56,1.24-1.24-.56-1.24-1.24-1.24Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M341.01,183.12c0-.68-.56-1.24-1.24-1.24s-1.24.56-1.24,1.24.56,1.24,1.24,1.24,1.24-.55,1.24-1.24Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M327.39,195.52c-.68,0-1.24.56-1.24,1.24s.56,1.24,1.24,1.24,1.24-.56,1.24-1.24-.56-1.24-1.24-1.24Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M305.08,194.28c-.68,0-1.24.56-1.24,1.24s.56,1.24,1.24,1.24,1.24-.56,1.24-1.24-.56-1.24-1.24-1.24Z\\\"\\\/>\\r\\n      <circle class=\\\"cls-19\\\" cx=\\\"301.37\\\" cy=\\\"147.19\\\" r=\\\"1.24\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M345.6,150.03c-.49-.49-1.26-.49-1.75,0l-.96.96c-3.24-3.73-9.13-3.33-11.84.84-3.72-3.75-8.74-5.88-14.09-5.88-11.39,0-20.51,9.64-19.78,21.1-2.27-.23-4.44.55-6.05,2.14-2.9,2.9-2.9,7.6,0,10.52,3.13,3.13,8.32,2.87,11.1-.67,2.31,2.56,5.27,4.49,8.52,5.57,0,11.81-.06,11.05.11,11.41.04.1-.07-.07,3.76,5.68h-4.63c-.68,0-1.24.56-1.24,1.24s.56,1.24,1.24,1.24h13.65c.68,0,1.24-.56,1.24-1.24s-.56-1.24-1.24-1.24h-4.37c2.26-3.39,3.73-5.59,3.68-5.51.11-.17.17-.34.19-.52.02-.13.01,1.32.01-11.06,8.85-2.91,14.68-11.79,13.47-21.35,5.48.5,9.58-4.98,7.58-10.1l1.38-1.38c.49-.47.49-1.26,0-1.75ZM292.9,177.96c-1.93-1.93-1.94-5.08,0-7.01,2.36-2.36,5.33-1.12,5.27-1.13,3.33,1.27,4.29,5.59,1.74,8.14-1.93,1.93-5.08,1.93-7.01,0ZM318.21,196.75h1.4l-1.4,2.1v-2.1ZM315.73,198.86l-1.4-2.1h1.4v2.1ZM334.02,162.54c1.68,8.9-3.79,17.58-12.42,19.96-.53.15-.91.64-.91,1.19v10.58h-2.48v-9.91c0-.68-.56-1.24-1.24-1.24s-1.24.56-1.24,1.24v9.91h-2.48v-10.58c0-.56-.38-1.04-.91-1.19-3.46-.96-6.58-3-8.85-5.8,1.08-3.42-.46-7.22-3.75-8.89-1.21-10.35,6.91-19.38,17.23-19.38,5.03,0,9.74,2.15,13.04,5.91-.06.35-.16.86-.16,1.52,0,2.77,1.55,5.38,4.16,6.68ZM337.3,160.82c-3.31,0-5.67-3.21-4.76-6.35,1.13-3.82,6.08-4.82,8.6-1.72l-3.12,3.12-1.36-1.36c-.49-.49-1.26-.49-1.75,0s-.49,1.26,0,1.75l2.23,2.23c.49.49,1.26.49,1.75,0l3.3-3.3c.42,3.01-1.93,5.63-4.89,5.63Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M299.18,171.67c-.49-.49-1.26-.49-1.75,0l-1.02,1.03-1.03-1.03c-.49-.49-1.26-.49-1.75,0s-.49,1.26,0,1.75l1.02,1.02-1.03,1.03c-.78.78-.22,2.11.87,2.11.32,0,.63-.12.87-.36l1.03-1.02,1.02,1.02c.49.49,1.27.49,1.75,0,.49-.49.49-1.26,0-1.75l-1.03-1.03,1.03-1.02c.5-.47.5-1.26.01-1.75Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M338.53,188.07c-2.05,0-3.72,1.66-3.72,3.72s1.66,3.72,3.72,3.72,3.72-1.66,3.72-3.72-1.68-3.72-3.72-3.72ZM338.53,193.03c-.68,0-1.24-.56-1.24-1.24s.56-1.24,1.24-1.24,1.24.56,1.24,1.24-.56,1.24-1.24,1.24Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M292.68,157.11c2.05,0,3.72-1.66,3.72-3.72s-1.66-3.72-3.72-3.72-3.72,1.66-3.72,3.72,1.68,3.72,3.72,3.72ZM292.68,152.14c.68,0,1.24.56,1.24,1.24s-.56,1.24-1.24,1.24-1.24-.56-1.24-1.24.56-1.24,1.24-1.24Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M588.28,961.6h18.04c1.73,0,3.12-1.4,3.12-3.12v-36.64c0-1.73-1.4-3.13-3.12-3.13h-18.04c-1.73,0-3.12,1.4-3.12,3.13v36.64c0,1.72,1.39,3.12,3.12,3.12ZM597.3,958.14c-2.29,0-2.29-3.46,0-3.46.96,0,1.73.78,1.73,1.73s-.78,1.73-1.73,1.73ZM604.26,920.67c.44,0,.8.36.8.8s-.36.8-.8.8-.8-.36-.8-.8.36-.8.8-.8ZM593.12,920.97h8.37v.91h-8.37v-.91ZM587.5,923.98h19.6v.12h0v27.58h-19.61c0-18.49,0-25.81,0-27.7Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M581.91,959.83h-12.27v-27.7h12.12v-2.1h-6.5v-.91h6.5v-2.26h-11.34c-1.73,0-3.12,1.4-3.12,3.13v36.64c0,1.72,1.39,3.12,3.12,3.12h18.04c1.72,0,3.12-1.4,3.12-3.12v-1.63h-3.31c-3.13,0-5.75-2.22-6.37-5.16ZM579.44,966.28c-2.29,0-2.29-3.46,0-3.46.96,0,1.73.78,1.73,1.73s-.78,1.73-1.73,1.73Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M627.3,929.98c0-1.73-1.4-3.13-3.12-3.13h-11.34v2.26h6.5v.91h-6.5v2.1h12.12v.12h0v27.58h-12.27c-.62,2.94-3.24,5.16-6.37,5.16h-3.3v1.63c0,1.72,1.39,3.12,3.12,3.12h18.04c1.72,0,3.12-1.4,3.12-3.12,0-9.11,0-35.47,0-36.64ZM622.12,930.41c-.44,0-.8-.36-.8-.8s.36-.8.8-.8.8.36.8.8-.36.8-.8.8ZM615.16,966.28c-2.29,0-2.29-3.46,0-3.46.96,0,1.73.78,1.73,1.73,0,.96-.78,1.73-1.73,1.73Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M611.52,1321.52l-1.42-1.41c.39-.72.7-1.47.94-2.25h1.99c.57,0,1.03-.46,1.03-1.03v-1.4h5.57v10.62l-.85-.85c-.41-.4-1.06-.39-1.46.03-.39.4-.39,1.04,0,1.44l2.6,2.6c.36.39.98.42,1.37.06.03-.02.06-.03.09-.06h0l2.6-2.6c.41-.4.42-1.05.03-1.46-.4-.41-1.05-.42-1.46-.03,0,0-.02.02-.03.03l-.84.84v-11.65c0-.57-.46-1.03-1.03-1.03h-6.6v-1.39c0-.57-.46-1.03-1.03-1.03h-1.99c-.24-.78-.55-1.54-.94-2.26l1.42-1.41c.4-.41.4-1.06,0-1.47l-3.44-3.43c-.4-.4-1.05-.4-1.46,0l-1.42,1.41c-.72-.39-1.47-.7-2.25-.93v-1.99c0-.57-.46-1.03-1.03-1.03h-4.86c-.57,0-1.03.46-1.03,1.03v1.99c-.78.23-1.54.54-2.25.93l-1.42-1.41c-.4-.4-1.05-.4-1.46,0l-3.44,3.43c-.4.41-.4,1.06,0,1.47l1.42,1.41c-.39.72-.7,1.48-.94,2.26h-1.99c-.57,0-1.03.46-1.03,1.03v1.39h-6.6c-.57,0-1.03.46-1.03,1.03v11.65l-.84-.84c-.4-.41-1.05-.42-1.46-.03-.41.4-.42,1.05-.03,1.46,0,0,.02.02.03.03l2.61,2.6c.07.06.14.11.23.15.03.03.07.05.1.07.39.17.84.08,1.13-.22l2.61-2.61c.41-.4.42-1.05.03-1.46s-1.05-.42-1.46-.03c0,0-.02.02-.03.03l-.84.84v-10.61h5.56v1.4c0,.57.46,1.03,1.03,1.03h1.99c.24.78.55,1.54.94,2.25l-1.42,1.41c-.4.41-.4,1.06,0,1.47l3.44,3.43c.41.39,1.05.39,1.46,0l1.42-1.41c.72.39,1.47.71,2.25.94v1.98c0,.57.46,1.03,1.03,1.03h4.86c.57,0,1.03-.46,1.03-1.03v-1.98c.78-.23,1.54-.55,2.25-.94l1.42,1.41c.19.2.46.31.73.31.27,0,.53-.11.72-.31l3.44-3.43c.4-.41.4-1.06,0-1.47ZM608.08,1321.02l1.25,1.24-1.97,1.97-1.25-1.24c-.34-.34-.87-.4-1.28-.14-.96.61-2.02,1.05-3.13,1.3-.47.1-.81.52-.81,1v1.76h-2.79v-1.76c0-.48-.34-.9-.81-1-1.11-.25-2.17-.69-3.13-1.3-.41-.26-.94-.2-1.28.14l-1.25,1.24-1.97-1.97,1.25-1.24c.34-.34.4-.87.14-1.28-.61-.96-1.05-2.02-1.3-3.13-.11-.47-.53-.81-1.01-.81h-1.76v-2.79h1.76c.49,0,.91-.34,1.01-.82.25-1.11.69-2.17,1.3-3.13.26-.41.2-.94-.14-1.28l-1.25-1.24,1.97-1.97,1.25,1.24c.34.34.87.4,1.28.14.96-.61,2.02-1.05,3.13-1.3.47-.1.81-.52.81-1v-1.76h2.79v1.76c0,.48.34.9.81,1,1.11.25,2.17.69,3.13,1.3.41.26.94.2,1.28-.14l1.25-1.24,1.97,1.97-1.25,1.24c-.34.34-.4.87-.14,1.28.61.96,1.05,2.02,1.3,3.13.11.47.53.81,1.01.82h1.76v1.35s0,.03,0,.04,0,.03,0,.04v1.35h-1.76c-.48,0-.91.33-1.01.81-.25,1.11-.69,2.17-1.3,3.13-.26.41-.2.94.14,1.28Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M599.49,1307.32c-3.91,0-7.08,3.18-7.08,7.09,0,3.91,3.18,7.08,7.09,7.08,3.91,0,7.08-3.17,7.08-7.08,0-3.91-3.17-7.09-7.09-7.09Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M575.27,1342.11l2.15,2.15-2.15,2.15c-.4.4-.41,1.06,0,1.46.4.4,1.06.41,1.46,0h0l2.15-2.15,2.15,2.15c.41.4,1.06.39,1.46-.03.39-.4.39-1.04,0-1.44l-2.15-2.16,2.15-2.15c.41-.4.42-1.05.03-1.46-.4-.41-1.05-.42-1.46-.03,0,0-.02.02-.03.03l-2.15,2.15-2.15-2.15c-.4-.41-1.05-.42-1.46-.03-.41.4-.42,1.05-.03,1.46,0,0,.02.02.03.03Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M588.25,1331.76h-13.05c-.27,0-.54.11-.73.3l-5.68,5.69c-.19.19-.3.46-.3.73v16.93c0,.57.46,1.03,1.03,1.03h18.73c.57,0,1.03-.46,1.03-1.03v-22.63c0-.57-.46-1.03-1.03-1.03ZM587.22,1354.39h-16.66v-15.48l5.07-5.08h11.58v20.56Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M629.46,1331.76h-13.05c-.27,0-.54.11-.73.3l-5.68,5.69c-.19.19-.3.46-.3.73v16.93c0,.57.46,1.03,1.03,1.03h18.73c.57,0,1.03-.46,1.03-1.03v-22.63c0-.57-.46-1.03-1.03-1.03ZM628.42,1354.38h-16.66v-15.47l5.07-5.08h11.58v20.56Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M615.95,1343.86c-.44.36-.51,1.01-.14,1.45,0,0,0,0,0,0l2.54,3.09c.19.23.46.37.76.38h.04c.28,0,.55-.12.75-.32l5.16-5.39c.4-.4.4-1.06,0-1.46-.4-.4-1.06-.4-1.46,0-.01.01-.02.02-.03.03l-4.35,4.55-1.8-2.19c-.36-.44-1.01-.5-1.45-.14Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M626.23,1676.74c-.97-1.73-2.8-2.8-4.79-2.8h-5.74v-4.81h5.74c1.99,0,3.82-1.07,4.79-2.8,1.5-.15,2.6-1.49,2.45-3-.15-1.5-1.49-2.6-3-2.45s-2.6,1.49-2.45,3c.07.73.43,1.39,1,1.85-.66.88-1.69,1.4-2.79,1.4h-5.74v-8.9c0-.55-.45-1-1-1h-9.13v-5.97c0-1.1.52-2.13,1.39-2.79.95,1.17,2.67,1.35,3.85.4,1.17-.95,1.35-2.67.4-3.85-.95-1.17-2.67-1.35-3.85-.4-.57.46-.93,1.13-1,1.85-1.73.97-2.8,2.8-2.8,4.79v5.97h-4.81v-5.97c0-1.99-1.07-3.82-2.8-4.79-.15-1.5-1.49-2.6-3-2.45-1.5.15-2.6,1.49-2.45,3,.15,1.5,1.49,2.6,3,2.45.73-.07,1.39-.43,1.85-1,.88.66,1.4,1.69,1.4,2.79v5.97h-8.84c-.55,0-1,.45-1,1h0v8.9h-6.04c-1.1,0-2.13-.52-2.79-1.4,1.17-.95,1.36-2.67.4-3.85-.95-1.17-2.67-1.36-3.85-.4-1.17.95-1.36,2.67-.4,3.85.46.57,1.13.93,1.85,1,.97,1.73,2.8,2.8,4.79,2.8h6.04v4.81h-6.04c-1.98,0-3.82,1.07-4.79,2.8-1.51.15-2.62,1.49-2.47,3s1.49,2.62,3,2.47,2.62-1.49,2.47-3c-.07-.73-.44-1.41-1.01-1.87.66-.88,1.69-1.4,2.79-1.39h6.04v3.08c-11.39,4.05-8.78,20.77,3.47,21.01,5.99-.04,10.82-4.93,10.78-10.92,0-1.05-.17-2.1-.48-3.11h2.88v5.81c0,1.98,1.07,3.82,2.8,4.79.15,1.51,1.49,2.62,3,2.47s2.62-1.49,2.47-3c-.15-1.51-1.49-2.62-3-2.47-.73.07-1.41.43-1.87,1.01-.88-.66-1.4-1.69-1.39-2.79v-5.81h9.13c.55,0,1-.45,1-1h0v-9.06h5.74c1.1,0,2.13.52,2.79,1.39-1.17.95-1.35,2.67-.4,3.85.95,1.17,2.67,1.35,3.85.4s1.35-2.67.4-3.85c-.46-.57-1.13-.93-1.85-1h0ZM625.96,1662.88c.41,0,.74.35.73.76,0,.4-.33.72-.73.73-.41,0-.74-.35-.73-.76,0-.4.33-.72.73-.73ZM609.08,1646c.41,0,.73.35.73.76,0,.4-.33.72-.73.73-.41,0-.73-.35-.73-.76,0-.4.33-.72.73-.73ZM593.25,1647.49c-.41,0-.73-.35-.73-.76,0-.4.33-.72.73-.73.41,0,.73.35.73.76,0,.4-.33.72-.73.73ZM576.37,1662.88c.41,0,.74.34.73.75,0,.4-.33.72-.73.73-.41,0-.74-.34-.73-.75,0-.4.33-.73.73-.73ZM576.37,1680.2c-.41,0-.74-.35-.73-.75,0-.4.33-.72.73-.73.41,0,.74.35.73.75,0,.4-.33.72-.73.73ZM609.08,1695.59c.41,0,.74.35.73.76,0,.4-.33.72-.73.73-.41,0-.74-.35-.73-.76,0-.4.33-.72.73-.73ZM590.39,1698.03c-4.85,0-8.79-3.94-8.79-8.79.46-11.66,17.13-11.65,17.59,0,0,4.85-3.94,8.79-8.79,8.79ZM608.37,1675.21c-1.04,0-1.87-.86-1.87-1.9,0-1.02.83-1.85,1.86-1.87,1.04,0,1.87.86,1.87,1.9,0,1.02-.83,1.85-1.86,1.87ZM613.7,1684.01h-4.35v-6.94c2.07-.55,3.3-2.67,2.75-4.74-.55-2.07-2.67-3.3-4.74-2.75s-3.3,2.67-2.75,4.74c.36,1.34,1.4,2.39,2.74,2.75v6.94h-7.52c-2.16-3.89-6.49-6.06-10.91-5.45v-5.84h7.11c.55,2.07,2.68,3.3,4.75,2.75,2.07-.55,3.3-2.68,2.75-4.75-.55-2.07-2.68-3.3-4.75-2.75-1.34.36-2.39,1.41-2.75,2.75h-7.11v-11.48h24.78v24.78ZM597.89,1671.71c.02-1.04.87-1.87,1.91-1.86,1.02.01,1.84.84,1.86,1.86-.02,1.04-.87,1.87-1.91,1.86-1.02-.01-1.84-.84-1.86-1.86ZM625.96,1680.2c-.41,0-.74-.35-.73-.76,0-.4.33-.72.73-.73.41.01.73.35.72.76-.01.39-.33.71-.72.72h0Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M594.64,1685.79c-.46-.17-.97.02-1.21.45-1.65-1.88-4.52-2.07-6.4-.41-1.88,1.65-2.07,4.52-.41,6.4.47.54,1.06.95,1.73,1.22.99.39,3.22.78,3.15-.84-.08-.55-.58-.93-1.12-.86-1.39.19-2.66-.79-2.85-2.17-.19-1.39.79-2.66,2.17-2.85.53-.07,1.07.03,1.54.28-.52.2-.77.78-.57,1.29.1.26.31.47.57.57l1.95.74c.52.19,1.09-.06,1.29-.58l.74-1.95c.2-.52-.06-1.09-.58-1.29Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n  <\\\/g>\\r\\n  <g id=\\\"Layer_8\\\" data-name=\\\"Layer 8\\\">\\r\\n    <g class=\\\"c-1-mobile\\\">\\r\\n      <circle class=\\\"cls-25 c-1-mobile\\\" cx=\\\"505.33\\\" cy=\\\"172.58\\\" r=\\\"18.54\\\"\\\/>\\r\\n      <path class=\\\"cls-18 c-1-mobile\\\" d=\\\"M500.24,181.5l9.1,9.15c5.56-1.22,10.25-4.98,12.69-10.02l-8.98-8.98-12.8,9.85Z\\\"\\\/>\\r\\n      <path class=\\\"cls-20 c-1-mobile\\\" d=\\\"M512.81,173.68l-10.78,7.94c-.93.64-2.2,0-2.2-1.1v-15.87c0-1.1,1.27-1.8,2.2-1.1l10.78,7.94c.75.52.75,1.68,0,2.2Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g class=\\\"c-2-mobile\\\">\\r\\n      <circle class=\\\"cls-25 c-2-mobile\\\" cx=\\\"603.38\\\" cy=\\\"423.71\\\" r=\\\"18.54\\\"\\\/>\\r\\n      <path class=\\\"cls-18 c-2-mobile\\\" d=\\\"M598.28,432.63l9.1,9.15c5.56-1.22,10.25-4.98,12.69-10.02l-8.98-8.98-12.8,9.85Z\\\"\\\/>\\r\\n      <path class=\\\"cls-20 c-2-mobile\\\" d=\\\"M610.85,424.81l-10.78,7.94c-.93.64-2.2,0-2.2-1.1v-15.87c0-1.1,1.27-1.8,2.2-1.1l10.78,7.94c.75.52.75,1.68,0,2.2Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <circle class=\\\"cls-25\\\" cx=\\\"600.77\\\" cy=\\\"1086.79\\\" r=\\\"18.54\\\"\\\/>\\r\\n      <path class=\\\"cls-18\\\" d=\\\"M595.68,1095.71l9.1,9.15c5.56-1.22,10.25-4.98,12.69-10.02l-8.98-8.98-12.8,9.85Z\\\"\\\/>\\r\\n      <path class=\\\"cls-20\\\" d=\\\"M608.25,1087.89l-10.78,7.94c-.93.64-2.2,0-2.2-1.1v-15.87c0-1.1,1.27-1.8,2.2-1.1l10.78,7.94c.75.52.75,1.68,0,2.2Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <circle class=\\\"cls-25\\\" cx=\\\"602.69\\\" cy=\\\"1421.86\\\" r=\\\"18.54\\\"\\\/>\\r\\n      <path class=\\\"cls-18\\\" d=\\\"M597.6,1430.79l9.1,9.15c5.56-1.22,10.25-4.98,12.69-10.02l-8.98-8.98-12.8,9.85Z\\\"\\\/>\\r\\n      <path class=\\\"cls-20\\\" d=\\\"M610.17,1422.96l-10.78,7.94c-.93.64-2.2,0-2.2-1.1v-15.87c0-1.1,1.27-1.8,2.2-1.1l10.78,7.94c.75.52.75,1.68,0,2.2Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <circle class=\\\"cls-25\\\" cx=\\\"600.07\\\" cy=\\\"1772.82\\\" r=\\\"18.54\\\"\\\/>\\r\\n      <path class=\\\"cls-18\\\" d=\\\"M594.98,1781.74l9.1,9.15c5.56-1.22,10.25-4.98,12.69-10.02l-8.98-8.98-12.8,9.85Z\\\"\\\/>\\r\\n      <path class=\\\"cls-20\\\" d=\\\"M607.55,1773.92l-10.78,7.94c-.93.64-2.2,0-2.2-1.1v-15.87c0-1.1,1.27-1.8,2.2-1.1l10.78,7.94c.75.52.75,1.68,0,2.2Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g class=\\\"c-3-mobile\\\">\\r\\n      <circle class=\\\"cls-25 c-3-mobile\\\" cx=\\\"274.18\\\" cy=\\\"1425.14\\\" r=\\\"18.54\\\"\\\/>\\r\\n      <path class=\\\"cls-18 c-3-mobile\\\" d=\\\"M269.08,1434.06l9.1,9.15c5.56-1.22,10.25-4.98,12.69-10.02l-8.98-8.98-12.8,9.85Z\\\"\\\/>\\r\\n      <path class=\\\"cls-20 c-3-mobile\\\" d=\\\"M281.65,1426.24l-10.78,7.94c-.93.64-2.2,0-2.2-1.1v-15.87c0-1.1,1.27-1.8,2.2-1.1l10.78,7.94c.75.52.75,1.68,0,2.2Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <circle class=\\\"cls-25\\\" cx=\\\"601.49\\\" cy=\\\"728.59\\\" r=\\\"18.54\\\"\\\/>\\r\\n      <path class=\\\"cls-18\\\" d=\\\"M596.39,737.51l9.1,9.15c5.56-1.22,10.25-4.98,12.69-10.02l-8.98-8.98-12.8,9.85Z\\\"\\\/>\\r\\n      <path class=\\\"cls-20\\\" d=\\\"M608.96,729.69l-10.78,7.94c-.93.64-2.2,0-2.2-1.1v-15.87c0-1.1,1.27-1.8,2.2-1.1l10.78,7.94c.75.52.75,1.68,0,2.2Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n  <\\\/g>\\r\\n  <g id=\\\"Layer_6\\\" data-name=\\\"Layer 6\\\">\\r\\n    <g id=\\\"_07_Big_Data\\\" data-name=\\\"07 Big Data\\\">\\r\\n      <g>\\r\\n        <path class=\\\"cls-19\\\" d=\\\"M603.36,304.35c-13.69,0-24.42,3.63-24.42,8.27v34.73c0,4.64,10.73,8.27,24.42,8.27s24.42-3.63,24.42-8.27v-34.73c0-4.64-10.73-8.27-24.42-8.27h0ZM626.77,347.35c0,3.51-9.4,7.26-23.41,7.26s-23.41-3.75-23.41-7.26v-9.18c6.74,7.81,40.06,7.83,46.82,0v9.18h0ZM626.77,335.78c0,3.51-9.4,7.26-23.41,7.26s-23.41-3.75-23.41-7.26v-9.17c6.77,7.82,40.07,7.81,46.82,0v9.17h0ZM626.77,324.2c0,3.51-9.4,7.26-23.41,7.26s-23.41-3.75-23.41-7.26v-9.18c2.97,3.43,12.19,5.88,23.41,5.88s20.45-2.44,23.41-5.88v9.18Z\\\"\\\/>\\r\\n        <path class=\\\"cls-19\\\" d=\\\"M611.58,326.18c0,1.37-1.12,2.48-2.48,2.48h-11.44c-1.37,0-2.48-1.11-2.48-2.48s1.12-2.48,2.48-2.48h11.44c1.37,0,2.48,1.12,2.48,2.48Z\\\"\\\/>\\r\\n        <path class=\\\"cls-19\\\" d=\\\"M611.55,337.77c0,1.37-1.11,2.48-2.48,2.48h-11.44c-1.37,0-2.48-1.12-2.48-2.48s1.12-2.48,2.48-2.48h11.44c1.37,0,2.48,1.11,2.48,2.48Z\\\"\\\/>\\r\\n        <path class=\\\"cls-19\\\" d=\\\"M611.55,349.38c0,1.37-1.11,2.49-2.48,2.49h-11.44c-1.37,0-2.48-1.12-2.48-2.49s1.12-2.48,2.48-2.48h11.44c1.37,0,2.48,1.12,2.48,2.48Z\\\"\\\/>\\r\\n      <\\\/g>\\r\\n    <\\\/g>\\r\\n    <g>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M247.15,1306.23c-.91.37-1.55,1.21-1.65,2.19-.15,1.68-.15,3.36,0,5.04.1.98.74,1.83,1.65,2.19l2.83,1.13c.63,2.67,1.69,5.22,3.13,7.55l-1.2,2.8c-.41.91-.26,1.97.38,2.73,1.08,1.28,2.26,2.47,3.54,3.54.76.64,1.82.79,2.72.39l1.5-.64v4.24c0,1.62,1.32,2.94,2.94,2.94h23.5c1.62,0,2.94-1.32,2.94-2.94v-4.24l1.5.64c.34.15.7.22,1.07.22.61,0,1.19-.21,1.66-.61,1.28-1.08,2.47-2.26,3.54-3.54.64-.76.79-1.82.39-2.73l-1.2-2.8c1.45-2.33,2.51-4.88,3.13-7.55l2.83-1.13c.91-.37,1.55-1.21,1.65-2.19.15-1.68.15-3.36,0-5.04-.1-.98-.74-1.82-1.65-2.19l-2.83-1.13c-.63-2.67-1.69-5.22-3.13-7.55l1.2-2.8c.41-.91.26-1.97-.38-2.73-1.08-1.28-2.26-2.47-3.54-3.54-.76-.64-1.82-.79-2.73-.39l-2.81,1.2c-2.33-1.45-4.88-2.51-7.55-3.13l-1.13-2.83c-.37-.91-1.21-1.55-2.19-1.65-1.68-.15-3.36-.15-5.04,0-.98.1-1.83.74-2.19,1.65l-1.13,2.83c-2.67.63-5.22,1.69-7.55,3.13l-2.8-1.2c-.91-.41-1.97-.26-2.73.39-1.28,1.08-2.47,2.26-3.54,3.54-.64.76-.79,1.82-.39,2.72l1.2,2.8c-1.45,2.33-2.51,4.88-3.13,7.55l-2.83,1.13ZM281.62,1302.53l4.49,4.49h-3.51c-.54,0-.98-.44-.98-.98v-3.51ZM288.59,1306.73l-6.69-6.69c-.55-.55-1.3-.86-2.08-.86h-16.82c-1.62,0-2.94,1.32-2.94,2.94v21.76c-7.15-8.11-6.38-20.49,1.73-27.65,8.11-7.15,20.49-6.38,27.65,1.73,6.53,7.4,6.53,18.51,0,25.91v-15.07c0-.78-.31-1.53-.86-2.08ZM286.52,1338.36h-23.5c-.54,0-.98-.44-.98-.98v-35.26c0-.54.44-.98.98-.98h16.65v4.9c0,1.62,1.32,2.94,2.94,2.94h4.9v28.4c0,.54-.44.98-.98.98ZM251.78,1306.02c.6-2.79,1.7-5.45,3.26-7.85.18-.27.21-.62.08-.92l-1.4-3.28c-.11-.23-.08-.5.08-.69,1.01-1.2,2.12-2.31,3.32-3.32.2-.15.46-.18.69-.07l3.28,1.4c.3.13.64.1.92-.08,2.4-1.56,5.06-2.66,7.85-3.26.32-.07.58-.29.71-.59l1.32-3.3c.09-.24.3-.4.56-.43,1.56-.14,3.13-.14,4.68,0,.25.03.45.2.54.43l1.32,3.31c.12.3.39.53.71.59,2.79.6,5.45,1.7,7.85,3.26.27.18.62.21.92.08l3.28-1.4c.23-.11.5-.08.69.08,1.2,1.01,2.31,2.12,3.32,3.32.15.2.18.46.07.69l-1.4,3.28c-.13.3-.1.64.08.92,1.56,2.4,2.66,5.06,3.26,7.85.07.32.29.58.59.71l3.3,1.32c.24.09.4.3.43.56.14,1.56.14,3.13,0,4.68-.03.25-.2.45-.43.54l-3.31,1.32c-.3.12-.53.39-.59.71-.6,2.79-1.7,5.45-3.26,7.85-.18.27-.21.62-.08.92l1.4,3.28c.11.23.08.5-.09.69-1.01,1.2-2.12,2.31-3.32,3.32-.19.16-.46.18-.69.07l-2.27-.97v-4.33c8.7-8.11,9.18-21.75,1.07-30.45-8.11-8.7-21.75-9.18-30.45-1.07-8.7,8.11-9.18,21.75-1.07,30.45.34.37.7.73,1.07,1.07v4.33l-2.27.97c-.23.11-.5.08-.69-.08-1.2-1.01-2.31-2.12-3.32-3.32-.15-.2-.18-.46-.07-.69l1.4-3.28c.13-.3.1-.64-.08-.92-1.56-2.4-2.66-5.06-3.26-7.85-.07-.32-.29-.58-.59-.71l-3.3-1.32c-.24-.09-.4-.3-.43-.56-.14-1.56-.14-3.13,0-4.68.03-.25.2-.45.43-.54l3.31-1.32c.3-.12.53-.39.59-.71Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M266.24,1310.65c.18.18.43.29.69.29h.07c.28-.02.54-.16.71-.39l2.94-3.92c.32-.43.24-1.05-.2-1.37-.43-.32-1.05-.24-1.37.2l-2.26,3.01-.18-.18c-.39-.38-1.01-.36-1.38.02-.37.38-.37.98,0,1.36l.98.98Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M273.79,1308.98h2.94c.54,0,.98-.44.98-.98s-.44-.98-.98-.98h-2.94c-.54,0-.98.44-.98.98s.44.98.98.98Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M266.24,1326.32c.18.18.43.29.69.29h.07c.28-.02.54-.16.71-.39l2.94-3.92c.32-.43.24-1.05-.2-1.37-.43-.32-1.05-.24-1.37.2l-2.26,3.01-.18-.18c-.39-.38-1.01-.36-1.38.02-.37.38-.37.98,0,1.36l.98.98Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M283.58,1322.69h-9.79c-.54,0-.98.44-.98.98s.44.98.98.98h9.79c.54,0,.98-.44.98-.98s-.44-.98-.98-.98Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M270.56,1313.18c-.38-.38-1-.38-1.38,0l-1.27,1.27-1.27-1.27c-.39-.38-1.01-.36-1.38.02-.37.38-.37.98,0,1.36l1.27,1.27-1.27,1.27c-.39.38-.4,1-.02,1.38.38.39,1,.4,1.38.02,0,0,.02-.02.02-.02l1.27-1.27,1.27,1.27c.39.38,1.01.36,1.38-.02.37-.38.37-.98,0-1.36l-1.27-1.27,1.27-1.27c.39-.37.42-.98.05-1.37-.01-.01-.02-.02-.05-.02Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M283.58,1314.85h-9.79c-.54,0-.98.44-.98.98s.44.98.98.98h9.79c.54,0,.98-.44.98-.98s-.44-.98-.98-.98Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M270.56,1328.85c-.38-.38-1-.38-1.38,0l-1.27,1.27-1.27-1.27c-.39-.38-1.01-.36-1.38.02-.37.38-.37.98,0,1.36l1.27,1.27-1.27,1.27c-.39.38-.4,1-.02,1.38.38.39,1,.4,1.38.02,0,0,.02-.02.02-.02l1.27-1.27,1.27,1.27c.39.38,1.01.36,1.38-.02.37-.38.37-.98,0-1.36l-1.27-1.27,1.27-1.27c.4-.36.48-.94.12-1.34-.03-.03-.05-.06-.12-.04Z\\\"\\\/>\\r\\n      <path class=\\\"cls-19\\\" d=\\\"M283.58,1330.52h-9.79c-.54,0-.98.44-.98.98s.44.98.98.98h9.79c.54,0,.98-.44.98-.98s-.44-.98-.98-.98Z\\\"\\\/>\\r\\n    <\\\/g>\\r\\n  <\\\/g>\\r\\n<\\\/svg><\\\/div>\";\n  const container = wrapper.querySelector(\".flowchart-svg-container\");\n  \n  let currentSvg = null;\n  let isInitialized = false;\n  let currentMode = null; \/\/ \"desktop\" or \"mobile\"\n\n  function getCurrentSvg() {\n    return container ? container.querySelector(\"svg\") : null;\n  }\n\n  function getCurrentBoxes() {\n    const isMobile = window.innerWidth <= breakpoint;\n    return isMobile ? mobileBoxes : desktopBoxes;\n  }\n\n  function getCurrentSvgHtml() {\n    const isMobile = window.innerWidth <= breakpoint;\n    return isMobile ? mobileSvgHtml : desktopSvgHtml;\n  }\n\n  function clearCurrentSvg() {\n    if (container) {\n      container.innerHTML = \"\";\n    }\n    currentSvg = null;\n    isInitialized = false;\n  }\n\n  function loadAndInitSvg() {\n    const isMobile = window.innerWidth <= breakpoint;\n    const newMode = isMobile ? \"mobile\" : \"desktop\";\n    \n    \/\/ Check if we already have the correct SVG loaded\n    if (currentMode === newMode && isInitialized && currentSvg) {\n      return; \/\/ Already loaded and initialized\n    }\n    \n    \/\/ Clear existing SVG\n    clearCurrentSvg();\n    currentMode = newMode;\n    \n    \/\/ Get SVG HTML for current mode\n    const svgHtml = getCurrentSvgHtml();\n    if (!svgHtml || svgHtml.trim() === \"\") {\n      if (container) {\n        container.innerHTML = '<div class=\"flow-chart-svg__missing\" style=\"color:#888\">Please configure an SVG source.<\/div>';\n      }\n      return;\n    }\n    \n    \/\/ Insert SVG content\n    if (container) {\n      container.innerHTML = svgHtml;\n      \n      \/\/ Wait for SVG to be in DOM, then initialize\n      setTimeout(function() {\n        currentSvg = getCurrentSvg();\n        if (currentSvg) {\n          initFlowChart(currentSvg);\n          isInitialized = true;\n        }\n      }, 50);\n    }\n  }\n\n  function initFlowChart(svg) {\n  if (!svg) return;\n    const boxes = getCurrentBoxes();\n\n  \/\/ Track currently active popup to hide it when switching to another element\n  let activePopup = null;\n  let activeTarget = null;\n\n  function hideActivePopup() {\n    if (activePopup) {\n      const originalOpacity = activeTarget ? (activeTarget.getAttribute(\"data-original-opacity\") || \"1\") : \"1\";\n      if (activeTarget) {\n        activeTarget.style.opacity = originalOpacity;\n      }\n      showHiddenElementsWithClasses();\n      if (activePopup) {\n        activePopup.style.opacity = \"0\";\n        activePopup.style.pointerEvents = \"none\";\n      }\n      activePopup = null;\n      activeTarget = null;\n    }\n  }\n\n  let defs = svg.querySelector(\"defs\");\n  if (!defs) { defs = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"defs\"); svg.insertBefore(defs, svg.firstChild); }\n  if (!svg.querySelector(\"#fcBoxGrad\")) {\n    const lg = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"linearGradient\");\n    lg.setAttribute(\"id\",\"fcBoxGrad\");\n    lg.setAttribute(\"x1\",\"0%\"); lg.setAttribute(\"y1\",\"0%\");\n    lg.setAttribute(\"x2\",\"100%\"); lg.setAttribute(\"y2\",\"100%\");\n    lg.innerHTML = '<stop offset=\"0%\" stop-color=\"#B2FF6A\"\/><stop offset=\"100%\" stop-color=\"#69EB7C\"\/>';\n    defs.appendChild(lg);\n  }\n  if (!svg.querySelector(\"#fcBoxShadowCustom\")) {\n    const f2 = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"filter\");\n    f2.setAttribute(\"id\",\"fcBoxShadowCustom\");\n    f2.setAttribute(\"x\",\"-10%\"); f2.setAttribute(\"y\",\"-10%\");\n    f2.setAttribute(\"width\",\"120%\"); f2.setAttribute(\"height\",\"120%\");\n    f2.innerHTML = '<feDropShadow dx=\"0\" dy=\"0\" stdDeviation=\"12.5\" flood-color=\"#46DF93\" flood-opacity=\"0.6\"\/>';\n    defs.appendChild(f2);\n  }\n\n  function hideOtherElementsWithSameClass(target) {\n    if (!target || !target.hasAttribute(\"class\")) return;\n    const classes = (target.getAttribute(\"class\") || \"\").split(\/\\s+\/).filter(Boolean);\n    classes.forEach((cn) => {\n      svg.querySelectorAll(\".\" + cn).forEach((el) => {\n        if (el !== target) {\n          if (!el.hasAttribute(\"data-original-opacity\")) el.setAttribute(\"data-original-opacity\", el.style.opacity || \"1\");\n          el.style.opacity = \"0\";\n          el.style.pointerEvents = \"none\";\n        }\n      });\n    });\n  }\n  function showHiddenElementsWithClasses() {\n    svg.querySelectorAll(\"[data-original-opacity]\").forEach((el) => {\n      el.style.opacity = el.getAttribute(\"data-original-opacity\");\n      el.style.pointerEvents = \"auto\";\n    });\n  }\n\n  function openPopup(payload) {\n    const $ov = $('<div class=\"video-popup-overlay\" style=\"position:fixed;inset:0;background:rgba(0,0,0,.8);z-index:99999;display:flex;align-items:center;justify-content:center;\"><\/div>');\n    const $wrap = $('<div style=\"position:relative;width:90%;max-width:900px;max-height:90vh;background:#000;border-radius:8px;overflow:hidden;\"><\/div>');\n    const $close = $('<button style=\"position:absolute;padding:5px;top:10px;right:12px;width:36px;height:36px;border:none;border-radius:18px;background:rgba(255,255,255,.25);color:#fff;font-size:20px;cursor:pointer;z-index:2;\">\u00d7<\/button>');\n    let inner = \"\";\n    if (payload.type === \"image\") {\n      const img = payload.image || \"\";\n      inner = img ? `<img decoding=\"async\" src=\"${img}\" style=\"display:block;max-width:100%;max-height:90vh;margin:0 auto;\" \/>` : `<div style=\"color:#fff;padding:30px;\">No image<\/div>`;\n    } else {\n      const iframe = (payload.iframe||\"\").trim();\n      const url    = (payload.url||\"\").trim();\n      const file   = (payload.file||\"\").trim();\n      if (iframe) inner = iframe;\n      else if (url) {\n        if (\/youtube\\.com|youtu\\.be|vimeo\\.com\/i.test(url)) {\n          const yt = url.match(\/(?:v=|youtu\\.be\\\/|embed\\\/)([^&?#]+)\/i);\n          inner = yt && yt[1]\n            ? `<iframe src=\"https:\/\/www.youtube.com\/embed\/${yt[1]}?autoplay=1&rel=0\" allow=\"autoplay;encrypted-media\" allowfullscreen style=\"width:100%;aspect-ratio:16\/9;border:0;\"><\/iframe>`\n            : `<iframe src=\"${url}\" allow=\"autoplay;encrypted-media\" allowfullscreen style=\"width:100%;aspect-ratio:16\/9;border:0;\"><\/iframe>`;\n        } else {\n          inner = `<video controls autoplay style=\"width:100%;max-height:90vh;\"><source src=\"${url}\" type=\"video\/mp4\"><\/video>`;\n        }\n      } else if (file) {\n        inner = `<video controls autoplay style=\"width:100%;max-height:90vh;\"><source src=\"${file}\" type=\"video\/mp4\"><\/video>`;\n      } else inner = `<div style=\"color:#fff;padding:30px;\">No video<\/div>`;\n    }\n    $wrap.append($close).append(inner);\n    $ov.append($wrap).appendTo(\"body\");\n    $close.on(\"click\", ()=> $ov.remove());\n    $ov.on(\"click\", (ev)=>{ if (ev.target=== $ov[0]) $ov.remove(); });\n    $(document).on(\"keydown.svgpop\", (ev)=>{ if (ev.key===\"Escape\"){ $ov.remove(); $(document).off(\"keydown.svgpop\"); }});\n  }\n\n  function setupMediaElement(containerId, mediaUrl) {\n    const container = document.getElementById(containerId);\n    if (!container || !mediaUrl) return;\n    const isVideo = \/\\.(mp4|webm|ogg|mov|avi)$\/i.test(mediaUrl);\n    if (isVideo) {\n      const video = document.createElement(\"video\");\n      video.style.cssText = \"width:100%; height:100%; object-fit:cover; display:block;\";\n      video.muted = true; video.autoplay = true; video.loop = true; video.playsInline = true; video.preload = \"auto\";\n      const source = document.createElement(\"source\");\n      source.src = mediaUrl; source.type = \"video\/mp4\";\n      video.appendChild(source); container.appendChild(video);\n      video.play().catch(()=>{});\n    } else {\n      const img = document.createElement(\"img\");\n      img.src = mediaUrl;\n      img.style.cssText = \"width:100%; height:100%; object-fit:cover; display:block;\";\n      img.alt = \"Media thumbnail\";\n      container.appendChild(img);\n    }\n  }\n\n  function updateSvgTextForTarget(target, newText) {\n    if (!target || !newText) return;\n    const classes = (target.getAttribute(\"class\") || \"\").split(\/\\s+\/).filter(Boolean);\n    classes.forEach((cn) => {\n      try {\n        svg.querySelectorAll(\"text.\" + cn).forEach((te) => {\n          const tspans = Array.from(te.querySelectorAll(\"tspan\"));\n          \n          if (tspans.length > 0) {\n            \/\/ CRITICAL: Preserve ALL original tspans - never remove them\n            \/\/ Just update textContent, keeping all attributes (x, y, class, text-anchor, etc.) intact\n            \n            \/\/ Preserve text-anchor from parent text element if not set on tspans\n            const parentTextAnchor = te.getAttribute(\"text-anchor\");\n            if (parentTextAnchor) {\n              tspans.forEach((ts) => {\n                if (!ts.hasAttribute(\"text-anchor\")) {\n                  ts.setAttribute(\"text-anchor\", parentTextAnchor);\n                }\n              });\n            }\n            \n            \/\/ Group tspans by Y position to identify visual lines\n            const linesByY = {};\n            tspans.forEach((ts) => {\n              const y = ts.getAttribute(\"y\") || \"0\";\n              if (!linesByY[y]) {\n                linesByY[y] = [];\n              }\n              linesByY[y].push(ts);\n            });\n            \n            const sortedYKeys = Object.keys(linesByY).sort((a, b) => parseFloat(a) - parseFloat(b));\n            const explicitLines = newText.split(\/\\r?\\n\/);\n            \n            \/\/ If no explicit line breaks, preserve original distribution pattern line by line\n            if (explicitLines.length === 1 && sortedYKeys.length > 1) {\n              const words = newText.split(\/\\s+\/).filter(Boolean);\n              \n              if (words.length > 0) {\n                \/\/ First pass: collect line data with weights\n                const linesData = [];\n                let totalLineWeight = 0;\n                \n                sortedYKeys.forEach((yKey) => {\n                  const tspansForLine = linesByY[yKey];\n                  const sortedTspans = Array.from(tspansForLine).sort((a, b) => {\n                    const xA = parseFloat(a.getAttribute(\"x\") || \"0\");\n                    const xB = parseFloat(b.getAttribute(\"x\") || \"0\");\n                    return xA - xB;\n                  });\n                  \n                  const lineTspans = [];\n                  let lineWeight = 0;\n                  \n                  sortedTspans.forEach((ts) => {\n                    let originalText = ts.getAttribute(\"data-original-text\");\n                    if (!originalText) {\n                      originalText = ts.textContent || \"\";\n                      ts.setAttribute(\"data-original-text\", originalText);\n                    }\n                    const trimmedOriginal = originalText.trim();\n                    const originalWords = trimmedOriginal.split(\/\\s+\/).filter(Boolean);\n                    const originalWordCount = originalWords.length;\n                    const charLength = trimmedOriginal.length;\n                    \n                    \/\/ Weight: actual word count if > 0, otherwise use character-based weight\n                    let weight = 0;\n                    if (originalWordCount > 0) {\n                      weight = originalWordCount;\n                    } else if (charLength === 1) {\n                      weight = 0.5; \/\/ Single character\n                    } else if (charLength > 1) {\n                      weight = 1; \/\/ Multi-character but no spaces\n                    }\n                    \n                    lineWeight += weight;\n                    \n                    lineTspans.push({\n                      tspan: ts,\n                      originalText: trimmedOriginal,\n                      originalWordCount: originalWordCount,\n                      charLength: charLength,\n                      weight: weight,\n                      hadContent: trimmedOriginal.length > 0,\n                      x: ts.getAttribute(\"x\"),\n                      y_attr: ts.getAttribute(\"y\"),\n                      dx: ts.getAttribute(\"dx\"),\n                      dy: ts.getAttribute(\"dy\")\n                    });\n                  });\n                  \n                  totalLineWeight += lineWeight;\n                  linesData.push({\n                    y: yKey,\n                    tspans: lineTspans,\n                    weight: lineWeight\n                  });\n                });\n                \n                \/\/ Second pass: distribute words to lines proportionally\n                let wordIdx = 0;\n                let lineAccumulatedError = 0;\n                \n                linesData.forEach((lineData, lineIdx) => {\n                  const remainingLines = linesData.length - lineIdx;\n                  const remainingWords = words.length - wordIdx;\n                  \n                  \/\/ Calculate words for this line\n                  let wordsForThisLine;\n                  if (remainingLines === 1) {\n                    \/\/ Last line gets all remaining words\n                    wordsForThisLine = remainingWords;\n                  } else if (totalLineWeight > 0) {\n                    \/\/ Distribute proportionally based on line weight\n                    const proportionalShare = (lineData.weight \/ totalLineWeight) * words.length;\n                    const roundedShare = Math.round(proportionalShare + lineAccumulatedError);\n                    lineAccumulatedError += proportionalShare - roundedShare;\n                    wordsForThisLine = Math.max(0, roundedShare);\n                    \n                    \/\/ Ensure at least 1 word if line had content\n                    if (wordsForThisLine === 0 && lineData.weight > 0 && remainingWords > 0) {\n                      wordsForThisLine = 1;\n                      lineAccumulatedError = 0;\n                    }\n                  } else {\n                    \/\/ Fallback: distribute evenly\n                    wordsForThisLine = Math.ceil(remainingWords \/ remainingLines);\n                  }\n                  \n                  wordsForThisLine = Math.min(wordsForThisLine, remainingWords);\n                  \n                  \/\/ Third pass: distribute words within this line\n                  const lineWords = words.slice(wordIdx, wordIdx + wordsForThisLine);\n                  const lineTotalWeight = lineData.tspans.reduce((sum, item) => sum + item.weight, 0);\n                  \n                  \/\/ Check if original pattern had split words (single chars or partial words)\n                  const hasSplitPattern = lineData.tspans.some(item => \n                    item.charLength === 1 || (item.charLength > 1 && item.originalWordCount === 0)\n                  );\n                  \n                  if (hasSplitPattern && lineWords.length > 0) {\n                    \/\/ Original had split words - distribute characters\/parts proportionally\n                    const combinedText = lineWords.join(\" \");\n                    const totalChars = combinedText.length;\n                    let charIdx = 0;\n                    let tspanAccumulatedError = 0;\n                    \n                    lineData.tspans.forEach((item, tspanIdx) => {\n                      if (charIdx < totalChars && lineTotalWeight > 0) {\n                        \/\/ Calculate character share based on original weight\n                        const charShare = (item.weight \/ lineTotalWeight) * totalChars;\n                        const roundedChars = Math.round(charShare + tspanAccumulatedError);\n                        tspanAccumulatedError += charShare - roundedChars;\n                        \n                        let charsForThisTspan = Math.max(0, roundedChars);\n                        \n                        \/\/ Ensure tspans with content get at least 1 char if possible\n                        if (item.hadContent && charsForThisTspan === 0 && charIdx < totalChars) {\n                          charsForThisTspan = 1;\n                          tspanAccumulatedError = 0;\n                        }\n                        \n                        const remainingChars = totalChars - charIdx;\n                        const actualChars = Math.min(charsForThisTspan, remainingChars);\n                        \n                        \/\/ Last tspan gets remaining characters\n                        if (tspanIdx === lineData.tspans.length - 1 && charIdx < totalChars) {\n                          item.tspan.textContent = combinedText.slice(charIdx);\n                          charIdx = totalChars;\n                        } else if (actualChars > 0) {\n                          item.tspan.textContent = combinedText.slice(charIdx, charIdx + actualChars);\n                          charIdx += actualChars;\n                        } else {\n                          item.tspan.textContent = \"\";\n                        }\n                      } else {\n                        item.tspan.textContent = \"\";\n                      }\n                      \n                      \/\/ Always preserve positioning attributes\n                      if (item.x !== null) item.tspan.setAttribute(\"x\", item.x);\n                      if (item.y_attr !== null) item.tspan.setAttribute(\"y\", item.y_attr);\n                      if (item.dx !== null) item.tspan.setAttribute(\"dx\", item.dx);\n                      if (item.dy !== null) item.tspan.setAttribute(\"dy\", item.dy);\n                    });\n                  } else {\n                    \/\/ Original had whole words - distribute words normally\n                    let tspanWordIdx = 0;\n                    let tspanAccumulatedError = 0;\n                    \n                    lineData.tspans.forEach((item, tspanIdx) => {\n                      if (tspanWordIdx < lineWords.length && lineTotalWeight > 0) {\n                        \/\/ Calculate proportional share within line\n                        const proportionalShare = (item.weight \/ lineTotalWeight) * lineWords.length;\n                        const roundedShare = Math.round(proportionalShare + tspanAccumulatedError);\n                        tspanAccumulatedError += proportionalShare - roundedShare;\n                        \n                        let wordsForThisTspan = Math.max(0, roundedShare);\n                        \n                        \/\/ Ensure tspans with content get at least 1 word if possible\n                        if (item.hadContent && wordsForThisTspan === 0 && tspanWordIdx < lineWords.length) {\n                          const tspansWithContentRemaining = lineData.tspans.slice(tspanIdx).filter(i => i.hadContent).length;\n                          if (tspansWithContentRemaining <= (lineWords.length - tspanWordIdx)) {\n                            wordsForThisTspan = 1;\n                            tspanAccumulatedError = 0;\n                          }\n                        }\n                        \n                        const remainingLineWords = lineWords.length - tspanWordIdx;\n                        const actualWords = Math.min(wordsForThisTspan, remainingLineWords);\n                        \n                        \/\/ Last tspan in line gets remaining words\n                        if (tspanIdx === lineData.tspans.length - 1 && tspanWordIdx < lineWords.length) {\n                          const tspanWords = lineWords.slice(tspanWordIdx);\n                          item.tspan.textContent = tspanWords.join(\" \");\n                          tspanWordIdx = lineWords.length;\n                        } else if (actualWords > 0) {\n                          const tspanWords = lineWords.slice(tspanWordIdx, tspanWordIdx + actualWords);\n                          item.tspan.textContent = tspanWords.join(\" \");\n                          tspanWordIdx += actualWords;\n                        } else {\n                          item.tspan.textContent = \"\";\n                        }\n                      } else {\n                        item.tspan.textContent = \"\";\n                      }\n                      \n                      \/\/ Always preserve positioning attributes\n                      if (item.x !== null) item.tspan.setAttribute(\"x\", item.x);\n                      if (item.y_attr !== null) item.tspan.setAttribute(\"y\", item.y_attr);\n                      if (item.dx !== null) item.tspan.setAttribute(\"dx\", item.dx);\n                      if (item.dy !== null) item.tspan.setAttribute(\"dy\", item.dy);\n                    });\n                  }\n                  \n                  wordIdx += wordsForThisLine;\n                  \/\/ Update total weight for remaining lines\n                  totalLineWeight -= lineData.weight;\n                });\n              } else {\n                \/\/ No words - clear all tspans\n                tspans.forEach((ts) => {\n                  ts.textContent = \"\";\n                });\n              }\n            } else {\n              \/\/ Use explicit lines or single line - distribute by line\n              sortedYKeys.forEach((yKey, lineIdx) => {\n                const tspansForLine = linesByY[yKey];\n                const lineText = explicitLines[lineIdx] !== undefined ? explicitLines[lineIdx] : \"\";\n                \n                if (tspansForLine.length === 1) {\n                  tspansForLine[0].textContent = lineText;\n                  \/\/ Preserve positioning attributes\n                  const ts = tspansForLine[0];\n                  const x = ts.getAttribute(\"x\");\n                  const y = ts.getAttribute(\"y\");\n                  const dx = ts.getAttribute(\"dx\");\n                  const dy = ts.getAttribute(\"dy\");\n                  if (x !== null) ts.setAttribute(\"x\", x);\n                  if (y !== null) ts.setAttribute(\"y\", y);\n                  if (dx !== null) ts.setAttribute(\"dx\", dx);\n                  if (dy !== null) ts.setAttribute(\"dy\", dy);\n                } else {\n                  if (lineText) {\n                    const words = lineText.split(\/\\s+\/).filter(Boolean);\n                    if (words.length > 0) {\n                      const wordsPerTspan = Math.floor(words.length \/ tspansForLine.length);\n                      const remainder = words.length % tspansForLine.length;\n                      \n                      let wordIdx = 0;\n                      tspansForLine.forEach((ts, idx) => {\n                        \/\/ Preserve positioning attributes before updating\n                        const x = ts.getAttribute(\"x\");\n                        const y = ts.getAttribute(\"y\");\n                        const dx = ts.getAttribute(\"dx\");\n                        const dy = ts.getAttribute(\"dy\");\n                        \n                        const extraWord = idx < remainder ? 1 : 0;\n                        const tspanWordCount = wordsPerTspan + extraWord;\n                        const tspanWords = words.slice(wordIdx, wordIdx + tspanWordCount);\n                        ts.textContent = tspanWords.join(\" \");\n                        wordIdx += tspanWordCount;\n                        \n                        \/\/ Restore positioning attributes\n                        if (x !== null) ts.setAttribute(\"x\", x);\n                        if (y !== null) ts.setAttribute(\"y\", y);\n                        if (dx !== null) ts.setAttribute(\"dx\", dx);\n                        if (dy !== null) ts.setAttribute(\"dy\", dy);\n                      });\n                    } else {\n                      tspansForLine.forEach((ts) => {\n                        ts.textContent = \"\";\n                        \/\/ Preserve positioning attributes even for empty tspans\n                        const x = ts.getAttribute(\"x\");\n                        const y = ts.getAttribute(\"y\");\n                        const dx = ts.getAttribute(\"dx\");\n                        const dy = ts.getAttribute(\"dy\");\n                        if (x !== null) ts.setAttribute(\"x\", x);\n                        if (y !== null) ts.setAttribute(\"y\", y);\n                        if (dx !== null) ts.setAttribute(\"dx\", dx);\n                        if (dy !== null) ts.setAttribute(\"dy\", dy);\n                      });\n                    }\n                  } else {\n                    tspansForLine.forEach((ts) => {\n                      ts.textContent = \"\";\n                      \/\/ Preserve positioning attributes even for empty tspans\n                      const x = ts.getAttribute(\"x\");\n                      const y = ts.getAttribute(\"y\");\n                      const dx = ts.getAttribute(\"dx\");\n                      const dy = ts.getAttribute(\"dy\");\n                      if (x !== null) ts.setAttribute(\"x\", x);\n                      if (y !== null) ts.setAttribute(\"y\", y);\n                      if (dx !== null) ts.setAttribute(\"dx\", dx);\n                      if (dy !== null) ts.setAttribute(\"dy\", dy);\n                    });\n                  }\n                }\n              });\n            }\n            \n            \/\/ Handle remaining lines if new text has more lines than Y positions\n            if (linesToDistribute.length > sortedYKeys.length && sortedYKeys.length > 0) {\n              const lastYKey = sortedYKeys[sortedYKeys.length - 1];\n              const lastTspans = linesByY[lastYKey];\n              if (lastTspans.length > 0) {\n                const remainingText = linesToDistribute.slice(sortedYKeys.length).join(\" \");\n                const currentText = lastTspans[0].textContent || \"\";\n                lastTspans[0].textContent = (currentText + \" \" + remainingText).trim();\n              }\n            }\n          } else {\n            \/\/ No tspan children - just update text content directly\n            te.textContent = newText;\n          }\n        });\n      } catch (e) {\n        console.error(\"Error updating SVG text:\", e);\n      }\n    });\n  }\n\n  \/\/ Helper function to attach hover events to target and matching text elements (for mobile)\n  function attachHoverEventsToTargetAndText(targetElement, onEnter, onLeave, popupElement) {\n    const isMobile = window.innerWidth <= breakpoint;\n    \n    \/\/ Always attach to the target element\n    targetElement.addEventListener(\"mouseenter\", onEnter);\n    targetElement.addEventListener(\"mouseleave\", onLeave);\n    \n    \/\/ On mobile, also attach to matching text elements that cover the rect\n    if (isMobile) {\n      let touchStartTime = 0;\n      let popupShownByTouch = false;\n      \n      \/\/ Add touch events to target - use non-passive to prevent click\n      targetElement.addEventListener(\"touchstart\", function(e) {\n        touchStartTime = Date.now();\n        if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n          \/\/ First touch: show popup\n          e.preventDefault();\n          e.stopPropagation();\n          onEnter(e);\n          popupShownByTouch = true;\n          \/\/ Store flag on element to prevent click for 500ms\n          targetElement.setAttribute(\"data-popup-shown\", \"true\");\n          targetElement.setAttribute(\"data-touch-time\", touchStartTime.toString());\n          setTimeout(() => {\n            targetElement.removeAttribute(\"data-popup-shown\");\n            popupShownByTouch = false;\n          }, 500);\n        }\n      }, { passive: false });\n      \n      targetElement.addEventListener(\"touchend\", function(e) {\n        \/\/ Dont hide popup on touchend - let user interact with it\n        \/\/ Only prevent click if we just showed popup\n        if (popupShownByTouch) {\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      }, { passive: false });\n      \n      \/\/ Find text elements that match by class or ID\n      if (targetElement.hasAttribute(\"class\")) {\n        const classes = (targetElement.getAttribute(\"class\") || \"\").split(\/\\s+\/).filter(Boolean);\n        classes.forEach((cn) => {\n          \/\/ Find text elements with matching class\n          svg.querySelectorAll(\"text.\" + cn).forEach((textEl) => {\n            textEl.addEventListener(\"mouseenter\", onEnter);\n            textEl.addEventListener(\"mouseleave\", onLeave);\n            textEl.addEventListener(\"touchstart\", function(e) {\n              if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n                e.preventDefault();\n                e.stopPropagation();\n                onEnter(e);\n                const touchTime = Date.now();\n                targetElement.setAttribute(\"data-popup-shown\", \"true\");\n                targetElement.setAttribute(\"data-touch-time\", touchTime.toString());\n                setTimeout(() => {\n                  targetElement.removeAttribute(\"data-popup-shown\");\n                  targetElement.removeAttribute(\"data-touch-time\");\n                }, 500);\n              }\n            }, { passive: false });\n            textEl.addEventListener(\"touchend\", function(e) {\n              \/\/ Dont hide popup on touchend on mobile - keep it visible\n              \/\/ Prevent click if popup was just shown\n              if (targetElement.hasAttribute(\"data-popup-shown\")) {\n                e.preventDefault();\n                e.stopPropagation();\n              }\n            }, { passive: false });\n          });\n          \n          \/\/ Also attach to tspans with matching class\n          svg.querySelectorAll(\"tspan.\" + cn).forEach((tspanEl) => {\n            tspanEl.addEventListener(\"mouseenter\", onEnter);\n            tspanEl.addEventListener(\"mouseleave\", onLeave);\n            tspanEl.addEventListener(\"touchstart\", function(e) {\n              if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n                e.preventDefault();\n                e.stopPropagation();\n                onEnter(e);\n                const touchTime = Date.now();\n                targetElement.setAttribute(\"data-popup-shown\", \"true\");\n                targetElement.setAttribute(\"data-touch-time\", touchTime.toString());\n                setTimeout(() => {\n                  targetElement.removeAttribute(\"data-popup-shown\");\n                  targetElement.removeAttribute(\"data-touch-time\");\n                }, 500);\n              }\n            }, { passive: false });\n            tspanEl.addEventListener(\"touchend\", function(e) {\n              setTimeout(() => {\n                if (popupElement && popupElement.style.opacity === \"1\") {\n                  onLeave(e);\n                }\n              }, 100);\n            }, { passive: true });\n          });\n        });\n      }\n      \n      \/\/ Also check by ID match - find text elements that contain tspans with matching target ID\n      if (targetElement.id) {\n        \/\/ Find text elements that have a class matching the targets ID pattern\n        const targetIdClass = targetElement.id.replace(\/[^a-zA-Z0-9]\/g, \"-\");\n        svg.querySelectorAll(\"text[class*='\" + targetIdClass + \"']\").forEach((textEl) => {\n          textEl.addEventListener(\"mouseenter\", onEnter);\n          textEl.addEventListener(\"mouseleave\", onLeave);\n          textEl.addEventListener(\"touchstart\", function(e) {\n            if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n              e.preventDefault();\n              e.stopPropagation();\n              onEnter(e);\n              targetElement.setAttribute(\"data-popup-shown\", \"true\");\n              setTimeout(() => {\n                targetElement.removeAttribute(\"data-popup-shown\");\n              }, 3000);\n            }\n          }, { passive: false });\n          textEl.addEventListener(\"touchend\", function(e) {\n            setTimeout(() => {\n              if (popupElement && popupElement.style.opacity === \"1\") {\n                onLeave(e);\n              }\n            }, 100);\n          }, { passive: true });\n        });\n        \n        \/\/ Also check if any text element has the same class as target ID\n        svg.querySelectorAll(\"text.\" + targetElement.id).forEach((textEl) => {\n          textEl.addEventListener(\"mouseenter\", onEnter);\n          textEl.addEventListener(\"mouseleave\", onLeave);\n          textEl.addEventListener(\"touchstart\", function(e) {\n            if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n              e.preventDefault();\n              e.stopPropagation();\n              onEnter(e);\n              targetElement.setAttribute(\"data-popup-shown\", \"true\");\n              setTimeout(() => {\n                targetElement.removeAttribute(\"data-popup-shown\");\n              }, 3000);\n            }\n          }, { passive: false });\n          textEl.addEventListener(\"touchend\", function(e) {\n            setTimeout(() => {\n              if (popupElement && popupElement.style.opacity === \"1\") {\n                onLeave(e);\n              }\n            }, 100);\n          }, { passive: true });\n        });\n      }\n    }\n  }\n\n  function placeBoxNearTarget(target, cfg) {\n    const bb = target.getBBox();\n    const w  = cfg.width  ? +cfg.width  : 220;\n    const h  = cfg.height ? +cfg.height : 120;\n    const gap= cfg.gap    ? +cfg.gap    : 12;\n    const dx = cfg.dx     ? +cfg.dx     : 0;\n    const dy = cfg.dy     ? +cfg.dy     : 0;\n    const align = cfg.align || \"right\";\n\n    const cx = bb.x + bb.width\/2;\n    const cy = bb.y + bb.height\/2;\n    const r  = Math.max(bb.width, bb.height)\/2;\n\n    let x, y;\n    if (align===\"center\"){ x=cx-w\/2; y=cy-h\/2; }\n    else if (align===\"right\"){ x=cx + r + gap; y=cy - h\/2; }\n    else if (align===\"left\"){ x=cx - r - gap - w; y=cy - h\/2; }\n    else if (align===\"above\"){ x=cx - w\/2; y=cy - r - gap - h; }\n    else { x=cx - w\/2; y=cy + r + gap; }\n\n    x+=dx; y+=dy;\n\n    const g = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"g\");\n    g.setAttribute(\"class\",\"svg-text-box-element\");\n    g.setAttribute(\"data-target-id\", target.id);\n\n    if (cfg.content_type === \"text\") {\n      const title = (cfg.title || \"\").trim();\n      const desc  = cfg.description || \"\";\n      const linkT = cfg.link_text || \"\";\n      const linkU = (cfg.link_url && cfg.link_url.url) ? cfg.link_url.url : \"\";\n\n      g.innerHTML = `\n        <rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"10\"\n              fill=\"url(#fcBoxGrad)\" filter=\"url(#fcBoxShadowCustom)\" stroke=\"#C8E2B5\" stroke-width=\"1.2\"><\/rect>\n        <foreignObject x=\"${x+12}\" y=\"${y+12}\" width=\"${w-24}\" height=\"${h-24}\">\n          <div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"\n               style=\"font-family: Inter, Arial, sans-serif; font-size: 16px; color:#0B1437; line-height:1.5; display:flex; flex-direction:column; align-items:flex-start; gap:6px;\">\n            ${title ? `<div class=\"svg-title\" style=\"font-weight:600; font-size:18px;\">${title}<\/div>` : \"\"}\n            <div class=\"svg-custom-title\" style=\"display:none;\"><\/div>\n            ${desc ? `<div class=\"svg-description\" style=\"color:#444;\">${desc.replace(\/\\r?\\n\/g,\"<br>\")}<\/div>` : \"\"}\n            ${linkT ? `<div class=\"svg-link\" style=\"font-family: Sora; font-weight: 400; font-style: normal; font-size: 16px; line-height: 24px; letter-spacing: 0; vertical-align: middle; color: rgba(8, 0, 86, 1); cursor: pointer; text-decoration: underline; text-decoration-style: solid; text-decoration-thickness: 1px; margin-top: 6px; display: flex; align-items: center; gap: 4px;\">\n              ${linkT}\n              <img loading=\"lazy\" decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2026\/01\/Vector-3.svg\" width=\"16\" height=\"16\" style=\"vertical-align: middle; margin-left: 2px;\" \/>\n            <\/div>` : \"\"}\n          <\/div>\n        <\/foreignObject>\n      `;\n      svg.appendChild(g);\n\n      g.style.opacity = \"0\";\n      g.style.pointerEvents = \"none\";\n      g.style.transition = \"opacity 0.15s ease\";\n\n      const newTarget = target.cloneNode(true);\n      target.parentNode.replaceChild(newTarget, target);\n      const updatedTarget = svg.querySelector(\"#\" + target.id);\n\n      try {\n        const customNode = g.querySelector(\".svg-custom-title\");\n        const push = (val) => { if (val) updateSvgTextForTarget(updatedTarget || target, val); };\n\n        const initialCustom = customNode ? (customNode.textContent || \"\").trim() : \"\";\n        if (initialCustom) push(initialCustom);\n\n        const mo = new MutationObserver((mutations) => {\n          for (const m of mutations) {\n            if (m.type===\"attributes\" && m.attributeName===\"data-title\") {\n              const val = (m.target.dataset && m.target.dataset.title) || \"\";\n              if (val) push(val);\n            }\n          }\n        });\n        mo.observe(updatedTarget || target, { attributes:true, attributeFilter:[\"data-title\"] });\n\n        if (customNode) {\n          const mo2 = new MutationObserver(() => {\n            const val = (customNode.textContent || \"\").trim();\n            if (val) push(val);\n          });\n          mo2.observe(customNode, { characterData:true, subtree:true, childList:true });\n        }\n      } catch(e) {}\n\n      let isHovering = false;\n      let hoverTimeout;\n\n      const onTargetEnter = function(e) {\n        e.stopPropagation();\n        \/\/ Hide any previously active popup\n        hideActivePopup();\n        \n        isHovering = true;\n        clearTimeout(hoverTimeout);\n        if (!updatedTarget.hasAttribute(\"data-original-opacity\")) {\n          updatedTarget.setAttribute(\"data-original-opacity\", updatedTarget.style.opacity || \"1\");\n        }\n        updatedTarget.style.opacity = \"0\";\n        hideOtherElementsWithSameClass(updatedTarget);\n        g.style.opacity = \"1\";\n        g.style.pointerEvents = \"auto\";\n        \n        \/\/ Set this as active popup\n        activePopup = g;\n        activeTarget = updatedTarget;\n      };\n\n      const onTargetLeave = function(e) {\n        e.stopPropagation();\n        const isMobile = window.innerWidth <= breakpoint;\n        \n        \/\/ On mobile, dont auto-hide - keep popup visible until another popup is shown\n        if (isMobile) {\n          return;\n        }\n        \n        \/\/ Desktop: hide after delay\n        isHovering = false;\n        hoverTimeout = setTimeout(() => {\n          if (!isHovering && activePopup === g) {\n            const originalOpacity = updatedTarget.getAttribute(\"data-original-opacity\") || \"1\";\n            updatedTarget.style.opacity = originalOpacity;\n            showHiddenElementsWithClasses();\n            g.style.opacity = \"0\";\n            g.style.pointerEvents = \"none\";\n            activePopup = null;\n            activeTarget = null;\n          }\n        }, 100);\n      };\n\n      \/\/ Attach events to target and matching text elements (for mobile)\n      attachHoverEventsToTargetAndText(updatedTarget, onTargetEnter, onTargetLeave, g);\n\n      \/\/ On mobile, handle click to show popup first, then allow action on second click\n      const isMobile = window.innerWidth <= breakpoint;\n      if (isMobile) {\n        updatedTarget.addEventListener(\"click\", function(e) {\n          \/\/ If popup was just shown by touch, prevent click action\n          if (updatedTarget.hasAttribute(\"data-popup-shown\")) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          \/\/ Check if click happened too soon after touch (prevent accidental clicks)\n          const touchTime = updatedTarget.getAttribute(\"data-touch-time\");\n          if (touchTime && (Date.now() - parseInt(touchTime)) < 500) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          if (g.style.opacity === \"0\" || g.style.opacity === \"\") {\n            \/\/ First click: show popup, prevent any default action\n            e.preventDefault();\n            e.stopPropagation();\n            onTargetEnter(e);\n            updatedTarget.setAttribute(\"data-popup-shown\", \"true\");\n            setTimeout(() => {\n              updatedTarget.removeAttribute(\"data-popup-shown\");\n              updatedTarget.removeAttribute(\"data-touch-time\");\n            }, 500);\n          }\n        }, { passive: false });\n      }\n\n      g.addEventListener(\"mouseenter\", function(e) {\n        e.stopPropagation();\n        isHovering = true;\n        clearTimeout(hoverTimeout);\n        g.style.opacity = \"1\";\n        g.style.pointerEvents = \"auto\";\n      });\n      g.addEventListener(\"mouseleave\", function(e) {\n        e.stopPropagation();\n        const isMobile = window.innerWidth <= breakpoint;\n        \n        \/\/ On mobile, dont auto-hide - keep popup visible\n        if (isMobile) {\n          return;\n        }\n        \n        \/\/ Desktop: hide after delay\n        isHovering = false;\n        hoverTimeout = setTimeout(() => {\n          if (!isHovering && activePopup === g) {\n        const originalOpacity = updatedTarget.getAttribute(\"data-original-opacity\") || \"1\";\n        updatedTarget.style.opacity = originalOpacity;\n        showHiddenElementsWithClasses();\n        g.style.opacity = \"0\";\n        g.style.pointerEvents = \"none\";\n            activePopup = null;\n            activeTarget = null;\n          }\n        }, 100);\n      });\n\n      if (linkT && linkU) {\n        const linkEl = g.querySelector(\".svg-link\");\n        if (linkEl) {\n          linkEl.addEventListener(\"click\", function(e) {\n            \/\/ On mobile, only open link if popup is already visible (second click)\n            \/\/ On desktop, always open link\n            const isMobile = window.innerWidth <= breakpoint;\n            if (isMobile) {\n              \/\/ Check if popup was just shown (prevent immediate action)\n              if (updatedTarget.hasAttribute(\"data-popup-shown\")) {\n                e.preventDefault();\n                e.stopPropagation();\n                return;\n              }\n              \n              \/\/ Check if click happened too soon after touch\n              const touchTime = updatedTarget.getAttribute(\"data-touch-time\");\n              if (touchTime && (Date.now() - parseInt(touchTime)) < 500) {\n                e.preventDefault();\n                e.stopPropagation();\n                return;\n              }\n              \n              if (g.style.opacity === \"0\" || g.style.opacity === \"\") {\n                \/\/ First click: show popup instead\n                e.preventDefault();\n                e.stopPropagation();\n                onTargetEnter(e);\n                updatedTarget.setAttribute(\"data-popup-shown\", \"true\");\n                setTimeout(() => {\n                  updatedTarget.removeAttribute(\"data-popup-shown\");\n                  updatedTarget.removeAttribute(\"data-touch-time\");\n                }, 500);\n              } else {\n                \/\/ Popup is visible: open link\n                window.open(linkU, \"_blank\");\n              }\n            } else {\n              \/\/ Desktop: always open link\n              window.open(linkU, \"_blank\");\n            }\n          });\n        }\n      }\n    } else if (cfg.content_type === \"video_popup\") {\n      const thumbW = 100, thumbH = 100;\n      const thumbX = x + (w - thumbW) \/ 2;\n      const thumbY = y + (h - thumbH) \/ 2;\n      const playButtonX = x + w \/ 2;\n      const playButtonY = y + h \/ 2;\n      const mediaId = \"media-\" + Math.random().toString(36).substr(2, 9);\n      const isImage = cfg.popup_media_type === \"image\";\n      const thumbnailUrl = isImage \n        ? ((cfg.popup_image && cfg.popup_image.url) ? cfg.popup_image.url : \"\")\n        : ((cfg.video_file && cfg.video_file.url) ? cfg.video_file.url : \"\");\n      const playButtonHtml = isImage ? \"\" : `\n        <g class=\"fc-play-btn\" style=\"pointer-events:none\">\n          <circle cx=\"${playButtonX}\" cy=\"${playButtonY}\" r=\"22\" fill=\"none\" stroke=\"#FFFFFF\" stroke-opacity=\"0.55\" stroke-width=\"2\"><\/circle>\n          <circle cx=\"${playButtonX}\" cy=\"${playButtonY}\" r=\"18\" fill=\"#FFFFFF\"><\/circle>\n          <polygon points=\"${playButtonX-4},${playButtonY-5} ${playButtonX-4},${playButtonY+5} ${playButtonX+5},${playButtonY}\" fill=\"#1A2A6A\"><\/polygon>\n        <\/g>`;\n\n      g.innerHTML = `\n        <rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"16\" fill=\"transparent\" stroke=\"transparent\" stroke-width=\"0\"><\/rect>\n        <foreignObject x=\"${thumbX}\" y=\"${thumbY}\" width=\"${thumbW}\" height=\"${thumbH}\">\n          <div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\" style=\"width:100%; height:100%;\">\n            <div id=\"${mediaId}\" style=\"width:100%; height:100%; border-radius:8px; overflow:hidden;\"><\/div>\n          <\/div>\n        <\/foreignObject>\n        ${playButtonHtml}\n      `;\n      svg.appendChild(g);\n\n      g.style.opacity = \"0\";\n      g.style.pointerEvents = \"none\";\n      g.style.transition = \"opacity 0.15s ease\";\n\n      const newTarget = target.cloneNode(true);\n      target.parentNode.replaceChild(newTarget, target);\n      const updatedTarget = svg.querySelector(\"#\" + target.id);\n\n      \/\/ Apply parent title to SVG <text> for video as well\n      if (cfg.parent_title) updateSvgTextForTarget(updatedTarget || target, cfg.parent_title);\n\n      \/\/ Set up media element immediately without delay\n      if (thumbnailUrl) {\n        requestAnimationFrame(function() {\n          setupMediaElement(mediaId, thumbnailUrl);\n        });\n      }\n\n      let isHovering = false;\n      let hoverTimeout;\n\n      const onTargetEnter = function(e) {\n        e.stopPropagation();\n        \/\/ Hide any previously active popup\n        hideActivePopup();\n        \n        isHovering = true;\n        clearTimeout(hoverTimeout);\n        if (!updatedTarget.hasAttribute(\"data-original-opacity\")) {\n          updatedTarget.setAttribute(\"data-original-opacity\", updatedTarget.style.opacity || \"1\");\n        }\n        updatedTarget.style.opacity = \"0\";\n        hideOtherElementsWithSameClass(updatedTarget);\n        g.style.opacity = \"1\";\n        g.style.pointerEvents = \"auto\";\n        \n        \/\/ Set this as active popup\n        activePopup = g;\n        activeTarget = updatedTarget;\n      };\n\n      const onTargetLeave = function(e) {\n        e.stopPropagation();\n        const isMobile = window.innerWidth <= breakpoint;\n        \n        \/\/ On mobile, dont auto-hide - keep popup visible until another popup is shown\n        if (isMobile) {\n          return;\n        }\n        \n        \/\/ Desktop: hide after delay\n        isHovering = false;\n        hoverTimeout = setTimeout(() => {\n          if (!isHovering && activePopup === g) {\n            const originalOpacity = updatedTarget.getAttribute(\"data-original-opacity\") || \"1\";\n            updatedTarget.style.opacity = originalOpacity;\n            showHiddenElementsWithClasses();\n            g.style.opacity = \"0\";\n            g.style.pointerEvents = \"none\";\n            activePopup = null;\n            activeTarget = null;\n          }\n        }, 100);\n      };\n\n      \/\/ Attach events to target and matching text elements (for mobile)\n      attachHoverEventsToTargetAndText(updatedTarget, onTargetEnter, onTargetLeave, g);\n\n      \/\/ On mobile, handle click to show popup first, then allow action on second click\n      const isMobileVideo = window.innerWidth <= breakpoint;\n      if (isMobileVideo) {\n        updatedTarget.addEventListener(\"click\", function(e) {\n          \/\/ If popup was just shown by touch, prevent click action\n          if (updatedTarget.hasAttribute(\"data-popup-shown\")) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          \/\/ Check if click happened too soon after touch\n          const touchTime = updatedTarget.getAttribute(\"data-touch-time\");\n          if (touchTime && (Date.now() - parseInt(touchTime)) < 500) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          if (g.style.opacity === \"0\" || g.style.opacity === \"\") {\n            \/\/ First click: show popup, prevent any default action\n            e.preventDefault();\n            e.stopPropagation();\n            onTargetEnter(e);\n            updatedTarget.setAttribute(\"data-popup-shown\", \"true\");\n            setTimeout(() => {\n              updatedTarget.removeAttribute(\"data-popup-shown\");\n              updatedTarget.removeAttribute(\"data-touch-time\");\n            }, 500);\n          }\n        }, { passive: false });\n      }\n\n      g.addEventListener(\"mouseenter\", function(e) {\n        e.stopPropagation();\n        isHovering = true;\n        clearTimeout(hoverTimeout);\n        g.style.opacity = \"1\";\n        g.style.pointerEvents = \"auto\";\n      });\n      g.addEventListener(\"mouseleave\", function(e) {\n        e.stopPropagation();\n        const isMobile = window.innerWidth <= breakpoint;\n        \n        \/\/ On mobile, dont auto-hide - keep popup visible\n        if (isMobile) {\n          return;\n        }\n        \n        \/\/ Desktop: hide after delay\n        isHovering = false;\n        hoverTimeout = setTimeout(() => {\n          if (!isHovering && activePopup === g) {\n        const originalOpacity = updatedTarget.getAttribute(\"data-original-opacity\") || \"1\";\n        updatedTarget.style.opacity = originalOpacity;\n        showHiddenElementsWithClasses();\n        g.style.opacity = \"0\";\n        g.style.pointerEvents = \"none\";\n            activePopup = null;\n            activeTarget = null;\n          }\n        }, 100);\n      });\n\n      const payload = {\n        type: (cfg.popup_media_type===\"image\" ? \"image\" : \"video\"),\n        iframe: (cfg.video_iframe||\"\"),\n        url: (cfg.video_url && cfg.video_url.url) ? cfg.video_url.url : \"\",\n        file: (cfg.video_file && cfg.video_file.url) ? cfg.video_file.url : \"\",\n        image: (cfg.popup_image && cfg.popup_image.url) ? cfg.popup_image.url : \"\"\n      };\n      g.style.cursor = \"pointer\";\n      g.addEventListener(\"click\", function(e) {\n        \/\/ On mobile, only open full popup if thumbnail popup is already visible (second click)\n        \/\/ On desktop, always open popup\n        const isMobileClick = window.innerWidth <= breakpoint;\n        if (isMobileClick) {\n          \/\/ Check if popup was just shown (prevent immediate action)\n          if (updatedTarget.hasAttribute(\"data-popup-shown\")) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          \/\/ Check if click happened too soon after touch\n          const touchTime = updatedTarget.getAttribute(\"data-touch-time\");\n          if (touchTime && (Date.now() - parseInt(touchTime)) < 500) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          if (g.style.opacity === \"0\" || g.style.opacity === \"\") {\n            \/\/ First click: show thumbnail popup instead\n            e.preventDefault();\n            e.stopPropagation();\n            onTargetEnter(e);\n            updatedTarget.setAttribute(\"data-popup-shown\", \"true\");\n            setTimeout(() => {\n              updatedTarget.removeAttribute(\"data-popup-shown\");\n              updatedTarget.removeAttribute(\"data-touch-time\");\n            }, 500);\n          } else {\n            \/\/ Popup is visible: open full popup\n            openPopup(payload);\n          }\n        } else {\n          \/\/ Desktop: always open popup\n          openPopup(payload);\n        }\n      });\n    }\n  }\n\n  (boxes||[]).forEach((cfg) => {\n    if (!cfg || !cfg.svg_id) return;\n    const target = svg.querySelector(\"#\" + cfg.svg_id);\n    if (!target) return;\n\n    \/\/ Apply parent title to BOTH text and video boxes before drawing the box\n    if (cfg.parent_title) updateSvgTextForTarget(target, cfg.parent_title);\n\n    placeBoxNearTarget(target, cfg);\n    });\n\n  \/\/ Add click-outside handler to hide popup when clicking outside SVG or popup\n  \/\/ This handler is scoped to this initFlowChart instance\n  const clickOutsideHandler = function(e) {\n    if (!activePopup || !activeTarget) return;\n    \n    const clickedElement = e.target;\n    const isClickInsidePopup = clickedElement.closest && clickedElement.closest(\".svg-text-box-element\") === activePopup;\n    const isClickOnTarget = clickedElement === activeTarget || (activeTarget.contains && activeTarget.contains(clickedElement));\n    \n    \/\/ Also check if click is on text\/tspan elements that match the target\n    let isClickOnMatchingText = false;\n    if (activeTarget && activeTarget.hasAttribute(\"class\")) {\n      const classes = (activeTarget.getAttribute(\"class\") || \"\").split(\/\\s+\/).filter(Boolean);\n      classes.forEach((cn) => {\n        if (clickedElement.classList && clickedElement.classList.contains(cn)) {\n          isClickOnMatchingText = true;\n        }\n        if (clickedElement.closest && clickedElement.closest(\"text.\" + cn)) {\n          isClickOnMatchingText = true;\n        }\n        if (clickedElement.closest && clickedElement.closest(\"tspan.\" + cn)) {\n          isClickOnMatchingText = true;\n        }\n      });\n    }\n    \n    \/\/ Check if click is inside the SVG (but not on target\/popup\/matching text)\n    const isClickInsideSvg = svg.contains && svg.contains(clickedElement);\n    \n    \/\/ Hide popup if:\n    \/\/ 1. Click is outside SVG entirely, OR\n    \/\/ 2. Click is inside SVG but not on popup, target, or matching text elements\n    if ((!isClickInsideSvg) || (isClickInsideSvg && !isClickInsidePopup && !isClickOnTarget && !isClickOnMatchingText)) {\n      hideActivePopup();\n    }\n  };\n  \n  \/\/ Add the click handler once per SVG instance\n  document.addEventListener(\"click\", clickOutsideHandler);\n  }\n\n  \/\/ Initialize for current viewport\n  loadAndInitSvg();\n\n  \/\/ Reinitialize on resize to handle desktop\/mobile switch\n  let resizeTimer;\n  $(window).on(\"resize\", function() {\n    clearTimeout(resizeTimer);\n    resizeTimer = setTimeout(function() {\n      loadAndInitSvg();\n    }, 250);\n  });\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a311af0 e-flex e-con-boxed e-con e-parent\" data-id=\"a311af0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-ef1502d grad-bg e-con-full e-flex e-con e-child\" data-id=\"ef1502d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-46a53a1 elementor-widget__width-initial elementor-widget-mobile_extra__width-initial elementor-widget elementor-widget-heading\" data-id=\"46a53a1\" 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\">Experience AI-Powered API Testing: Qyrus in Motion<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9543ac6 hide-tabs elementor-widget elementor-widget-tab_video\" data-id=\"9543ac6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"tab_video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<section class=\"video-tab-section\">\n\t\t\t<div class=\"container-sec\">\n\t\t\t\t<!-- Tabs -->\n\t<ul class=\"nav nav-pills justify-content-center mb-4\" id=\"videoTabs-videoTab6a9d853233f43\" role=\"tablist\">\n\t\t\t\t\t<li class=\"nav-item\" role=\"presentation\">\n\t\t\t\t<button class=\"nav-link active\" id=\"tab-videoTab6a9d853233f43-0\" data-bs-toggle=\"pill\" data-bs-target=\"#content-videoTab6a9d853233f43-0\" type=\"button\" role=\"tab\">\n\t\t\t\t\tAPI Testing Overview\t\t\t\t<\/button>\n\t\t\t<\/li>\n\t\t\t\t\t<li class=\"nav-item\" role=\"presentation\">\n\t\t\t\t<button class=\"nav-link \" id=\"tab-videoTab6a9d853233f43-1\" data-bs-toggle=\"pill\" data-bs-target=\"#content-videoTab6a9d853233f43-1\" type=\"button\" role=\"tab\">\n\t\t\t\t\tAPI Discovery\t\t\t\t<\/button>\n\t\t\t<\/li>\n\t\t\t<\/ul>\n\n\t\t\t\t<!-- Content -->\n\t\t\t<div class=\"tab-content\" id=\"videoTabContent-videoTab6a9d853233f43\">\n\t\t\t<div class=\"tab-pane fade show active\" id=\"content-videoTab6a9d853233f43-0\" role=\"tabpanel\">\n\t\t\t<div class=\"position-relative video-wrapper\">\n\t\t\t\t\t\t\t\t\t<!-- Image Placeholder -->\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/10\/api-testing-1.webp\" alt=\"API Testing Overview\" style=\"width: 100%; height: 100%; display: block;\" \/>\n\t\t\t\t\n\t\t\t\t<!-- Play Button (still toggles modal popup) -->\n\t\t\t\t<div class=\"play-button\" data-bs-toggle=\"modal\" data-bs-target=\"#popupVideo-videoTab6a9d853233f43-0\">\n\t\t\t\t\t<img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/play.svg\" alt=\"Play\">\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<div class=\"tab-pane fade \" id=\"content-videoTab6a9d853233f43-1\" role=\"tabpanel\">\n\t\t\t<div class=\"position-relative video-wrapper\">\n\t\t\t\t\t\t\t\t\t<!-- Image Placeholder -->\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/10\/thumbnail-2.webp\" alt=\"API Discovery\" style=\"width: 100%; height: 100%; display: block;\" \/>\n\t\t\t\t\n\t\t\t\t<!-- Play Button (still toggles modal popup) -->\n\t\t\t\t<div class=\"play-button\" data-bs-toggle=\"modal\" data-bs-target=\"#popupVideo-videoTab6a9d853233f43-1\">\n\t\t\t\t\t<img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/play.svg\" alt=\"Play\">\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t\t\t\t<!-- Popups -->\n\t\t\t\t\t\t\t\t\t<div class=\"modal fade\" id=\"popupVideo-videoTab6a9d853233f43-0\" tabindex=\"-1\" aria-hidden=\"true\">\n\t\t\t\t\t\t<div class=\"modal-dialog modal-dialog-centered modal-lg\">\n\t\t\t\t\t\t\t<div class=\"modal-content\">\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"><\/button>\n\t\t\t\t\t\t\t\t<div class=\"modal-body p-0\">\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn-close position-absolute top-0 end-0 m-3\" data-bs-dismiss=\"modal\" aria-label=\"Close\"><\/button>\n\t\t\t\t\t\t\t\t\t<div class=\"ratio ratio-16x9\">\n\t\t\t\t\t\t\t\t\t\t<iframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/FpLJ2GCvFNA?si=gdhR-QAhHH9x_TsT&amp;controls=0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"modal fade\" id=\"popupVideo-videoTab6a9d853233f43-1\" tabindex=\"-1\" aria-hidden=\"true\">\n\t\t\t\t\t\t<div class=\"modal-dialog modal-dialog-centered modal-lg\">\n\t\t\t\t\t\t\t<div class=\"modal-content\">\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"><\/button>\n\t\t\t\t\t\t\t\t<div class=\"modal-body p-0\">\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn-close position-absolute top-0 end-0 m-3\" data-bs-dismiss=\"modal\" aria-label=\"Close\"><\/button>\n\t\t\t\t\t\t\t\t\t<div class=\"ratio ratio-16x9\">\n\t\t\t\t\t\t\t\t\t\t<iframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/DSMVn1EWZyE?si=Z-_FLBhH8z0N5tSx&amp;controls=0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-53e1ce4 e-con-full e-flex e-con e-child\" data-id=\"53e1ce4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-62552a0 shadow-cta green-cta elementor-align-right elementor-widget elementor-widget-button\" data-id=\"62552a0\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Try Now<\/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 class=\"elementor-element elementor-element-140b844 shadow-cta border-cta border-cta green-bor-cta elementor-align-right elementor-widget elementor-widget-button\" data-id=\"140b844\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">More Info<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d82e7b5 e-flex e-con-boxed e-con e-parent\" data-id=\"d82e7b5\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1c697c6 e-con-full e-flex e-con e-child\" data-id=\"1c697c6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-78c6964 elementor-widget__width-initial elementor-widget-mobile_extra__width-inherit elementor-widget elementor-widget-heading\" data-id=\"78c6964\" 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\">API Testing Reimagined: Unleash Your Full Potential <\/h2>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6e0da23 e-con-full e-flex e-con e-child\" data-id=\"6e0da23\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cfd4174 elementor-widget elementor-widget-text-editor\" data-id=\"cfd4174\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tHarness intelligent configurations, comprehensive validations, and streamlined reporting for an unmatched testing experience.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5912047 green-cta shadow-cta bor-cta elementor-widget elementor-widget-button\" data-id=\"5912047\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Try Now<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6a1cf8a e-con-full e-flex e-con e-child\" data-id=\"6a1cf8a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-c6165dc e-con-full line-grad-bg e-flex e-con e-child\" data-id=\"c6165dc\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-2a7cc0f e-con-full blue-tile e-flex e-con e-child\" data-id=\"2a7cc0f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7221c8d elementor-widget elementor-widget-image\" data-id=\"7221c8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/api-discovery.svg\" class=\"attachment-large size-large wp-image-14142\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8c46efa e-con-full e-flex e-con e-child\" data-id=\"8c46efa\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-16cb9fd elementor-widget elementor-widget-heading\" data-id=\"16cb9fd\" 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\">API Discovery<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b04d4c5 elementor-widget elementor-widget-text-editor\" data-id=\"b04d4c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tAutomatically discover and extract APIs from your web application using the AI-powered Chrome extension, then generate comprehensive assertions and test suites directly.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b505c03 elementor-widget elementor-widget-button\" data-id=\"b505c03\" 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=\"\/contact-us\/\">\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 xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" fill=\"none\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 5.58317C0 5.37167 0.102723 5.16884 0.285572 5.01928C0.468421 4.86973 0.716416 4.78572 0.975003 4.78572H12.2714L8.08473 1.36305C7.90165 1.21331 7.7988 1.01022 7.7988 0.798459C7.7988 0.586695 7.90165 0.383603 8.08473 0.233863C8.26781 0.0841233 8.51612 0 8.77503 0C9.03394 0 9.28225 0.0841233 9.46533 0.233863L15.3154 5.01857C15.4062 5.09265 15.4782 5.18065 15.5273 5.27753C15.5765 5.37441 15.6018 5.47827 15.6018 5.58317C15.6018 5.68806 15.5765 5.79192 15.5273 5.8888C15.4782 5.98569 15.4062 6.07369 15.3154 6.14776L9.46533 10.9325C9.28225 11.0822 9.03394 11.1663 8.77503 11.1663C8.51612 11.1663 8.26781 11.0822 8.08473 10.9325C7.90165 10.7827 7.7988 10.5796 7.7988 10.3679C7.7988 10.1561 7.90165 9.95302 8.08473 9.80328L12.2714 6.38062H0.975003C0.716416 6.38062 0.468421 6.2966 0.285572 6.14705C0.102723 5.9975 0 5.79466 0 5.58317Z\" fill=\"#CFF242\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-963c30d e-con-full line-grad-bg e-flex e-con e-child\" data-id=\"963c30d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-15d4c6e e-con-full blue-tile e-flex e-con e-child\" data-id=\"15d4c6e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-476cf58 elementor-widget elementor-widget-image\" data-id=\"476cf58\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-9-copy.svg\" class=\"attachment-large size-large wp-image-14143\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-579fc20 e-con-full e-flex e-con e-child\" data-id=\"579fc20\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-15aee60 elementor-widget elementor-widget-heading\" data-id=\"15aee60\" 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\">Parameterization<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ebfcdf5 elementor-widget elementor-widget-text-editor\" data-id=\"ebfcdf5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tEnhance test flexibility and reusability by using external data sources (like Excel or JSON files) to dynamically populate API request and response values across various test scenarios\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bde88d0 elementor-widget elementor-widget-button\" data-id=\"bde88d0\" 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=\"\/contact-us\/\">\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 xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" fill=\"none\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 5.58317C0 5.37167 0.102723 5.16884 0.285572 5.01928C0.468421 4.86973 0.716416 4.78572 0.975003 4.78572H12.2714L8.08473 1.36305C7.90165 1.21331 7.7988 1.01022 7.7988 0.798459C7.7988 0.586695 7.90165 0.383603 8.08473 0.233863C8.26781 0.0841233 8.51612 0 8.77503 0C9.03394 0 9.28225 0.0841233 9.46533 0.233863L15.3154 5.01857C15.4062 5.09265 15.4782 5.18065 15.5273 5.27753C15.5765 5.37441 15.6018 5.47827 15.6018 5.58317C15.6018 5.68806 15.5765 5.79192 15.5273 5.8888C15.4782 5.98569 15.4062 6.07369 15.3154 6.14776L9.46533 10.9325C9.28225 11.0822 9.03394 11.1663 8.77503 11.1663C8.51612 11.1663 8.26781 11.0822 8.08473 10.9325C7.90165 10.7827 7.7988 10.5796 7.7988 10.3679C7.7988 10.1561 7.90165 9.95302 8.08473 9.80328L12.2714 6.38062H0.975003C0.716416 6.38062 0.468421 6.2966 0.285572 6.14705C0.102723 5.9975 0 5.79466 0 5.58317Z\" fill=\"#CFF242\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9fd6105 e-con-full line-grad-bg e-flex e-con e-child\" data-id=\"9fd6105\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-90fbfe7 e-con-full blue-tile e-flex e-con e-child\" data-id=\"90fbfe7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ad3da74 elementor-widget elementor-widget-image\" data-id=\"ad3da74\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Global-Variables-Environments-.svg\" class=\"attachment-large size-large wp-image-14144\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-54d6acd e-con-full e-flex e-con e-child\" data-id=\"54d6acd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a6395ab elementor-widget elementor-widget-heading\" data-id=\"a6395ab\" 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\">Global Variables &amp; Environments<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cfe8ae7 elementor-widget elementor-widget-text-editor\" data-id=\"cfe8ae7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tStreamline testing setup by defining global variables and environments for consistent data usage across all your API requests.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d61ef6 elementor-widget elementor-widget-button\" data-id=\"6d61ef6\" 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=\"\/contact-us\/\">\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 xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" fill=\"none\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 5.58317C0 5.37167 0.102723 5.16884 0.285572 5.01928C0.468421 4.86973 0.716416 4.78572 0.975003 4.78572H12.2714L8.08473 1.36305C7.90165 1.21331 7.7988 1.01022 7.7988 0.798459C7.7988 0.586695 7.90165 0.383603 8.08473 0.233863C8.26781 0.0841233 8.51612 0 8.77503 0C9.03394 0 9.28225 0.0841233 9.46533 0.233863L15.3154 5.01857C15.4062 5.09265 15.4782 5.18065 15.5273 5.27753C15.5765 5.37441 15.6018 5.47827 15.6018 5.58317C15.6018 5.68806 15.5765 5.79192 15.5273 5.8888C15.4782 5.98569 15.4062 6.07369 15.3154 6.14776L9.46533 10.9325C9.28225 11.0822 9.03394 11.1663 8.77503 11.1663C8.51612 11.1663 8.26781 11.0822 8.08473 10.9325C7.90165 10.7827 7.7988 10.5796 7.7988 10.3679C7.7988 10.1561 7.90165 9.95302 8.08473 9.80328L12.2714 6.38062H0.975003C0.716416 6.38062 0.468421 6.2966 0.285572 6.14705C0.102723 5.9975 0 5.79466 0 5.58317Z\" fill=\"#CFF242\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\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-fbe51ea e-grid elementor-hidden-desktop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-con-boxed e-con e-parent\" data-id=\"fbe51ea\" 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-abd6285 elementor-widget__width-initial elementor-widget-mobile_extra__width-initial elementor-widget elementor-widget-heading\" data-id=\"abd6285\" 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\">How API Testing works on Qyrus<\/h2>\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-c974463 grad-bg-color elementor-hidden-desktop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-flex e-con-boxed e-con e-parent\" data-id=\"c974463\" 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-35f289e elementor-widget elementor-widget-flow_chart_section\" data-id=\"35f289e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"flow_chart_section.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"flowchart-wrapper\" data-breakpoint=\"767\">\n        <div class=\"flowchart-svg-container\"><\/div>\n    <\/div><script>\njQuery(function ($) {\n  const wrapper = document.querySelector(\".flowchart-wrapper\");\n  if (!wrapper) return;\n  \n  const breakpoint = parseInt(wrapper.getAttribute(\"data-breakpoint\")) || 767;\n  const desktopBoxes = [{\"_id\":\"bbfed4b\",\"svg_id\":\"c-1\",\"text\":\"Lorem ipsum \",\"title\":\"Lorem ipsum\",\"description\":\"Lorem ipsum dolor sit amet consectetur.\",\"link_text\":\"Know more\",\"link_url\":{\"url\":\"#\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"align\":\"center\",\"height\":150,\"parent_title\":\"Test 1\",\"content_type\":\"text\",\"popup_media_type\":null,\"video_iframe\":null,\"video_url\":null,\"video_file\":null,\"popup_image\":null,\"width\":220,\"gap\":12,\"dx\":0,\"dy\":0},{\"_id\":\"67f5854\",\"svg_id\":\"c-3\",\"content_type\":\"video_popup\",\"url\":{\"url\":\"https:\\\/\\\/www.youtube.com\\\/watch?v=9xwazD5SyVg\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"video_file\":{\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/Untitled-video.mp4\",\"id\":10369,\"size\":\"\",\"alt\":\"\",\"source\":\"library\"},\"align\":\"center\",\"video_url\":{\"url\":\"https:\\\/\\\/www.youtube.com\\\/watch?v=9xwazD5SyVg\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"parent_title\":\"test 3\",\"title\":null,\"description\":null,\"link_text\":null,\"link_url\":null,\"popup_media_type\":\"video\",\"video_iframe\":\"\",\"popup_image\":null,\"width\":220,\"height\":120,\"gap\":12,\"dx\":0,\"dy\":0},{\"_id\":\"398e193\",\"svg_id\":\"c-2\",\"content_type\":\"video_popup\",\"video_url\":{\"url\":\"https:\\\/\\\/www.youtube.com\\\/watch?v=9xwazD5SyVg\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"video_file\":{\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/Untitled-video-6_24_2025-3_35-PM.mp4\",\"id\":10368,\"size\":\"\",\"alt\":\"\",\"source\":\"library\"},\"align\":\"center\",\"parent_title\":\"test 7\",\"title\":null,\"description\":null,\"link_text\":null,\"link_url\":null,\"popup_media_type\":\"video\",\"video_iframe\":\"\",\"popup_image\":null,\"width\":220,\"height\":120,\"gap\":12,\"dx\":0,\"dy\":0},{\"svg_id\":\"c-4\",\"text\":\"Lorem ipsum \",\"title\":\"Lorem ipsum\",\"description\":\"Lorem ipsum dolor sit amet consectetur.\",\"link_text\":\"Know more\",\"link_url\":{\"url\":\"#\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"align\":\"center\",\"height\":150,\"_id\":\"5f51760\",\"gap\":0,\"dy\":45,\"parent_title\":\"test 4\",\"content_type\":\"text\",\"popup_media_type\":null,\"video_iframe\":null,\"video_url\":null,\"video_file\":null,\"popup_image\":null,\"width\":220,\"dx\":0},{\"svg_id\":\"c-5\",\"text\":\"Lorem ipsum \",\"title\":\"Lorem ipsum\",\"description\":\"Lorem ipsum dolor sit amet consectetur.\",\"link_text\":\"Know more\",\"link_url\":{\"url\":\"#\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"align\":\"center\",\"height\":150,\"gap\":0,\"dy\":30,\"_id\":\"82bc7fa\",\"content_type\":\"text\",\"parent_title\":\"\",\"popup_media_type\":null,\"video_iframe\":null,\"video_url\":null,\"video_file\":null,\"popup_image\":null,\"width\":220,\"dx\":0},{\"svg_id\":\"c-6\",\"text\":\"Lorem ipsum \",\"title\":\"Lorem ipsum\",\"description\":\"Lorem ipsum dolor sit amet consectetur.\",\"link_text\":\"Know more\",\"link_url\":{\"url\":\"#\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"align\":\"center\",\"height\":150,\"gap\":0,\"dy\":45,\"_id\":\"8b96224\",\"content_type\":\"text\",\"parent_title\":\"\",\"popup_media_type\":null,\"video_iframe\":null,\"video_url\":null,\"video_file\":null,\"popup_image\":null,\"width\":220,\"dx\":0},{\"svg_id\":\"c-7\",\"text\":\"Lorem ipsum \",\"title\":\"Lorem ipsum\",\"description\":\"Lorem ipsum dolor sit amet consectetur.\",\"link_text\":\"Know more\",\"link_url\":{\"url\":\"#\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"align\":\"center\",\"height\":150,\"gap\":0,\"dy\":45,\"_id\":\"a4a45ca\",\"content_type\":\"text\",\"parent_title\":\"\",\"popup_media_type\":null,\"video_iframe\":null,\"video_url\":null,\"video_file\":null,\"popup_image\":null,\"width\":220,\"dx\":0},{\"svg_id\":\"c-8\",\"content_type\":\"video_popup\",\"video_url\":{\"url\":\"https:\\\/\\\/www.youtube.com\\\/watch?v=9xwazD5SyVg\",\"is_external\":\"\",\"nofollow\":\"\",\"custom_attributes\":\"\"},\"video_file\":{\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/Untitled-video-6_24_2025-3_35-PM.mp4\",\"id\":10368,\"size\":\"\",\"alt\":\"\",\"source\":\"library\"},\"align\":\"center\",\"_id\":\"4db72b4\",\"parent_title\":\"test 8\",\"title\":null,\"description\":null,\"link_text\":null,\"link_url\":null,\"popup_media_type\":\"video\",\"video_iframe\":\"\",\"popup_image\":null,\"width\":220,\"height\":120,\"gap\":12,\"dx\":0,\"dy\":0}];\n  const mobileBoxes = [];\n  const desktopSvgHtml = \"<div class=\\\"flow-chart-svg__missing\\\" style=\\\"color:#888\\\">SVG not found.<\\\/div>\";\n  const mobileSvgHtml = \"\";\n  const container = wrapper.querySelector(\".flowchart-svg-container\");\n  \n  let currentSvg = null;\n  let isInitialized = false;\n  let currentMode = null; \/\/ \"desktop\" or \"mobile\"\n\n  function getCurrentSvg() {\n    return container ? container.querySelector(\"svg\") : null;\n  }\n\n  function getCurrentBoxes() {\n    const isMobile = window.innerWidth <= breakpoint;\n    return isMobile ? mobileBoxes : desktopBoxes;\n  }\n\n  function getCurrentSvgHtml() {\n    const isMobile = window.innerWidth <= breakpoint;\n    return isMobile ? mobileSvgHtml : desktopSvgHtml;\n  }\n\n  function clearCurrentSvg() {\n    if (container) {\n      container.innerHTML = \"\";\n    }\n    currentSvg = null;\n    isInitialized = false;\n  }\n\n  function loadAndInitSvg() {\n    const isMobile = window.innerWidth <= breakpoint;\n    const newMode = isMobile ? \"mobile\" : \"desktop\";\n    \n    \/\/ Check if we already have the correct SVG loaded\n    if (currentMode === newMode && isInitialized && currentSvg) {\n      return; \/\/ Already loaded and initialized\n    }\n    \n    \/\/ Clear existing SVG\n    clearCurrentSvg();\n    currentMode = newMode;\n    \n    \/\/ Get SVG HTML for current mode\n    const svgHtml = getCurrentSvgHtml();\n    if (!svgHtml || svgHtml.trim() === \"\") {\n      if (container) {\n        container.innerHTML = '<div class=\"flow-chart-svg__missing\" style=\"color:#888\">Please configure an SVG source.<\/div>';\n      }\n      return;\n    }\n    \n    \/\/ Insert SVG content\n    if (container) {\n      container.innerHTML = svgHtml;\n      \n      \/\/ Wait for SVG to be in DOM, then initialize\n      setTimeout(function() {\n        currentSvg = getCurrentSvg();\n        if (currentSvg) {\n          initFlowChart(currentSvg);\n          isInitialized = true;\n        }\n      }, 50);\n    }\n  }\n\n  function initFlowChart(svg) {\n  if (!svg) return;\n    const boxes = getCurrentBoxes();\n\n  \/\/ Track currently active popup to hide it when switching to another element\n  let activePopup = null;\n  let activeTarget = null;\n\n  function hideActivePopup() {\n    if (activePopup) {\n      const originalOpacity = activeTarget ? (activeTarget.getAttribute(\"data-original-opacity\") || \"1\") : \"1\";\n      if (activeTarget) {\n        activeTarget.style.opacity = originalOpacity;\n      }\n      showHiddenElementsWithClasses();\n      if (activePopup) {\n        activePopup.style.opacity = \"0\";\n        activePopup.style.pointerEvents = \"none\";\n      }\n      activePopup = null;\n      activeTarget = null;\n    }\n  }\n\n  let defs = svg.querySelector(\"defs\");\n  if (!defs) { defs = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"defs\"); svg.insertBefore(defs, svg.firstChild); }\n  if (!svg.querySelector(\"#fcBoxGrad\")) {\n    const lg = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"linearGradient\");\n    lg.setAttribute(\"id\",\"fcBoxGrad\");\n    lg.setAttribute(\"x1\",\"0%\"); lg.setAttribute(\"y1\",\"0%\");\n    lg.setAttribute(\"x2\",\"100%\"); lg.setAttribute(\"y2\",\"100%\");\n    lg.innerHTML = '<stop offset=\"0%\" stop-color=\"#B2FF6A\"\/><stop offset=\"100%\" stop-color=\"#69EB7C\"\/>';\n    defs.appendChild(lg);\n  }\n  if (!svg.querySelector(\"#fcBoxShadowCustom\")) {\n    const f2 = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"filter\");\n    f2.setAttribute(\"id\",\"fcBoxShadowCustom\");\n    f2.setAttribute(\"x\",\"-10%\"); f2.setAttribute(\"y\",\"-10%\");\n    f2.setAttribute(\"width\",\"120%\"); f2.setAttribute(\"height\",\"120%\");\n    f2.innerHTML = '<feDropShadow dx=\"0\" dy=\"0\" stdDeviation=\"12.5\" flood-color=\"#46DF93\" flood-opacity=\"0.6\"\/>';\n    defs.appendChild(f2);\n  }\n\n  function hideOtherElementsWithSameClass(target) {\n    if (!target || !target.hasAttribute(\"class\")) return;\n    const classes = (target.getAttribute(\"class\") || \"\").split(\/\\s+\/).filter(Boolean);\n    classes.forEach((cn) => {\n      svg.querySelectorAll(\".\" + cn).forEach((el) => {\n        if (el !== target) {\n          if (!el.hasAttribute(\"data-original-opacity\")) el.setAttribute(\"data-original-opacity\", el.style.opacity || \"1\");\n          el.style.opacity = \"0\";\n          el.style.pointerEvents = \"none\";\n        }\n      });\n    });\n  }\n  function showHiddenElementsWithClasses() {\n    svg.querySelectorAll(\"[data-original-opacity]\").forEach((el) => {\n      el.style.opacity = el.getAttribute(\"data-original-opacity\");\n      el.style.pointerEvents = \"auto\";\n    });\n  }\n\n  function openPopup(payload) {\n    const $ov = $('<div class=\"video-popup-overlay\" style=\"position:fixed;inset:0;background:rgba(0,0,0,.8);z-index:99999;display:flex;align-items:center;justify-content:center;\"><\/div>');\n    const $wrap = $('<div style=\"position:relative;width:90%;max-width:900px;max-height:90vh;background:#000;border-radius:8px;overflow:hidden;\"><\/div>');\n    const $close = $('<button style=\"position:absolute;padding:5px;top:10px;right:12px;width:36px;height:36px;border:none;border-radius:18px;background:rgba(255,255,255,.25);color:#fff;font-size:20px;cursor:pointer;z-index:2;\">\u00d7<\/button>');\n    let inner = \"\";\n    if (payload.type === \"image\") {\n      const img = payload.image || \"\";\n      inner = img ? `<img decoding=\"async\" src=\"${img}\" style=\"display:block;max-width:100%;max-height:90vh;margin:0 auto;\" \/>` : `<div style=\"color:#fff;padding:30px;\">No image<\/div>`;\n    } else {\n      const iframe = (payload.iframe||\"\").trim();\n      const url    = (payload.url||\"\").trim();\n      const file   = (payload.file||\"\").trim();\n      if (iframe) inner = iframe;\n      else if (url) {\n        if (\/youtube\\.com|youtu\\.be|vimeo\\.com\/i.test(url)) {\n          const yt = url.match(\/(?:v=|youtu\\.be\\\/|embed\\\/)([^&?#]+)\/i);\n          inner = yt && yt[1]\n            ? `<iframe src=\"https:\/\/www.youtube.com\/embed\/${yt[1]}?autoplay=1&rel=0\" allow=\"autoplay;encrypted-media\" allowfullscreen style=\"width:100%;aspect-ratio:16\/9;border:0;\"><\/iframe>`\n            : `<iframe src=\"${url}\" allow=\"autoplay;encrypted-media\" allowfullscreen style=\"width:100%;aspect-ratio:16\/9;border:0;\"><\/iframe>`;\n        } else {\n          inner = `<video controls autoplay style=\"width:100%;max-height:90vh;\"><source src=\"${url}\" type=\"video\/mp4\"><\/video>`;\n        }\n      } else if (file) {\n        inner = `<video controls autoplay style=\"width:100%;max-height:90vh;\"><source src=\"${file}\" type=\"video\/mp4\"><\/video>`;\n      } else inner = `<div style=\"color:#fff;padding:30px;\">No video<\/div>`;\n    }\n    $wrap.append($close).append(inner);\n    $ov.append($wrap).appendTo(\"body\");\n    $close.on(\"click\", ()=> $ov.remove());\n    $ov.on(\"click\", (ev)=>{ if (ev.target=== $ov[0]) $ov.remove(); });\n    $(document).on(\"keydown.svgpop\", (ev)=>{ if (ev.key===\"Escape\"){ $ov.remove(); $(document).off(\"keydown.svgpop\"); }});\n  }\n\n  function setupMediaElement(containerId, mediaUrl) {\n    const container = document.getElementById(containerId);\n    if (!container || !mediaUrl) return;\n    const isVideo = \/\\.(mp4|webm|ogg|mov|avi)$\/i.test(mediaUrl);\n    if (isVideo) {\n      const video = document.createElement(\"video\");\n      video.style.cssText = \"width:100%; height:100%; object-fit:cover; display:block;\";\n      video.muted = true; video.autoplay = true; video.loop = true; video.playsInline = true; video.preload = \"auto\";\n      const source = document.createElement(\"source\");\n      source.src = mediaUrl; source.type = \"video\/mp4\";\n      video.appendChild(source); container.appendChild(video);\n      video.play().catch(()=>{});\n    } else {\n      const img = document.createElement(\"img\");\n      img.src = mediaUrl;\n      img.style.cssText = \"width:100%; height:100%; object-fit:cover; display:block;\";\n      img.alt = \"Media thumbnail\";\n      container.appendChild(img);\n    }\n  }\n\n  function updateSvgTextForTarget(target, newText) {\n    if (!target || !newText) return;\n    const classes = (target.getAttribute(\"class\") || \"\").split(\/\\s+\/).filter(Boolean);\n    classes.forEach((cn) => {\n      try {\n        svg.querySelectorAll(\"text.\" + cn).forEach((te) => {\n          const tspans = Array.from(te.querySelectorAll(\"tspan\"));\n          \n          if (tspans.length > 0) {\n            \/\/ CRITICAL: Preserve ALL original tspans - never remove them\n            \/\/ Just update textContent, keeping all attributes (x, y, class, text-anchor, etc.) intact\n            \n            \/\/ Preserve text-anchor from parent text element if not set on tspans\n            const parentTextAnchor = te.getAttribute(\"text-anchor\");\n            if (parentTextAnchor) {\n              tspans.forEach((ts) => {\n                if (!ts.hasAttribute(\"text-anchor\")) {\n                  ts.setAttribute(\"text-anchor\", parentTextAnchor);\n                }\n              });\n            }\n            \n            \/\/ Group tspans by Y position to identify visual lines\n            const linesByY = {};\n            tspans.forEach((ts) => {\n              const y = ts.getAttribute(\"y\") || \"0\";\n              if (!linesByY[y]) {\n                linesByY[y] = [];\n              }\n              linesByY[y].push(ts);\n            });\n            \n            const sortedYKeys = Object.keys(linesByY).sort((a, b) => parseFloat(a) - parseFloat(b));\n            const explicitLines = newText.split(\/\\r?\\n\/);\n            \n            \/\/ If no explicit line breaks, preserve original distribution pattern line by line\n            if (explicitLines.length === 1 && sortedYKeys.length > 1) {\n              const words = newText.split(\/\\s+\/).filter(Boolean);\n              \n              if (words.length > 0) {\n                \/\/ First pass: collect line data with weights\n                const linesData = [];\n                let totalLineWeight = 0;\n                \n                sortedYKeys.forEach((yKey) => {\n                  const tspansForLine = linesByY[yKey];\n                  const sortedTspans = Array.from(tspansForLine).sort((a, b) => {\n                    const xA = parseFloat(a.getAttribute(\"x\") || \"0\");\n                    const xB = parseFloat(b.getAttribute(\"x\") || \"0\");\n                    return xA - xB;\n                  });\n                  \n                  const lineTspans = [];\n                  let lineWeight = 0;\n                  \n                  sortedTspans.forEach((ts) => {\n                    let originalText = ts.getAttribute(\"data-original-text\");\n                    if (!originalText) {\n                      originalText = ts.textContent || \"\";\n                      ts.setAttribute(\"data-original-text\", originalText);\n                    }\n                    const trimmedOriginal = originalText.trim();\n                    const originalWords = trimmedOriginal.split(\/\\s+\/).filter(Boolean);\n                    const originalWordCount = originalWords.length;\n                    const charLength = trimmedOriginal.length;\n                    \n                    \/\/ Weight: actual word count if > 0, otherwise use character-based weight\n                    let weight = 0;\n                    if (originalWordCount > 0) {\n                      weight = originalWordCount;\n                    } else if (charLength === 1) {\n                      weight = 0.5; \/\/ Single character\n                    } else if (charLength > 1) {\n                      weight = 1; \/\/ Multi-character but no spaces\n                    }\n                    \n                    lineWeight += weight;\n                    \n                    lineTspans.push({\n                      tspan: ts,\n                      originalText: trimmedOriginal,\n                      originalWordCount: originalWordCount,\n                      charLength: charLength,\n                      weight: weight,\n                      hadContent: trimmedOriginal.length > 0,\n                      x: ts.getAttribute(\"x\"),\n                      y_attr: ts.getAttribute(\"y\"),\n                      dx: ts.getAttribute(\"dx\"),\n                      dy: ts.getAttribute(\"dy\")\n                    });\n                  });\n                  \n                  totalLineWeight += lineWeight;\n                  linesData.push({\n                    y: yKey,\n                    tspans: lineTspans,\n                    weight: lineWeight\n                  });\n                });\n                \n                \/\/ Second pass: distribute words to lines proportionally\n                let wordIdx = 0;\n                let lineAccumulatedError = 0;\n                \n                linesData.forEach((lineData, lineIdx) => {\n                  const remainingLines = linesData.length - lineIdx;\n                  const remainingWords = words.length - wordIdx;\n                  \n                  \/\/ Calculate words for this line\n                  let wordsForThisLine;\n                  if (remainingLines === 1) {\n                    \/\/ Last line gets all remaining words\n                    wordsForThisLine = remainingWords;\n                  } else if (totalLineWeight > 0) {\n                    \/\/ Distribute proportionally based on line weight\n                    const proportionalShare = (lineData.weight \/ totalLineWeight) * words.length;\n                    const roundedShare = Math.round(proportionalShare + lineAccumulatedError);\n                    lineAccumulatedError += proportionalShare - roundedShare;\n                    wordsForThisLine = Math.max(0, roundedShare);\n                    \n                    \/\/ Ensure at least 1 word if line had content\n                    if (wordsForThisLine === 0 && lineData.weight > 0 && remainingWords > 0) {\n                      wordsForThisLine = 1;\n                      lineAccumulatedError = 0;\n                    }\n                  } else {\n                    \/\/ Fallback: distribute evenly\n                    wordsForThisLine = Math.ceil(remainingWords \/ remainingLines);\n                  }\n                  \n                  wordsForThisLine = Math.min(wordsForThisLine, remainingWords);\n                  \n                  \/\/ Third pass: distribute words within this line\n                  const lineWords = words.slice(wordIdx, wordIdx + wordsForThisLine);\n                  const lineTotalWeight = lineData.tspans.reduce((sum, item) => sum + item.weight, 0);\n                  \n                  \/\/ Check if original pattern had split words (single chars or partial words)\n                  const hasSplitPattern = lineData.tspans.some(item => \n                    item.charLength === 1 || (item.charLength > 1 && item.originalWordCount === 0)\n                  );\n                  \n                  if (hasSplitPattern && lineWords.length > 0) {\n                    \/\/ Original had split words - distribute characters\/parts proportionally\n                    const combinedText = lineWords.join(\" \");\n                    const totalChars = combinedText.length;\n                    let charIdx = 0;\n                    let tspanAccumulatedError = 0;\n                    \n                    lineData.tspans.forEach((item, tspanIdx) => {\n                      if (charIdx < totalChars && lineTotalWeight > 0) {\n                        \/\/ Calculate character share based on original weight\n                        const charShare = (item.weight \/ lineTotalWeight) * totalChars;\n                        const roundedChars = Math.round(charShare + tspanAccumulatedError);\n                        tspanAccumulatedError += charShare - roundedChars;\n                        \n                        let charsForThisTspan = Math.max(0, roundedChars);\n                        \n                        \/\/ Ensure tspans with content get at least 1 char if possible\n                        if (item.hadContent && charsForThisTspan === 0 && charIdx < totalChars) {\n                          charsForThisTspan = 1;\n                          tspanAccumulatedError = 0;\n                        }\n                        \n                        const remainingChars = totalChars - charIdx;\n                        const actualChars = Math.min(charsForThisTspan, remainingChars);\n                        \n                        \/\/ Last tspan gets remaining characters\n                        if (tspanIdx === lineData.tspans.length - 1 && charIdx < totalChars) {\n                          item.tspan.textContent = combinedText.slice(charIdx);\n                          charIdx = totalChars;\n                        } else if (actualChars > 0) {\n                          item.tspan.textContent = combinedText.slice(charIdx, charIdx + actualChars);\n                          charIdx += actualChars;\n                        } else {\n                          item.tspan.textContent = \"\";\n                        }\n                      } else {\n                        item.tspan.textContent = \"\";\n                      }\n                      \n                      \/\/ Always preserve positioning attributes\n                      if (item.x !== null) item.tspan.setAttribute(\"x\", item.x);\n                      if (item.y_attr !== null) item.tspan.setAttribute(\"y\", item.y_attr);\n                      if (item.dx !== null) item.tspan.setAttribute(\"dx\", item.dx);\n                      if (item.dy !== null) item.tspan.setAttribute(\"dy\", item.dy);\n                    });\n                  } else {\n                    \/\/ Original had whole words - distribute words normally\n                    let tspanWordIdx = 0;\n                    let tspanAccumulatedError = 0;\n                    \n                    lineData.tspans.forEach((item, tspanIdx) => {\n                      if (tspanWordIdx < lineWords.length && lineTotalWeight > 0) {\n                        \/\/ Calculate proportional share within line\n                        const proportionalShare = (item.weight \/ lineTotalWeight) * lineWords.length;\n                        const roundedShare = Math.round(proportionalShare + tspanAccumulatedError);\n                        tspanAccumulatedError += proportionalShare - roundedShare;\n                        \n                        let wordsForThisTspan = Math.max(0, roundedShare);\n                        \n                        \/\/ Ensure tspans with content get at least 1 word if possible\n                        if (item.hadContent && wordsForThisTspan === 0 && tspanWordIdx < lineWords.length) {\n                          const tspansWithContentRemaining = lineData.tspans.slice(tspanIdx).filter(i => i.hadContent).length;\n                          if (tspansWithContentRemaining <= (lineWords.length - tspanWordIdx)) {\n                            wordsForThisTspan = 1;\n                            tspanAccumulatedError = 0;\n                          }\n                        }\n                        \n                        const remainingLineWords = lineWords.length - tspanWordIdx;\n                        const actualWords = Math.min(wordsForThisTspan, remainingLineWords);\n                        \n                        \/\/ Last tspan in line gets remaining words\n                        if (tspanIdx === lineData.tspans.length - 1 && tspanWordIdx < lineWords.length) {\n                          const tspanWords = lineWords.slice(tspanWordIdx);\n                          item.tspan.textContent = tspanWords.join(\" \");\n                          tspanWordIdx = lineWords.length;\n                        } else if (actualWords > 0) {\n                          const tspanWords = lineWords.slice(tspanWordIdx, tspanWordIdx + actualWords);\n                          item.tspan.textContent = tspanWords.join(\" \");\n                          tspanWordIdx += actualWords;\n                        } else {\n                          item.tspan.textContent = \"\";\n                        }\n                      } else {\n                        item.tspan.textContent = \"\";\n                      }\n                      \n                      \/\/ Always preserve positioning attributes\n                      if (item.x !== null) item.tspan.setAttribute(\"x\", item.x);\n                      if (item.y_attr !== null) item.tspan.setAttribute(\"y\", item.y_attr);\n                      if (item.dx !== null) item.tspan.setAttribute(\"dx\", item.dx);\n                      if (item.dy !== null) item.tspan.setAttribute(\"dy\", item.dy);\n                    });\n                  }\n                  \n                  wordIdx += wordsForThisLine;\n                  \/\/ Update total weight for remaining lines\n                  totalLineWeight -= lineData.weight;\n                });\n              } else {\n                \/\/ No words - clear all tspans\n                tspans.forEach((ts) => {\n                  ts.textContent = \"\";\n                });\n              }\n            } else {\n              \/\/ Use explicit lines or single line - distribute by line\n              sortedYKeys.forEach((yKey, lineIdx) => {\n                const tspansForLine = linesByY[yKey];\n                const lineText = explicitLines[lineIdx] !== undefined ? explicitLines[lineIdx] : \"\";\n                \n                if (tspansForLine.length === 1) {\n                  tspansForLine[0].textContent = lineText;\n                  \/\/ Preserve positioning attributes\n                  const ts = tspansForLine[0];\n                  const x = ts.getAttribute(\"x\");\n                  const y = ts.getAttribute(\"y\");\n                  const dx = ts.getAttribute(\"dx\");\n                  const dy = ts.getAttribute(\"dy\");\n                  if (x !== null) ts.setAttribute(\"x\", x);\n                  if (y !== null) ts.setAttribute(\"y\", y);\n                  if (dx !== null) ts.setAttribute(\"dx\", dx);\n                  if (dy !== null) ts.setAttribute(\"dy\", dy);\n                } else {\n                  if (lineText) {\n                    const words = lineText.split(\/\\s+\/).filter(Boolean);\n                    if (words.length > 0) {\n                      const wordsPerTspan = Math.floor(words.length \/ tspansForLine.length);\n                      const remainder = words.length % tspansForLine.length;\n                      \n                      let wordIdx = 0;\n                      tspansForLine.forEach((ts, idx) => {\n                        \/\/ Preserve positioning attributes before updating\n                        const x = ts.getAttribute(\"x\");\n                        const y = ts.getAttribute(\"y\");\n                        const dx = ts.getAttribute(\"dx\");\n                        const dy = ts.getAttribute(\"dy\");\n                        \n                        const extraWord = idx < remainder ? 1 : 0;\n                        const tspanWordCount = wordsPerTspan + extraWord;\n                        const tspanWords = words.slice(wordIdx, wordIdx + tspanWordCount);\n                        ts.textContent = tspanWords.join(\" \");\n                        wordIdx += tspanWordCount;\n                        \n                        \/\/ Restore positioning attributes\n                        if (x !== null) ts.setAttribute(\"x\", x);\n                        if (y !== null) ts.setAttribute(\"y\", y);\n                        if (dx !== null) ts.setAttribute(\"dx\", dx);\n                        if (dy !== null) ts.setAttribute(\"dy\", dy);\n                      });\n                    } else {\n                      tspansForLine.forEach((ts) => {\n                        ts.textContent = \"\";\n                        \/\/ Preserve positioning attributes even for empty tspans\n                        const x = ts.getAttribute(\"x\");\n                        const y = ts.getAttribute(\"y\");\n                        const dx = ts.getAttribute(\"dx\");\n                        const dy = ts.getAttribute(\"dy\");\n                        if (x !== null) ts.setAttribute(\"x\", x);\n                        if (y !== null) ts.setAttribute(\"y\", y);\n                        if (dx !== null) ts.setAttribute(\"dx\", dx);\n                        if (dy !== null) ts.setAttribute(\"dy\", dy);\n                      });\n                    }\n                  } else {\n                    tspansForLine.forEach((ts) => {\n                      ts.textContent = \"\";\n                      \/\/ Preserve positioning attributes even for empty tspans\n                      const x = ts.getAttribute(\"x\");\n                      const y = ts.getAttribute(\"y\");\n                      const dx = ts.getAttribute(\"dx\");\n                      const dy = ts.getAttribute(\"dy\");\n                      if (x !== null) ts.setAttribute(\"x\", x);\n                      if (y !== null) ts.setAttribute(\"y\", y);\n                      if (dx !== null) ts.setAttribute(\"dx\", dx);\n                      if (dy !== null) ts.setAttribute(\"dy\", dy);\n                    });\n                  }\n                }\n              });\n            }\n            \n            \/\/ Handle remaining lines if new text has more lines than Y positions\n            if (linesToDistribute.length > sortedYKeys.length && sortedYKeys.length > 0) {\n              const lastYKey = sortedYKeys[sortedYKeys.length - 1];\n              const lastTspans = linesByY[lastYKey];\n              if (lastTspans.length > 0) {\n                const remainingText = linesToDistribute.slice(sortedYKeys.length).join(\" \");\n                const currentText = lastTspans[0].textContent || \"\";\n                lastTspans[0].textContent = (currentText + \" \" + remainingText).trim();\n              }\n            }\n          } else {\n            \/\/ No tspan children - just update text content directly\n            te.textContent = newText;\n          }\n        });\n      } catch (e) {\n        console.error(\"Error updating SVG text:\", e);\n      }\n    });\n  }\n\n  \/\/ Helper function to attach hover events to target and matching text elements (for mobile)\n  function attachHoverEventsToTargetAndText(targetElement, onEnter, onLeave, popupElement) {\n    const isMobile = window.innerWidth <= breakpoint;\n    \n    \/\/ Always attach to the target element\n    targetElement.addEventListener(\"mouseenter\", onEnter);\n    targetElement.addEventListener(\"mouseleave\", onLeave);\n    \n    \/\/ On mobile, also attach to matching text elements that cover the rect\n    if (isMobile) {\n      let touchStartTime = 0;\n      let popupShownByTouch = false;\n      \n      \/\/ Add touch events to target - use non-passive to prevent click\n      targetElement.addEventListener(\"touchstart\", function(e) {\n        touchStartTime = Date.now();\n        if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n          \/\/ First touch: show popup\n          e.preventDefault();\n          e.stopPropagation();\n          onEnter(e);\n          popupShownByTouch = true;\n          \/\/ Store flag on element to prevent click for 500ms\n          targetElement.setAttribute(\"data-popup-shown\", \"true\");\n          targetElement.setAttribute(\"data-touch-time\", touchStartTime.toString());\n          setTimeout(() => {\n            targetElement.removeAttribute(\"data-popup-shown\");\n            popupShownByTouch = false;\n          }, 500);\n        }\n      }, { passive: false });\n      \n      targetElement.addEventListener(\"touchend\", function(e) {\n        \/\/ Dont hide popup on touchend - let user interact with it\n        \/\/ Only prevent click if we just showed popup\n        if (popupShownByTouch) {\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      }, { passive: false });\n      \n      \/\/ Find text elements that match by class or ID\n      if (targetElement.hasAttribute(\"class\")) {\n        const classes = (targetElement.getAttribute(\"class\") || \"\").split(\/\\s+\/).filter(Boolean);\n        classes.forEach((cn) => {\n          \/\/ Find text elements with matching class\n          svg.querySelectorAll(\"text.\" + cn).forEach((textEl) => {\n            textEl.addEventListener(\"mouseenter\", onEnter);\n            textEl.addEventListener(\"mouseleave\", onLeave);\n            textEl.addEventListener(\"touchstart\", function(e) {\n              if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n                e.preventDefault();\n                e.stopPropagation();\n                onEnter(e);\n                const touchTime = Date.now();\n                targetElement.setAttribute(\"data-popup-shown\", \"true\");\n                targetElement.setAttribute(\"data-touch-time\", touchTime.toString());\n                setTimeout(() => {\n                  targetElement.removeAttribute(\"data-popup-shown\");\n                  targetElement.removeAttribute(\"data-touch-time\");\n                }, 500);\n              }\n            }, { passive: false });\n            textEl.addEventListener(\"touchend\", function(e) {\n              \/\/ Dont hide popup on touchend on mobile - keep it visible\n              \/\/ Prevent click if popup was just shown\n              if (targetElement.hasAttribute(\"data-popup-shown\")) {\n                e.preventDefault();\n                e.stopPropagation();\n              }\n            }, { passive: false });\n          });\n          \n          \/\/ Also attach to tspans with matching class\n          svg.querySelectorAll(\"tspan.\" + cn).forEach((tspanEl) => {\n            tspanEl.addEventListener(\"mouseenter\", onEnter);\n            tspanEl.addEventListener(\"mouseleave\", onLeave);\n            tspanEl.addEventListener(\"touchstart\", function(e) {\n              if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n                e.preventDefault();\n                e.stopPropagation();\n                onEnter(e);\n                const touchTime = Date.now();\n                targetElement.setAttribute(\"data-popup-shown\", \"true\");\n                targetElement.setAttribute(\"data-touch-time\", touchTime.toString());\n                setTimeout(() => {\n                  targetElement.removeAttribute(\"data-popup-shown\");\n                  targetElement.removeAttribute(\"data-touch-time\");\n                }, 500);\n              }\n            }, { passive: false });\n            tspanEl.addEventListener(\"touchend\", function(e) {\n              setTimeout(() => {\n                if (popupElement && popupElement.style.opacity === \"1\") {\n                  onLeave(e);\n                }\n              }, 100);\n            }, { passive: true });\n          });\n        });\n      }\n      \n      \/\/ Also check by ID match - find text elements that contain tspans with matching target ID\n      if (targetElement.id) {\n        \/\/ Find text elements that have a class matching the targets ID pattern\n        const targetIdClass = targetElement.id.replace(\/[^a-zA-Z0-9]\/g, \"-\");\n        svg.querySelectorAll(\"text[class*='\" + targetIdClass + \"']\").forEach((textEl) => {\n          textEl.addEventListener(\"mouseenter\", onEnter);\n          textEl.addEventListener(\"mouseleave\", onLeave);\n          textEl.addEventListener(\"touchstart\", function(e) {\n            if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n              e.preventDefault();\n              e.stopPropagation();\n              onEnter(e);\n              targetElement.setAttribute(\"data-popup-shown\", \"true\");\n              setTimeout(() => {\n                targetElement.removeAttribute(\"data-popup-shown\");\n              }, 3000);\n            }\n          }, { passive: false });\n          textEl.addEventListener(\"touchend\", function(e) {\n            setTimeout(() => {\n              if (popupElement && popupElement.style.opacity === \"1\") {\n                onLeave(e);\n              }\n            }, 100);\n          }, { passive: true });\n        });\n        \n        \/\/ Also check if any text element has the same class as target ID\n        svg.querySelectorAll(\"text.\" + targetElement.id).forEach((textEl) => {\n          textEl.addEventListener(\"mouseenter\", onEnter);\n          textEl.addEventListener(\"mouseleave\", onLeave);\n          textEl.addEventListener(\"touchstart\", function(e) {\n            if (popupElement && (popupElement.style.opacity === \"0\" || popupElement.style.opacity === \"\")) {\n              e.preventDefault();\n              e.stopPropagation();\n              onEnter(e);\n              targetElement.setAttribute(\"data-popup-shown\", \"true\");\n              setTimeout(() => {\n                targetElement.removeAttribute(\"data-popup-shown\");\n              }, 3000);\n            }\n          }, { passive: false });\n          textEl.addEventListener(\"touchend\", function(e) {\n            setTimeout(() => {\n              if (popupElement && popupElement.style.opacity === \"1\") {\n                onLeave(e);\n              }\n            }, 100);\n          }, { passive: true });\n        });\n      }\n    }\n  }\n\n  function placeBoxNearTarget(target, cfg) {\n    const bb = target.getBBox();\n    const w  = cfg.width  ? +cfg.width  : 220;\n    const h  = cfg.height ? +cfg.height : 120;\n    const gap= cfg.gap    ? +cfg.gap    : 12;\n    const dx = cfg.dx     ? +cfg.dx     : 0;\n    const dy = cfg.dy     ? +cfg.dy     : 0;\n    const align = cfg.align || \"right\";\n\n    const cx = bb.x + bb.width\/2;\n    const cy = bb.y + bb.height\/2;\n    const r  = Math.max(bb.width, bb.height)\/2;\n\n    let x, y;\n    if (align===\"center\"){ x=cx-w\/2; y=cy-h\/2; }\n    else if (align===\"right\"){ x=cx + r + gap; y=cy - h\/2; }\n    else if (align===\"left\"){ x=cx - r - gap - w; y=cy - h\/2; }\n    else if (align===\"above\"){ x=cx - w\/2; y=cy - r - gap - h; }\n    else { x=cx - w\/2; y=cy + r + gap; }\n\n    x+=dx; y+=dy;\n\n    const g = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"g\");\n    g.setAttribute(\"class\",\"svg-text-box-element\");\n    g.setAttribute(\"data-target-id\", target.id);\n\n    if (cfg.content_type === \"text\") {\n      const title = (cfg.title || \"\").trim();\n      const desc  = cfg.description || \"\";\n      const linkT = cfg.link_text || \"\";\n      const linkU = (cfg.link_url && cfg.link_url.url) ? cfg.link_url.url : \"\";\n\n      g.innerHTML = `\n        <rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"10\"\n              fill=\"url(#fcBoxGrad)\" filter=\"url(#fcBoxShadowCustom)\" stroke=\"#C8E2B5\" stroke-width=\"1.2\"><\/rect>\n        <foreignObject x=\"${x+12}\" y=\"${y+12}\" width=\"${w-24}\" height=\"${h-24}\">\n          <div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"\n               style=\"font-family: Inter, Arial, sans-serif; font-size: 16px; color:#0B1437; line-height:1.5; display:flex; flex-direction:column; align-items:flex-start; gap:6px;\">\n            ${title ? `<div class=\"svg-title\" style=\"font-weight:600; font-size:18px;\">${title}<\/div>` : \"\"}\n            <div class=\"svg-custom-title\" style=\"display:none;\"><\/div>\n            ${desc ? `<div class=\"svg-description\" style=\"color:#444;\">${desc.replace(\/\\r?\\n\/g,\"<br>\")}<\/div>` : \"\"}\n            ${linkT ? `<div class=\"svg-link\" style=\"font-family: Sora; font-weight: 400; font-style: normal; font-size: 16px; line-height: 24px; letter-spacing: 0; vertical-align: middle; color: rgba(8, 0, 86, 1); cursor: pointer; text-decoration: underline; text-decoration-style: solid; text-decoration-thickness: 1px; margin-top: 6px; display: flex; align-items: center; gap: 4px;\">\n              ${linkT}\n              <img loading=\"lazy\" decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2026\/01\/Vector-3.svg\" width=\"16\" height=\"16\" style=\"vertical-align: middle; margin-left: 2px;\" \/>\n            <\/div>` : \"\"}\n          <\/div>\n        <\/foreignObject>\n      `;\n      svg.appendChild(g);\n\n      g.style.opacity = \"0\";\n      g.style.pointerEvents = \"none\";\n      g.style.transition = \"opacity 0.15s ease\";\n\n      const newTarget = target.cloneNode(true);\n      target.parentNode.replaceChild(newTarget, target);\n      const updatedTarget = svg.querySelector(\"#\" + target.id);\n\n      try {\n        const customNode = g.querySelector(\".svg-custom-title\");\n        const push = (val) => { if (val) updateSvgTextForTarget(updatedTarget || target, val); };\n\n        const initialCustom = customNode ? (customNode.textContent || \"\").trim() : \"\";\n        if (initialCustom) push(initialCustom);\n\n        const mo = new MutationObserver((mutations) => {\n          for (const m of mutations) {\n            if (m.type===\"attributes\" && m.attributeName===\"data-title\") {\n              const val = (m.target.dataset && m.target.dataset.title) || \"\";\n              if (val) push(val);\n            }\n          }\n        });\n        mo.observe(updatedTarget || target, { attributes:true, attributeFilter:[\"data-title\"] });\n\n        if (customNode) {\n          const mo2 = new MutationObserver(() => {\n            const val = (customNode.textContent || \"\").trim();\n            if (val) push(val);\n          });\n          mo2.observe(customNode, { characterData:true, subtree:true, childList:true });\n        }\n      } catch(e) {}\n\n      let isHovering = false;\n      let hoverTimeout;\n\n      const onTargetEnter = function(e) {\n        e.stopPropagation();\n        \/\/ Hide any previously active popup\n        hideActivePopup();\n        \n        isHovering = true;\n        clearTimeout(hoverTimeout);\n        if (!updatedTarget.hasAttribute(\"data-original-opacity\")) {\n          updatedTarget.setAttribute(\"data-original-opacity\", updatedTarget.style.opacity || \"1\");\n        }\n        updatedTarget.style.opacity = \"0\";\n        hideOtherElementsWithSameClass(updatedTarget);\n        g.style.opacity = \"1\";\n        g.style.pointerEvents = \"auto\";\n        \n        \/\/ Set this as active popup\n        activePopup = g;\n        activeTarget = updatedTarget;\n      };\n\n      const onTargetLeave = function(e) {\n        e.stopPropagation();\n        const isMobile = window.innerWidth <= breakpoint;\n        \n        \/\/ On mobile, dont auto-hide - keep popup visible until another popup is shown\n        if (isMobile) {\n          return;\n        }\n        \n        \/\/ Desktop: hide after delay\n        isHovering = false;\n        hoverTimeout = setTimeout(() => {\n          if (!isHovering && activePopup === g) {\n            const originalOpacity = updatedTarget.getAttribute(\"data-original-opacity\") || \"1\";\n            updatedTarget.style.opacity = originalOpacity;\n            showHiddenElementsWithClasses();\n            g.style.opacity = \"0\";\n            g.style.pointerEvents = \"none\";\n            activePopup = null;\n            activeTarget = null;\n          }\n        }, 100);\n      };\n\n      \/\/ Attach events to target and matching text elements (for mobile)\n      attachHoverEventsToTargetAndText(updatedTarget, onTargetEnter, onTargetLeave, g);\n\n      \/\/ On mobile, handle click to show popup first, then allow action on second click\n      const isMobile = window.innerWidth <= breakpoint;\n      if (isMobile) {\n        updatedTarget.addEventListener(\"click\", function(e) {\n          \/\/ If popup was just shown by touch, prevent click action\n          if (updatedTarget.hasAttribute(\"data-popup-shown\")) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          \/\/ Check if click happened too soon after touch (prevent accidental clicks)\n          const touchTime = updatedTarget.getAttribute(\"data-touch-time\");\n          if (touchTime && (Date.now() - parseInt(touchTime)) < 500) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          if (g.style.opacity === \"0\" || g.style.opacity === \"\") {\n            \/\/ First click: show popup, prevent any default action\n            e.preventDefault();\n            e.stopPropagation();\n            onTargetEnter(e);\n            updatedTarget.setAttribute(\"data-popup-shown\", \"true\");\n            setTimeout(() => {\n              updatedTarget.removeAttribute(\"data-popup-shown\");\n              updatedTarget.removeAttribute(\"data-touch-time\");\n            }, 500);\n          }\n        }, { passive: false });\n      }\n\n      g.addEventListener(\"mouseenter\", function(e) {\n        e.stopPropagation();\n        isHovering = true;\n        clearTimeout(hoverTimeout);\n        g.style.opacity = \"1\";\n        g.style.pointerEvents = \"auto\";\n      });\n      g.addEventListener(\"mouseleave\", function(e) {\n        e.stopPropagation();\n        const isMobile = window.innerWidth <= breakpoint;\n        \n        \/\/ On mobile, dont auto-hide - keep popup visible\n        if (isMobile) {\n          return;\n        }\n        \n        \/\/ Desktop: hide after delay\n        isHovering = false;\n        hoverTimeout = setTimeout(() => {\n          if (!isHovering && activePopup === g) {\n        const originalOpacity = updatedTarget.getAttribute(\"data-original-opacity\") || \"1\";\n        updatedTarget.style.opacity = originalOpacity;\n        showHiddenElementsWithClasses();\n        g.style.opacity = \"0\";\n        g.style.pointerEvents = \"none\";\n            activePopup = null;\n            activeTarget = null;\n          }\n        }, 100);\n      });\n\n      if (linkT && linkU) {\n        const linkEl = g.querySelector(\".svg-link\");\n        if (linkEl) {\n          linkEl.addEventListener(\"click\", function(e) {\n            \/\/ On mobile, only open link if popup is already visible (second click)\n            \/\/ On desktop, always open link\n            const isMobile = window.innerWidth <= breakpoint;\n            if (isMobile) {\n              \/\/ Check if popup was just shown (prevent immediate action)\n              if (updatedTarget.hasAttribute(\"data-popup-shown\")) {\n                e.preventDefault();\n                e.stopPropagation();\n                return;\n              }\n              \n              \/\/ Check if click happened too soon after touch\n              const touchTime = updatedTarget.getAttribute(\"data-touch-time\");\n              if (touchTime && (Date.now() - parseInt(touchTime)) < 500) {\n                e.preventDefault();\n                e.stopPropagation();\n                return;\n              }\n              \n              if (g.style.opacity === \"0\" || g.style.opacity === \"\") {\n                \/\/ First click: show popup instead\n                e.preventDefault();\n                e.stopPropagation();\n                onTargetEnter(e);\n                updatedTarget.setAttribute(\"data-popup-shown\", \"true\");\n                setTimeout(() => {\n                  updatedTarget.removeAttribute(\"data-popup-shown\");\n                  updatedTarget.removeAttribute(\"data-touch-time\");\n                }, 500);\n              } else {\n                \/\/ Popup is visible: open link\n                window.open(linkU, \"_blank\");\n              }\n            } else {\n              \/\/ Desktop: always open link\n              window.open(linkU, \"_blank\");\n            }\n          });\n        }\n      }\n    } else if (cfg.content_type === \"video_popup\") {\n      const thumbW = 100, thumbH = 100;\n      const thumbX = x + (w - thumbW) \/ 2;\n      const thumbY = y + (h - thumbH) \/ 2;\n      const playButtonX = x + w \/ 2;\n      const playButtonY = y + h \/ 2;\n      const mediaId = \"media-\" + Math.random().toString(36).substr(2, 9);\n      const isImage = cfg.popup_media_type === \"image\";\n      const thumbnailUrl = isImage \n        ? ((cfg.popup_image && cfg.popup_image.url) ? cfg.popup_image.url : \"\")\n        : ((cfg.video_file && cfg.video_file.url) ? cfg.video_file.url : \"\");\n      const playButtonHtml = isImage ? \"\" : `\n        <g class=\"fc-play-btn\" style=\"pointer-events:none\">\n          <circle cx=\"${playButtonX}\" cy=\"${playButtonY}\" r=\"22\" fill=\"none\" stroke=\"#FFFFFF\" stroke-opacity=\"0.55\" stroke-width=\"2\"><\/circle>\n          <circle cx=\"${playButtonX}\" cy=\"${playButtonY}\" r=\"18\" fill=\"#FFFFFF\"><\/circle>\n          <polygon points=\"${playButtonX-4},${playButtonY-5} ${playButtonX-4},${playButtonY+5} ${playButtonX+5},${playButtonY}\" fill=\"#1A2A6A\"><\/polygon>\n        <\/g>`;\n\n      g.innerHTML = `\n        <rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"16\" fill=\"transparent\" stroke=\"transparent\" stroke-width=\"0\"><\/rect>\n        <foreignObject x=\"${thumbX}\" y=\"${thumbY}\" width=\"${thumbW}\" height=\"${thumbH}\">\n          <div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\" style=\"width:100%; height:100%;\">\n            <div id=\"${mediaId}\" style=\"width:100%; height:100%; border-radius:8px; overflow:hidden;\"><\/div>\n          <\/div>\n        <\/foreignObject>\n        ${playButtonHtml}\n      `;\n      svg.appendChild(g);\n\n      g.style.opacity = \"0\";\n      g.style.pointerEvents = \"none\";\n      g.style.transition = \"opacity 0.15s ease\";\n\n      const newTarget = target.cloneNode(true);\n      target.parentNode.replaceChild(newTarget, target);\n      const updatedTarget = svg.querySelector(\"#\" + target.id);\n\n      \/\/ Apply parent title to SVG <text> for video as well\n      if (cfg.parent_title) updateSvgTextForTarget(updatedTarget || target, cfg.parent_title);\n\n      \/\/ Set up media element immediately without delay\n      if (thumbnailUrl) {\n        requestAnimationFrame(function() {\n          setupMediaElement(mediaId, thumbnailUrl);\n        });\n      }\n\n      let isHovering = false;\n      let hoverTimeout;\n\n      const onTargetEnter = function(e) {\n        e.stopPropagation();\n        \/\/ Hide any previously active popup\n        hideActivePopup();\n        \n        isHovering = true;\n        clearTimeout(hoverTimeout);\n        if (!updatedTarget.hasAttribute(\"data-original-opacity\")) {\n          updatedTarget.setAttribute(\"data-original-opacity\", updatedTarget.style.opacity || \"1\");\n        }\n        updatedTarget.style.opacity = \"0\";\n        hideOtherElementsWithSameClass(updatedTarget);\n        g.style.opacity = \"1\";\n        g.style.pointerEvents = \"auto\";\n        \n        \/\/ Set this as active popup\n        activePopup = g;\n        activeTarget = updatedTarget;\n      };\n\n      const onTargetLeave = function(e) {\n        e.stopPropagation();\n        const isMobile = window.innerWidth <= breakpoint;\n        \n        \/\/ On mobile, dont auto-hide - keep popup visible until another popup is shown\n        if (isMobile) {\n          return;\n        }\n        \n        \/\/ Desktop: hide after delay\n        isHovering = false;\n        hoverTimeout = setTimeout(() => {\n          if (!isHovering && activePopup === g) {\n            const originalOpacity = updatedTarget.getAttribute(\"data-original-opacity\") || \"1\";\n            updatedTarget.style.opacity = originalOpacity;\n            showHiddenElementsWithClasses();\n            g.style.opacity = \"0\";\n            g.style.pointerEvents = \"none\";\n            activePopup = null;\n            activeTarget = null;\n          }\n        }, 100);\n      };\n\n      \/\/ Attach events to target and matching text elements (for mobile)\n      attachHoverEventsToTargetAndText(updatedTarget, onTargetEnter, onTargetLeave, g);\n\n      \/\/ On mobile, handle click to show popup first, then allow action on second click\n      const isMobileVideo = window.innerWidth <= breakpoint;\n      if (isMobileVideo) {\n        updatedTarget.addEventListener(\"click\", function(e) {\n          \/\/ If popup was just shown by touch, prevent click action\n          if (updatedTarget.hasAttribute(\"data-popup-shown\")) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          \/\/ Check if click happened too soon after touch\n          const touchTime = updatedTarget.getAttribute(\"data-touch-time\");\n          if (touchTime && (Date.now() - parseInt(touchTime)) < 500) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          if (g.style.opacity === \"0\" || g.style.opacity === \"\") {\n            \/\/ First click: show popup, prevent any default action\n            e.preventDefault();\n            e.stopPropagation();\n            onTargetEnter(e);\n            updatedTarget.setAttribute(\"data-popup-shown\", \"true\");\n            setTimeout(() => {\n              updatedTarget.removeAttribute(\"data-popup-shown\");\n              updatedTarget.removeAttribute(\"data-touch-time\");\n            }, 500);\n          }\n        }, { passive: false });\n      }\n\n      g.addEventListener(\"mouseenter\", function(e) {\n        e.stopPropagation();\n        isHovering = true;\n        clearTimeout(hoverTimeout);\n        g.style.opacity = \"1\";\n        g.style.pointerEvents = \"auto\";\n      });\n      g.addEventListener(\"mouseleave\", function(e) {\n        e.stopPropagation();\n        const isMobile = window.innerWidth <= breakpoint;\n        \n        \/\/ On mobile, dont auto-hide - keep popup visible\n        if (isMobile) {\n          return;\n        }\n        \n        \/\/ Desktop: hide after delay\n        isHovering = false;\n        hoverTimeout = setTimeout(() => {\n          if (!isHovering && activePopup === g) {\n        const originalOpacity = updatedTarget.getAttribute(\"data-original-opacity\") || \"1\";\n        updatedTarget.style.opacity = originalOpacity;\n        showHiddenElementsWithClasses();\n        g.style.opacity = \"0\";\n        g.style.pointerEvents = \"none\";\n            activePopup = null;\n            activeTarget = null;\n          }\n        }, 100);\n      });\n\n      const payload = {\n        type: (cfg.popup_media_type===\"image\" ? \"image\" : \"video\"),\n        iframe: (cfg.video_iframe||\"\"),\n        url: (cfg.video_url && cfg.video_url.url) ? cfg.video_url.url : \"\",\n        file: (cfg.video_file && cfg.video_file.url) ? cfg.video_file.url : \"\",\n        image: (cfg.popup_image && cfg.popup_image.url) ? cfg.popup_image.url : \"\"\n      };\n      g.style.cursor = \"pointer\";\n      g.addEventListener(\"click\", function(e) {\n        \/\/ On mobile, only open full popup if thumbnail popup is already visible (second click)\n        \/\/ On desktop, always open popup\n        const isMobileClick = window.innerWidth <= breakpoint;\n        if (isMobileClick) {\n          \/\/ Check if popup was just shown (prevent immediate action)\n          if (updatedTarget.hasAttribute(\"data-popup-shown\")) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          \/\/ Check if click happened too soon after touch\n          const touchTime = updatedTarget.getAttribute(\"data-touch-time\");\n          if (touchTime && (Date.now() - parseInt(touchTime)) < 500) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          \n          if (g.style.opacity === \"0\" || g.style.opacity === \"\") {\n            \/\/ First click: show thumbnail popup instead\n            e.preventDefault();\n            e.stopPropagation();\n            onTargetEnter(e);\n            updatedTarget.setAttribute(\"data-popup-shown\", \"true\");\n            setTimeout(() => {\n              updatedTarget.removeAttribute(\"data-popup-shown\");\n              updatedTarget.removeAttribute(\"data-touch-time\");\n            }, 500);\n          } else {\n            \/\/ Popup is visible: open full popup\n            openPopup(payload);\n          }\n        } else {\n          \/\/ Desktop: always open popup\n          openPopup(payload);\n        }\n      });\n    }\n  }\n\n  (boxes||[]).forEach((cfg) => {\n    if (!cfg || !cfg.svg_id) return;\n    const target = svg.querySelector(\"#\" + cfg.svg_id);\n    if (!target) return;\n\n    \/\/ Apply parent title to BOTH text and video boxes before drawing the box\n    if (cfg.parent_title) updateSvgTextForTarget(target, cfg.parent_title);\n\n    placeBoxNearTarget(target, cfg);\n    });\n\n  \/\/ Add click-outside handler to hide popup when clicking outside SVG or popup\n  \/\/ This handler is scoped to this initFlowChart instance\n  const clickOutsideHandler = function(e) {\n    if (!activePopup || !activeTarget) return;\n    \n    const clickedElement = e.target;\n    const isClickInsidePopup = clickedElement.closest && clickedElement.closest(\".svg-text-box-element\") === activePopup;\n    const isClickOnTarget = clickedElement === activeTarget || (activeTarget.contains && activeTarget.contains(clickedElement));\n    \n    \/\/ Also check if click is on text\/tspan elements that match the target\n    let isClickOnMatchingText = false;\n    if (activeTarget && activeTarget.hasAttribute(\"class\")) {\n      const classes = (activeTarget.getAttribute(\"class\") || \"\").split(\/\\s+\/).filter(Boolean);\n      classes.forEach((cn) => {\n        if (clickedElement.classList && clickedElement.classList.contains(cn)) {\n          isClickOnMatchingText = true;\n        }\n        if (clickedElement.closest && clickedElement.closest(\"text.\" + cn)) {\n          isClickOnMatchingText = true;\n        }\n        if (clickedElement.closest && clickedElement.closest(\"tspan.\" + cn)) {\n          isClickOnMatchingText = true;\n        }\n      });\n    }\n    \n    \/\/ Check if click is inside the SVG (but not on target\/popup\/matching text)\n    const isClickInsideSvg = svg.contains && svg.contains(clickedElement);\n    \n    \/\/ Hide popup if:\n    \/\/ 1. Click is outside SVG entirely, OR\n    \/\/ 2. Click is inside SVG but not on popup, target, or matching text elements\n    if ((!isClickInsideSvg) || (isClickInsideSvg && !isClickInsidePopup && !isClickOnTarget && !isClickOnMatchingText)) {\n      hideActivePopup();\n    }\n  };\n  \n  \/\/ Add the click handler once per SVG instance\n  document.addEventListener(\"click\", clickOutsideHandler);\n  }\n\n  \/\/ Initialize for current viewport\n  loadAndInitSvg();\n\n  \/\/ Reinitialize on resize to handle desktop\/mobile switch\n  let resizeTimer;\n  $(window).on(\"resize\", function() {\n    clearTimeout(resizeTimer);\n    resizeTimer = setTimeout(function() {\n      loadAndInitSvg();\n    }, 250);\n  });\n});\n<\/script>\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-c791e4e e-flex e-con-boxed e-con e-parent\" data-id=\"c791e4e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-ee407bb e-con-full e-flex e-con e-child\" data-id=\"ee407bb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-824b2a1 e-con-full e-flex e-con e-child\" data-id=\"824b2a1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-78e41f2 elementor-widget elementor-widget-heading\" data-id=\"78e41f2\" 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\">Connect and Conquer: Seamless Integrations for Your Workflow<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7213783 elementor-widget__width-initial elementor-widget-tablet_extra__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"7213783\" 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 style=\"font-weight: 400;\">Ensure a unified, efficient, and streamlined testing workflow by connecting to your favorite CI\/CD, defect tracking, and collaboration systems.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fb3f226 e-con-full e-flex e-con e-child\" data-id=\"fb3f226\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3413327 shadow-cta green-cta elementor-align-right elementor-tablet-align-left elementor-mobile_extra-align-center elementor-widget elementor-widget-button\" data-id=\"3413327\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Try Now<\/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 class=\"elementor-element elementor-element-a4889ed shadow-cta border-cta border-cta green-bor-cta elementor-align-right elementor-tablet-align-left elementor-mobile_extra-align-center elementor-widget elementor-widget-button\" data-id=\"a4889ed\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">More Info<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ec255ea e-con-full e-flex e-con e-child\" data-id=\"ec255ea\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-146f060 elementor-widget elementor-widget-zigzag_logo_section\" data-id=\"146f060\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"zigzag_logo_section.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"zigzag-logo-section\">\r\n    <div class=\"zigzag-scroll-container\">\r\n        <div class=\"zigzag-columns\">\r\n            <!-- Column 1 - Slides Up Continuously -->\r\n            <div class=\"zigzag-column column-1\">\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-9.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-8.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-4.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-3.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                <!-- Clone logos for continuous scroll -->\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-9.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-8.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-4.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-3.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                            <\/div>\r\n\r\n            <!-- Column 2 - Slides Down Continuously -->\r\n            <div class=\"zigzag-column column-2\">\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-9.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-8.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-4.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-3.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                <!-- Clone logos for continuous scroll -->\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-9.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-8.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-4.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-3.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                            <\/div>\r\n\r\n            <!-- Column 3 - Slides Up Continuously -->\r\n            <div class=\"zigzag-column column-3\">\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-9.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-8.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-4.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-3.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                <!-- Clone logos for continuous scroll -->\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-9.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-8.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-4.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-3.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                            <\/div>\r\n\r\n            <!-- Column 4 - Slides Down Continuously -->\r\n            <div class=\"zigzag-column column-4\">\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-9.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-8.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-4.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-3.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                <!-- Clone logos for continuous scroll -->\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-9.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-8.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-7.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-6.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-5.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-4.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                                    <div class=\"zigzag-logo-item\">\r\n                                                    <img decoding=\"async\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-copy-3.svg\" alt=\"Logo\">\r\n                                            <\/div>\r\n                            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2a1586f api-page e-flex e-con-boxed e-con e-parent\" data-id=\"2a1586f\" 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-b9b4363 elementor-widget elementor-widget-heading\" data-id=\"b9b4363\" 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\">Validating QA Excellence<\/h2>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fc93ded e-con-full e-flex e-con e-child\" data-id=\"fc93ded\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7068d66 elementor-widget elementor-widget-testimonial_slider_widget\" data-id=\"7068d66\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"testimonial_slider_widget.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n        <div class=\"testimonial-slider\"\n             data-slides=\"3\"\n             data-slides-scroll=\"3\"\n             data-autoplay=\"true\"\n             data-autoplay-speed=\"5000\"\n             data-speed=\"800\"\n        >\n                            <div class=\"testimonial-card\">\n <div class=\"testimonial-wrap\">\n\n    <!-- Company Info -->\n    \n\n    <!-- Testimonial Message -->\n            <p class=\"testimonial-content\">\n            Qyrus not only supports the testing of our Web, Mobile, and API components as part of our CI\/CD processes, but also in ongoing regression-testing across our partner ecosystem. The real power of Qyrus is that we have this extremely broad testing capability in one tool, run in the cloud, and reusable across all our development teams.        <\/p>\n    \n\n    <!-- Badge -->\n   \n\n    <!-- Client Info -->\n            <div class=\"client-info\">\n                            <img decoding=\"async\" class=\"client-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/testimonial.webp\" alt=\"Shawbrook Bank\" \/>\n                        <div class=\"client-meta\">\n                                    <div class=\"client-name\">Shawbrook Bank<\/div>\n                                            <\/div>\n        <\/div>\n    \n<\/div>\n\n                <\/div>                            <div class=\"testimonial-card\">\n <div class=\"testimonial-wrap\">\n\n    <!-- Company Info -->\n    \n\n    <!-- Testimonial Message -->\n            <p class=\"testimonial-content\">\n            The transition to Qyrus has marked a significant turning point for us. By embracing automation, we not only streamlined our SAP test automation process but also achieved a remarkable reduction in overall project testing time by 40%.        <\/p>\n    \n\n    <!-- Badge -->\n   \n\n    <!-- Client Info -->\n            <div class=\"client-info\">\n                            <img decoding=\"async\" class=\"client-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/testimonial-3.webp\" alt=\"Subaru\" \/>\n                        <div class=\"client-meta\">\n                                    <div class=\"client-name\">Subaru<\/div>\n                                            <\/div>\n        <\/div>\n    \n<\/div>\n\n                <\/div>                            <div class=\"testimonial-card\">\n <div class=\"testimonial-wrap\">\n\n    <!-- Company Info -->\n    \n\n    <!-- Testimonial Message -->\n            <p class=\"testimonial-content\">\n            ... the Qyrus platform have been a great addition to Monument&#039;s product delivery capabilities. Within a few months, we have been able to create a comprehensive test suite of complex end-to-end test scenarios spanning multiple platforms and channels. The Quinnox team has helped us embed the Qyrus solution, and the supporting processes around it, into our agile delivery methodology.        <\/p>\n    \n\n    <!-- Badge -->\n   \n\n    <!-- Client Info -->\n            <div class=\"client-info\">\n                            <img decoding=\"async\" class=\"client-image\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/testimonial-2.webp\" alt=\"Monument\" \/>\n                        <div class=\"client-meta\">\n                                    <div class=\"client-name\">Monument<\/div>\n                                            <\/div>\n        <\/div>\n    \n<\/div>\n\n                <\/div>                    <\/div>\n\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a606f08 grad-bg-or blog-sec e-flex e-con-boxed e-con e-parent\" data-id=\"a606f08\" 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-b9d92b2 elementor-widget elementor-widget-blog_section_widget\" data-id=\"b9d92b2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"blog_section_widget.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"blog-tabs-wrapper\"><h2 id=\"dynamic-tab-heading\" class=\"mb-0\">Blog<\/h2><ul class=\"nav nav-tabs d-none d-md-flex\" id=\"blogTab\" role=\"tablist\"><li class=\"nav-item\" role=\"presentation\"><a class=\"nav-links active\" id=\"tab-blog-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#tab-blog\" type=\"button\" role=\"tab\" aria-controls=\"tab-blog\" aria-selected=\"true\">Blog<\/a><\/li><li class=\"nav-item\" role=\"presentation\"><a class=\"nav-links \" id=\"tab-case-study-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#tab-case-study\" type=\"button\" role=\"tab\" aria-controls=\"tab-case-study\" aria-selected=\"false\">Case Study<\/a><\/li><li class=\"nav-item\" role=\"presentation\"><a class=\"nav-links \" id=\"tab-news-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#tab-news\" type=\"button\" role=\"tab\" aria-controls=\"tab-news\" aria-selected=\"false\">News<\/a><\/li><li class=\"nav-item\" role=\"presentation\"><a class=\"nav-links \" id=\"tab-reports-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#tab-reports\" type=\"button\" role=\"tab\" aria-controls=\"tab-reports\" aria-selected=\"false\">Reports<\/a><\/li><li class=\"nav-item\" role=\"presentation\"><a class=\"nav-links \" id=\"tab-webinar-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#tab-webinar\" type=\"button\" role=\"tab\" aria-controls=\"tab-webinar\" aria-selected=\"false\">Webinar<\/a><\/li><\/ul><\/div><div class=\"d-none d-md-block\"><div class=\"tab-content\" id=\"blogTabContent\"><div class=\"tab-pane fade show active\" id=\"tab-blog\" role=\"tabpanel\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/09\/Featured-thumbnail-300x169-1.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Featured-thumbnail\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">test automation<\/span><span class=\"badge\">Test Scripts<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">September 4, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">14 min<\/p>                    <h3 class=\"card-title\">How to Write Effective Test Scripts: A Straightforward Guide<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/guide-to-write-effective-test-scripts\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/09\/Featured-Image-1-300x169-1.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Featured Image\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">SAP Test Automation Tool<\/span><span class=\"badge\">SAP Testing<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">September 4, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">12 min<\/p>                    <h3 class=\"card-title\">SAP Test Automation: The Complete 2026 Guide<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/guide-to-sap-test-automation\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Featured-image-768x432-1.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Featured-image-768x432-1.png 768w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Featured-image-768x432-1-300x169.png 300w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">August 19, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">18 min<\/p>                    <h3 class=\"card-title\">User Acceptance Testing Best Practices: A Complete UAT Strategy Guide for SAP Teams<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/user-acceptance-testing-best-practices-for-sap-teams\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-4 vid-cta post-cta main-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><div class=\"tab-pane fade \" id=\"tab-case-study\" role=\"tabpanel\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"464\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/coca-cola-bottler-case-study.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"coca-cola bottler case study\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/coca-cola-bottler-case-study.png 578w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/coca-cola-bottler-case-study-300x241.png 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">Case Study<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">September 17, 2025 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">5 min<\/p>                    <h3 class=\"card-title\">From Bottlenecks to Breakthroughs: A Coca-Cola Bottler&#8217;s Quality Transformation\u00a0<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/sap-automation-case-study-coca-cola-bottler\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"464\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/CCEP-Case-Study.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"CCEP Case Study\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/CCEP-Case-Study.png 578w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/CCEP-Case-Study-300x241.png 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">Food and Beverages<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">June 27, 2025 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">5 min<\/p>                    <h3 class=\"card-title\">AI-Powered Testing Transforms One of the Largest Beverage Companies<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/smart-testing-for-consumer-packaged-goods\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Banking Digital Transformation\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation.png 1024w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation-300x300.png 300w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation-150x150.png 150w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation-768x768.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">BFSI<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">June 20, 2025 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">8 min<\/p>                    <h3 class=\"card-title\">150% Efficiency Boost for Banking Client Using Device Farm\u00a0<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/uk-bank-boosts-test-coverage-with-qyrus-device-farm-automated-testing\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-4 vid-cta post-cta main-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><div class=\"tab-pane fade \" id=\"tab-news\" role=\"tabpanel\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"384\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Qyrus-and-SurrealDB.webp\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Qyrus and SurrealDB\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Qyrus-and-SurrealDB.webp 768w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Qyrus-and-SurrealDB-300x150.webp 300w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">March 5, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">Qyrus Data Testing Officially Joins the SurrealDB Ecosystem<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/qyrus-data-testing-joins-surrealdb-ecosystem\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"527\" height=\"497\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/630d0f2a4b81e20a9dd77801_Quinnox-Forrester_news_img.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/630d0f2a4b81e20a9dd77801_Quinnox-Forrester_news_img.png 527w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/630d0f2a4b81e20a9dd77801_Quinnox-Forrester_news_img-300x283.png 300w\" sizes=\"(max-width: 527px) 100vw, 527px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">August 29, 2022 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">1 min<\/p>                    <h3 class=\"card-title\">Forrester Recognizes Quinnox as a \u201cStrong Performer\u201d in Modern Application Development<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/forrester-recognizes-quinnox-as-a-strong-performer-in-modern-application-development\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"425\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/62aca220f576f7aed63b099f_Shawbrook-Quinnox_news_img.jpg\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/62aca220f576f7aed63b099f_Shawbrook-Quinnox_news_img.jpg 640w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/62aca220f576f7aed63b099f_Shawbrook-Quinnox_news_img-300x199.jpg 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">July 22, 2022 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">3 min<\/p>                    <h3 class=\"card-title\">Quinnox Deploys Qyrus to Help Shawbrook Transform Its Platform<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/quinnox-deploys-qyrus-to-help-shawbrook-transform-its-platform\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-4 vid-cta post-cta main-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><div class=\"tab-pane fade \" id=\"tab-reports\" role=\"tabpanel\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"508\" height=\"379\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Media.jpg\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Media.jpg 508w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Media-300x224.jpg 300w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">August 13, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">Qyrus Named in Gartner&#8217;s Market Overview for API and MCP Testing Tools<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/gartner-market-overview-api-mcp-testing-tools\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"508\" height=\"379\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/THE-2027-FORCING-FUNCTION-White-Paper-Featured-Image.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"THE 2027 FORCING FUNCTION White Paper Featured Image\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/THE-2027-FORCING-FUNCTION-White-Paper-Featured-Image.png 508w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/THE-2027-FORCING-FUNCTION-White-Paper-Featured-Image-300x224.png 300w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">August 12, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">Modernize SAP Before 2027 Without Letting Defects Reach Go-Live<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/sap-modernize-whitepaper\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"635\" height=\"474\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/06\/Qyrus_UK_Fintech_Whitepaper_1-1.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Qyrus_UK_Fintech_Whitepaper_1 1\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/06\/Qyrus_UK_Fintech_Whitepaper_1-1.png 635w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/06\/Qyrus_UK_Fintech_Whitepaper_1-1-300x224.png 300w\" sizes=\"(max-width: 635px) 100vw, 635px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">June 29, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">3 min<\/p>                    <h3 class=\"card-title\">Why UK Fintechs Are Making QA Central to Operational Resilience.<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/uk-fintechs-are-making-qa-central-to-operational-resilience-whitepaper\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-4 vid-cta post-cta main-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><div class=\"tab-pane fade \" id=\"tab-webinar\" role=\"tabpanel\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"628\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1.webp\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Vibe Coding\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1.webp 1200w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1-300x157.webp 300w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1-1024x536.webp 1024w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1-768x402.webp 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">Innovation<\/span><span class=\"badge\">Vibe Coding<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">March 3, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">The Hybrid Era: Where Vibe Coding Meets Enterprise Discipline<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/the-hybrid-era-where-vibe-coding-meets-enterprise-discipline\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner.jpg\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner.jpg 1600w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner-300x169.jpg 300w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner-1024x576.jpg 1024w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner-768x432.jpg 768w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner-1536x864.jpg 1536w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">September 24, 2025 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">1 min<\/p>                    <h3 class=\"card-title\">Multimodal + Agentic Orchestration \u2260 Multi-Tool<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/multimodal-agentic-orchestration-multi-tool\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"464\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2024\/10\/webinar-testonomics.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Uncover Hidden Economic Benefits of AI in Testing\u202f\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2024\/10\/webinar-testonomics.png 578w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2024\/10\/webinar-testonomics-300x241.png 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">October 20, 2024 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">Testonomics: How to Uncover Hidden Economic Benefits of AI in Testing\u202f<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/testonomics-how-to-uncover-hidden-economic-benefits-of-ai-in-testing\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-4 vid-cta post-cta main-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"d-block d-md-none accordion\" id=\"blogAccordion\"><div class=\"accordion-item\"><h2 class=\"accordion-header\" id=\"heading-blog\"><a class=\"accordion-button \" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#collapse-blog\" aria-expanded=\"true\" aria-controls=\"collapse-blog\">Blog<\/a><\/h2><div id=\"collapse-blog\" class=\"accordion-collapse collapse show\" data-bs-parent=\"#blogAccordion\"><div class=\"accordion-body\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/09\/Featured-thumbnail-300x169-1.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Featured-thumbnail\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">test automation<\/span><span class=\"badge\">Test Scripts<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">September 4, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">14 min<\/p>                    <h3 class=\"card-title\">How to Write Effective Test Scripts: A Straightforward Guide<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/guide-to-write-effective-test-scripts\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/09\/Featured-Image-1-300x169-1.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Featured Image\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">SAP Test Automation Tool<\/span><span class=\"badge\">SAP Testing<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">September 4, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">12 min<\/p>                    <h3 class=\"card-title\">SAP Test Automation: The Complete 2026 Guide<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/guide-to-sap-test-automation\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Featured-image-768x432-1.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Featured-image-768x432-1.png 768w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Featured-image-768x432-1-300x169.png 300w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">August 19, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">18 min<\/p>                    <h3 class=\"card-title\">User Acceptance Testing Best Practices: A Complete UAT Strategy Guide for SAP Teams<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/user-acceptance-testing-best-practices-for-sap-teams\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-2 main-cta vid-cta post-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"accordion-item\"><h2 class=\"accordion-header\" id=\"heading-case-study\"><a class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#collapse-case-study\" aria-expanded=\"false\" aria-controls=\"collapse-case-study\">Case Study<\/a><\/h2><div id=\"collapse-case-study\" class=\"accordion-collapse collapse \" data-bs-parent=\"#blogAccordion\"><div class=\"accordion-body\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"464\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/coca-cola-bottler-case-study.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"coca-cola bottler case study\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/coca-cola-bottler-case-study.png 578w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/coca-cola-bottler-case-study-300x241.png 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">Case Study<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">September 17, 2025 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">5 min<\/p>                    <h3 class=\"card-title\">From Bottlenecks to Breakthroughs: A Coca-Cola Bottler&#8217;s Quality Transformation\u00a0<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/sap-automation-case-study-coca-cola-bottler\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"464\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/CCEP-Case-Study.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"CCEP Case Study\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/CCEP-Case-Study.png 578w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/CCEP-Case-Study-300x241.png 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">Food and Beverages<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">June 27, 2025 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">5 min<\/p>                    <h3 class=\"card-title\">AI-Powered Testing Transforms One of the Largest Beverage Companies<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/smart-testing-for-consumer-packaged-goods\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Banking Digital Transformation\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation.png 1024w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation-300x300.png 300w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation-150x150.png 150w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/06\/Banking-Digital-Transformation-768x768.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">BFSI<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">June 20, 2025 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">8 min<\/p>                    <h3 class=\"card-title\">150% Efficiency Boost for Banking Client Using Device Farm\u00a0<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/uk-bank-boosts-test-coverage-with-qyrus-device-farm-automated-testing\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-2 main-cta vid-cta post-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"accordion-item\"><h2 class=\"accordion-header\" id=\"heading-news\"><a class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#collapse-news\" aria-expanded=\"false\" aria-controls=\"collapse-news\">News<\/a><\/h2><div id=\"collapse-news\" class=\"accordion-collapse collapse \" data-bs-parent=\"#blogAccordion\"><div class=\"accordion-body\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"384\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Qyrus-and-SurrealDB.webp\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Qyrus and SurrealDB\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Qyrus-and-SurrealDB.webp 768w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Qyrus-and-SurrealDB-300x150.webp 300w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">March 5, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">Qyrus Data Testing Officially Joins the SurrealDB Ecosystem<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/qyrus-data-testing-joins-surrealdb-ecosystem\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"527\" height=\"497\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/630d0f2a4b81e20a9dd77801_Quinnox-Forrester_news_img.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/630d0f2a4b81e20a9dd77801_Quinnox-Forrester_news_img.png 527w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/630d0f2a4b81e20a9dd77801_Quinnox-Forrester_news_img-300x283.png 300w\" sizes=\"(max-width: 527px) 100vw, 527px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">August 29, 2022 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">1 min<\/p>                    <h3 class=\"card-title\">Forrester Recognizes Quinnox as a \u201cStrong Performer\u201d in Modern Application Development<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/forrester-recognizes-quinnox-as-a-strong-performer-in-modern-application-development\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"425\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/62aca220f576f7aed63b099f_Shawbrook-Quinnox_news_img.jpg\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/62aca220f576f7aed63b099f_Shawbrook-Quinnox_news_img.jpg 640w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2023\/04\/62aca220f576f7aed63b099f_Shawbrook-Quinnox_news_img-300x199.jpg 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">July 22, 2022 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">3 min<\/p>                    <h3 class=\"card-title\">Quinnox Deploys Qyrus to Help Shawbrook Transform Its Platform<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/quinnox-deploys-qyrus-to-help-shawbrook-transform-its-platform\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-2 main-cta vid-cta post-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"accordion-item\"><h2 class=\"accordion-header\" id=\"heading-reports\"><a class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#collapse-reports\" aria-expanded=\"false\" aria-controls=\"collapse-reports\">Reports<\/a><\/h2><div id=\"collapse-reports\" class=\"accordion-collapse collapse \" data-bs-parent=\"#blogAccordion\"><div class=\"accordion-body\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"508\" height=\"379\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Media.jpg\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Media.jpg 508w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/Media-300x224.jpg 300w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">August 13, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">Qyrus Named in Gartner&#8217;s Market Overview for API and MCP Testing Tools<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/gartner-market-overview-api-mcp-testing-tools\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"508\" height=\"379\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/THE-2027-FORCING-FUNCTION-White-Paper-Featured-Image.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"THE 2027 FORCING FUNCTION White Paper Featured Image\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/THE-2027-FORCING-FUNCTION-White-Paper-Featured-Image.png 508w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/08\/THE-2027-FORCING-FUNCTION-White-Paper-Featured-Image-300x224.png 300w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">August 12, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">Modernize SAP Before 2027 Without Letting Defects Reach Go-Live<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/sap-modernize-whitepaper\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"635\" height=\"474\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/06\/Qyrus_UK_Fintech_Whitepaper_1-1.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Qyrus_UK_Fintech_Whitepaper_1 1\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/06\/Qyrus_UK_Fintech_Whitepaper_1-1.png 635w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/06\/Qyrus_UK_Fintech_Whitepaper_1-1-300x224.png 300w\" sizes=\"(max-width: 635px) 100vw, 635px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">June 29, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">3 min<\/p>                    <h3 class=\"card-title\">Why UK Fintechs Are Making QA Central to Operational Resilience.<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/uk-fintechs-are-making-qa-central-to-operational-resilience-whitepaper\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-2 main-cta vid-cta post-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"accordion-item\"><h2 class=\"accordion-header\" id=\"heading-webinar\"><a class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#collapse-webinar\" aria-expanded=\"false\" aria-controls=\"collapse-webinar\">Webinar<\/a><\/h2><div id=\"collapse-webinar\" class=\"accordion-collapse collapse \" data-bs-parent=\"#blogAccordion\"><div class=\"accordion-body\"><div class=\"row g-4 justify-content-center\">        <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"628\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1.webp\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Vibe Coding\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1.webp 1200w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1-300x157.webp 300w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1-1024x536.webp 1024w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2026\/03\/Webinar-Banner-1-768x402.webp 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <span class=\"badge\">Innovation<\/span><span class=\"badge\">Vibe Coding<\/span><p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">March 3, 2026 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">The Hybrid Era: Where Vibe Coding Meets Enterprise Discipline<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/the-hybrid-era-where-vibe-coding-meets-enterprise-discipline\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner.jpg\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner.jpg 1600w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner-300x169.jpg 300w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner-1024x576.jpg 1024w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner-768x432.jpg 768w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Banner-1536x864.jpg 1536w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">September 24, 2025 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">1 min<\/p>                    <h3 class=\"card-title\">Multimodal + Agentic Orchestration \u2260 Multi-Tool<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/multimodal-agentic-orchestration-multi-tool\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"col-lg-4 col-md-6\">\n            <div class=\"card\">\n                                    <div class=\"img-wrap\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"464\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2024\/10\/webinar-testonomics.png\" class=\"card-img-top rounded-top-4 wp-post-image\" alt=\"Uncover Hidden Economic Benefits of AI in Testing\u202f\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2024\/10\/webinar-testonomics.png 578w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2024\/10\/webinar-testonomics-300x241.png 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/>                    <\/div>\n                                <div class=\"card-body\">\n                    <p class=\"det-text\"><img decoding=\"async\" class=\"cal-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-2.svg\">October 20, 2024 <span class=\"line\">|<\/span> <img decoding=\"async\" class=\"clok-icon post-icon\" src=\"\/wp-content\/uploads\/2025\/07\/SVG-2.svg\">2 min<\/p>                    <h3 class=\"card-title\">Testonomics: How to Uncover Hidden Economic Benefits of AI in Testing\u202f<\/h3>\n                    <a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/post\/testonomics-how-to-uncover-hidden-economic-benefits-of-ai-in-testing\/\" class=\"btn btn-link p-0\"><span>Read More<\/span><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/07\/Vector-3.svg\" class=\"link-arrow\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"text-center mt-2 main-cta vid-cta post-cta\"><div class=\"elementor-button-wrapper\"><a href=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/resources\/\" class=\"elementor-button elementor-button-link\"><span>Load More<\/span> <img decoding=\"async\" src=\"\/qyrus\/wp-content\/uploads\/2025\/07\/Group-133142-1.svg\" class=\"link-arrow\"><\/a><\/div><\/div><\/div><\/div><\/div><\/div><\/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-9cb5209 e-flex e-con-boxed e-con e-parent\" data-id=\"9cb5209\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-c0f9fd8 e-con-full ov-hid-seec e-flex e-con e-child\" data-id=\"c0f9fd8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-c3a3553 e-con-full e-flex e-con e-child\" data-id=\"c3a3553\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-02c9d20 e-con-full e-flex e-con e-child\" data-id=\"02c9d20\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-88f2229 elementor-widget elementor-widget-heading\" data-id=\"88f2229\" 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\">Unlock API Testing Excellence<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9767243 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"9767243\" 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 style=\"font-weight: 400;\">Discover how Qyrus streamlines your API testing and experience unparalleled ease and efficiency to accelerate your development cycles and ensure flawless digital experiences, because testing APIs has never been this easy.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-624ce8f e-con-full elementor-hidden-mobile e-flex e-con e-child\" data-id=\"624ce8f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c0f9486 shadow-cta en-cta elementor-align-right elementor-widget elementor-widget-button\" data-id=\"c0f9486\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Schedule a demo<\/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 class=\"elementor-element elementor-element-4e3579d shadow-cta border-cta border-cta elementor-align-right elementor-widget elementor-widget-button\" data-id=\"4e3579d\" 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=\"\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">More Info<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-90945e3 e-con-full e-flex e-con e-child\" data-id=\"90945e3\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3fc807c elementor-absolute elementor-widget-tablet__width-initial elementor-widget elementor-widget-image\" data-id=\"3fc807c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"390\" src=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-2.webp\" class=\"attachment-large size-large wp-image-14872\" alt=\"\" srcset=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-2.webp 576w, https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-2-300x203.webp 300w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>The Future of API Testing is Here: Drive ROI with Qyrus&#8217; AI-First Approach. Get Started Powering Quality For The Command Centre: Intelligent, Codeless, Complete API Mastery Automate every interaction, validate every response, and drive faster releases. Intelligent Automation: The AI Brain Behind Flawless APIs Streamline API test creation with Qyrus&#8217; AI Bot (Nova) and ensure [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"parent":17177,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"class_list":["post-11245","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Qyrus API Testing \u2013 Codeless &amp; AI-Driven API Test Automation Platform<\/title>\n<meta name=\"description\" content=\"Explore Qyrus\u2019 API testing capabilities: AI-powered platform for functional, performance &amp; process API test automation with seamless integration options.\" \/>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Qyrus API Testing \u2013 Codeless &amp; AI-Driven API Test Automation Platform\" \/>\n<meta property=\"og:description\" content=\"Explore Qyrus\u2019 API testing capabilities: AI-powered platform for functional, performance &amp; process API test automation with seamless integration options.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/\" \/>\n<meta property=\"og:site_name\" content=\"Qyrus\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-01T07:53:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-6.webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"45 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/api\\\/\",\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/api\\\/\",\"name\":\"Qyrus API Testing \u2013 Codeless & AI-Driven API Test Automation Platform\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/Artboard-1-6.webp\",\"datePublished\":\"2025-07-23T06:28:08+00:00\",\"dateModified\":\"2026-01-01T07:53:38+00:00\",\"description\":\"Explore Qyrus\u2019 API testing capabilities: AI-powered platform for functional, performance & process API test automation with seamless integration options.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/api\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/Artboard-1-6.webp\",\"contentUrl\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/Artboard-1-6.webp\",\"width\":849,\"height\":810},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Solutions\",\"item\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/solutions\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/#website\",\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/\",\"name\":\"Qyrus\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/#organization\",\"name\":\"Qyrus\",\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/qurus-logo.png\",\"contentUrl\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/qurus-logo.png\",\"width\":153,\"height\":34,\"caption\":\"Qyrus\"},\"image\":{\"@id\":\"https:\\\/\\\/symmetricsolutionz.co.in\\\/qyrus\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Qyrus API Testing \u2013 Codeless & AI-Driven API Test Automation Platform","description":"Explore Qyrus\u2019 API testing capabilities: AI-powered platform for functional, performance & process API test automation with seamless integration options.","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Qyrus API Testing \u2013 Codeless & AI-Driven API Test Automation Platform","og_description":"Explore Qyrus\u2019 API testing capabilities: AI-powered platform for functional, performance & process API test automation with seamless integration options.","og_url":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/","og_site_name":"Qyrus","article_modified_time":"2026-01-01T07:53:38+00:00","og_image":[{"url":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-6.webp","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"45 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/","url":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/","name":"Qyrus API Testing \u2013 Codeless & AI-Driven API Test Automation Platform","isPartOf":{"@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/#website"},"primaryImageOfPage":{"@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/#primaryimage"},"image":{"@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/#primaryimage"},"thumbnailUrl":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-6.webp","datePublished":"2025-07-23T06:28:08+00:00","dateModified":"2026-01-01T07:53:38+00:00","description":"Explore Qyrus\u2019 API testing capabilities: AI-powered platform for functional, performance & process API test automation with seamless integration options.","breadcrumb":{"@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/#primaryimage","url":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-6.webp","contentUrl":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/09\/Artboard-1-6.webp","width":849,"height":810},{"@type":"BreadcrumbList","@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/symmetricsolutionz.co.in\/qyrus\/"},{"@type":"ListItem","position":2,"name":"Solutions","item":"https:\/\/symmetricsolutionz.co.in\/qyrus\/solutions\/"},{"@type":"ListItem","position":3,"name":"API"}]},{"@type":"WebSite","@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/#website","url":"https:\/\/symmetricsolutionz.co.in\/qyrus\/","name":"Qyrus","description":"","publisher":{"@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/symmetricsolutionz.co.in\/qyrus\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/#organization","name":"Qyrus","url":"https:\/\/symmetricsolutionz.co.in\/qyrus\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/#\/schema\/logo\/image\/","url":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/02\/qurus-logo.png","contentUrl":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-content\/uploads\/2025\/02\/qurus-logo.png","width":153,"height":34,"caption":"Qyrus"},"image":{"@id":"https:\/\/symmetricsolutionz.co.in\/qyrus\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-json\/wp\/v2\/pages\/11245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-json\/wp\/v2\/comments?post=11245"}],"version-history":[{"count":0,"href":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-json\/wp\/v2\/pages\/11245\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-json\/wp\/v2\/pages\/17177"}],"wp:attachment":[{"href":"https:\/\/symmetricsolutionz.co.in\/qyrus\/wp-json\/wp\/v2\/media?parent=11245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}