260 lines
8.8 KiB
HTML
260 lines
8.8 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Product Catalog - KHY</title>
|
||
<link rel="stylesheet" href="../assets/styles/main.css" />
|
||
<style>
|
||
/* Force responsive behavior */
|
||
@media (min-width: 640px) {
|
||
.sm\:hidden {
|
||
display: none !important;
|
||
}
|
||
.sm\:flex {
|
||
display: flex !important;
|
||
}
|
||
}
|
||
|
||
/* Lazy loading styles */
|
||
.lazy-load {
|
||
opacity: 0.7;
|
||
transition: opacity 0.3s ease-in-out;
|
||
}
|
||
|
||
.lazy-load.loaded {
|
||
opacity: 1;
|
||
}
|
||
</style>
|
||
<link
|
||
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&family=Playfair+Display:wght@100;200;300;400;500;600;700&family=Poppins:wght@400;500;600&display=swap"
|
||
rel="stylesheet"
|
||
/>
|
||
</head>
|
||
<body class="bg-white font-sans text-gray-800">
|
||
<!-- Header -->
|
||
<header class="fixed w-full h-20 sm:h-28 top-0 left-0 bg-white shadow-[0_8px_24px_rgba(0,0,0,0.06)] border-b border-black/10 z-50">
|
||
<nav class="h-full">
|
||
<div
|
||
class="max-w-7xl mx-auto h-full flex items-center justify-between px-5"
|
||
>
|
||
|
||
|
||
</div>
|
||
</nav>
|
||
</header>
|
||
|
||
|
||
<main>
|
||
<!-- Hero Section -->
|
||
<section class="relative h-80 mt-20 sm:mt-28">
|
||
<!-- Background Image -->
|
||
<div class="absolute inset-0 w-full h-full">
|
||
<img
|
||
src="../assets/images/prod-catalog.jpg"
|
||
alt="Product catalog background"
|
||
class="w-full h-full object-cover object-center"
|
||
style="filter: blur(3px)"
|
||
/>
|
||
|
||
<!-- White Overlay -->
|
||
<div class="absolute inset-0 bg-white bg-opacity-60"></div>
|
||
|
||
<!-- Overlay Content -->
|
||
<div
|
||
class="absolute z-10 inset-0 flex items-center justify-center text-center text-black"
|
||
>
|
||
<h1
|
||
class="font-playfair font-medium text-3xl md:text-4xl lg:text-5xl leading-tight"
|
||
>
|
||
Product catalog
|
||
</h1>
|
||
</section>
|
||
|
||
<!-- Product Controls Section -->
|
||
<section class="relative w-full h-25 bg-floral-white py-6">
|
||
<div class="max-w-7xl mx-auto px-5">
|
||
<div class="flex justify-between items-center">
|
||
<!-- Left side: Filter and View Controls -->
|
||
<div class="flex items-center gap-4 relative">
|
||
<!-- Filter Button -->
|
||
<button
|
||
id="filter-toggle"
|
||
class="flex items-center gap-2 px-4 py-2 border border-light-silver rounded-md bg-white hover:bg-light-bg transition-colors"
|
||
>
|
||
<span class="text-lg">☰</span>
|
||
<span class="font-poppins text-lg text-black">Filter</span>
|
||
</button>
|
||
|
||
<!-- Categories Dropdown -->
|
||
<div
|
||
id="filter-dropdown"
|
||
class="hidden absolute top-12 left-0 w-56 bg-white border border-light-silver rounded-md shadow-lg p-3 space-y-2 z-20"
|
||
>
|
||
<!-- Categories will be injected dynamically -->
|
||
<div id="filter-categories" class="space-y-2"></div>
|
||
<div class="pt-2 flex justify-end gap-2">
|
||
<button id="filter-clear" class="text-quick-silver text-sm hover:text-black">Clear</button>
|
||
<button id="filter-apply" class="text-uc-gold text-sm hover:underline">Apply</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- View Toggle Buttons (removed) -->
|
||
|
||
<!-- Results Count -->
|
||
<span class="font-poppins text-base text-quick-silver"
|
||
>Showing 1–16 of 32 results</span
|
||
>
|
||
</div>
|
||
|
||
<!-- Right side: Sort Dropdown -->
|
||
<div class="flex items-center gap-4">
|
||
<!-- Sort Dropdown -->
|
||
<div class="flex items-center gap-2">
|
||
<span class="font-poppins text-lg text-black">Sort by:</span>
|
||
<select
|
||
class="border border-light-silver rounded px-2 py-1 bg-white"
|
||
>
|
||
<option value="default">Default</option>
|
||
<option value="name-asc">Name: A to Z</option>
|
||
<option value="name-desc">Name: Z to A</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Product Grid Section -->
|
||
<section class="relative w-full bg-white py-12">
|
||
<div class="max-w-7xl mx-auto px-5">
|
||
<!-- Product Grid -->
|
||
<div
|
||
id="product-grid"
|
||
class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8 mb-12"
|
||
>
|
||
<!-- Products will be loaded dynamically -->
|
||
</div>
|
||
|
||
<!-- Pagination -->
|
||
<div id="pagination" class="flex justify-center items-center space-x-10">
|
||
<!-- Pagination will be loaded dynamically -->
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Features Section -->
|
||
<section class="relative bg-floral-white py-16">
|
||
<div class="max-w-7xl mx-auto px-5">
|
||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
|
||
<!-- High Quality -->
|
||
<div class="flex items-center space-x-4">
|
||
<div class="w-12 h-12">
|
||
<img
|
||
src="../assets/icons/trophy.png"
|
||
alt="Trophy"
|
||
class="w-full h-full object-contain"
|
||
/>
|
||
</div>
|
||
<div>
|
||
<h3
|
||
class="font-playfair font-semibold text-2xl text-black mb-1"
|
||
>
|
||
High Quality
|
||
</h3>
|
||
<p class="font-playfair font-normal text-lg text-gray-500">
|
||
crafted from top materials
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Warranty Protection -->
|
||
<div class="flex items-center space-x-4">
|
||
<div class="w-12 h-12">
|
||
<img
|
||
src="../assets/icons/warranty.png"
|
||
alt="Guarantee"
|
||
class="w-full h-full object-contain"
|
||
/>
|
||
</div>
|
||
<div>
|
||
<h3
|
||
class="font-playfair font-semibold text-2xl text-black mb-1"
|
||
>
|
||
Warranty Protection
|
||
</h3>
|
||
<p class="font-playfair font-normal text-lg text-gray-500">
|
||
Over 2 years
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Free Shipping -->
|
||
<div class="flex items-center space-x-4">
|
||
<div class="w-12 h-12">
|
||
<img
|
||
src="../assets/icons/shipping.png"
|
||
alt="Shipping"
|
||
class="w-full h-full object-contain"
|
||
/>
|
||
</div>
|
||
<div>
|
||
<h3
|
||
class="font-playfair font-semibold text-2xl text-black mb-1"
|
||
>
|
||
Free Shipping
|
||
</h3>
|
||
<p class="font-playfair font-normal text-lg text-gray-500">
|
||
Order over 150 $
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 24/7 Support -->
|
||
<div class="flex items-center space-x-4">
|
||
<div class="w-12 h-12">
|
||
<img
|
||
src="../assets/icons/support.png"
|
||
alt="Support"
|
||
class="w-full h-full object-contain"
|
||
/>
|
||
</div>
|
||
<div>
|
||
<h3
|
||
class="font-playfair font-semibold text-2xl text-black mb-1"
|
||
>
|
||
24 / 7 Support
|
||
</h3>
|
||
<p class="font-playfair font-normal text-lg text-gray-500">
|
||
Dedicated support
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
|
||
|
||
|
||
<script src="../scripts/main.js?v=3.0"></script>
|
||
<script src="../scripts/products.js?v=3.0"></script>
|
||
|
||
<script>
|
||
// Listen for temporary data updates from admin dashboard
|
||
window.addEventListener('message', function(event) {
|
||
if (event.data.type === 'UPDATE_PREVIEW_DATA') {
|
||
// Update the products data with temporary changes
|
||
if (window.productManager && event.data.data.products) {
|
||
// Store temporary data for preview
|
||
window.productManager.tempProducts = event.data.data.products;
|
||
|
||
// Re-render with temporary data
|
||
window.productManager.renderProducts(window.productManager.tempProducts);
|
||
|
||
console.log('Preview updated with temporary data:', event.data.data.products.length, 'products');
|
||
}
|
||
}
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|