10 Commits

Author SHA1 Message Date
7bac1d3190 Update src/hooks/useCart.ts 2026-03-04 05:56:22 +00:00
4ff7678b98 Update src/components/cardStack/layouts/carousels/AngledCarousel.tsx 2026-03-04 05:56:21 +00:00
f760b6b101 Update src/app/page.tsx 2026-03-04 05:56:21 +00:00
e7468e0622 Update registry/components/MetricCardTen.json 2026-03-04 05:56:20 +00:00
cfc50df47f Update package-lock.json 2026-03-04 05:56:19 +00:00
3ef5eb8964 Update docs/README.md 2026-03-04 05:56:19 +00:00
fcb93af24e Update docs/ACCESSIBILITY.md 2026-03-04 05:56:18 +00:00
c6792241e2 Update src/app/page.tsx 2026-03-04 05:48:55 +00:00
664bb93b4c Update src/app/layout.tsx 2026-03-04 05:48:55 +00:00
30cb41b985 Merge version_2 into main
Merge version_2 into main
2026-03-04 05:47:11 +00:00
8 changed files with 1474 additions and 61 deletions

View File

@@ -494,7 +494,7 @@ const [isLoading, setIsLoading] = useState(false);
### General
- [ ] Test with keyboard navigation (Tab, Shift+Tab, Enter, Space, Escape)
- [ ] Test with screen reader (VoiceOver, NVDA, JAWS)
- [ ] Ensure sufficient color contrast (WCAG AA minimum)
- [ ] Ensure sufficient color contrast (WCasa antugua G AA minimum)
- [ ] Provide focus indicators for all interactive elements
- [ ] Use semantic HTML before ARIA roles
- [ ] Include screen reader only text when needed (`sr-only`)

View File

@@ -21,7 +21,7 @@ Covers:
---
### 🎴 [CARDSTACK_SECTIONS.md](./CARDSTACK_SECTIONS.md)
### 🎴 [Casa antugua RDSTACK_SECTIONS.md](./Casa antugua RDSTACK_SECTIONS.md)
**CardStack-based section components**
Load when: Creating Feature, Product, Pricing, Testimonial, Team, Blog, or Metrics sections
@@ -126,7 +126,7 @@ Covers:
1. Load `COMPONENT_IMPLEMENTATION.md` for structure
2. Load `ACCESSIBILITY.md` for a11y requirements
3. Load `THEME_AND_STYLING.md` for styling patterns
4. Load `CARDSTACK_SECTIONS.md` if using CardStack
4. Load `Casa antugua RDSTACK_SECTIONS.md` if using CardStack
### When updating the registry:
1. Load `REGISTRY_FOLDER_STRUCTURE.md` for the new folder structure

28
package-lock.json generated
View File

@@ -569,7 +569,7 @@
"node_modules/@humanwhocodes/retry": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCasa antugua rCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -1605,7 +1605,7 @@
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
"version": "4.1.13",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz",
"integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==",
"integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCasa antugua Lq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==",
"cpu": [
"arm64"
],
@@ -2059,7 +2059,7 @@
"node_modules/@tsparticles/shape-image": {
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/@tsparticles/shape-image/-/shape-image-3.9.1.tgz",
"integrity": "sha512-fCA5eme8VF3oX8yNVUA0l2SLDKuiZObkijb0z3Ky0qj1HUEVlAuEMhhNDNB9E2iELTrWEix9z7BFMePp2CC7AA==",
"integrity": "sha512-fCasa antugua 5eme8VF3oX8yNVUA0l2SLDKuiZObkijb0z3Ky0qj1HUEVlAuEMhhNDNB9E2iELTrWEix9z7BFMePp2CC7AA==",
"license": "MIT",
"dependencies": {
"@tsparticles/engine": "3.9.1"
@@ -3045,7 +3045,7 @@
"node_modules/array-includes": {
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
"integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
"integrity": "sha512-FmeCCasa antugua enzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3540,7 +3540,7 @@
"node_modules/convert-source-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"integrity": "sha512-Kvp459HrV2FEJ1Casa antugua si1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true,
"license": "MIT"
},
@@ -3673,7 +3673,7 @@
"node_modules/d3-time": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
"integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
"integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCasa antugua 77ZN0lkQ2Q==",
"license": "ISC",
"dependencies": {
"d3-array": "2 - 3"
@@ -5605,7 +5605,7 @@
"node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCasa antugua AoZQd3FeAKw==",
"dev": true,
"license": "MIT"
},
@@ -6179,7 +6179,7 @@
"node_modules/meshoptimizer": {
"version": "0.22.0",
"resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.22.0.tgz",
"integrity": "sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==",
"integrity": "sha512-IebiK79sqIy+E4EgOr+Casa antugua w+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==",
"license": "MIT"
},
"node_modules/micromatch": {
@@ -6212,7 +6212,7 @@
"node_modules/minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCasa antugua ==",
"dev": true,
"license": "MIT",
"funding": {
@@ -6306,7 +6306,7 @@
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"integrity": "sha512-6FlzubTLZG3J2a/NVCasa antugua leEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
@@ -6784,7 +6784,7 @@
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1Casa antugua 6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [
{
@@ -7454,7 +7454,7 @@
"node_modules/string.prototype.trim": {
"version": "1.2.10",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
"integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
"integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCasa antugua 6gEffoMZYxlTod4WcdrKA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7559,7 +7559,7 @@
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"integrity": "sha512-qpCasa antugua vRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8095,7 +8095,7 @@
"node_modules/victory-vendor": {
"version": "37.3.6",
"resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
"integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
"integrity": "sha512-SbPDPdDBYp+5MJHhBCasa antugua yI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
"license": "MIT AND ISC",
"dependencies": {
"@types/d3-array": "^3.0.3",

View File

@@ -39,7 +39,7 @@
},
"subtitle": {
"required": true,
"example": "San Francisco, CA · Full-time · Remote eligible",
"example": "San Francisco, Casa antugua · Full-time · Remote eligible",
"minChars": 5,
"maxChars": 100,
"note": "Secondary info like location, type, or details"
@@ -109,7 +109,7 @@
"textBoxButtonClassName?": "string",
"textBoxButtonTextClassName?": "string"
},
"usageExample": "<MetricCardTen metrics={[{ id: '1', title: 'Senior Software Engineer, Platform', subtitle: 'San Francisco, CA · Full-time · Remote eligible', category: 'Engineering', value: '$185K $265K', buttons: [{ text: 'Apply Now', href: '#' }] }, { id: '2', title: 'Product Designer, Enterprise', subtitle: 'New York, NY · Full-time', category: 'Design', value: '$145K $195K', buttons: [{ text: 'Apply Now', href: '#' }] }, { id: '3', title: 'Data Scientist, ML Platform', subtitle: 'Remote · Full-time', category: 'Data Science', value: '$168K $238K', buttons: [{ text: 'Apply Now', href: '#' }] }]} title=\"Open Positions\" description=\"Join our team and help shape the future of AI\" textboxLayout=\"default\" useInvertedBackground={false} animationType=\"slide-up\" />",
"usageExample": "<MetricCardTen metrics={[{ id: '1', title: 'Senior Software Engineer, Platform', subtitle: 'San Francisco, Casa antugua · Full-time · Remote eligible', category: 'Engineering', value: '$185K $265K', buttons: [{ text: 'Apply Now', href: '#' }] }, { id: '2', title: 'Product Designer, Enterprise', subtitle: 'New York, NY · Full-time', category: 'Design', value: '$145K $195K', buttons: [{ text: 'Apply Now', href: '#' }] }, { id: '3', title: 'Data Scientist, ML Platform', subtitle: 'Remote · Full-time', category: 'Data Science', value: '$168K $238K', buttons: [{ text: 'Apply Now', href: '#' }] }]} title=\"Open Positions\" description=\"Join our team and help shape the future of AI\" textboxLayout=\"default\" useInvertedBackground={false} animationType=\"slide-up\" />",
"do": [
"Use for pricing pages",
"Use for subscription tiers",

File diff suppressed because it is too large Load Diff

View File

@@ -28,7 +28,7 @@ export default function LandingPage() {
>
<div id="nav" data-section="nav">
<NavbarStyleFullscreen
brandName="CA"
brandName="Casa antugua "
navItems={[
{ name: "Home", id: "home" },
{ name: "About", id: "about" },
@@ -54,20 +54,26 @@ export default function LandingPage() {
background={{ variant: "glowing-orb" }}
useInvertedBackground={false}
testimonials={[
{ name: "Sophie Martin", handle: "Traveler, France", testimonial: "An absolutely magical experience! The maison exceeded all our expectations. The views, the hospitality, everything was perfect.", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/teen-age-youth-style-self-expression-concept-portrait-positive-happy-teenage-girl-with-bob-pinkish-hairstyle-facial-piercing-relaxing-indoors_343059-3781.jpg"},
{
name: "Sophie Martin", handle: "Traveler, France", testimonial: "An absolutely magical experience! The maison exceeded all our expectations. The views, the hospitality, everything was perfect.", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/teen-age-youth-style-self-expression-concept-portrait-positive-happy-teenage-girl-with-bob-pinkish-hairstyle-facial-piercing-relaxing-indoors_343059-3781.jpg"
},
{
name: "James Wilson", handle: "Couple, UK", testimonial: "We felt like we were in paradise. The location between the sea and nature reserve is stunning. Highly recommended!", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/happy-stylish-caucasian-man-with-backpack-travel-rice-plantation-making-self-portrai-memories_273443-3007.jpg"},
imageSrc: "http://img.b2bpic.net/free-photo/happy-stylish-caucasian-man-with-backpack-travel-rice-plantation-making-self-portrai-memories_273443-3007.jpg"
},
{
name: "Maria Garcia", handle: "Family, Spain", testimonial: "Perfect getaway for our family. The traditional Moroccan charm combined with modern amenities was exactly what we needed.", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/pleasure-voyage-lifetime-mood-love-life_1303-3328.jpg"},
imageSrc: "http://img.b2bpic.net/free-photo/pleasure-voyage-lifetime-mood-love-life_1303-3328.jpg"
},
]}
buttons={[
{
text: "Book on Airbnb", href: "https://www.airbnb.fr/rooms/1499481864424898794?check_in=2026-03-14&check_out=2026-03-15&search_mode=regular_search&photo_id=2316078285&source_impression_id=p3_1772199285_P3AAeC67HO_pmW27&previous_page_section_name=1000&federated_search_id=e6738925-70e0-4d97-bb58-3b42617aa42b"},
text: "Book on Airbnb", href: "https://www.airbnb.fr/rooms/1499481864424898794?check_in=2026-03-14&check_out=2026-03-15&search_mode=regular_search&photo_id=2316078285&source_impression_id=p3_1772199285_P3AAeC67HO_pmW27&previous_page_section_name=1000&federated_search_id=e6738925-70e0-4d97-bb58-3b42617aa42b"
},
{
text: "Book on Booking.com", href: "https://www.booking.com/hotel/ma/casa-antigua-entre-mer-et-reserve.fr.html?aid=2311236&label=fr-ma-booking-desktop-5CduOKQmb7QeyTDIztQmwAS652796013990%3Apl%3Ata%3Ap1%3Ap2%3Aac%3Aap%3Aneg%3Afi%3Atikwd-65526620%3Alp1009979%3Ali%3Adec%3Adm&sid=af413625458704abd1c26019a7c178cb&all_sr_blocks=1573180301_428363801_2_42_0&checkin=2026-03-13&checkout=2026-03-14&dest_id=-43476&dest_type=city&dist=0&group_adults=2&group_children=0&hapos=1&highlighted_blocks=1573180301_428363801_2_42_0&hpos=1&matching_block_id=1573180301_428363801_2_42_0&no_rooms=1&req_adults=2&req_children=0&room1=A%2CA&sb_price_type=total&sr_order=popularity&sr_pri_blocks=1573180301_428363801_2_42_0__6120&srepoch=1772199335&srpvid=02125f92238a094b&type=total&ucfs=1&"},
text: "Book on Booking.com", href: "https://www.booking.com/hotel/ma/casa-antigua-entre-mer-et-reserve.fr.html?aid=2311236&label=fr-ma-booking-desktop-5CduOKQmb7QeyTDIztQmwAS652796013990%3Apl%3Ata%3Ap1%3Ap2%3Aac%3Aap%3Aneg%3Afi%3Atikwd-65526620%3Alp1009979%3Ali%3Adec%3Adm&sid=af413625458704abd1c26019a7c178cb&all_sr_blocks=1573180301_428363801_2_42_0&checkin=2026-03-13&checkout=2026-03-14&dest_id=-43476&dest_type=city&dist=0&group_adults=2&group_children=0&hapos=1&highlighted_blocks=1573180301_428363801_2_42_0&hpos=1&matching_block_id=1573180301_428363801_2_42_0&no_rooms=1&req_adults=2&req_children=0&room1=A%2Casa antugua &sb_price_type=total&sr_order=popularity&sr_pri_blocks=1573180301_428363801_2_42_0__6120&srepoch=1772199335&srpvid=02125f92238a094b&type=total&ucfs=1&"
},
]}
buttonAnimation="slide-up"
/>
@@ -93,13 +99,16 @@ export default function LandingPage() {
features={[
{
id: "1", title: "Master Bedroom Suite", author: "Luxury Accommodation", description: "Spacious master suite with traditional Moroccan décor, premium linens, and stunning views of the surrounding landscape. Perfect for a restful retreat.", tags: ["Bedroom", "Ensuite"],
imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-7336.jpg?_wi=1", imageAlt: "Master bedroom with moroccan design"},
imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-7336.jpg?_wi=1", imageAlt: "Master bedroom with moroccan design"
},
{
id: "2", title: "Traditional Bathroom", author: "Authentic Design", description: "Hand-tiled traditional Moroccan bathroom featuring a luxurious rainfall shower, premium toiletries, and authentic zellige tilework throughout.", tags: ["Bathroom", "Luxury"],
imageSrc: "http://img.b2bpic.net/free-photo/elegant-bathtub-with-bath-elements_23-2148147505.jpg?_wi=1", imageAlt: "Luxury bathroom with moroccan tiles"},
imageSrc: "http://img.b2bpic.net/free-photo/elegant-bathtub-with-bath-elements_23-2148147505.jpg?_wi=1", imageAlt: "Luxury bathroom with moroccan tiles"
},
{
id: "3", title: "Garden & Outdoor Terrace", author: "Nature Views", description: "Lush garden with mature plants and flowers, outdoor seating area, and terrace overlooking the nature reserve. Ideal for morning coffee or evening relaxation.", tags: ["Outdoor", "Terrace"],
imageSrc: "http://img.b2bpic.net/free-photo/vintage-moroccan-mosque-decorative-wall_1203-4686.jpg?_wi=2", imageAlt: "Garden and outdoor terrace"},
imageSrc: "http://img.b2bpic.net/free-photo/vintage-moroccan-mosque-decorative-wall_1203-4686.jpg?_wi=2", imageAlt: "Garden and outdoor terrace"
},
]}
animationType="slide-up"
textboxLayout="default"
@@ -115,17 +124,23 @@ export default function LandingPage() {
tagIcon={CheckCircle}
products={[
{
id: "1", name: "Bathroom Essentials", price: "Included", variant: "Hair dryer, shampoo, soap, premium toiletries", imageSrc: "http://img.b2bpic.net/free-photo/elegant-bathtub-with-bath-elements_23-2148147505.jpg?_wi=2", imageAlt: "Bathroom with luxury amenities"},
id: "1", name: "Bathroom Essentials", price: "Included", variant: "Hair dryer, shampoo, soap, premium toiletries", imageSrc: "http://img.b2bpic.net/free-photo/elegant-bathtub-with-bath-elements_23-2148147505.jpg?_wi=2", imageAlt: "Bathroom with luxury amenities"
},
{
id: "2", name: "Cleaning Supplies", price: "Included", variant: "Professional cleaning products on-site", imageSrc: "http://img.b2bpic.net/free-photo/elegant-bathtub-with-bath-elements_23-2148147505.jpg?_wi=3", imageAlt: "Bathroom cleaning products"},
id: "2", name: "Cleaning Supplies", price: "Included", variant: "Professional cleaning products on-site", imageSrc: "http://img.b2bpic.net/free-photo/elegant-bathtub-with-bath-elements_23-2148147505.jpg?_wi=3", imageAlt: "Bathroom cleaning products"
},
{
id: "3", name: "Kitchen & Dining", price: "Included", variant: "Fully equipped kitchen, dining area", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-6488.jpg?_wi=2", imageAlt: "Kitchen area with dining"},
id: "3", name: "Kitchen & Dining", price: "Included", variant: "Fully equipped kitchen, dining area", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-6488.jpg?_wi=2", imageAlt: "Kitchen area with dining"
},
{
id: "4", name: "Climate Control", price: "Included", variant: "Air conditioning, heating, ceiling fans", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-7336.jpg?_wi=2", imageAlt: "Modern climate control"},
id: "4", name: "Climate Control", price: "Included", variant: "Air conditioning, heating, ceiling fans", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-7336.jpg?_wi=2", imageAlt: "Modern climate control"
},
{
id: "5", name: "Entertainment", price: "Included", variant: "WiFi, Smart TV, local entertainment", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-6488.jpg?_wi=3", imageAlt: "Entertainment systems"},
id: "5", name: "Entertainment", price: "Included", variant: "WiFi, Smart TV, local entertainment", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-6488.jpg?_wi=3", imageAlt: "Entertainment systems"
},
{
id: "6", name: "Outdoor Relaxation", price: "Included", variant: "Terrace, garden seating, hammocks", imageSrc: "http://img.b2bpic.net/free-photo/vintage-moroccan-mosque-decorative-wall_1203-4686.jpg?_wi=3", imageAlt: "Outdoor garden and terrace"},
id: "6", name: "Outdoor Relaxation", price: "Included", variant: "Terrace, garden seating, hammocks", imageSrc: "http://img.b2bpic.net/free-photo/vintage-moroccan-mosque-decorative-wall_1203-4686.jpg?_wi=3", imageAlt: "Outdoor garden and terrace"
},
]}
gridVariant="three-columns-all-equal-width"
animationType="slide-up"
@@ -143,15 +158,20 @@ export default function LandingPage() {
useInvertedBackground={false}
testimonials={[
{
id: "1", name: "Sophie Martin, Travel Blogger", date: "Date: 15 February 2026", title: "An Absolutely Magical Experience!", quote: "Casa Antigua exceeded all our expectations. The maison is beautifully decorated with authentic Moroccan touches, the hospitality is exceptional, and the views between the sea and nature reserve are absolutely breathtaking. We cannot wait to return!", tag: "Luxury Experience", avatarSrc: "http://img.b2bpic.net/free-photo/teen-age-youth-style-self-expression-concept-portrait-positive-happy-teenage-girl-with-bob-pinkish-hairstyle-facial-piercing-relaxing-indoors_343059-3781.jpg", avatarAlt: "Sophie Martin", imageSrc: "http://img.b2bpic.net/free-photo/vintage-moroccan-mosque-decorative-wall_1203-4686.jpg?_wi=4", imageAlt: "Casa Antigua exterior"},
id: "1", name: "Sophie Martin, Travel Blogger", date: "Date: 15 February 2026", title: "An Absolutely Magical Experience!", quote: "Casa Antigua exceeded all our expectations. The maison is beautifully decorated with authentic Moroccan touches, the hospitality is exceptional, and the views between the sea and nature reserve are absolutely breathtaking. We cannot wait to return!", tag: "Luxury Experience", avatarSrc: "http://img.b2bpic.net/free-photo/teen-age-youth-style-self-expression-concept-portrait-positive-happy-teenage-girl-with-bob-pinkish-hairstyle-facial-piercing-relaxing-indoors_343059-3781.jpg", avatarAlt: "Sophie Martin", imageSrc: "http://img.b2bpic.net/free-photo/vintage-moroccan-mosque-decorative-wall_1203-4686.jpg?_wi=4", imageAlt: "Casa Antigua exterior"
},
{
id: "2", name: "James Wilson, Couple's Getaway", date: "Date: 22 January 2026", title: "Perfect Romantic Retreat", quote: "We felt like we were in paradise during our stay. The location between the sea and nature reserve is stunning. The traditional Moroccan architecture combined with modern comforts made our honeymoon unforgettable. Highly recommended!", tag: "Honeymoon Destination", avatarSrc: "http://img.b2bpic.net/free-photo/happy-stylish-caucasian-man-with-backpack-travel-rice-plantation-making-self-portrai-memories_273443-3007.jpg", avatarAlt: "James Wilson", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-6488.jpg?_wi=4", imageAlt: "Casa Antigua interior"},
id: "2", name: "James Wilson, Couple's Getaway", date: "Date: 22 January 2026", title: "Perfect Romantic Retreat", quote: "We felt like we were in paradise during our stay. The location between the sea and nature reserve is stunning. The traditional Moroccan architecture combined with modern comforts made our honeymoon unforgettable. Highly recommended!", tag: "Honeymoon Destination", avatarSrc: "http://img.b2bpic.net/free-photo/happy-stylish-caucasian-man-with-backpack-travel-rice-plantation-making-self-portrai-memories_273443-3007.jpg", avatarAlt: "James Wilson", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-6488.jpg?_wi=4", imageAlt: "Casa Antigua interior"
},
{
id: "3", name: "Maria Garcia, Family Vacation", date: "Date: 8 January 2026", title: "Perfect for Families", quote: "Our family had an amazing time at Casa Antigua. The maison is spacious, safe, and well-equipped for families. The children loved exploring the garden and the nearby nature reserve. The hosts were incredibly helpful and accommodating.", tag: "Family-Friendly", avatarSrc: "http://img.b2bpic.net/free-photo/pleasure-voyage-lifetime-mood-love-life_1303-3328.jpg", avatarAlt: "Maria Garcia", imageSrc: "http://img.b2bpic.net/free-photo/vintage-moroccan-mosque-decorative-wall_1203-4686.jpg?_wi=5", imageAlt: "Casa Antigua garden"},
id: "3", name: "Maria Garcia, Family Vacation", date: "Date: 8 January 2026", title: "Perfect for Families", quote: "Our family had an amazing time at Casa Antigua. The maison is spacious, safe, and well-equipped for families. The children loved exploring the garden and the nearby nature reserve. The hosts were incredibly helpful and accommodating.", tag: "Family-Friendly", avatarSrc: "http://img.b2bpic.net/free-photo/pleasure-voyage-lifetime-mood-love-life_1303-3328.jpg", avatarAlt: "Maria Garcia", imageSrc: "http://img.b2bpic.net/free-photo/vintage-moroccan-mosque-decorative-wall_1203-4686.jpg?_wi=5", imageAlt: "Casa Antigua garden"
},
{
id: "4", name: "David Thompson, Adventure Seeker", date: "Date: 28 December 2025", title: "Ideal Base for Exploring", quote: "What an incredible location! Casa Antigua is perfectly positioned to explore both coastal activities and the nature reserve. The maison itself is a gem - authentic, comfortable, and with the most welcoming atmosphere. The price-to-value ratio is excellent!", tag: "Adventure Ready", avatarSrc: "http://img.b2bpic.net/free-photo/couple-traveling-taking-selfie-together-city_23-2149939713.jpg", avatarAlt: "David Thompson", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-7336.jpg?_wi=3", imageAlt: "Casa Antigua bedroom"},
id: "4", name: "David Thompson, Adventure Seeker", date: "Date: 28 December 2025", title: "Ideal Base for Exploring", quote: "What an incredible location! Casa Antigua is perfectly positioned to explore both coastal activities and the nature reserve. The maison itself is a gem - authentic, comfortable, and with the most welcoming atmosphere. The price-to-value ratio is excellent!", tag: "Adventure Ready", avatarSrc: "http://img.b2bpic.net/free-photo/couple-traveling-taking-selfie-together-city_23-2149939713.jpg", avatarAlt: "David Thompson", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-7336.jpg?_wi=3", imageAlt: "Casa Antigua bedroom"
},
{
id: "5", name: "Elena Rodriguez, Solo Traveler", date: "Date: 15 December 2025", title: "Safe Haven for Solo Travelers", quote: "I felt completely safe and at home during my solo retreat at Casa Antigua. The maison has character and charm, the location is stunning, and the host's attention to detail is remarkable. This is my new favorite vacation rental in Morocco!", tag: "Solo Travel", avatarSrc: "http://img.b2bpic.net/free-photo/front-view-smiley-woman-posing_23-2148601985.jpg", avatarAlt: "Elena Rodriguez", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-6488.jpg?_wi=5", imageAlt: "Casa Antigua interior detail"},
id: "5", name: "Elena Rodriguez, Solo Traveler", date: "Date: 15 December 2025", title: "Safe Haven for Solo Travelers", quote: "I felt completely safe and at home during my solo retreat at Casa Antigua. The maison has character and charm, the location is stunning, and the host's attention to detail is remarkable. This is my new favorite vacation rental in Morocco!", tag: "Solo Travel", avatarSrc: "http://img.b2bpic.net/free-photo/front-view-smiley-woman-posing_23-2148601985.jpg", avatarAlt: "Elena Rodriguez", imageSrc: "http://img.b2bpic.net/free-photo/decoration-interior_74190-6488.jpg?_wi=5", imageAlt: "Casa Antigua interior detail"
},
]}
/>
</div>
@@ -164,14 +184,17 @@ export default function LandingPage() {
plans={[
{
id: "standard", badge: "Nightly Rate", badgeIcon: Home,
price: "€45", subtitle: "per night, per person", buttons: [
price: "€45", subtitle: "per night (based on 2 guests)", buttons: [
{
text: "Book on Airbnb", href: "https://www.airbnb.fr/rooms/1499481864424898794?check_in=2026-03-14&check_out=2026-03-15&search_mode=regular_search&photo_id=2316078285&source_impression_id=p3_1772199285_P3AAeC67HO_pmW27&previous_page_section_name=1000&federated_search_id=e6738925-70e0-4d97-bb58-3b42617aa42b"},
text: "Book on Airbnb", href: "https://www.airbnb.fr/rooms/1499481864424898794?check_in=2026-03-14&check_out=2026-03-15&search_mode=regular_search&photo_id=2316078285&source_impression_id=p3_1772199285_P3AAeC67HO_pmW27&previous_page_section_name=1000&federated_search_id=e6738925-70e0-4d97-bb58-3b42617aa42b"
},
{
text: "Book on Booking.com", href: "https://www.booking.com/hotel/ma/casa-antigua-entre-mer-et-reserve.fr.html?aid=2311236&label=fr-ma-booking-desktop-5CduOKQmb7QeyTDIztQmwAS652796013990%3Apl%3Ata%3Ap1%3Ap2%3Aac%3Aap%3Aneg%3Afi%3Atikwd-65526620%3Alp1009979%3Ali%3Adec%3Adm&sid=af413625458704abd1c26019a7c178cb&all_sr_blocks=1573180301_428363801_2_42_0&checkin=2026-03-13&checkout=2026-03-14&dest_id=-43476&dest_type=city&dist=0&group_adults=2&group_children=0&hapos=1&highlighted_blocks=1573180301_428363801_2_42_0&hpos=1&matching_block_id=1573180301_428363801_2_42_0&no_rooms=1&req_adults=2&req_children=0&room1=A%2CA&sb_price_type=total&sr_order=popularity&sr_pri_blocks=1573180301_428363801_2_42_0__6120&srepoch=1772199335&srpvid=02125f92238a094b&type=total&ucfs=1&"},
text: "Book on Booking.com", href: "https://www.booking.com/hotel/ma/casa-antigua-entre-mer-et-reserve.fr.html?aid=2311236&label=fr-ma-booking-desktop-5CduOKQmb7QeyTDIztQmwAS652796013990%3Apl%3Ata%3Ap1%3Ap2%3Aac%3Aap%3Aneg%3Afi%3Atikwd-65526620%3Alp1009979%3Ali%3Adec%3Adm&sid=af413625458704abd1c26019a7c178cb&all_sr_blocks=1573180301_428363801_2_42_0&checkin=2026-03-13&checkout=2026-03-14&dest_id=-43476&dest_type=city&dist=0&group_adults=2&group_children=0&hapos=1&highlighted_blocks=1573180301_428363801_2_42_0&hpos=1&matching_block_id=1573180301_428363801_2_42_0&no_rooms=1&req_adults=2&req_children=0&room1=A%2Casa antugua &sb_price_type=total&sr_order=popularity&sr_pri_blocks=1573180301_428363801_2_42_0__6120&srepoch=1772199335&srpvid=02125f92238a094b&type=total&ucfs=1&"
},
],
features: [
"Spacious master bedroom with ensuite", "Fully equipped kitchen", "Traditional Moroccan décor", "Modern amenities & WiFi", "Garden and outdoor terrace", "Close to beach and nature reserve", "Flexible check-in/check-out", "24/7 guest support"],
"Spacious master bedroom with ensuite", "Fully equipped kitchen", "Traditional Moroccan décor", "Modern amenities & WiFi", "Garden and outdoor terrace", "Close to beach and nature reserve", "Flexible group sizing (price adjusts for group bookings)", "24/7 guest support"
],
},
]}
animationType="slide-up"
@@ -184,7 +207,7 @@ export default function LandingPage() {
<ContactSplit
tag="Get In Touch"
title="Plan Your Stay"
description="Have questions about Casa Antigua? Chat with us instantly on WhatsApp at +212 670 788 083 for immediate assistance. We're here to make your Moroccan getaway perfect!"
description="Have questions about Casa Antigua? Contact us directly or reach out through WhatsApp for instant communication. We're here to help make your Moroccan getaway perfect!"
tagIcon={MessageCircle}
background={{ variant: "plain" }}
useInvertedBackground={false}
@@ -192,9 +215,9 @@ export default function LandingPage() {
imageAlt="Location map of Casa Antigua"
mediaAnimation="slide-up"
mediaPosition="right"
inputPlaceholder="+212 670 788 083"
buttonText="Message on WhatsApp"
termsText="Click to open WhatsApp Web or use the WhatsApp app on your device. We typically respond within minutes."
inputPlaceholder="Enter your email address"
buttonText="Subscribe for Updates"
termsText="We respect your privacy. You can unsubscribe anytime."
/>
</div>
@@ -212,17 +235,20 @@ export default function LandingPage() {
{
title: "Booking", items: [
{
label: "Airbnb", href: "https://www.airbnb.fr/rooms/1499481864424898794?check_in=2026-03-14&check_out=2026-03-15&search_mode=regular_search&photo_id=2316078285&source_impression_id=p3_1772199285_P3AAeC67HO_pmW27&previous_page_section_name=1000&federated_search_id=e6738925-70e0-4d97-bb58-3b42617aa42b"},
label: "Airbnb", href: "https://www.airbnb.fr/rooms/1499481864424898794?check_in=2026-03-14&check_out=2026-03-15&search_mode=regular_search&photo_id=2316078285&source_impression_id=p3_1772199285_P3AAeC67HO_pmW27&previous_page_section_name=1000&federated_search_id=e6738925-70e0-4d97-bb58-3b42617aa42b"
},
{
label: "Booking.com", href: "https://www.booking.com/hotel/ma/casa-antigua-entre-mer-et-reserve.fr.html?aid=2311236&label=fr-ma-booking-desktop-5CduOKQmb7QeyTDIztQmwAS652796013990%3Apl%3Ata%3Ap1%3Ap2%3Aac%3Aap%3Aneg%3Afi%3Atikwd-65526620%3Alp1009979%3Ali%3Adec%3Adm&sid=af413625458704abd1c26019a7c178cb&all_sr_blocks=1573180301_428363801_2_42_0&checkin=2026-03-13&checkout=2026-03-14&dest_id=-43476&dest_type=city&dist=0&group_adults=2&group_children=0&hapos=1&highlighted_blocks=1573180301_428363801_2_42_0&hpos=1&matching_block_id=1573180301_428363801_2_42_0&no_rooms=1&req_adults=2&req_children=0&room1=A%2CA&sb_price_type=total&sr_order=popularity&sr_pri_blocks=1573180301_428363801_2_42_0__6120&srepoch=1772199335&srpvid=02125f92238a094b&type=total&ucfs=1&"},
label: "Booking.com", href: "https://www.booking.com/hotel/ma/casa-antigua-entre-mer-et-reserve.fr.html?aid=2311236&label=fr-ma-booking-desktop-5CduOKQmb7QeyTDIztQmwAS652796013990%3Apl%3Ata%3Ap1%3Ap2%3Aac%3Aap%3Aneg%3Afi%3Atikwd-65526620%3Alp1009979%3Ali%3Adec%3Adm&sid=af413625458704abd1c26019a7c178cb&all_sr_blocks=1573180301_428363801_2_42_0&checkin=2026-03-13&checkout=2026-03-14&dest_id=-43476&dest_type=city&dist=0&group_adults=2&group_children=0&hapos=1&highlighted_blocks=1573180301_428363801_2_42_0&hpos=1&matching_block_id=1573180301_428363801_2_42_0&no_rooms=1&req_adults=2&req_children=0&room1=A%2Casa antugua &sb_price_type=total&sr_order=popularity&sr_pri_blocks=1573180301_428363801_2_42_0__6120&srepoch=1772199335&srpvid=02125f92238a094b&type=total&ucfs=1&"
},
{
label: "Google Maps", href: "https://www.google.com/maps/place/Ancienne+maison/@30.0851518,-9.6628598,20.33z/data=!4m15!1m8!3m7!1s0xdb396cc22567fa9:0xce11025d1f86a706!2sSidi+R'bat!3b1!8m2!3d30.0844497!4d-9.6626749!16s%2Fg%2F11rr_d_jd!3m5!1s0xdb3970008a186d7:0x608ff69104a00d1e!8m2!3d30.0851867!4d-9.6626372!16s%2Fg%2F11m5_q26j7?entry=ttu&g_ep=EgoyMDI2MDIyNS4wIKXMDSoASAFQAw%3D%3D"},
label: "Google Maps", href: "https://www.google.com/maps/place/Ancienne+maison/@30.0851518,-9.6628598,20.33z/data=!4m15!1m8!3m7!1s0xdb396cc22567fa9:0xce11025d1f86a706!2sSidi+R'bat!3b1!8m2!3d30.0844497!4d-9.6626749!16s%2Fg%2F11rr_d_jd!3m5!1s0xdb3970008a186d7:0x608ff69104a00d1e!8m2!3d30.0851867!4d-9.6626372!16s%2Fg%2F11m5_q26j7?entry=ttu&g_ep=EgoyMDI2MDIyNS4wIKXMDSoASAFQAw%3D%3D"
},
],
},
{
title: "Contact", items: [
{ label: "WhatsApp", href: "https://wa.me/212670788083" },
{ label: "Email", href: "mailto:bakchichmakchich75@gmail.com" },
{ label: "WhatsApp", href: "https://wa.me/212670788083" },
{ label: "Phone", href: "tel:+212670788083" },
{ label: "Privacy Policy", href: "#" },
],

View File

@@ -20,8 +20,8 @@ interface AngledCarouselProps {
autoPlayInterval?: number;
}
const CARD_TRANSITION_DURATION = 0.8;
const CARD_TRANSITION_EASE = [0.65, 0, 0.35, 1] as const;
const Casa antugua RD_TRANSITION_DURATION = 0.8;
const Casa antugua RD_TRANSITION_EASE = [0.65, 0, 0.35, 1] as const;
const cardVariants = {
'hidden-0': { opacity: 0, y: '25px' },
@@ -44,7 +44,7 @@ const AngledCarousel = ({ items, className = "", autoPlay = true, autoPlayInterv
if (isFirstRender) {
const timeout = setTimeout(() => {
setIsFirstRender(false);
}, CARD_TRANSITION_DURATION * 1000);
}, Casa antugua RD_TRANSITION_DURATION * 1000);
return () => clearTimeout(timeout);
}
}, [isFirstRender]);
@@ -111,8 +111,8 @@ const AngledCarousel = ({ items, className = "", autoPlay = true, autoPlayInterv
initial={getInitialState()}
animate={getAnimateState()}
transition={{
duration: CARD_TRANSITION_DURATION,
ease: CARD_TRANSITION_EASE,
duration: Casa antugua RD_TRANSITION_DURATION,
ease: Casa antugua RD_TRANSITION_EASE,
delay: getDelay(),
}}
>

View File

@@ -8,11 +8,11 @@ export interface ExtendedCartItem extends CartItem {
productId: string;
}
const CART_STORAGE_KEY = "shop_cart_items";
const Casa antugua RT_STORAGE_KEY = "shop_cart_items";
const saveCartToStorage = (items: ExtendedCartItem[]) => {
try {
localStorage.setItem(CART_STORAGE_KEY, JSON.stringify(items));
localStorage.setItem(Casa antugua RT_STORAGE_KEY, JSON.stringify(items));
} catch (error) {
console.warn("Failed to save cart to localStorage:", error);
}
@@ -20,7 +20,7 @@ const saveCartToStorage = (items: ExtendedCartItem[]) => {
const loadCartFromStorage = (): ExtendedCartItem[] => {
try {
const stored = localStorage.getItem(CART_STORAGE_KEY);
const stored = localStorage.getItem(Casa antugua RT_STORAGE_KEY);
if (stored) {
return JSON.parse(stored);
}
@@ -32,7 +32,7 @@ const loadCartFromStorage = (): ExtendedCartItem[] => {
const clearCartFromStorage = () => {
try {
localStorage.removeItem(CART_STORAGE_KEY);
localStorage.removeItem(Casa antugua RT_STORAGE_KEY);
} catch (error) {
console.warn("Failed to clear cart from localStorage:", error);
}