iceholidays-frontend 0.6.0 → 0.7.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 (28) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/iceholidays/frontend/_slick-theme.scss +194 -0
  3. data/app/assets/stylesheets/iceholidays/frontend/_slick.scss +100 -0
  4. data/app/assets/stylesheets/iceholidays/frontend/application.sass.scss +56 -3
  5. data/app/assets/stylesheets/iceholidays/frontend/common.scss +14 -0
  6. data/app/assets/stylesheets/iceholidays/frontend/layout.scss +1 -1
  7. data/app/assets/stylesheets/iceholidays/frontend/utils/_slick_overrides.scss +3 -0
  8. data/app/javascript/api-services/brochure-api.service.ts +17 -0
  9. data/app/javascript/api-services/posts-api.service.ts +47 -0
  10. data/app/javascript/interfaces/blog.interface.ts +8 -0
  11. data/app/javascript/react/App.tsx +1 -1
  12. data/app/javascript/react/components/Destinations.tsx +21 -10
  13. data/app/javascript/react/components/Testimonials.tsx +4 -1
  14. data/app/javascript/react/components/shared/LocationDropdown.tsx +3 -1
  15. data/app/javascript/react/layouts/MainHeader.tsx +80 -32
  16. data/app/javascript/react/pages/BlogPage.tsx +82 -66
  17. data/app/javascript/react/pages/BlogShowPage.tsx +50 -35
  18. data/app/javascript/react/pages/ListingPage.tsx +42 -18
  19. data/app/javascript/react/pages/ShowPage.tsx +84 -52
  20. data/app/javascript/react/widgets/FilterPills.tsx +21 -18
  21. data/config/routes.rb +1 -1
  22. data/lib/iceholidays/frontend/version.rb +1 -1
  23. data/public/iceholidays-assets/application.css +296 -8
  24. data/public/iceholidays-assets/application.js +161 -121
  25. data/public/iceholidays-assets/application.js.map +4 -4
  26. data/public/iceholidays-assets/images/TST Ribbon@2x.png +0 -0
  27. data/public/iceholidays-assets/images/TST Ribbon@3x.png +0 -0
  28. metadata +10 -2
@@ -1,6 +1,5 @@
1
- import React, { useState } from "react";
2
- import { Button, Carousel, Col, Flex, Form, Layout, Modal, notification, Row, Select, Skeleton, Space } from "antd";
3
- import SlickButtonFix from "../components/shared/SlickButtonFix";
1
+ import React from "react";
2
+ import { Button, Col, Flex, Layout, Modal, notification, Row, Skeleton, Space } from "antd";
4
3
  import { mdiAccountCash, mdiAccountGroup, mdiAirplane, mdiBagChecked, mdiBedKing, mdiClose, mdiEmailOutline, mdiFileDownload, mdiFlagTriangle, mdiMapMarker, mdiMapMarkerOutline, mdiMenuDown, mdiMenuLeft, mdiMenuRight, mdiMenuUp, mdiPhoneInTalkOutline, mdiReceiptText, mdiShieldAccount, mdiShieldAirplane, mdiSilverwareForkKnife, mdiWhatsapp } from "@mdi/js";
5
4
  import Icon from "@mdi/react";
6
5
  import Headline from "../components/shared/Headline";
@@ -13,11 +12,48 @@ import AgentsApi from "../../api-services/agents-api.service";
13
12
  import { Agent } from "../../interfaces/agent.interface";
14
13
  import PriceDetails from "../components/PriceDetails";
15
14
  import ContactAgentsForm from "../components/shared/ContactAgentsForm";
15
+ import Markdown from "react-markdown";
16
+ import rehypeRaw from "rehype-raw";
17
+ import remarkGfm from "remark-gfm";
18
+ import Slider from "react-slick";
16
19
 
17
20
  const breadcrumbs = [
18
21
  { title: 'Home' },
19
22
  ]
20
23
 
24
+
25
+ const settings = {
26
+ dots: false,
27
+ arrows: true,
28
+ slidesToShow: 7.5,
29
+ pauseOnHover:false,
30
+ speed: 500,
31
+ infinite: false,
32
+ slidesToScroll: 1,
33
+ prevArrow: <Icon path={mdiMenuLeft} size={2} />,
34
+ nextArrow: <Icon path={mdiMenuRight} size={2} />,
35
+ responsive: [
36
+ {
37
+ breakpoint: 1024,
38
+ settings: {
39
+ slidesToShow: 5.5,
40
+ }
41
+ },
42
+ {
43
+ breakpoint: 768,
44
+ settings: {
45
+ slidesToShow: 3.5,
46
+ }
47
+ },
48
+ {
49
+ breakpoint: 480,
50
+ settings: {
51
+ slidesToShow: 2.5,
52
+ }
53
+ },
54
+ ]
55
+ };
56
+
21
57
  const thingsToKnow = (inclusionsData) => {
22
58
  return [
23
59
  {icon: <Icon path={mdiShieldAccount} size={1} />, label: "Free Travel Insurance", visible: inclusionsData.acf},
@@ -171,6 +207,7 @@ class ShowPage extends React.Component <{params;}> {
171
207
  const dates = itinerary.tours.length == 0 ? [] : itinerary.tours.map((tour:any) => {
172
208
  return {id: tour.id, date: tour.departure_date, price: `${itinerary.priceCurrency} ${tour.price}`}
173
209
  });
210
+ const tourInclusives = thingsToKnow(itinerary.includings);
174
211
 
175
212
  return (
176
213
  <div id="show-page">
@@ -191,31 +228,21 @@ class ShowPage extends React.Component <{params;}> {
191
228
  </Headline>
192
229
 
193
230
  <div id="date-selector">
194
- <Carousel infinite={false} arrows dots={false} draggable={true} slidesToScroll= {1} slidesToShow={8}
195
- prevArrow={
196
- <SlickButtonFix>
197
- <Icon path={mdiMenuLeft} size={2} />
198
- </SlickButtonFix>
231
+ <Slider {...settings}>
232
+ {
233
+ dates.map((tour, index) => {
234
+ return <div key={index} className={`date-box ${selectedTour?.id == tour.id && "selected"}`} onClick={()=>this.selectTour(tour.id)}>
235
+ <Flex justify="space-between" align="center" vertical gap={8}>
236
+ <div className="date-box_date"> {tour.date} </div>
237
+ <div>
238
+ <span>From</span>
239
+ <div className="date-box_price"> {tour.price} </div>
240
+ </div>
241
+ </Flex>
242
+ </div>
243
+ })
199
244
  }
200
- nextArrow={
201
- <SlickButtonFix>
202
- <Icon path={mdiMenuRight} size={2} />
203
- </SlickButtonFix>
204
- }>
205
- {
206
- dates.map((tour, index) => {
207
- return <div key={index} className={`date-box ${selectedTour?.id == tour.id && "selected"}`} onClick={()=>this.selectTour(tour.id)}>
208
- <Flex justify="space-between" align="center" vertical gap={8}>
209
- <div className="date-box_date"> {tour.date} </div>
210
- <div>
211
- <span>From</span>
212
- <div className="date-box_price"> {tour.price} </div>
213
- </div>
214
- </Flex>
215
- </div>
216
- })
217
- }
218
- </Carousel>
245
+ </Slider>
219
246
  </div>
220
247
  </>
221
248
 
@@ -231,36 +258,41 @@ class ShowPage extends React.Component <{params;}> {
231
258
  ) : (
232
259
  <div className="details">
233
260
  <Flex gap={10} vertical>
234
- <div className="details-container">
235
- <div className="details-container_header"> Things to know </div>
236
- <div className="details-container_content">
237
- <div id="things-to-know">
238
- {
239
- thingsToKnow(itinerary.includings)
240
- .filter(item => item.visible)
241
- .map(item => (
242
- <div className="item">
243
- <div className="icon"> {item.icon} </div>
244
- <label>{item.label}</label>
245
- </div>
246
- ))
247
- }
248
- {
249
- selectedTour?.guaranteed_departure && (
250
- <div className="item guaranteed">
251
- <div className="icon"> <Icon path={mdiShieldAirplane} size={1} /></div>
252
- <label>Guaranteed Departure</label>
253
- </div>
254
- )
255
- }
261
+ {
262
+ (tourInclusives.every(x => x.visible) || selectedTour?.guaranteed_departure) && (
263
+ <div className="details-container">
264
+ <div className="details-container_header"> Tour Inclusive </div>
265
+ <div className="details-container_content">
266
+ <div id="things-to-know">
267
+ {
268
+ tourInclusives.filter(item => item.visible)
269
+ .map(item => (
270
+ <div className="item">
271
+ <div className="icon"> {item.icon} </div>
272
+ <label>{item.label}</label>
273
+ </div>
274
+ ))
275
+ }
276
+ {
277
+ selectedTour?.guaranteed_departure && (
278
+ <div className="item guaranteed">
279
+ <div className="icon"> <Icon path={mdiShieldAirplane} size={1} /></div>
280
+ <label>Guaranteed Departure</label>
281
+ </div>
282
+ )
283
+ }
284
+ </div>
285
+ </div>
256
286
  </div>
257
- </div>
258
- </div>
287
+ )
288
+ }
259
289
 
260
290
  <div className="details-container">
261
291
  <div className="details-container_header"> Description </div>
262
292
  <div className="details-container_content">
263
- <div id="description" className={`pre-wrap ${isCollapsed && 'collapsed'}`}>{itinerary?.description}</div>
293
+ <div id="description" className={`${isCollapsed && 'collapsed'}`}>
294
+ <Markdown remarkPlugins={[remarkGfm]} rehypePlugins={[rehypeRaw]}>{itinerary?.description}</Markdown>
295
+ </div>
264
296
  <Button className="toggle-description" color="default" variant="filled" block onClick={this.toggleDescription}>{ isCollapsed ? 'Expand' : 'Collapse'}
265
297
  <Icon path={isCollapsed ? mdiMenuDown : mdiMenuUp} size="19px" />
266
298
  </Button>
@@ -19,10 +19,10 @@ function FilterPills(
19
19
  props: {
20
20
  items:any[];
21
21
  title?:string;
22
- initialValue:{keyword?:string, year?:string, month?: string, location_id?:any}
23
- bindLabel?:string;
24
- bindValue?:string;
25
- allOption?:boolean;
22
+ initialValue:{keyword?:string, year?:any, month?: string, location_id?:any, type?: any}
23
+ bindLabel:string;
24
+ bindValue:string;
25
+ allOption:boolean;
26
26
  selectFilter;
27
27
  }){
28
28
 
@@ -32,7 +32,7 @@ function FilterPills(
32
32
 
33
33
  const allHasValues = () => {
34
34
  const {keyword, ...noKeyword} = selected;
35
- return Object.entries(noKeyword).every(o => o[1] != "");
35
+ return Object.entries(noKeyword).every(o => o[1] != "" && o[1] != null);
36
36
  }
37
37
  const [collapseFilters, setcollapseFilters] = useState(allHasValues);
38
38
 
@@ -57,16 +57,15 @@ function FilterPills(
57
57
  { title && <div className="filter-title"> {title} </div> }
58
58
  <Space size={10} wrap>
59
59
  {
60
- allOption && <div className="filter-pill selected"> <span> All </span></div>
60
+ allOption && <div onClick={()=>selectFilter(bindValue, null)} className={`filter-pill ${(selected[bindValue] == null || selected[bindValue] == '') && 'selected'}`}> <span> All </span></div>
61
61
  }
62
62
  {
63
63
  items.map((item, index) => {
64
64
  //special case for location id
65
65
  const id:any = bindValue == "location_id" ? "id" : bindValue;
66
- const label = bindLabel ? item[bindLabel] : item;
67
66
  const value = bindValue ? item[id] : item;
68
67
  const selectedItem = selected && bindValue ? selected[bindValue]: item ;
69
- return <div key={index} onClick={()=>selectFilter(bindValue, value)} className={`filter-pill ${selectedItem == value && 'selected'}`}> <span>{ label } </span></div>
68
+ return <div key={index} onClick={()=>selectFilter(bindValue, value)} className={`filter-pill ${selectedItem == value && 'selected'}`}> <span>{ item[bindLabel] } </span></div>
70
69
  })
71
70
  }
72
71
  </Space>
@@ -77,26 +76,24 @@ function FilterPills(
77
76
  <div className="filter-title"> Year </div>
78
77
  <Space size={10} wrap>
79
78
  {
80
- allOption && <div className="filter-pill selected"> <span> All </span></div>
79
+ allOption && <div onClick={()=>selectFilter("year", "")} className={`filter-pill ${selected.year == '' && 'selected'}`}> <span> All </span></div>
81
80
  }
82
81
  {
83
- years().map((year, index) => {
84
- const selectedItem = selected && selected.year;
85
- return <div key={index} onClick={()=>selectFilter("year", year)} className={`filter-pill default-filter ${selectedItem == year.toString() && 'selected'}`}> <span>{year} </span></div>
86
- })
82
+ years().map((year, index) => (
83
+ <div key={index} onClick={()=>selectFilter("year", year)} className={`filter-pill default-filter ${selected.year == year && 'selected'}`}> <span>{year} </span></div>
84
+ ))
87
85
  }
88
86
  </Space>
89
87
 
90
88
  <div className="filter-title"> Month </div>
91
89
  <Row gutter={[10, 10]} justify="space-between">
92
90
  {
93
- allOption && <Col className="filter-pill selected"> <span> All </span></Col>
91
+ allOption && <div onClick={()=>selectFilter("month", "")} className={`filter-pill ${selected.month == '' && 'selected'}`}> <span> All </span></div>
94
92
  }
95
93
  {
96
- months.map((month, index) => {
97
- const selectedItem = selected && selected.month ;
98
- return <Col xs={8} md={6} lg={4}> <div key={index} onClick={()=>selectFilter("month", month.shortMonth)} className={`filter-pill default-filter ${selectedItem?.toString() == month.shortMonth && 'selected'}`}> <span>{month.name} </span></div> </Col>
99
- })
94
+ months.map((month, index) => (
95
+ <Col key={index} xs={8} md={6} lg={4}> <div onClick={()=>selectFilter("month", month.shortMonth)} className={`filter-pill default-filter ${selected.month == month.shortMonth && 'selected'}`}> <span>{month.name} </span></div> </Col>
96
+ ))
100
97
  }
101
98
  </Row>
102
99
  </Space>
@@ -108,4 +105,10 @@ function FilterPills(
108
105
 
109
106
  }
110
107
 
108
+ FilterPills.defaultProps = {
109
+ allOption: false,
110
+ bindLabel: "label",
111
+ bindValue: "id"
112
+ }
113
+
111
114
  export default FilterPills;
data/config/routes.rb CHANGED
@@ -6,7 +6,7 @@ Iceholidays::Frontend::Engine.routes.draw do
6
6
  get '/about-us' => 'site#about_us', as: :about_us
7
7
  get '/countries' => 'site#countries', as: :countries
8
8
  get '/blog' => 'site#blog', as: :blog
9
- get '/blog/1' => 'site#show_blog', as: :show_blog
9
+ get '/blog/:id' => 'site#show_blog', as: :show_blog
10
10
  get '/contact-agents' => 'site#contact_agents', as: :contact_agents
11
11
  get '/contact-us' => 'site#contact_us', as: :contact_us
12
12
  resources :posts, only:[:index, :show]
@@ -1,5 +1,5 @@
1
1
  module Iceholidays
2
2
  module Frontend
3
- VERSION = "0.6.0"
3
+ VERSION = "0.7.0"
4
4
  end
5
5
  end
@@ -15,6 +15,240 @@
15
15
  *= require_self
16
16
  */
17
17
  @import url("//fonts.googleapis.com/css?family=Poppins:ital,wght@0,100;0,200;0,200;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,200;1,400;1,500;1,600;1,700;1,800;1,900&display=swap");
18
+ /* Slider */
19
+ .slick-slider {
20
+ position: relative;
21
+ display: block;
22
+ box-sizing: border-box;
23
+ -webkit-touch-callout: none;
24
+ -webkit-user-select: none;
25
+ -khtml-user-select: none;
26
+ -moz-user-select: none;
27
+ -ms-user-select: none;
28
+ user-select: none;
29
+ -ms-touch-action: pan-y;
30
+ touch-action: pan-y;
31
+ -webkit-tap-highlight-color: transparent;
32
+ }
33
+
34
+ .slick-list {
35
+ position: relative;
36
+ overflow: hidden;
37
+ display: block;
38
+ margin: 0;
39
+ padding: 0;
40
+ }
41
+ .slick-list:focus {
42
+ outline: none;
43
+ }
44
+ .slick-list.dragging {
45
+ cursor: pointer;
46
+ cursor: hand;
47
+ }
48
+
49
+ .slick-slider .slick-track,
50
+ .slick-slider .slick-list {
51
+ -webkit-transform: translate3d(0, 0, 0);
52
+ -moz-transform: translate3d(0, 0, 0);
53
+ -ms-transform: translate3d(0, 0, 0);
54
+ -o-transform: translate3d(0, 0, 0);
55
+ transform: translate3d(0, 0, 0);
56
+ }
57
+
58
+ .slick-track {
59
+ position: relative;
60
+ left: 0;
61
+ top: 0;
62
+ display: block;
63
+ margin-left: auto;
64
+ margin-right: auto;
65
+ }
66
+ .slick-track:before, .slick-track:after {
67
+ content: "";
68
+ display: table;
69
+ }
70
+ .slick-track:after {
71
+ clear: both;
72
+ }
73
+ .slick-loading .slick-track {
74
+ visibility: hidden;
75
+ }
76
+
77
+ .slick-slide {
78
+ float: left;
79
+ height: 100%;
80
+ min-height: 1px;
81
+ display: none;
82
+ }
83
+ [dir=rtl] .slick-slide {
84
+ float: right;
85
+ }
86
+ .slick-slide img {
87
+ display: block;
88
+ }
89
+ .slick-slide.slick-loading img {
90
+ display: none;
91
+ }
92
+ .slick-slide.dragging img {
93
+ pointer-events: none;
94
+ }
95
+ .slick-initialized .slick-slide {
96
+ display: block;
97
+ }
98
+ .slick-loading .slick-slide {
99
+ visibility: hidden;
100
+ }
101
+ .slick-vertical .slick-slide {
102
+ display: block;
103
+ height: auto;
104
+ border: 1px solid transparent;
105
+ }
106
+
107
+ .slick-arrow.slick-hidden {
108
+ display: none;
109
+ }
110
+
111
+ /* Slider */
112
+ /* Icons */
113
+ /* Arrows */
114
+ .slick-prev,
115
+ .slick-next {
116
+ position: absolute;
117
+ display: block;
118
+ height: 20px;
119
+ width: 20px;
120
+ line-height: 0px;
121
+ font-size: 0px;
122
+ cursor: pointer;
123
+ background: transparent;
124
+ color: transparent;
125
+ top: 50%;
126
+ -webkit-transform: translate(0, -50%);
127
+ -ms-transform: translate(0, -50%);
128
+ transform: translate(0, -50%);
129
+ padding: 0;
130
+ border: none;
131
+ outline: none;
132
+ }
133
+ .slick-prev:hover, .slick-prev:focus,
134
+ .slick-next:hover,
135
+ .slick-next:focus {
136
+ outline: none;
137
+ background: transparent;
138
+ color: transparent;
139
+ }
140
+ .slick-prev:hover:before, .slick-prev:focus:before,
141
+ .slick-next:hover:before,
142
+ .slick-next:focus:before {
143
+ opacity: 1;
144
+ }
145
+ .slick-prev.slick-disabled:before,
146
+ .slick-next.slick-disabled:before {
147
+ opacity: 0.25;
148
+ }
149
+ .slick-prev:before,
150
+ .slick-next:before {
151
+ font-family: "slick";
152
+ font-size: 20px;
153
+ line-height: 1;
154
+ color: white;
155
+ opacity: 0.75;
156
+ -webkit-font-smoothing: antialiased;
157
+ -moz-osx-font-smoothing: grayscale;
158
+ }
159
+
160
+ .slick-prev {
161
+ left: -25px;
162
+ }
163
+ [dir=rtl] .slick-prev {
164
+ left: auto;
165
+ right: -25px;
166
+ }
167
+ .slick-prev:before {
168
+ content: "←";
169
+ }
170
+ [dir=rtl] .slick-prev:before {
171
+ content: "→";
172
+ }
173
+
174
+ .slick-next {
175
+ right: -25px;
176
+ }
177
+ [dir=rtl] .slick-next {
178
+ left: -25px;
179
+ right: auto;
180
+ }
181
+ .slick-next:before {
182
+ content: "→";
183
+ }
184
+ [dir=rtl] .slick-next:before {
185
+ content: "←";
186
+ }
187
+
188
+ /* Dots */
189
+ .slick-dotted.slick-slider {
190
+ margin-bottom: 30px;
191
+ }
192
+
193
+ .slick-dots {
194
+ position: absolute;
195
+ bottom: -25px;
196
+ list-style: none;
197
+ display: block;
198
+ text-align: center;
199
+ padding: 0;
200
+ margin: 0;
201
+ width: 100%;
202
+ }
203
+ .slick-dots li {
204
+ position: relative;
205
+ display: inline-block;
206
+ height: 20px;
207
+ width: 20px;
208
+ margin: 0 5px;
209
+ padding: 0;
210
+ cursor: pointer;
211
+ }
212
+ .slick-dots li button {
213
+ border: 0;
214
+ background: transparent;
215
+ display: block;
216
+ height: 20px;
217
+ width: 20px;
218
+ outline: none;
219
+ line-height: 0px;
220
+ font-size: 0px;
221
+ color: transparent;
222
+ padding: 5px;
223
+ cursor: pointer;
224
+ }
225
+ .slick-dots li button:hover, .slick-dots li button:focus {
226
+ outline: none;
227
+ }
228
+ .slick-dots li button:hover:before, .slick-dots li button:focus:before {
229
+ opacity: 1;
230
+ }
231
+ .slick-dots li button:before {
232
+ position: absolute;
233
+ top: 0;
234
+ left: 0;
235
+ content: "•";
236
+ width: 20px;
237
+ height: 20px;
238
+ font-family: "slick";
239
+ font-size: 6px;
240
+ line-height: 20px;
241
+ text-align: center;
242
+ color: black;
243
+ opacity: 0.25;
244
+ -webkit-font-smoothing: antialiased;
245
+ -moz-osx-font-smoothing: grayscale;
246
+ }
247
+ .slick-dots li.slick-active button:before {
248
+ color: black;
249
+ opacity: 0.75;
250
+ }
251
+
18
252
  .ant-layout-content {
19
253
  position: relative;
20
254
  }
@@ -112,6 +346,10 @@ a {
112
346
  background-color: transparent;
113
347
  }
114
348
 
349
+ .slick-track {
350
+ margin: unset;
351
+ }
352
+
115
353
  #main-header {
116
354
  --button-height: 35px;
117
355
  position: relative;
@@ -334,7 +572,7 @@ a {
334
572
  }
335
573
  #main-footer .contact-info .ant-flex {
336
574
  gap: 10px !important;
337
- align-items: flex-start;
575
+ align-items: center;
338
576
  }
339
577
  }
340
578
  #headline {
@@ -581,6 +819,18 @@ a {
581
819
  line-height: 30px;
582
820
  }
583
821
  }
822
+ @media only screen and (min-width: 1441px) {
823
+ #ribbon-section_header {
824
+ background-image: url("/iceholidays-assets/images/TST Ribbon@2x.png");
825
+ height: 300px;
826
+ }
827
+ }
828
+ @media only screen and (min-width: 2880px) {
829
+ #ribbon-section_header {
830
+ background-image: url("/iceholidays-assets/images/TST Ribbon@3x.png");
831
+ height: 450px;
832
+ }
833
+ }
584
834
  .ant-input {
585
835
  field-sizing: content;
586
836
  }
@@ -1360,20 +1610,20 @@ body {
1360
1610
  #show-page #date-selector {
1361
1611
  padding: 20px var(--side-padding);
1362
1612
  }
1363
- #show-page #date-selector [class~=ant-carousel] .slick-slide > div {
1613
+ #show-page #date-selector [class~=slick-slider] .slick-slide > div {
1364
1614
  padding: 0 5px;
1365
1615
  }
1366
- #show-page #date-selector [class~=ant-carousel] .slick-arrow {
1616
+ #show-page #date-selector [class~=slick-slider] .slick-arrow {
1367
1617
  color: rgb(149, 148, 146);
1368
1618
  }
1369
- #show-page #date-selector [class~=ant-carousel] .slick-arrow:hover {
1619
+ #show-page #date-selector [class~=slick-slider] .slick-arrow:hover {
1370
1620
  color: #DCB062;
1371
1621
  }
1372
- #show-page #date-selector [class~=ant-carousel] .slick-prev {
1373
- inset-inline-start: -40px;
1622
+ #show-page #date-selector [class~=slick-slider] .slick-prev {
1623
+ inset-inline-start: -35px;
1374
1624
  }
1375
- #show-page #date-selector [class~=ant-carousel] .slick-next {
1376
- inset-inline-end: -40px;
1625
+ #show-page #date-selector [class~=slick-slider] .slick-next {
1626
+ inset-inline-end: -35px;
1377
1627
  }
1378
1628
  #show-page #date-selector .date-box {
1379
1629
  background: #FFFFFF;
@@ -1825,6 +2075,9 @@ body {
1825
2075
  margin: 20px 0;
1826
2076
  display: block;
1827
2077
  }
2078
+ #about-signature-tours picture > img {
2079
+ width: 100%;
2080
+ }
1828
2081
  #about-signature-tours #about-st-feature #feature {
1829
2082
  height: 246px;
1830
2083
  gap: 0px;
@@ -2228,6 +2481,17 @@ body {
2228
2481
  #blog-page_body #blogs {
2229
2482
  margin: 30px 0;
2230
2483
  }
2484
+ #blog-page_body #blogs .preview-content {
2485
+ overflow: hidden;
2486
+ text-overflow: ellipsis;
2487
+ display: -webkit-box;
2488
+ -webkit-line-clamp: 2;
2489
+ -webkit-box-orient: vertical;
2490
+ max-height: 100px;
2491
+ }
2492
+ #blog-page_body #blogs .view-blog {
2493
+ margin-top: 10px;
2494
+ }
2231
2495
 
2232
2496
  #blog-show-page_body {
2233
2497
  margin: 20px var(--side-padding);
@@ -2236,6 +2500,21 @@ body {
2236
2500
  background: rgb(255, 255, 255);
2237
2501
  box-shadow: 0px 5px 20px 0px rgba(225, 182, 91, 0.2);
2238
2502
  }
2503
+ #blog-show-page_body h1 {
2504
+ font-family: Poppins;
2505
+ font-weight: 600;
2506
+ font-size: 24px;
2507
+ line-height: 36px;
2508
+ letter-spacing: 0%;
2509
+ margin-top: 0;
2510
+ }
2511
+ #blog-show-page_body img {
2512
+ object-fit: cover;
2513
+ height: auto;
2514
+ border-radius: 20px;
2515
+ width: 100%;
2516
+ margin-bottom: 20px;
2517
+ }
2239
2518
 
2240
2519
  @media only screen and (min-width: 769px) {
2241
2520
  * {
@@ -2535,6 +2814,15 @@ body {
2535
2814
  line-height: 45px;
2536
2815
  letter-spacing: 0.05em;
2537
2816
  }
2817
+ #show-page #date-selector [class~=slick-slider] .slick-slide > div {
2818
+ padding: 0 5px;
2819
+ }
2820
+ #show-page #date-selector [class~=slick-slider] .slick-prev {
2821
+ inset-inline-start: -40px;
2822
+ }
2823
+ #show-page #date-selector [class~=slick-slider] .slick-next {
2824
+ inset-inline-end: -40px;
2825
+ }
2538
2826
  #show-page_body .toggle_contact-agent,
2539
2827
  #show-page_body .collapse-contact-agent {
2540
2828
  display: none;