Files
AnchorOS/app/globals.css
Marco Gallegos 583a25a6f6 feat: implement customer registration flow and business hours system
Major changes:
- Add customer registration with email/phone lookup (app/booking/registro)
- Add customers API endpoint (app/api/customers/route)
- Implement business hours for locations (mon-fri 10-7, sat 10-6, sun closed)
- Fix availability function type casting issues
- Add business hours utilities (lib/utils/business-hours.ts)
- Update Location type to include business_hours JSONB
- Add mock payment component for testing
- Remove Supabase auth from booking flow
- Fix /cita redirect path in booking flow

Database migrations:
- Add category column to services table
- Add business_hours JSONB column to locations table
- Fix availability functions with proper type casting
- Update get_detailed_availability to use business_hours

Features:
- Customer lookup by email or phone
- Auto-redirect to registration if customer not found
- Pre-fill customer data if exists
- Business hours per day of week
- Location-specific opening/closing times
2026-01-17 00:29:49 -06:00

310 lines
6.1 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--bone-white: #F6F1EC;
--soft-cream: #EFE7DE;
--mocha-taupe: #B8A89A;
--deep-earth: #6F5E4F;
--charcoal-brown: #3F362E;
}
body {
color: var(--charcoal-brown);
background: var(--bone-white);
}
h1, h2, h3, h4, h5, h6 {
font-family: 'Playfair Display', serif;
}
}
@layer components {
.booking-header {
@apply fixed top-0 left-0 right-0 z-50;
background: var(--bone-white);
backdrop-filter: blur(8px);
border-bottom: 1px solid var(--mocha-taupe);
}
.booking-nav {
@apply max-w-7xl mx-auto px-8 py-4 flex items-center justify-between;
}
.booking-nav .logo a {
@apply text-xl tracking-tight hover:opacity-80 transition-opacity;
color: var(--charcoal-brown);
}
.booking-nav .nav-actions {
@apply flex items-center gap-4;
}
.nav-primary {
@apply max-w-7xl mx-auto px-8 py-6 flex items-center justify-between;
}
.logo a {
@apply text-2xl tracking-tight hover:opacity-80 transition-opacity;
color: var(--charcoal-brown);
}
.nav-links {
@apply hidden md:flex items-center space-x-12;
}
.nav-links a {
@apply hover:opacity-70 transition-opacity font-medium;
color: var(--charcoal-brown);
}
.nav-actions {
@apply flex items-center;
}
.btn-primary {
@apply inline-flex items-center justify-center px-8 py-3 border text-sm font-medium rounded transition-all;
background: var(--deep-earth);
color: var(--bone-white);
border-color: var(--deep-earth);
}
.btn-primary:hover {
opacity: 0.85;
}
.btn-secondary {
@apply inline-flex items-center justify-center px-8 py-3 border text-sm font-medium rounded transition-all;
background: var(--soft-cream);
color: var(--charcoal-brown);
border-color: var(--mocha-taupe);
}
.btn-secondary:hover {
background: var(--mocha-taupe);
}
.hero {
@apply min-h-screen flex items-center justify-center pt-24;
background: var(--bone-white);
}
.hero-content {
@apply max-w-7xl mx-auto px-8 text-center;
}
.logo-mark {
@apply w-24 h-24 mx-auto mb-12;
color: var(--charcoal-brown);
}
.hero h1 {
@apply text-7xl md:text-9xl mb-6 tracking-tight;
color: var(--charcoal-brown);
}
.hero h2 {
@apply text-2xl md:text-3xl mb-8;
color: var(--charcoal-brown);
opacity: 0.85;
}
.hero p {
@apply text-xl mb-12 max-w-2xl mx-auto leading-relaxed;
color: var(--charcoal-brown);
opacity: 0.7;
}
.hero-actions {
@apply flex items-center justify-center gap-6 flex-wrap;
}
.hero-image {
@apply mt-16 rounded-2xl overflow-hidden;
background: var(--soft-cream);
}
.foundation {
@apply max-w-7xl mx-auto px-8 py-32 grid md:grid-cols-2 gap-16 items-center;
}
.foundation article {
@apply space-y-8;
}
.foundation h3 {
@apply text-sm font-semibold tracking-widest uppercase mb-4;
color: var(--mocha-taupe);
}
.foundation h4 {
@apply text-4xl md:text-5xl mb-6;
color: var(--charcoal-brown);
}
.foundation p {
@apply text-xl leading-relaxed;
color: var(--charcoal-brown);
opacity: 0.85;
}
.foundation-image {
@apply rounded-2xl overflow-hidden h-96;
background: var(--soft-cream);
}
.services-preview {
@apply max-w-7xl mx-auto px-8 py-32;
}
.services-preview h3 {
@apply text-4xl md:text-5xl mb-16 text-center;
color: var(--charcoal-brown);
}
.service-cards {
@apply grid md:grid-cols-3 gap-12 mb-16;
}
.service-card {
@apply p-10 rounded-2xl transition-shadow;
background: var(--soft-cream);
}
.service-card h4 {
@apply text-2xl mb-6;
color: var(--charcoal-brown);
}
.service-card p {
color: var(--charcoal-brown);
opacity: 0.8;
}
.testimonials {
@apply max-w-7xl mx-auto px-8 py-32 rounded-3xl mb-12;
background: var(--soft-cream);
}
.testimonials h3 {
@apply text-4xl md:text-5xl mb-16 text-center;
color: var(--charcoal-brown);
}
.testimonial-grid {
@apply grid md:grid-cols-2 gap-12 mb-16;
}
.testimonial {
@apply p-10 rounded-2xl;
background: var(--bone-white);
}
.testimonial .stars {
@apply text-2xl mb-6;
color: var(--mocha-taupe);
}
.testimonial p {
@apply text-xl mb-6 italic leading-relaxed;
color: var(--charcoal-brown);
opacity: 0.85;
}
.testimonial cite {
@apply font-semibold not-italic block;
color: var(--charcoal-brown);
}
.site-footer {
@apply py-16;
background: var(--charcoal-brown);
}
.site-footer a {
@apply hover:opacity-70 transition-opacity;
color: var(--mocha-taupe);
}
.footer-brand {
@apply max-w-7xl mx-auto px-8 mb-12;
}
.footer-brand span {
@apply text-2xl block mb-3;
color: var(--bone-white);
}
.footer-brand p {
color: var(--mocha-taupe);
}
.footer-links {
@apply max-w-7xl mx-auto px-8 mb-12 flex flex-wrap gap-8;
}
.footer-legal {
@apply max-w-7xl mx-auto px-8 mb-12 flex flex-wrap gap-8;
}
.footer-contact {
@apply max-w-7xl mx-auto px-8 flex flex-wrap gap-8;
color: var(--mocha-taupe);
}
.section {
@apply py-32;
}
.section-header {
@apply max-w-7xl mx-auto px-8 mb-16;
}
.section-title {
@apply text-4xl md:text-5xl mb-6;
color: var(--charcoal-brown);
}
.section-subtitle {
@apply text-xl max-w-2xl leading-relaxed;
color: var(--charcoal-brown);
opacity: 0.8;
}
.select-content {
background: var(--bone-white);
border: 1px solid var(--mocha-taupe);
}
.select-item {
color: var(--charcoal-brown);
transition: background 0.15s;
}
.select-item:hover,
.select-item[data-highlighted] {
background: var(--soft-cream);
}
.select-item[data-state="checked"] {
background: var(--soft-cream);
font-weight: 500;
}
.select-trigger {
background: var(--bone-white);
border: 1px solid var(--mocha-taupe);
color: var(--charcoal-brown);
}
.select-trigger:hover {
border-color: var(--deep-earth);
}
.select-trigger[data-state="open"] {
border-color: var(--deep-earth);
}
}