anycoder-7b2cc63b / index.html
cezar-boudaher's picture
Upload folder using huggingface_hub
cf776b0 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lumina — Next-Gen E-Commerce Experience</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=Space+Grotesk:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
sans: ['DM Sans', 'system-ui', 'sans-serif'],
display: ['Space Grotesk', 'system-ui', 'sans-serif'],
},
colors: {
charcoal: '#0a0a0c',
ink: '#111114',
surface: '#18181d',
elevated: '#212128',
mist: '#e8e4df',
parchment: '#f6f4f1',
warm: '#faf9f7',
iris: '#6366f1',
irisDim: '#4f46e5',
lavender: '#c7b8ff',
coral: '#f43f5e',
amber: '#f59e0b',
mint: '#10b981',
ocean: '#0ea5e9',
}
}
}
}
</script>
<style>
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'DM Sans', system-ui, sans-serif;
background: #f6f4f1;
color: #1a1a1e;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
}
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: #c8c3bc;
border-radius: 20px;
}
/* ===== ORGANIC MORPHING BLOBS ===== */
.hero-blob {
position: absolute;
filter: blur(60px);
opacity: 0.7;
animation: blobMorph 8s ease-in-out infinite alternate;
}
.blob-1 {
width: 500px;
height: 500px;
top: -100px;
right: -80px;
background: linear-gradient(135deg, #6366f1 0%, #a78bfa 50%, #f43f5e 100%);
border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
animation-delay: 0s;
}
.blob-2 {
width: 400px;
height: 400px;
bottom: -50px;
left: -60px;
background: linear-gradient(225deg, #0ea5e9 0%, #6366f1 100%);
border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
animation-delay: -4s;
}
.blob-3 {
width: 350px;
height: 350px;
top: 40%;
left: 50%;
transform: translate(-50%, -50%);
background: linear-gradient(135deg, #f59e0b 0%, #f43f5e 40%, #6366f1 100%);
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
opacity: 0.3;
animation-delay: -2s;
}
@keyframes blobMorph {
0% {
border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
transform: translate(0,0) scale(1);
}
25% {
border-radius: 70% 30% 50% 50% / 30% 30% 70% 70%;
transform: translate(15px, -20px) scale(1.03);
}
50% {
border-radius: 50% 50% 30% 70% / 60% 40% 30% 60%;
transform: translate(-10px, 15px) scale(0.98);
}
75% {
border-radius: 30% 70% 60% 40% / 50% 60% 40% 50%;
transform: translate(5px, -10px) scale(1.01);
}
100% {
border-radius: 60% 40% 30% 70% / 40% 30% 60% 50%;
transform: translate(-5px, 5px) scale(1.02);
}
}
/* ===== GLASSMORPHISM ===== */
.glass {
background: rgba(255,255,255,0.55);
backdrop-filter: blur(24px) saturate(180%);
-webkit-backdrop-filter: blur(24px) saturate(180%);
border: 1px solid rgba(255,255,255,0.2);
}
.glass-dark {
background: rgba(16,16,20,0.75);
backdrop-filter: blur(24px) saturate(180%);
-webkit-backdrop-filter: blur(24px) saturate(180%);
border: 1px solid rgba(255,255,255,0.06);
}
.glass-card {
background: rgba(255,255,255,0.7);
backdrop-filter: blur(16px);
border: 1px solid rgba(255,255,255,0.3);
}
/* ===== ANIMATIONS ===== */
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes scaleIn {
from {
opacity: 0;
transform: scale(0.92);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes slideRight {
from {
opacity: 0;
transform: translateX(-30px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes shimmer {
0% { background-position: -200% center; }
100% { background-position: 200% center; }
}
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-8px); }
}
@keyframes pulseRing {
0% {
box-shadow: 0 0 0 0 rgba(99,102,241,0.4);
}
70% {
box-shadow: 0 0 0 12px rgba(99,102,241,0);
}
100% {
box-shadow: 0 0 0 0 rgba(99,102,241,0);
}
}
.anim-fade-up {
animation: fadeUp 0.7s cubic-bezier(0.16,1,0.3,1) forwards;
opacity: 0;
}
.anim-fade-in {
animation: fadeIn 0.5s ease forwards;
}
.anim-scale {
animation: scaleIn 0.5s cubic-bezier(0.16,1,0.3,1) forwards;
}
.delay-1 { animation-delay: 0.08s; }
.delay-2 { animation-delay: 0.16s; }
.delay-3 { animation-delay: 0.24s; }
.delay-4 { animation-delay: 0.32s; }
.delay-5 { animation-delay: 0.4s; }
/* ===== PRODUCT CARD ===== */
.product-card {
transition: transform 0.5s cubic-bezier(0.16,1,0.3,1), box-shadow 0.5s ease;
}
.product-card:hover {
transform: translateY(-6px) scale(1.01);
box-shadow: 0 24px 48px -12px rgba(0,0,0,0.12), 0 0 0 1px rgba(255,255,255,0.5);
}
.product-card .card-img {
transition: transform 0.8s cubic-bezier(0.16,1,0.3,1);
}
.product-card:hover .card-img {
transform: scale(1.06);
}
.product-card .quick-view {
opacity: 0;
transform: translateY(12px);
transition: all 0.4s cubic-bezier(0.16,1,0.3,1);
}
.product-card:hover .quick-view {
opacity: 1;
transform: translateY(0);
}
.product-card .like-btn {
transition: all 0.3s ease;
}
.product-card .like-btn:hover {
transform: scale(1.15);
}
.product-card .like-btn.liked i {
color: #f43f5e;
transform: scale(1.15);
}
/* ===== ADMIN SIDEBAR ===== */
.sidebar-nav-item {
position: relative;
transition: all 0.3s cubic-bezier(0.16,1,0.3,1);
}
.sidebar-nav-item::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 3px;
border-radius: 0 4px 4px 0;
background: linear-gradient(to bottom, #6366f1, #a78bfa);
transform: scaleY(0);
transition: transform 0.3s ease;
}
.sidebar-nav-item.active::before {
transform: scaleY(1);
}
.sidebar-nav-item.active {
background: rgba(99,102,241,0.1);
color: #6366f1;
}
/* ===== MODALS ===== */
.modal-backdrop {
backdrop-filter: blur(12px);
background: rgba(10,10,12,0.4);
}
.modal-panel {
animation: scaleIn 0.35s cubic-bezier(0.16,1,0.3,1) forwards;
}
/* ===== TOAST ===== */
.toast {
animation: slideRight 0.4s cubic-bezier(0.16,1,0.3,1) forwards;
}
.toast-exit {
animation: fadeUp 0.3s ease forwards reverse;
}
/* ===== SHIMMER ===== */
.shimmer-text {
background: linear-gradient(90deg, #1a1a1e 0%, #6366f1 50%, #1a1a1e 100%);
background-size: 200% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
animation: shimmer 3s linear infinite;
}
/* ===== NAV UNDERLINE ===== */
.nav-link {
position: relative;
}
.nav-link::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 0;
height: 2px;
background: linear-gradient(90deg, #6366f1, #a78bfa);
border-radius: 2px;
transition: width 0.3s cubic-bezier(0.16,1,0.3,1);
}
.nav-link:hover::after, .nav-link.active::after {
width: 100%;
}
/* ===== CART SIDEBAR ===== */
.cart-panel {
transition: transform 0.5s cubic-bezier(0.16,1,0.3,1);
}
.cart-open {
transform: translateX(0);
}
.cart-closed {
transform: translateX(100%);
}
/* ===== CATEGORY TAB ===== */
.cat-tab {
transition: all 0.3s ease;
position: relative;
}
.cat-tab::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 2px;
background: #6366f1;
border-radius: 2px;
transition: width 0.3s ease;
}
.cat-tab:hover::after, .cat-tab.active::after {
width: 60%;
}
.cat-tab.active {
color: #6366f1;
background: rgba(99,102,241,0.06);
}
/* ===== FLOATING PARTICLES ===== */
.particle {
position: absolute;
border-radius: 50%;
pointer-events: none;
animation: floatParticle 6s ease-in-out infinite;
}
@keyframes floatParticle {
0%, 100% { transform: translateY(0) rotate(0deg); opacity: 0.6; }
50% { transform: translateY(-20px) rotate(180deg); opacity: 1; }
}
/* ===== BADGE PULSE ===== */
.badge-pulse {
animation: pulseRing 2s ease-in-out infinite;
}
/* ===== SPECIAL OFFERS RIBBON ===== */
.ribbon {
position: absolute;
top: 0;
right: 0;
padding: 4px 28px;
font-size: 0.65rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
transform: translate(15px, 8px) rotate(45deg);
transform-origin: top right;
z-index: 10;
}
/* ===== MAGNIFIER ===== */
.magnify-wrap {
overflow: hidden;
cursor: zoom-in;
}
.magnify-img {
transition: transform 0.3s ease;
}
/* ===== INPUT STYLES ===== */
.input-modern {
background: rgba(255,255,255,0.6);
border: 1px solid rgba(0,0,0,0.08);
border-radius: 14px;
padding: 14px 18px;
font-size: 0.95rem;
transition: all 0.3s ease;
outline: none;
}
.input-modern:focus {
border-color: #6366f1;
box-shadow: 0 0 0 4px rgba(99,102,241,0.1);
background: #fff;
}
.input-modern::placeholder {
color: #9ca3af;
}
.textarea-modern {
background: rgba(255,255,255,0.6);
border: 1px solid rgba(0,0,0,0.08);
border-radius: 14px;
padding: 14px 18px;
font-size: 0.95rem;
transition: all 0.3s ease;
outline: none;
resize: vertical;
}
.textarea-modern:focus {
border-color: #6366f1;
box-shadow: 0 0 0 4px rgba(99,102,241,0.1);
background: #fff;
}
/* ===== TABS ===== */
.tab-btn {
transition: all 0.3s ease;
}
.tab-btn.active {
background: #1a1a1e;
color: #fff;
}
/* ===== SCROLL REVEAL ===== */
.reveal {
opacity: 0;
transform: translateY(40px);
transition: all 0.8s cubic-bezier(0.16,1,0.3,1);
}
.reveal.visible {
opacity: 1;
transform: translateY(0);
}
/* ===== STAGGER CARDS ===== */
.stagger-card:nth-child(1) { transition-delay: 0ms; }
.stagger-card:nth-child(2) { transition-delay: 80ms; }
.stagger-card:nth-child(3) { transition-delay: 160ms; }
.stagger-card:nth-child(4) { transition-delay: 240ms; }
.stagger-card:nth-child(5) { transition-delay: 320ms; }
.stagger-card:nth-child(6) { transition-delay: 400ms; }
.stagger-card:nth-child(7) { transition-delay: 480ms; }
.stagger-card:nth-child(8) { transition-delay: 560ms; }
/* ===== SCROLLBAR ADMIN ===== */
.admin-scroll::-webkit-scrollbar { width: 4px; }
.admin-scroll::-webkit-scrollbar-thumb { background: #333; border-radius: 20px; }
/* ===== STATUS DOT ===== */
.status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
display: inline-block;
}
/* Smooth transitions */
a, button {
transition: all 0.25s ease;
}
/* Marquee */
@keyframes marquee {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
.marquee-track {
animation: marquee 25s linear infinite;
}
.marquee-track:hover {
animation-play-state: paused;
}
</style>
</head>
<body>
<!-- ============================================================
STORE PAGE
============================================================ -->
<div id="store-page">
<!-- Top announcement bar -->
<div id="announcement-bar" class="bg-charcoal text-white text-center py-2.5 px-4 text-sm font-medium tracking-wide" style="display:none">
<span id="announcement-text">Free shipping on orders over $75 | Use code LUMINA15 for 15% off</span>
</div>
<!-- Navigation -->
<nav class="sticky top-0 z-40 glass transition-all duration-300" id="main-nav">
<div class="max-w-7xl mx-auto px-5 sm:px-8">
<div class="flex items-center justify-between h-16 sm:h-20">
<!-- Logo -->
<a href="#" onclick="renderStore()" class="flex items-center gap-2.5 group">
<div class="w-10 h-10 rounded-xl bg-gradient-to-br from-iris to-irisDim flex items-center justify-center shadow-lg shadow-iris/25 group-hover:shadow-iris/40 transition-shadow">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
<polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon>
</svg>
</div>
<span class="font-display font-bold text-xl tracking-tight text-charcoal">Lumina</span>
</a>
<!-- Desktop Nav -->
<div class="hidden md:flex items-center gap-8">
<a href="#" onclick="renderStore()" class="nav-link active text-sm font-medium text-charcoal">Home</a>
<a href="#" onclick="filterByCategory('')" class="nav-link text-sm font-medium text-gray-500 hover:text-charcoal">All Products</a>
<a href="#" onclick="scrollToProducts()" class="nav-link text-sm font-medium text-gray-500 hover:text-charcoal">New Arrivals</a>
<a href="#" onclick="renderAdmin()" class="nav-link text-sm font-medium text-gray-500 hover:text-charcoal">Admin Panel</a>
</div>
<!-- Right controls -->
<div class="flex items-center gap-2 sm:gap-3">
<div class="hidden sm:flex items-center bg-white/60 rounded-full pl-4 pr-1.5 py-1.5 border border-black/5 focus-within:border-iris/30 focus-within:bg-white transition-all">
<i class="fa-solid fa-magnifying-glass text-gray-400 text-xs mr-2.5"></i>
<input type="text" id="search-bar" placeholder="Search..." class="bg-transparent text-sm outline-none w-36 lg:w-44 placeholder-gray-400" oninput="handleSearch(this.value)">
</div>
<button onclick="toggleCart()" class="relative w-10 h-10 rounded-full flex items-center justify-center hover:bg-black/5 transition-colors group">
<i class="fa-solid fa-bag-shopping text-charcoal text-sm group-hover:text-iris transition-colors"></i>
<span id="cart-count" class="absolute -top-0.5 -right-0.5 w-5 h-5 bg-coral text-white text-[10px] font-bold rounded-full flex items-center justify-center scale-0 transition-transform">0</span>
</button>
<button onclick="renderAdmin()" class="w-10 h-10 rounded-full bg-charcoal text-white flex items-center justify-center hover:bg-ink transition-colors">
<i class="fa-solid fa-sliders text-xs"></i>
</button>
</div>
</div>
</div>
</nav>
<!-- Hero -->
<section id="hero-section" class="relative overflow-hidden min-h-[92vh] flex items-center">
<div class="hero-blob blob-1"></div>
<div class="hero-blob blob-2"></div>
<div class="hero-blob blob-3"></div>
<!-- Decorative particles -->
<div class="particle w-3 h-3 bg-iris/40 top-[20%] left-[15%]" style="animation-delay:0s"></div>
<div class="particle w-2 h-2 bg-coral/40 top-[60%] left-[8%]" style="animation-delay:-2s"></div>
<div class="particle w-4 h-4 bg-ocean/30 top-[30%] right-[12%]" style="animation-delay:-4s"></div>
<div class="particle w-2 h-2 bg-amber/40 top-[75%] right-[25%]" style="animation-delay:-1s"></div>
<div class="particle w-3 h-3 bg-mint/30 top-[15%] left-[45%]" style="animation-delay:-3s"></div>
<div class="max-w-7xl mx-auto px-5 sm:px-8 relative z-10 w-full">
<div class="grid lg:grid-cols-2 gap-12 lg:gap-8 items-center">
<div class="max-w-2xl">
<div class="inline-flex items-center gap-2 bg-white/60 backdrop-blur-sm rounded-full px-4 py-1.5 mb-8 anim-fade-up border border-white/40 shadow-sm">
<span class="w-2 h-2 rounded-full bg-mint badge-pulse"></span>
<span class="text-xs font-semibold text-charcoal tracking-wide uppercase" id="hero-badge">New Collection 2025</span>
</div>
<h1 class="font-display font-bold text-5xl sm:text-6xl lg:text-[4.5rem] leading-[1.05] text-charcoal mb-6 anim-fade-up delay-1" id="hero-title">
Curated for the<br>
<span class="shimmer-text">modern minimalist</span>
</h1>
<p class="text-lg sm:text-xl text-gray-500 leading-relaxed mb-10 max-w-lg anim-fade-up delay-2" id="hero-desc">
Discover thoughtfully designed essentials that elevate your everyday. Crafted with purpose, built to last.
</p>
<div class="flex flex-wrap gap-4 anim-fade-up delay-3">
<button onclick="scrollToProducts()" class="group relative px-8 py-4 bg-charcoal text-white font-semibold rounded-2xl hover:bg-ink transition-all overflow-hidden">
<span class="relative z-10 flex items-center gap-2">
Explore Collection
<i class="fa-solid fa-arrow-right group-hover:translate-x-1 transition-transform"></i>
</span>
</button>
<button onclick="renderAdmin()" class="px-8 py-4 bg-white/60 backdrop-blur-sm text-charcoal font-semibold rounded-2xl border border-black/8 hover:bg-white transition-all">
Customize Store
</button>
</div>
</div>
<div class="relative hidden lg:block anim-fade-up delay-4">
<div class="relative w-full aspect-square max-w-md mx-auto">
<div class="absolute inset-0 rounded-[40px] bg-gradient-to-br from-iris/10 to-coral/10 blur-2xl"></div>
<div class="relative w-full h-full rounded-[40px] overflow-hidden shadow-2xl shadow-black/10 group">
<img id="hero-img" src="https://images.unsplash.com/photo-1558618666-fcd25c85f82e?w=800&q=85" alt="Hero" class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-105">
<!-- Floating card -->
<div class="absolute bottom-6 left-6 right-6 glass-card rounded-2xl p-4 flex items-center gap-4">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-iris to-irisDim flex items-center justify-center text-white font-bold text-sm">
$149
</div>
<div>
<div class="font-semibold text-charcoal text-sm">Wireless Speaker Pro</div>
<div class="text-xs text-gray-500 mt-0.5">Premium audio, 24h battery</div>
</div>
<button class="ml-auto w-9 h-9 rounded-full bg-charcoal text-white flex items-center justify-center hover:bg-iris transition-colors">
<i class="fa-solid fa-plus text-xs"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Trusted By / Marquee -->
<div class="border-y border-black/5 bg-warm/50 overflow-hidden py-5">
<div class="marquee-track flex items-center gap-16 whitespace-nowrap">
<span class="text-gray-400 font-display text-sm font-semibold tracking-widest uppercase">Trusted by industry leaders</span>
<span class="text-gray-300 font-display font-bold text-lg">Nike</span>
<span class="text-gray-300 font-display font-bold text-lg">Apple</span>
<span class="text-gray-300 font-display font-bold text-lg">Sonos</span>
<span class="text-gray-300 font-display font-bold text-lg">Bose</span>
<span class="text-gray-300 font-display font-bold text-lg">Muji</span>
<span class="text-gray-300 font-display font-bold text-lg">Herman Miller</span>
<span class="text-gray-300 font-display font-bold text-lg">Aesop</span>
<span class="text-gray-400 font-display text-sm font-semibold tracking-widest uppercase">Trusted by industry leaders</span>
<span class="text-gray-300 font-display font-bold text-lg">Nike</span>
<span class="text-gray-300 font-display font-bold text-lg">Apple</span>
<span class="text-gray-300 font-display font-bold text-lg">Sonos</span>
<span class="text-gray-300 font-display font-bold text-lg">Bose</span>
<span class="text-gray-300 font-display font-bold text-lg">Muji</span>
<span class="text-gray-300 font-display font-bold text-lg">Herman Miller</span>
<span class="text-gray-300 font-display font-bold text-lg">Aesop</span>
</div>
</div>
<!-- Featured Section -->
<section id="featured-section" class="py-20 px-5 sm:px-8 max-w-7xl mx-auto">
<div class="flex items-end justify-between mb-12 reveal">
<div>
<span class="text-iris text-xs font-bold tracking-widest uppercase mb-2 block">Handpicked</span>
<h2 class="font-display font-bold text-3xl sm:text-4xl text-charcoal" id="featured-title">Featured Products</h2>
</div>
<a href="#" onclick="filterByCategory('')" class="hidden sm:flex items-center gap-2 text-sm font-semibold text-charcoal hover:text-iris transition-colors">
View all <i class="fa-solid fa-arrow-right text-xs"></i>
</a>
</div>
<div id="featured-grid" class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6"></div>
</section>
<!-- Category Filter -->
<section id="products-section" class="py-12 px-5 sm:px-8 max-w-7xl mx-auto">
<div class="flex items-end justify-between mb-10 reveal">
<div>
<span class="text-iris text-xs font-bold tracking-widest uppercase mb-2 block">Browse</span>
<h2 class="font-display font-bold text-3xl sm:text-4xl text-charcoal" id="products-title">Our Collection</h2>
</div>
<div class="hidden sm:flex items-center gap-2">
<button onclick="setSort('newest')" class="sort-btn text-xs font-semibold px-3 py-1.5 rounded-lg text-gray-400 hover:text-charcoal hover:bg-black/5 transition-all" data-sort="newest">Newest</button>
<button onclick="setSort('price-low')" class="sort-btn text-xs font-semibold px-3 py-1.5 rounded-lg text-gray-400 hover:text-charcoal hover:bg-black/5 transition-all" data-sort="price-low">Price</button>
<button onclick="setSort('name')" class="sort-btn text-xs font-semibold px-3 py-1.5 rounded-lg text-gray-400 hover:text-charcoal hover:bg-black/5 transition-all" data-sort="name">Name</button>
</div>
</div>
<!-- Category Tabs -->
<div id="category-tabs" class="flex gap-1.5 mb-10 overflow-x-auto pb-2 reveal">
<button onclick="filterByCategory('')" class="cat-tab active shrink-0 px-5 py-2.5 rounded-xl text-sm font-semibold whitespace-nowrap">
All <span class="text-gray-400 ml-1 text-xs font-normal" id="cat-all-count"></span>
</button>
<button onclick="filterByCategory('electronics')" class="cat-tab shrink-0 px-5 py-2.5 rounded-xl text-sm font-semibold text-gray-500 whitespace-nowrap">
Electronics <span class="text-gray-400 ml-1 text-xs font-normal" id="cat-electronics-count"></span>
</button>
<button onclick="filterByCategory('fashion')" class="cat-tab shrink-0 px-5 py-2.5 rounded-xl text-sm font-semibold text-gray-500 whitespace-nowrap">
Fashion <span class="text-gray-400 ml-1 text-xs font-normal" id="cat-fashion-count"></span>
</button>
<button onclick="filterByCategory('home')" class="cat-tab shrink-0 px-5 py-2.5 rounded-xl text-sm font-semibold text-gray-500 whitespace-nowrap">
Home & Living <span class="text-gray-400 ml-1 text-xs font-normal" id="cat-home-count"></span>
</button>
<button onclick="filterByCategory('sports')" class="cat-tab shrink-0 px-5 py-2.5 rounded-xl text-sm font-semibold text-gray-500 whitespace-nowrap">
Sports <span class="text-gray-400 ml-1 text-xs font-normal" id="cat-sports-count"></span>
</button>
<button onclick="filterByCategory('accessories')" class="cat-tab shrink-0 px-5 py-2.5 rounded-xl text-sm font-semibold text-gray-500 whitespace-nowrap">
Accessories <span class="text-gray-400 ml-1 text-xs font-normal" id="cat-accessories-count"></span>
</button>
</div>
<!-- Product Grid -->
<div id="product-grid" class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6"></div>
<!-- Empty State -->
<div id="empty-state" class="hidden text-center py-24 reveal">
<div class="w-20 h-20 rounded-2xl bg-gray-100 flex items-center justify-center mx-auto mb-6">
<i class="fa-solid fa-box-open text-2xl text-gray-300"></i>
</div>
<h3 class="font-display font-semibold text-xl text-charcoal mb-2">No products found</h3>
<p class="text-gray-400 text-sm">Try adjusting your search or category filter.</p>
</div>
</section>
<!-- Why Shop With Us -->
<section class="py-20 px-5 sm:px-8 max-w-7xl mx-auto">
<div class="text-center mb-14 reveal">
<span class="text-iris text-xs font-bold tracking-widest uppercase mb-3 block">Why Lumina</span>
<h2 class="font-display font-bold text-3xl sm:text-4xl text-charcoal">The experience you deserve</h2>
</div>
<div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-6">
<div class="group p-8 rounded-3xl bg-white border border-black/5 hover:border-iris/20 hover:shadow-xl hover:shadow-iris/5 transition-all duration-500 reveal stagger-card">
<div class="w-14 h-14 rounded-2xl bg-gradient-to-br from-iris/10 to-iris/5 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform duration-300">
<i class="fa-solid fa-truck-fast text-iris text-lg"></i>
</div>
<h3 class="font-display font-semibold text-lg text-charcoal mb-2">Free Shipping</h3>
<p class="text-gray-400 text-sm leading-relaxed">Complimentary delivery on all orders over $75. No hidden fees, ever.</p>
</div>
<div class="group p-8 rounded-3xl bg-white border border-black/5 hover:border-iris/20 hover:shadow-xl hover:shadow-iris/5 transition-all duration-500 reveal stagger-card">
<div class="w-14 h-14 rounded-2xl bg-gradient-to-br from-coral/10 to-coral/5 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform duration-300">
<i class="fa-solid fa-shield-halved text-coral text-lg"></i>
</div>
<h3 class="font-display font-semibold text-lg text-charcoal mb-2">2-Year Warranty</h3>
<p class="text-gray-400 text-sm leading-relaxed">Every product is backed by our hassle-free two-year warranty program.</p>
</div>
<div class="group p-8 rounded-3xl bg-white border border-black/5 hover:border-iris/20 hover:shadow-xl hover:shadow-iris/5 transition-all duration-500 reveal stagger-card">
<div class="w-14 h-14 rounded-2xl bg-gradient-to-br from-mint/10 to-mint/5 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform duration-300">
<i class="fa-solid fa-rotate-left text-mint text-lg"></i>
</div>
<h3 class="font-display font-semibold text-lg text-charcoal mb-2">Easy Returns</h3>
<p class="text-gray-400 text-sm leading-relaxed">Not satisfied? Return within 30 days for a full refund. Zero questions asked.</p>
</div>
<div class="group p-8 rounded-3xl bg-white border border-black/5 hover:border-iris/20 hover:shadow-xl hover:shadow-iris/5 transition-all duration-500 reveal stagger-card">
<div class="w-14 h-14 rounded-2xl bg-gradient-to-br from-amber/10 to-amber/5 flex items-center justify-center mb-5 group-hover:scale-110 transition-transform duration-300">
<i class="fa-solid fa-headset text-amber text-lg"></i>
</div>
<h3 class="font-display font-semibold text-lg text-charcoal mb-2">24/7 Support</h3>
<p class="text-gray-400 text-sm leading-relaxed">Our dedicated team is here around the clock to help you with anything.</p>
</div>
</div>
</section>
<!-- Newsletter -->
<section class="py-20 px-5 sm:px-8 max-w-7xl mx-auto">
<div class="relative rounded-[40px] bg-charcoal overflow-hidden reveal">
<div class="absolute inset-0 opacity-30">
<div class="hero-blob blob-1" style="width:400px;height:400px;top:-100px;right:-50px;filter:blur(80px);opacity:0.5"></div>
<div class="hero-blob blob-2" style="width:300px;height:300px;bottom:-50px;left:-50px;filter:blur(60px);opacity:0.4"></div>
</div>
<div class="relative z-10 px-8 sm:px-16 py-16 sm:py-20 text-center max-w-2xl mx-auto">
<span class="inline-block px-4 py-1.5 rounded-full bg-white/10 text-lavender text-xs font-semibold tracking-widest uppercase mb-6">Newsletter</span>
<h2 class="font-display font-bold text-3xl sm:text-4xl text-white mb-4">Join the inner circle</h2>
<p class="text-gray-400 mb-10 text-sm sm:text-base">Get early access to new drops, exclusive discounts, and stories from the makers.</p>
<div class="flex flex-col sm:flex-row gap-3 max-w-md mx-auto">
<input type="email" placeholder="Enter your email" class="flex-1 px-6 py-4 rounded-2xl bg-white/10 text-white text-sm placeholder-gray-400 border border-white/10 focus:border-iris/50 focus:outline-none transition-all">
<button class="px-8 py-4 bg-white text-charcoal font-semibold rounded-2xl hover:bg-lavender transition-colors text-sm whitespace-nowrap">Subscribe</button>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="border-t border-black/5 bg-warm">
<div class="max-w-7xl mx-auto px-5 sm:px-8 py-16">