diff --git a/src/components/sections/IndustryStack.tsx b/src/components/sections/IndustryStack.tsx
index 72b3cfe..eed5e9d 100644
--- a/src/components/sections/IndustryStack.tsx
+++ b/src/components/sections/IndustryStack.tsx
@@ -305,6 +305,17 @@ const CSS = `
#ind-stack .istk__media { flex: none; min-height: 0; height: 300px; }
#ind-stack .istk__content { max-width: none; }
}
+@media (max-width: 600px) {
+ #ind-stack .istk { padding: 10px 14px; }
+ #ind-stack .istk__card { padding: 22px 20px; border-radius: 24px; }
+ #ind-stack .istk__media { height: 240px; }
+ #ind-stack .istk__title { margin-bottom: 16px !important; }
+ #ind-stack .istk__desc { margin: 0 0 24px; }
+ /* Two equal-width pills that always fit the card — no horizontal overflow. */
+ #ind-stack .istk__tabs { gap: 8px; margin-bottom: 22px; }
+ #ind-stack .istk__tab { flex: 1 1 0; min-width: 0; padding: 12px 8px; text-align: center; font-size: 13px; }
+ #ind-stack .istk__list li { margin-bottom: 18px; }
+}
@media (prefers-reduced-motion: reduce) {
#ind-stack .istk__list li { animation: none !important; opacity: 1; transform: none; }
}
diff --git a/src/components/sections/IntelligenceGrid.tsx b/src/components/sections/IntelligenceGrid.tsx
index 2eca7b3..88f9b2a 100644
--- a/src/components/sections/IntelligenceGrid.tsx
+++ b/src/components/sections/IntelligenceGrid.tsx
@@ -712,24 +712,91 @@ export default function IntelligenceGrid() {
@media (max-width: 768px) {
.roadmap-hero-section {
- width: calc(100% - 40px); /* keep the 20px site-standard band gutter */
- padding: 60px 16px;
- }
-
- .roadmap-grid-container {
- grid-template-columns: 1fr;
- gap: 16px;
+ width: calc(100% - 24px); /* tighter 12px gutter so the band reads edge-to-edge on phones */
+ padding: 52px 16px 44px;
+ border-radius: 22px;
}
+ .vision-main-subtitle { margin-bottom: 40px !important; }
+ /* Progress header → compact, centered summary card */
.roadmap-track-container {
flex-direction: column;
- align-items: flex-start;
- gap: 20px;
+ align-items: center;
+ text-align: center;
+ gap: 16px;
+ padding: 20px 18px;
+ margin-bottom: 36px;
}
+ .roadmap-track-label { font-size: 12px; letter-spacing: 1.5px; }
+ .timeline-horizontal-wrapper { width: 100%; }
+ .roadmap-complete-pct-container { justify-content: center; }
- .timeline-horizontal-wrapper {
- width: 100%;
+ /* ── Vertical timeline: the four stacked cards become a connected
+ journey (2026 → 2030) with a coloured rail + phase node dots. ── */
+ .roadmap-grid-container {
+ grid-template-columns: 1fr;
+ gap: 18px;
+ position: relative;
+ padding-left: 32px;
}
+ .roadmap-grid-container::before {
+ content: '';
+ position: absolute;
+ left: 6px;
+ top: 16px;
+ bottom: 16px;
+ width: 2px;
+ border-radius: 2px;
+ background: linear-gradient(180deg, #eab308 0%, #22c55e 34%, #3b82f6 67%, #C8102E 100%);
+ opacity: 0.55;
+ }
+ .roadmap-col-card { padding: 24px 22px; }
+ /* node dot sits on the rail, aligned with the year number */
+ .roadmap-col-card::before {
+ content: '';
+ position: absolute;
+ left: -32px;
+ top: 28px;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #09090b;
+ border: 2px solid #C8102E;
+ box-shadow: 0 0 0 4px #09090b, 0 0 12px rgba(200, 16, 46, 0.7);
+ z-index: 3;
+ }
+ .roadmap-col-card[data-card="2026"]::before {
+ border-color: #eab308;
+ box-shadow: 0 0 0 4px #09090b, 0 0 12px rgba(234, 179, 8, 0.6);
+ }
+ .roadmap-col-card[data-card="2027"]::before {
+ border-color: #22c55e;
+ box-shadow: 0 0 0 4px #09090b, 0 0 12px rgba(34, 197, 94, 0.6);
+ }
+ .roadmap-col-card[data-card="2028"]::before {
+ border-color: #3b82f6;
+ box-shadow: 0 0 0 4px #09090b, 0 0 12px rgba(59, 130, 246, 0.6);
+ }
+ .roadmap-col-card[data-card="2030"]::before {
+ border-color: #ffffff;
+ background: #C8102E;
+ box-shadow: 0 0 0 4px #09090b, 0 0 16px rgba(200, 16, 46, 0.9);
+ }
+ /* the 2030 card's sweeping border (::after) would sit over the rail
+ gutter — keep it from bleeding past the card's rounded edge */
+ .glowing-vision-card::after { inset: -1px; }
+ }
+
+ @media (max-width: 480px) {
+ .roadmap-hero-section { padding: 44px 14px 38px; }
+ .roadmap-hero-section .intelligence-grid-title { font-size: clamp(28px, 8.4vw, 38px) !important; letter-spacing: -1px !important; }
+ .roadmap-grid-container { padding-left: 28px; }
+ .roadmap-grid-container::before { left: 5px; }
+ .roadmap-col-card { padding: 22px 18px; }
+ .roadmap-col-card::before { left: -28px; top: 26px; }
+ .year-num { font-size: 23px; }
+ .card-heading { font-size: 16px; }
+ .card-text { font-size: 13px; }
}
`}} />
@@ -809,9 +876,10 @@ export default function IntelligenceGrid() {
const is2030 = card.year === 2030;
const isActive = activeYear === card.year;
return (
-
setActiveYear(card.year)}
+ onClick={() => setActiveYear(card.year)}
className={`roadmap-col-card ${is2030 ? "glowing-vision-card" : ""} ${isActive ? "active" : ""}`}
data-card={card.year}
>
diff --git a/src/components/sections/MileTruthHero.tsx b/src/components/sections/MileTruthHero.tsx
index 4a972cf..ad80783 100644
--- a/src/components/sections/MileTruthHero.tsx
+++ b/src/components/sections/MileTruthHero.tsx
@@ -116,6 +116,14 @@ export default function MileTruthHero() {
padding: 0 40px !important;
box-sizing: border-box !important;
}
+ .miletruth-hero .slide-content,
+ .miletruth-hero .slide-content-inner {
+ /* These carry inherited 20px padding from the slider theme with
+ content-box sizing, so width:100% + padding overflowed the viewport
+ by ~40px and pushed the hero off-center. Force border-box so the
+ padding is contained and the block stays centered. */
+ box-sizing: border-box !important;
+ }
.miletruth-hero .slide-content-inner {
display: flex !important;
flex-direction: column !important;
@@ -284,17 +292,33 @@ export default function MileTruthHero() {
.miletruth-hero .elementor-element-86f3204 {
padding: 0 12px;
}
+ /* Collapse the nested horizontal padding (was 40px + 40px on top of the
+ 12px wrapper) — at 320px that left only ~136px for text and the long
+ heading words overflowed, causing horizontal scroll + off-center look. */
+ .miletruth-content {
+ padding: 0 14px !important;
+ }
+ .miletruth-hero .slide-content {
+ padding: 0 !important;
+ }
.miletruth-hero .elementor-element-8e5c81e {
padding: 30px 0 !important;
border-radius: 20px !important;
}
+ .miletruth-hero .elementor-element-8e5c81e > .e-con-inner {
+ padding: 0 20px !important;
+ }
.miletruth-hero .elementor-element-628123a {
grid-template-columns: 1fr !important;
gap: 36px !important;
}
.miletruth-hero .content-slider-item-heading,
.miletruth-hero .content-slider-item-heading .heading-content {
- font-size: 32px !important;
+ font-size: clamp(26px, 8vw, 32px) !important;
+ letter-spacing: -0.5px !important;
+ /* never let a single long word push past the viewport */
+ overflow-wrap: break-word;
+ word-break: break-word;
}
}
`}} />
diff --git a/src/components/sections/Miles3.tsx b/src/components/sections/Miles3.tsx
index 70b5d1c..d3d4122 100644
--- a/src/components/sections/Miles3.tsx
+++ b/src/components/sections/Miles3.tsx
@@ -98,6 +98,11 @@ export default function Miles3() {
while keeping the 70px row-gap. */
.elementor-element-4add972 {
display: grid;
+ /* Elementor's ".e-con.e-grid" (specificity 0,2,0) sets grid-template-columns
+ from this CSS var, which OUT-RANKS a plain ".elementor-element-4add972"
+ (0,1,0) rule — so the responsive breakpoints below MUST drive the var,
+ not grid-template-columns directly, or the grid never collapses on mobile. */
+ --e-con-grid-template-columns: repeat(3, 1fr);
grid-template-columns: repeat(3, 1fr);
grid-auto-flow: row;
gap: 70px 60px;
@@ -165,15 +170,15 @@ export default function Miles3() {
.logico-front-end .elementor-element-63a9de5 .logico-title { font-size: clamp(40px, 5vw, 60px); }
}
@media (max-width: 1020px) {
- .elementor-element-c36a604 { margin: 15px 15px 0 15px; padding: 76px 0 0 0; }
+ .elementor-element-c36a604 { margin: 15px 15px 0 15px; padding: 76px 0 60px 0; }
.elementor-element-77d1265 { padding: 0 30px; }
- .elementor-element-4add972 { grid-template-columns: repeat(2, 1fr); gap: 50px 40px; }
+ .elementor-element-4add972 { --e-con-grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr); gap: 50px 40px; }
.logico-front-end .elementor-element-63a9de5 .logico-title { font-size: clamp(34px, 6vw, 52px); }
}
@media (max-width: 480px) {
- .elementor-element-c36a604 { margin: 12px 12px 0 12px; border-radius: 20px 20px 0 0; padding: 70px 0 0 0; }
+ .elementor-element-c36a604 { margin: 12px 12px 0 12px; border-radius: 20px 20px 0 0; padding: 70px 0 50px 0; }
.elementor-element-77d1265 { padding: 0 22px; }
- .elementor-element-4add972 { grid-template-columns: 1fr; gap: 56px; }
+ .elementor-element-4add972 { --e-con-grid-template-columns: 1fr; grid-template-columns: 1fr; gap: 56px; }
.logico-front-end .elementor-element-63a9de5 .logico-title { font-size: clamp(30px, 9vw, 44px); }
}
`}} />
diff --git a/src/components/sections/SolutionsHero.tsx b/src/components/sections/SolutionsHero.tsx
index 3348bfe..f31f09d 100644
--- a/src/components/sections/SolutionsHero.tsx
+++ b/src/components/sections/SolutionsHero.tsx
@@ -57,6 +57,10 @@ export default function SolutionsHero() {
width: 100% !important;
max-width: 1000px !important;
margin: 0 auto !important;
+ /* Contain the slider theme's inherited 20px padding (content-box) so
+ width:100% + padding doesn't overflow the viewport and push the
+ heading off-center on mobile. */
+ box-sizing: border-box !important;
}
.elementor-element.elementor-element-6c7cbcb .content-slider-item-heading,
@@ -110,6 +114,12 @@ export default function SolutionsHero() {
border-radius: 25px !important;
}
+ /* The stage-outer carries an inline height:800px; collapse it to the
+ slide height so there is no dead empty space below the hero card. */
+ .elementor-element.elementor-element-6c7cbcb .owl-stage-outer {
+ height: 620px !important;
+ }
+
.elementor-element.elementor-element-6c7cbcb .owl-carousel.owl-theme .content-item {
width: 100% !important;
min-height: 620px !important;
@@ -133,6 +143,10 @@ export default function SolutionsHero() {
border-radius: 22px !important;
}
+ .elementor-element.elementor-element-6c7cbcb .owl-stage-outer {
+ height: 560px !important;
+ }
+
.elementor-element.elementor-element-6c7cbcb .owl-carousel.owl-theme .content-item {
min-height: 560px !important;
height: 560px !important;
@@ -151,6 +165,28 @@ export default function SolutionsHero() {
line-height: 1.05 !important;
overflow-wrap: break-word !important;
}
+
+ /* Pin the slide counter ("01/02") cleanly bottom-RIGHT — matching the
+ Home and How-It-Works heroes. site.css parks it ~80px in from the
+ right (looks left/centred), and the wide dot navigation eats the
+ right side, so hide the dots on mobile and right-align the counter. */
+ .elementor .elementor-element.elementor-element-6c7cbcb .slider-footer {
+ text-align: right !important;
+ margin-bottom: 24px !important;
+ }
+ .elementor .elementor-element.elementor-element-6c7cbcb .slider-footer .slider-pagination {
+ justify-content: flex-end !important;
+ margin-left: 22px !important;
+ margin-right: 22px !important;
+ }
+ .elementor .elementor-element.elementor-element-6c7cbcb .owl-dots {
+ display: none !important;
+ }
+ /* Hide the prev/next arrows on mobile (they overlap the counter) —
+ slides still auto-rotate, matching the home hero. */
+ .elementor .elementor-element.elementor-element-6c7cbcb .owl-nav {
+ display: none !important;
+ }
}
`}} />
@@ -226,14 +262,45 @@ export default function SolutionsHero() {
+ {/* Navigation controls (prev/next) — matches the home hero slider */}
+