shopsphere / index.html
rajeshuriti's picture
change to Rolex Image - Initial Deployment
fe82107 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ShopSphere - Your Shopping Cart</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
/* Custom animations */
@keyframes slideIn {
from { transform: translateY(20px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
.animate-slide-in {
animation: slideIn 0.3s ease-out forwards;
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: #888;
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: #555;
}
/* Pulse animation for empty cart */
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
.animate-pulse {
animation: pulse 2s infinite;
}
</style>
</head>
<body class="bg-gray-50 min-h-screen font-sans">
<!-- Header -->
<header class="bg-indigo-600 text-white shadow-lg sticky top-0 z-50">
<div class="container mx-auto px-4 py-4 flex justify-between items-center">
<div class="flex items-center space-x-2">
<i class="fas fa-shopping-bag text-2xl"></i>
<h1 class="text-2xl font-bold">ShopSphere</h1>
</div>
<div class="relative">
<button id="cartButton" class="relative p-2 rounded-full hover:bg-indigo-700 transition">
<i class="fas fa-shopping-cart text-xl"></i>
<span id="cartCount" class="absolute -top-1 -right-1 bg-red-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center">0</span>
</button>
</div>
</div>
</header>
<!-- Main Content -->
<main class="container mx-auto px-4 py-8">
<!-- Products Section -->
<section class="mb-12">
<h2 class="text-2xl font-bold mb-6 text-gray-800 border-b pb-2">Featured Products</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
<!-- Product 1 -->
<div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-xl transition duration-300 animate-slide-in">
<div class="relative">
<img src="https://images.unsplash.com/photo-1546868871-7041f2a55e12?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=764&q=80" alt="Wireless Headphones" class="w-full h-48 object-cover">
<span class="absolute top-2 right-2 bg-green-500 text-white text-xs px-2 py-1 rounded-full">NEW</span>
</div>
<div class="p-4">
<h3 class="font-semibold text-lg mb-1">Wireless Headphones</h3>
<p class="text-gray-600 text-sm mb-2">Premium sound quality with noise cancellation</p>
<div class="flex justify-between items-center">
<span class="font-bold text-indigo-600">$129.99</span>
<button onclick="addToCart('Wireless Headphones', 129.99, 'https://images.unsplash.com/photo-1546868871-7041f2a55e12?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=764&q=80')" class="bg-indigo-600 text-white px-3 py-1 rounded hover:bg-indigo-700 transition">
<i class="fas fa-cart-plus mr-1"></i> Add
</button>
</div>
</div>
</div>
<!-- Product 2 -->
<div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-xl transition duration-300 animate-slide-in" style="animation-delay: 0.1s;">
<div class="relative">
<img src="https://images.unsplash.com/photo-1517336714731-489689fd1ca8?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1026&q=80" alt="MacBook Pro" class="w-full h-48 object-cover">
<span class="absolute top-2 right-2 bg-red-500 text-white text-xs px-2 py-1 rounded-full">SALE</span>
</div>
<div class="p-4">
<h3 class="font-semibold text-lg mb-1">MacBook Pro</h3>
<p class="text-gray-600 text-sm mb-2">16-inch, M2 Pro chip, 16GB RAM</p>
<div class="flex justify-between items-center">
<div>
<span class="font-bold text-indigo-600">$2,199.00</span>
<span class="text-sm text-gray-500 line-through ml-2">$2,499.00</span>
</div>
<button onclick="addToCart('MacBook Pro', 2199, 'https://images.unsplash.com/photo-1517336714731-489689fd1ca8?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1026&q=80')" class="bg-indigo-600 text-white px-3 py-1 rounded hover:bg-indigo-700 transition">
<i class="fas fa-cart-plus mr-1"></i> Add
</button>
</div>
</div>
</div>
<!-- Product 3 -->
<div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-xl transition duration-300 animate-slide-in" style="animation-delay: 0.2s;">
<img src="https://images.unsplash.com/photo-1523275335684-37898b6baf30?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1099&q=80" alt="Smart Watch" class="w-full h-48 object-cover">
<div class="p-4">
<h3 class="font-semibold text-lg mb-1">Smart Watch</h3>
<p class="text-gray-600 text-sm mb-2">Fitness tracker & heart rate monitor</p>
<div class="flex justify-between items-center">
<span class="font-bold text-indigo-600">$199.99</span>
<button onclick="addToCart('Smart Watch', 199.99, 'https://images.unsplash.com/photo-1523275335684-37898b6baf30?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1099&q=80')" class="bg-indigo-600 text-white px-3 py-1 rounded hover:bg-indigo-700 transition">
<i class="fas fa-cart-plus mr-1"></i> Add
</button>
</div>
</div>
</div>
<!-- Product 4 -->
<div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-xl transition duration-300 animate-slide-in" style="animation-delay: 0.3s;">
<div class="relative">
<img src="https://images.unsplash.com/photo-1505740420928-5e560c06d30e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80" alt="Bluetooth Speaker" class="w-full h-48 object-cover">
<span class="absolute top-2 right-2 bg-yellow-500 text-white text-xs px-2 py-1 rounded-full">POPULAR</span>
</div>
<div class="p-4">
<h3 class="font-semibold text-lg mb-1">Bluetooth Speaker</h3>
<p class="text-gray-600 text-sm mb-2">Portable with 20h battery life</p>
<div class="flex justify-between items-center">
<span class="font-bold text-indigo-600">$89.99</span>
<button onclick="addToCart('Bluetooth Speaker', 89.99, 'https://images.unsplash.com/photo-1505740420928-5e560c06d30e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80')" class="bg-indigo-600 text-white px-3 py-1 rounded hover:bg-indigo-700 transition">
<i class="fas fa-cart-plus mr-1"></i> Add
</button>
</div>
</div>
</div>
</div>
</section>
<!-- Special Offers -->
<section class="mb-12">
<h2 class="text-2xl font-bold mb-6 text-gray-800 border-b pb-2">Special Offers</h2>
<div class="bg-gradient-to-r from-purple-500 to-indigo-600 rounded-xl shadow-lg p-6 text-white">
<div class="flex flex-col md:flex-row items-center">
<div class="md:w-1/2 mb-6 md:mb-0">
<h3 class="text-2xl font-bold mb-2">Limited Time Offer!</h3>
<p class="mb-4">Get 15% off on all products when you spend over $200. Use code: SHOP15</p>
<button class="bg-white text-indigo-600 px-4 py-2 rounded-lg font-semibold hover:bg-gray-100 transition">
Shop Now
</button>
</div>
<div class="md:w-1/2 flex justify-center">
<img src="https://images.unsplash.com/photo-1607082348824-0a96f2a4b9da?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80" alt="Special Offer" class="h-40 rounded-lg shadow-md">
</div>
</div>
</div>
</section>
</main>
<!-- Shopping Cart Sidebar -->
<div id="cartSidebar" class="fixed top-0 right-0 w-full sm:w-96 h-full bg-white shadow-xl z-50 transform translate-x-full transition-transform duration-300 ease-in-out overflow-y-auto">
<div class="p-6">
<div class="flex justify-between items-center mb-6 border-b pb-4">
<h2 class="text-2xl font-bold text-gray-800">
<i class="fas fa-shopping-cart mr-2 text-indigo-600"></i> Your Cart
</h2>
<button id="closeCart" class="text-gray-500 hover:text-gray-700">
<i class="fas fa-times text-xl"></i>
</button>
</div>
<div id="cartItems" class="mb-6">
<!-- Cart items will be added here dynamically -->
<div id="emptyCart" class="text-center py-12 animate-pulse">
<i class="fas fa-shopping-cart text-5xl text-gray-300 mb-4"></i>
<p class="text-gray-500 font-medium">Your cart is empty</p>
<p class="text-gray-400 text-sm">Start shopping to add items</p>
</div>
</div>
<div id="cartSummary" class="border-t pt-4 hidden">
<div class="flex justify-between mb-2">
<span class="text-gray-600">Subtotal:</span>
<span id="subtotal" class="font-semibold">$0.00</span>
</div>
<div class="flex justify-between mb-2">
<span class="text-gray-600">Shipping:</span>
<span id="shipping" class="font-semibold">$0.00</span>
</div>
<div class="flex justify-between mb-4 text-lg">
<span class="text-gray-800 font-bold">Total:</span>
<span id="total" class="font-bold text-indigo-600">$0.00</span>
</div>
<button id="checkoutBtn" class="w-full bg-indigo-600 text-white py-3 rounded-lg font-semibold hover:bg-indigo-700 transition flex items-center justify-center">
<i class="fas fa-credit-card mr-2"></i> Proceed to Checkout
</button>
<p class="text-center text-gray-500 text-sm mt-2">or <button id="continueShopping" class="text-indigo-600 hover:underline">continue shopping</button></p>
</div>
</div>
</div>
<!-- Overlay -->
<div id="overlay" class="fixed inset-0 bg-black bg-opacity-50 z-40 hidden"></div>
<!-- Notification Toast -->
<div id="toast" class="fixed bottom-4 right-4 bg-green-500 text-white px-6 py-3 rounded-lg shadow-lg transform translate-y-10 opacity-0 transition-all duration-300 flex items-center">
<i class="fas fa-check-circle mr-2"></i>
<span id="toastMessage">Item added to cart!</span>
</div>
<script>
// Cart data
let cart = [];
// DOM elements
const cartButton = document.getElementById('cartButton');
const cartSidebar = document.getElementById('cartSidebar');
const closeCart = document.getElementById('closeCart');
const overlay = document.getElementById('overlay');
const cartItems = document.getElementById('cartItems');
const emptyCart = document.getElementById('emptyCart');
const cartSummary = document.getElementById('cartSummary');
const subtotalEl = document.getElementById('subtotal');
const shippingEl = document.getElementById('shipping');
const totalEl = document.getElementById('total');
const cartCount = document.getElementById('cartCount');
const checkoutBtn = document.getElementById('checkoutBtn');
const continueShopping = document.getElementById('continueShopping');
const toast = document.getElementById('toast');
const toastMessage = document.getElementById('toastMessage');
// Toggle cart sidebar
cartButton.addEventListener('click', () => {
cartSidebar.classList.remove('translate-x-full');
overlay.classList.remove('hidden');
document.body.style.overflow = 'hidden';
});
closeCart.addEventListener('click', closeCartSidebar);
overlay.addEventListener('click', closeCartSidebar);
continueShopping.addEventListener('click', closeCartSidebar);
function closeCartSidebar() {
cartSidebar.classList.add('translate-x-full');
overlay.classList.add('hidden');
document.body.style.overflow = 'auto';
}
// Add to cart function
function addToCart(name, price, image) {
// Check if item already exists in cart
const existingItem = cart.find(item => item.name === name);
if (existingItem) {
existingItem.quantity += 1;
} else {
cart.push({
name,
price,
image,
quantity: 1
});
}
updateCart();
showToast(`${name} added to cart`);
}
// Update cart UI
function updateCart() {
// Update cart count
const totalItems = cart.reduce((sum, item) => sum + item.quantity, 0);
cartCount.textContent = totalItems;
// Update cart items
if (cart.length === 0) {
emptyCart.classList.remove('hidden');
cartSummary.classList.add('hidden');
} else {
emptyCart.classList.add('hidden');
cartSummary.classList.remove('hidden');
// Clear existing items
cartItems.innerHTML = '';
// Add each item to cart
cart.forEach((item, index) => {
const itemTotal = (item.price * item.quantity).toFixed(2);
const itemEl = document.createElement('div');
itemEl.className = 'flex items-center mb-4 pb-4 border-b';
itemEl.innerHTML = `
<div class="flex-shrink-0 w-16 h-16 bg-gray-200 rounded-md overflow-hidden">
<img src="${item.image}" alt="${item.name}" class="w-full h-full object-cover">
</div>
<div class="ml-4 flex-grow">
<h3 class="font-medium text-gray-800">${item.name}</h3>
<p class="text-gray-600 text-sm">$${item.price.toFixed(2)}</p>
<div class="flex items-center mt-1">
<button onclick="updateQuantity(${index}, -1)" class="text-gray-500 hover:text-indigo-600">
<i class="fas fa-minus text-xs"></i>
</button>
<span class="mx-2 text-gray-800">${item.quantity}</span>
<button onclick="updateQuantity(${index}, 1)" class="text-gray-500 hover:text-indigo-600">
<i class="fas fa-plus text-xs"></i>
</button>
</div>
</div>
<div class="ml-4 text-right">
<span class="font-semibold">$${itemTotal}</span>
<button onclick="removeItem(${index})" class="block mt-1 text-red-500 hover:text-red-700 text-sm">
<i class="fas fa-trash"></i>
</button>
</div>
`;
cartItems.appendChild(itemEl);
});
// Update summary
const subtotal = cart.reduce((sum, item) => sum + (item.price * item.quantity), 0);
const shipping = subtotal > 0 ? (subtotal > 50 ? 0 : 5.99) : 0;
const total = subtotal + shipping;
subtotalEl.textContent = `$${subtotal.toFixed(2)}`;
shippingEl.textContent = shipping === 0 ? 'FREE' : `$${shipping.toFixed(2)}`;
totalEl.textContent = `$${total.toFixed(2)}`;
}
}
// Update item quantity
function updateQuantity(index, change) {
cart[index].quantity += change;
// Remove item if quantity reaches 0
if (cart[index].quantity <= 0) {
cart.splice(index, 1);
showToast('Item removed from cart');
}
updateCart();
}
// Remove item from cart
function removeItem(index) {
const itemName = cart[index].name;
cart.splice(index, 1);
updateCart();
showToast(`${itemName} removed from cart`);
}
// Show toast notification
function showToast(message) {
toastMessage.textContent = message;
toast.classList.remove('translate-y-10', 'opacity-0');
toast.classList.add('translate-y-0', 'opacity-100');
setTimeout(() => {
toast.classList.remove('translate-y-0', 'opacity-100');
toast.classList.add('translate-y-10', 'opacity-0');
}, 3000);
}
// Checkout button
checkoutBtn.addEventListener('click', () => {
if (cart.length > 0) {
showToast('Checkout functionality would go here!');
// In a real app, you would redirect to checkout page or show a checkout form
}
});
// Initialize cart
updateCart();
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=rajeshuriti/shopsphere" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>