@@ -34,6 +34,22 @@ const tags = [
3434 " reseller" ,
3535 " integration" ,
3636];
37+
38+ const partnersRaw = [
39+ { name: " Movaci" , url: " https://movaci.com/" , regions: [" asia-pacific" , " americas" , " uk" ], labels: [" Thailand" , " US" , " Australia" , " UK" ], description: " Cybersecurity solutions company and MSSP headquartered in Thailand with offices in the US, Australia and UK." , logo: " movaci-logo.png" },
40+ { name: " Dynamate" , url: " https://www.dynamate.be/" , regions: [" europe" ], labels: [" Belgium" ], description: " IT services company offering cloud infrastructure, modern workplace, security, and digital transformation across Flanders." , logo: " dynamate-logo.svg" },
41+ { name: " WorldWideWAN" , url: " https://www.wwwan.de/" , regions: [" europe" ], labels: [" Germany" ], description: " Globally operating IT system house, offering hybrid infrastructure, security solutions, and managed services in over 150 countries." , logo: " wwwan-logo.svg" },
42+ { name: " Xcomp" , url: " https://xcomp.pl/en/home/" , regions: [" europe" ], labels: [" Poland" ], description: " IT infrastructure and consulting company, offering networking, security, storage and certified hardware solutions across Poland and Europe." , logo: " xcomp-logo.png" },
43+ { name: " FOXiT GmbH – Member of FOXGroup" , url: " https://fox-it.de/" , regions: [" europe" ], labels: [" Germany" ], description: " The FOXGroup is a network of highly specialized companies in the fields of Data Protection & Information Security, IT Security and Managed Services." , logo: " foxit-logo.png" },
44+ { name: " epssi" , url: " " , regions: [" europe" ], labels: [" France" ], description: " IT managed services provider delivering infrastructure, cybersecurity and support solutions for businesses." , logo: " epssi-logo.png" },
45+ { name: " Entisso" , url: " https://www.entiiso.com/" , regions: [" europe" ], labels: [" Switzerland" ], description: " IT company specializing in infrastructure, cloud, Microsoft 365 and modern workplace solutions for digital transformation." , logo: " entisso-logo.png" },
46+ ];
47+
48+ const partners = partnersRaw .sort ((a , b ) => {
49+ const countryA = (a .labels [0 ] ?? " " ).toLowerCase ();
50+ const countryB = (b .labels [0 ] ?? " " ).toLowerCase ();
51+ return countryA .localeCompare (countryB );
52+ });
3753---
3854
3955<ProductLayout
@@ -100,67 +116,55 @@ const tags = [
100116 <ContentLimiter maxWidth ={ 1100 } >
101117 <h2 id =" wge-partners-headline" class =" wge-partners__headline" >Defguard Partners (MSP/MSSP)</h2 >
102118 <p class =" wge-partners__sub" >Find authorized Defguard Managed Service Providers and Managed Security Service Providers in your region.</p >
103- <div class =" wge-partners__grid" aria-label =" Trusted by Movaci, Dynamate, xcomp, epssi, Entisso, FOX IT and WorldWideWAN" >
104- <article class =" wge-partners__card" >
105- <a href =" https://movaci.com/" target =" _blank" rel =" noopener noreferrer" class =" wge-partners__link" aria-label =" Movaci – Defguard Partner" >
106- <div class =" wge-partners__logo-wrapper" >
107- <img src =" /images/partnering-with-defguard/movaci-logo.png" alt =" Movaci" class =" wge-partners__logo" width =" 125" height =" 125" loading =" lazy" />
108- </div >
109- <p class =" wge-partners__label" >Thailand, US, Australia, UK</p >
110- </a >
111- <p class =" wge-partners__description" >Cybersecurity solutions company and MSSP headquartered in Thailand with offices in the US, Australia and UK.</p >
112- </article >
113- <article class =" wge-partners__card" >
114- <a href =" https://www.dynamate.be/" target =" _blank" rel =" noopener noreferrer" class =" wge-partners__link" aria-label =" Dynamate – Defguard MSP Partner Belgium" >
115- <div class =" wge-partners__logo-wrapper" >
116- <img src =" /images/partnering-with-defguard/dynamate-logo.svg" alt =" Dynamate" class =" wge-partners__logo" width =" 125" height =" 125" loading =" lazy" />
117- </div >
118- <p class =" wge-partners__label" >Belgium</p >
119- </a >
120- <p class =" wge-partners__description" >IT services company offering cloud infrastructure, modern workplace, security, and digital transformation across Flanders.</p >
121- </article >
122- <article class =" wge-partners__card" >
123- <a href =" https://www.wwwan.de/" target =" _blank" rel =" noopener noreferrer" class =" wge-partners__link" aria-label =" WorldWideWAN – Defguard MSP Partner Germany" >
124- <div class =" wge-partners__logo-wrapper" >
125- <img src =" /images/partnering-with-defguard/wwwan-logo.svg" alt =" WorldWideWAN" class =" wge-partners__logo" width =" 125" height =" 125" loading =" lazy" />
126- </div >
127- <p class =" wge-partners__label" >Germany</p >
128- </a >
129- <p class =" wge-partners__description" >Globally operating IT system house, offering hybrid infrastructure, security solutions, and managed services in over 150 countries.</p >
130- </article >
131- <article class =" wge-partners__card" >
132- <a href =" https://xcomp.pl/en/home/" target =" _blank" rel =" noopener noreferrer" class =" wge-partners__link" aria-label =" Xcomp – Defguard MSP Partner Poland" >
133- <div class =" wge-partners__logo-wrapper" >
134- <img src =" /images/partnering-with-defguard/xcomp-logo.png" alt =" xcomp" class =" wge-partners__logo" width =" 125" height =" 125" loading =" lazy" />
135- </div >
136- <p class =" wge-partners__label" >Poland</p >
137- </a >
138- <p class =" wge-partners__description" >IT infrastructure and consulting company, offering networking, security, storage and certified hardware solutions across Poland and Europe.</p >
139- </article >
140- <article class =" wge-partners__card" >
141- <a href =" https://fox-it.de/" target =" _blank" rel =" noopener noreferrer" class =" wge-partners__link" aria-label =" FOX IT – Defguard MSP Partner Germany" >
142- <div class =" wge-partners__logo-wrapper" >
143- <img src =" /images/partnering-with-defguard/foxit-logo.png" alt =" FOX IT" class =" wge-partners__logo" width =" 125" height =" 125" loading =" lazy" />
144- </div >
145- <p class =" wge-partners__label" >Germany</p >
146- </a >
147- <p class =" wge-partners__description" >IT system house, specializing in IT security and managed services for enterprises.</p >
148- </article >
149- <article class =" wge-partners__card" >
150- <div class =" wge-partners__logo-wrapper" >
151- <img src =" /images/partnering-with-defguard/epssi-logo.png" alt =" epssi" class =" wge-partners__logo" width =" 125" height =" 125" loading =" lazy" />
152- </div >
153- <p class =" wge-partners__label" >France</p >
154- <p class =" wge-partners__description" >IT managed services provider delivering infrastructure, cybersecurity and support solutions for businesses.</p >
155- </article >
156- <article class =" wge-partners__card" >
157- <div class =" wge-partners__logo-wrapper" >
158- <img src =" /images/partnering-with-defguard/entisso-logo.png" alt =" Entisso" class =" wge-partners__logo" width =" 125" height =" 125" loading =" lazy" />
159- </div >
160- <p class =" wge-partners__label" >Switzerland</p >
161- <p class =" wge-partners__description" >IT company specializing in infrastructure, cloud, Microsoft 365 and modern workplace solutions for digital transformation.</p >
162- </article >
119+
120+ <div class =" wge-partners__filter" role =" group" aria-label =" Filter by region" >
121+ <button type =" button" class =" wge-partners__filter-btn is-active" data-region =" all" >All</button >
122+ <button type =" button" class =" wge-partners__filter-btn" data-region =" europe" >Europe</button >
123+ <button type =" button" class =" wge-partners__filter-btn" data-region =" asia-pacific" >Asia-Pacific</button >
124+ <button type =" button" class =" wge-partners__filter-btn" data-region =" americas" >Americas</button >
125+ <button type =" button" class =" wge-partners__filter-btn" data-region =" uk" >UK</button >
126+ </div >
127+
128+ <div class =" wge-partners__grid" id =" partners-grid" aria-label =" Trusted Defguard partners" >
129+ { partners .map ((partner ) => {
130+ const introEmail = ` mailto:partner@defguard.net?subject=Request%20Introduction%20to%20${encodeURIComponent (partner .name )} ` ;
131+ return (
132+ <article class = " wge-partners__card" data-regions = { partner .regions .join (" " )} >
133+ <div class = " wge-partners__logo-wrapper" >
134+ <img src = { ` /images/partnering-with-defguard/${partner .logo } ` } alt = { partner .name } class = " wge-partners__logo" width = " 125" height = " 60" loading = " lazy" />
135+ </div >
136+ <h3 class = " wge-partners__name" >{ partner .name } </h3 >
137+ <div class = " wge-partners__badges" >
138+ { partner .labels .map ((country ) => (
139+ <span class = " wge-partners__badge" >{ country } </span >
140+ ))}
141+ </div >
142+ <p class = " wge-partners__description" >{ partner .description } </p >
143+ <div class = " wge-partners__actions" >
144+ <a href = { introEmail } class = " wge-partners__btn wge-partners__btn--primary" >Request an Introduction</a >
145+ { partner .url ? (
146+ <a href = { partner .url } target = " _blank" rel = " noopener noreferrer" class = " wge-partners__btn wge-partners__btn--ghost" >Visit Website</a >
147+ ) : null }
148+ </div >
149+ </article >
150+ );
151+ })}
163152 </div >
153+
154+ <script is:inline >
155+ document.querySelectorAll(".wge-partners__filter-btn").forEach(function(btn) {
156+ btn.addEventListener("click", function() {
157+ document.querySelectorAll(".wge-partners__filter-btn").forEach(function(b) { b.classList.remove("is-active"); });
158+ btn.classList.add("is-active");
159+ var region = btn.getAttribute("data-region");
160+ document.querySelectorAll(".wge-partners__card").forEach(function(card) {
161+ var regions = card.getAttribute("data-regions") || "";
162+ var show = region === "all" || regions.indexOf(region) >= 0;
163+ card.classList.toggle("is-hidden", !show);
164+ });
165+ });
166+ });
167+ </script >
164168 </ContentLimiter >
165169 </section >
166170
@@ -703,74 +707,100 @@ const tags = [
703707 }
704708
705709 .wge-partners__sub {
706- margin: 0 auto 3rem ;
710+ margin: 0 auto 2rem ;
707711 text-align: center;
708712 @include typography(paragraph);
709713 color: #6b7280;
710714 line-height: 1.6;
711715 max-width: 56ch;
712716 }
713717
718+ .wge-partners__filter {
719+ display: flex;
720+ flex-wrap: wrap;
721+ justify-content: center;
722+ gap: 0.5rem;
723+ margin-bottom: 2.5rem;
724+ }
725+
726+ .wge-partners__filter-btn {
727+ padding: 0.5rem 1rem;
728+ border: 1px solid #e5e7eb;
729+ border-radius: 9999px;
730+ background: #fff;
731+ @include typography(paragraph);
732+ font-size: calc(14px * var(--font-scale-factor));
733+ font-weight: 500;
734+ color: #6b7280;
735+ cursor: pointer;
736+ transition: all 0.2s ease;
737+ }
738+
739+ .wge-partners__filter-btn:hover {
740+ border-color: #3d72c1;
741+ color: #3d72c1;
742+ }
743+
744+ .wge-partners__filter-btn.is-active {
745+ background: #3d72c1;
746+ border-color: #3d72c1;
747+ color: #fff;
748+ }
749+
714750 .wge-partners__grid {
715751 display: grid;
716- grid-template-columns: repeat(2 , 1fr);
752+ grid-template-columns: repeat(1 , 1fr);
717753 gap: 2rem;
718754 margin: 0 auto;
719755
720- @include break-up(md) {
721- grid-template-columns: repeat(4, 1fr);
722- gap: 2rem;
756+ @include break-up(sm) {
757+ grid-template-columns: repeat(2, 1fr);
758+ gap: 2.5rem;
759+ }
760+
761+ @include break-up(lg) {
762+ grid-template-columns: repeat(3, 1fr);
763+ gap: 2.5rem;
723764 }
724765 }
725766
726767 .wge-partners__card {
727768 background: #fff;
728769 border: 1px solid #e5e7eb;
729770 border-radius: 12px;
730- padding: 2rem ;
771+ padding: 2.75rem ;
731772 display: flex;
732773 flex-direction: column;
733774 align-items: center;
734- align-self: start;
735- gap: 1rem;
736- transition: transform 0.2s ease, box-shadow 0.2s ease;
775+ gap: 1.25rem;
776+ transition: transform 0.25s ease, box-shadow 0.25s ease;
737777 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
778+ min-height: 420px;
738779 }
739780
740781 .wge-partners__card:hover {
741- transform: translateY(-4px);
742- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
743- }
744-
745- .wge-partners__link {
746- display: flex;
747- flex-direction: column;
748- align-items: center;
749- justify-content: flex-start;
750- gap: 1rem;
751- text-decoration: none;
752- width: 100%;
753- color: inherit;
782+ transform: translateY(-5px);
783+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
754784 }
755785
756786 .wge-partners__logo-wrapper {
757787 display: flex;
758788 align-items: center;
759789 justify-content: center;
760790 width: 100%;
761- height: 125px;
791+ height: 60px;
792+ flex-shrink: 0;
762793 transition: transform 0.2s ease;
763794 }
764795
765796 .wge-partners__card:hover .wge-partners__logo-wrapper {
766- transform: scale(1.05 );
797+ transform: scale(1.03 );
767798 }
768799
769800 .wge-partners__logo {
770801 width: auto;
771- max-width: 125px;
772- max-height: 125px;
773- height: auto;
802+ max-width: 100%;
803+ height: 60px;
774804 object-fit: contain;
775805 display: block;
776806 filter: grayscale(100%);
@@ -783,32 +813,97 @@ const tags = [
783813 opacity: 1;
784814 }
785815
786- .wge-partners__label {
816+ .wge-partners__name {
787817 margin: 0;
788- @include typography(paragraph );
789- font-size: calc(16px * var(--font-scale-factor));
790- font-weight: 500 ;
791- color: #374151 ;
818+ @include typography(h3 );
819+ font-size: calc(18px * var(--font-scale-factor));
820+ font-weight: 600 ;
821+ color: #222 ;
792822 text-align: center;
793- line-height: 1.4;
794- transition: color 0.2s ease;
823+ line-height: 1.3;
795824 }
796825
797- .wge-partners__card:hover .wge-partners__label {
798- color: #3d72c1;
826+ .wge-partners__badges {
827+ display: flex;
828+ flex-wrap: wrap;
829+ gap: 0.375rem;
830+ justify-content: center;
831+ }
832+
833+ .wge-partners__badge {
834+ display: inline-block;
835+ padding: 0.25rem 0.75rem;
836+ background: #f3f4f6;
837+ border-radius: 9999px;
838+ @include typography(paragraph);
839+ font-size: calc(12px * var(--font-scale-factor));
840+ font-weight: 500;
841+ color: #6b7280;
799842 }
800843
801844 .wge-partners__description {
802- margin: 0.5rem 0 0;
803- padding: 0 0.25rem;
804- flex-shrink: 0;
805- align-self: stretch;
845+ margin: 0;
846+ flex: 1;
847+ min-height: 6em;
848+ display: -webkit-box;
849+ -webkit-line-clamp: 5;
850+ -webkit-box-orient: vertical;
851+ overflow: hidden;
806852 @include typography(paragraph);
807853 font-size: calc(14px * var(--font-scale-factor));
808854 font-weight: 400;
809- color: #4b5563 ;
855+ color: rgba(75, 85, 99, 0.75) ;
810856 text-align: center;
811- line-height: 1.5;
857+ line-height: 1.6;
858+ }
859+
860+ .wge-partners__actions {
861+ display: flex;
862+ flex-direction: column;
863+ gap: 0.5rem;
864+ width: 100%;
865+ margin-top: auto;
866+ padding-top: 0.5rem;
867+ }
868+
869+ .wge-partners__btn {
870+ display: inline-flex;
871+ align-items: center;
872+ justify-content: center;
873+ padding: 0.6rem 1rem;
874+ border-radius: 8px;
875+ @include typography(paragraph);
876+ font-size: calc(14px * var(--font-scale-factor));
877+ font-weight: 500;
878+ text-decoration: none;
879+ text-align: center;
880+ transition: all 0.2s ease;
881+ }
882+
883+ .wge-partners__btn--primary {
884+ background: #3d72c1;
885+ border: 1px solid #3d72c1;
886+ color: #fff !important;
887+ }
888+
889+ .wge-partners__btn--primary:hover {
890+ background: #3565a8;
891+ border-color: #3565a8;
892+ }
893+
894+ .wge-partners__btn--ghost {
895+ background: transparent;
896+ border: 1px solid #d1d5db;
897+ color: #374151 !important;
898+ }
899+
900+ .wge-partners__btn--ghost:hover {
901+ border-color: #3d72c1;
902+ color: #3d72c1 !important;
903+ }
904+
905+ .wge-partners__card.is-hidden {
906+ display: none;
812907 }
813908
814909 .wge-why {
0 commit comments