+ {/* image container */}
+
+
+
+
+
+ {/* price variants */}
+ {Array.from({ length: 3 }).map((_, index) => (
+
+ ))}
+
+
+ )
+}
diff --git a/components/HotelReservation/SelectRate/Rooms/RoomsContainerSkeleton.module.css b/components/HotelReservation/SelectRate/Rooms/RoomsContainerSkeleton.module.css
new file mode 100644
index 000000000..7f7d28860
--- /dev/null
+++ b/components/HotelReservation/SelectRate/Rooms/RoomsContainerSkeleton.module.css
@@ -0,0 +1,21 @@
+.container {
+ padding: var(--Spacing-x2);
+}
+
+.filterContainer {
+ height: 38px;
+}
+
+.skeletonContainer {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
+ /* used to hide overflowing rows */
+ grid-template-rows: auto;
+ grid-auto-rows: 0;
+ overflow: hidden;
+
+ flex-wrap: wrap;
+ justify-content: space-between;
+ margin-top: 20px;
+ gap: var(--Spacing-x2);
+}
diff --git a/components/HotelReservation/SelectRate/Rooms/RoomsContainerSkeleton.tsx b/components/HotelReservation/SelectRate/Rooms/RoomsContainerSkeleton.tsx
new file mode 100644
index 000000000..7731ff375
--- /dev/null
+++ b/components/HotelReservation/SelectRate/Rooms/RoomsContainerSkeleton.tsx
@@ -0,0 +1,24 @@
+import Body from "@/components/TempDesignSystem/Text/Body"
+import { getIntl } from "@/i18n"
+
+import { RoomCardSkeleton } from "../RoomSelection/RoomCard/RoomCardSkeleton"
+
+import styles from "./RoomsContainerSkeleton.module.css"
+
+type Props = {
+ count?: number
+}
+
+export async function RoomsContainerSkeleton({ count = 4 }: Props) {
+ const intl = await getIntl()
+ return (
+