
<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://app.secureprivacy.ai/script/6926adee204ddcd2e10a129e.js"></script>

    <meta charset="utf-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="author" content="Torry Harris" />
    <link href="/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />
    <link rel="alternate" type="application/rss+xml" title="Torry Harris Insights" href="https://www.torryharris.com/rss.xml">

    <!-- Preconnect links -->
    <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin="anonymous">

    <link rel="preconnect" href="https://thmedia.blob.core.windows.net" crossorigin="anonymous">
    <link rel="preconnect" href="https://assets.torryharris.com" crossorigin="anonymous">

        <title></title>
        <meta name="keywords" />
        <meta name="description" />
        <link rel="canonical" href="https://www.torryharris.com/error-404">
        <meta property="og:type" content="article" />
        <meta property="og:url" content="error-404" />
        <meta property="og:locale" content="en_us" />
        <meta property="twitter:card" content="summary_large_image" />
        <meta property="twitter:site" content="@torryharris" />
        <meta property="twitter:creator" content="@torryharris" />
        <meta property="twitter:domain" content="https://www.torryharris.com/" />
        <meta property="og:site_name" /> 
<meta property="og:image" /> 
<meta itemprop="name"> 
<meta property="og:title" /> 
<meta itemprop="description"> 
<meta itemprop="image"> 
<meta property="og:description" /> 
<meta property="twitter:title" /> 
<meta property="twitter:description" /> 
<meta property="twitter:image" /> 
        <link rel="alternate" href="https://www.torryharris.com/" hreflang="x-default" /> <!-- Default -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="pt-BR" /> <!-- Brazil -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="es-MX" /> <!-- Mexico -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="es-CO" /> <!-- Colombia -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="es-VE" /> <!-- Venezuela -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="es-BO" /> <!-- Bolivia -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="es-CL" /> <!-- Chile -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="es-AR" /> <!-- Argentina -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="es-PE" /> <!-- Peru -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="nl-BE" /> <!-- Belgium (Dutch) -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="fr-BE" /> <!-- Belgium (French) -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="nl-NL" /> <!-- Netherlands -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="fr-LU" /> <!-- Luxembourg (French) -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="de-LU" /> <!-- Luxembourg (German) -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="fr-FR" /> <!-- France -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="de-DE" /> <!-- Germany -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="da-DK" /> <!-- Denmark -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="fi-FI" /> <!-- Finland -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="is-IS" /> <!-- Iceland -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="no-NO" /> <!-- Norway -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="sv-SE" /> <!-- Sweden -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="es-ES" /> <!-- Spain (Spanish) -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="ar-SA" /> <!-- Saudi Arabia (Arabic) -->
<link rel="alternate" href="https://www.torryharris.com/" hreflang="ar-AE" /> <!-- United Arab Emirates (Arabic) -->


    
    <script defer src="https://www.google.com/recaptcha/api.js?render=explicit&onload=onRecaptchaLoadCallback"></script>
    <link rel="stylesheet" type="text/css" href="/css/slick.min.css">

    <link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link href="/css/V2/megaMenustyle.min.css?v=20260830200035&amp;v=BdhUzZ8VME5_0LJ5Afph5h25-aPf_mp1oehvcGodbos" rel="stylesheet" />
    <link rel="stylesheet" href="/css/raleway-font.min.css">

        <link rel="stylesheet" href="https://thmedia.blob.core.windows.net/assets/css/new/template.css" />
        <link rel="stylesheet" href="https://thmedia.blob.core.windows.net/assets/css/new/site.css" />
        <link rel="stylesheet" href="https://thmedia.blob.core.windows.net/assets/css/new/template2.css" />
        <link rel="stylesheet" href="/css/site.min.css" />
        <link rel="stylesheet" href="https://thmedia.blob.core.windows.net/assets/css/jquery.lightbox.css" />
        <link rel="stylesheet" href="/css/font.min.css">
        <link href="/css/wow.min.css" rel="stylesheet" />
        <link rel="stylesheet" href="/css/jquery-ui.min.css">
        <script src="/js/scrollMove.js"></script>
        <script src="/js/amn/wow.min.js"></script>
        <script src="/js/amn/parallaxie.min.js"></script>
        <script src="/js/amn/llscr.js"></script>


    <script src="/lib/jquery/dist/jquery.min.js"></script>


    <link rel="stylesheet" href="/css/thbs-youtube-popup.min.css">
    
<!-- Google Tag Manager -->
<script>
    (function (w, d, s, l, i) {
      w[l] = w[l] || [];
      w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
      var f = d.getElementsByTagName(s)[0],
        j = d.createElement(s),
        dl = l != "dataLayer" ? "&l=" + l : "";
      j.async = true;
      j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
      f.parentNode.insertBefore(j, f);
    })(window, document, "script", "dataLayer", "GTM-WZQ2C5J");
</script>
<!-- End Google Tag Manager -->
    
<!-- Start of HubSpot Embed Code -->
<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/49758775.js"></script>
<!-- End of HubSpot Embed Code -->
</head>
<body class="bdy Pageid_16" data-id="16">
    <header b-purfj6pd51 class="header">
        
<style>
    .grecaptcha-badge {
        width: 70px !important;
        overflow: hidden !important;
        transition: all 0.3s ease !important;
        right: 1px !important;
        position: relative !important;
        float: right;
        bottom: 30px !important;
    }

    .error-message {
        font-size: 0.85rem;
        color: #fb8500;
    }

    .grecaptcha-badge:hover {
        width: 256px !important;
    }

    @media only screen and (max-width: 500px) {
        .g-recaptcha {
            transform: scale(0.77);
            transform-origin: 0 0;
        }
    }
</style>

<script>
    function onRecaptchaLoadCallback() {
        var x = '6LfHeyYqAAAAAAzWPZOl8QFtQ_n8y_1L3ryEIB17';
        window.clientId = grecaptcha.render('google-inline-badge', {
            'sitekey': `${x}`,
            'size': 'invisible'
        });
    }
</script>

        

<nav class="navbar navbar-expand-lg thv2-header position-fixed w-100 p-0">
    <div class="container thv2-header-inner d-flex align-items-center justify-content-between">
        <a class="navbar-brand thv2-brand p-0 m-0" href="/">
            <img src="https://assets.torryharris.com/assets/v2/home/navbar/brand.svg" alt="THIS - Torry Harris" />
        </a>

        <div class="thv2-menu" id="thv2Menu">
            <ul class="navbar-nav thv2-nav mb-0">
                <li class="nav-item droppable thv2-nav-item">
                    <a class="nav-link thv2-nav-link" href="javascript:void(0)" onclick="thv2ToggleMenu(event, this)">
                        Strategy &amp; Solutions
                        <span class="thv2-chevron">
                            <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                            </svg>
                        </span>
                    </a>
                    <div class="mega-menu thv2-mega-menu">
                        <div class="thv2-mega-col">
                            <a href="/business-leaders" class="thv2-mega-label">Business Leaders</a>
                            <ul class="thv2-mega-list">
                                <li><a href="/industries/telecom">Telecommunications</a></li>
                                <li><a href="/industries/banking-and-financial-services">Financial Services</a></li>
                                <li><a href="/industries/government">Government, Public Sector &amp; Economic Zones</a></li>
                            </ul>
                        </div>
                        <div class="thv2-mega-divider"></div>
                        <div class="thv2-mega-group">
                            <a href="/technology-leaders" class="thv2-mega-label">Technology Leaders</a>
                            <div class="thv2-mega-subcols">
                                <div class="thv2-mega-subcol">
                                    <a class="thv2-mega-heading" href="/services/legacy-modernization-and-roi">Legacy modernization &amp; ROI</a>
                                    <ul class="thv2-mega-list">
                                        <li><a href="/services/legacy-modernization">Legacy Application Modernization</a></li>
                                        <li><a href="/services/microservices-consulting-architecture-creation">Microservice Architecture &amp; Creation</a></li>
                                        <li><a href="/services/devops-services-delivery-automation-ci-cd">DevOps, CI/CD and Delivery Automation</a></li>
                                        <li><a href="/services/legacy-to-cloud-migration">Legacy to cloud-native framework</a></li>
                                        <li><a href="/services/telco-csp-transformation">Reinventing Telecom for the Digital Age</a></li>
                                    </ul>
                                </div>
                                <div class="thv2-mega-subcol">
                                    <a class="thv2-mega-heading" href="/services/integration-and-digital-platform-ecosystems">Integration &amp; Digital Platform Ecosystems</a>
                                    <ul class="thv2-mega-list">
                                        <li><a href="/services/application-integration-and-orchestration">Application integration and orchestration</a></li>
                                        <li><a href="/services/api-management-and-platform-enablement">API Management &amp; Platform Enablement</a></li>
                                        <li><a href="/services/api-and-integration-governance">API Integration Governance</a></li>
                                        <li><a href="/services/api-management">API and microservices factory model</a></li>
                                        <li><a href="/services/api-management">API platform management</a></li>
                                        <li><a href="/services/ipaas-implementation">iPaaS Implementation</a></li>
                                        <li><a href="/services/digital-marketplace-implementation">Digital Marketplace Implementation</a></li>
                                    </ul>
                                </div>
                                <div class="thv2-mega-subcol">
                                    <a class="thv2-mega-heading" href="/services/data-intelligence-and-agentic-ai">Data, Intelligence &amp; Agentic AI</a>
                                    <ul class="thv2-mega-list">
                                        <li><a href="/services/data-virtualization">Data Virtualization</a></li>
                                        <li><a href="/services/ai-powered-data-management-solutions">AI-Powered Data Management Solutions</a></li>
                                        <li><a href="/services/data-integration">Data Integration</a></li>
                                        <li><a href="/services/agentic-ai">Agentic AI services</a></li>
                                    </ul>
                                </div>
                                <div class="thv2-mega-subcol">
                                    <a class="thv2-mega-heading" href="/services/managed-cloud-and-governance">Managed Cloud &amp; Governance</a>
                                    <ul class="thv2-mega-list">
                                        <li><a href="/services/cloud-managed-services">Cloud Managed Services</a></li>
                                        <li><a href="/services/unified-cloud-transformation">Unified cloud transformation</a></li>
                                        <li><a href="/services/cloud-integration">Cloud Integration</a></li>
                                        <li><a href="/services/cloud-migration">Cloud Migration</a></li>
                                        <li><a href="/services/cloud-management-and-security">Cloud Management &amp; Security</a></li>
                                    </ul>
                                </div>
                            </div>
                        </div>
                    </div>
                </li>
                <li class="nav-item droppable thv2-nav-item">
                    <a class="nav-link thv2-nav-link" href="javascript:void(0)" onclick="thv2ToggleMenu(event, this)">
                        Products &amp; Platforms
                        <span class="thv2-chevron">
                            <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                            </svg>
                        </span>
                    </a>
                    <div class="mega-menu thv2-mega-menu">
                        <div class="thv2-mega-cards">
                            <a class="thv2-mega-card" href="https://www.torryharris.com/products/digital-ecosystem-platform/marketplace">
                                <span class="thv2-mega-card-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
                                        <path d="M12.8564 5.74512V9.00773H11.9605V5.74512C11.9605 4.72599 11.1305 3.89426 10.1114 3.89426C9.09227 3.89426 8.26412 4.72599 8.26412 5.74512V9.00773H7.36816V5.74512C7.36816 4.23154 8.59971 3 10.1114 3C11.6231 3 12.8565 4.23164 12.8565 5.74512H12.8564Z" fill="#FB8500" />
                                        <path d="M14.9465 6.48684L13.2203 7.75474L13.1049 7.84107L12.6113 8.20329L12.4959 8.28716L12.429 8.33581L11.6814 8.88655L10.2579 9.93316C10.1425 10.017 9.98809 10.017 9.87258 9.93193L8.59135 8.97155L7.84377 8.40995L7.48278 8.14001L7.36727 8.05255L6.87499 7.68296L6.75948 7.59663L5.27764 6.48674C4.74767 6.09534 4 6.47579 4 7.13222V16.2603C4 17.2219 4.77922 17.9999 5.7396 17.9999H14.4836C15.4452 17.9999 16.2243 17.2219 16.2243 16.2603V7.13222C16.2243 6.47579 15.4767 6.09534 14.9468 6.48674L14.9465 6.48684ZM14.8407 15.2915C14.8407 16.0355 14.2377 16.6372 13.4938 16.6372H6.72887C5.98611 16.6372 5.38314 16.0355 5.38314 15.2915V9.4457C5.38314 8.93878 5.96184 8.64334 6.37147 8.94728L7.51773 9.80555L7.60774 9.87243L7.98819 10.1581L8.0782 10.2262L8.35655 10.4341L8.93525 10.8694L9.92717 11.6121C10.016 11.6778 10.1351 11.6778 10.225 11.6133L11.3264 10.8037L11.9037 10.377L11.9561 10.3393L12.0449 10.2749L12.4278 9.99408L12.5165 9.92721L13.8525 8.94737C14.2622 8.64343 14.8408 8.93887 14.8408 9.44579V15.2916L14.8407 15.2915Z" fill="white" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-card-title">Digital Marketplace</span>
                                <span class="thv2-mega-card-desc">AI-Powered B2B2X Marketplace Platform</span>
                            </a>
                            <a class="thv2-mega-card" href="https://www.torryharris.com/products/api-management-platform/api-manager">
                                <span class="thv2-mega-card-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
                                        <path d="M11.5789 6.24365L15.8621 12.5172C14.2273 13.9005 11.7543 13.5633 10.5493 11.7929L9.30273 9.96128L11.5789 6.24365Z" fill="#FB8500" />
                                        <path d="M12.5213 6.3131C12.5903 6.41391 12.595 6.54569 12.5323 6.65072C12.5272 6.65899 12.5222 6.66727 12.5172 6.67554L10.3521 10.1867L6.29683 16.7638C5.72009 17.6993 4.4941 17.9902 3.5582 17.4133C2.62268 16.8365 2.33181 15.6105 2.90874 14.6746L7.88911 6.59763L9.84286 3.42903C9.99849 3.17664 10.3623 3.1676 10.5302 3.4123L12.5213 6.3133V6.3131Z" fill="white" />
                                        <path d="M17.6127 15.7981C17.6127 16.885 16.7315 17.7659 15.6446 17.7659C14.5576 17.7659 13.6768 16.885 13.6768 15.7981C13.6768 14.7112 14.558 13.8303 15.6446 13.8303C16.7311 13.8303 17.6127 14.7116 17.6127 15.7981Z" fill="white" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-card-title">API Manager</span>
                                <span class="thv2-mega-card-desc">Full lifecycle API management solution</span>
                            </a>
                        </div>
                    </div>
                </li>
                <li class="nav-item droppable thv2-nav-item">
                    <a class="nav-link thv2-nav-link" href="javascript:void(0)" onclick="thv2ToggleMenu(event, this)">
                        How we Engage
                        <span class="thv2-chevron">
                            <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                            </svg>
                        </span>
                    </a>
                    <div class="mega-menu thv2-mega-menu">
                        <div class="thv2-mega-tabs">
                            <a class="thv2-mega-tab thv2-mega-tab--active" href="/global-capability-center">
                                Global Capability Center
                                <span class="thv2-mega-tab-arrow">
                                    <svg width="14" height="8" viewBox="0 0 14 8" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                        <path d="M0.5 4H13.5M13.5 4L10 0.5M13.5 4L10 7.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                            </a>
                            <div class="thv2-mega-tab-divider"></div>
                            <div class="thv2-mega-tab-group" onmouseenter="thv2EngageTabHover(this, true)" onmouseleave="thv2EngageTabHover(this, false)">
                                <a class="thv2-mega-tab" href="/services/api-and-microservices-factory-model">API &amp; Microservices factory model</a>
                                <div class="thv2-mega-tab-divider"></div>
                                <a class="thv2-mega-tab" href="/services/ai-factory">AI Factory</a>
                                <div class="thv2-mega-tab-divider"></div>
                            </div>
                        </div>
                        <div class="thv2-mega-divider"></div>
                        <div class="thv2-mega-subcol">
                            <ul class="thv2-mega-list">
                                <li><a href="/global-capability-center/conceptualization-build">Conceptualization and build</a></li>
                                <li><a href="/global-capability-center/operational-excellence">Operational excellence</a></li>
                                <li><a href="/global-capability-center/framework-for-excellence">AIM framework</a></li>
                                <li><a href="/global-capability-center/bot-build-operate-transfer">Build-operate-transfer (BOT)</a></li>
                                <li><a href="/global-capability-center/odc-offshore-development-center">Offshore development center (ODC)</a></li>
                                <li><a href="/global-capability-center/center-of-excellence">Center of Excellence (CoE)</a></li>
                            </ul>
                        </div>
                    </div>
                </li>
                <li class="nav-item droppable thv2-nav-item">
                    <a class="nav-link thv2-nav-link" href="javascript:void(0)" onclick="thv2ToggleMenu(event, this)">
                        Insights
                        <span class="thv2-chevron">
                            <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                            </svg>
                        </span>
                    </a>
                    <div class="mega-menu thv2-mega-menu">
                        <div class="thv2-mega-grid">
                            <a class="thv2-mega-tile" href="/events">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none">
                                        <path d="M12.5 2H2C1.17157 2 0.5 2.67157 0.5 3.5V12.5C0.5 13.3284 1.17157 14 2 14H12.5C13.3284 14 14 13.3284 14 12.5V3.5C14 2.67157 13.3284 2 12.5 2Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M0.5 5H14M4.25 0.5V3.5M10.25 0.5V3.5" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Events &amp; Webinars</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Live sessions and recordings from our practitioners.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/insights/case-study">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="10" height="15" viewBox="0 0 10 15" fill="none">
                                        <path d="M0.5 0.5H7.25L9.5 2.75V14H0.5V0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M6.5 0.5V3.5H9.5" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M2.75 7.25H7.25M2.75 10.25H7.25" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Case Studies</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Real programs, real outcomes, real numbers.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/insights/articles-povs">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 13 13" fill="none">
                                        <path d="M0.5 0.5H5C5.59674 0.5 6.16903 0.737053 6.59099 1.15901C7.01295 1.58097 7.25 2.15326 7.25 2.75V12.5C7.25 12.0027 7.05246 11.5258 6.70083 11.1742C6.34919 10.8225 5.87228 10.625 5.375 10.625H0.5V0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M12.5 0.5H8C7.40326 0.5 6.83097 0.737053 6.40901 1.15901C5.98705 1.58097 5.75 2.15326 5.75 2.75V12.5C5.75 12.0027 5.94754 11.5258 6.29917 11.1742C6.65081 10.8225 7.12772 10.625 7.625 10.625H12.5V0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Articles &amp; PoVs</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Point-of-view pieces on where the market is headed.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/insights/whitepapers">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 13 13" fill="none">
                                        <path d="M0.5 0.5H12.5V9.5H3.5L0.5 12.5V0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Whitepapers</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Opinion and analysis from our leadership team.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/analyst-speak">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 13 13" fill="none">
                                        <path d="M0.5 12.5V5M6.5 12.5V0.5M12.5 12.5V7.25" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Analyst Speak</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Independent analyst coverage of our platforms.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/news">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none">
                                        <path d="M7.25 14C10.9779 14 14 10.9779 14 7.25C14 3.52208 10.9779 0.5 7.25 0.5C3.52208 0.5 0.5 3.52208 0.5 7.25C0.5 10.9779 3.52208 14 7.25 14Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M0.5 7.25H14" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M7.25 0.5C9.125 2.525 9.125 11.225 7.25 14C5.375 11.225 5.375 2.525 7.25 0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Newsroom</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Company announcements and press coverage.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/infographics">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none">
                                        <path d="M12.5 0.5H2C1.17157 0.5 0.5 1.17157 0.5 2V12.5C0.5 13.3284 1.17157 14 2 14H12.5C13.3284 14 14 13.3284 14 12.5V2C14 1.17157 13.3284 0.5 12.5 0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M4.625 5.75C5.24632 5.75 5.75 5.24632 5.75 4.625C5.75 4.00368 5.24632 3.5 4.625 3.5C4.00368 3.5 3.5 4.00368 3.5 4.625C3.5 5.24632 4.00368 5.75 4.625 5.75Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M14 9.5L10.25 5.75L3.5 12.5" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Infographics</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Complex ideas, distilled into a single visual.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/summary-decks">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="15" height="13" viewBox="0 0 15 13" fill="none">
                                        <path d="M7.25 0.5L14 4.25L7.25 8L0.5 4.25L7.25 0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M0.5 8L7.25 11.75L14 8" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Summary Decks</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Downloadable overviews you can share internally.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/about-us/video-gallery">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none">
                                        <path d="M7.25 14C10.9779 14 14 10.9779 14 7.25C14 3.52208 10.9779 0.5 7.25 0.5C3.52208 0.5 0.5 3.52208 0.5 7.25C0.5 10.9779 3.52208 14 7.25 14Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M5.75 4.25L10.25 7.25L5.75 10.25V4.25Z" fill="#BECADB" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Video Gallery</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">Product walkthroughs and customer conversations.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/knowledge-zone">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 13 13" fill="none">
                                        <path d="M0.5 0.5H5C5.59674 0.5 6.16903 0.737053 6.59099 1.15901C7.01295 1.58097 7.25 2.15326 7.25 2.75V12.5C7.25 12.0027 7.05246 11.5258 6.70083 11.1742C6.34919 10.8225 5.87228 10.625 5.375 10.625H0.5V0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M12.5 0.5H8C7.40326 0.5 6.83097 0.737053 6.40901 1.15901C5.98705 1.58097 5.75 2.15326 5.75 2.75V12.5C5.75 12.0027 5.94754 11.5258 6.29917 11.1742C6.65081 10.8225 7.12772 10.625 7.625 10.625H12.5V0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Knowledge Zone</span>
                                    <span class="thv2-mega-tile-desc thv2-mega-tile-desc--muted">The full library, searchable in one place.</span>
                                </span>
                            </a>
                        </div>
                        <div class="thv2-mega-divider"></div>
                        <div class="thv2-mega-featured">
                            <span class="thv2-mega-featured-chip">
                                <img src="https://assets.torryharris.com/assets/v2/header/header-image.png" />
                            </span>
                            <div class="thv2-mega-featured-body">
                                <p class="thv2-mega-featured-label">Featured</p>
                                <p class="thv2-mega-featured-title">Ecosystem-led growth: partner-led storefronts as the new GTM engine</p>
                                <p class="thv2-mega-featured-desc">How partner-led storefronts are becoming the new go-to-market engine for the enterprise.</p>
                                <a class="thv2-mega-featured-cta" href="/insights/whitepapers/ecosystem-imperative-partner-led-storefronts">Read the whitepaper</a>
                            </div>
                        </div>
                    </div>
                </li>
                <li class="nav-item droppable thv2-nav-item">
                    <a class="nav-link thv2-nav-link" href="javascript:void(0)" onclick="thv2ToggleMenu(event, this)">
                        About us
                        <span class="thv2-chevron">
                            <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                            </svg>
                        </span>
                    </a>
                    <div class="mega-menu thv2-mega-menu">
                        <div class="thv2-mega-grid">
                            <a class="thv2-mega-tile" href="/about-us/corporate-overview">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="13" height="15" viewBox="0 0 13 15" fill="none">
                                        <path d="M11.75 0.5H1.25C0.835786 0.5 0.5 0.835786 0.5 1.25V13.25C0.5 13.6642 0.835786 14 1.25 14H11.75C12.1642 14 12.5 13.6642 12.5 13.25V1.25C12.5 0.835786 12.1642 0.5 11.75 0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M4.25 14V11H8.75V14" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M3.5 3.5H3.5075M6.5 3.5H6.5075M9.5 3.5H9.5075M3.5 6.5H3.5075M6.5 6.5H6.5075M9.5 6.5H9.5075" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Corporate Overview</span>
                                    <span class="thv2-mega-tile-desc">Who we are and how we work.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/torry-harris-global-locations">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
                                        <g clip-path="url(#clip0_8024_1361)">
                                            <path d="M11.8125 5.625C11.8125 9.5625 6.75 12.9375 6.75 12.9375C6.75 12.9375 1.6875 9.5625 1.6875 5.625C1.6875 4.28234 2.22087 2.99467 3.17027 2.04527C4.11967 1.09587 5.40734 0.5625 6.75 0.5625C8.09266 0.5625 9.38032 1.09587 10.3297 2.04527C11.2791 2.99467 11.8125 4.28234 11.8125 5.625Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                            <path d="M6.75 7.3125C7.68198 7.3125 8.4375 6.55698 8.4375 5.625C8.4375 4.69302 7.68198 3.9375 6.75 3.9375C5.81802 3.9375 5.0625 4.69302 5.0625 5.625C5.0625 6.55698 5.81802 7.3125 6.75 7.3125Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        </g>
                                        <defs>
                                            <clipPath id="clip0_8024_1361">
                                                <rect width="13.5" height="13.5" fill="white" />
                                            </clipPath>
                                        </defs>
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Global Locations</span>
                                    <span class="thv2-mega-tile-desc">Delivery centers across every major region.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/about-us/awards-and-recognition">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="9" height="15" viewBox="0 0 9 15" fill="none">
                                        <path d="M4.25 8C6.32107 8 8 6.32107 8 4.25C8 2.17893 6.32107 0.5 4.25 0.5C2.17893 0.5 0.5 2.17893 0.5 4.25C0.5 6.32107 2.17893 8 4.25 8Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M1.625 7.625L0.5 14L4.25 11.75L8 14L6.875 7.625" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Awards and Recognition</span>
                                    <span class="thv2-mega-tile-desc">Independent recognition of our platforms and delivery.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/client-speak">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 13 13" fill="none">
                                        <path d="M0.5 0.5H12.5V9.5H3.5L0.5 12.5V0.5Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Client Speak</span>
                                    <span class="thv2-mega-tile-desc">What our customers say about working with us.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/about-us/corporate-social-responsibility">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
                                        <g clip-path="url(#clip0_8024_1365)">
                                            <path d="M11.7224 2.59318C11.4351 2.30574 11.094 2.07773 10.7186 1.92216C10.3431 1.76659 9.94072 1.68652 9.53432 1.68652C9.12792 1.68652 8.7255 1.76659 8.35006 1.92216C7.97461 2.07773 7.6335 2.30574 7.3462 2.59318L6.74995 3.18943L6.15369 2.59318C5.57337 2.01285 4.78628 1.68682 3.96557 1.68682C3.14486 1.68682 2.35777 2.01285 1.77744 2.59318C1.19712 3.1735 0.871094 3.96059 0.871094 4.7813C0.871094 5.60201 1.19712 6.3891 1.77744 6.96943L2.37369 7.56568L6.74995 11.9419L11.1262 7.56568L11.7224 6.96943C12.0099 6.68213 12.2379 6.34101 12.3935 5.96556C12.549 5.59012 12.6291 5.1877 12.6291 4.7813C12.6291 4.3749 12.549 3.97248 12.3935 3.59704C12.2379 3.22159 12.0099 2.88048 11.7224 2.59318Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        </g>
                                        <defs>
                                            <clipPath id="clip0_8024_1365">
                                                <rect width="13.5" height="13.5" fill="white" />
                                            </clipPath>
                                        </defs>
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Social Responsibility</span>
                                    <span class="thv2-mega-tile-desc">Our commitments beyond the balance sheet.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/about-us/our-partners">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none">
                                        <path d="M3.71875 8.21973L8.21875 3.71973" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M2.21967 6.71973L0.719672 8.21973C0.51915 8.63959 0.453724 9.11129 0.532405 9.56988C0.611086 10.0285 0.830004 10.4514 1.15901 10.7804C1.48802 11.1094 1.91094 11.3283 2.36952 11.407C2.82811 11.4857 3.29981 11.4202 3.71967 11.2197L5.21967 9.71973" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        <path d="M9.71875 5.21967L11.2188 3.71967C11.4193 3.29981 11.4847 2.82811 11.406 2.36952C11.3273 1.91094 11.1084 1.48802 10.7794 1.15901C10.4504 0.830004 10.0275 0.611086 9.5689 0.532405C9.11031 0.453724 8.63861 0.51915 8.21875 0.719672L6.71875 2.21967" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Partnerships &amp; Alliances</span>
                                    <span class="thv2-mega-tile-desc">The technology partners we build and deliver with.</span>
                                </span>
                            </a>
                            <a class="thv2-mega-tile" href="/career">
                                <span class="thv2-mega-tile-icon">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
                                        <g clip-path="url(#clip0_8042_353)">
                                            <path d="M11.25 3.9375H2.25C1.62868 3.9375 1.125 4.44118 1.125 5.0625V10.6875C1.125 11.3088 1.62868 11.8125 2.25 11.8125H11.25C11.8713 11.8125 12.375 11.3088 12.375 10.6875V5.0625C12.375 4.44118 11.8713 3.9375 11.25 3.9375Z" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                            <path d="M9 11.8125V2.8125C9 2.51413 8.88147 2.22798 8.67049 2.017C8.45952 1.80603 8.17337 1.6875 7.875 1.6875H5.625C5.32663 1.6875 5.04048 1.80603 4.82951 2.017C4.61853 2.22798 4.5 2.51413 4.5 2.8125V11.8125" stroke="#BECADB" stroke-linecap="round" stroke-linejoin="round" />
                                        </g>
                                        <defs>
                                            <clipPath id="clip0_8042_353">
                                                <rect width="13.5" height="13.5" fill="white" />
                                            </clipPath>
                                        </defs>
                                    </svg>
                                </span>
                                <span class="thv2-mega-tile-body">
                                    <span class="thv2-mega-tile-title">Careers</span>
                                    <span class="thv2-mega-tile-desc">Open roles across engineering, delivery, and consulting.</span>
                                </span>
                            </a>
                        </div>
                        <div class="thv2-mega-divider"></div>
                        <div class="thv2-mega-featured">
                            <span class="thv2-mega-featured-chip">
                                <img src="https://assets.torryharris.com/assets/v2/header/Gartner.svg" alt="Gartner Logo" />
                            </span>
                            <div class="thv2-mega-featured-body">
                                <p class="thv2-mega-featured-label">Analyst recognition</p>
                                <p class="thv2-mega-featured-title">Torry Harris cited in 2025 Gartner Market Guide for CSP B2B Digital Marketplace Solutions</p>
                                <p class="thv2-mega-featured-desc">This mention reflects our commitment to B2B-centric marketplace capabilities for CSPs.</p>
                                <a class="thv2-mega-featured-cta" href="/analyst-speak/torry-harris-gartner-csp-b2b-digital-marketplace-2025">Read the announcement</a>
                            </div>
                        </div>
                    </div>
                </li>
            </ul>
        </div>

        <div class="thv2-actions">
            <a id="TopSearchN" class="thv2-search" href="javascript:void(0)" aria-label="Search">
                <svg width="14" height="14" viewBox="0 0 13.75 13.75" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                    <path d="M5.75 11C8.6495 11 11 8.6495 11 5.75C11 2.85051 8.6495 0.5 5.75 0.5C2.85051 0.5 0.5 2.85051 0.5 5.75C0.5 8.6495 2.85051 11 5.75 11Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                    <path d="M13.25 13.25L9.4139 9.60282" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                </svg>
            </a>
            <a class="thv2-cta" href="/about-us/contact-us">Contact Us</a>

            <div class="megeMenuMobile thv2-mobile-toggle" style="display:none;">
                <div class="hbMenu">
                    <div class="hbcon" id="togBtn" onclick="myhmFunction(this)">
                        <div class="bar1"></div>
                        <div class="bar2"></div>
                        <div class="bar3"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</nav>

<div class="overlayhm">
    <div class="container">
        <div class="row hbcnt hideMenuinMob">
            

<nav class="thv2-mobile-nav" aria-label="Mobile menu">

    <div class="thv2-mobile-item">
        <button type="button" class="thv2-mobile-trigger" onclick="thv2MobileToggle(this)">
            Strategy &amp; Solutions
            <span class="thv2-mobile-chevron">
                <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                    <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                </svg>
            </span>
        </button>
        <div class="thv2-mobile-panel">
            <div class="thv2-mobile-group">
                <a href="/business-leaders" class="thv2-mobile-group-label text-decoration-none">Business Leaders</a>
                <ul class="thv2-mobile-list">
                    <li><a href="/industries/telecom">Telecommunications</a></li>
                    <li><a href="/industries/banking-and-financial-services">Financial Services</a></li>
                    <li><a href="/industries/government">Government, Public Sector &amp; Economic Zones</a></li>
                </ul>
            </div>
            <div class="thv2-mobile-group">
                <a href="/technology-leaders" class="thv2-mobile-group-label text-decoration-none">Technology Leaders</a>
                <div class="thv2-mobile-subgroup">
                    <a class="thv2-mobile-subheading" href="/services/legacy-modernization-and-roi">Legacy modernization &amp; ROI</a>
                    <ul class="thv2-mobile-list">
                        <li><a href="/services/legacy-modernization">Legacy Application Modernization</a></li>
                        <li><a href="/services/microservices-consulting-architecture-creation">Microservice Architecture &amp; Creation</a></li>
                        <li><a href="/services/devops-services-delivery-automation-ci-cd">DevOps, CI/CD and Delivery Automation</a></li>
                        <li><a href="/services/legacy-to-cloud-migration">Legacy to cloud-native framework</a></li>
                        <li><a href="/services/telco-csp-transformation">Reinventing Telecom for the Digital Age</a></li>
                    </ul>
                </div>
                <div class="thv2-mobile-subgroup">
                    <a class="thv2-mobile-subheading" href="/services/integration-and-digital-platform-ecosystems">Integration &amp; Digital Platform Ecosystems</a>
                    <ul class="thv2-mobile-list">
                        <li><a href="/services/application-integration-and-orchestration">Application integration and orchestration</a></li>
                        <li><a href="/services/api-management-and-platform-enablement">API Management &amp; Platform Enablement</a></li>
                        <li><a href="/services/api-and-integration-governance">API Integration Governance</a></li>
                        <li><a href="/services/api-management">API and microservices factory model</a></li>
                        <li><a href="/services/api-management">API platform management</a></li>
                        <li><a href="/services/ipaas-implementation">iPaaS Implementation</a></li>
                        <li><a href="/services/digital-marketplace-implementation">Digital Marketplace Implementation</a></li>
                    </ul>
                </div>
                <div class="thv2-mobile-subgroup">
                    <a class="thv2-mobile-subheading" href="/services/data-intelligence-and-agentic-ai">Data, Intelligence &amp; Agentic AI</a>
                    <ul class="thv2-mobile-list">
                        <li><a href="/services/data-virtualization">Data Virtualization</a></li>
                        <li><a href="/services/ai-powered-data-management-solutions">AI-Powered Data Management Solutions</a></li>
                        <li><a href="/services/data-integration">Data Integration</a></li>
                        <li><a href="/services/agentic-ai">Agentic AI services</a></li>
                    </ul>
                </div>
                <div class="thv2-mobile-subgroup">
                    <a class="thv2-mobile-subheading" href="/services/managed-cloud-and-governance">Managed Cloud &amp; Governance</a>
                    <ul class="thv2-mobile-list">
                        <li><a href="/services/cloud-managed-services">Cloud Managed Services</a></li>
                        <li><a href="/services/unified-cloud-transformation">Unified cloud transformation</a></li>
                        <li><a href="/services/cloud-integration">Cloud Integration</a></li>
                        <li><a href="/services/cloud-migration">Cloud Migration</a></li>
                        <li><a href="/services/cloud-management-and-security">Cloud Management &amp; Security</a></li>
                    </ul>
                </div>
            </div>
        </div>
    </div>

    <div class="thv2-mobile-item">
        <button type="button" class="thv2-mobile-trigger" onclick="thv2MobileToggle(this)">
            Products &amp; Platforms
            <span class="thv2-mobile-chevron">
                <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                    <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                </svg>
            </span>
        </button>
        <div class="thv2-mobile-panel">
            <ul class="thv2-mobile-list thv2-mobile-list--tiles">
                <li>
                    <a href="https://www.torryharris.com/products/digital-ecosystem-platform/marketplace">
                        Digital Marketplace
                        <span class="thv2-mobile-tile-desc">AI-Powered B2B2X Marketplace Platform</span>
                    </a>
                </li>
                <li>
                    <a href="https://www.torryharris.com/products/api-management-platform/api-manager">
                        API Manager
                        <span class="thv2-mobile-tile-desc">Full lifecycle API management solution</span>
                    </a>
                </li>
            </ul>
        </div>
    </div>

    <div class="thv2-mobile-item">
        <button type="button" class="thv2-mobile-trigger" onclick="thv2MobileToggle(this)">
            How we Engage
            <span class="thv2-mobile-chevron">
                <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                    <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                </svg>
            </span>
        </button>
        <div class="thv2-mobile-panel">
            <div class="thv2-mobile-subgroup">
                <a class="thv2-mobile-subheading" href="/global-capability-center">Global Capability Center</a>
                <ul class="thv2-mobile-list">
                    <li><a href="/global-capability-center/conceptualization-build">Conceptualization and build</a></li>
                    <li><a href="/global-capability-center/operational-excellence">Operational excellence</a></li>
                    <li><a href="/global-capability-center/framework-for-excellence">AIM framework</a></li>
                    <li><a href="/global-capability-center/bot-build-operate-transfer">Build-operate-transfer (BOT)</a></li>
                    <li><a href="/global-capability-center/odc-offshore-development-center">Offshore development center (ODC)</a></li>
                    <li><a href="/global-capability-center/center-of-excellence">Center of Excellence (CoE)</a></li>
                </ul>
            </div>
            <ul class="thv2-mobile-list thv2-mobile-list--headings">
                <li><a href="/services/api-and-microservices-factory-model">API &amp; Microservices factory model</a></li>
                <li><a href="/services/ai-factory">AI Factory</a></li>
            </ul>
        </div>
    </div>

    <div class="thv2-mobile-item">
        <button type="button" class="thv2-mobile-trigger" onclick="thv2MobileToggle(this)">
            Insights
            <span class="thv2-mobile-chevron">
                <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                    <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                </svg>
            </span>
        </button>
        <div class="thv2-mobile-panel">
            <ul class="thv2-mobile-list thv2-mobile-list--tiles">
                <li><a href="/events">Events &amp; Webinars<span class="thv2-mobile-tile-desc">Live sessions and recordings from our practitioners.</span></a></li>
                <li><a href="/insights/case-study">Case Studies<span class="thv2-mobile-tile-desc">Real programs, real outcomes, real numbers.</span></a></li>
                <li><a href="/insights/articles-povs">Articles &amp; PoVs<span class="thv2-mobile-tile-desc">Point-of-view pieces on where the market is headed.</span></a></li>
                <li><a href="/insights/whitepapers">Whitepapers<span class="thv2-mobile-tile-desc">Opinion and analysis from our leadership team.</span></a></li>
                <li><a href="/analyst-speak">Analyst Speak<span class="thv2-mobile-tile-desc">Independent analyst coverage of our platforms.</span></a></li>
                <li><a href="/news">Newsroom<span class="thv2-mobile-tile-desc">Company announcements and press coverage.</span></a></li>
                <li><a href="/infographics">Infographics<span class="thv2-mobile-tile-desc">Complex ideas, distilled into a single visual.</span></a></li>
                <li><a href="/summary-decks">Summary Decks<span class="thv2-mobile-tile-desc">Downloadable overviews you can share internally.</span></a></li>
                <li><a href="/about-us/video-gallery">Video Gallery<span class="thv2-mobile-tile-desc">Product walkthroughs and customer conversations.</span></a></li>
                <li><a href="/knowledge-zone">Knowledge Zone<span class="thv2-mobile-tile-desc">The full library, searchable in one place.</span></a></li>
            </ul>
            <div class="thv2-mobile-featured">
                <p class="thv2-mobile-featured-label">Featured</p>
                <p class="thv2-mobile-featured-title">Ecosystem-led growth: partner-led storefronts as the new GTM engine</p>
                <p class="thv2-mobile-featured-desc">How partner-led storefronts are becoming the new go-to-market engine for the enterprise.</p>
                <a class="thv2-mobile-featured-cta" href="/insights/whitepapers/ecosystem-imperative-partner-led-storefronts">Read the whitepaper</a>
            </div>
        </div>
    </div>

    <div class="thv2-mobile-item">
        <button type="button" class="thv2-mobile-trigger" onclick="thv2MobileToggle(this)">
            About us
            <span class="thv2-mobile-chevron">
                <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                    <path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                </svg>
            </span>
        </button>
        <div class="thv2-mobile-panel">
            <ul class="thv2-mobile-list thv2-mobile-list--tiles">
                <li><a href="/about-us/corporate-overview">Corporate Overview<span class="thv2-mobile-tile-desc">Who we are and how we work.</span></a></li>
                <li><a href="/torry-harris-global-locations">Global Locations<span class="thv2-mobile-tile-desc">Delivery centers across every major region.</span></a></li>
                <li><a href="/about-us/awards-and-recognition">Awards and Recognition<span class="thv2-mobile-tile-desc">Independent recognition of our platforms and delivery.</span></a></li>
                <li><a href="/client-speak">Client Speak<span class="thv2-mobile-tile-desc">What our customers say about working with us.</span></a></li>
                <li><a href="/about-us/corporate-social-responsibility">Social Responsibility<span class="thv2-mobile-tile-desc">Our commitments beyond the balance sheet.</span></a></li>
                <li><a href="/about-us/our-partners">Partnerships &amp; Alliances<span class="thv2-mobile-tile-desc">The technology partners we build and deliver with.</span></a></li>
                <li><a href="/career">Careers<span class="thv2-mobile-tile-desc">Open roles across engineering, delivery, and consulting.</span></a></li>
            </ul>
            <div class="thv2-mobile-featured">
                <p class="thv2-mobile-featured-label">Analyst recognition</p>
                <p class="thv2-mobile-featured-title">Torry Harris cited in 2025 Gartner Market Guide for CSP B2B Digital Marketplace Solutions</p>
                <p class="thv2-mobile-featured-desc">This mention reflects our commitment to B2B-centric marketplace capabilities for CSPs.</p>
                <a class="thv2-mobile-featured-cta" href="/analyst-speak/torry-harris-gartner-csp-b2b-digital-marketplace-2025">Read the announcement</a>
            </div>
        </div>
    </div>

    <a class="thv2-mobile-cta" href="/about-us/contact-us">Contact Us</a>
</nav>

<script>
    // Single-open accordion for the V2 mobile menu - opening one item closes any other that was
    // open, mirroring thv2ToggleMenu's behavior for the desktop mega-menus.
    function thv2MobileToggle(trigger) {
        var item = trigger.closest(".thv2-mobile-item");
        if (!item) {
            return;
        }

        var wasOpen = item.classList.contains("open");

        document.querySelectorAll(".thv2-mobile-nav .thv2-mobile-item.open").forEach(function (openItem) {
            openItem.classList.remove("open");
        });

        if (!wasOpen) {
            item.classList.add("open");
        }
    }
</script>

        </div>
    </div>
</div>

<script>
    function myhmFunction(x) {
        x.classList.toggle("hbchange");
        $(".overlayhm").toggleClass("open");
    }

    // Opens/closes a V2 header dropdown on click (rather than hover). Clicking an already-open
    // item, clicking elsewhere on the page, or pressing Escape all close it again.
    function thv2ToggleMenu(evt, link) {
        evt.preventDefault();
        evt.stopPropagation();

        var item = link.closest(".thv2-nav-item");
        if (!item) {
            return;
        }

        var wasOpen = item.classList.contains("open");

        document.querySelectorAll("#thv2Menu .thv2-nav-item.open").forEach(function (openItem) {
            openItem.classList.remove("open");
        });

        if (!wasOpen) {
            item.classList.add("open");
            thv2PositionMenu(item);
        }
    }

    // "How we Engage" mega-menu: the right-hand list belongs to "Global Capability Center", not to
    // the other two tabs. Hovering "API & Microservices factory model" or "AI Factory" blanks that
    // list and drops the GCC tab's active/arrow styling; moving off both restores it, and the arrow
    // animates back in left-to-right via the transition on .thv2-mega-tab-arrow in megaMenustyle.css.
    function thv2EngageTabHover(group, hovering) {
        var menu = group.closest(".thv2-mega-menu");
        if (!menu) {
            return;
        }

        var gccTab = menu.querySelector(".thv2-mega-tab--active");
        var panel = menu.querySelector(".thv2-mega-subcol");

        if (gccTab) {
            gccTab.classList.toggle("thv2-mega-tab-inactive", hovering);
        }
        if (panel) {
            panel.classList.toggle("thv2-mega-subcol--blank", hovering);
        }
    }

    // A panel is left-anchored to its nav item by default (see .thv2-mega-menu in
    // megaMenustyle.css). Clamping to the viewport still lets a wide panel run out past the page's
    // own content edge on large screens, where the header's Bootstrap ".container" is narrower than
    // the viewport - so instead we clamp against that container's actual left/right edges. We
    // compute this every time a menu opens (and on resize): shift the panel left only as much as
    // needed to stay inside the container's right edge, and never past its own nav item's left edge
    // either. This never touches .thv2-mega-menu itself - it just sets an inline "left" on top of
    // that rule's default.
    function thv2PositionMenu(item) {
        var menu = item.querySelector(".thv2-mega-menu");
        if (!menu) {
            return;
        }

        menu.style.left = "";

        var container = item.closest(".container");
        var boundsRight = window.innerWidth;
        var boundsLeft = 0;
        if (container) {
            var containerRect = container.getBoundingClientRect();
            boundsLeft = containerRect.left;
            boundsRight = containerRect.right;
        }

        var itemRect = item.getBoundingClientRect();
        var menuWidth = menu.getBoundingClientRect().width;

        var overflowRight = (itemRect.left + menuWidth) - boundsRight;
        if (overflowRight > 0) {
            var shift = Math.min(overflowRight, Math.max(itemRect.left - boundsLeft, 0));
            if (shift > 0) {
                menu.style.left = (-shift) + "px";
            }
        }
    }

    window.addEventListener("resize", function () {
        var openItem = document.querySelector("#thv2Menu .thv2-nav-item.open");
        if (openItem) {
            thv2PositionMenu(openItem);
        }
    });

    document.addEventListener("click", function (evt) {
        if (!evt.target.closest("#thv2Menu")) {
            document.querySelectorAll("#thv2Menu .thv2-nav-item.open").forEach(function (openItem) {
                openItem.classList.remove("open");
            });
        }
    });

    document.addEventListener("keydown", function (evt) {
        if (evt.key === "Escape") {
            document.querySelectorAll("#thv2Menu .thv2-nav-item.open").forEach(function (openItem) {
                openItem.classList.remove("open");
            });
        }
    });
</script>

        <style>
    .sm-backdrop {
        position: fixed;
        inset: 0;
        background: rgba(0,0,0,.6);
        display: none;
        z-index: 9998;
    }

    .sm-searchbar input[type="search"] {
        outline: none;
        box-shadow: none
    }

        .sm-searchbar input[type="search"]::-webkit-search-decoration,
        .sm-searchbar input[type="search"]::-webkit-search-cancel-button,
        .sm-searchbar input[type="search"]::-webkit-search-results-button,
        .sm-searchbar input[type="search"]::-webkit-search-results-decoration {
            -webkit-appearance: none
        }

        .sm-searchbar input[type="search"]::-moz-search-clear {
            display: none
        }

    .sm-modal-top {
        display: flex;
        flex-direction: column;
        align-items: center;
        gap: 24px;
        padding: 12px 0 14px
    }

    .sm-modal {
        position: fixed;
        inset: 0;
        display: none;
        z-index: 9999;
        color: #fff;
        background: #000;
        overflow-y: auto;
        box-sizing: border-box;
        padding: 1rem 0 7rem
    }

    .sm-close {
        background: transparent;
        border: 1px solid #d964f0;
        color: #d964f0;
        width: 56px;
        height: 56px;
        border-radius: 50%;
        cursor: pointer;
        display: grid;
        place-items: center;
        flex: 0 0 56px;
        transition: background .15s ease
    }

        .sm-close svg {
            width: 24px;
            height: 24px
        }

        .sm-close:hover {
            background: rgba(217,100,240,.1)
        }

    .sm-searchbar {
        position: relative;
        width: 100%;
        display: flex;
        align-items: center;
        gap: 16px;
        padding: 20px 24px;
        border-radius: 8px;
        border: 1px solid rgba(255,255,255,.2);
        background: linear-gradient(104.8deg, #23005f 32.572%, #0f0028 103.46%)
    }

    .sm-search-icon {
        flex: 0 0 24px;
        width: 24px;
        height: 24px;
        display: grid;
        place-items: center;
        color: #5d7696
    }

        .sm-search-icon svg {
            width: 14px;
            height: 14px
        }

        .sm-searchbar input[type="search"] {
            width: 100%;
            padding: 0;
            border-radius: 0;
            border: none;
            background: transparent;
            color: #fff;
            font-family: 'Raleway-Regular', sans-serif;
            font-size: 16px;
            font-feature-settings: "lnum" 1,"pnum" 1;
            flex: 1 1 auto
        }

        .sm-searchbar input::placeholder {
            color: #5d7696
        }

    .sm-dd {
        position: absolute;
        left: 0;
        right: 0;
        top: calc(100% + 24px);
        background: linear-gradient(95deg, #23005f 32.572%, #0f0028 103.46%);
        border: 1px solid rgba(255,255,255,.2);
        border-radius: 8px;
        display: none;
        max-height: 40vh;
        overflow: auto;
        z-index: 10000;
        padding: 24px
    }

        .sm-dd ul {
            list-style: none;
            margin: 0;
            padding: 0;
            display: flex;
            flex-direction: column;
            gap: 16px
        }

        .sm-dd a {
            display: grid;
            grid-template-columns: 1fr auto;
            align-items: center;
            gap: 16px;
            text-decoration: none;
            color: #fff;
            padding: 4px 6px;
            border-radius: 6px;
            white-space: normal;
            word-break: break-word;
            font-family: 'Raleway-Regular', sans-serif;
            font-size: 16px;
            font-feature-settings: "lnum" 1,"pnum" 1;
        }

            .sm-dd a:hover, .sm-dd li[aria-selected="true"] a {
                background: rgba(255,255,255,.08)
            }

    .sm-pill {
        font-family: 'Raleway-Regular', sans-serif;
        font-size: 12px;
        padding: 8px 16px;
        border-radius: 16px;
        background: transparent;
        border: 1px solid #3c587d;
        color: #8aa0bd;
        white-space: nowrap;
        align-self: center;
        font-feature-settings: "lnum" 1,"pnum" 1
    }

    .sm-hl {
        color: #d964f0;
        font-weight: 700
    }

    .sm-cats {
        display: none;
        align-items: flex-start;
        gap: 16px;
        padding: 0 0 24px;
        flex-wrap: wrap
    }

    .sm-cats-track {
        display: flex;
        align-items: center;
        flex-wrap: wrap;
        gap: 16px;
        flex: 1 1 auto;
        min-width: 0
    }

    .sm-chip {
        position: relative;
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 16px 24px;
        border-radius: 24px;
        border: 1px solid #3c587d;
        color: #fff;
        background: transparent;
        cursor: pointer;
        font-family: 'Raleway-Medium', sans-serif;
        font-size: 14px;
        font-weight: 500;
        font-feature-settings: "lnum" 1,"pnum" 1;
        white-space: nowrap;
        flex: 0 0 auto;
        transition: background .18s ease, border-color .18s ease
    }

        .sm-chip:hover {
            border-color: #5d7696
        }

        .sm-chip.sm-active {
            background: #3c587d;
            border-color: #3c587d;
            color: #fff
        }

        .sm-chip .sm-x {
            display: none;
            align-items: center;
            justify-content: center;
            width: 16px;
            height: 16px;
            flex: 0 0 16px;
            cursor: pointer;
            pointer-events: auto
        }

            .sm-chip .sm-x svg {
                width: 16px;
                height: 16px
            }

        .sm-chip.sm-active .sm-x {
            display: inline-flex
        }

    .sm-results {
        padding: 18px 0 10px
    }

    .sm-hit {
        display: flex;
        flex-direction: column;
        gap: 16px;
        padding: 24px;
        border: 1px solid rgba(255,255,255,.2);
        border-radius: 8px;
        background: linear-gradient(97deg, #23005f 32.572%, #0f0028 103.46%);
        text-decoration: none;
        color: #fff;
        transition: border-color .15s ease
    }

        .sm-hit + .sm-hit {
            margin-top: 16px
        }

        .sm-hit:hover {
            border-color: rgba(255,255,255,.4)
        }

    .sm-hit-kicker {
        display: block;
        color: #d964f0;
        font-family: 'Raleway-SemiBold', sans-serif;
        font-size: 12px;
        font-weight: 600;
        text-transform: uppercase;
        letter-spacing: .2px;
        font-feature-settings: "lnum" 1,"pnum" 1
    }

    .sm-hit-title {
        font-family: 'Raleway-Regular', sans-serif;
        font-size: 20px;
        font-weight: 400;
        display: block;
        white-space: normal;
        word-break: break-word;
        color: #fff;
        font-feature-settings: "lnum" 1,"pnum" 1
    }

    .sm-hit-desc {
        font-family: 'Raleway-Regular', sans-serif;
        font-size: 14px;
        line-height: 23px;
        color: #becadb;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
        line-clamp: 2;
        overflow: hidden;
        font-feature-settings: "lnum" 1,"pnum" 1
    }

    .sm-hit-meta {
        margin-top: 10px;
        font-size: 13px;
        color: #c9c9c9;
        display: flex;
        gap: 14px;
        align-items: center;
        flex-wrap: wrap
    }

    .sm-divider {
        opacity: .45
    }

    .sm-pager {
        display: none;
        border-top: 1px solid rgba(119, 100, 255, 0.50);
        padding: 24px 0 0;
        margin-top: 24px
    }

    .sm-pager-inner {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 16px;
        flex-wrap: wrap
    }

    .sm-left, .sm-right {
        display: flex;
        align-items: center;
        gap: 16px;
        flex-wrap: wrap
    }

    .sm-label, .sm-count {
        color: #8aa0bd;
        font-family: 'Raleway-Medium', sans-serif;
        font-size: 16px;
        font-weight: 500;
        font-feature-settings: "lnum" 1,"pnum" 1
    }

    .sm-select-wrap {
        position: relative;
        display: inline-flex;
        align-items: center
    }

        .sm-select-wrap > svg {
            position: absolute;
            right: 12px;
            top: 50%;
            transform: translateY(-50%);
            width: 20px;
            height: 20px;
            color: #5d7696;
            pointer-events: none
        }

    .sm-select, .sm-page-select {
        background: #1c232c;
        color: #fff;
        border: none;
        border-radius: 8px;
        padding: 16px 40px 16px 16px;
        font-family: 'Raleway-Medium', sans-serif;
        font-size: 16px;
        font-weight: 500;
        font-feature-settings: "lnum" 1,"pnum" 1;
        text-align: left;
        appearance: none;
        -webkit-appearance: none;
        -moz-appearance: none;
        cursor: pointer
    }

    .sm-sort-wrap {
        position: relative
    }

    .sm-sort-menu {
        position: absolute;
        left: 0;
        top: calc(100% + 8px);
        min-width: 100%;
        z-index: 10001;
        margin: 0;
        padding: 16px;
        list-style: none;
        display: flex;
        flex-direction: column;
        gap: 16px;
        background: #1c232c;
        border: 1px solid #5d7696;
        border-radius: 8px
    }

        .sm-sort-menu[hidden] {
            display: none
        }

        .sm-sort-menu li {
            display: flex;
            align-items: center;
            justify-content: space-between;
            gap: 16px;
            font-family: 'Raleway-Medium', sans-serif;
            font-size: 16px;
            font-weight: 500;
            font-feature-settings: "lnum" 1,"pnum" 1;
            color: #8aa0bd;
            cursor: pointer;
            white-space: nowrap;
            outline: none
        }

            .sm-sort-menu li[aria-selected="true"] {
                color: #fff
            }

            .sm-sort-menu li:hover, .sm-sort-menu li:focus-visible {
                color: #fff
            }

        .sm-sort-check {
            display: none;
            width: 24px;
            height: 24px;
            flex: 0 0 24px;
            color: #5d7696
        }

            .sm-sort-menu li[aria-selected="true"] .sm-sort-check {
                display: inline-flex
            }

    .sm-icon-btn {
        width: 24px;
        height: 24px;
        display: grid;
        place-items: center;
        background: transparent;
        border: none;
        padding: 0;
        color: #fff;
        cursor: pointer
    }

        .sm-icon-btn svg {
            width: 24px;
            height: 24px
        }

        .sm-icon-btn[disabled] {
            opacity: .35;
            cursor: not-allowed
        }

    #sm-modal .sm-dd a, #sm-modal .sm-hit {
        white-space: normal !important;
        overflow: visible !important;
        text-overflow: clip !important
    }

    #sm-modal .sm-txt, #sm-modal .sm-hit-title {
        white-space: normal !important;
        overflow: visible !important;
        text-overflow: clip !important;
        word-break: break-word;
        overflow-wrap: anywhere
    }

    @media (max-width:560px) {
        .sm-hit-title {
            font-size: 18px
        }

        .sm-hit-desc {
            font-size: 13px
        }

        .sm-results {
            padding: 12px 0
        }

        .sm-pager {
            padding: 16px 0 0
        }

        .sm-cats {
            gap: 16px;
            padding: 0 0 16px
        }

        .sm-sort {
            padding: 10px 12px;
            font-size: 14px
        }

        .sm-chip {
            padding: 10px 16px;
            font-size: 13px
        }

        .sm-hit {
            padding: 16px
        }

        .sm-close {
            width: 44px;
            height: 44px;
            flex: 0 0 44px
        }

            .sm-close svg {
                width: 18px;
                height: 18px
            }

        .sm-searchbar {
            padding: 14px 16px
        }

        .sm-dd {
            padding: 16px;
            top: calc(100% + 16px)
        }

        .sm-pill {
            font-size: 11px;
            padding: 6px 12px
        }
    }
</style>

<div id="sm-backdrop" class="sm-backdrop"></div>
<div id="sm-modal" class="sm-modal" role="dialog" aria-modal="true">
  <div class="container">
    <div class="row">
      <div class="col-12">
    <div class="sm-modal-top">
        <button id="sm-close" class="sm-close" type="button" aria-label="Close">
            <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                <path d="M18 6L6 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
                <path d="M6 6L18 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
            </svg>
        </button>
        <div class="sm-searchbar">
            <span class="sm-search-icon" aria-hidden="true">
                <svg viewBox="0 0 13.75 13.75" fill="none" xmlns="http://www.w3.org/2000/svg">
                    <path d="M5.75 11C8.6495 11 11 8.6495 11 5.75C11 2.85051 8.6495 0.5 5.75 0.5C2.85051 0.5 0.5 2.85051 0.5 5.75C0.5 8.6495 2.85051 11 5.75 11Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                    <path d="M13.25 13.25L9.4139 9.60282" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                </svg>
            </span>
            <input id="sm-q" type="search" placeholder="What are you looking for?" autocomplete="off"
                   role="combobox" aria-autocomplete="list" aria-haspopup="listbox" aria-expanded="false" aria-controls="sm-suggestions" />
            <div id="sm-dd" class="sm-dd"><ul id="sm-suggestions" role="listbox"></ul></div>
        </div>
    </div>

    <div id="sm-cats" class="sm-cats">
        <div class="sm-select-wrap sm-sort-wrap">
            <button id="sm-sort" class="sm-select" type="button" aria-haspopup="listbox" aria-expanded="false" aria-controls="sm-sort-menu">
                <span id="sm-sort-label">Most recent</span>
            </button>
            <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                <path d="M6 9L12 15L18 9" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
            </svg>
            <ul id="sm-sort-menu" class="sm-sort-menu" role="listbox" aria-label="Sort results" hidden>
                <li role="option" data-value="newest" aria-selected="true" tabindex="-1">
                    <span>Most recent</span>
                    <svg class="sm-sort-check" viewBox="0 0 24 24" fill="none" aria-hidden="true">
                        <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                    </svg>
                </li>
                <li role="option" data-value="oldest" aria-selected="false" tabindex="-1">
                    <span>Oldest first</span>
                    <svg class="sm-sort-check" viewBox="0 0 24 24" fill="none" aria-hidden="true">
                        <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                    </svg>
                </li>
            </ul>
        </div>
        <div id="sm-cats-track" class="sm-cats-track"></div>
    </div>

    <div class="sm-results">
        <div id="sm-results" class="sm-list" style="display:none"></div>
        <div id="sm-empty" class="sm-empty" hidden>Start typing to search.</div>
    </div>

    <div class="sm-pager" id="sm-pager">
        <div class="sm-pager-inner">
            <div class="sm-left">
                <span class="sm-label">Showing</span>
                <div class="sm-select-wrap">
                    <select id="sm-pageSize" class="sm-select">
                        <option value="10" selected>10</option>
                        <option value="20">20</option>
                        <option value="50">50</option>
                    </select>
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                        <path d="M6 9L12 15L18 9" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                    </svg>
                </div>
                <span class="sm-count">of <span id="sm-total">0</span> results</span>
            </div>
            <div class="sm-right">
                <button id="sm-prev" class="sm-icon-btn" type="button" aria-label="Previous page">
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                        <path d="M19 12H5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                        <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                    </svg>
                </button>
                <div class="sm-select-wrap">
                    <select id="sm-pageSelect" class="sm-page-select" aria-label="Page range"></select>
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                        <path d="M6 9L12 15L18 9" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                    </svg>
                </div>
                <button id="sm-next" class="sm-icon-btn" type="button" aria-label="Next page">
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" style="transform:rotate(180deg)">
                        <path d="M19 12H5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                        <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
                    </svg>
                </button>
            </div>
        </div>
    </div>
      </div>
    </div>
  </div>
</div>

<template id="sm-row">
    <li>
        <a target="_blank" rel="noopener noreferrer">
            <span class="sm-txt"></span>
            <span class="sm-pill sm-cat"></span>
        </a>
    </li>
</template>

<template id="sm-hit">
    <a class="sm-hit" target="_blank" rel="noopener noreferrer">
        <div class="sm-hit-kicker"></div>
        <div class="sm-hit-title"></div>
        <div class="sm-hit-desc"></div>
    </a>
</template>
<script>
    (function () {
      // ===== API =====
      const API_BASE = '/api/websiteSearch'; // or routing for the controller '/api/website-search' if proxied

      // ===== URL helper =====
      const BASE = 'https://www.torryharris.com/';
      const withBase = (url) => {
        if (!url) return '#';
        if (/^https?:\/\//i.test(url)) return url;
        const noLeading = String(url).trim().replace(/^\/+/, '');
        const m = noLeading.match(/^([^?#]*)([?#].*)?$/u);
        return BASE + encodeURI(m?.[1] ?? '') + (m?.[2] ?? '');
      };

      // ===== DOM =====
      const opener   = document.getElementById('TopSearchN');
      const modal    = document.getElementById('sm-modal');
      const backdrop = document.getElementById('sm-backdrop');
      const closer   = document.getElementById('sm-close');
      const q        = document.getElementById('sm-q');
      const dd       = document.getElementById('sm-dd');
      const sugList  = document.getElementById('sm-suggestions');
      const rowTpl   = document.getElementById('sm-row');
      const hitTpl   = document.getElementById('sm-hit');
      const catsBox   = document.getElementById('sm-cats');
      const catsTrack = document.getElementById('sm-cats-track');
      const sortTrigger  = document.getElementById('sm-sort');
      const sortLabel    = document.getElementById('sm-sort-label');
      const sortMenu     = document.getElementById('sm-sort-menu');
      const results  = document.getElementById('sm-results');
      const empty    = document.getElementById('sm-empty');
      const pager      = document.getElementById('sm-pager');
      const pageSizeEl = document.getElementById('sm-pageSize');
      const pageSel    = document.getElementById('sm-pageSelect');
      const totalEl    = document.getElementById('sm-total');
      const prevBtn    = document.getElementById('sm-prev');
      const nextBtn    = document.getElementById('sm-next');

      // ===== State machine =====
      // modes: 'idle' | 'typing' | 'results'
      let mode = 'idle';
      let SELECTED_CATS = new Set();
      let lastResults = [];
      let lastQueryTerm = '';
      let SORT = 'newest'; // 'newest' | 'oldest' — matches the sort <select>'s default
      let PAGE_SIZE = 10;
      let currentPage = 1, totalPages = 1;

      // request tokens to ignore stale responses
      let autoReqId = 0;
      let resultsReqId = 0;

      // abort controllers for in-flight requests
      let autoAbort = null;
      let resultsAbort = null;

      // keyboard-highlighted suggestion index (-1 = none)
      let activeIndex = -1;

      // body scroll lock while the modal is open
      let savedBodyOverflow = '';

      // ===== Utils =====
      const norm = (s) => (s ?? '').toString().toLowerCase();
      const escapeHtml = s => (s || '').replace(/[&<>"']/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[m]));
      const escapeReg = s => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
      function hideDropdown() {
        dd.style.display = 'none';
        sugList.textContent = '';
        activeIndex = -1;
        q.setAttribute('aria-expanded', 'false');
        q.removeAttribute('aria-activedescendant');
      }
      function hideBelow() { catsBox.style.display = 'none'; results.style.display = 'none'; pager.style.display = 'none'; empty.hidden = true; closeSortMenu(); }

      // ----- Custom sort listbox (button + popover, since the design's open
      // state — checkmark, bordered panel — isn't something a native <select>
      // popup can render) -----
      function openSortMenu() {
        sortMenu.hidden = false;
        sortTrigger.setAttribute('aria-expanded', 'true');
        (sortMenu.querySelector('li[aria-selected="true"]') || sortMenu.querySelector('li'))?.focus();
      }
      function closeSortMenu() {
        sortMenu.hidden = true;
        sortTrigger.setAttribute('aria-expanded', 'false');
      }
      function selectSort(value) {
        const changed = value !== SORT;
        SORT = value;
        sortMenu.querySelectorAll('li').forEach(li => li.setAttribute('aria-selected', li.dataset.value === value ? 'true' : 'false'));
        sortLabel.textContent = value === 'oldest' ? 'Oldest first' : 'Most recent';
        closeSortMenu();
        sortTrigger.focus();
        // Sorting happens server-side, so a real change re-runs the last search
        // term with the new sort value; filters stay as-is, only the page resets.
        if (changed && mode === 'results' && lastQueryTerm) {
          fetchAndRenderResults(lastQueryTerm, { resetFilters: false });
        }
      }

      sortTrigger.addEventListener('click', () => { sortMenu.hidden ? openSortMenu() : closeSortMenu(); });
      sortTrigger.addEventListener('keydown', (e) => {
        if (e.key === 'ArrowDown' && sortMenu.hidden) {
          e.preventDefault();
          openSortMenu();
        } else if (e.key === 'Escape' && !sortMenu.hidden) {
          // Let this Escape just close the menu, not bubble up and close the
          // whole search overlay too.
          e.stopPropagation();
          closeSortMenu();
        }
      });
      sortMenu.addEventListener('click', (e) => {
        const li = e.target.closest('li'); if (!li) return;
        selectSort(li.dataset.value);
      });
      sortMenu.addEventListener('keydown', (e) => {
        const items = Array.from(sortMenu.querySelectorAll('li'));
        const idx = items.indexOf(document.activeElement);
        if (e.key === 'ArrowDown') {
          e.preventDefault();
          items[(idx + 1 + items.length) % items.length]?.focus();
        } else if (e.key === 'ArrowUp') {
          e.preventDefault();
          items[(idx - 1 + items.length) % items.length]?.focus();
        } else if (e.key === 'Enter' || e.key === ' ') {
          e.preventDefault();
          if (document.activeElement?.dataset.value) selectSort(document.activeElement.dataset.value);
        } else if (e.key === 'Escape') {
          e.preventDefault();
          e.stopPropagation();
          closeSortMenu();
          sortTrigger.focus();
        } else if (e.key === 'Tab') {
          closeSortMenu();
        }
      });
      document.addEventListener('click', (e) => {
        if (!sortMenu.hidden && !e.target.closest('.sm-sort-wrap')) closeSortMenu();
      });

      // ----- Suggestion keyboard navigation (drives the already-existing
      // li[aria-selected="true"] highlight style) -----
      function setActiveSuggestion(idx) {
        const items = sugList.querySelectorAll('li');
        if (!items.length) return;
        if (idx < 0) idx = 0;
        if (idx > items.length - 1) idx = items.length - 1;
        items.forEach(li => li.removeAttribute('aria-selected'));
        items[idx].setAttribute('aria-selected', 'true');
        items[idx].scrollIntoView({ block: 'nearest' });
        activeIndex = idx;
        q.setAttribute('aria-activedescendant', items[idx].id);
      }
      function clearActiveSuggestion() {
        sugList.querySelectorAll('li[aria-selected]').forEach(li => li.removeAttribute('aria-selected'));
        activeIndex = -1;
        q.removeAttribute('aria-activedescendant');
      }
      // Moving the mouse should hand highlighting back to :hover so a
      // keyboard-selected row and a mouse-hovered row don't both light up.
      sugList.addEventListener('mousemove', () => { if (activeIndex !== -1) clearActiveSuggestion(); });

      function setMode(newMode) {
        mode = newMode;
        if (mode === 'typing') {
          hideBelow(); // only dropdown while typing
        } else if (mode === 'results' || mode === 'idle') {
          hideDropdown(); // dropdown must not show in results/idle
        }
      }

      const highlightTitle = (it, term) => {
        const title = it.pageName || it.metaTitle || it.pageAlias || 'Untitled';
        if (!term) return escapeHtml(title);
        const parts = term.trim().split(/\s+/).filter(Boolean);
        if (!parts.length) return escapeHtml(title);
        const rx = new RegExp('(' + parts.map(escapeReg).join('|') + ')', 'giu');
        return escapeHtml(title).replace(rx, '<span class="sm-hl">$1</span>');
      };

      // ===== API =====
      async function fetchSearch(term, signal, sort) {
        let url = `${API_BASE}?searchword=${encodeURIComponent(term)}`;
        if (sort) url += `&sort=${encodeURIComponent(sort)}`;
        const res = await fetch(url, { mode: 'cors', signal });
        if (!res.ok) throw new Error('HTTP ' + res.status);
        const json = await res.json();
        const r = json?.result ?? {};
        const items = (Array.isArray(r.searches) ? r.searches : [])
          .map(x => ({
            pageName:     x.pageName ?? '',
            metaTitle:    x.metaTitle ?? '',
            metaDesc:     x.metaDesc ?? '',
            pageAlias:    x.pageAlias ?? '',
            categoryName: x.categoryName ?? ''
          }))
          .filter(it => it.pageAlias);
        return items;
      }

      // ===== Filtering =====
      const inSelectedCats = (it) => SELECTED_CATS.size === 0 || SELECTED_CATS.has(norm(it.categoryName));
      const filterByCats = (arr) => arr.filter(inSelectedCats);

      // ===== Categories =====
      const CHIP_X_ICON = '<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M12 4L4 12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M4 4L12 12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/></svg>';

      function makeChip(label, { all = false, key = '', active = false } = {}) {
        const b = document.createElement('button');
        b.type = 'button';
        b.className = 'sm-chip' + (active ? ' sm-active' : '');
        b.setAttribute('aria-pressed', active ? 'true' : 'false');
        if (all) b.dataset.all = '1'; else b.dataset.key = key;
        const span = document.createElement('span'); span.textContent = label;
        b.appendChild(span);
        const x = document.createElement('span'); x.className = 'sm-x'; x.innerHTML = CHIP_X_ICON;
        b.appendChild(x);
        return b;
      }

      function buildCatsFromResultsFull(list){
        const counts = list.reduce((acc, it) => {
          const name = (it.categoryName || '').trim();
          if (!name) return acc;
          acc[name] = (acc[name] || 0) + 1;
          return acc;
        }, {});
        catsTrack.innerHTML = '';

        catsTrack.appendChild(makeChip(`All (${list.length})`, { all: true, active: SELECTED_CATS.size === 0 }));

        Object.keys(counts).sort().forEach(name => {
          const key = norm(name);
          catsTrack.appendChild(makeChip(`${name} (${counts[name]})`, { key, active: SELECTED_CATS.has(key) }));
        });

        catsBox.style.display = list.length ? 'flex' : 'none';
      }

      catsTrack.addEventListener('click', (e) => {
        const chip = e.target.closest('.sm-chip'); if (!chip) return;
        if (chip.dataset.all) {
          SELECTED_CATS.clear();
        } else if (chip.dataset.key) {
          const k = chip.dataset.key;
          if (SELECTED_CATS.has(k)) SELECTED_CATS.delete(k); else SELECTED_CATS.add(k);
        }
        buildCatsFromResultsFull(lastResults);
        currentPage = 1;
        renderPage();
      });

      // ===== Renderers =====
      function renderDropdown(items) {
        // Show dropdown ONLY in typing mode and for the latest autocomplete request
        if (mode !== 'typing') { hideDropdown(); return; }
        sugList.innerHTML = '';
        activeIndex = -1;
        if (!items.length) { hideDropdown(); return; }
        const term = q.value.trim();
        const frag = document.createDocumentFragment();
        items.slice(0, 12).forEach((it, i) => {
          const li = rowTpl.content.firstElementChild.cloneNode(true);
          li.id = `sm-opt-${i}`;
          li.setAttribute('role', 'option');
          const a  = li.querySelector('a');
          a.href   = withBase(it.pageAlias);
          a.title  = it.metaTitle || '';
          li.querySelector('.sm-txt').innerHTML = highlightTitle(it, term);
          const catEl = li.querySelector('.sm-pill.sm-cat');
          if (catEl) { catEl.textContent = it.categoryName || '—'; catEl.style.display = 'inline-block'; }
          frag.appendChild(li);
        });
        sugList.appendChild(frag);
        dd.style.display = 'block';
        q.setAttribute('aria-expanded', 'true');
      }

      function renderResults(items) {
        results.innerHTML = '';
        if (!items.length) {
          results.style.display = 'none';
          pager.style.display = 'none';
          empty.hidden = false;
          return;
        }
        empty.hidden = true;
        results.style.display = 'block';
        const term = q.value.trim();
        const frag = document.createDocumentFragment();
        items.forEach(it => {
          const el = hitTpl.content.firstElementChild.cloneNode(true);
          el.href = withBase(it.pageAlias);
          el.querySelector('.sm-hit-kicker').textContent = (it.categoryName || '').toUpperCase() || '—';
          el.querySelector('.sm-hit-title').innerHTML = highlightTitle(it, term);
          el.querySelector('.sm-hit-desc').textContent = (it.metaDesc || it.metaTitle || '').trim();
          frag.appendChild(el);
        });
        results.appendChild(frag);
      }

      // ===== Pagination =====
      const paginate = (arr, page, size) => arr.slice((page - 1) * size, (page - 1) * size + size);
      const computeTotalPages = (total, size) => Math.max(1, Math.ceil(total / size));
      const pad2 = (n) => String(n).padStart(2, '0');

      function renderPagination(total) {
        totalEl.textContent = String(total);
        totalPages = computeTotalPages(total, PAGE_SIZE);
        pageSel.innerHTML = '';
        for (let i = 1; i <= totalPages; i++) {
          const s = ((i - 1) * PAGE_SIZE) + 1;
          const e = Math.min(s + PAGE_SIZE - 1, total);
          const o = document.createElement('option');
          o.value = String(i);
          o.textContent = total ? `${pad2(s)} - ${pad2(e)}` : '00 - 00';
          if (i === currentPage) o.selected = true;
          pageSel.appendChild(o);
        }
        prevBtn.disabled = currentPage <= 1;
        nextBtn.disabled = currentPage >= totalPages;
        pager.style.display = total > 0 ? 'block' : 'none';
      }

      function renderPage() {
        const filtered = filterByCats(lastResults);
        const total = filtered.length;
        const max = computeTotalPages(total, PAGE_SIZE);
        if (currentPage > max) currentPage = max;
        if (currentPage < 1)  currentPage = 1;
        renderResults(paginate(filtered, currentPage, PAGE_SIZE));
        renderPagination(total);
      }

      // ===== Debounce with cancel =====
      function makeDebounced(fn, ms = 150) {
        let t = null;
        const wrapped = (...a) => {
          if (t) clearTimeout(t);
          t = setTimeout(() => { t = null; fn(...a); }, ms);
        };
        wrapped.cancel = () => { if (t) { clearTimeout(t); t = null; } };
        return wrapped;
      }

      // ===== Typing (autocomplete) =====
      const runSearch = makeDebounced(async () => {
        if (mode !== 'typing') return;
        const term = q.value.trim();
        if (!term) {
          // Invalidate any in-flight request so its (now stale) response can't
          // repopulate the dropdown after the word was cleared.
          if (autoAbort) autoAbort.abort();
          autoReqId++;
          hideDropdown();
          hideBelow();
          return;
        }

        // cancel previous autocomplete request if any
        if (autoAbort) autoAbort.abort();
        autoAbort = new AbortController();
        const myId = ++autoReqId;

        try {
          const items = await fetchSearch(term, autoAbort.signal);
          if (mode !== 'typing' || myId !== autoReqId) return; // stale -> ignore
          renderDropdown(items);
        } catch (e) {
          // A cancelled/aborted OLDER request's rejection can land after a NEWER
          // request has already rendered fresh suggestions. Only hide the dropdown
          // if this failure belongs to the still-current request; otherwise the
          // cancellation of a stale request would wipe out valid, newer suggestions.
          if (mode !== 'typing' || myId !== autoReqId) return; // stale -> ignore
          hideDropdown();
        }
      }, 140);

      q.addEventListener('input', () => {
        setMode('typing');   // switch to typing mode on any input
        runSearch();
      });

      // Shared by "Enter" (new search) and changing the sort order (re-fetch of
      // the same term, since sorting happens server-side).
      async function fetchAndRenderResults(term, { resetFilters } = {}) {
        setMode('results');
        // kill any pending autocomplete
        runSearch.cancel();
        if (autoAbort) autoAbort.abort();

        // cancel previous results request if any
        if (resultsAbort) resultsAbort.abort();
        resultsAbort = new AbortController();
        const myId = ++resultsReqId;

        try {
          const items = await fetchSearch(term, resultsAbort.signal, SORT);
          if (mode !== 'results' || myId !== resultsReqId) return; // stale -> ignore
          lastResults = items;
          lastQueryTerm = term;
          if (resetFilters) SELECTED_CATS.clear(); // default to All on new search
          buildCatsFromResultsFull(lastResults);
          currentPage = 1;
          renderPage();
        } catch (e) {
          // Ignore AbortError; show empty state
          if (mode !== 'results' || myId !== resultsReqId) return;
          lastResults = [];
          lastQueryTerm = term;
          if (resetFilters) SELECTED_CATS.clear();
          buildCatsFromResultsFull(lastResults);
          renderPage();
        }
      }

      // ===== Enter => full results (exclusive) =====
      async function showResults() {
        const term = q.value.trim();
        if (!term) {
          setMode('idle');
          hideBelow();
          empty.hidden = false;
          return;
        }
        await fetchAndRenderResults(term, { resetFilters: true });
      }

      q.addEventListener('keydown', (e) => {
        const suggestionsOpen = mode === 'typing' && dd.style.display === 'block';

        if (e.key === 'ArrowDown') {
          if (!suggestionsOpen) return;
          e.preventDefault();
          setActiveSuggestion(activeIndex + 1);
        } else if (e.key === 'ArrowUp') {
          if (!suggestionsOpen) return;
          e.preventDefault();
          setActiveSuggestion(activeIndex - 1);
        } else if (e.key === 'Enter') {
          if (suggestionsOpen && activeIndex >= 0) {
            // A suggestion is keyboard-highlighted — open it, same as clicking it,
            // instead of jumping to the full results page.
            e.preventDefault();
            const link = sugList.querySelectorAll('li a')[activeIndex];
            if (link) link.click();
            return;
          }
          e.preventDefault();
          showResults();
        } else if (e.key === 'Escape') {
          const hasSomethingToClear = suggestionsOpen || !!q.value;
          if (hasSomethingToClear) {
            // First Escape: clear the in-progress search (dropdown/typed text).
            setMode('idle');
            runSearch.cancel();
            if (autoAbort) autoAbort.abort();
            hideDropdown();
            hideBelow();
          } else {
            // Nothing left to clear — a second Escape closes the whole overlay.
            e.preventDefault();
            close();
          }
        }
      });

      // Escape should close the overlay from anywhere inside it (chips, pager,
      // close button, etc.), not only while the search input is focused.
      modal.addEventListener('keydown', (e) => {
        if (e.key === 'Escape' && e.target !== q) {
          e.preventDefault();
          close();
        }
      });

      // Keep Tab/Shift+Tab cycling inside the modal while it's open, matching
      // the aria-modal="true" contract already declared on it.
      modal.addEventListener('keydown', (e) => {
        if (e.key !== 'Tab') return;
        const focusable = Array.from(
          modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')
        ).filter(el => !el.disabled && el.offsetParent !== null);
        if (!focusable.length) return;
        const first = focusable[0];
        const last  = focusable[focusable.length - 1];
        if (e.shiftKey && document.activeElement === first) {
          e.preventDefault(); last.focus();
        } else if (!e.shiftKey && document.activeElement === last) {
          e.preventDefault(); first.focus();
        }
      });

      // ===== Pager events =====
      pageSizeEl.addEventListener('change', () => { PAGE_SIZE = parseInt(pageSizeEl.value, 10) || 10; currentPage = 1; renderPage(); });
      pageSel.addEventListener('change',  () => { currentPage = parseInt(pageSel.value, 10) || 1; renderPage(); });
      prevBtn.addEventListener('click',   () => { if (currentPage > 1) { currentPage--; renderPage(); } });
      nextBtn.addEventListener('click',   () => { if (currentPage < totalPages) { currentPage++; renderPage(); } });

      // ===== Modal open/close =====
      function open() {
        backdrop.style.display = 'block';
        modal.style.display = 'block';
        // Lock background scroll while the overlay is open.
        savedBodyOverflow = document.body.style.overflow;
        document.body.style.overflow = 'hidden';
        setMode('idle');
        hideDropdown();
        hideBelow();
        setTimeout(() => q.focus(), 0);
      }
      function close() {
        backdrop.style.display = 'none';
        modal.style.display = 'none';
        document.body.style.overflow = savedBodyOverflow;
        setMode('idle');
        runSearch.cancel();
        if (autoAbort) autoAbort.abort();
        if (resultsAbort) resultsAbort.abort();
        hideDropdown();
        // Return focus to whatever opened the search, so keyboard users aren't
        // left with focus stranded on a now-hidden control.
        opener?.focus();
      }
      opener?.addEventListener('click', open);
      closer.addEventListener('click', close);
      backdrop.addEventListener('click', close);
    })();
</script>




    </header>
    <main b-purfj6pd51 role="main">
        
<!--Place for the BreadCrumb-->
<div id="this_newbr">
    <div aria-label="breadcrumbs" role="navigation" class="inner_page_this_brad">
        <ul itemscope="" itemtype="https://schema.org/BreadcrumbList" class="breadcrumb">
            <li itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem">
                <a itemprop="item" href="/" class="pathway"><span itemprop="name">Home</span></a>

                <span class="divider">
                    <img src="/images/arrow.png" alt="">
                </span>
                <meta itemprop="position" content="1">
            </li>
            <li itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="active">
                <span itemprop="name">
                    THIS - 404-page
                </span>
                <meta itemprop="position" content="2">
            </li>
        </ul>
    </div>
</div>
<!--End-->
<div class="location_404">
    <div class="container global_locations_404">
        <div style="text-align: center;"><img src="/images/404.jpg"></div>
    </div>
</div>
<div class="container">
    <div class="page_404">
        <div class="thubs_error_text_one ralebold"><span class="title1_404">Thank you for showing your interest!</span></div>
        <div class="thubs_error_text_three"><span class="title2_404">The link you are looking for is not available now.</span></div>
        <div class="thubs_error_text_two">Click among the options below to navigate through this website</div>
        <div class="row mb-5">
            <div class="col-xl-3"><center><a href="/"><img src="/images/thbs_error/home.png" alt="THBS Home"></a></center></div>
            <div class="col-xl-3"><center><a href="/about-us/contact-us"><img src="/images/thbs_error/contactus.png" alt="THBS Contact us"></a></center></div>
            <div class="col-xl-3"><center><a href="/career"><img src="/images/thbs_error/career.png" alt="THBS Career"></a></center></div>
            <div class="col-xl-3"><center><a href="/blog"><img src="/images/thbs_error/blogs.png" alt="THBS Blogs"></a></center></div>
        </div>
    </div>
</div>

    </main>
    <footer b-purfj6pd51 class="footer text-muted">
        
         


<div class="thv2-footer">
    <div class="container">
        <div class="row thv2-footer-row">
            <div class="col-6 col-md-4 col-lg-2 thv2-footer-col">
                <a class="thv2-footer-brand" href="/">
                    <img src="https://assets.torryharris.com/assets/v2/home/navbar/brand.svg" alt="THIS - Torry Harris" />
                </a>
                <p class="thv2-footer-tagline">Enterprise integration, data, and agentic AI services for 28 years.</p>
                <div class="thv2-footer-social-block">
                    <p class="thv2-footer-label mb-2">Follow us</p>
                    <div class="thv2-footer-social">
                        <a href="https://www.linkedin.com/company/torry-harris-integration-solutions/" target="_blank" rel="noopener" aria-label="LinkedIn">
                            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M14.5 0h-13A1.5 1.5 0 0 0 0 1.5v13A1.5 1.5 0 0 0 1.5 16h13a1.5 1.5 0 0 0 1.5-1.5v-13A1.5 1.5 0 0 0 14.5 0zM4.7 13.4H2.4V6h2.3v7.4zM3.6 5c-.8 0-1.3-.5-1.3-1.2 0-.7.5-1.2 1.3-1.2s1.3.5 1.3 1.2c0 .7-.5 1.2-1.3 1.2zm9.8 8.4h-2.3V9.6c0-.9-.3-1.5-1.1-1.5-.6 0-1 .4-1.1.8-.1.1-.1.4-.1.6v3.9H6.5s0-6.9 0-7.4h2.3v1c.3-.5.9-1.2 2.1-1.2 1.5 0 2.6 1 2.6 3.1v3.5z" fill="currentColor" />
                            </svg>
                        </a>
                        <a href="https://x.com/torryharris" target="_blank" rel="noopener" aria-label="X (Twitter)">
                            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M12.6 0h2.45l-5.36 6.13L15.85 16h-4.94l-3.87-5.06L2.6 16H.14l5.73-6.56L.03 0h5.06l3.5 4.63L12.6 0zm-.86 14.38h1.36L4.32 1.54H2.86l8.88 12.84z" fill="currentColor" />
                            </svg>
                        </a>
                        <a href="https://www.youtube.com/c/TorryHarrisIntegrationSolutionsVideos" target="_blank" rel="noopener" aria-label="YouTube">
                            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M15.46 4.38a2.03 2.03 0 0 0-1.44-1.46C12.74 2.57 8 2.57 8 2.57s-4.74 0-6.02.35A2.03 2.03 0 0 0 .54 4.38C.18 5.58.18 8 .18 8s0 2.42.36 3.62a2.03 2.03 0 0 0 1.44 1.46c1.28.35 6.02.35 6.02.35s4.74 0 6.02-.35a2.03 2.03 0 0 0 1.44-1.46c.36-1.2.36-3.62.36-3.62s0-2.42-.36-3.62zM6.5 10.25v-4.5L10.5 8l-4 2.25z" fill="currentColor" />
                            </svg>
                        </a>
                        <a href="https://www.instagram.com/torryharrisintegrationsolution" target="_blank" rel="noopener" aria-label="Instagram">
                            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M8 1.44c2.14 0 2.4.01 3.24.05.78.03 1.2.17 1.48.28.37.14.64.32.92.6.28.28.45.55.6.92.11.28.25.7.28 1.48.04.84.05 1.1.05 3.24s-.01 2.4-.05 3.24c-.03.78-.17 1.2-.28 1.48-.14.37-.32.64-.6.92-.28.28-.55.45-.92.6-.28.11-.7.25-1.48.28-.84.04-1.1.05-3.24.05s-2.4-.01-3.24-.05c-.78-.03-1.2-.17-1.48-.28a2.5 2.5 0 0 1-.92-.6 2.5 2.5 0 0 1-.6-.92c-.11-.28-.25-.7-.28-1.48C1.45 10.4 1.44 10.14 1.44 8s.01-2.4.05-3.24c.03-.78.17-1.2.28-1.48.14-.37.32-.64.6-.92.28-.28.55-.45.92-.6.28-.11.7-.25 1.48-.28C5.6 1.45 5.86 1.44 8 1.44zM8 0C5.83 0 5.56.01 4.7.05c-.86.04-1.45.18-1.96.38-.53.21-.98.48-1.42.92-.44.44-.71.89-.92 1.42-.2.51-.34 1.1-.38 1.96C.01 5.56 0 5.83 0 8s.01 2.44.05 3.3c.04.86.18 1.45.38 1.96.21.53.48.98.92 1.42.44.44.89.71 1.42.92.51.2 1.1.34 1.96.38.86.04 1.13.05 3.3.05s2.44-.01 3.3-.05c.86-.04 1.45-.18 1.96-.38.53-.21.98-.48 1.42-.92.44-.44.71-.89.92-1.42.2-.51.34-1.1.38-1.96.04-.86.05-1.13.05-3.3s-.01-2.44-.05-3.3c-.04-.86-.18-1.45-.38-1.96a3.9 3.9 0 0 0-.92-1.42 3.9 3.9 0 0 0-1.42-.92c-.51-.2-1.1-.34-1.96-.38C10.44.01 10.17 0 8 0zm0 3.89A4.11 4.11 0 1 0 8 12.1 4.11 4.11 0 0 0 8 3.89zm0 6.78a2.67 2.67 0 1 1 0-5.34 2.67 2.67 0 0 1 0 5.34zm5.23-6.95a.96.96 0 1 1-1.92 0 .96.96 0 0 1 1.92 0z" fill="currentColor" />
                            </svg>
                        </a>
                        <a href="https://www.facebook.com/TorryHarrisIntegrationSolutions/" target="_blank" rel="noopener" aria-label="Facebook">
                            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                                <path d="M16 8A8 8 0 1 0 6.94 15.9v-5.6H4.9V8h2.04V6.24c0-2.02 1.2-3.13 3.04-3.13.86 0 1.76.15 1.76.15v1.94h-.99c-.98 0-1.28.6-1.28 1.23V8h2.19l-.35 2.3H9.47v5.6A8 8 0 0 0 16 8z" fill="currentColor" />
                            </svg>
                        </a>
                    </div>
                </div>
            </div>

            <div class="col-6 col-md-4 col-lg-2 thv2-footer-col">
                <a href="/business-leaders" class="thv2-footer-label hover_link_effect">Business Leaders</a>
                <ul class="thv2-footer-links">
                    <li><a href="/industries/telecom">Telecommunications</a></li>
                    <li><a href="/industries/banking-and-financial-services">Financial Services</a></li>
                    <li><a href="/industries/government">Government, Public Sector &amp; Economic Zones</a></li>
                </ul>
            </div>

            <div class="col-6 col-md-4 col-lg-2 thv2-footer-col">
                <a href="/technology-leaders" class="thv2-footer-label hover_link_effect">Technology Leaders</a>
                <ul class="thv2-footer-links">
                    <li><a href="/services/legacy-modernization-and-roi">Legacy Modernization &amp; ROI</a></li>
                    <li><a href="/services/integration-and-digital-platform-ecosystems">Integration &amp; Digital Platforms</a></li>
                    <li><a href="/services/data-intelligence-and-agentic-ai">Data, Intelligence &amp; Agentic AI</a></li>
                    <li><a href="/services/managed-cloud-and-governance">Managed Cloud &amp; Governance</a></li>
                </ul>
            </div>

            <div class="col-6 col-md-4 col-lg-2 thv2-footer-col">
                <div class="thv2-footer-group">
                    <p class="thv2-footer-label">Platforms</p>
                    <ul class="thv2-footer-links">
                        <li><a href="https://www.torryharris.com/products/digital-ecosystem-platform/marketplace">Digital Marketplace</a></li>
                        <li><a href="https://www.torryharris.com/products/api-management-platform/api-manager">API Manager</a></li>
                    </ul>
                </div>
                <div class="thv2-footer-group">
                    <p class="thv2-footer-label">How we Engage</p>
                    <ul class="thv2-footer-links">
                        <li><a href="/global-capability-center">Global Capability Center</a></li>
                        <li><a href="/services/api-and-microservices-factory-model">API &amp; Microservices factory model</a></li>
                        <li><a href="/services/ai-factory">AI Factory</a></li>
                    </ul>
                </div>
            </div>

            <div class="col-6 col-md-4 col-lg-2 thv2-footer-col">
                <p class="thv2-footer-label">Insights</p>
                <ul class="thv2-footer-links">
                    <li><a href="/events">Events &amp; Webinars</a></li>
                    <li><a href="/insights/case-study">Case Studies</a></li>
                    <li><a href="/insights/articles-povs">Articles &amp; PoVs</a></li>
                    <li><a href="/insights/whitepapers">Whitepapers</a></li>
                    <li><a href="/analyst-speak">Analyst Speak</a></li>
                    <li><a href="/news">Newsroom</a></li>
                    <li><a href="/infographics">Infographics</a></li>
                    <li><a href="/summary-decks">Summary Decks</a></li>
                    <li><a href="/about-us/video-gallery">Video Gallery</a></li>
                    <li><a href="/knowledge-zone">Knowledge Zone</a></li>
                </ul>
            </div>

            <div class="col-6 col-md-4 col-lg-2 thv2-footer-col">
                <p class="thv2-footer-label">About us</p>
                <ul class="thv2-footer-links">
                    <li><a href="/about-us/corporate-overview">Corporate Overview</a></li>
                    <li><a href="/torry-harris-global-locations">Global Locations</a></li>
                    <li><a href="/about-us/awards-and-recognition">Awards and Recognition</a></li>
                    <li><a href="/client-speak">Client Speak</a></li>
                    <li><a href="/about-us/corporate-social-responsibility">Social Responsibility</a></li>
                    <li><a href="/about-us/our-partners">Partnerships &amp; Alliances</a></li>
                    <li><a href="/career">Careers</a></li>
                </ul>
            </div>
        </div>

        <div class="thv2-footer-divider"></div>

        <div class="row thv2-footer-bottom">
            <div class="col-12 col-lg-6 thv2-footer-copyright">
                Copyright &copy; 2026 Torry Harris Business Solutions
            </div>
            <div class="col-12 col-lg-6 thv2-footer-legal">
                <a href="/privacy-policy">Privacy Policy</a>
                <a href="/cookie-policy">Cookie Policy</a>
                <a href="/terms-of-use">Terms of Use</a>
                <a href="/site-map">Site Map</a>
            </div>
        </div>
    </div>
    <div id="google-inline-badge" style="position: absolute; right: 0px; bottom: 0px;"></div>
</div>

<style>
    .thv2-footer {
        background: linear-gradient(180deg, #0F0028 21.172%, #23005F 100%);
        border-top: 1px solid rgba(255,255,255,.2);
        padding: 40px 0;
        position: relative;
    }

    .hover_link_effect{
        text-decoration: none;
    }

    .hover_link_effect:hover{
        color: #59C4C0;
        text-decoration: underline;
    }

    .thv2-footer-row {
        row-gap: 32px;
    }

    .thv2-footer-col {
        display: flex;
        flex-direction: column;
        gap: 8px;
    }

    .thv2-footer-brand {
        display: inline-block;
    }

        .thv2-footer-brand img {
            height: 24px;
        }

    .thv2-footer-tagline {
        margin: 0;
        max-width: 172px;
        font-family: 'Raleway-Regular', sans-serif;
        font-size: 11px;
        line-height: 19px;
        color: #BECADB;
    }

    .thv2-footer-social-block {
        display: flex;
        flex-direction: column;
        gap: 8px;
        margin-top: 16px;
    }

    .thv2-footer-social {
        display: flex;
        align-items: center;
        gap: 16px;
    }

        .thv2-footer-social a {
            display: inline-flex;
            color: #BECADB;
            text-decoration: none;
        }

            .thv2-footer-social a:hover {
                color: #D964F0;
            }

    .thv2-footer-label {
        margin: 0;
        font-family: 'Raleway-Medium', sans-serif;
        font-size: 11px;
        letter-spacing: 1.1px;
        text-transform: uppercase;
        color: #D964F0;
    }

    .thv2-footer-links {
        display: flex;
        flex-direction: column;
        gap: 8px;
        margin: 8px 0 0;
        padding: 0;
        list-style: none;
        max-width: 172px;
    }

        .thv2-footer-links a {
            font-family: 'Raleway-Regular', sans-serif;
            font-size: 11px;
            line-height: 19px;
            color: #BECADB;
            text-decoration: none;
        }

            .thv2-footer-links a:hover {
                color: #D964F0;
            }

    .thv2-footer-group + .thv2-footer-group {
        margin-top: 24px;
    }

    .thv2-footer-divider {
        margin-top: 40px;
        border-top: 1px solid rgba(255,255,255,.2);
    }

    .thv2-footer-bottom {
        margin-top: 24px;
        row-gap: 12px;
        align-items: center;
        font-family: 'Raleway-Regular', sans-serif;
        font-size: 11px;
        line-height: 19px;
        color: #BECADB;
    }

    .thv2-footer-legal {
        display: flex;
        gap: 24px;
        flex-wrap: wrap;
    }

        .thv2-footer-legal a {
            color: #BECADB;
            text-decoration: none;
            white-space: nowrap;
        }

            .thv2-footer-legal a:hover {
                color: #D964F0;
            }

    @media (min-width: 992px) {
        .thv2-footer-bottom {
            justify-content: space-between;
        }

        .thv2-footer-legal {
            justify-content: flex-end;
        }
    }
</style>

       
    </footer>
    <script src="/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <script src="/js/thbs-youtube-popup.js"></script>
    <script src="/js/jquery-ui.min.js"></script>
    <script src="/js/slick.min.js"></script>
    
   

    
    <script>
        $(document).ready(function () {
            $(".thbsyoutube_link").thbsyoutube({
                autoPlay: false,
                theme: "dark",
            });
        });
    </script>
</body>
</html>
