Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 35 additions & 25 deletions frontend/src/components/Sponsors/Sponsors.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,27 +21,27 @@ const SponsorCard = ({ name, img }) => (
</span>
)}
</div>
<span className="font-bold text-[#FDF8E2] drop-shadow-md text-[7px] md:text-[9px] uppercase tracking-widest truncate w-full text-center">
<span className="font-bold text-[#FDF8E2] drop-shadow-md text-[8px] sm:text-[9px] md:text-[10px] uppercase tracking-widest truncate w-full text-center px-1">
{name}
</span>
</div>
);

/* ---------------- 2. CATEGORY GROUP BOX ---------------- */
const CategoryGroup = ({ title, sponsors }) => (
<div className="relative shrink-0 mx-3 md:mx-5 mt-4">
<div className="relative shrink-0 mx-2 sm:mx-3 md:mx-5 mt-8 md:mt-4 w-full md:w-auto px-4 md:px-0">
{/* Category Title Badge */}
<div className="absolute -top-3 left-1/2 -translate-x-1/2 z-20 bg-gradient-to-r from-[#8B6508] via-[#C5A059] to-[#8B6508] px-4 py-1 rounded-sm shadow-[0_0_10px_rgba(197,160,89,0.5)] border border-[#FDF8E2]/30 whitespace-nowrap">
<h3 className="text-[#FDF8E2] text-[9px] md:text-xs font-black tracking-[0.2em] uppercase">
<div className="absolute -top-[14px] left-1/2 -translate-x-1/2 z-20 bg-gradient-to-r from-[#8B6508] via-[#C5A059] to-[#8B6508] px-3 sm:px-4 py-1 rounded-sm shadow-[0_0_15px_rgba(197,160,89,0.5)] border border-[#FDF8E2]/40 whitespace-nowrap">
<h3 className="text-[#FDF8E2] text-[9px] sm:text-[10px] md:text-xs font-black tracking-[0.2em] uppercase">
{title}
</h3>
</div>

{/* Sponsor Grid Container - 2 Rows, Horizontal Flow */}
<div className="p-3 md:p-4 pt-6 md:pt-8 border-[1.5px] border-[#C5A059] bg-black/40 backdrop-blur-xl rounded-xl shadow-[0_0_20px_rgba(197,160,89,0.15)] flex justify-center h-full">
<div className="grid grid-rows-2 grid-flow-col gap-2 md:gap-4">
{/* Sponsor Grid Container */}
<div className="p-4 sm:p-5 pt-8 md:pt-9 border-[1.5px] border-[#C5A059] bg-black/40 backdrop-blur-xl rounded-xl shadow-[0_0_20px_rgba(197,160,89,0.15)] flex justify-center h-full">
<div className="grid grid-cols-2 md:grid-rows-2 md:grid-flow-col gap-3 md:gap-4 lg:gap-6 w-full md:w-auto">
Copy link

Copilot AI Mar 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At md+ breakpoints this grid still has grid-cols-2 applied (because it isn’t overridden), which can interact unexpectedly with md:grid-flow-col/md:grid-rows-2 and produce inconsistent column sizing/implicit columns. Consider adding an explicit md column template (e.g., md:grid-cols-none or a specific md:grid-cols-*) that matches the intended desktop marquee layout.

Suggested change
<div className="grid grid-cols-2 md:grid-rows-2 md:grid-flow-col gap-3 md:gap-4 lg:gap-6 w-full md:w-auto">
<div className="grid grid-cols-2 md:grid-cols-none md:grid-rows-2 md:grid-flow-col gap-3 md:gap-4 lg:gap-6 w-full md:w-auto">

Copilot uses AI. Check for mistakes.
{sponsors.map((s, idx) => (
<div key={idx} className="w-[85px] md:w-[105px] lg:w-[115px]">
<div key={idx} className="w-full md:w-[110px] lg:w-[125px] aspect-square md:aspect-auto">
Copy link

Copilot AI Mar 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On mobile this wrapper uses aspect-square while SponsorCard includes both a square logo area and a separate name line below it. Constraining the container to a square height is likely to cause vertical overflow or squashed layout. Consider removing aspect-square here (or reworking SponsorCard so its contents fit within the enforced aspect ratio).

Suggested change
<div key={idx} className="w-full md:w-[110px] lg:w-[125px] aspect-square md:aspect-auto">
<div key={idx} className="w-full md:w-[110px] lg:w-[125px]">

Copilot uses AI. Check for mistakes.
<SponsorCard name={s.name} img={s.img} />
</div>
))}
Expand Down Expand Up @@ -143,19 +143,19 @@ export default function Sponsors({ setLotusClass, setFigureClass, setFigureStyle
if (setFigureStyle) {
setFigureStyle({ left: "0px", bottom: "0px", transform: "translate(10%, 10%)" });
}
setFigureClass?.(`fixed w-[100px] md:w-[150px] lg:w-[180px] pointer-events-none z-[5] opacity-40 drop-shadow-[0_0_30px_rgba(255,215,138,0.3)] transition-all duration-700 ease-out`);
setLotusClass?.("fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[400px] opacity-10 z-0 pointer-events-none");
setFigureClass?.(`fixed w-[80px] sm:w-[120px] md:w-[150px] lg:w-[180px] pointer-events-none z-[5] opacity-30 md:opacity-40 drop-shadow-[0_0_30px_rgba(255,215,138,0.3)] transition-all duration-700 ease-out`);
setLotusClass?.("fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[280px] sm:w-[400px] opacity-10 z-0 pointer-events-none");
}, [setLotusClass, setFigureClass, setFigureStyle]);

return (
<div className="w-full h-screen relative flex flex-col items-center overflow-hidden">
<div className="w-full min-h-screen md:h-screen relative flex flex-col items-center overflow-x-hidden overflow-y-auto md:overflow-hidden bg-black/20">

{/* Header Section - SHIFTED DOWN GENTLY */}
<div className="z-10 text-center pt-12 md:pt-20 mb-2 px-4 shrink-0">
<motion.h1
initial={{ opacity: 0, scale: 0.9 }}
animate={{ opacity: 1, scale: 1 }}
className="invictus-heading text-[3.5rem] md:text-[5rem] lg:text-[6.5rem] leading-none text-[#C5A059] drop-shadow-[0_0_20px_rgba(0,0,0,0.8)]"
className="invictus-heading text-[2.8rem] sm:text-[4rem] md:text-[5.5rem] lg:text-[7rem] leading-none text-[#C5A059] drop-shadow-[0_0_30px_rgba(0,0,0,1)]"
>
SPONSORS
</motion.h1>
Expand All @@ -164,18 +164,28 @@ export default function Sponsors({ setLotusClass, setFigureClass, setFigureStyle
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ delay: 0.3 }}
className="mt-1 text-[#8B6508] font-black tracking-[0.05em] text-[8px] md:text-xs text-center drop-shadow-sm px-4"
className="mt-2 text-[#8B6508] font-black tracking-[0.05em] text-[9px] sm:text-[10px] md:text-sm text-center drop-shadow-sm px-4 max-w-2xl mx-auto"
>
Our valued partners who power Invictus by supporting innovation and excellence.
</motion.p>
</div>

{/* MAIN SPONSORS HORIZONTAL MARQUEE */}
<div className="w-full flex-1 flex items-center overflow-hidden z-10 relative">
<div className="flex w-full overflow-hidden group">
{/* Hover to pause animation */}
{/* MAIN SPONSORS SECTION - STACK ON MOBILE, MARQUEE ON DESKTOP */}
<div className="w-full flex-1 flex flex-col items-center z-10 relative mt-4 md:mt-0 px-2 md:px-0">
{/* Mobile View: Vertical Grid */}
<div className="md:hidden w-full space-y-12 pb-20">
{sponsorCategories.map((category, index) => (
<CategoryGroup
key={index}
title={category.type}
sponsors={category.sponsors}
/>
))}
</div>

{/* Desktop View: Horizontal Marquee */}
<div className="hidden md:flex w-full overflow-hidden group items-center flex-1">
<div className="flex animate-marquee-main hover:[animation-play-state:paused] whitespace-nowrap items-center h-full">
{/* Render array twice to create a seamless looping effect */}
{[...sponsorCategories, ...sponsorCategories].map((category, index) => (
<CategoryGroup
key={index}
Expand All @@ -189,8 +199,8 @@ export default function Sponsors({ setLotusClass, setFigureClass, setFigureStyle

{/* FOOTER PAST SPONSORS MARQUEE */}
<div className="w-full z-10 relative shrink-0 mb-6">
<div className="absolute -top-4 left-1/2 -translate-x-1/2 z-20 bg-gradient-to-r from-[#8B6508] via-[#C5A059] to-[#8B6508] px-6 py-1 rounded-sm shadow-[0_0_15px_rgba(197,160,89,0.4)] border border-[#FDF8E2]/30 whitespace-nowrap">
<h3 className="text-[#FDF8E2] text-[10px] md:text-xs font-black tracking-[0.3em] uppercase">
<div className="absolute -top-4 left-1/2 -translate-x-1/2 z-20 bg-gradient-to-r from-[#8B6508] via-[#C5A059] to-[#8B6508] px-4 sm:px-6 py-1 rounded-sm shadow-[0_0_15px_rgba(197,160,89,0.4)] border border-[#FDF8E2]/30 whitespace-nowrap">
<h3 className="text-[#FDF8E2] text-[9px] sm:text-[10px] md:text-xs font-black tracking-[0.3em] uppercase">
PAST SPONSORS
</h3>
</div>
Expand All @@ -199,12 +209,12 @@ export default function Sponsors({ setLotusClass, setFigureClass, setFigureStyle
<div className="w-full overflow-hidden group">
<div className="flex space-x-6 md:space-x-8 animate-marquee-fast whitespace-nowrap">
{[...pastSponsors, ...pastSponsors, ...pastSponsors].map((s, i) => (
<div key={i} className="shrink-0">
<div className="flex flex-col items-center justify-center p-1.5 bg-white/10 backdrop-blur-sm border border-[#C5A059]/30 rounded-lg w-[90px] md:w-[120px]">
<div className="bg-[#FDF8E2]/90 border-[1.5px] border-[#C5A059] flex items-center justify-center overflow-hidden rounded-md mb-1.5 w-full h-[55px] md:h-[65px]">
<img src={s.img} alt={s.name} className="w-[80%] h-[80%] object-contain" />
<div key={i} className="shrink-0 py-1">
<div className="flex flex-col items-center justify-center p-2 bg-white/10 backdrop-blur-sm border border-[#C5A059]/30 rounded-lg w-[95px] sm:w-[110px] md:w-[130px] hover:bg-white/20 transition-colors">
<div className="bg-[#FDF8E2]/90 border-[1.5px] border-[#C5A059] flex items-center justify-center overflow-hidden rounded-md mb-1.5 w-full h-[60px] sm:h-[65px] md:h-[75px]">
<img src={s.img} alt={s.name} className="w-[85%] h-[85%] object-contain px-1" />
</div>
<span className="font-bold text-[#FDF8E2] text-[7px] md:text-[8px] uppercase tracking-wider">{s.name}</span>
<span className="font-bold text-[#FDF8E2] text-[7px] sm:text-[8.5px] md:text-[10px] uppercase tracking-wider truncate w-full text-center">{s.name}</span>
</div>
</div>
))}
Expand Down
Loading