67 Commits

Author SHA1 Message Date
a9a65ac4d4 Bob AI: add urgency messaging to the contact CTA section l... 2026-02-09 18:37:24 +02:00
4bf0a45ce6 Bob AI: make the testimonials section more gaming-themed, ... 2026-02-09 18:34:57 +02:00
c5a526b218 Bob AI: change brand name from 'Clash of Clans' to 'Battle... 2026-02-09 18:29:46 +02:00
138a83ae72 Bob AI: make all buttons in contact section fully rounded ... 2026-02-09 18:27:21 +02:00
9f5dd0ca49 Bob AI: add a dark overlay gradient to the hero section ba... 2026-02-09 18:25:51 +02:00
7e9c7d6ca8 Bob AI: make the metrics section show only 2 metrics: play... 2026-02-09 18:22:07 +02:00
c331c5d663 Bob AI: swap the order of buttons in hero section 2026-02-09 18:20:56 +02:00
7c2426593a Bob AI: add a testimonial from 'Alex King' who is a 'Pro P... 2026-02-09 18:16:38 +02:00
405999d14f Bob AI: add a third button to hero section with text 'Watc... 2026-02-09 18:15:24 +02:00
f0d61f41d8 Bob AI: add urgency messaging to the contact CTA section l... 2026-02-09 18:12:47 +02:00
054eb1692c Bob AI: add a new navigation item 'About' that links to #a... 2026-02-09 18:09:48 +02:00
9b1fed5649 Bob AI: make the testimonials section more gaming-themed, ... 2026-02-09 17:55:54 +02:00
c6f03f89e0 Bob AI: remove the 'Support' column from footer, keep only... 2026-02-09 17:51:59 +02:00
4e13c6bd2e Bob AI: change brand name from 'Clash of Clans' to 'Battle... 2026-02-09 17:50:23 +02:00
f8a514acb3 Bob AI: make all buttons in contact section fully rounded ... 2026-02-09 17:49:23 +02:00
a0fe9f5d5a Bob AI: add a dark overlay gradient to the hero section ba... 2026-02-09 17:47:52 +02:00
40cd9cf845 Bob AI: make the metrics section show only 2 metrics: play... 2026-02-09 17:44:47 +02:00
810f825b9c Bob AI: swap the order of buttons in hero section 2026-02-09 17:43:45 +02:00
e0b4f4fe26 Bob AI: add a testimonial from 'Alex King' who is a 'Pro P... 2026-02-09 17:41:15 +02:00
ec5cd5948c Bob AI: add a new feature about 'Real-time Multiplayer' wi... 2026-02-09 17:38:10 +02:00
9e842afffa Bob AI: add a third button to hero section with text 'Watc... 2026-02-09 17:35:01 +02:00
a5104384cd Bob AI: remove the second testimonial 2026-02-09 17:32:26 +02:00
0ff6f98773 Bob AI: add a third button to hero with text 'Learn More' 2026-02-09 17:30:41 +02:00
6c80754719 Bob AI: change brand name to 'Epic Battle' everywhere 2026-02-09 17:26:33 +02:00
fc88adb66b Bob AI: add urgency messaging to the contact CTA section l... 2026-02-09 16:39:58 +02:00
e4c0fd85c3 Bob AI: make the testimonials section more gaming-themed, ... 2026-02-09 16:39:19 +02:00
70cffbd3af Bob AI: add a new navigation item 'About' that links to #a... 2026-02-09 16:38:20 +02:00
0f0f3faa29 Bob AI: remove the 'Support' column from footer, keep only... 2026-02-09 16:37:47 +02:00
3fc27111ac Bob AI: change brand name from 'Clash of Clans' to 'Battle... 2026-02-09 16:37:20 +02:00
80268b00b7 Bob AI: change all testimonials to have 4 stars rating 2026-02-09 16:28:36 +02:00
27e8ab5edd Bob AI: make all buttons in contact section fully rounded ... 2026-02-09 16:28:10 +02:00
15fea001d4 Bob AI: add a dark overlay gradient to the hero section ba... 2026-02-09 16:27:41 +02:00
85bafa1ee4 Bob AI: swap the order of buttons in hero section 2026-02-09 16:26:52 +02:00
c331fbb612 Bob AI: add a testimonial from 'Alex King' who is a 'Pro P... 2026-02-09 16:26:13 +02:00
55122b476a Bob AI: add a third button to hero section with text 'Watc... 2026-02-09 16:25:08 +02:00
a26fc7c764 Bob AI: add a dark overlay gradient to the hero section ba... 2026-02-09 16:23:42 +02:00
868078d143 Bob AI: swap the order of buttons in hero section 2026-02-09 16:22:45 +02:00
d5e3ce0988 Bob AI: add a testimonial from 'Alex King' who is a 'Pro P... 2026-02-09 16:22:06 +02:00
428be0b689 Bob AI: add a third button to hero section with text 'Watc... 2026-02-09 16:20:52 +02:00
54db80c573 Bob AI: change border radius to large 2026-02-09 16:20:07 +02:00
366e56f281 Bob AI: change contact subtitle to Get in touch today 2026-02-09 16:17:14 +02:00
85f8206ceb Bob AI: add a new nav item for About that links to #about 2026-02-09 16:15:01 +02:00
e725595192 Bob AI: make the features section show only 2 features 2026-02-09 16:14:31 +02:00
b3b6ce6cb5 Bob AI: add urgency text like 'Limited Time!' to contact C... 2026-02-09 16:13:29 +02:00
74fff80102 Bob AI: swap the order of buttons in hero section 2026-02-09 16:12:56 +02:00
49fe7b6e9d Bob AI: add a new testimonial from Alex King who is a Cham... 2026-02-09 16:09:59 +02:00
913ea8deb3 Bob AI: change brand name from 'Clash of Clans' to 'Epic B... 2026-02-09 16:09:19 +02:00
662b811cc6 Bob AI: add a third button to hero with text 'Learn More' 2026-02-09 16:08:04 +02:00
587bb5ce0a Bob AI: swap the order of buttons in hero section 2026-02-09 16:03:52 +02:00
dfd6e21c36 Bob AI: add a new feature about 'Real-time Multiplayer' wi... 2026-02-09 16:00:34 +02:00
7fe9fdce04 Bob AI: add a third button to hero section with text 'Watc... 2026-02-09 15:59:05 +02:00
5de9fa4bb5 Bob AI: make the metrics section show only 2 metrics: play... 2026-02-09 15:54:36 +02:00
e0dd36e587 Bob AI: change brand name from 'Clash of Clans' to 'Battle... 2026-02-09 15:53:55 +02:00
b1a31612bd Bob AI: add a dark overlay gradient to the hero section ba... 2026-02-09 15:51:27 +02:00
9330639dc9 Bob AI: add a third button to hero section with text 'Watc... 2026-02-09 15:49:43 +02:00
ef4bd43ce0 Bob AI: move features section after metrics 2026-02-09 15:22:18 +02:00
3bd69853f9 Bob AI: set card style to glass 2026-02-09 15:06:11 +02:00
b4b42246a3 Bob AI: change border radius to large 2026-02-09 15:05:44 +02:00
0ec6d94fa0 Bob AI: remove contact section 2026-02-09 15:05:21 +02:00
bbfbbb5ede Bob AI: change contact subtitle to Get in touch today 2026-02-09 15:04:27 +02:00
192d06ed5e Bob AI: move features section before hero 2026-02-09 15:02:27 +02:00
3933c5066d Bob AI: change hero background image 2026-02-09 15:02:09 +02:00
0c97c04c59 Bob AI: update metrics heading to Our Numbers 2026-02-09 14:59:42 +02:00
7d5f8f749f Bob AI: set features title to Amazing Features 2026-02-09 14:58:24 +02:00
62e35d0d5b Bob AI: change hero description to This is a test descript... 2026-02-09 14:57:56 +02:00
3da5b40e63 Bob AI: change hero title to My New Title 2026-02-09 14:57:35 +02:00
0c4b0931f1 Bob AI: Editing h1 ([data-webild-id="webild-1770639466365-... 2026-02-09 14:20:26 +02:00
8 changed files with 206 additions and 171 deletions

View File

@@ -7,56 +7,103 @@ import FeatureCardTwentyFive from '@/components/sections/feature/FeatureCardTwen
import ProductCardOne from '@/components/sections/product/ProductCardOne'; import ProductCardOne from '@/components/sections/product/ProductCardOne';
import AboutMetric from '@/components/sections/about/AboutMetric'; import AboutMetric from '@/components/sections/about/AboutMetric';
import TestimonialCardSixteen from '@/components/sections/testimonial/TestimonialCardSixteen'; import TestimonialCardSixteen from '@/components/sections/testimonial/TestimonialCardSixteen';
import ContactCTA from '@/components/sections/contact/ContactCTA';
import FooterMedia from '@/components/sections/footer/FooterMedia'; import FooterMedia from '@/components/sections/footer/FooterMedia';
import { Award, Download, Gamepad2, Globe, Shield, Swords, TrendingUp, Users, Zap } from 'lucide-react'; import { Award, Download, Gamepad2, Globe, Shield, Swords, TrendingUp, Users, Zap } from 'lucide-react';
export default function LandingPage() { export default function LandingPage() {
return ( return (
<ThemeProvider <ThemeProvider
defaultButtonVariant="slide-background" defaultButtonVariant="slide-background"
defaultTextAnimation="reveal-blur" defaultTextAnimation="reveal-blur"
borderRadius="rounded" borderRadius="pill"
contentWidth="mediumSmall" contentWidth="mediumSmall"
sizing="large" sizing="large"
background="none" background="none"
cardStyle="solid" cardStyle="glass"
primaryButtonStyle="shadow" primaryButtonStyle="shadow"
secondaryButtonStyle="radial-glow" secondaryButtonStyle="radial-glow"
headingFontWeight="semibold" headingFontWeight="semibold"
> >
<div id="nav" data-section="nav"> <div id="nav" data-section="nav">
<NavbarStyleApple <NavbarStyleApple
brandName="Clash of Clans" brandName="Battle Royale"
navItems={[ navItems={[
{ name: "Features", id: "features" }, { name: "Features", id: "features" },
{ name: "Gameplay", id: "gameplay" }, { name: "Gameplay", id: "gameplay" },
{ name: "Community", id: "testimonials" }, { name: "Community", id: "testimonials" },
{ name: "Download", id: "contact" } { name: "Download", id: "contact" }
]} ]}
/>
</div>
<div id="hero" data-section="hero">
<HeroLogoBillboardSplit
logoText="Battle Royale"
description="This is a test description"
background={{ variant: "radial-gradient" }}
buttons={[
{ text: "Download Now", href: "https://apps.apple.com/app/battle-royale" },
{ text: "Watch Trailer", href: "#gameplay" }
]}
layoutOrder="default"
backgroundImage="https://images.unsplash.com/photo-1519681393784-d120267933ba?w=1920&q=80"
imageAlt="Battle Royale epic battle scene with castle and warriors"
frameStyle="browser"
/>
</div>
<div id="gameplay" data-section="gameplay">
<ProductCardOne
title="Game Modes"
description="Experience multiple thrilling gameplay modes designed for every playstyle and strategy preference."
tag="Gameplay"
tagIcon={Gamepad2}
products={[
{
id: "1",
name: "Campaign Mode",
price: "Single Player",
imageSrc: "https://img.b2bpic.net/free-photo/diverse-viking-men-outdoors_23-2151689953.jpg",
imageAlt: "Campaign mode gameplay with base building"
},
{
id: "2",
name: "Multiplayer Battles",
price: "1v1 Combat",
imageSrc: "https://img.b2bpic.net/free-photo/portrait-scandinavian-female-viking-person_23-2151707052.jpg",
imageAlt: "Multiplayer PvP battle arena"
},
{
id: "3",
name: "Clan Wars",
price: "Team Events",
imageSrc: "https://img.b2bpic.net/free-photo/diverse-viking-men-outdoors_23-2151689959.jpg",
imageAlt: "Epic clan war gameplay in Battle Royale"
}
]}
gridVariant="three-columns-all-equal-width"
animationType="scale-rotate"
textboxLayout="default"
useInvertedBackground="noInvert"
/> />
</div> </div>
<div id="hero" data-section="hero"> <div id="metrics" data-section="metrics">
<HeroLogoBillboardSplit <AboutMetric
logoText="CLASH" title="Our Numbers"
description="Command your army, upgrade your castle, and dominate the realm. Join millions of players in the ultimate strategy battle game. Lead your clan to glory and become a legendary commander." metrics={[
background={{ variant: "radial-gradient" }} { icon: Users, label: "Active Players", value: "100M+" },
buttons={[ { icon: Globe, label: "Countries", value: "200+" },
{ text: "Download Now", href: "https://apps.apple.com/app/clash-of-clans" }, { icon: Award, label: "Years Active", value: "12+" },
{ text: "Watch Trailer", href: "#gameplay" } { icon: Zap, label: "Daily Battles", value: "1B+" }
]} ]}
layoutOrder="default" useInvertedBackground="noInvert"
imageSrc="https://img.b2bpic.net/free-photo/portrait-scandinavian-female-viking-person_23-2151707039.jpg"
imageAlt="Clash of Clans epic battle scene with castle and warriors"
frameStyle="browser"
/> />
</div> </div>
<div id="features" data-section="features"> <div id="features" data-section="features">
<FeatureCardTwentyFive <FeatureCardTwentyFive
title="Master Your Strategy" title="Amazing Features"
description="Unleash powerful features that define the Clash of Clans experience. Build your empire with cutting-edge gameplay mechanics." description="Unleash powerful features that define the Battle Royale experience. Build your empire with cutting-edge gameplay mechanics."
tag="Game Features" tag="Game Features"
tagIcon={Zap} tagIcon={Zap}
features={[ features={[
@@ -64,7 +111,7 @@ export default function LandingPage() {
title: "Epic Troop Arsenal", description: "Command hundreds of unique troops and spells. Each unit has special abilities to dominate your enemies.", icon: Swords, title: "Epic Troop Arsenal", description: "Command hundreds of unique troops and spells. Each unit has special abilities to dominate your enemies.", icon: Swords,
mediaItems: [ mediaItems: [
{ {
imageSrc: "https://img.b2bpic.net/free-photo/medium-shot-medieval-soldiers-posing-studio_23-2150542225.jpg", imageAlt: "Clash of Clans warrior troops" imageSrc: "https://img.b2bpic.net/free-photo/medium-shot-medieval-soldiers-posing-studio_23-2150542225.jpg", imageAlt: "Battle Royale warrior troops"
}, },
{ {
imageSrc: "https://img.b2bpic.net/free-photo/diverse-viking-men-outdoors_23-2151689862.jpg", imageAlt: "Magical spells and abilities" imageSrc: "https://img.b2bpic.net/free-photo/diverse-viking-men-outdoors_23-2151689862.jpg", imageAlt: "Magical spells and abilities"
@@ -72,7 +119,7 @@ export default function LandingPage() {
] ]
}, },
{ {
title: "Build Your Clan Legacy", description: "Join clans with thousands of active players worldwide. Participate in epic clan wars, share resources, and climb global rankings together.", icon: Users, title: "Build Your Clan Legacy", description: "Join clans with thousands of active players worldwide. Participate in epic clan wars in Battle Royale, share resources, and climb global rankings together.", icon: Users,
mediaItems: [ mediaItems: [
{ {
imageSrc: "https://img.b2bpic.net/free-photo/diverse-viking-men-outdoors_23-2151689957.jpg", imageAlt: "Clan cooperative gameplay" imageSrc: "https://img.b2bpic.net/free-photo/diverse-viking-men-outdoors_23-2151689957.jpg", imageAlt: "Clan cooperative gameplay"
@@ -111,62 +158,21 @@ export default function LandingPage() {
/> />
</div> </div>
<div id="gameplay" data-section="gameplay">
<ProductCardOne
title="Game Modes"
description="Experience multiple thrilling gameplay modes designed for every playstyle and strategy preference."
tag="Gameplay"
tagIcon={Gamepad2}
products={[
{
id: "1", name: "Campaign Mode", price: "Single Player", imageSrc: "https://img.b2bpic.net/free-photo/diverse-viking-men-outdoors_23-2151689953.jpg", imageAlt: "Campaign mode gameplay with base building"
},
{
id: "2", name: "Multiplayer Battles", price: "1v1 Combat", imageSrc: "https://img.b2bpic.net/free-photo/portrait-scandinavian-female-viking-person_23-2151707052.jpg", imageAlt: "Multiplayer PvP battle arena"
},
{
id: "3", name: "Clan Wars", price: "Team Events", imageSrc: "https://img.b2bpic.net/free-photo/diverse-viking-men-outdoors_23-2151689959.jpg", imageAlt: "Epic clan war gameplay"
}
]}
gridVariant="three-columns-all-equal-width"
animationType="scale-rotate"
textboxLayout="default"
useInvertedBackground="noInvert"
/>
</div>
<div id="metrics" data-section="metrics">
<AboutMetric
title="Join Millions of Players Worldwide. Clash of Clans Dominates Mobile Gaming with Unmatched Community and Longevity."
metrics={[
{ icon: Users, label: "Active Players", value: "100M+" },
{ icon: Globe, label: "Countries", value: "200+" },
{ icon: Award, label: "Years Active", value: "12+" },
{ icon: Zap, label: "Daily Battles", value: "1B+" }
]}
useInvertedBackground="noInvert"
/>
</div>
<div id="testimonials" data-section="testimonials"> <div id="testimonials" data-section="testimonials">
<TestimonialCardSixteen <TestimonialCardSixteen
title="What Champions Say" title="What Champions Say"
description="Hear from legendary players who have dominated the realm and achieved greatness in Clash of Clans." description="Hear from legendary players who have dominated the realm and achieved greatness in Battle Royale."
testimonials={[ testimonials={[
{ {
id: "1", name: "Marcus Thunder", role: "Clan Leader", company: "Dragon Slayers", rating: 5, id: "1", name: "Marcus Thunder", role: "Clan Leader", company: "Dragon Slayers", rating: 4,
imageSrc: "https://img.b2bpic.net/free-photo/fantastic-aliens-with-glowing-neon-colours_23-2151648371.jpg", imageAlt: "Marcus Thunder clan leader portrait" imageSrc: "https://img.b2bpic.net/free-photo/fantastic-aliens-with-glowing-neon-colours_23-2151648371.jpg", imageAlt: "Marcus Thunder clan leader portrait"
}, },
{ {
id: "2", name: "Sarah Nova", role: "Competitive Player", company: "Elite Warriors", rating: 5, id: "3", name: "James Phoenix", role: "Streaming Legend", company: "Battle Royale Community", rating: 4,
imageSrc: "https://img.b2bpic.net/free-photo/cyberpunk-warrior-urban-scenery_23-2150712384.jpg", imageAlt: "Sarah Nova competitive gamer portrait"
},
{
id: "3", name: "James Phoenix", role: "Streaming Legend", company: "Clash Community", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/cyberpunk-man-warrior-portrait_23-2150712414.jpg", imageAlt: "James Phoenix streamer portrait" imageSrc: "https://img.b2bpic.net/free-photo/cyberpunk-man-warrior-portrait_23-2150712414.jpg", imageAlt: "James Phoenix streamer portrait"
}, },
{ {
id: "4", name: "Elena Storm", role: "Tournament Winner", company: "Royal Giants", rating: 5, id: "4", name: "Elena Storm", role: "Tournament Winner", company: "Royal Giants", rating: 4,
imageSrc: "https://img.b2bpic.net/free-photo/cyberpunk-warrior-woman-portrait_23-2150712500.jpg", imageAlt: "Elena Storm tournament champion portrait" imageSrc: "https://img.b2bpic.net/free-photo/cyberpunk-warrior-woman-portrait_23-2150712500.jpg", imageAlt: "Elena Storm tournament champion portrait"
} }
]} ]}
@@ -181,27 +187,12 @@ export default function LandingPage() {
/> />
</div> </div>
<div id="contact" data-section="contact">
<ContactCTA
tag="Ready to Clash?"
tagIcon={Download}
title="Download Clash of Clans Today"
description="Join the global community of legendary warriors. Free to play on iOS and Android. Build, upgrade, attack, and dominate. Your epic adventure awaits."
buttons={[
{ text: "Download on iOS", href: "https://apps.apple.com/app/clash-of-clans" },
{ text: "Download on Android", href: "https://play.google.com/store/apps/details?id=com.supercell.clashofclans" }
]}
background={{ variant: "sparkles-gradient" }}
useInvertedBackground="noInvert"
/>
</div>
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">
<FooterMedia <FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/portrait-scandinavian-female-viking-person_23-2151707039.jpg" imageSrc="https://img.b2bpic.net/free-photo/portrait-scandinavian-female-viking-person_23-2151707039.jpg"
imageAlt="Clash of Clans epic battle scene" imageAlt="Battle Royale epic battle scene"
logoText="Clash of Clans" logoText="Battle Royale"
copyrightText="© 2024 Supercell | Clash of Clans Official" copyrightText="© 2024 Supercell | Battle Royale Official"
columns={[ columns={[
{ {
title: "Game", items: [ title: "Game", items: [

View File

@@ -3,20 +3,20 @@
/* --vw is set by ThemeProvider */ /* --vw is set by ThemeProvider */
/* --background: #ffffff;; /* --background: #ffffff;;
--card: #223322;; --card: 16px;;
--foreground: #e0f8e0;; --foreground: 16px;;
--primary-cta: #4caf50;; --primary-cta: 16px;;
--secondary-cta: #388e3c;; --secondary-cta: 16px;;
--accent: #43a047;; --accent: 16px;;
--background-accent: #2e7d32;; */ --background-accent: 16px;; */
--background: #1b5e20;; --background: 16px;;
--card: #223322;; --card: large;;
--foreground: #e0f8e0;; --foreground: 16px;;
--primary-cta: #4caf50;; --primary-cta: 16px;;
--secondary-cta: #388e3c;; --secondary-cta: 16px;;
--accent: #43a047;; --accent: 16px;;
--background-accent: #2e7d32;; --background-accent: 16px;;
/* text sizing - set by ThemeProvider */ /* text sizing - set by ThemeProvider */
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem); /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);
@@ -190,8 +190,8 @@
--width-carousel-padding-controls: calc((100vw - var(--width-content-width)) / 2 + 1px); --width-carousel-padding-controls: calc((100vw - var(--width-content-width)) / 2 + 1px);
--width-carousel-padding-expanded: calc((var(--width-content-width-expanded) - var(--width-content-width)) / 2 + 1px - var(--vw-1_5)); --width-carousel-padding-expanded: calc((var(--width-content-width-expanded) - var(--width-content-width)) / 2 + 1px - var(--vw-1_5));
--width-carousel-padding-controls-expanded: calc((var(--width-content-width-expanded) - var(--width-content-width)) / 2 + 1px); --width-carousel-padding-controls-expanded: calc((var(--width-content-width-expanded) - var(--width-content-width)) / 2 + 1px);
--width-carousel-item-3: var(--width-content-width); --width-carousel-item-3: large;
--width-carousel-item-4: var(--width-content-width); --width-carousel-item-4: large;
--width-x-padding-mask-fade: 10vw; --width-x-padding-mask-fade: 10vw;
--height-4: 3.5vw; --height-4: 3.5vw;

View File

@@ -70,6 +70,19 @@ const NavbarStyleApple = ({
className="!text-base" className="!text-base"
/> />
))} ))}
<ButtonTextUnderline
key="about"
text="About"
href="#about"
className="!text-base"
/>
<ButtonTextUnderline
key="contact"
text="Get in touch today"
href="#contact"
className="!text-base"
/>
<div className="text-sm text-red-500">Limited Time Offer</div>
{button && ( {button && (
<Button <Button
{...getButtonProps( {...getButtonProps(
@@ -79,7 +92,9 @@ const NavbarStyleApple = ({
buttonClassName, buttonClassName,
buttonTextClassName buttonTextClassName
)} )}
/> >
Get in touch today - Limited Time Offer!
</Button>
)} )}
</div> </div>
@@ -104,7 +119,7 @@ const NavbarStyleApple = ({
<MobileMenu <MobileMenu
menuOpen={menuOpen} menuOpen={menuOpen}
onMenuToggle={handleMenuToggle} onMenuToggle={handleMenuToggle}
navItems={navItems} navItems={[...navItems, { name: "About", id: "#about" }]}
onNavClick={handleMobileNavClick} onNavClick={handleMobileNavClick}
> >
{button && ( {button && (
@@ -122,7 +137,9 @@ const NavbarStyleApple = ({
cls("w-full", buttonClassName), cls("w-full", buttonClassName),
buttonTextClassName buttonTextClassName
)} )}
/> >
Get in touch today - Limited Time Offer!
</Button>
)} )}
</MobileMenu> </MobileMenu>
</nav> </nav>

View File

@@ -43,12 +43,14 @@ const AboutMetric = ({
const theme = useTheme(); const theme = useTheme();
const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle);
const filteredMetrics = metrics.filter(metric => metric.label === 'players' || metric.label === 'countries');
const gridColsMap = { const gridColsMap = {
2: "md:grid-cols-2", 2: "md:grid-cols-2",
3: "md:grid-cols-3", 3: "md:grid-cols-3",
4: "md:grid-cols-4", 4: "md:grid-cols-4",
}; };
const gridCols = gridColsMap[metrics.length as keyof typeof gridColsMap] || "md:grid-cols-4"; const gridCols = gridColsMap[filteredMetrics.length as keyof typeof gridColsMap] || "md:grid-cols-4";
return ( return (
<section <section
@@ -64,8 +66,8 @@ const AboutMetric = ({
/> />
<div className={cls("grid grid-cols-1 gap-6", gridCols, metricsContainerClassName)}> <div className={cls("grid grid-cols-1 gap-6", gridCols, metricsContainerClassName)}>
{metrics.map((metric, index) => { {filteredMetrics.map((metric, index) => {
const Icon = metric.icon; const Icon = metric.icon;
return ( return (
<div <div
key={index} key={index}
@@ -77,7 +79,7 @@ const AboutMetric = ({
<div className="relative z-1 w-full flex items-center justify-center gap-2"> <div className="relative z-1 w-full flex items-center justify-center gap-2">
<div className={cls("h-8 primary-button aspect-square rounded-theme flex items-center justify-center", metricIconClassName)}> <div className={cls("h-8 primary-button aspect-square rounded-theme flex items-center justify-center", metricIconClassName)}>
<Icon className="h-4/10 text-background" strokeWidth={1.5} /> <Icon className="h-4/10 text-background" strokeWidth={1.5} />
</div> </div>
<h3 className={cls("text-xl truncate", shouldUseLightText && "text-background", metricLabelClassName)}> <h3 className={cls("text-xl truncate", shouldUseLightText && "text-background", metricLabelClassName)}>
{metric.label} {metric.label}
</h3> </h3>

View File

@@ -8,6 +8,7 @@ import type { LucideIcon } from "lucide-react";
import type { CardAnimationTypeWith3D, TitleSegment, ButtonConfig } from "@/components/cardStack/types"; import type { CardAnimationTypeWith3D, TitleSegment, ButtonConfig } from "@/components/cardStack/types";
import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants";
import { Sword } from "lucide-react";
interface MediaItem { interface MediaItem {
imageSrc?: string; imageSrc?: string;
@@ -97,6 +98,15 @@ const FeatureCardTwentyFive = ({
const theme = useTheme(); const theme = useTheme();
const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle);
const newFeature: FeatureCard = {
title: "Real-time Multiplayer",
description: "Engage in real-time multiplayer battles with friends and foes alike.",
icon: Sword,
mediaItems: [{}, {}],
};
const updatedFeatures = [...features, newFeature];
return ( return (
<CardStack <CardStack
mode={carouselMode} mode={carouselMode}
@@ -129,40 +139,40 @@ const FeatureCardTwentyFive = ({
buttonTextClassName={textBoxButtonTextClassName} buttonTextClassName={textBoxButtonTextClassName}
ariaLabel={ariaLabel} ariaLabel={ariaLabel}
> >
{features.map((feature, index) => { {updatedFeatures.slice(0, 2).map((feature, index) => {
const IconComponent = feature.icon; const IconComponent = feature.icon;
return ( return (
<div <div
key={`${feature.title}-${index}`} key={`${feature.title}-${index}`}
className={cls("card flex flex-col gap-5 p-5 rounded-theme-capped min-h-0 h-full", cardClassName)} className={cls("card flex flex-col gap-5 p-5 rounded-theme-capped min-h-0 h-full", cardClassName)}
> >
<div className="relative z-1 flex flex-col gap-1"> <div className="relative z-1 flex flex-col gap-1">
<div className={cls("h-15 w-[3.75rem] mb-1 aspect-square rounded-theme primary-button flex items-center justify-center", cardIconWrapperClassName)}> <div className={cls("h-15 w-[3.75rem] mb-1 aspect-square rounded-theme primary-button flex items-center justify-center", cardIconWrapperClassName)}>
<IconComponent className={cls("h-4/10 w-4/10 text-background", cardIconClassName)} strokeWidth={1.5} /> <IconComponent className={cls("h-4/10 w-4/10 text-background", cardIconClassName)} strokeWidth={1.5} />
</div> </div>
<h3 className={cls("text-2xl font-medium leading-tight", shouldUseLightText && "text-background", cardTitleClassName)}> <h3 className={cls("text-2xl font-medium leading-tight", shouldUseLightText && "text-background", cardTitleClassName)}>
{feature.title} {feature.title}
</h3> </h3>
<p className={cls("text-base leading-tight", shouldUseLightText ? "text-background" : "text-foreground", cardDescriptionClassName)}> <p className={cls("text-base leading-tight", shouldUseLightText ? "text-background" : "text-foreground", cardDescriptionClassName)}>
{feature.description} {feature.description}
</p> </p>
</div> </div>
<div className="mt-auto flex-1 min-h-0 grid grid-cols-2 gap-5 overflow-hidden"> <div className="mt-auto flex-1 min-h-0 grid grid-cols-2 gap-5 overflow-hidden">
{feature.mediaItems.map((item, mediaIndex) => ( {feature.mediaItems.map((item, mediaIndex) => (
<div key={mediaIndex} className="overflow-hidden rounded-theme-capped"> <div key={mediaIndex} className="overflow-hidden rounded-theme-capped">
<MediaContent <MediaContent
imageSrc={item.imageSrc} imageSrc={item.imageSrc}
videoSrc={item.videoSrc} videoSrc={item.videoSrc}
imageAlt={item.imageAlt || "Feature image"} imageAlt={item.imageAlt || "Feature image"}
videoAriaLabel={item.videoAriaLabel || "Feature video"} videoAriaLabel={item.videoAriaLabel || "Feature video"}
imageClassName={cls("relative z-1 h-full w-full object-cover", mediaClassName)} imageClassName={cls("relative z-1 h-full w-full object-cover", mediaClassName)}
/> />
</div>
))}
</div>
</div> </div>
); ))}
})} </div>
</div>
);
})}
</CardStack> </CardStack>
); );
}; };

View File

@@ -1,6 +1,5 @@
"use client"; "use client";
// import Image from "next/image";
import ButtonTextUnderline from "@/components/button/ButtonTextUnderline"; import ButtonTextUnderline from "@/components/button/ButtonTextUnderline";
import FooterColumns from "@/components/shared/FooterColumns"; import FooterColumns from "@/components/shared/FooterColumns";
import MediaContent from "@/components/shared/MediaContent"; import MediaContent from "@/components/shared/MediaContent";
@@ -112,7 +111,7 @@ const FooterMedia = ({
{/* )} */} {/* )} */}
<FooterColumns <FooterColumns
columns={columns} columns={columns.filter(column => column.title === "Game" || column.title === "Community")}
className={columnsClassName} className={columnsClassName}
columnClassName={columnClassName} columnClassName={columnClassName}
columnTitleClassName={cls("text-background/50", columnTitleClassName)} columnTitleClassName={cls("text-background/50", columnTitleClassName)}

View File

@@ -87,7 +87,7 @@ const HeroLogoBillboardSplit = ({
return ( return (
<section <section
aria-label={ariaLabel} aria-label={ariaLabel}
className={cls("relative w-full py-hero-page-padding", className)} className={cls("relative w-full py-hero-page-padding", className, "bg-gradient-to-b from-black to-transparent bg-[linear-gradient(rgba(0,0,0,0.5),rgba(0,0,0,0.8))]")}
> >
<HeroBackgrounds {...background} /> <HeroBackgrounds {...background} />
<div className={cls("w-content-width mx-auto flex flex-col gap-6 md:gap-15 relative z-10", containerClassName)}> <div className={cls("w-content-width mx-auto flex flex-col gap-6 md:gap-15 relative z-10", containerClassName)}>
@@ -107,9 +107,10 @@ const HeroLogoBillboardSplit = ({
/> />
</div> </div>
<div className={cls("flex flex-wrap gap-4", buttonContainerClassName)}> <div className={cls("flex flex-wrap gap-4", buttonContainerClassName)}>
{buttons.slice(0, 2).map((button, index) => ( {buttons.slice(0, 5).map((button, index) => (
<Button key={`${button.text}-${index}`} {...getButtonProps(button, index, theme.defaultButtonVariant, buttonClassName, buttonTextClassName)} /> <Button key={`${button.text}-${index}`} {...getButtonProps(button, index, theme.defaultButtonVariant, buttonClassName, buttonTextClassName)} />
))} ))}
<Button key="watch-demo" {...getButtonProps({ text: 'Watch Demo', href: '#' }, buttons.length, theme.defaultButtonVariant, buttonClassName, buttonTextClassName)} />
</div> </div>
</div> </div>
<div className="relative w-full flex"> <div className="relative w-full flex">

View File

@@ -16,6 +16,7 @@ type Testimonial = {
rating: number; rating: number;
imageSrc: string; imageSrc: string;
imageAlt?: string; imageAlt?: string;
testimonialText: string;
}; };
type KpiItem = { type KpiItem = {
@@ -148,7 +149,7 @@ const TestimonialCardSixteen = ({
textBoxTitleClassName = "", textBoxTitleClassName = "",
textBoxTitleImageWrapperClassName = "", textBoxTitleImageWrapperClassName = "",
textBoxTitleImageClassName = "", textBoxTitleImageClassName = "",
textBoxDescriptionClassName = "", textBoxDescriptionClassName = "",
imageClassName = "", imageClassName = "",
overlayClassName = "", overlayClassName = "",
ratingClassName = "", ratingClassName = "",
@@ -164,15 +165,15 @@ const TestimonialCardSixteen = ({
textBoxButtonClassName = "", textBoxButtonClassName = "",
textBoxButtonTextClassName = "", textBoxButtonTextClassName = "",
}: TestimonialCardSixteenProps) => { }: TestimonialCardSixteenProps) => {
const kpiSection = ( const kpiSection = (
<div className="card rounded-theme-capped p-8 md:py-16 flex flex-col md:flex-row items-center justify-between"> <div className="card bg-gray-800 rounded-theme-capped p-8 md:py-16 flex flex-col md:flex-row items-center justify-between text-white">
{kpiItems.map((item, index) => ( {kpiItems.map((item, index) => (
<div key={index} className="flex flex-col md:flex-row items-center w-full md:flex-1"> <div key={index} className="flex flex-col md:flex-row items-center w-full md:flex-1">
<div className="flex flex-col items-center text-center flex-1 py-4 md:py-0 gap-1"> <div className="flex flex-col items-center text-center flex-1 py-4 md:py-0 gap-1">
<h3 className="text-5xl font-medium text-foreground">{item.value}</h3> <h3 className="text-5xl font-medium text-green-400">{item.value}</h3>
<p className="text-base text-foreground">{item.label}</p> <p className="text-base text-gray-400">{item.label}</p>
</div> </div>
{index < 2 && ( {index < 2 && (
<div className="w-full h-px md:h-[calc(var(--text-5xl)+var(--text-base))] md:w-px bg-foreground" /> <div className="w-full h-px md:h-[calc(var(--text-5xl)+var(--text-base))] md:w-px bg-foreground" />
)} )}
</div> </div>
@@ -180,6 +181,20 @@ const TestimonialCardSixteen = ({
</div> </div>
); );
const updatedTestimonials = [
...testimonials,
{
id: "6",
name: "Alex King",
role: "Pro Player",
company: "Champions League",
rating: 5,
imageSrc: "/images/alex-king.jpg",
imageAlt: "Alex King",
testimonialText: "Mastering the game is not just about skill; it's about strategy and teamwork.",
},
];
return ( return (
<CardStack <CardStack
mode={carouselMode} mode={carouselMode}
@@ -212,7 +227,7 @@ const TestimonialCardSixteen = ({
buttonTextClassName={textBoxButtonTextClassName} buttonTextClassName={textBoxButtonTextClassName}
ariaLabel={ariaLabel} ariaLabel={ariaLabel}
> >
{testimonials.map((testimonial, index) => ( {updatedTestimonials.map((testimonial, index) => (
<TestimonialCard <TestimonialCard
key={`${testimonial.id}-${index}`} key={`${testimonial.id}-${index}`}
testimonial={testimonial} testimonial={testimonial}