main
tsx 84 lines 3.27 KB
Raw
1 import Image from "next/image";
2 import { type Studio } from "@/lib/data";
3 import { IconStar, IconPin, IconPhone, IconClock } from "@/components/ui/icons";
4
5 export default function StudioCard({ studio }: { studio: Studio }) {
6 return (
7 <article className="border-b border-white/6 last:border-0">
8 {/* Image */}
9 <div className="relative w-full h-52 overflow-hidden bg-nord-gray">
10 <Image
11 src={studio.image}
12 alt={studio.name}
13 fill
14 className="object-cover brightness-75 hover:brightness-90 transition-all duration-500"
15 sizes="(max-width: 768px) 100vw, 680px"
16 />
17 <div className="absolute inset-0 bg-gradient-to-t from-nord-black/80 via-transparent to-transparent" />
18 <div className="absolute top-4 right-4">
19 <span
20 className={`text-[9px] uppercase tracking-widest font-medium px-2.5 py-1 border ${
21 studio.openNow
22 ? "border-emerald-500/40 text-emerald-400 bg-emerald-950/60"
23 : "border-red-500/30 text-red-400/80 bg-red-950/60"
24 }`}
25 >
26 {studio.openNow ? "Open" : "Closed"}
27 </span>
28 </div>
29 <div className="absolute bottom-4 left-4">
30 <span className="text-[9px] uppercase tracking-widest text-nord-white/50">
31 {studio.neighbourhood}
32 </span>
33 </div>
34 </div>
35
36 {/* Content */}
37 <div className="px-6 py-5">
38 <div className="flex items-start justify-between mb-3">
39 <h3 className="text-lg font-semibold text-nord-white tracking-tightest">{studio.name}</h3>
40 <div className="flex items-center gap-1.5 mt-0.5">
41 <IconStar />
42 <span className="text-sm font-semibold text-nord-white">{studio.rating}</span>
43 <span className="text-nord-white/30 text-xs">({studio.reviews})</span>
44 </div>
45 </div>
46
47 <div className="flex flex-wrap gap-1.5 mb-4">
48 {studio.services.map((s) => (
49 <span
50 key={s}
51 className="text-[9px] uppercase tracking-widest text-nord-white/50 bg-white/5 border border-white/8 px-2 py-1"
52 >
53 {s}
54 </span>
55 ))}
56 <span className="text-[9px] uppercase tracking-widest text-nord-white/30 px-2 py-1">
57 {studio.price}
58 </span>
59 </div>
60
61 <div className="space-y-1.5 mb-5">
62 <div className="flex items-center gap-2">
63 <IconPin />
64 <span className="text-nord-white/50 text-xs">{studio.location}</span>
65 </div>
66 <div className="flex items-center gap-2">
67 <IconPhone />
68 <a href={`tel:${studio.phone}`} className="text-nord-white/50 text-xs hover:text-nord-white transition-colors">
69 {studio.phone}
70 </a>
71 </div>
72 <div className="flex items-center gap-2">
73 <IconClock />
74 <span className="text-nord-white/50 text-xs">{studio.hours}</span>
75 </div>
76 </div>
77
78 <button className="w-full py-3.5 bg-nord-white text-nord-black font-bold text-[11px] uppercase tracking-widest rounded-none hover:bg-zinc-200 transition-colors active:scale-[0.98] transform">
79 Book Now
80 </button>
81 </div>
82 </article>
83 );
84 }