Skip to content

Commit b2a5a72

Browse files
author
Michał Gryczka
committed
Enhanced partnership section by adding new partners with detailed descriptions and logos, implemented sorting functionality for partner display, and introduced a filter for regions to improve user navigation.
1 parent 9d49d41 commit b2a5a72

1 file changed

Lines changed: 197 additions & 102 deletions

File tree

src/pages/partnership.astro

Lines changed: 197 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)