167 lines
9.8 KiB
HTML
Executable File
167 lines
9.8 KiB
HTML
Executable File
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<script>
|
|
window.FontAwesomeConfig = { autoReplaceSvg: 'nest' };
|
|
</script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/js/all.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
<title>Appointments — TrimTime</title>
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
<script>
|
|
tailwind.config = {
|
|
theme: {
|
|
extend: {
|
|
colors: { ink: '#111b15', stone: '#f4f6f4', surface: '#ffffff', muted: '#6c7870', line: '#e1e7e2', accent: '#10b981' },
|
|
fontFamily: { sans: ['Inter', 'sans-serif'] },
|
|
borderRadius: { jumbo: '1.5rem', tile: '1rem' }
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</head>
|
|
<body class="bg-stone text-ink min-h-screen pb-32">
|
|
|
|
<!-- NOTE: Supersedes "16-NextChair - Customer - Appoint.html", which only
|
|
showed Finished/Cancelled history. This adds the missing Upcoming
|
|
view with Cancel/Reschedule/Details actions, per docs/implementation-plan.md §6. -->
|
|
|
|
<header class="px-6 py-6 bg-white border-b border-line sticky top-0 z-40">
|
|
<h1 class="text-2xl font-bold tracking-tight mb-5">Appointments</h1>
|
|
<div class="flex gap-2 bg-stone rounded-full p-1">
|
|
<button id="tab-upcoming" onclick="switchTab('upcoming')" class="flex-1 py-2.5 rounded-full text-xs font-bold uppercase tracking-widest bg-ink text-white transition-all">Upcoming</button>
|
|
<button id="tab-past" onclick="switchTab('past')" class="flex-1 py-2.5 rounded-full text-xs font-bold uppercase tracking-widest text-muted transition-all">Past</button>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="mt-6 px-6">
|
|
|
|
<!-- Upcoming Tab -->
|
|
<div id="content-upcoming" class="space-y-4">
|
|
<a href="25-NextChair - Customer - Appointment Details.html" class="block bg-white p-5 rounded-jumbo border border-line shadow-sm hover:border-ink transition-all">
|
|
<div class="flex items-start justify-between mb-4">
|
|
<span class="inline-block px-3 py-1 bg-accent/10 text-accent text-[10px] font-bold uppercase tracking-widest rounded-full">Confirmed</span>
|
|
<div class="text-right">
|
|
<p class="text-sm font-bold">Sat, Oct 12</p>
|
|
<p class="text-xs text-muted">2:00 PM</p>
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center gap-3 mb-4">
|
|
<img src="https://storage.googleapis.com/uxpilot-auth.appspot.com/avatars/avatar-3.jpg" class="w-10 h-10 rounded-full object-cover" alt="Marcus Reed">
|
|
<div>
|
|
<h3 class="text-sm font-bold">Standard Cut</h3>
|
|
<p class="text-xs text-muted">with Marcus Reed</p>
|
|
</div>
|
|
</div>
|
|
<div class="flex gap-2 pt-4 border-t border-line">
|
|
<a href="27-NextChair - Customer - Reschedule.html" onclick="event.stopPropagation()" class="flex-1 text-center py-2.5 bg-stone rounded-lg text-xs font-bold uppercase tracking-widest">Reschedule</a>
|
|
<button onclick="event.stopPropagation(); event.preventDefault();" class="flex-1 py-2.5 border border-red-200 text-red-500 rounded-lg text-xs font-bold uppercase tracking-widest hover:bg-red-50 transition-colors">Cancel</button>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="25-NextChair - Customer - Appointment Details.html" class="block bg-white p-5 rounded-jumbo border border-line shadow-sm hover:border-ink transition-all">
|
|
<div class="flex items-start justify-between mb-4">
|
|
<span class="inline-block px-3 py-1 bg-amber-100 text-amber-700 text-[10px] font-bold uppercase tracking-widest rounded-full">Pending Approval</span>
|
|
<div class="text-right">
|
|
<p class="text-sm font-bold">Thu, Oct 24</p>
|
|
<p class="text-xs text-muted">11:30 AM</p>
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center gap-3 mb-4">
|
|
<img src="https://storage.googleapis.com/uxpilot-auth.appspot.com/avatars/avatar-4.jpg" class="w-10 h-10 rounded-full object-cover" alt="Leo Vance">
|
|
<div>
|
|
<h3 class="text-sm font-bold">Beard Trim</h3>
|
|
<p class="text-xs text-muted">with Leo Vance</p>
|
|
</div>
|
|
</div>
|
|
<div class="pt-4 border-t border-line">
|
|
<p class="text-[11px] text-muted">We'll notify you once the shop confirms this time.</p>
|
|
</div>
|
|
</a>
|
|
|
|
<!-- Empty state reference (hidden) — shown instead of the list above when there are no upcoming appointments -->
|
|
<div class="hidden flex-col items-center text-center py-16 px-6">
|
|
<div class="w-16 h-16 bg-white border border-line rounded-full flex items-center justify-center text-muted text-2xl mb-5">
|
|
<i class="fa-regular fa-calendar"></i>
|
|
</div>
|
|
<h3 class="text-base font-bold mb-1">No upcoming appointments</h3>
|
|
<p class="text-sm text-muted mb-6">Book your next visit in a few taps.</p>
|
|
<a href="15-NextChair - Customer - Home.html" class="bg-ink text-white px-8 py-3.5 rounded-full text-xs font-bold uppercase tracking-widest">Book Now</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Past Tab -->
|
|
<div id="content-past" class="hidden space-y-4">
|
|
<div class="bg-white rounded-jumbo border border-line p-4 flex">
|
|
<div class="flex-1 pr-4">
|
|
<span class="inline-block px-3 py-1 bg-stone text-muted text-[10px] font-bold uppercase tracking-widest rounded-full mb-3">Completed</span>
|
|
<h3 class="text-sm font-bold mb-1">Haircut & Style</h3>
|
|
<p class="text-xs text-muted mb-3">with Jay The Barber</p>
|
|
<button class="bg-ink text-white px-5 py-2.5 rounded-lg text-xs font-bold uppercase tracking-widest">Book again</button>
|
|
</div>
|
|
<div class="w-16 pl-4 border-l border-line flex flex-col items-center justify-center text-center">
|
|
<span class="text-[10px] text-muted uppercase">Aug</span>
|
|
<span class="text-2xl font-light">1</span>
|
|
</div>
|
|
</div>
|
|
<div class="bg-white rounded-jumbo border border-line p-4 flex">
|
|
<div class="flex-1 pr-4">
|
|
<span class="inline-block px-3 py-1 bg-red-50 text-red-500 text-[10px] font-bold uppercase tracking-widest rounded-full mb-3">Cancelled</span>
|
|
<h3 class="text-sm font-bold mb-1">Haircut & Style</h3>
|
|
<p class="text-xs text-muted mb-3">with Jay The Barber</p>
|
|
<button class="bg-ink text-white px-5 py-2.5 rounded-lg text-xs font-bold uppercase tracking-widest">Book again</button>
|
|
</div>
|
|
<div class="w-16 pl-4 border-l border-line flex flex-col items-center justify-center text-center">
|
|
<span class="text-[10px] text-muted uppercase">Apr</span>
|
|
<span class="text-2xl font-light">15</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<script>
|
|
function switchTab(tab) {
|
|
const upcoming = document.getElementById('content-upcoming');
|
|
const past = document.getElementById('content-past');
|
|
const btnUpcoming = document.getElementById('tab-upcoming');
|
|
const btnPast = document.getElementById('tab-past');
|
|
if (tab === 'upcoming') {
|
|
upcoming.classList.remove('hidden');
|
|
past.classList.add('hidden');
|
|
btnUpcoming.classList.add('bg-ink', 'text-white');
|
|
btnUpcoming.classList.remove('text-muted');
|
|
btnPast.classList.remove('bg-ink', 'text-white');
|
|
btnPast.classList.add('text-muted');
|
|
} else {
|
|
past.classList.remove('hidden');
|
|
upcoming.classList.add('hidden');
|
|
btnPast.classList.add('bg-ink', 'text-white');
|
|
btnPast.classList.remove('text-muted');
|
|
btnUpcoming.classList.remove('bg-ink', 'text-white');
|
|
btnUpcoming.classList.add('text-muted');
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<!-- Bottom Navigation -->
|
|
<nav class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t border-line py-2 px-5 flex justify-between items-center">
|
|
<a href="23-NextChair - Customer - Home (Logged In).html" class="flex flex-col items-center gap-1 text-muted hover:text-ink transition-colors">
|
|
<i class="fa-solid fa-house text-xl"></i>
|
|
<span class="text-[10px] font-bold uppercase tracking-widest">Home</span>
|
|
</a>
|
|
<a href="24-NextChair - Customer - Appointments Upcoming.html" class="flex flex-col items-center gap-1 text-ink">
|
|
<i class="fa-solid fa-calendar-check text-xl"></i>
|
|
<span class="text-[10px] font-bold uppercase tracking-widest">Bookings</span>
|
|
</a>
|
|
<a href="10-NextChair - Customer - Setting.html" class="flex flex-col items-center gap-1 text-muted hover:text-ink transition-colors">
|
|
<i class="fa-solid fa-user text-xl"></i>
|
|
<span class="text-[10px] font-bold uppercase tracking-widest">Settings</span>
|
|
</a>
|
|
</nav>
|
|
|
|
</body>
|
|
</html>
|