stay_commerce-frontend 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +8 -0
  5. data/app/assets/builds/404error-RVKQJ4S4.digested.jpg +0 -0
  6. data/app/assets/builds/Facebook-5HJUILVR.digested.svg +3 -0
  7. data/app/assets/builds/Google-CZ3UPVSC.digested.svg +6 -0
  8. data/app/assets/builds/application.js +95 -0
  9. data/app/assets/builds/application.js.map +7 -0
  10. data/app/assets/builds/beach-KAZW5GM3.digested.jpg +0 -0
  11. data/app/assets/builds/beach2-3ARC34NS.digested.jpg +0 -0
  12. data/app/assets/builds/beach3-PSTOH5FV.digested.jpg +0 -0
  13. data/app/assets/builds/beach4-PWNRPD3S.digested.jpg +0 -0
  14. data/app/assets/builds/beach5-SBOKKRHF.digested.jpg +0 -0
  15. data/app/assets/builds/beach6-SXZ5Y5AI.digested.jpg +0 -0
  16. data/app/assets/builds/beach7-FNBMFVKK.digested.jpg +0 -0
  17. data/app/assets/builds/beach8-TD7LTRQM.digested.jpg +0 -0
  18. data/app/assets/builds/bg-image-H7UGUMV2.digested.jpg +0 -0
  19. data/app/assets/builds/bgimage-DU3PCXKN.digested.jpg +0 -0
  20. data/app/assets/builds/bundle.css +30914 -0
  21. data/app/assets/builds/bundle.css.map +7 -0
  22. data/app/assets/builds/bundle.js +74569 -0
  23. data/app/assets/builds/bundle.js.map +7 -0
  24. data/app/assets/builds/hotel1-HGBXPKJK.digested.jpg +0 -0
  25. data/app/assets/builds/logo_updated-KQWAXLYL.digested.png +0 -0
  26. data/app/assets/builds/styles.css +6422 -0
  27. data/app/assets/builds/styles.css.map +7 -0
  28. data/app/assets/config/manifest.js +2 -0
  29. data/app/assets/images/favicon.ico +0 -0
  30. data/app/assets/images/stay_commerce/frontend/beach-666122_1280 (1).jpg +0 -0
  31. data/app/assets/images/stay_commerce/frontend/beach-666122_1280.jpg +0 -0
  32. data/app/assets/stylesheets/stay_commerce/frontend/application.css +15 -0
  33. data/app/controllers/stay_commerce/frontend/application_controller.rb +8 -0
  34. data/app/controllers/stay_commerce/frontend/welcome_controller.rb +6 -0
  35. data/app/helpers/stay_commerce/frontend/application_helper.rb +6 -0
  36. data/app/javascript/Images/404error.jpg +0 -0
  37. data/app/javascript/Images/Facebook.svg +3 -0
  38. data/app/javascript/Images/Google.svg +6 -0
  39. data/app/javascript/Images/beach-2245867_1280.jpg +0 -0
  40. data/app/javascript/Images/beach.jpg +0 -0
  41. data/app/javascript/Images/beach2.jpg +0 -0
  42. data/app/javascript/Images/beach3.jpg +0 -0
  43. data/app/javascript/Images/beach4.jpg +0 -0
  44. data/app/javascript/Images/beach5.jpg +0 -0
  45. data/app/javascript/Images/beach6.jpg +0 -0
  46. data/app/javascript/Images/beach7.jpg +0 -0
  47. data/app/javascript/Images/beach8.jpg +0 -0
  48. data/app/javascript/Images/bg-image.jpg +0 -0
  49. data/app/javascript/Images/bgimage.jpg +0 -0
  50. data/app/javascript/Images/blog-1.jpg +0 -0
  51. data/app/javascript/Images/gallery.png +0 -0
  52. data/app/javascript/Images/home 5.jpg +0 -0
  53. data/app/javascript/Images/home1.jpg +0 -0
  54. data/app/javascript/Images/home2.jpg +0 -0
  55. data/app/javascript/Images/home3.jpg +0 -0
  56. data/app/javascript/Images/home6.jpg +0 -0
  57. data/app/javascript/Images/hotel1.jpg +0 -0
  58. data/app/javascript/Images/room1.jpg +0 -0
  59. data/app/javascript/Images/room2.jpg +0 -0
  60. data/app/javascript/Images/room3.jpg +0 -0
  61. data/app/javascript/Images/room4.jpg +0 -0
  62. data/app/javascript/Images/wine-4520213_1280.jpg +0 -0
  63. data/app/javascript/application.js +1 -0
  64. data/app/javascript/react/Api/apiConstants.js +47 -0
  65. data/app/javascript/react/assets/beach-2245867_1280.jpg +0 -0
  66. data/app/javascript/react/assets/logo.png +0 -0
  67. data/app/javascript/react/assets/logo_updated.png +0 -0
  68. data/app/javascript/react/components/AboutUsPage/AboutPage.jsx +41 -0
  69. data/app/javascript/react/components/AboutusFront/About.jsx +37 -0
  70. data/app/javascript/react/components/Accommodation/Accommodation.jsx +32 -0
  71. data/app/javascript/react/components/Accommodation/NormalListing.jsx +50 -0
  72. data/app/javascript/react/components/Accommodation/SpecialListing.jsx +51 -0
  73. data/app/javascript/react/components/Accountpage/AccountInfo.jsx +217 -0
  74. data/app/javascript/react/components/Accountpage/AccountPage.jsx +27 -0
  75. data/app/javascript/react/components/Accountpage/CommonPage.jsx +24 -0
  76. data/app/javascript/react/components/AddNewProperty/CommonLayout.jsx +68 -0
  77. data/app/javascript/react/components/AddNewProperty/Description.jsx +229 -0
  78. data/app/javascript/react/components/AddNewProperty/Details.jsx +234 -0
  79. data/app/javascript/react/components/AddNewProperty/Images.jsx +196 -0
  80. data/app/javascript/react/components/AddNewProperty/Location.jsx +239 -0
  81. data/app/javascript/react/components/AddNewProperty/Room.jsx +1132 -0
  82. data/app/javascript/react/components/AvatarDropdown/AvatarDropDown.jsx +142 -0
  83. data/app/javascript/react/components/BlogDesign/BlogsLatest.jsx +67 -0
  84. data/app/javascript/react/components/ContactUs/Contact.jsx +89 -0
  85. data/app/javascript/react/components/FacilitiesSection/Facilities.jsx +66 -0
  86. data/app/javascript/react/components/FixedNavbar/FixedNav.jsx +88 -0
  87. data/app/javascript/react/components/ForgetPassword/ForgetPassword.jsx +103 -0
  88. data/app/javascript/react/components/Gallery/Gallery.jsx +164 -0
  89. data/app/javascript/react/components/GalleryModalLight/GalleryModalLight.jsx +35 -0
  90. data/app/javascript/react/components/GallerySlider/GallerySlider.jsx +58 -0
  91. data/app/javascript/react/components/Headers/PropertyCard.jsx +46 -0
  92. data/app/javascript/react/components/HeroSectionDesign/BookingForm.jsx +178 -0
  93. data/app/javascript/react/components/HeroSectionDesign/HeroSection.jsx +29 -0
  94. data/app/javascript/react/components/HeroSectionDesign/MyPropertiesListing.jsx +104 -0
  95. data/app/javascript/react/components/HeroSectionDesign/PropertiesPage.jsx +122 -0
  96. data/app/javascript/react/components/HotelListing/Listing.jsx +48 -0
  97. data/app/javascript/react/components/Layout/Layout.js +18 -0
  98. data/app/javascript/react/components/Listing-stay-Detail/AmenitiesFeatures.jsx +58 -0
  99. data/app/javascript/react/components/Listing-stay-Detail/AmenitiesModal.jsx +250 -0
  100. data/app/javascript/react/components/Listing-stay-Detail/ApartmentCard.jsx +120 -0
  101. data/app/javascript/react/components/Listing-stay-Detail/BookingModal.jsx +398 -0
  102. data/app/javascript/react/components/Listing-stay-Detail/CheckoutForm.jsx +296 -0
  103. data/app/javascript/react/components/Listing-stay-Detail/ListingStayDetailPage.jsx +512 -0
  104. data/app/javascript/react/components/Listing-stay-Detail/PropertyDescription.jsx +76 -0
  105. data/app/javascript/react/components/Listing-stay-Detail/PropertyDetailsCard.jsx +62 -0
  106. data/app/javascript/react/components/Listing-stay-Detail/Reviews.jsx +132 -0
  107. data/app/javascript/react/components/Listing-stay-Detail/RoomDescriptionModal.jsx +105 -0
  108. data/app/javascript/react/components/Listing-stay-Detail/Rules.jsx +23 -0
  109. data/app/javascript/react/components/ListingImageGallery/ListingImageGallery.jsx +30 -0
  110. data/app/javascript/react/components/LoginPage/LoginPage.jsx +115 -0
  111. data/app/javascript/react/components/MobileNav/MobileMenu.jsx +47 -0
  112. data/app/javascript/react/components/Navbar/Navbar.jsx +25 -0
  113. data/app/javascript/react/components/Page404/Page404.jsx +30 -0
  114. data/app/javascript/react/components/PropertyListing/MyProperties.jsx +146 -0
  115. data/app/javascript/react/components/PropertyListing/StayBooking/BookingDetails.jsx +178 -0
  116. data/app/javascript/react/components/PropertyListing/StayBooking/MyBooking.jsx +83 -0
  117. data/app/javascript/react/components/ResetPassword/ResetPassword.jsx +117 -0
  118. data/app/javascript/react/components/SignupPage/SignupPage.jsx +185 -0
  119. data/app/javascript/react/components/SmallNavbar/SmallNav.jsx +51 -0
  120. data/app/javascript/react/components/SocialAuth/SocialAuth.jsx +21 -0
  121. data/app/javascript/react/components/StayCard/StayCard.jsx +69 -0
  122. data/app/javascript/react/components/StayCard/StayCard2.jsx +45 -0
  123. data/app/javascript/react/components/StayCard/StayCard3.jsx +45 -0
  124. data/app/javascript/react/components/TestimonialSection/Testimonial.jsx +113 -0
  125. data/app/javascript/react/components/Unauthorized/Unauthorized.jsx +12 -0
  126. data/app/javascript/react/data/jsons/__countryListing.json +201 -0
  127. data/app/javascript/react/packs/App.js +26 -0
  128. data/app/javascript/react/packs/index.jsx +38 -0
  129. data/app/javascript/react/packs/routes/ParentRoute.jsx +14 -0
  130. data/app/javascript/react/packs/routes/Route.jsx +163 -0
  131. data/app/javascript/react/pages/AccommodationList.jsx +21 -0
  132. data/app/javascript/react/pages/Home.jsx +32 -0
  133. data/app/javascript/react/redux/slices/AuthSlice/AuthSlice.jsx +100 -0
  134. data/app/javascript/react/redux/slices/PropertySlice/PropertySlice.jsx +722 -0
  135. data/app/javascript/react/redux/slices/PropertySlice/Searchslice.jsx +36 -0
  136. data/app/javascript/react/redux/slices/UserSlice/UserSlice.jsx +215 -0
  137. data/app/javascript/react/redux/store.js +35 -0
  138. data/app/javascript/react/shared/Avatar/Avatar.jsx +32 -0
  139. data/app/javascript/react/shared/Badge/Badge.jsx +33 -0
  140. data/app/javascript/react/shared/Button/Button.jsx +67 -0
  141. data/app/javascript/react/shared/Button/ButtonPrimary.jsx +11 -0
  142. data/app/javascript/react/shared/Button/ButtonSelect.jsx +9 -0
  143. data/app/javascript/react/shared/Checkbox/Checkbox.jsx +38 -0
  144. data/app/javascript/react/shared/CurrencySymbol.jsx +6 -0
  145. data/app/javascript/react/shared/DateField/CustomDatePicker.jsx +69 -0
  146. data/app/javascript/react/shared/FooterSection/Footer.jsx +75 -0
  147. data/app/javascript/react/shared/FormField/FormField.jsx +75 -0
  148. data/app/javascript/react/shared/FormItem/FormItem.jsx +20 -0
  149. data/app/javascript/react/shared/Input/Input.jsx +27 -0
  150. data/app/javascript/react/shared/Label/Label.jsx +12 -0
  151. data/app/javascript/react/shared/Modal.jsx +20 -0
  152. data/app/javascript/react/shared/NcImage/NcImage.jsx +101 -0
  153. data/app/javascript/react/shared/NcImage/PlaceIcon.jsx +31 -0
  154. data/app/javascript/react/shared/NcImage/placecImageIcon.svg +6 -0
  155. data/app/javascript/react/shared/Select/Select.jsx +20 -0
  156. data/app/javascript/react/styles/404error.scss +58 -0
  157. data/app/javascript/react/styles/ApartmentCard.scss +126 -0
  158. data/app/javascript/react/styles/BookingDetails.scss +457 -0
  159. data/app/javascript/react/styles/Modal.scss +36 -0
  160. data/app/javascript/react/styles/PropertiesPage.scss +219 -0
  161. data/app/javascript/react/styles/RenderSection.scss +480 -0
  162. data/app/javascript/react/styles/about.scss +97 -0
  163. data/app/javascript/react/styles/accountinfo.scss +67 -0
  164. data/app/javascript/react/styles/accountpage.scss +36 -0
  165. data/app/javascript/react/styles/amenitiesfeatures.scss +223 -0
  166. data/app/javascript/react/styles/application.scss +87 -0
  167. data/app/javascript/react/styles/avatar.scss +39 -0
  168. data/app/javascript/react/styles/avatardropdown.scss +57 -0
  169. data/app/javascript/react/styles/badge.scss +90 -0
  170. data/app/javascript/react/styles/blog.scss +100 -0
  171. data/app/javascript/react/styles/bookingform.scss +124 -0
  172. data/app/javascript/react/styles/button.scss +44 -0
  173. data/app/javascript/react/styles/buttonprimary.scss +32 -0
  174. data/app/javascript/react/styles/checkbox.scss +37 -0
  175. data/app/javascript/react/styles/commonlayout.scss +83 -0
  176. data/app/javascript/react/styles/commonpage.scss +51 -0
  177. data/app/javascript/react/styles/contact.scss +173 -0
  178. data/app/javascript/react/styles/customdatepicker.scss +120 -0
  179. data/app/javascript/react/styles/description.scss +21 -0
  180. data/app/javascript/react/styles/details.scss +88 -0
  181. data/app/javascript/react/styles/facilities.scss +131 -0
  182. data/app/javascript/react/styles/fixednavbar.scss +137 -0
  183. data/app/javascript/react/styles/fonts.scss +22 -0
  184. data/app/javascript/react/styles/footer.scss +300 -0
  185. data/app/javascript/react/styles/forgetpassword.scss +68 -0
  186. data/app/javascript/react/styles/formfield.scss +39 -0
  187. data/app/javascript/react/styles/formitem.scss +20 -0
  188. data/app/javascript/react/styles/gallery.scss +142 -0
  189. data/app/javascript/react/styles/gallerymodallight.scss +137 -0
  190. data/app/javascript/react/styles/galleryslider.scss +114 -0
  191. data/app/javascript/react/styles/header.scss +49 -0
  192. data/app/javascript/react/styles/herosection.scss +61 -0
  193. data/app/javascript/react/styles/images.scss +112 -0
  194. data/app/javascript/react/styles/input.scss +58 -0
  195. data/app/javascript/react/styles/label.scss +11 -0
  196. data/app/javascript/react/styles/listing.scss +94 -0
  197. data/app/javascript/react/styles/listingimagegallery.scss +57 -0
  198. data/app/javascript/react/styles/listingstaydetailpage.scss +887 -0
  199. data/app/javascript/react/styles/location.scss +66 -0
  200. data/app/javascript/react/styles/loginpage.scss +150 -0
  201. data/app/javascript/react/styles/mobilemenu.scss +53 -0
  202. data/app/javascript/react/styles/mybooking.scss +104 -0
  203. data/app/javascript/react/styles/myproperty.scss +51 -0
  204. data/app/javascript/react/styles/ncimage.scss +24 -0
  205. data/app/javascript/react/styles/normallisting.scss +95 -0
  206. data/app/javascript/react/styles/property-description.scss +75 -0
  207. data/app/javascript/react/styles/propertycard.scss +48 -0
  208. data/app/javascript/react/styles/propertydetailscard.scss +302 -0
  209. data/app/javascript/react/styles/resetpassword.scss +79 -0
  210. data/app/javascript/react/styles/reviews.scss +185 -0
  211. data/app/javascript/react/styles/room.scss +275 -0
  212. data/app/javascript/react/styles/rooms.scss +0 -0
  213. data/app/javascript/react/styles/select.scss +44 -0
  214. data/app/javascript/react/styles/signuppage.scss +132 -0
  215. data/app/javascript/react/styles/smallnav.scss +94 -0
  216. data/app/javascript/react/styles/socialauth.scss +62 -0
  217. data/app/javascript/react/styles/speciallisting.scss +94 -0
  218. data/app/javascript/react/styles/staycard.scss +77 -0
  219. data/app/javascript/react/styles/staycard2.scss +115 -0
  220. data/app/javascript/react/styles/testimonial.scss +216 -0
  221. data/app/javascript/react/styles/unauthorized.scss +22 -0
  222. data/app/javascript/react/styles/variables.scss +3 -0
  223. data/app/javascript/react/styles/wrapper.scss +4 -0
  224. data/app/javascript/react/utils/formSchema.js +120 -0
  225. data/app/javascript/react/utils/helpers/APIHelper.jsx +55 -0
  226. data/app/javascript/react/utils/helpers/ErrorHandler.js +21 -0
  227. data/app/javascript/react/utils/helpers/InfoHandler.js +15 -0
  228. data/app/javascript/react/utils/helpers/SuccessHandler.js +12 -0
  229. data/app/javascript/react/utils/helpers/isInViewPortIntersectionObserver.jsx +39 -0
  230. data/app/jobs/stay_commerce/frontend/application_job.rb +6 -0
  231. data/app/mailers/stay_commerce/frontend/application_mailer.rb +8 -0
  232. data/app/models/stay_commerce/frontend/application_record.rb +7 -0
  233. data/app/views/layouts/stay_commerce/frontend/application.html.erb +61 -0
  234. data/app/views/stay_commerce/frontend/welcome/index.html.erb +2 -0
  235. data/config/initializers/cors.rb +6 -0
  236. data/config/initializers/devise.rb +359 -0
  237. data/config/routes.rb +11 -0
  238. data/lib/stay_commerce/frontend/engine.rb +14 -0
  239. data/lib/stay_commerce/frontend/version.rb +5 -0
  240. data/lib/stay_commerce/frontend.rb +8 -0
  241. data/lib/tasks/stay_commerce/frontend_tasks.rake +4 -0
  242. metadata +370 -0
@@ -0,0 +1,887 @@
1
+ /* Main container styling */
2
+ .listing-detail-page {
3
+ margin-top: 4.5rem;
4
+ padding: 1rem;
5
+ margin: 4.5rem auto 0;
6
+ }
7
+
8
+ @media (min-width: 640px) {
9
+ .listing-detail-page {
10
+ padding: 4rem;
11
+ }
12
+ }
13
+
14
+ @media (min-width: 1024px) {
15
+ .listing-detail-page {
16
+ padding: 3rem;
17
+ }
18
+ }
19
+
20
+ .listing-header {
21
+ border-radius: 1rem;
22
+ overflow: hidden;
23
+ cursor: pointer;
24
+ }
25
+
26
+ .image-grid {
27
+ display: grid;
28
+ grid-template-columns: 1fr;
29
+ grid-template-rows: auto;
30
+ gap: 0.5rem;
31
+ position: relative;
32
+ height: 300px;
33
+ }
34
+
35
+ @media (min-width: 640px) {
36
+ .image-grid {
37
+ grid-template-columns: repeat(2, 1fr);
38
+ height: 400px;
39
+ }
40
+ }
41
+
42
+ @media (min-width: 1024px) {
43
+ .image-grid {
44
+ grid-template-columns: repeat(4, 1fr);
45
+ grid-template-rows: repeat(2, 1fr);
46
+ height: 500px;
47
+ }
48
+ }
49
+
50
+ .main-image {
51
+ grid-column: 1;
52
+ grid-row: 1;
53
+ border-radius: 1rem;
54
+ overflow: hidden;
55
+ }
56
+
57
+ @media (min-width: 640px) {
58
+ .main-image {
59
+ grid-column: 1 / 2;
60
+ grid-row: 1 / 3;
61
+ }
62
+ }
63
+
64
+ @media (min-width: 1024px) {
65
+ .main-image {
66
+ grid-column: 1 / 3;
67
+ grid-row: 1 / 3;
68
+ }
69
+ }
70
+
71
+ .main-image .image-all {
72
+ width: 100%;
73
+ height: 100%;
74
+ object-fit: cover;
75
+ }
76
+
77
+ .grid-image {
78
+ display: none;
79
+ border-radius: 1rem;
80
+ overflow: hidden;
81
+ }
82
+
83
+ @media (min-width: 640px) {
84
+ .grid-image:nth-child(2),
85
+ .grid-image:nth-child(3) {
86
+ display: block;
87
+ }
88
+ }
89
+
90
+ @media (min-width: 1024px) {
91
+ .grid-image {
92
+ display: block;
93
+ }
94
+ }
95
+
96
+ .grid-image .image-grid {
97
+ width: 100%;
98
+ height: 100%;
99
+ object-fit: cover;
100
+ }
101
+
102
+ .overlay-count {
103
+ position: absolute;
104
+ bottom: 1rem;
105
+ right: 1rem;
106
+ background: rgba(255, 255, 255, 0.8);
107
+ padding: 0.5rem 1rem;
108
+ border-radius: 0.5rem;
109
+ font-size: 1rem;
110
+ font-weight: 600;
111
+ cursor: pointer;
112
+ transition: background-color 0.2s;
113
+ }
114
+
115
+ .overlay-count:hover {
116
+ background: rgba(255, 255, 255, 0.9);
117
+ }
118
+
119
+ .show-all-btn {
120
+ position: absolute;
121
+ bottom: 1rem;
122
+ right: 1rem;
123
+ display: flex;
124
+ align-items: center;
125
+ background: rgba(255, 255, 255, 0.8);
126
+ color: #333;
127
+ padding: 0.5rem 1rem;
128
+ border-radius: 0.75rem;
129
+ border: none;
130
+ cursor: pointer;
131
+ font-weight: 600;
132
+ transition: background-color 0.2s;
133
+ }
134
+
135
+ .show-all-btn:hover {
136
+ background: rgba(255, 255, 255, 0.9);
137
+ }
138
+
139
+ .show-all-btn .icon {
140
+ width: 1rem;
141
+ height: 1rem;
142
+ margin-right: 0.5rem;
143
+ }
144
+
145
+ /* Main content area */
146
+ .main-content {
147
+ position: relative;
148
+ z-index: 10;
149
+ margin-top: 2rem;
150
+ display: flex;
151
+ flex-direction: column;
152
+ margin-bottom: 2rem;
153
+ width: 100%;
154
+ }
155
+
156
+ @media (min-width: 900px) {
157
+ .main-content {
158
+ flex-direction: row;
159
+ margin-top: 2.75rem;
160
+ gap: 2rem;
161
+ }
162
+ }
163
+
164
+ .main-left {
165
+ width: 100%;
166
+ }
167
+
168
+ @media (min-width: 900px) {
169
+ .main-left {
170
+ width: 65%;
171
+ }
172
+ }
173
+
174
+ .main-left > * + * {
175
+ margin-top: 2rem;
176
+ }
177
+
178
+ .main-right {
179
+ width: 100%;
180
+ margin-top: 2rem;
181
+ }
182
+
183
+ @media (min-width: 900px) {
184
+ .main-right {
185
+ width: 35%;
186
+ margin-top: 0;
187
+ }
188
+ }
189
+
190
+ /* Sidebar wrapper */
191
+ .sidebar-wrapper {
192
+ position: sticky;
193
+ top: 6rem;
194
+ }
195
+
196
+ .listingSectionSidebar__wrap {
197
+ padding: 24px;
198
+ border-radius: 12px;
199
+ background-color: #fff;
200
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.08);
201
+
202
+ form {
203
+ display: flex;
204
+ flex-direction: column;
205
+ gap: 16px;
206
+ }
207
+
208
+ .room-booking-section {
209
+ display: flex;
210
+ flex-direction: column;
211
+ gap: 16px;
212
+ }
213
+
214
+ .price-section {
215
+ margin-bottom: 4px;
216
+
217
+ .price-amount {
218
+ font-size: 28px;
219
+ font-weight: 700;
220
+ color: #000;
221
+
222
+ .price-unit {
223
+ font-size: 16px;
224
+ font-weight: normal;
225
+ color: #666;
226
+ }
227
+ }
228
+ }
229
+
230
+ .input-section {
231
+ margin-bottom: 4px;
232
+
233
+ label {
234
+ display: block;
235
+ font-size: 14px;
236
+ font-weight: 500;
237
+ margin-bottom: 8px;
238
+ color: #333;
239
+ }
240
+
241
+ input,
242
+ select {
243
+ width: 100%;
244
+ height: 48px;
245
+ padding: 0 16px;
246
+ border-radius: 24px;
247
+ border: 1px solid #ddd;
248
+ font-size: 14px;
249
+ outline: none;
250
+
251
+ &:focus {
252
+ border-color: #aaa;
253
+ }
254
+
255
+ &::placeholder {
256
+ color: #999;
257
+ }
258
+ }
259
+
260
+ .select-container {
261
+ position: relative;
262
+
263
+ &::after {
264
+ content: "";
265
+ position: absolute;
266
+ right: 16px;
267
+ top: 50%;
268
+ transform: translateY(-50%) rotate(45deg);
269
+ width: 8px;
270
+ height: 8px;
271
+ border-right: 2px solid #666;
272
+ border-bottom: 2px solid #666;
273
+ pointer-events: none;
274
+ }
275
+
276
+ select {
277
+ appearance: none;
278
+ cursor: pointer;
279
+ }
280
+ }
281
+ }
282
+
283
+ .booking-button {
284
+ margin-top: 8px;
285
+
286
+ button {
287
+ width: 100%;
288
+ height: 48px;
289
+ border-radius: 24px;
290
+ background-color: #f58b54;
291
+ color: white;
292
+ font-size: 16px;
293
+ font-weight: 500;
294
+ border: none;
295
+ cursor: pointer;
296
+ transition: background-color 0.2s ease;
297
+
298
+ &:hover {
299
+ background-color: darken(#f58b54, 5%);
300
+ }
301
+ }
302
+ }
303
+ }
304
+
305
+ /* Form elements */
306
+ form {
307
+ display: flex;
308
+ flex-direction: column;
309
+ gap: 1rem;
310
+ }
311
+
312
+ .booking-button {
313
+ margin-top: 1.5rem;
314
+ }
315
+
316
+ /* Features & Amenities section */
317
+ .features-amenities {
318
+ padding: 1.5rem;
319
+ border-radius: 1rem;
320
+ background-color: #f9fafb;
321
+ }
322
+
323
+ /* Responsive adjustments for very small screens */
324
+ @media (max-width: 480px) {
325
+ .listing-detail-page {
326
+ padding: 0.75rem;
327
+ }
328
+
329
+ .image-grid {
330
+ height: 250px;
331
+ }
332
+ }
333
+
334
+ .similar-properties-section {
335
+ padding: 20px 0;
336
+ margin-left: auto;
337
+ margin-right: auto;
338
+ }
339
+
340
+ .booking-sidebar {
341
+ padding: 24px;
342
+ border-radius: 12px;
343
+ background-color: #fff;
344
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.08);
345
+
346
+ .booking-price {
347
+ margin-bottom: 20px;
348
+
349
+ .price-amount {
350
+ font-size: 28px;
351
+ font-weight: 700;
352
+ color: #000;
353
+ }
354
+
355
+ .price-period {
356
+ font-size: 16px;
357
+ color: #666;
358
+ }
359
+ }
360
+
361
+ .booking-form {
362
+ .form-group {
363
+ margin-bottom: 16px;
364
+
365
+ label {
366
+ display: block;
367
+ font-size: 14px;
368
+ font-weight: 500;
369
+ margin-bottom: 8px;
370
+ color: #333;
371
+ }
372
+
373
+ input,
374
+ select {
375
+ width: 100%;
376
+ height: 48px;
377
+ padding: 0 16px;
378
+ border-radius: 24px;
379
+ border: 1px solid #ddd;
380
+ font-size: 14px;
381
+ outline: none;
382
+
383
+ &:focus {
384
+ border-color: #aaa;
385
+ }
386
+
387
+ &::placeholder {
388
+ color: #999;
389
+ }
390
+ }
391
+
392
+ .select-container {
393
+ position: relative;
394
+
395
+ &::after {
396
+ content: "";
397
+ position: absolute;
398
+ right: 16px;
399
+ top: 50%;
400
+ transform: translateY(-50%);
401
+ width: 10px;
402
+ height: 10px;
403
+ border-right: 2px solid #666;
404
+ border-bottom: 2px solid #666;
405
+ transform: translateY(-50%) rotate(45deg);
406
+ pointer-events: none;
407
+ }
408
+
409
+ select {
410
+ appearance: none;
411
+ cursor: pointer;
412
+ }
413
+ }
414
+ }
415
+
416
+ .btn-reserve,
417
+ .btn-contact {
418
+ width: 100%;
419
+ height: 48px;
420
+ border-radius: 24px;
421
+ font-size: 16px;
422
+ font-weight: 500;
423
+ cursor: pointer;
424
+ margin-bottom: 12px;
425
+ transition: all 0.2s ease;
426
+ border: none;
427
+ }
428
+
429
+ .btn-reserve {
430
+ background-color: #f58b54;
431
+ color: white;
432
+
433
+ &:hover {
434
+ background-color: darken(#f58b54, 5%);
435
+ }
436
+ }
437
+
438
+ .btn-contact {
439
+ background-color: #ff4500;
440
+ color: white;
441
+
442
+ &:hover {
443
+ background-color: darken(#ff4500, 5%);
444
+ }
445
+ }
446
+ }
447
+ }
448
+
449
+ //room
450
+ // SCSS Variables
451
+ $neutral-200: #e5e7eb;
452
+ $neutral-300: #d1d5db;
453
+ $neutral-500: #6b7280;
454
+ $neutral-600: #4b5563;
455
+ $neutral-700: #374151;
456
+ $gray-200: #e5e7eb;
457
+ $gray-700: #374151;
458
+ $red-500: #ef4444;
459
+ $orange-500: #f97316;
460
+ $space-2: 0.5rem;
461
+ $space-4: 1rem;
462
+ $space-6: 1.5rem;
463
+ $space-8: 2rem;
464
+ $space-10: 2.5rem;
465
+ $space-12: 3rem;
466
+ $space-16: 4rem;
467
+ $font-size-sm: 0.875rem;
468
+ $font-size-lg: 1.125rem;
469
+ $font-size-2xl: 1.5rem;
470
+ $font-size-3xl: 1.875rem;
471
+ $font-size-4xl: 2.25rem;
472
+
473
+ // Media Query Breakpoints
474
+ $sm: 640px;
475
+ $lg: 1024px;
476
+ $xl: 1280px;
477
+
478
+ // Base Styles
479
+ .listing-section__wrap {
480
+ margin-bottom: $space-10;
481
+ border-radius: 1rem;
482
+ padding: 1.5rem;
483
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
484
+
485
+ .section-title {
486
+ font-size: $font-size-2xl;
487
+ font-weight: 600;
488
+
489
+ @media (min-width: $sm) {
490
+ font-size: $font-size-3xl;
491
+ }
492
+
493
+ @media (min-width: $lg) {
494
+ font-size: $font-size-4xl;
495
+ }
496
+ }
497
+
498
+ .section-divider {
499
+ height: 1px;
500
+ margin: $space-8 0;
501
+ background-color: $gray-200;
502
+ border: none;
503
+
504
+ .dark & {
505
+ background-color: $gray-700;
506
+ }
507
+ }
508
+ }
509
+
510
+ .room-details {
511
+ &--shared {
512
+ width: 100%;
513
+ padding: $space-4;
514
+
515
+ @media (min-width: $lg) {
516
+ width: 75%;
517
+ }
518
+ }
519
+
520
+ .room-header {
521
+ border-radius: 0.375rem;
522
+
523
+ @media (min-width: $sm) {
524
+ border-radius: 0.75rem;
525
+ }
526
+
527
+ .room-header__content {
528
+ display: grid;
529
+ grid-template-columns: 1fr;
530
+
531
+ .room-title {
532
+ font-size: $font-size-2xl;
533
+ font-weight: 600;
534
+ margin-bottom: $space-4;
535
+
536
+ @media (min-width: $sm) {
537
+ font-size: $font-size-3xl;
538
+ }
539
+
540
+ @media (min-width: $lg) {
541
+ font-size: $font-size-4xl;
542
+ }
543
+ }
544
+
545
+ .gallery-container {
546
+ width: 100%;
547
+ border-radius: 1rem;
548
+ overflow: hidden;
549
+
550
+ .gallery-aspect {
551
+ aspect-ratio: 4 / 3;
552
+ }
553
+ }
554
+ }
555
+ }
556
+
557
+ .room-status {
558
+ display: flex;
559
+ justify-content: space-between;
560
+ align-items: center;
561
+ margin: $space-4 0 $space-8;
562
+ }
563
+
564
+ .room-info {
565
+ display: flex;
566
+ align-items: center;
567
+ justify-content: space-between;
568
+ margin-bottom: $space-8;
569
+ color: $neutral-700;
570
+ font-size: $font-size-sm;
571
+
572
+ .dark & {
573
+ color: $neutral-300;
574
+ }
575
+
576
+ @media (min-width: $xl) {
577
+ justify-content: flex-start;
578
+ gap: $space-12;
579
+ }
580
+
581
+ .room-info__item {
582
+ display: flex;
583
+ align-items: center;
584
+ gap: $space-2;
585
+
586
+ .icon {
587
+ font-size: 1.5rem;
588
+ }
589
+ }
590
+ }
591
+
592
+ .room-description {
593
+ margin-bottom: $space-8;
594
+ max-width: 100%;
595
+
596
+ .subsection-title {
597
+ font-size: $font-size-2xl;
598
+ font-weight: 600;
599
+ }
600
+
601
+ .description-divider {
602
+ width: 3.5rem;
603
+ border-bottom: 1px solid $neutral-200;
604
+ margin-bottom: $space-4;
605
+
606
+ .dark & {
607
+ border-color: $neutral-700;
608
+ }
609
+ }
610
+
611
+ .description-text {
612
+ color: $neutral-600;
613
+ word-break: break-word;
614
+
615
+ .dark & {
616
+ color: $neutral-300;
617
+ }
618
+ }
619
+ }
620
+
621
+ .room-amenities {
622
+ margin: $space-8 0;
623
+
624
+ .subsection-title {
625
+ font-size: $font-size-2xl;
626
+ font-weight: 600;
627
+ }
628
+
629
+ .amenities-subtitle {
630
+ display: block;
631
+ margin-top: $space-2;
632
+ color: $neutral-500;
633
+ }
634
+
635
+ .amenities-divider {
636
+ width: 3.5rem;
637
+ border-bottom: 1px solid $neutral-200;
638
+ margin-bottom: $space-6;
639
+
640
+ .dark & {
641
+ border-color: $neutral-700;
642
+ }
643
+ }
644
+
645
+ .amenities-grid {
646
+ display: grid;
647
+ grid-template-columns: 1fr;
648
+ gap: $space-6;
649
+ color: $neutral-700;
650
+ font-size: $font-size-sm;
651
+
652
+ .dark & {
653
+ color: $neutral-300;
654
+ }
655
+
656
+ @media (min-width: $xl) {
657
+ grid-template-columns: repeat(3, 1fr);
658
+ }
659
+
660
+ .amenity-item {
661
+ display: flex;
662
+ align-items: center;
663
+ gap: $space-2;
664
+
665
+ .amenity-image {
666
+ width: 2rem;
667
+ height: 2rem;
668
+ object-fit: cover;
669
+ border-radius: 0.375rem;
670
+ }
671
+
672
+ .amenity-icon {
673
+ font-size: 1.875rem;
674
+ }
675
+ }
676
+ }
677
+ }
678
+ }
679
+
680
+ .room-sidebar {
681
+ width: 100%;
682
+ padding-top: $space-4;
683
+
684
+ @media (min-width: $lg) {
685
+ width: 30%; // Approximating 1.8/4
686
+ }
687
+
688
+ .sidebar-content {
689
+ padding: $space-4;
690
+
691
+ .price-display {
692
+ display: flex;
693
+ justify-content: space-between;
694
+
695
+ .price {
696
+ font-size: $font-size-3xl;
697
+ font-weight: 600;
698
+ }
699
+ }
700
+
701
+ .booking-form {
702
+ display: flex;
703
+ flex-direction: column;
704
+ border-radius: 1.5rem;
705
+
706
+ .dark & {
707
+ border-color: $neutral-700;
708
+ }
709
+
710
+ .form-content {
711
+ padding: 0 $space-6 $space-6;
712
+
713
+ .error-message {
714
+ color: $red-500;
715
+ font-size: 0.75rem;
716
+ }
717
+
718
+ .guest-select {
719
+ margin-top: $space-4;
720
+ }
721
+
722
+ .select-guests {
723
+ flex: 1;
724
+ }
725
+ }
726
+ }
727
+
728
+ .cost-breakdown {
729
+ display: flex;
730
+ flex-direction: column;
731
+ gap: $space-4;
732
+
733
+ .cost-divider {
734
+ border-bottom: 1px solid $neutral-200;
735
+
736
+ .dark & {
737
+ border-color: $neutral-700;
738
+ }
739
+ }
740
+
741
+ .cost-item {
742
+ display: flex;
743
+ justify-content: space-between;
744
+ color: $neutral-600;
745
+
746
+ .dark & {
747
+ color: $neutral-300;
748
+ }
749
+
750
+ .cost-label {
751
+ display: flex;
752
+ align-items: center;
753
+ gap: $space-2;
754
+
755
+ .cost-title {
756
+ font-size: $font-size-lg;
757
+ font-weight: 500;
758
+ }
759
+
760
+ .tooltip-container {
761
+ position: relative;
762
+ display: flex;
763
+ align-items: center;
764
+
765
+ .tooltip-icon {
766
+ font-size: 1.5rem;
767
+
768
+ &--cursor {
769
+ cursor: pointer;
770
+ }
771
+ }
772
+
773
+ .tooltip {
774
+ background-color: $orange-500;
775
+ color: white;
776
+ border-radius: 0.375rem;
777
+ padding: $space-2 $space-4;
778
+ max-width: 150px;
779
+ text-align: center;
780
+ font-size: 0.75rem;
781
+ }
782
+ }
783
+ }
784
+
785
+ &--total {
786
+ font-weight: 600;
787
+ }
788
+ }
789
+ }
790
+ }
791
+ }
792
+
793
+ .listingSection__wrap {
794
+ border: 1px solid rgb(184, 183, 183);
795
+ }
796
+ .rooms-design {
797
+ margin-top: 15px;
798
+ display: flex;
799
+ flex-direction: column;
800
+ }
801
+
802
+ .description-container-listing {
803
+ display: flex;
804
+ flex-direction: column;
805
+ }
806
+
807
+ .description {
808
+ font-size: 14px;
809
+ color: #333;
810
+ line-height: 1.5;
811
+ }
812
+
813
+ .btn-view-more-listing {
814
+ align-self: flex-start;
815
+ transition: background-color 0.2s ease;
816
+ margin-top: 8px;
817
+ background: none;
818
+ border: none;
819
+ color: #1e40af;
820
+ font-weight: 600;
821
+ cursor: pointer;
822
+ text-decoration: underline;
823
+ }
824
+
825
+ .btn-booking {
826
+ position: relative;
827
+ width: 100%;
828
+ background: linear-gradient(135deg, #081976, #0d215c);
829
+ color: #fff;
830
+ border: none;
831
+ padding: 24px 24px;
832
+ border-radius: 8px;
833
+ font-size: 16px;
834
+ font-weight: 600;
835
+ text-align: center;
836
+ overflow: hidden;
837
+ cursor: pointer;
838
+ display: flex;
839
+ justify-content: center;
840
+ align-items: center;
841
+
842
+ .price-text,
843
+ .cta-text {
844
+ position: absolute;
845
+ transition: opacity 0.3s ease;
846
+ white-space: nowrap;
847
+ }
848
+
849
+ .price-text {
850
+ opacity: 1;
851
+ }
852
+
853
+ .cta-text {
854
+ opacity: 0;
855
+ }
856
+
857
+ &:hover {
858
+ .price-text {
859
+ opacity: 0;
860
+ }
861
+
862
+ .cta-text {
863
+ opacity: 1;
864
+ }
865
+ }
866
+
867
+ &.disabled {
868
+ background: #ccc;
869
+ cursor: not-allowed;
870
+ opacity: 0.6;
871
+ }
872
+ }
873
+
874
+ .btn-view-more {
875
+ margin-top: 8px;
876
+ background: none;
877
+ border: none;
878
+ color: #1e40af;
879
+ font-weight: 600;
880
+ cursor: pointer;
881
+ text-decoration: underline;
882
+ }
883
+
884
+ .section-header-amenties {
885
+ font-size: 14px;
886
+ font-weight: bold;
887
+ }