Primary component for displaying property listings. Used throughout the application for offer discovery and browsing. Supports image, rating, features, and pricing.
Standard offer card showing property image, title, location, key features, and pricing.
Cozy cottage with stunning mountain views, perfect for families and pet-friendly stays. BBQ area and fire pit included for unforgettable evenings.
<div class="offer-card">
<!-- Image with left and right badges -->
<div class="offer-card-image">
<img src="image.jpg" alt="Property">
<span class="badge badge--overlay badge--absolute-tl">
โ Available
</span>
<span class="badge badge--accent badge--absolute-tr">
๐ฅ Featured
</span>
</div>
<!-- Content -->
<div class="offer-card-content">
<!-- Meta (Date/Availability) -->
<div class="offer-card-meta t-small t-medium">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">...</svg>
<span>May 1-4 ยท 3 nights min.</span>
</div>
<!-- Title -->
<h3 class="offer-card-title t-card-title">Mountain Cottage Retreat</h3>
<!-- Description -->
<p class="offer-card-description t-body t-muted">Cozy cottage with mountain views, perfect for families and pet-friendly stays.</p>
<!-- Tags -->
<div class="badge-group">
<span class="badge badge--muted t-small">๐ House A or B</span>
<span class="badge badge--muted t-small">๐ฅ up to 6 guests</span>
<span class="badge badge--muted t-small">๐ฅ BBQ included</span>
</div>
<!-- Footer: Price & Action -->
<div class="offer-card-footer">
<div>
<div class="flex items-baseline gap-1">
<span class="t-small t-muted">from</span>
<span class="t-lead t-bold">1 650 PLN</span>
</div>
<span class="t-xs t-muted block">per stay</span>
</div>
<button class="btn btn--primary">Check Availability</button>
</div>
</div>
</div>
Offer cards are typically displayed in a responsive grid. Adjust columns based on viewport.
Cozy cottage with mountain views, perfect for families and peaceful getaways.
Beautiful estate with manicured gardens, perfect for summer family celebrations.
Tranquil forest retreat with modern amenities and nature activities nearby.
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<!-- Repeat offer-card for each property -->
</div>
/* Breakpoints: */
/* - 1 column on mobile (default) */
/* - 2 columns on medium screens (768px+) */
/* - 3 columns on large screens (1024px+) */
.t-card-title, .t-small .t-muted,
.t-lead .t-bold for prices,
.t-xs .t-muted for "per stay")
.t-small .t-medium for meta information (dates,
availability)
.btn .btn--primary for card action buttons (default
size)
.offer-card-cta) - always reuse Button
Element
Offer Card styles are defined in a modular CSS file for reuse across the app.
/assets/css/ui/views/offer-card.css
/* Imported by ui-system.css */
@import url('./ui/views/offer-card.css');
/* Architecture Layer: Views (Patterns) */
/* Composes: Badge Element, Button Element */
/* Uses: tokens.css variables for all colors, spacing, typography */