From 857b965cd4303462cc3d27a43fc703bc8d19a77a Mon Sep 17 00:00:00 2001
From: Javaxman
Date: Thu, 23 Apr 2026 12:20:33 +0200
Subject: [PATCH] Aggiorna la sezione Infrastruttura con carosello minicard e
uniforma i loghi.
Sostituisce il vecchio slider ecosistema con un carosello automatico di badge+slogan e allinea il logo AWS alla palette monocromatica del sito.
Made-with: Cursor
---
public/logos/aws.svg | 5 ++
src/data/home/stack.ts | 43 ++++++++++-
src/pages/index.astro | 172 +++++++++++++++++++----------------------
src/styles/global.css | 63 +++++++++++++++
4 files changed, 189 insertions(+), 94 deletions(-)
create mode 100644 public/logos/aws.svg
diff --git a/public/logos/aws.svg b/public/logos/aws.svg
new file mode 100644
index 0000000..6b28c12
--- /dev/null
+++ b/public/logos/aws.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/data/home/stack.ts b/src/data/home/stack.ts
index a66b746..04e3e3b 100644
--- a/src/data/home/stack.ts
+++ b/src/data/home/stack.ts
@@ -97,10 +97,51 @@ export const stackSection = {
],
},
cloudflareBadge: {
- label: 'Cloudflare',
+ label: 'Ecosistema Cloudflare',
+ slogan: '«Aiutiamo a costruire un Internet migliore.»',
href: 'https://www.cloudflare.com/',
/** Simple Icons, in `public/logos/cloudflare.svg` */
iconSrc: '/logos/cloudflare.svg',
iconAlt: 'Logo Cloudflare',
},
+ awsBadge: {
+ label: 'Ecosistema AWS',
+ slogan: '«La piattaforma cloud più completa e ampiamente adottata al mondo.»',
+ href: 'https://aws.amazon.com/',
+ iconSrc: '/logos/aws.svg',
+ iconAlt: 'Logo AWS',
+ },
+ infrastructureCarousel: {
+ ariaLabel: 'Partner infrastrutturali e tecnologici di NexStudio',
+ items: [
+ {
+ label: 'Ecosistema Cloudflare',
+ slogan: '«Aiutiamo a costruire un Internet migliore.»',
+ href: 'https://www.cloudflare.com/',
+ iconSrc: '/logos/cloudflare.svg',
+ iconAlt: 'Logo Cloudflare',
+ },
+ {
+ label: 'Ecosistema AWS',
+ slogan: '«La piattaforma cloud più completa e ampiamente adottata al mondo.»',
+ href: 'https://aws.amazon.com/',
+ iconSrc: '/logos/aws.svg',
+ iconAlt: 'Logo AWS',
+ },
+ {
+ label: 'Ecosistema GitHub',
+ slogan: '«Build and ship software on a single, collaborative platform.»',
+ href: 'https://github.com/',
+ iconSrc: '/logos/github.svg',
+ iconAlt: 'Logo GitHub',
+ },
+ {
+ label: 'Ecosistema OpenAI',
+ slogan: '«Build with AI that advances your mission.»',
+ href: 'https://openai.com/',
+ iconSrc: '/logos/openai.svg',
+ iconAlt: 'Logo OpenAI',
+ },
+ ] as const,
+ },
} as const;
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 355a7ce..d83fa82 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -17,7 +17,7 @@ import {
cta,
} from '../data/home';
-const techSliderItems = stackSection.techSlider.items;
+const infrastructureCarouselItems = stackSection.infrastructureCarousel.items;
const path = Astro.url.pathname;
const localeMatch = path.match(/^\/(en|th)(\/|$)/);
const currentLocale = localeMatch?.[1] ?? 'it';
@@ -494,46 +494,88 @@ const langMeta = {
-
+ Infrastruttura
+
+
-

-
-
- Infrastruttura
-
-
- {stackSection.cloudflareBadge.label}
-
-
- Rete globale, sicurezza e edge
-
+
+
+ {infrastructureCarouselItems.map((item) => (
+
+
+
+
+
+
+ {item.slogan}
+
+
+ ))}
+ {infrastructureCarouselItems.map((item) => (
+
+
+
+
+
+
+ {item.slogan}
+
+
+ ))}
+
-
-
-
- {stackSection.cloudflare.title}
-
-
- {stackSection.cloudflare.intro}
-
-
+
{stackSection.cloudflare.points.map((item) => (
-
{item.title}
@@ -545,7 +587,7 @@ const langMeta = {
{stackSection.continuity.title}
@@ -555,63 +597,7 @@ const langMeta = {
-
-
-
- {techSliderItems.map((item) => (
-
-
-
- ))}
- {techSliderItems.map((item) => (
-
-
-
- ))}
-
-
-
-
-
+
{stackSection.whyThisChoice.title}
diff --git a/src/styles/global.css b/src/styles/global.css
index ac986d0..184cc87 100644
--- a/src/styles/global.css
+++ b/src/styles/global.css
@@ -204,6 +204,52 @@
0 0 96px -24px rgba(167, 139, 250, 0.14);
}
+/* Stack: carosello minicard infrastruttura (logo + label + slogan) */
+.nx-infra-carousel__viewport {
+ overflow: hidden;
+ mask-image: linear-gradient(
+ 90deg,
+ transparent 0%,
+ #000 5%,
+ #000 95%,
+ transparent 100%
+ );
+ -webkit-mask-image: linear-gradient(
+ 90deg,
+ transparent 0%,
+ #000 5%,
+ #000 95%,
+ transparent 100%
+ );
+}
+
+.nx-infra-carousel__track {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: flex-start;
+ width: max-content;
+ gap: 2.6rem;
+ animation: nx-infra-marquee 44s linear infinite;
+ will-change: transform;
+}
+
+.nx-infra-carousel__item {
+ display: flex;
+ flex: none;
+ width: 16rem;
+ flex-direction: column;
+}
+
+@keyframes nx-infra-marquee {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ transform: translate3d(-50%, 0, 0);
+ }
+}
+
/* Stack: carosello loghi (marquee), fade ai bordi */
.nx-tech-slider__viewport {
overflow: hidden;
@@ -292,6 +338,23 @@
}
@media (prefers-reduced-motion: reduce) {
+ .nx-infra-carousel__item--dup {
+ display: none;
+ }
+
+ .nx-infra-carousel__viewport {
+ overflow: visible;
+ mask-image: none;
+ -webkit-mask-image: none;
+ }
+
+ .nx-infra-carousel__track {
+ animation: none;
+ flex-wrap: wrap;
+ justify-content: center;
+ width: 100%;
+ }
+
.nx-tech-slider__link--dup {
display: none;
}