You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

868 lines
22 KiB

3 years ago
3 years ago
3 years ago
  1. <template>
  2. <div class="white-bkg">
  3. <header>
  4. <div class="header__col">
  5. <button class="btn btn--primary" @click="goBack">
  6. <svg
  7. xmlns="http://www.w3.org/2000/svg"
  8. class="icon icon-tabler icon-tabler-chevrons-left"
  9. width="24"
  10. height="24"
  11. viewBox="0 0 24 24"
  12. stroke-width="3"
  13. stroke="#ffffff"
  14. fill="none"
  15. stroke-linecap="round"
  16. stroke-linejoin="round"
  17. >
  18. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  19. <polyline points="11 7 6 12 11 17" />
  20. <polyline points="17 7 12 12 17 17" />
  21. </svg>
  22. back
  23. </button>
  24. </div>
  25. <div class="header__col">
  26. <Logo />
  27. </div>
  28. <div class="header__col" />
  29. </header>
  30. <main class="main-with-header">
  31. <ChosenFlights
  32. :selected-orig="selectedOrig"
  33. :selected-dest="selectedDest"
  34. :departure="formattedDate($route.params.departure)"
  35. :departure-time="
  36. selectedSchedule &&
  37. selectedSchedule.fields &&
  38. selectedSchedule.fields.Departure_TimeL
  39. "
  40. style="margin: 0 1rem;"
  41. />
  42. <div class="schedule-wrapper">
  43. <ul class="schedule-grid">
  44. <li
  45. v-for="schedule in schedules"
  46. :key="schedule.fields.Record_ID"
  47. :class="[
  48. 'grid__row',
  49. { grid__row: selectedSchedule.id == schedule.id },
  50. ]"
  51. >
  52. <div class="row__check">
  53. <label class="radio radio--sched" :for="schedule.id">
  54. <input :id="schedule.id" type="radio" name="schedules" />
  55. <span @click="selectSchedule(schedule)">
  56. <svg
  57. xmlns="http://www.w3.org/2000/svg"
  58. class="icon icon-tabler icon-tabler-check"
  59. width="24"
  60. height="24"
  61. viewBox="0 0 24 24"
  62. stroke-width="3"
  63. stroke="#ffffff"
  64. fill="none"
  65. stroke-linecap="round"
  66. stroke-linejoin="round"
  67. >
  68. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  69. <path d="M5 12l5 5l10 -10" />
  70. </svg>
  71. </span>
  72. </label>
  73. </div>
  74. <div class="row__dep">
  75. <label class="text--muni">
  76. {{ selectedOrig.municipality }}
  77. </label>
  78. <h1 class="text--time">
  79. {{ schedule.fields.Departure_TimeL }}
  80. </h1>
  81. </div>
  82. <div class="row__trip">
  83. <svg
  84. xmlns="http://www.w3.org/2000/svg"
  85. class="icon icon-tabler icon-tabler-arrow-right-circle"
  86. width="100"
  87. height="100"
  88. viewBox="0 0 24 24"
  89. stroke-width="1.5"
  90. stroke="#007fff"
  91. fill="none"
  92. stroke-linecap="round"
  93. stroke-linejoin="round"
  94. >
  95. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  96. <path d="M18 15l3 -3l-3 -3" />
  97. <circle cx="5" cy="12" r="2" />
  98. <path d="M7 12h14" />
  99. </svg>
  100. </div>
  101. <div class="row__arr">
  102. <label class="text--muni">
  103. {{ selectedDest.municipality }}
  104. </label>
  105. <h1 class="text--time">
  106. {{ schedule.fields.Arrival_TimeL }}
  107. </h1>
  108. </div>
  109. <div class="row__info">
  110. <h2 class="text--carrier">
  111. {{ schedule.fields.Carrier_Name }}
  112. </h2>
  113. <span
  114. v-if="schedule.fields.Flight_Number"
  115. class="text--flight-num"
  116. >
  117. Flight No. {{ schedule.fields.Flight_Number }}
  118. </span>
  119. <span class="text--dow">
  120. {{ schedule.fields.Frequency_Convert }}
  121. </span>
  122. <span class="badge--avail">
  123. Available until
  124. <strong>{{
  125. formattedDate(schedule.fields.Effective_End)
  126. }}</strong>
  127. </span>
  128. </div>
  129. </li>
  130. </ul>
  131. </div>
  132. <div
  133. :class="[
  134. 'flyout-container',
  135. { 'flyout-container--hide': !selectedSchedule.id },
  136. { 'flyout-container--show': selectedSchedule.id },
  137. ]"
  138. >
  139. <div class="flyout">
  140. <button
  141. v-if="
  142. selectedSchedule &&
  143. selectedSchedule.fields &&
  144. selectedSchedule.fields.IsExpedia &&
  145. selectedSchedule.fields.IsExpedia[0] !== 'true' &&
  146. selectedSchedule.fields.Carrier_Name !==
  147. 'Copper Valley Air Service'
  148. "
  149. class="btn btn--primary"
  150. @click="goToCarrier"
  151. >
  152. see flights
  153. </button>
  154. <div
  155. v-if="
  156. selectedSchedule &&
  157. selectedSchedule.fields &&
  158. selectedSchedule.fields.IsExpedia &&
  159. (selectedSchedule.fields.IsExpedia[0] === 'true' ||
  160. selectedSchedule.fields.Carrier_Name ===
  161. 'Copper Valley Air Service')
  162. "
  163. class="form-row"
  164. >
  165. <label for="">How Many Adults?</label>
  166. <v-select
  167. v-model="numAdult"
  168. :options="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
  169. />
  170. </div>
  171. <div
  172. v-if="
  173. selectedSchedule &&
  174. selectedSchedule.fields &&
  175. selectedSchedule.fields.IsExpedia &&
  176. (selectedSchedule.fields.IsExpedia[0] === 'true' ||
  177. selectedSchedule.fields.Carrier_Name ===
  178. 'Copper Valley Air Service')
  179. "
  180. class="form-row"
  181. >
  182. <label for="">How Many Children?</label>
  183. <v-select
  184. v-model="numChild"
  185. :options="[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
  186. />
  187. </div>
  188. <div
  189. v-if="
  190. selectedSchedule &&
  191. selectedSchedule.fields &&
  192. selectedSchedule.fields.Carrier_Name ===
  193. 'Copper Valley Air Service'
  194. "
  195. class="alert--flights"
  196. >
  197. <h3>
  198. You'll be flying with<br>
  199. <strong>Copper Valley Air Service</strong>,<br>a great local
  200. airline!
  201. </h3>
  202. <p>
  203. Copper Valley is a small, family run airline that not only
  204. provides bi-weekly air-taxi flights, but also mail delivery,
  205. sight-seeing, and adventure flights to remote areas of Alaska.
  206. </p>
  207. <p>
  208. To book with Copper Valley, enter your contact info below and they
  209. will contact you directly to finish your booking.
  210. </p>
  211. </div>
  212. <div
  213. v-if="
  214. selectedSchedule &&
  215. selectedSchedule.fields &&
  216. selectedSchedule.fields.Carrier_Name ===
  217. 'Copper Valley Air Service'
  218. "
  219. class="form-row form-row--two-columns"
  220. >
  221. <input
  222. type="text"
  223. name="firstName"
  224. placeholder="first name"
  225. v-model="firstName"
  226. />
  227. <input
  228. type="text"
  229. name="lastName"
  230. placeholder="last name"
  231. v-model="lastName"
  232. />
  233. </div>
  234. <div
  235. v-if="
  236. selectedSchedule &&
  237. selectedSchedule.fields &&
  238. selectedSchedule.fields.Carrier_Name ===
  239. 'Copper Valley Air Service'
  240. "
  241. class="form-row"
  242. >
  243. <input
  244. type="email"
  245. name="firstName"
  246. placeholder="email address"
  247. v-model="email"
  248. />
  249. </div>
  250. <div
  251. v-if="
  252. selectedSchedule &&
  253. selectedSchedule.fields &&
  254. selectedSchedule.fields.Carrier_Name ===
  255. 'Copper Valley Air Service'
  256. "
  257. class="form-row"
  258. >
  259. <input
  260. type="tel"
  261. name="firstName"
  262. placeholder="phone number"
  263. v-model="phone"
  264. />
  265. </div>
  266. <button
  267. v-if="
  268. selectedSchedule &&
  269. selectedSchedule.fields &&
  270. selectedSchedule.fields.IsExpedia &&
  271. selectedSchedule.fields.IsExpedia[0] === 'true'
  272. "
  273. class="btn btn--primary"
  274. @click="book"
  275. >
  276. book now!
  277. </button>
  278. <button
  279. v-if="
  280. selectedSchedule &&
  281. selectedSchedule.fields &&
  282. selectedSchedule.fields.Carrier_Name ===
  283. 'Copper Valley Air Service'
  284. "
  285. class="btn btn--primary"
  286. @click="contactCarrier"
  287. >
  288. contact carrier <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-send" width="24" height="24" viewBox="0 0 24 24" stroke-width="3" stroke="#000000" fill="none" stroke-linecap="round" stroke-linejoin="round">
  289. <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  290. <line x1="10" y1="14" x2="21" y2="3" />
  291. <path d="M21 3l-6.5 18a0.55 .55 0 0 1 -1 0l-3.5 -7l-7 -3.5a0.55 .55 0 0 1 0 -1l18 -6.5" />
  292. </svg>
  293. </button>
  294. </div>
  295. </div>
  296. </main>
  297. </div>
  298. </template>
  299. <script>
  300. export default {
  301. data () {
  302. return {
  303. schedules: [],
  304. startingDate: '',
  305. selectedSchedule: {},
  306. selectedDays: [],
  307. selectedOrig: {},
  308. selectedDest: {},
  309. numAdult: 1,
  310. numChild: 0,
  311. firstName: '',
  312. lastName: '',
  313. email: '',
  314. phone: ''
  315. }
  316. },
  317. async fetch () {
  318. // console.log(this.$route.params.o)
  319. const today = new Date().toLocaleDateString('en-CA')
  320. const scheduleFetchFilterFormula = `AND(Is_Current="Yes",Origin_IATA="${this.$route.params.o}",Destination_IATA="${this.$route.params.d}",Effective_End>"${today}",SEARCH("${new Date(this.$route.params.departure).getUTCDay()}",Frequency)>0)`
  321. // console.log(scheduleFetchFilterFormula)
  322. const scheduleFetchSort = '&sort[0][field]=Departure_TimeL&sort[0][direction]=asc'
  323. const response = await fetch(`https://api.airtable.com/v0/appiQwfVZixRgRICe/Schedule?filterByFormula=${scheduleFetchFilterFormula}${scheduleFetchSort}`, {
  324. method: 'GET',
  325. headers: {
  326. 'Content-Type': 'application/x-www-form-urlencoded',
  327. Authorization: 'Bearer keyJ2ht64ZSN57AG1'
  328. }
  329. })
  330. const data = await response.json()
  331. // console.log(data)
  332. this.schedules = [...data.records]
  333. },
  334. created () {
  335. // console.log(this.$route.path)
  336. if (this.$route && this.$route.params && this.$route.params.o) {
  337. this.fetchSingleAirport(this.$route.params.o, true)
  338. }
  339. if (this.$route && this.$route.params && this.$route.params.d) {
  340. this.fetchSingleAirport(this.$route.params.d, false)
  341. }
  342. },
  343. methods: {
  344. formattedDate (date) {
  345. const thisDate = new Date(date)
  346. const month = thisDate.toLocaleString('en-us', { month: 'short' })
  347. const year = ((thisDate.getUTCFullYear() !== new Date().getUTCFullYear()) ? ', ' + thisDate.getUTCFullYear() : '')
  348. return month + ' ' + thisDate.getUTCDate() + year
  349. },
  350. daysList (days) {
  351. const list = days.split(', ').map((day) => {
  352. const name = day.toLowerCase().slice(0, -1)
  353. let num
  354. switch (name) {
  355. case 'su':
  356. num = 0
  357. break
  358. case 'mo':
  359. num = 1
  360. break
  361. case 'tu':
  362. num = 2
  363. break
  364. case 'we':
  365. num = 3
  366. break
  367. case 'th':
  368. num = 4
  369. break
  370. case 'fr':
  371. num = 5
  372. break
  373. case 'sa':
  374. num = 6
  375. break
  376. default:
  377. break
  378. }
  379. return {
  380. name,
  381. num
  382. }
  383. })
  384. return list.sort(function (a, b) {
  385. return a.num - b.num
  386. })
  387. },
  388. goBack () {
  389. this.$segment.track('flights__go_back', {
  390. origin: this.$route.params.o,
  391. destination: this.$route.params.d,
  392. departureDate: this.$route.params.departure,
  393. })
  394. this.$router.go(-1)
  395. },
  396. // book2 (schedule) {
  397. // if (schedule.fields.IsExpedia[0] === 'true') {
  398. // this.startingDate = new Date()
  399. // this.selectedSchedule = schedule.fields
  400. // this.selectedDays = this.daysList(schedule.fields.Frequency_Convert)
  401. // } else {
  402. // window.open(schedule.fields['BookingLink (from Carriers_Alaska)'][0])
  403. // }
  404. // },
  405. book () {
  406. this.$segment.track('flights__book', {
  407. origin: this.selectedSchedule.fields.Origin_IATA[0],
  408. destination: this.selectedSchedule.fields.Destination_IATA[0],
  409. departureDate: this.$route.params.departure,
  410. departureTime: this.selectedSchedule.fields.Departure_TimeL,
  411. arrivalTime: this.selectedSchedule.fields.Arrival_TimeL,
  412. numAdult: this.numAdult,
  413. numChild: this.numChild,
  414. carrier: this.selectedSchedule.fields.Carrier_Name
  415. })
  416. window.open(`https://www.anrdoezrs.net/links/100449149/type/am/https://www.expedia.com/go/flight/search/oneway/${this.$route.params.departure}/${this.$route.params.departure}?langid=1033&FromAirport=${this.selectedSchedule.fields.Origin_IATA}&FromTime=${this.selectedSchedule.fields.Departure_TimeL}&ToTime=${this.selectedSchedule.fields.Arrival_TimeL}&ToAirport=${this.selectedSchedule.fields.Destination_IATA}&Class=3&NumAdult=${this.numAdult}&NumChild=${this.numChild}`)
  417. },
  418. goToCarrier () {
  419. this.$segment.track('flights__open_carrier', {
  420. origin: this.selectedSchedule.fields.Origin_IATA[0],
  421. destination: this.selectedSchedule.fields.Destination_IATA[0],
  422. departureDate: this.$route.params.departure,
  423. departureTime: this.selectedSchedule.fields.Departure_TimeL,
  424. arrivalTime: this.selectedSchedule.fields.Arrival_TimeL,
  425. numAdult: this.numAdult,
  426. numChild: this.numChild,
  427. carrier: this.selectedSchedule.fields.Carrier_Name
  428. })
  429. window.open(this.selectedSchedule.fields['BookingLink (from Carriers_Alaska)'][0])
  430. },
  431. async contactCarrier () {
  432. const newBooking =
  433. {
  434. fields: {
  435. ArrivalTime: this.selectedSchedule.fields.Arrival_TimeL,
  436. Carrier: this.selectedSchedule.fields.Carrier_Name,
  437. DepartureTime: this.selectedSchedule.fields.Departure_TimeL,
  438. Destination: this.selectedSchedule.fields.Destination_IATA[0],
  439. Origin: this.selectedSchedule.fields.Origin_IATA[0],
  440. CreatedDate: new Date(),
  441. FirstName: this.firstName,
  442. LastName: this.lastName,
  443. Phone: this.phone,
  444. Email: this.email,
  445. DepartureDate: this.$route.params.departure,
  446. NumAdult: this.numAdult,
  447. NumChild: this.numChild,
  448. }
  449. }
  450. const res = await fetch(`https://api.airtable.com/v0/appiQwfVZixRgRICe/CVAS_Booking/`, {
  451. method: 'POST',
  452. headers: {
  453. 'Content-Type': 'application/json',
  454. Authorization: 'Bearer key8ZVBxVZJL2Wp7y'
  455. },
  456. body: JSON.stringify(newBooking)
  457. })
  458. const json = await res.json()
  459. //this.guests = { ...await json }
  460. console.log(await json)
  461. },
  462. selectSchedule (schedule) {
  463. this.selectedSchedule = { ...schedule }
  464. this.$segment.track('flights__select_schedule', {
  465. origin: this.selectedSchedule.fields.Origin_IATA[0],
  466. destination: this.selectedSchedule.fields.Destination_IATA[0],
  467. departureDate: this.$route.params.departure,
  468. departureTime: this.selectedSchedule.fields.Departure_TimeL,
  469. arrivalTime: this.selectedSchedule.fields.Arrival_TimeL,
  470. carrier: this.selectedSchedule.fields.Carrier_Name
  471. })
  472. },
  473. clearSelectedSchedule () {
  474. // console.log('clear')
  475. this.startingDate = ''
  476. this.selectedSchedule = {}
  477. },
  478. async fetchSingleAirport(iata, isOrig) {
  479. const airportFetchFilterFormula =
  480. isOrig
  481. ? `AND(Is_Origin=1,{IsCurrent-AsOrigin}="Yes",Airport_IATA="${iata}")`
  482. : `AND(Is_Destination=1,{IsCurrent-AsDest}="Yes",Airport_IATA="${iata}")`
  483. const response = await fetch(`https://api.airtable.com/v0/appiQwfVZixRgRICe/Airports_IATA?filterByFormula=${airportFetchFilterFormula}`, {
  484. method: 'GET',
  485. headers: {
  486. 'Content-Type': 'application/x-www-form-urlencoded',
  487. Authorization: 'Bearer keyJ2ht64ZSN57AG1'
  488. }
  489. })
  490. const mapData = await response.json()
  491. const thisAirport = {
  492. iata: mapData.records[0].fields.Airport_IATA,
  493. lat: mapData.records[0].fields.Latitude_Deg,
  494. long: mapData.records[0].fields.Longitude_Deg,
  495. icon: mapData.records[0].fields.Icon_Url,
  496. name: mapData.records[0].fields.Airport_Name,
  497. municipality: mapData.records[0].fields.Municipality,
  498. type: mapData.records[0].fields.Type,
  499. search: mapData.records[0].fields.Search_Field
  500. }
  501. switch (isOrig) {
  502. case true:
  503. this.selectedOrig = { ...thisAirport }
  504. break
  505. case false:
  506. this.selectedDest = { ...thisAirport }
  507. break
  508. default:
  509. break
  510. }
  511. }
  512. }
  513. }
  514. </script>
  515. <style lang="scss" scoped>
  516. .main-with-header {
  517. margin-top: clamp(20px + 1.75rem, 4rem + 1.75rem, 50px + 1.75rem);
  518. }
  519. .schedule-wrapper {
  520. display: flex;
  521. flex-direction: column;
  522. align-items: center;
  523. }
  524. .schedule-grid {
  525. display: flex;
  526. flex-direction: column;
  527. gap: 1rem;
  528. margin: 2rem 2rem 2rem 2rem;
  529. }
  530. .grid__row {
  531. display: flex;
  532. flex-direction: row;
  533. align-items: center;
  534. gap: 1rem;
  535. padding: 1rem 1rem 1rem 4rem;
  536. flex-wrap: wrap;
  537. border-radius: 2rem;
  538. }
  539. .grid__row:nth-child(odd) {
  540. background: #eee;
  541. }
  542. label {
  543. font-size: 0.75rem;
  544. font-weight: 700;
  545. color: white;
  546. display: block;
  547. }
  548. .field__content {
  549. font-size: 1.5rem;
  550. }
  551. .dow-grid {
  552. width: 200px;
  553. display: grid;
  554. grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
  555. gap: 0.5rem;
  556. }
  557. .dow-grid__day {
  558. font-size: 0.8rem;
  559. border: 1px solid #ccc !important;
  560. display: flex;
  561. align-items: center;
  562. justify-content: center;
  563. border-radius: 3px !important;
  564. text-transform: capitalize;
  565. }
  566. .day--su {
  567. grid-column: 1 / span 1;
  568. }
  569. .day--mo {
  570. grid-column: 2 / span 1;
  571. }
  572. .day--tu {
  573. grid-column: 3 / span 1;
  574. }
  575. .day--we {
  576. grid-column: 4 / span 1;
  577. }
  578. .day--th {
  579. grid-column: 5 / span 1;
  580. }
  581. .day--fr {
  582. grid-column: 6 / span 1;
  583. }
  584. .day--sa {
  585. grid-column: 7 / span 1;
  586. }
  587. .row__trip {
  588. display: flex;
  589. align-items: center;
  590. }
  591. .row__trip svg {
  592. margin-bottom: -0.5rem;
  593. width: 3.5rem;
  594. height: 3.5rem;
  595. margin-left: -1rem;
  596. margin-right: -1rem;
  597. }
  598. .shape--trip {
  599. height: 0.4rem;
  600. width: 2rem;
  601. background: #007fff;
  602. display: block;
  603. margin-top: 1rem;
  604. position: relative;
  605. }
  606. .shape--trip::before {
  607. height: 0.8rem;
  608. width: 0.8rem;
  609. background: #fff;
  610. border: 0.02rem solid #007fff;
  611. border-radius: 999px;
  612. content: "";
  613. position: absolute;
  614. top: -0.15rem;
  615. left: -0.5rem;
  616. }
  617. .shape--trip::after {
  618. height: 0.8rem;
  619. width: 0.8rem;
  620. background: #007fff;
  621. border: 0.02rem solid #007fff;
  622. border-radius: 999px;
  623. content: "";
  624. position: absolute;
  625. top: -0.15rem;
  626. right: -0.5rem;
  627. }
  628. h1 {
  629. font-size: 3rem;
  630. line-height: 0.85;
  631. }
  632. h2 {
  633. font-size: 2rem;
  634. line-height: 1;
  635. }
  636. label.text--muni {
  637. color: #007fff;
  638. line-height: 1;
  639. padding-left: 0.3rem;
  640. }
  641. span.text--flight-num {
  642. font-weight: 700;
  643. margin-right: 0.5rem;
  644. }
  645. span.text--dow {
  646. font-weight: 300;
  647. font-size: 0.8rem;
  648. color: #007fff;
  649. }
  650. span.badge--avail {
  651. border-radius: 999px;
  652. border: 1px solid gray;
  653. color: gray;
  654. padding: 0.2em 0.8em;
  655. line-height: 1;
  656. font-size: 0.8rem;
  657. display: block;
  658. width: fit-content;
  659. }
  660. .radio span {
  661. border-radius: 999px;
  662. border: 3px solid #007fff;
  663. background-color: white;
  664. height: 2rem;
  665. width: 2rem;
  666. display: flex;
  667. position: relative;
  668. transition: all 0.3s;
  669. align-items: center;
  670. justify-content: center;
  671. }
  672. .radio span svg {
  673. transition: all 0.3s;
  674. stroke: #eee;
  675. }
  676. .radio span:hover {
  677. background: #007fff;
  678. }
  679. .radio input:checked + span {
  680. background: #007fff;
  681. }
  682. .radio input:checked + span svg {
  683. stroke: white;
  684. }
  685. .radio input {
  686. display: none;
  687. }
  688. .row__info {
  689. min-width: fit-content;
  690. }
  691. .row__check {
  692. margin-left: -3rem;
  693. }
  694. .form-row {
  695. display: flex;
  696. flex-direction: column;
  697. justify-content: stretch;
  698. }
  699. .form-row label {
  700. text-transform: uppercase;
  701. font-size: 1rem;
  702. font-weight: 300;
  703. }
  704. .form-row input {
  705. background: #eee;
  706. border-radius: 999px;
  707. transition: 0.3s all;
  708. padding: 0.5em 0.8em;
  709. font-size: min(1rem, 18px);
  710. line-height: 1;
  711. }
  712. .form-row--two-columns {
  713. display: flex;
  714. flex-direction: row;
  715. flex-wrap: nowrap;
  716. column-gap: 1rem;
  717. }
  718. .form-row--two-columns input {
  719. width: 50%;
  720. }
  721. .flyout {
  722. background: #007fff;
  723. border-radius: 3rem 3rem 0 0;
  724. padding: 3rem;
  725. pointer-events: all;
  726. width: clamp(450px, 50vw, 400px);
  727. display: flex;
  728. flex-direction: column;
  729. gap: 1rem;
  730. }
  731. .flyout .btn.btn--primary {
  732. background: white;
  733. color: black;
  734. }
  735. .flyout .btn.btn--primary:hover {
  736. background: #00ca00;
  737. color: #fff;
  738. }
  739. .flyout .v-select {
  740. font-size: 1.5rem;
  741. }
  742. .flyout .vs__dropdown-menu {
  743. display: flex;
  744. flex-direction: row;
  745. flex-wrap: wrap;
  746. }
  747. .flyout .vs__dropdown-menu li {
  748. border-radius: 999px;
  749. transition: 0.3 all;
  750. }
  751. .flyout .vs__dropdown-menu li:hover {
  752. border-radius: 999px;
  753. background-color: #007fff;
  754. }
  755. .flyout .vs__dropdown-toggle {
  756. background: #eee;
  757. border-radius: 1.2rem 1.2rem 1.2rem 1.2rem;
  758. }
  759. .flyout .vs--open .vs__dropdown-toggle {
  760. background: #eee;
  761. border-radius: 1.2rem 1.2rem 0 0;
  762. }
  763. .flyout p {
  764. font-size: 1rem;
  765. line-height: 1.2;
  766. font-weight: 400;
  767. color: #fff;
  768. margin-bottom: 1rem;
  769. margin-left: 0.5rem;
  770. margin-right: 0.5rem;
  771. }
  772. .flyout p:last-child {
  773. margin-bottom: 0;
  774. }
  775. .flyout h3 {
  776. font-size: 1.5rem;
  777. line-height: 1;
  778. font-weight: 200;
  779. margin-bottom: 1rem;
  780. color: #fff;
  781. margin-left: 0.5rem;
  782. margin-right: 0.5rem;
  783. }
  784. .flyout h3 strong {
  785. font-weight: 600;
  786. }
  787. </style>