Refactor: Standardize card and grid layouts

This commit is contained in:
gpt-engineer-app[bot]
2025-10-17 22:18:31 +00:00
parent 9dff5a3e2b
commit fc53015448
9 changed files with 18 additions and 18 deletions

View File

@@ -26,7 +26,7 @@ export function DesignerCard({ company }: DesignerCardProps) {
onClick={handleClick} onClick={handleClick}
> >
{/* Header Image/Logo Section */} {/* Header Image/Logo Section */}
<div className="relative aspect-video bg-gradient-to-br from-background to-muted/50 flex items-center justify-center border-b border-border"> <div className="relative aspect-[4/3] bg-gradient-to-br from-background to-muted/50 flex items-center justify-center border-b border-border">
{/* Background Gradient Overlay */} {/* Background Gradient Overlay */}
<div className="absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-accent/5" /> <div className="absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-accent/5" />
@@ -54,9 +54,9 @@ export function DesignerCard({ company }: DesignerCardProps) {
</div> </div>
</div> </div>
<CardContent className="p-6 space-y-4"> <CardContent className="p-4 space-y-3">
{/* Company Name */} {/* Company Name */}
<h3 className="font-semibold text-lg mb-2 group-hover:text-primary transition-colors line-clamp-1"> <h3 className="font-semibold text-lg mb-2 group-hover:text-primary transition-colors line-clamp-2 min-h-[3.5rem]">
{company.name} {company.name}
</h3> </h3>

View File

@@ -40,7 +40,7 @@ export function ManufacturerCard({ company }: ManufacturerCardProps) {
onClick={handleClick} onClick={handleClick}
> >
{/* Logo/Image Section */} {/* Logo/Image Section */}
<div className="aspect-video relative bg-gradient-to-br from-primary/20 via-primary/10 to-transparent overflow-hidden"> <div className="aspect-[4/3] relative bg-gradient-to-br from-primary/20 via-primary/10 to-transparent overflow-hidden">
{(company.card_image_url || company.card_image_id) ? ( {(company.card_image_url || company.card_image_id) ? (
<img <img
src={company.card_image_url || getCloudflareImageUrl(company.card_image_id, 'card')} src={company.card_image_url || getCloudflareImageUrl(company.card_image_id, 'card')}
@@ -85,9 +85,9 @@ export function ManufacturerCard({ company }: ManufacturerCardProps) {
)} )}
</div> </div>
<CardContent className="p-3 md:p-4 space-y-2 md:space-y-3"> <CardContent className="p-4 space-y-3">
{/* Company Name */} {/* Company Name */}
<h3 className="text-base md:text-lg font-semibold group-hover:text-primary transition-colors line-clamp-2 min-h-[2.5rem] md:min-h-[3rem]"> <h3 className="text-lg font-semibold group-hover:text-primary transition-colors line-clamp-2 min-h-[3.5rem]">
{company.name} {company.name}
</h3> </h3>

View File

@@ -27,7 +27,7 @@ const OperatorCard = ({ company }: OperatorCardProps) => {
onClick={handleClick} onClick={handleClick}
> >
{/* Logo/Image Section */} {/* Logo/Image Section */}
<div className="aspect-video relative bg-gradient-to-br from-primary/20 via-primary/10 to-transparent overflow-hidden"> <div className="aspect-[4/3] relative bg-gradient-to-br from-primary/20 via-primary/10 to-transparent overflow-hidden">
{(company.card_image_url || company.card_image_id) ? ( {(company.card_image_url || company.card_image_id) ? (
<img <img
src={company.card_image_url || getCloudflareImageUrl(company.card_image_id, 'card')} src={company.card_image_url || getCloudflareImageUrl(company.card_image_id, 'card')}
@@ -74,7 +74,7 @@ const OperatorCard = ({ company }: OperatorCardProps) => {
<CardContent className="p-4 space-y-3"> <CardContent className="p-4 space-y-3">
{/* Company Name */} {/* Company Name */}
<h3 className="text-lg font-semibold group-hover:text-primary transition-colors line-clamp-2"> <h3 className="text-lg font-semibold group-hover:text-primary transition-colors line-clamp-2 min-h-[3.5rem]">
{company.name} {company.name}
</h3> </h3>

View File

@@ -27,7 +27,7 @@ const ParkOwnerCard = ({ company }: ParkOwnerCardProps) => {
onClick={handleClick} onClick={handleClick}
> >
{/* Logo/Image Section */} {/* Logo/Image Section */}
<div className="aspect-video relative bg-gradient-to-br from-primary/20 via-primary/10 to-transparent overflow-hidden"> <div className="aspect-[4/3] relative bg-gradient-to-br from-primary/20 via-primary/10 to-transparent overflow-hidden">
{(company.card_image_url || company.card_image_id) ? ( {(company.card_image_url || company.card_image_id) ? (
<img <img
src={company.card_image_url || getCloudflareImageUrl(company.card_image_id, 'card')} src={company.card_image_url || getCloudflareImageUrl(company.card_image_id, 'card')}
@@ -74,7 +74,7 @@ const ParkOwnerCard = ({ company }: ParkOwnerCardProps) => {
<CardContent className="p-4 space-y-3"> <CardContent className="p-4 space-y-3">
{/* Company Name */} {/* Company Name */}
<h3 className="text-lg font-semibold group-hover:text-primary transition-colors line-clamp-2"> <h3 className="text-lg font-semibold group-hover:text-primary transition-colors line-clamp-2 min-h-[3.5rem]">
{company.name} {company.name}
</h3> </h3>

View File

@@ -74,10 +74,10 @@ export function ParkCard({ park }: ParkCardProps) {
</Badge> </Badge>
</div> </div>
<CardContent className="p-3 lg:p-3 xl:p-3.5 2xl:p-3 space-y-2 lg:space-y-2 xl:space-y-2.5"> <CardContent className="p-4 space-y-3">
{/* Header */} {/* Header */}
<div className="space-y-1"> <div className="space-y-1">
<h3 className="font-bold text-lg group-hover:text-primary transition-colors line-clamp-1"> <h3 className="font-bold text-lg group-hover:text-primary transition-colors line-clamp-2 min-h-[3.5rem]">
{park.name} {park.name}
</h3> </h3>

View File

@@ -85,10 +85,10 @@ export function RideCard({ ride, showParkName = true, className, parkSlug }: Rid
</Badge> </Badge>
</div> </div>
<CardContent className="p-3 lg:p-3 xl:p-3.5 2xl:p-3 space-y-2 lg:space-y-2 xl:space-y-2.5"> <CardContent className="p-4 space-y-3">
{/* Header */} {/* Header */}
<div className="space-y-1"> <div className="space-y-1">
<h3 className="font-bold text-lg group-hover:text-primary transition-colors line-clamp-1"> <h3 className="font-bold text-lg group-hover:text-primary transition-colors line-clamp-2 min-h-[3.5rem]">
{ride.name} {ride.name}
</h3> </h3>

View File

@@ -42,7 +42,7 @@ export function RideModelCard({ model, manufacturerSlug }: RideModelCardProps) {
return ( return (
<Card className="overflow-hidden hover:shadow-lg transition-shadow cursor-pointer group"> <Card className="overflow-hidden hover:shadow-lg transition-shadow cursor-pointer group">
<div <div
className="aspect-video bg-gradient-to-br from-primary/10 via-secondary/10 to-accent/10 relative overflow-hidden" className="aspect-[4/3] bg-gradient-to-br from-primary/10 via-secondary/10 to-accent/10 relative overflow-hidden"
> >
{(cardImageUrl || cardImageId) ? ( {(cardImageUrl || cardImageId) ? (
<img <img
@@ -64,7 +64,7 @@ export function RideModelCard({ model, manufacturerSlug }: RideModelCardProps) {
</div> </div>
<CardContent className="p-4 space-y-3"> <CardContent className="p-4 space-y-3">
<h3 className="font-semibold text-lg line-clamp-1 group-hover:text-primary transition-colors"> <h3 className="font-semibold text-lg line-clamp-2 min-h-[3.5rem] group-hover:text-primary transition-colors">
{model.name} {model.name}
</h3> </h3>

View File

@@ -206,7 +206,7 @@ const ParkOwners = () => {
{/* Property Owners Grid */} {/* Property Owners Grid */}
{!isLoading && filteredAndSortedOwners && ( {!isLoading && filteredAndSortedOwners && (
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-6"> <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7 3xl:grid-cols-8 gap-4 lg:gap-5 xl:gap-4 2xl:gap-5">
{filteredAndSortedOwners.map((owner) => ( {filteredAndSortedOwners.map((owner) => (
<ParkOwnerCard key={owner.id} company={owner} /> <ParkOwnerCard key={owner.id} company={owner} />
))} ))}

View File

@@ -271,7 +271,7 @@ export default function RideModelRides() {
</div> </div>
{filteredRides.length > 0 ? ( {filteredRides.length > 0 ? (
<div className="grid md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 gap-6"> <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7 3xl:grid-cols-8 gap-4 lg:gap-5 xl:gap-4 2xl:gap-5">
{filteredRides.map((ride) => ( {filteredRides.map((ride) => (
<RideCard key={ride.id} ride={ride} showParkName={true} /> <RideCard key={ride.id} ride={ride} showParkName={true} />
))} ))}