diff --git a/index.html b/index.html
index 000821d..7ce70fd 100644
--- a/index.html
+++ b/index.html
@@ -1,15 +1,16 @@
+
+
-
-
-
-
-
- CityCards Travel 22-8-2025
-
+
+
+
+
+ CityCards Customer-web
+
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 13d84a8..af5b3cd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -35,12 +35,15 @@
"@radix-ui/react-toggle-group": "^1.1.2",
"@radix-ui/react-tooltip": "^1.1.8",
"@reduxjs/toolkit": "^2.11.2",
+ "@stripe/react-stripe-js": "^6.2.0",
+ "@stripe/stripe-js": "^9.2.0",
"@tailwindcss/postcss": "^4.1.13",
"@tailwindcss/vite": "^4.1.14",
"class-variance-authority": "^0.7.1",
"clsx": "*",
"cmdk": "^1.1.1",
"embla-carousel-react": "^8.6.0",
+ "i18n-iso-countries": "^7.14.0",
"input-otp": "^1.4.2",
"lucide-react": "^0.487.0",
"motion": "*",
@@ -54,7 +57,7 @@
"react-resizable-panels": "^2.1.7",
"react-router-dom": "^7.9.4",
"recharts": "^2.15.2",
- "sonner": "^2.0.3",
+ "sonner": "^2.0.7",
"tailwind-merge": "*",
"tailwindcss": "^4.1.14",
"vaul": "^1.1.2"
@@ -2237,6 +2240,28 @@
"integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
"license": "MIT"
},
+ "node_modules/@stripe/react-stripe-js": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-6.2.0.tgz",
+ "integrity": "sha512-GSCErjljZEQv9LaxP30xGOwstcMyyUzb5JyihXwvjOU95yrfhbiPG4K2KkwxYxn+WY0/AyHsRhPPoGRw7urBzg==",
+ "dependencies": {
+ "prop-types": "^15.7.2"
+ },
+ "peerDependencies": {
+ "@stripe/stripe-js": ">=9.2.0 <10.0.0",
+ "react": ">=16.8.0 <20.0.0",
+ "react-dom": ">=16.8.0 <20.0.0"
+ }
+ },
+ "node_modules/@stripe/stripe-js": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-9.2.0.tgz",
+ "integrity": "sha512-YSzLC0t6VS9MDdPTynSMqU8IxrItFUjkDORALFT6sSMR/XZ5Vgm3RDp/Gk7z727MC4A9s4MFVel0gF0c7+kdrg==",
+ "peer": true,
+ "engines": {
+ "node": ">=12.16"
+ }
+ },
"node_modules/@swc/core": {
"version": "1.13.5",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz",
@@ -3346,6 +3371,11 @@
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
"license": "MIT"
},
+ "node_modules/diacritics": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz",
+ "integrity": "sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA=="
+ },
"node_modules/dom-helpers": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
@@ -3527,6 +3557,17 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC"
},
+ "node_modules/i18n-iso-countries": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/i18n-iso-countries/-/i18n-iso-countries-7.14.0.tgz",
+ "integrity": "sha512-nXHJZYtNrfsi1UQbyRqm3Gou431elgLjKl//CYlnBGt5aTWdRPH1PiS2T/p/n8Q8LnqYqzQJik3Q7mkwvLokeg==",
+ "dependencies": {
+ "diacritics": "1.3.0"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/immer": {
"version": "11.1.4",
"resolved": "https://registry.npmjs.org/immer/-/immer-11.1.4.tgz",
diff --git a/package.json b/package.json
index 2e11959..544a147 100644
--- a/package.json
+++ b/package.json
@@ -30,12 +30,15 @@
"@radix-ui/react-toggle-group": "^1.1.2",
"@radix-ui/react-tooltip": "^1.1.8",
"@reduxjs/toolkit": "^2.11.2",
+ "@stripe/react-stripe-js": "^6.2.0",
+ "@stripe/stripe-js": "^9.2.0",
"@tailwindcss/postcss": "^4.1.13",
"@tailwindcss/vite": "^4.1.14",
"class-variance-authority": "^0.7.1",
"clsx": "*",
"cmdk": "^1.1.1",
"embla-carousel-react": "^8.6.0",
+ "i18n-iso-countries": "^7.14.0",
"input-otp": "^1.4.2",
"lucide-react": "^0.487.0",
"motion": "*",
@@ -49,7 +52,7 @@
"react-resizable-panels": "^2.1.7",
"react-router-dom": "^7.9.4",
"recharts": "^2.15.2",
- "sonner": "^2.0.3",
+ "sonner": "^2.0.7",
"tailwind-merge": "*",
"tailwindcss": "^4.1.14",
"vaul": "^1.1.2"
diff --git a/src/App.tsx b/src/App.tsx
index ea15e93..17afb49 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -185,7 +185,7 @@ function App() {
{/* Card Title in Orange */}
-
+
{stickyCardType === 'unlimited' ? (
<>Melbourne Unlimited Card>
) : (
diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx
index 1a3c767..bd664f6 100644
--- a/src/AppRouter.tsx
+++ b/src/AppRouter.tsx
@@ -2,38 +2,42 @@ import { Routes, Route, useParams, useLocation, useNavigate } from 'react-router
import { motion, AnimatePresence } from 'motion/react';
// Import all your pages
-import { LoginModal } from './components/LoginModal';
-import { MelbournePage } from './components/MelbournePage';
-import { PassesPage } from './components/PassesPage';
-import { AttractionsPage } from './components/AttractionsPage';
-import { AttractionDetailsPage } from './components/AttractionDetailsPage';
-import { CheckoutPage } from './components/CheckoutPage';
-import { SecureCheckoutPage } from './components/SecureCheckoutPage';
-import { BlogsPage } from './components/BlogsPage';
-import { BlogDetailsPage } from './components/BlogDetailsPage';
-import { HowItWorksPage } from './components/HowItWorksPage';
+import { ProtectedRoute } from './components/ProtectedRoute';
+import { MelbournePage } from './pages/MelbournePage';
+import { PassesPage } from './pages/PassesPage';
+import { AttractionsPage } from './pages/AttractionsPage';
+import { AttractionDetailsPage } from './pages/AttractionDetailsPage';
+import { BlogsPage } from './pages/BlogsPage';
+import { BlogDetailsPage } from './pages/BlogDetailsPage';
import { FAQPage } from './components/FAQPage';
-import { PrivacyPolicyPage } from './components/PrivacyPolicyPage';
-import { AboutUsPage } from './components/AboutUsPage';
-import { ProfilePage } from './components/ProfilePage';
-import { CreateMagicItineraryPage } from './components/CreateMagicItineraryPage';
-import { ItineraryViewPage } from './components/ItineraryViewPage';
-import { OffersPage } from './components/OffersPage';
-import { CityCardsPage } from './components/CityCardsPage';
-import { MagicItineraryPage } from './components/MagicItineraryPage';
-import { PostCardsPage } from './components/PostCardsPage';
-import { DownloadAppPage } from './components/DownloadAppPage';
-import { EsimsPage } from './components/EsimsPage';
-import { HotelDiscountsPage } from './components/HotelDiscountsPage';
-import { ContactUsPage } from './components/ContactUsPage';
-
+import { PrivacyPolicyPage } from './pages/PrivacyPolicyPage';
+import { AboutUsPage } from './pages/AboutUsPage';
+import { ProfilePage } from './pages/ProfilePage';
+import { OffersPage } from './pages/OffersPage';
+import { CityCardsPage } from './pages/CityCardsPage';
+import { MagicItineraryPage } from './pages/MagicItineraryPage';
+import { PostCardsPage } from './pages/PostCardsPage';
+import { DownloadAppPage } from './pages/DownloadAppPage';
+import { HotelDiscountsPage } from './pages/HotelDiscountsPage';
+import { ContactUsPage } from './pages/ContactUsPage';
import { pageTransition } from './utils/animations';
import { LandingPage } from './pages/landingPage';
import ComingSoonPage from './pages/ComingSoonPage';
-import { SuperSavingsPage } from './components/SuperSavingsPage';
-import { WhatsIncluded } from './components/WhatsIncluded';
-import { LandingMagicItineraryPage } from './components/LandingMagicItineraryPage';
-import { DiscoverPage } from './components/DiscoverPage';
+import { SuperSavingsPage } from './pages/SuperSavingsPage';
+import { WhatsIncluded } from './pages/WhatsIncluded';
+import { LandingMagicItineraryPage } from './pages/LandingMagicItineraryPage';
+import { DiscoverPage } from './pages/DiscoverPage';
+import { CartPage } from './pages/CartPage';
+import { PaymentDetailsPage } from './pages/PaymentDetailsPage';
+import { SuperSavingsDetailsPage } from './pages/SuperSavingsDetailsPage';
+import { ViewCardDetailsPage } from './pages/ViewCardDetailsPage';
+import ItinerarySummaryPage from './pages/ItinerarySummaryPage';
+import { PaymentSuccessPage } from './pages/PaymentSuccessPage';
+import { PaymentCancelPage } from './pages/PaymentCancelPage';
+import { ItineraryViewPage } from './pages/ItineraryViewPage';
+import { CheckoutPage } from './pages/CheckoutPage';
+import { CreateMagicItineraryPage } from './pages/CreateMagicIternaryPage';
+import RegisterPage from './components/RegisterPage';
// User type definition
interface User {
@@ -90,7 +94,7 @@ export function AppRouter({
} />
{/* Home Route */}
-
@@ -125,19 +129,6 @@ export function AppRouter({
} />
- {/* Checkout Routes */}
-
-
-
- } />
-
-
-
-
- } />
-
{/* Blog Routes */}
@@ -188,20 +179,43 @@ export function AppRouter({
{/* User Routes */}
-
+
+
+
} />
+
+
+
+
+
+ } />
+
{/* Itinerary Routes */}
-
+
+
+
+
} />
-
-
+
+
+
+
+ } />
+
+
+
+
+
} />
@@ -272,6 +286,73 @@ export function AppRouter({
} />
+
+
+
+
+
+
+
+ } />
+
+
+
+
+
+ } />
+
+
+
+ } />
+
+
+
+
+
+
+ } />
+
+ navigate(-1)} />
+
+ } />
+
+
+
+
+
+
+
+
+ } />
+
+
+
+
+
+
+ } />
>
diff --git a/src/Redux/Store.tsx b/src/Redux/Store.tsx
index 7d03f11..2f46957 100644
--- a/src/Redux/Store.tsx
+++ b/src/Redux/Store.tsx
@@ -1,23 +1,33 @@
import { configureStore } from "@reduxjs/toolkit";
-import { fakeApi } from "./services/fakeApi.service";
import { attractionsApi } from "./services/attractions.service";
import { citiesApi } from "./services/cities.service";
+import { authApi } from "./services/auth.service";
+import { profileApi } from "./services/profile.service";
+import { cardsApi } from "./services/cards.service";
+import { itineraryApi } from "./services/itinerary.service";
+import { blogsApi } from "./services/blogs.service";
export const store = configureStore({
reducer: {
- [fakeApi.reducerPath]:fakeApi.reducer,
- [attractionsApi.reducerPath]:attractionsApi.reducer,
- [citiesApi.reducerPath]:citiesApi.reducer
+ [attractionsApi.reducerPath]: attractionsApi.reducer,
+ [citiesApi.reducerPath]: citiesApi.reducer,
+ [authApi.reducerPath]: authApi.reducer,
+ [profileApi.reducerPath]: profileApi.reducer,
+ [cardsApi.reducerPath]:cardsApi.reducer,
+ [itineraryApi.reducerPath]:itineraryApi.reducer,
+ [blogsApi.reducerPath]:blogsApi.reducer
},
-
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware().concat(
-
-fakeApi.middleware,
-attractionsApi.middleware,
-citiesApi.middleware
+ attractionsApi.middleware,
+ citiesApi.middleware,
+ authApi.middleware,
+ profileApi.middleware,
+ cardsApi.middleware,
+ itineraryApi.middleware,
+ blogsApi.middleware
),
});
export type RootState = ReturnType;
diff --git a/src/Redux/baseQuery.ts b/src/Redux/baseQuery.ts
index 37c41cc..36c9339 100644
--- a/src/Redux/baseQuery.ts
+++ b/src/Redux/baseQuery.ts
@@ -8,10 +8,9 @@ export const baseQuery = fetchBaseQuery({
const token = localStorage.getItem("accessToken");
if (token) {
headers.set("Authorization", `Bearer ${token}`);
- // headers.set("access-token", token);
+ headers.set("access-token", token);
}
// headers.set("Content-Type", "application/json");
return headers;
},
-});
-
+});
\ No newline at end of file
diff --git a/src/Redux/services/attractions.service.ts b/src/Redux/services/attractions.service.ts
index 01b7dee..2695346 100644
--- a/src/Redux/services/attractions.service.ts
+++ b/src/Redux/services/attractions.service.ts
@@ -30,6 +30,20 @@ export const attractionsApi = createApi({
return `/attractions/customer/customer-attractions?${params.toString()}`;
},
}),
+ getAttractionsForHomePage: builder.query({
+ // cityId is required, others optional
+ query: ({ cityId, categoryId}) => {
+ const params = new URLSearchParams();
+
+ // required
+ params.append('cityXid', cityId);
+
+ // optional
+ if (categoryId) params.append('categoryXid', categoryId);
+
+ return `/attractions/list/city-attractions?${params.toString()}`;
+ },
+ }),
getAttractionDetailsById: builder.query({
query: (id: number) => `/attractions/customer/${id}`,
@@ -38,4 +52,4 @@ export const attractionsApi = createApi({
}),
});
-export const { useGetAttractionFiltersQuery,useGetCustomerAttractionsQuery,useGetAttractionDetailsByIdQuery } = attractionsApi;
\ No newline at end of file
+export const { useGetAttractionFiltersQuery,useGetCustomerAttractionsQuery,useGetAttractionDetailsByIdQuery,useGetAttractionsForHomePageQuery } = attractionsApi;
\ No newline at end of file
diff --git a/src/Redux/services/auth.service.ts b/src/Redux/services/auth.service.ts
new file mode 100644
index 0000000..100cd07
--- /dev/null
+++ b/src/Redux/services/auth.service.ts
@@ -0,0 +1,53 @@
+
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+import { baseQuery } from "../baseQuery";
+
+export const authApi = createApi({
+ reducerPath: "authApi",
+ baseQuery: baseQuery,
+
+ tagTypes: ["profile", "Transaction"],
+
+
+ endpoints: (builder) => ({
+ // Login
+
+ login: builder.mutation({
+ query: (credentials) => ({
+ url: "/website/send-otp",
+ method: "POST",
+ body: credentials,
+ }),
+ }),
+
+ verifyOtp: builder.mutation({
+ query: (credentials) => ({
+ url: "/website/user/verify-otp",
+ method: "POST",
+ body: credentials,
+ }),
+ }),
+
+ register: builder.mutation({
+ query: (credentials) => ({
+ url: "/website/user/register",
+ method: "POST",
+ body: credentials,
+ }),
+ }),
+
+ logoutUser: builder.mutation({
+ query: () => ({
+ url: "/website/user/logout",
+ method: "POST"
+ })
+ })
+ }),
+});
+
+export const {
+ useLoginMutation,
+ useVerifyOtpMutation,
+ useRegisterMutation,
+ useLogoutUserMutation
+} = authApi;
\ No newline at end of file
diff --git a/src/Redux/services/blogs.service.ts b/src/Redux/services/blogs.service.ts
new file mode 100644
index 0000000..bcc2a40
--- /dev/null
+++ b/src/Redux/services/blogs.service.ts
@@ -0,0 +1,28 @@
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
+import { baseQuery } from "../baseQuery";
+
+export const blogsApi = createApi({
+ reducerPath: 'blogsApi',
+ baseQuery,
+ endpoints: (builder) => ({
+
+ getBlogsForCity: builder.query({
+ // cityId is required, others optional
+ query: ({ cityId, categoryId }) => {
+ const params = new URLSearchParams();
+
+ // required
+ params.append('cityXid', cityId);
+
+ // optional
+ if (categoryId) params.append('categoryXid', categoryId);
+
+ return `/website/list/blogs?${params.toString()}`;
+ },
+ }),
+
+
+ }),
+});
+
+export const { useGetBlogsForCityQuery } = blogsApi;
\ No newline at end of file
diff --git a/src/Redux/services/cards.service.ts b/src/Redux/services/cards.service.ts
new file mode 100644
index 0000000..9e1ffdd
--- /dev/null
+++ b/src/Redux/services/cards.service.ts
@@ -0,0 +1,77 @@
+
+import { createApi } from "@reduxjs/toolkit/query/react";
+import { baseQuery } from "../baseQuery";
+
+export const cardsApi = createApi({
+ reducerPath: "cardsApi",
+ baseQuery,
+
+ tagTypes: ["cardsInCart"],
+
+ endpoints: (builder) => ({
+
+ getCardsinCart: builder.query({
+ query: (cityId) => {
+ const params = new URLSearchParams()
+ params.append('cityXid', cityId);
+ return `/website/passes/cart/passes?${params.toString()}`
+ },
+ providesTags: ["cardsInCart"]
+ }),
+
+ getCheckoutPageData: builder.query({
+ query: (cityId) => `/website/pass/${cityId}`,
+ }),
+
+ getCardBookingDetails: builder.query({
+ query: (bookingId) => `/website/passes/${bookingId}/details`,
+ }),
+
+ storeRecipientDetails: builder.mutation({
+ query: ({ recipientDetails, bookingId }) => ({ // keep the name of the variables being passed here same as when calling the mutation hook
+ url: `/website/passes/${bookingId}/store-gift-details`,
+ method: "PUT",
+ body: recipientDetails
+ }),
+ }),
+ addCardToCart: builder.mutation({
+ query: (cardBookingDetails) => ({ // keep the name of the variables being passed here same as when calling the mutation hook
+ url: `/website/passes/add-to-cart`,
+ method: "POST",
+ body: cardBookingDetails
+ }),
+ }),
+
+ payForCard: builder.mutation({
+ query: (id) => ({
+ url: `/website/passes/${id}/pay`,
+ method: "POST",
+ body: {},
+ }),
+ }),
+
+ confirmCardPayment: builder.mutation({
+ query: (payload: { id: string; checkoutSessionId: string }) => ({
+ url: `/website/passes/${payload.id}/${payload.checkoutSessionId}/confirm-payment/`,
+ method: "POST",
+ }),
+ }),
+
+
+
+
+
+
+ }),
+});
+
+export const {
+ useGetCardsinCartQuery,
+ useGetCheckoutPageDataQuery,
+ useGetCardBookingDetailsQuery,
+ useStoreRecipientDetailsMutation,
+ useAddCardToCartMutation,
+ usePayForCardMutation,
+ useConfirmCardPaymentMutation
+
+} = cardsApi;
\ No newline at end of file
diff --git a/src/Redux/services/cities.service.ts b/src/Redux/services/cities.service.ts
index e1dfb06..9d9132b 100644
--- a/src/Redux/services/cities.service.ts
+++ b/src/Redux/services/cities.service.ts
@@ -1,11 +1,8 @@
-import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
+import { createApi } from '@reduxjs/toolkit/query/react';
import { baseQuery } from "../baseQuery";
export const citiesApi = createApi({
reducerPath: 'citiesApi',
- // baseQuery: fetchBaseQuery({
- // baseUrl: 'https://testingapi.citycards.betadelivery.com',
- // }),
baseQuery,
endpoints: (builder) => ({
@@ -20,11 +17,34 @@ export const citiesApi = createApi({
}),
getUpcomingCities: builder.query({
-
query: (listType) => `/cities/list/all?listType=${listType}`,
- })
+ }),
+
+ getSelectedCityDetails: builder.query({
+ query: (cityId) => `/website/${cityId}`,
+ }),
+
+ getSelectedCityOffers: builder.query({
+ query: ({ cityId, categoryId, page, limit }) => {
+ const params = new URLSearchParams()
+
+ params.append('cityXid', cityId);
+
+ if (categoryId) params.append('categoryXid', categoryId);
+ if (page) params.append('page', page);
+ if (limit) params.append('limit', limit);
+
+ return `/website/super-savings/list/offers?${params.toString()}`;
+ }
+ }),
+
+ getOfferDetailsById: builder.query({
+ query: (id: number) => `/website/super-savings/list/offers/${id}`,
+ }),
+
+
}),
});
-export const { useGetCityListWithBannerQuery,useGetUpcomingCitiesQuery } = citiesApi;
\ No newline at end of file
+export const { useGetCityListWithBannerQuery, useGetUpcomingCitiesQuery, useGetSelectedCityDetailsQuery, useGetSelectedCityOffersQuery, useGetOfferDetailsByIdQuery } = citiesApi;
\ No newline at end of file
diff --git a/src/Redux/services/fakeApi.service.ts b/src/Redux/services/fakeApi.service.ts
deleted file mode 100644
index b5f90ae..0000000
--- a/src/Redux/services/fakeApi.service.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
-
-export const fakeApi = createApi({
- reducerPath: 'fakeApi',
- baseQuery: fetchBaseQuery({
- baseUrl: " https://fakestoreapi.com",
-
- }),
- endpoints: (builder) => ({
- getProducts: builder.query({
- query: () => ({
- url: 'products',
- method: 'GET',
- }),
- }),
- }),
-})
-
-export const { useGetProductsQuery} = fakeApi
diff --git a/src/Redux/services/itinerary.service.ts b/src/Redux/services/itinerary.service.ts
new file mode 100644
index 0000000..364d7dc
--- /dev/null
+++ b/src/Redux/services/itinerary.service.ts
@@ -0,0 +1,50 @@
+
+import { createApi } from "@reduxjs/toolkit/query/react";
+import { baseQuery } from "../baseQuery";
+
+export const itineraryApi = createApi({
+ reducerPath: "itApi",
+ baseQuery,
+
+ endpoints: (builder) => ({
+
+ createMagicItinerary: builder.mutation({
+ query: (itineraryDetails) => ({ // keep the name of the variables being passed here same as when calling the mutation hook
+ url: `/website/itinerary`,
+ method: "POST",
+ body: itineraryDetails
+ }),
+
+ }),
+
+ getItineraryDetailsById: builder.query({
+ query: (itineraryId: number) => `/website/itinerary/${itineraryId}`,
+ }),
+
+ getUserItineraries: builder.query({
+ query: (cityId) => {
+ const params = new URLSearchParams()
+ params.append('cityId', cityId);
+ return `/website/itinerary/all-initineraries?${params.toString()}`
+ }
+ }),
+
+ downloadItinerary: builder.query({
+ query: (id) => ({
+ url: `/mobile/itinerary/${id}/download`,
+ method: 'GET',
+ responseHandler: (response) => response.blob(),
+ }),
+ }),
+
+ })
+});
+
+export const {
+ useCreateMagicItineraryMutation,
+ useGetItineraryDetailsByIdQuery,
+ useGetUserItinerariesQuery,
+ useDownloadItineraryQuery,
+
+
+} = itineraryApi;
\ No newline at end of file
diff --git a/src/Redux/services/profile.service.ts b/src/Redux/services/profile.service.ts
new file mode 100644
index 0000000..ab343fd
--- /dev/null
+++ b/src/Redux/services/profile.service.ts
@@ -0,0 +1,51 @@
+
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+import { baseQuery } from "../baseQuery";
+
+export const profileApi = createApi({
+ reducerPath: "profileApi",
+ baseQuery,
+
+ tagTypes: ["userDetails"],
+
+ endpoints: (builder) => ({
+
+ getUserProfileDetails: builder.query({
+ query: (id) => `/website/user/${id}`,
+ providesTags: ["userDetails"]
+ }),
+
+ updateUserProfileDetails: builder.mutation({
+ query: ({ userDetails, userId }) => ({ // keep the name of the variables being passed here same as when calling the mutation hook
+ url: `/website/user/${userId}`,
+ method: "PUT",
+ body: userDetails
+ }),
+ invalidatesTags: ["userDetails"]
+ }),
+
+ getUserCards: builder.query({
+ query: ({sort,cityId}) => {
+ const params = new URLSearchParams()
+
+ params.append('cityXid', cityId);
+
+ if (sort) params.append('sort', sort);
+
+ return `/website/passes/all?${params.toString()}`
+ }
+ }),
+
+ getUserCardDetails: builder.query({
+ query: (cardId) => `/website/passes/${cardId}/details`,
+ }),
+
+ })
+});
+
+export const {
+ useGetUserProfileDetailsQuery,
+ useUpdateUserProfileDetailsMutation,
+ useGetUserCardsQuery,
+ useGetUserCardDetailsQuery
+} = profileApi;
\ No newline at end of file
diff --git a/src/assets/citycards customer app.png b/src/assets/citycards customer app.png
new file mode 100644
index 0000000..7caa18f
Binary files /dev/null and b/src/assets/citycards customer app.png differ
diff --git a/src/assets/front.jpg b/src/assets/front.jpg
new file mode 100644
index 0000000..12f06ef
Binary files /dev/null and b/src/assets/front.jpg differ
diff --git a/src/components/AfterLogin.tsx b/src/components/AfterLogin.tsx
new file mode 100644
index 0000000..9ab7400
--- /dev/null
+++ b/src/components/AfterLogin.tsx
@@ -0,0 +1,42 @@
+function Text() {
+ return (
+
+ );
+}
+
+function Container() {
+ return (
+
+
+
+ );
+}
+
+function Text1() {
+ return (
+
+ );
+}
+
+export default function AfterLogin() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/BeforeLogin.tsx b/src/components/BeforeLogin.tsx
new file mode 100644
index 0000000..0b3a144
--- /dev/null
+++ b/src/components/BeforeLogin.tsx
@@ -0,0 +1,21 @@
+function Text() {
+ return (
+
+ );
+}
+
+export default function BeforeLogin() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/CTAButton.tsx b/src/components/CTAButton.tsx
index 9b80d9f..0c16431 100644
--- a/src/components/CTAButton.tsx
+++ b/src/components/CTAButton.tsx
@@ -1,6 +1,6 @@
import { motion } from 'motion/react';
-import BeforeLogin from '../imports/BeforeLogin';
-import AfterLogin from '../imports/AfterLogin';
+import BeforeLogin from './BeforeLogin';
+import AfterLogin from './AfterLogin';
interface User {
email: string;
diff --git a/src/components/CheckoutPage.tsx b/src/components/CheckoutPage.tsx
deleted file mode 100644
index 790e565..0000000
--- a/src/components/CheckoutPage.tsx
+++ /dev/null
@@ -1,735 +0,0 @@
-import { useState, useEffect } from 'react';
-import { motion, AnimatePresence } from 'motion/react';
-import { ArrowLeft, CreditCard, Users, Calendar, MapPin, Shield, Truck, Clock, ChevronRight, Check, ChevronDown, X, Mail, Smartphone } from 'lucide-react';
-import { Button } from './ui/button';
-import { Input } from './ui/input';
-import { Label } from './ui/label';
-import { Card, CardContent, CardHeader, CardTitle } from './ui/card';
-import { Separator } from './ui/separator';
-import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from './ui/dialog';
-import { RadioGroup, RadioGroupItem } from './ui/radio-group';
-import { Checkbox } from './ui/checkbox';
-import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select';
-import { Badge } from './ui/badge';
-import { Textarea } from './ui/textarea';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { Layout } from '../Layout';
-
-interface CheckoutPageProps {
- onBackClick?: () => void;
- onHomeClick?: () => void;
- onMelbourneClick?: () => void;
- onPassesClick?: () => void;
- onCheckoutClick?: () => void;
- onSignInClick?: () => void;
- onSignOutClick?: () => void;
- onAttractionsClick?: () => void;
- onBlogsClick?: () => void;
- onHowItWorksClick?: () => void;
- onFAQClick?: () => void;
- onPrivacyPolicyClick?: () => void;
- onAboutUsClick?: () => void;
- onProfileClick?: () => void;
- onCityCardsClick?: () => void;
- onMagicItineraryClick?: () => void;
- onPostCardsClick?: () => void;
- onOffersClick?: () => void;
- onSecureCheckoutClick?: () => void;
- onContactUsClick?: () => void;
- onEsimsClick?: () => void;
- onHotelDiscountsClick?: () => void;
- currentPage?: string;
- user?: { email: string; name: string } | null;
-}
-
-
-// Mock cart data
-const mockCartItems = [
- {
- id: '1',
- name: 'Paris Unlimited Pass',
- type: '7-Day Pass',
- price: 79,
- originalPrice: 149,
- discount: 47,
- attractions: 45,
- validity: '7 days',
- image: 'https://images.unsplash.com/photo-1502602898536-47ad22581b52?w=400',
- features: ['Skip-the-line access', 'Mobile voucher', 'Free cancellation']
- }
-];
-
-export function CheckoutPage({
- onBackClick,
- onHomeClick,
- onMelbourneClick,
- onPassesClick,
- onCheckoutClick,
- onSignInClick,
- onSignOutClick,
- onAttractionsClick,
- onBlogsClick,
- onHowItWorksClick,
- onFAQClick,
- onPrivacyPolicyClick,
- onAboutUsClick,
- onProfileClick,
- onCityCardsClick,
- onMagicItineraryClick,
- onPostCardsClick,
- onOffersClick,
- onSecureCheckoutClick,
- onContactUsClick,
- onEsimsClick,
- onHotelDiscountsClick,
- currentPage,
- user,
-}: CheckoutPageProps) {
- const [purchaseType, setPurchaseType] = useState<'self' | 'gift'>('self');
- const [selectedPayment, setSelectedPayment] = useState('credit-card');
- const [showEmailVerification, setShowEmailVerification] = useState(false);
- const [verificationCode, setVerificationCode] = useState('');
- const [isEmailVerified, setIsEmailVerified] = useState(false);
- const [formData, setFormData] = useState({
- email: '',
- firstName: '',
- lastName: '',
- phone: '',
- country: '',
- address: '',
- city: '',
- postalCode: '',
- cardNumber: '',
- expiry: '',
- cvv: '',
- cardName: '',
- agreeTerms: false,
- subscribeNewsletter: false
- });
- const [giftData, setGiftData] = useState({
- recipientName: '',
- recipientPhone: '',
- recipientEmail: '',
- personalizedMessage: ''
- });
-
- const subtotal = mockCartItems.reduce((sum, item) => sum + item.price, 0);
- const tax = Math.round(subtotal * 0.1);
- const total = subtotal + tax;
- const totalSavings = mockCartItems.reduce((sum, item) => sum + (item.originalPrice - item.price), 0);
-
- const handleInputChange = (field: string, value: string | boolean) => {
- setFormData(prev => ({ ...prev, [field]: value }));
-
- // Trigger email verification when email is complete
- if (field === 'email' && typeof value === 'string' && value.includes('@') && value.includes('.') && !isEmailVerified) {
- setTimeout(() => {
- setShowEmailVerification(true);
- }, 1000);
- }
- };
-
- const handleGiftInputChange = (field: string, value: string) => {
- setGiftData(prev => ({ ...prev, [field]: value }));
- };
-
- const handleEmailVerification = () => {
- if (verificationCode === '123456') {
- setIsEmailVerified(true);
- setShowEmailVerification(false);
- }
- };
-
- const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault();
- if (!isEmailVerified) {
- setShowEmailVerification(true);
- return;
- }
- const checkoutData = {
- purchaseType,
- formData,
- ...(purchaseType === 'gift' && { giftData }),
- selectedPayment,
- cartItems: mockCartItems
- };
- console.log('Processing checkout...', checkoutData);
- };
-
- const paymentMethods = [
- {
- id: 'credit-card',
- name: 'Credit Card',
- icon: ,
- description: 'Visa, Mastercard, American Express'
- },
- {
- id: 'paypal',
- name: 'PayPal',
- icon: P
,
- description: 'Pay with your PayPal account'
- },
- {
- id: 'google-pay',
- name: 'Google Pay',
- icon: G
,
- description: 'Pay with Google Pay'
- }
- ];
-
- return (
-
-
-
- {/* Header Section */}
-
-
- {/* Back Button */}
-
-
- Back to Cart
-
-
- {/* Page Title */}
-
-
- Secure {' '}
- Checkout
-
-
- Complete your purchase and start exploring Paris
-
-
-
-
-
- {/* Main Checkout Content */}
-
-
- {/* Email Verification Popup */}
-
-
-
-
-
- Verify Your Email
-
-
- Enter the verification code sent to your email to continue with your booking.
-
-
-
-
- We've sent a verification code to {formData.email}
-
-
- Verification Code
- setVerificationCode(e.target.value)}
- placeholder="Enter 6-digit code"
- className="mt-1 font-poppins text-center text-lg letter-spacing-2"
- maxLength={6}
- />
-
-
-
- Verify Email
-
- setShowEmailVerification(false)}
- className="font-poppins"
- >
- Skip for now
-
-
-
- Demo code: 123456
-
-
-
-
-
-
-
- );
-}
\ No newline at end of file
diff --git a/src/components/CitySelectionDialog.tsx b/src/components/CitySelectionDialog.tsx
index 203aa72..a972fc5 100644
--- a/src/components/CitySelectionDialog.tsx
+++ b/src/components/CitySelectionDialog.tsx
@@ -7,6 +7,7 @@ import { Input } from './ui/input';
import { motion, AnimatePresence } from 'motion/react';
import { ImageWithFallback } from './figma/ImageWithFallback';
import { useGetCityListWithBannerQuery } from '../Redux/services/cities.service';
+import LoadingSpinner from './LoadingSpinner';
interface City {
id: number;
@@ -20,6 +21,9 @@ interface CitySelectionDialogProps {
onCitySelect?: (cityId: string) => void; // ✅ Updated to pass cityId
}
+export const slugify = (name: string | null) =>
+ name?.toLowerCase().replace(/\s+/g, '-');
+
export function CitySelectionDialog({
isOpen,
onClose,
@@ -31,21 +35,17 @@ export function CitySelectionDialog({
const { data: cities, isLoading } = useGetCityListWithBannerQuery({ search })
if (isLoading) {
- return Loading...
+ return (
+
+ );
}
-
const handleCityClick = (city: City) => {
console.log('Selected city:', city.cityName);
-
- // ✅ Call the onCitySelect callback if provided (passing cityId)
- if (onCitySelect) {
- onCitySelect(String(city.id));
- } else {
- // ✅ Default behavior: navigate to passes page
- navigate(`/passes?city=${encodeURIComponent(city.cityName)}`);
- }
-
+ navigate(`/${slugify(city.cityName)}`);
+ localStorage.setItem("cityId", String(city.id))
+ localStorage.setItem("cityName", String(city.cityName))
+ sessionStorage.setItem("citySelected", String(city.cityName))
onClose();
};
diff --git a/src/components/CreateMagicItineraryPage.tsx b/src/components/CreateMagicItineraryPage.tsx
deleted file mode 100644
index 71c5f21..0000000
--- a/src/components/CreateMagicItineraryPage.tsx
+++ /dev/null
@@ -1,1450 +0,0 @@
-import { useState } from 'react';
-import { motion, AnimatePresence } from 'motion/react';
-import {
- ArrowLeft,
- ArrowRight,
- MapPin,
- Sparkles,
- CheckCircle,
- X,
- Clock,
- Calendar,
- Users,
- Star,
- Search,
- Navigation,
- Heart,
- Sun,
- ChevronDown,
- ChevronUp
-} from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent } from './ui/card';
-import { Badge } from './ui/badge';
-import { Progress } from './ui/progress';
-import { Calendar as CalendarComponent } from './ui/calendar';
-import { Input } from './ui/input';
-import { Popover, PopoverContent, PopoverTrigger } from './ui/popover';
-import { Collapsible, CollapsibleContent, CollapsibleTrigger } from './ui/collapsible';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-
-
-interface User {
- email: string;
- name: string;
-}
-
-interface CreateMagicItineraryPageProps {
- onBackClick: () => void;
- onHomeClick: () => void;
- onMelbourneClick: () => void;
- onPassesClick: () => void;
- onCheckoutClick: () => void;
- onSignInClick: () => void;
- onSignOutClick: () => void;
- onAttractionsClick: () => void;
- onBlogsClick: () => void;
- onHowItWorksClick: () => void;
- onFAQClick: () => void;
- onPrivacyPolicyClick: () => void;
- onAboutUsClick: () => void;
- onProfileClick: () => void;
- onCityCardsClick: () => void;
- onMagicItineraryClick: () => void;
- onPostCardsClick: () => void;
- onOffersClick: () => void;
- onContactUsClick?: () => void;
- onEsimsClick?: () => void;
- onHotelDiscountsClick?: () => void;
- currentPage: string;
- user: User | null;
-}
-
-interface ItineraryData {
- destination: string;
- locationSearch: string;
- startDate: Date | undefined;
- endDate: Date | undefined;
- energy: string;
- withKids: boolean;
- museums: boolean;
- scenicSpots: boolean;
- culturalSites: boolean;
- wildlife: boolean;
- dietaryPreferences: string[];
- nightlife: boolean;
- shopping: boolean;
-}
-
-const destinations = [
- {
- id: 'melbourne',
- name: 'Melbourne',
- country: 'Australia',
- image: 'https://images.unsplash.com/photo-1595434971780-79d5c20c5090?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjBza3lsaW5lJTIwYXVzdHJhbGlhfGVufDF8fHx8MTc1ODk2MzkxOHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral'
- },
- {
- id: 'sydney',
- name: 'Sydney',
- country: 'Australia',
- image: 'https://images.unsplash.com/photo-1595563382617-fe6fa4fd0394?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzeWRuZXklMjBoYXJib3VyJTIwYnJpZGdlJTIwYXVzdHJhbGlhfGVufDF8fHx8MTc1ODk2MzkyMXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral'
- },
- {
- id: 'brisbane',
- name: 'Brisbane',
- country: 'Australia',
- image: 'https://images.unsplash.com/photo-1729904987421-12490733e013?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxicmlzYmFuZSUyMGNpdHklMjByaXZlciUyMGF1c3RyYWxpYXxlbnwxfHx8fDE3NTg5NjM5Mjd8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral'
- }
-];
-
-const energyOptions = [
- {
- id: 'adventurous',
- name: 'Adventurous',
- description: 'High energy activities and exploration',
- image: 'https://images.unsplash.com/photo-1587502537147-2ba64a62e3d3?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxhZHZlbnR1cmUlMjBvdXRkb29yJTIwaGlraW5nfGVufDF8fHx8MTc1ODk2NDQ2N3ww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral'
- },
- {
- id: 'relaxed',
- name: 'Relaxed',
- description: 'Peaceful and laid-back experiences',
- image: 'https://images.unsplash.com/photo-1716893933701-73d59789bba7?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHxyZWxheGVkJTIwc3BhJTIwcGVhY2VmdWx8ZW58MXx8fHwxNzU4OTY0NDcxfDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral'
- }
-];
-
-const questionImages = {
- museums: 'https://images.unsplash.com/photo-1747918157024-a1e1c77336fa?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtdXNldW0lMjBhcnQlMjBnYWxsZXJ5fGVufDF8fHx8MTc1ODkwOTYwMHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
- scenicSpots: 'https://images.unsplash.com/photo-1583994153242-578c3566477e?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzY2VuaWMlMjB2aWV3cG9pbnQlMjBwaG90byUyMHNwb3RzfGVufDF8fHx8MTc1ODk2NDQ3OXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
- culturalSites: 'https://images.unsplash.com/photo-1713711188046-c716c9de586a?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjdWx0dXJhbCUyMGxhbmRtYXJrcyUyMGhpc3RvcmljYWwlMjBzaXRlc3xlbnwxfHx8fDE3NTg5NjQ0MjJ8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
- wildlife: 'https://images.unsplash.com/photo-1679546397515-b914d6601234?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx3aWxkbGlmZSUyMGFuaW1hbHMlMjBzYWZhcml8ZW58MXx8fHwxNzU4OTY0NDg3fDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
- nightlife: 'https://images.unsplash.com/photo-1758383200442-3c013f13473c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxuaWdodGxpZmUlMjBiYXJzJTIwZXZlbmluZyUyMGNpdHl8ZW58MXx8fHwxNzU4OTY0NDkxfDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
- shopping: 'https://images.unsplash.com/photo-1728889853414-3782d56aa563?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzaG9wcGluZyUyMG1hbGwlMjBib3V0aXF1ZSUyMHN0b3Jlc3xlbnwxfHx8fDE3NTg5NjQ0OTZ8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral'
-};
-
-const dietaryOptions = ['Vegetarian', 'Gluten Free', 'Halal', 'Sugar-Free'];
-
-export function CreateMagicItineraryPage({
- onBackClick,
- onHomeClick,
- onMelbourneClick,
- onPassesClick,
- onCheckoutClick,
- onSignInClick,
- onSignOutClick,
- onAttractionsClick,
- onBlogsClick,
- onHowItWorksClick,
- onFAQClick,
- onPrivacyPolicyClick,
- onAboutUsClick,
- onProfileClick,
- onCityCardsClick,
- onMagicItineraryClick,
- onPostCardsClick,
- onOffersClick,
- onContactUsClick,
- onEsimsClick,
- onHotelDiscountsClick,
- currentPage,
- user
-}: CreateMagicItineraryPageProps) {
- const [currentStep, setCurrentStep] = useState(1);
- const [isGenerating, setIsGenerating] = useState(false);
- const [showResults, setShowResults] = useState(false);
- const [viewMode, setViewMode] = useState<'daily' | 'summary'>('daily');
- const [itineraryData, setItineraryData] = useState({
- destination: '',
- locationSearch: '',
- startDate: undefined,
- endDate: undefined,
- energy: '',
- withKids: false,
- museums: false,
- scenicSpots: false,
- culturalSites: false,
- wildlife: false,
- dietaryPreferences: [],
- nightlife: false,
- shopping: false
- });
-
- const [generatedItinerary, setGeneratedItinerary] = useState(null);
- const [favorites, setFavorites] = useState>(new Set());
- const [openDays, setOpenDays] = useState>(new Set([1])); // First day open by default
- const [selectedActivity, setSelectedActivity] = useState(null);
-
- const toggleFavorite = (activityKey: string) => {
- setFavorites(prev => {
- const newSet = new Set(prev);
- if (newSet.has(activityKey)) {
- newSet.delete(activityKey);
- } else {
- newSet.add(activityKey);
- }
- return newSet;
- });
- };
-
- const toggleDay = (dayNumber: number) => {
- setOpenDays(prev => {
- const newSet = new Set(prev);
- if (newSet.has(dayNumber)) {
- newSet.delete(dayNumber);
- } else {
- newSet.add(dayNumber);
- }
- return newSet;
- });
- };
-
- const handleActivityClick = (activityKey: string) => {
- setSelectedActivity(selectedActivity === activityKey ? null : activityKey);
- };
-
- const totalSteps = 4;
- const progress = (currentStep / totalSteps) * 100;
-
- const handleNext = () => {
- if (currentStep < totalSteps) {
- setCurrentStep(currentStep + 1);
- } else {
- generateItinerary();
- }
- };
-
- const handlePrevious = () => {
- if (currentStep > 1) {
- setCurrentStep(currentStep - 1);
- }
- };
-
- const generateItinerary = async () => {
- setIsGenerating(true);
-
- // Simulate API call with realistic delay
- await new Promise(resolve => setTimeout(resolve, 3000));
-
- // Generate mock itinerary based on selections
- const selectedDestination = destinations.find(d => d.id === itineraryData.destination);
- const totalDays = itineraryData.startDate && itineraryData.endDate
- ? Math.ceil((itineraryData.endDate.getTime() - itineraryData.startDate.getTime()) / (1000 * 60 * 60 * 24))
- : 3;
-
- const generateDailyPlans = () => {
- const plans = [];
-
- // Enhanced activity templates with images and details
- const activityTemplates = [
- {
- time: '8:00 am',
- activity: 'Luxury Hotel Check-in',
- location: 'The Grand Hotel',
- address: '123 Main Street, City Center',
- image: 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=800&h=600&fit=crop',
- categories: ['Accommodation', 'Luxury'],
- description: [
- 'Check-in at luxury downtown hotel',
- 'Enjoy welcome amenities',
- 'Explore hotel facilities',
- 'Settle into your room'
- ]
- },
- {
- time: '10:00 am',
- activity: 'City Landmark Visit',
- location: 'Historic City Square',
- address: 'Central Plaza, Downtown District',
- image: 'https://images.unsplash.com/photo-1514395462725-fb4566210144?w=800&h=600&fit=crop',
- categories: ['Culture', 'Landmark', 'Sightseeing'],
- description: [
- 'Explore the city\'s historic heart',
- 'Learn about local history',
- 'Take memorable photos',
- 'Visit nearby attractions'
- ]
- },
- {
- time: '12:00 pm',
- activity: 'Local Cuisine Experience',
- location: 'Artisan Cafe & Restaurant',
- address: '45 Food Street, Culinary Quarter',
- image: 'https://images.unsplash.com/photo-1554118811-1e0d58224f24?w=800&h=600&fit=crop',
- categories: ['Food', 'Drinks', 'Culture'],
- description: [
- 'Taste authentic local dishes',
- 'Try specialty coffee or tea',
- 'Experience local food culture',
- 'Browse artisan food products'
- ]
- },
- {
- time: '2:00 pm',
- activity: 'Botanical Gardens',
- location: 'Royal Gardens',
- address: 'Garden Avenue, Green District',
- image: 'https://images.unsplash.com/photo-1585320806297-9794b3e4eeae?w=800&h=600&fit=crop',
- categories: ['Nature', 'Relaxation'],
- description: [
- 'Stroll through beautiful gardens',
- 'Discover native plant species',
- 'Relax in peaceful surroundings',
- 'Capture stunning nature photography'
- ]
- },
- {
- time: '4:00 pm',
- activity: 'Art Gallery Visit',
- location: 'Contemporary Art Museum',
- address: '78 Arts Avenue, Cultural District',
- image: 'https://images.unsplash.com/photo-1564399577149-749794d74eee?w=800&h=600&fit=crop',
- categories: ['Culture', 'Art', 'Museum'],
- description: [
- 'View contemporary art collections',
- 'Attend guided exhibitions',
- 'Visit the museum shop',
- 'Enjoy cultural experiences'
- ]
- },
- {
- time: '7:00 pm',
- activity: 'Sunset Dinner',
- location: 'Rooftop Restaurant',
- address: '99 Sky Tower, City Heights',
- image: 'https://images.unsplash.com/photo-1552566626-52f8b828add9?w=800&h=600&fit=crop',
- categories: ['Food', 'Drinks', 'Luxury'],
- description: [
- 'Fine dining experience',
- 'Panoramic city views',
- 'Signature cocktails',
- 'Memorable sunset atmosphere'
- ]
- }
- ];
-
- for (let i = 0; i < totalDays; i++) {
- const currentDate = new Date(itineraryData.startDate!);
- currentDate.setDate(currentDate.getDate() + i);
-
- plans.push({
- day: i + 1,
- date: currentDate.toLocaleDateString('en-US', {
- weekday: 'long',
- year: 'numeric',
- month: 'long',
- day: 'numeric'
- }),
- title: i === 0 ? `Welcome to ${selectedDestination?.name}` :
- i === totalDays - 1 ? 'Farewell Day' :
- `Day ${i + 1} Exploration`,
- activities: activityTemplates.slice(0, 5).map((template, idx) => ({
- ...template,
- // Vary times slightly for different days
- time: template.time
- }))
- });
- }
- return plans;
- };
-
- const mockItinerary = {
- destination: {
- ...selectedDestination,
- weather: '22°C, Sunny'
- },
- totalDays: totalDays,
- dailyPlans: generateDailyPlans(),
- estimatedCost: `${totalDays * 280}`,
- includedActivities: totalDays * 5
- };
-
- setGeneratedItinerary(mockItinerary);
- setIsGenerating(false);
- setShowResults(true);
- };
-
- const canProceed = () => {
- switch (currentStep) {
- case 1: return itineraryData.destination !== '' && itineraryData.startDate && itineraryData.endDate;
- case 2: return itineraryData.energy !== '';
- case 3: return true; // Kids and dietary questions always allow proceeding
- case 4: return true; // Optional preference questions
- default: return true;
- }
- };
-
- const handleDietaryToggle = (option: string) => {
- setItineraryData(prev => ({
- ...prev,
- dietaryPreferences: prev.dietaryPreferences.includes(option)
- ? prev.dietaryPreferences.filter(item => item !== option)
- : [...prev.dietaryPreferences, option]
- }));
- };
-
- const renderStepper = () => (
-
-
- {Array.from({ length: totalSteps }, (_, index) => {
- const stepNumber = index + 1;
- const isActive = stepNumber === currentStep;
- const isCompleted = stepNumber < currentStep;
-
- return (
-
-
- {isCompleted ? (
-
- ) : (
- {stepNumber}
- )}
-
- {stepNumber < totalSteps && (
-
- )}
-
- );
- })}
-
-
- );
-
- const renderStep = () => {
- if (isGenerating) {
- return (
-
-
-
-
-
-
-
-
-
Creating your
-
Magic Itinerary
-
- Our AI is analyzing your preferences and crafting the perfect travel experience...
-
-
-
-
-
- );
- }
-
- if (showResults) {
- return (
-
-
-
-
-
- Your {' '}
- Magic Itinerary
-
-
-
-
- Here's your personalized {generatedItinerary?.totalDays}-day adventure in {generatedItinerary?.destination?.name}!
-
-
-
- {/* View Toggle */}
-
-
- setViewMode('daily')}
- className="rounded-md font-poppins font-medium"
- >
- Daily View
-
- setViewMode('summary')}
- className="rounded-md font-poppins font-medium"
- >
- Summary
-
-
-
-
-
- {/* Itinerary Overview */}
-
-
-
-
{generatedItinerary?.totalDays}
-
Days
-
-
-
{generatedItinerary?.includedActivities}
-
Activities
-
-
-
{generatedItinerary?.estimatedCost}
-
Estimated Cost
-
-
-
-
- {/* Daily Plans - Enhanced View */}
- {viewMode === 'daily' && (
-
- {/* Location Header with Weather - Show Once */}
-
-
-
-
- {generatedItinerary?.destination?.name}, {generatedItinerary?.destination?.country}
-
-
{generatedItinerary?.destination?.weather}
-
-
-
-
-
-
-
- {/* Days Loop */}
- {generatedItinerary?.dailyPlans?.map((day: any, dayIndex: number) => (
-
- {/* Day Header */}
-
-
- {day.day}
-
-
-
Day {day.day}
-
{day.title}
-
-
-
- {/* GMT Label */}
-
-
- {/* Activity Cards - Desktop Grid Layout with Timeline */}
-
- {/* Timeline Line */}
-
-
- {day.activities?.map((activity: any, actIndex: number) => {
- const activityKey = `day${day.day}-act${actIndex}`;
- const isFavorite = favorites.has(activityKey);
-
- return (
-
- {/* Time Column with Timeline Connector */}
-
-
- {activity.time}
-
- {/* Timeline Dot */}
-
-
-
- {/* Activity Card */}
-
-
-
- {/* Hero Image with Overlay Buttons */}
-
-
-
- {/* Favorite Heart Button - Top Right */}
-
- toggleFavorite(activityKey)}
- >
-
-
-
-
- {/* Get Directions Button - Bottom Left */}
-
-
-
- Get Directions
-
-
-
-
- {/* Content Section */}
-
- {/* Location Name & Address */}
-
-
- {activity.activity}
-
-
-
- {activity.address}
-
-
-
- {/* Category Badges */}
-
- {activity.categories?.map((category: string, catIndex: number) => (
-
- {category}
-
- ))}
-
-
- {/* Activity Details - Bullet Points */}
-
- {activity.description?.map((detail: string, detailIndex: number) => (
-
- •
- {detail}
-
- ))}
-
-
-
-
-
-
- );
- })}
-
-
- ))}
-
- )}
-
- {/* Summary View */}
- {viewMode === 'summary' && (
-
-
Trip Summary
-
- {generatedItinerary?.dailyPlans?.map((day: any, dayIndex: number) => {
- const isDayOpen = openDays.has(day.day);
-
- return (
-
toggleDay(day.day)}
- >
-
-
-
-
-
- {day.day}
-
-
-
- Day {day.day}
-
-
- {day.date}
-
-
-
-
-
- {day.activities?.length || 0} activities
-
- {isDayOpen ? (
-
- ) : (
-
- )}
-
-
-
-
-
-
- {day.activities?.map((activity: any, actIndex: number) => {
- const activityKey = `summary-day${day.day}-act${actIndex}`;
- const isSelected = selectedActivity === activityKey;
-
- return (
-
-
handleActivityClick(activityKey)}
- >
-
-
-
- {activity.time}
-
-
-
- {isSelected ? (
-
- ) : (
-
- )}
-
-
-
- {isSelected && (
-
-
- {/* Activity Details */}
-
- {activity.description?.map((detail: string, detailIndex: number) => (
-
- •
-
- {detail}
-
-
- ))}
-
-
- {/* Get Directions Button */}
-
-
-
- Get Directions
-
-
-
-
- )}
-
-
- );
- })}
-
-
-
-
- );
- })}
-
-
- )}
-
- {/* Action Buttons */}
-
- setShowResults(false)}
- className="font-poppins font-medium px-8 py-3 text-lg"
- >
-
- Create Another
-
-
- Save Itinerary
-
-
-
-
- );
- }
-
- switch (currentStep) {
- case 1:
- return (
-
- {/* Where are you visiting section */}
-
-
-
- Where are you {' '}
- visiting?
-
-
-
- {/* Location Search */}
-
-
-
- setItineraryData(prev => ({ ...prev, locationSearch: e.target.value }))}
- className="pl-10 h-12 text-center"
- />
-
-
- {/* Popular Destinations */}
-
- {destinations
- .filter(dest =>
- itineraryData.locationSearch === '' ||
- dest.name.toLowerCase().includes(itineraryData.locationSearch.toLowerCase()) ||
- dest.country.toLowerCase().includes(itineraryData.locationSearch.toLowerCase())
- )
- .map((destination) => (
-
- setItineraryData(prev => ({ ...prev, destination: destination.id, locationSearch: destination.name }))}
- >
-
-
-
-
- {destination.name}
-
-
- {destination.country}
-
-
-
-
-
- ))}
-
-
-
-
- {/* When are you visiting section */}
-
-
-
When are you
- visiting?
-
-
-
-
-
- {/* Start Date */}
-
-
Check-in Date
-
-
-
-
- {itineraryData.startDate ? (
- itineraryData.startDate.toLocaleDateString()
- ) : (
- "Select start date"
- )}
-
-
-
- setItineraryData(prev => ({ ...prev, startDate: date }))}
- disabled={(date) => date < new Date()}
- initialFocus
- />
-
-
-
-
- {/* End Date */}
-
-
Check-out Date
-
-
-
-
- {itineraryData.endDate ? (
- itineraryData.endDate.toLocaleDateString()
- ) : (
- "Select end date"
- )}
-
-
-
- setItineraryData(prev => ({ ...prev, endDate: date }))}
- disabled={(date) => date < (itineraryData.startDate || new Date())}
- initialFocus
- />
-
-
-
-
-
- {/* Date Summary */}
- {itineraryData.startDate && itineraryData.endDate && (
-
-
-
- {Math.ceil((itineraryData.endDate.getTime() - itineraryData.startDate.getTime()) / (1000 * 60 * 60 * 24))} days
-
-
- {itineraryData.startDate.toLocaleDateString()} - {itineraryData.endDate.toLocaleDateString()}
-
-
-
- )}
-
-
-
-
- );
-
- case 2:
- return (
-
- {/* Energy Question */}
-
-
-
- What kind of energy are you after on {' '}
- this trip?
-
-
-
-
- {[
- { id: 'relaxed', name: 'Relaxed', description: 'Within 1-3km' },
- { id: 'balanced', name: 'Balanced', description: 'Within 3-10 km' },
- { id: 'action-packed', name: 'Action Packed', description: 'More than 10 km' }
- ].map((option) => (
-
- setItineraryData(prev => ({ ...prev, energy: option.id }))}
- >
-
-
- {option.name}
-
-
- {option.description}
-
-
-
-
- ))}
-
-
-
- {/* Kids Question */}
-
-
-
- Are you {' '}
- travelling with kids?
-
-
-
-
- {[
- { value: true, label: 'Yes', icon: '👨👩👧👦' },
- { value: false, label: 'No', icon: '👫' }
- ].map((option) => (
-
- setItineraryData(prev => ({ ...prev, withKids: option.value }))}
- >
-
-
{option.icon}
-
- {option.label}
-
-
-
-
- ))}
-
-
-
- );
-
- case 3:
- return (
-
-
-
Do you follow any
- dietary preferences?
-
-
-
- {[
- { id: 'vegetarian', label: 'Vegetarian' },
- { id: 'meat-lover', label: 'Meat lover' },
- { id: 'halal', label: 'Halal' },
- { id: 'no-preference', label: "Doesn't matter" }
- ].map((option) => (
-
- handleDietaryToggle(option.id)}
- >
-
- {option.label}
-
-
-
- ))}
-
-
- );
-
- case 4:
- return (
-
-
- {/* Museums Question */}
-
-
Do you enjoy visiting popular museums and art galleries?
-
- {[
- { value: true, label: 'Not really' },
- { value: null, label: 'Yes if interesting' },
- { value: false, label: 'Totally my vibe' }
- ].map((option, index) => (
- setItineraryData(prev => ({ ...prev, museums: option.value }))}
- >
-
- {option.label}
-
-
- ))}
-
-
-
- {/* Scenic Spots Question */}
-
-
Do you enjoy visiting popular scenic viewpoints and photo spots?
-
- {[
- { value: true, label: 'Not really' },
- { value: null, label: 'Yes if interesting' },
- { value: false, label: 'Absolutely love' }
- ].map((option, index) => (
- setItineraryData(prev => ({ ...prev, scenicSpots: option.value }))}
- >
-
- {option.label}
-
-
- ))}
-
-
-
- {/* Cultural Sites Question */}
-
-
Do you enjoy visiting popular cultural landmarks and historical sites?
-
- {[
- { value: true, label: 'Not really' },
- { value: null, label: 'If nearby' },
- { value: false, label: 'Absolutely love' }
- ].map((option, index) => (
- setItineraryData(prev => ({ ...prev, culturalSites: option.value }))}
- >
-
- {option.label}
-
-
- ))}
-
-
-
- {/* Wildlife Question */}
-
-
Would you like your trip to include some wildlife experiences?
-
- {[
- { value: true, label: 'Not really' },
- { value: null, label: 'If nearby' },
- { value: false, label: 'Absolutely love' }
- ].map((option, index) => (
- setItineraryData(prev => ({ ...prev, wildlife: option.value }))}
- >
-
- {option.label}
-
-
- ))}
-
-
-
- {/* Nightlife Question */}
-
-
Are you into nightlife and evening scenes?
-
- {[
- { value: true, label: 'Not really' },
- { value: null, label: 'A few nights' },
- { value: false, label: 'Absolutely' }
- ].map((option, index) => (
- setItineraryData(prev => ({ ...prev, nightlife: option.value }))}
- >
-
- {option.label}
-
-
- ))}
-
-
-
- {/* Shopping Question */}
-
-
How do you feel about shopping during your trip?
-
- {[
- { value: true, label: 'Not really' },
- { value: null, label: 'Some shopping' },
- { value: false, label: 'Love shopping' }
- ].map((option, index) => (
- setItineraryData(prev => ({ ...prev, shopping: option.value }))}
- >
-
- {option.label}
-
-
- ))}
-
-
-
-
- );
-
-
-
- default:
- return null;
- }
- };
-
- return (
-
-
{}}
- onHomeClick={onHomeClick}
- onPassesClick={onPassesClick}
- onSignInClick={onSignInClick}
- onAttractionsClick={onAttractionsClick}
- onBlogsClick={onBlogsClick}
- onHowItWorksClick={onHowItWorksClick}
- onFAQClick={onFAQClick}
- onPrivacyPolicyClick={onPrivacyPolicyClick}
- onAboutUsClick={onAboutUsClick}
- onProfileClick={onProfileClick}
- onCityCardsClick={onCityCardsClick}
- onMagicItineraryClick={onMagicItineraryClick}
- onPostCardsClick={onPostCardsClick}
- onOffersClick={onOffersClick}
- currentPage="create-itinerary"
- isUserSignedIn={!!user}
- user={user}
- />
-
-
- {/* Header - Only show during trip planning steps */}
- {!isGenerating && !showResults && (
- <>
-
-
- Tell Us About Your {' '}
- Trip
-
-
-
- {/* Progress Bar */}
-
-
- {/* Step Circles */}
-
-
- {Array.from({ length: totalSteps }, (_, index) => {
- const stepNumber = index + 1;
- const isActive = stepNumber === currentStep;
- const isCompleted = stepNumber < currentStep;
-
- return (
-
-
- {isCompleted ? (
-
- ) : (
- {stepNumber}
- )}
-
- {stepNumber < totalSteps && (
-
- )}
-
- );
- })}
-
-
- >
- )}
-
- {/* Main Content */}
-
-
- {renderStep()}
-
-
- {/* Navigation Buttons */}
- {!isGenerating && !showResults && (
-
-
-
- Back
-
-
-
- {currentStep === totalSteps ? 'Create Magic Itinerary' : 'Next'}
- {currentStep !== totalSteps && }
- {currentStep === totalSteps && }
-
-
- )}
-
-
-
-
-
- );
-}
\ No newline at end of file
diff --git a/src/components/CustomPostcards.tsx b/src/components/CustomPostcards.tsx
index 6562bfe..3556edb 100644
--- a/src/components/CustomPostcards.tsx
+++ b/src/components/CustomPostcards.tsx
@@ -4,7 +4,7 @@ import { Button } from './ui/button';
import { ImageWithFallback } from './figma/ImageWithFallback';
import { motion, useMotionValue, useSpring, useTransform, useInView } from 'motion/react';
import { HandwrittenText, useHandwrittenText } from './HandwrittenText';
-import postcardImage from 'figma:asset/d3a880cf8b7f1bec6da9b3f2ce4a76e822e483cf.png';
+import front from '../assets/front.jpg'
interface EditableCardProps {
isEditing: boolean;
@@ -190,485 +190,485 @@ export function CustomPostcards() {
};
// Ultra-realistic vintage postcard with responsive scaling and animations
- const PostcardFrame = () => {
- return (
-
- {/* Realistic paper texture with variations */}
-
+ // const PostcardFrame = () => {
+ // return (
+ //
+ // {/* Realistic paper texture with variations */}
+ //
- {/* Age spots and stains */}
-
+ // {/* Age spots and stains */}
+ //
- {/* Corner wear and creases */}
-
-
+ // {/* Corner wear and creases */}
+ //
+ //
- {/* Subtle crease lines */}
-
+ // {/* Subtle crease lines */}
+ //
- {/* Animated Vintage Vector Logo - Top Right - Mobile Optimized */}
-
-
- {/* Subtle aging overlay for the vector */}
-
-
+ // {/* Animated Vintage Vector Logo - Top Right - Mobile Optimized */}
+ //
+ //
+ // {/* Subtle aging overlay for the vector */}
+ //
+ //
- {/* For Correspondence Text */}
-
-
- For correspondence
-
-
+ // {/* For Correspondence Text */}
+ //
+ //
+ // For correspondence
+ //
+ //
- {/* Realistic vertical divider with ink bleeding - Responsive */}
-
+ // {/* Realistic vertical divider with ink bleeding - Responsive */}
+ //
- {/* Ink bleed effect around divider - Responsive */}
-
+ // {/* Ink bleed effect around divider - Responsive */}
+ //
- {/* Right side content area - Responsive */}
-
- {/* Editable Address Label Card - Responsive */}
-
setEditingCard(editingCard === 'label' ? null : 'label')}
- style={{
- position: 'absolute',
- top: '4.1%',
- left: '0%',
- pointerEvents: 'auto',
- transform: 'rotate(-0.3deg)'
- }}
- editIcon={ }
- >
-
- {postcardData.addressLabel}
-
-
+ // {/* Right side content area - Responsive */}
+ //
+ // {/* Editable Address Label Card - Responsive */}
+ //
setEditingCard(editingCard === 'label' ? null : 'label')}
+ // style={{
+ // position: 'absolute',
+ // top: '4.1%',
+ // left: '0%',
+ // pointerEvents: 'auto',
+ // transform: 'rotate(-0.3deg)'
+ // }}
+ // editIcon={ }
+ // >
+ //
+ // {postcardData.addressLabel}
+ //
+ //
- {/* Realistic horizontal ruled lines with ink bleeding - Responsive */}
-
- {[...Array(9)].map((_, i) => (
-
- {/* Main line */}
-
- {/* Ink bleed effect */}
-
-
- ))}
-
+ // {/* Realistic horizontal ruled lines with ink bleeding - Responsive */}
+ //
+ // {[...Array(9)].map((_, i) => (
+ //
+ // {/* Main line */}
+ //
+ // {/* Ink bleed effect */}
+ //
+ //
+ // ))}
+ //
- {/* Editable Message Card with Handwritten Animation - Responsive */}
-
setEditingCard(editingCard === 'message' ? null : 'message')}
- style={{
- position: 'absolute',
- top: '17.6%',
- left: '4.4%',
- width: '88.2%',
- pointerEvents: 'auto',
- transform: 'rotate(-0.7deg)'
- }}
- editIcon={ }
- >
-
- {editingCard === 'message' ? (
- // Show static text when editing
-
- {postcardData.message}
-
- ) : (
- // Show animated handwritten text when not editing
-
- )}
-
-
+ // {/* Editable Message Card with Handwritten Animation - Responsive */}
+ //
setEditingCard(editingCard === 'message' ? null : 'message')}
+ // style={{
+ // position: 'absolute',
+ // top: '17.6%',
+ // left: '4.4%',
+ // width: '88.2%',
+ // pointerEvents: 'auto',
+ // transform: 'rotate(-0.7deg)'
+ // }}
+ // editIcon={ }
+ // >
+ //
+ // {editingCard === 'message' ? (
+ // // Show static text when editing
+ //
+ // {postcardData.message}
+ //
+ // ) : (
+ // // Show animated handwritten text when not editing
+ //
+ // )}
+ //
+ //
- {/* Editable Date Card - Responsive */}
-
setEditingCard(editingCard === 'date' ? null : 'date')}
- style={{
- position: 'absolute',
- bottom: '16.2%',
- right: '7.4%',
- pointerEvents: 'auto',
- transform: 'rotate(-1.5deg)'
- }}
- editIcon={ }
- >
-
- {postcardData.date}
-
-
-
+ // {/* Editable Date Card - Responsive */}
+ //
setEditingCard(editingCard === 'date' ? null : 'date')}
+ // style={{
+ // position: 'absolute',
+ // bottom: '16.2%',
+ // right: '7.4%',
+ // pointerEvents: 'auto',
+ // transform: 'rotate(-1.5deg)'
+ // }}
+ // editIcon={ }
+ // >
+ //
+ // {postcardData.date}
+ //
+ //
+ //
- {/* Ultra-realistic stamp - Responsive */}
- setEditingCard(editingCard === 'stamp' ? null : 'stamp')}
- style={{
- position: 'absolute',
- width: '12.5%',
- height: '19.1%',
- right: '3.5%',
- bottom: '5.3%',
- transform: 'rotate(-12deg)'
- }}
- editIcon={ }
- >
-
- {/* Stamp aging and wear */}
-
+ // {/* Ultra-realistic stamp - Responsive */}
+ //
setEditingCard(editingCard === 'stamp' ? null : 'stamp')}
+ // style={{
+ // position: 'absolute',
+ // width: '12.5%',
+ // height: '19.1%',
+ // right: '3.5%',
+ // bottom: '5.3%',
+ // transform: 'rotate(-12deg)'
+ // }}
+ // editIcon={ }
+ // >
+ //
+ // {/* Stamp aging and wear */}
+ //
- {/* Stamp inner details */}
-
-
+ // {/* Stamp inner details */}
+ //
+ //
- {/* Stamp text */}
-
-
- TRAVEL
-
-
- MEMORIES
-
-
- 2024
-
-
+ // {/* Stamp text */}
+ //
+ //
+ // TRAVEL
+ //
+ //
+ // MEMORIES
+ //
+ //
+ // 2024
+ //
+ //
- {/* Stamp perforations with realistic variations */}
- {[...Array(20)].map((_, i) => (
-
0.1 ? 1 : 0.3 // Random missing perforations
- }}
- />
- ))}
+ // {/* Stamp perforations with realistic variations */}
+ // {[...Array(20)].map((_, i) => (
+ //
0.1 ? 1 : 0.3 // Random missing perforations
+ // }}
+ // />
+ // ))}
- {/* Stamp smudge mark */}
-
-
-
+ // {/* Stamp smudge mark */}
+ //
+ //
+ //
- {/* Additional realistic aging effects */}
-
-
- );
- };
+ // {/* Additional realistic aging effects */}
+ //
+ //
+ // );
+ // };
return (
@@ -700,7 +700,7 @@ export function CustomPostcards() {
The Only Card That Sends Your
-
+
Holiday
{' '}
Home.
@@ -783,7 +783,8 @@ export function CustomPostcards() {
WebkitBackfaceVisibility: "hidden"
}}
>
-
+ {/* */}
+
{/* Subtle glow effect */}
What our {' '}
-
+
travelers
{' '}
say
@@ -126,7 +126,7 @@ export function EnhancedTestimonials() {
style={{
transform: `rotate(${cardRotation}deg) translateY(${cardOffset}px)`,
transformOrigin: 'center center',
- minHeight: '480px',
+ minHeight: '360px',
background: `
radial-gradient(circle at 20% 80%, rgba(255, 248, 235, 0.8) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(250, 245, 230, 0.6) 0%, transparent 50%),
diff --git a/src/components/FAQPage.tsx b/src/components/FAQPage.tsx
index 58e7197..ffe84d2 100644
--- a/src/components/FAQPage.tsx
+++ b/src/components/FAQPage.tsx
@@ -244,7 +244,7 @@ export function FAQPage({
Frequently Asked{' '}
-
+
Questions
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 3aa0787..7b2c55a 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -45,10 +45,10 @@ export function Footer({
/>
{/* Enhanced White Gradient Overlay at Top */}
-
+
{/* Additional Smooth Transition Layer */}
-
+
{/* Dark overlay for text readability */}
@@ -61,7 +61,7 @@ export function Footer({
{/* Content Overlay */}
-
+
{/* Footer Content Grid */}
diff --git a/src/components/FooterBottom.tsx b/src/components/FooterBottom.tsx
index f11d8ca..c32da0b 100644
--- a/src/components/FooterBottom.tsx
+++ b/src/components/FooterBottom.tsx
@@ -17,13 +17,13 @@ export function FooterBottom({ onPrivacyPolicyClick }: FooterBottomProps) {
{/* Copyright */}
- © 2024 CityCards. All rights reserved.
+ © 2026 CityCards. All rights reserved.
{/* Right Section - Legal Links and Social Icons */}
{/* Legal Links */}
-
*/}
{/* Social Icons - Horizontal Layout */}
diff --git a/src/components/FooterNavigation.tsx b/src/components/FooterNavigation.tsx
index f05d37d..a6dad8f 100644
--- a/src/components/FooterNavigation.tsx
+++ b/src/components/FooterNavigation.tsx
@@ -1,37 +1,21 @@
import { motion } from 'motion/react';
import { footerSections } from '../utils/footerConstants';
+import { Link } from 'react-router-dom';
-interface FooterNavigationProps {
- onHomeClick?: () => void;
- onMelbourneClick?: () => void;
- onPassesClick?: () => void;
- onSignInClick?: () => void;
- onAttractionsClick?: () => void;
- onBlogsClick?: () => void;
- onHowItWorksClick?: () => void;
- onFAQClick?: () => void;
- onPrivacyPolicyClick?: () => void;
- onAboutUsClick?: () => void;
- onContactUsClick?: () => void;
- currentPage?: string;
-}
+const linkRoutes: Record
= {
+ 'Home': '/',
+ // 'Cancellation policy': '/cancellation-policy',
+ 'How It Works': '/how-it-works',
+ 'FAQ': '/faq',
+ 'Blog': '/blogs',
+ 'Contact Us': '/contact-us',
+ 'Privacy Policy': '/privacy-policy',
+ // 'Terms of Service': '/terms',
+};
-export function FooterNavigation({
- onHomeClick,
- onMelbourneClick,
- onPassesClick,
- onSignInClick,
- onAttractionsClick,
- onBlogsClick,
- onHowItWorksClick,
- onFAQClick,
- onPrivacyPolicyClick,
- onAboutUsClick,
- onContactUsClick,
- currentPage
-}: FooterNavigationProps) {
+export function FooterNavigation() {
return (
-
+
{Object.entries(footerSections).map(([key, section]) => (
{section.title}
+
- {section.links.map((link, index) => {
- const getClickHandler = () => {
- switch (link) {
- case 'Home': return onHomeClick;
- case 'Melbourne': return onMelbourneClick;
- case 'Passes': return onPassesClick;
- case 'Sign In': return onSignInClick;
- case 'Attractions': return onAttractionsClick;
- case 'Blog': return onBlogsClick;
- case 'How It Works': return onHowItWorksClick;
- case 'FAQ': return onFAQClick;
- case 'Privacy Policy': return onPrivacyPolicyClick;
- case 'Contact Us': return onContactUsClick;
- default: return undefined;
- }
- };
-
- const clickHandler = getClickHandler();
-
- return (
-
- {clickHandler ? (
- {
- e.preventDefault();
- clickHandler();
- }}
- className="text-white/80 hover:text-white transition-colors duration-200 text-sm text-left"
- whileHover={{ x: 4 }}
- transition={{ duration: 0.2 }}
- >
- {link}
-
- ) : (
-
- {link}
-
- )}
-
- );
- })}
+ {section.links.map((link) => (
+
+
+
+ {link}
+
+
+
+ ))}
))}
diff --git a/src/components/HeroBannerCarousel.tsx b/src/components/HeroBannerCarousel.tsx
index af7fb62..ac83f13 100644
--- a/src/components/HeroBannerCarousel.tsx
+++ b/src/components/HeroBannerCarousel.tsx
@@ -19,13 +19,15 @@ export function HeroBannerCarousel({
const [currentSlide, setCurrentSlide] = useState(0);
const [isPaused, setIsPaused] = useState(false);
+ const cityName = localStorage.getItem("cityName")
+
const slides = [
{
id: 1,
title: "Discover",
- highlight: "Melbourne",
+ highlight: cityName,
subtitle: "Ultimate Guide to Iconic City",
- description: "From Flinders Street to St Kilda Beach: explore the best of Melbourne's landmarks, culture, food and more!",
+ description: cityName === "Melbourne" ? "From Flinders Street to St Kilda Beach: explore the best of Melbourne's landmarks, culture, food and more!" : "From the Sydney Opera House to Bondi Beach: explore the best of Sydney’s landmarks, culture, food and more!",
image: "https://images.unsplash.com/photo-1757470238279-0e9f331d02c9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjBza3lsaW5lJTIwc3Vuc2V0fGVufDF8fHx8MTc2MDUwOTIyMHww&ixlib=rb-4.1.0&q=80&w=1080",
cta: "Get Started",
onClick: onCheckoutClick
diff --git a/src/components/HotelEsimOffers.tsx b/src/components/HotelEsimOffers.tsx
index 09d2085..5b2d619 100644
--- a/src/components/HotelEsimOffers.tsx
+++ b/src/components/HotelEsimOffers.tsx
@@ -7,6 +7,7 @@ interface HotelEsimOffersProps {
}
export function HotelEsimOffers({ onEsimsClick, onHotelDiscountsClick }: HotelEsimOffersProps) {
+ const cityName = localStorage.getItem("cityName")
return (
@@ -64,7 +65,7 @@ export function HotelEsimOffers({ onEsimsClick, onHotelDiscountsClick }: HotelEs
>
- Stay Connected in Melbourne
+ Stay Connected in {cityName}
@@ -72,7 +73,7 @@ export function HotelEsimOffers({ onEsimsClick, onHotelDiscountsClick }: HotelEs
Connected
- Get instant e-SIM connectivity across Australia. Stay online from the moment you land in Melbourne.
+ Get instant e-SIM connectivity across Australia. Stay online from the moment you land in {cityName}.
@@ -105,10 +106,10 @@ export function HotelEsimOffers({ onEsimsClick, onHotelDiscountsClick }: HotelEs
🇦🇺 AUSTRALIA-WIDE COVERAGE
- Exclusive e-SIM Offers for Melbourne Visitors
+ Exclusive e-SIM Offers for {cityName} Visitors
- No more hunting for local SIM cards at the airport. Activate your e-SIM instantly and explore Melbourne with seamless connectivity.
+ No more hunting for local SIM cards at the airport. Activate your e-SIM instantly and explore {cityName} with seamless connectivity.
- Premium Melbourne Hotels
+ Premium {cityName} Hotels
@@ -215,7 +216,7 @@ export function HotelEsimOffers({ onEsimsClick, onHotelDiscountsClick }: HotelEs
Luxury
- Unlock exclusive rates at Melbourne's finest hotels. Your CityCard membership opens doors to premium CBD and waterfront stays.
+ Unlock exclusive rates at {cityName}'s finest hotels. Your CityCard membership opens doors to premium CBD and waterfront stays.
@@ -236,10 +237,10 @@ export function HotelEsimOffers({ onEsimsClick, onHotelDiscountsClick }: HotelEs
🔥 MARRIOTT BONVOY PARTNER
- Melbourne Premium Stays at Unbeatable Prices
+ {cityName} Premium Stays at Unbeatable Prices
- Access exclusive member rates at Melbourne's top hotels including Crown Towers, W Melbourne, and premium CBD properties. Enjoy complimentary upgrades and special amenities.
+ Access exclusive member rates at {cityName}'s top hotels including Crown Towers, W {cityName}, and premium CBD properties. Enjoy complimentary upgrades and special amenities.
@@ -253,7 +254,7 @@ export function HotelEsimOffers({ onEsimsClick, onHotelDiscountsClick }: HotelEs
25%
Average Savings
-
on Melbourne hotels
+
on {cityName} hotels
{
setActiveStep((prev) => (prev + 1) % steps.length);
@@ -78,8 +82,10 @@ export function HowItWorks() {
How Your {' '}
- Melbourne {' '}
- City Card {' '}
+ {!location.pathname.includes("landing") &&
+ {cityName}
+ }
+ City Card {' '}
Works.
@@ -91,7 +97,7 @@ export function HowItWorks() {
{/* Desktop Layout */}
-
+
{/* Left Panel - Section Header */}
@@ -143,7 +149,7 @@ export function HowItWorks() {
}}
/>
))}
-
+
{/* Selection wave effect */}
-
+
{/* Active selection indicator */}
)}
-
+
{currentStep.id === 2 && (
// Select Pass - Card selection animation (larger version)
@@ -201,7 +207,7 @@ export function HowItWorks() {
/>
)}
-
+
{currentStep.id === 3 && (
// Plan Journey - Calendar animation (larger version)
@@ -228,7 +234,7 @@ export function HowItWorks() {
)}
-
+
{currentStep.id === 4 && (
// Download App - Complete app download experience
@@ -236,7 +242,7 @@ export function HowItWorks() {
{/* App Store Header */}
-
+
{/* App Listing */}
@@ -245,7 +251,7 @@ export function HowItWorks() {
-
+
{/* Download Button */}
-
+
{/* Download Progress Indicator */}
-
+
{/* Phone with Installing App */}
{/* Phone Screen */}
@@ -309,7 +315,7 @@ export function HowItWorks() {
ease: "easeOut"
}}
/>
-
+
{/* Installation Progress Circle */}
-
+
{/* Phone Home Button */}
-
+
{/* Download Success Animation */}
-
+
{/* Download Arrow */}
-
+
-
+
{/* Success Particles */}
{[...Array(4)].map((_, idx) => (
)}
-
+
{currentStep.id === 5 && (
// Explore & Enjoy - Floating heart (larger version)
@@ -408,7 +414,7 @@ export function HowItWorks() {
>
@@ -437,7 +443,7 @@ export function HowItWorks() {
))}
)}
-
+
{currentStep.id === 6 && (
// Download App - App download animation (larger version)
@@ -459,7 +465,7 @@ export function HowItWorks() {
ease: "backOut"
}}
/>
-
+
{/* Download progress bar */}
-
+
{/* Home button */}
-
+
{/* Download arrow animation */}
-
+
-
+
{/* Success particles */}
{[...Array(3)].map((_, idx) => (
goToStep(index)}
- className={`h-1.5 rounded-full transition-all duration-200 ${
- index === activeStep ? 'bg-primary w-6' : 'bg-gray-200 w-1.5 hover:bg-gray-300'
- }`}
+ className={`h-1.5 rounded-full transition-all duration-200 ${index === activeStep ? 'bg-primary w-6' : 'bg-gray-200 w-1.5 hover:bg-gray-300'
+ }`}
/>
))}
-
+
{/* Extra Large Detailed Animation Frame */}
-
-
- {activeStep === 0 && (
-
- {/* Step 1: City Selection Website Interface */}
-
-
- {/* Website Header */}
-
-
-
-
-
Cities
-
Passes
-
About
-
- Sign In
-
+
+
+ {activeStep === 0 && (
+
+ {/* Step 1: City Selection Website Interface */}
+
+
+ {/* Website Header */}
+
+
+
+
+ Cities
+ Passes
+ About
+
+ Sign In
+
+
+
+
+ {/* Main Content Area */}
+
+
+ {/* Hero Section */}
+
+
+ Choose Your {' '}
+ Adventure
+
+
Explore amazing cities with our curated travel passes
+
+
+ {/* Search Bar */}
+
+
+
- {/* Main Content Area */}
-
-
- {/* Hero Section */}
-
-
- Choose Your {' '}
- Adventure
-
-
Explore amazing cities with our curated travel passes
-
-
- {/* Search Bar */}
+ {/* City Grid */}
+
+ {[
+ { name: 'Sydney', attractions: '200+ Attractions', image: 'https://images.unsplash.com/photo-1624138784614-87fd1b6528f8?w=200&h=150&fit=crop', popular: true },
+ { name: 'Melbourne', attractions: '150+ Attractions', image: 'https://images.unsplash.com/photo-1514395462725-fb4566210144?w=200&h=150&fit=crop', popular: false },
+ { name: 'Brisbane', attractions: '120+ Attractions', image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=200&h=150&fit=crop', popular: false },
+ { name: 'Perth', attractions: '90+ Attractions', image: 'https://images.unsplash.com/photo-1544735716-392fe2489ffa?w=200&h=150&fit=crop', popular: false }
+ ].map((city, idx) => (
-
-
-
-
-
-
+ {city.popular && (
+
+
+
-
+
+ )}
+
+
+
+
+
{city.name}
+
{city.attractions}
+
+
+ Explore City
+
-
- {/* City Grid */}
-
- {[
- { name: 'Sydney', attractions: '200+ Attractions', image: 'https://images.unsplash.com/photo-1624138784614-87fd1b6528f8?w=200&h=150&fit=crop', popular: true },
- { name: 'Melbourne', attractions: '150+ Attractions', image: 'https://images.unsplash.com/photo-1514395462725-fb4566210144?w=200&h=150&fit=crop', popular: false },
- { name: 'Brisbane', attractions: '120+ Attractions', image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=200&h=150&fit=crop', popular: false },
- { name: 'Perth', attractions: '90+ Attractions', image: 'https://images.unsplash.com/photo-1544735716-392fe2489ffa?w=200&h=150&fit=crop', popular: false }
- ].map((city, idx) => (
-
- {city.popular && (
-
-
-
-
-
- )}
-
-
-
-
-
{city.name}
-
{city.attractions}
-
-
- Explore City
-
-
-
- ))}
-
-
- {/* Filter Tabs */}
-
- {['All Cities', 'Popular', 'New'].map((filter, idx) => (
-
- {filter}
-
- ))}
-
-
+ ))}
-
- )}
- {activeStep === 1 && (
-
- {/* Step 2: Pass Selection & Pricing Interface */}
-
-
- {/* Website Header */}
-
-
- {/* Main Content */}
-
-
- {/* Header */}
-
-
- Choose Your {' '}
- Pass
-
-
Select the perfect pass for your Sydney adventure
-
-
- {/* Pass Cards */}
-
- {[
- {
- name: '1-Day Pass',
- price: '$49',
- originalPrice: '$65',
- savings: 'Save $16',
- features: ['15+ Attractions', 'Skip Lines', 'Mobile Pass'],
- popular: false,
- color: 'from-blue-500 to-blue-600'
- },
- {
- name: '3-Day Pass',
- price: '$99',
- originalPrice: '$150',
- savings: 'Save $51',
- features: ['30+ Attractions', 'Skip Lines', 'Mobile Pass', 'Free Transit', 'Bonus Tours'],
- popular: true,
- color: 'from-primary to-secondary'
- },
- {
- name: '7-Day Pass',
- price: '$149',
- originalPrice: '$220',
- savings: 'Save $71',
- features: ['50+ Attractions', 'Skip Lines', 'Mobile Pass', 'Free Transit', 'All Tours', 'VIP Access'],
- popular: false,
- color: 'from-purple-500 to-purple-600'
- }
- ].map((pass, idx) => (
-
- {pass.popular && (
-
- Most Popular
-
- )}
-
- {/* Card Header */}
-
-
{pass.name}
-
-
{pass.price}
-
- {pass.originalPrice}
- {pass.savings}
-
-
-
-
- {/* Features */}
-
- {pass.features.slice(0, 4).map((feature, featureIdx) => (
-
-
- {feature}
-
- ))}
- {pass.features.length > 4 && (
-
- +{pass.features.length - 4} more...
-
- )}
-
-
- {/* Select Button */}
-
-
- Select Pass
-
-
-
- ))}
-
-
- {/* Trust Indicators */}
-
-
-
-
-
Free cancellation within 24h
-
-
- ★★★★★
- 4.8 (2.1k reviews)
-
-
-
-
- {/* Comparison Toggle */}
-
+ {['All Cities', 'Popular', 'New'].map((filter, idx) => (
+
-
- View detailed comparison →
-
+ {filter}
+
+ ))}
+
+
+
+
+ )}
+
+ {activeStep === 1 && (
+
+ {/* Step 2: Pass Selection & Pricing Interface */}
+
+
+ {/* Website Header */}
+
+
+ {/* Main Content */}
+
+
+ {/* Header */}
+
+
+ Choose Your {' '}
+ Pass
+
+
Select the perfect pass for your Sydney adventure
+
+
+ {/* Pass Cards */}
+
+ {[
+ {
+ name: '1-Day Pass',
+ price: '$49',
+ originalPrice: '$65',
+ savings: 'Save $16',
+ features: ['15+ Attractions', 'Skip Lines', 'Mobile Pass'],
+ popular: false,
+ color: 'from-blue-500 to-blue-600'
+ },
+ {
+ name: '3-Day Pass',
+ price: '$99',
+ originalPrice: '$150',
+ savings: 'Save $51',
+ features: ['30+ Attractions', 'Skip Lines', 'Mobile Pass', 'Free Transit', 'Bonus Tours'],
+ popular: true,
+ color: 'from-primary to-secondary'
+ },
+ {
+ name: '7-Day Pass',
+ price: '$149',
+ originalPrice: '$220',
+ savings: 'Save $71',
+ features: ['50+ Attractions', 'Skip Lines', 'Mobile Pass', 'Free Transit', 'All Tours', 'VIP Access'],
+ popular: false,
+ color: 'from-purple-500 to-purple-600'
+ }
+ ].map((pass, idx) => (
+
+ {pass.popular && (
+
+ Most Popular
+
+ )}
+
+ {/* Card Header */}
+
+
{pass.name}
+
+
{pass.price}
+
+ {pass.originalPrice}
+ {pass.savings}
+
+
+
+
+ {/* Features */}
+
+ {pass.features.slice(0, 4).map((feature, featureIdx) => (
+
+
+ {feature}
+
+ ))}
+ {pass.features.length > 4 && (
+
+ +{pass.features.length - 4} more...
+
+ )}
+
+
+ {/* Select Button */}
+
+
+ Select Pass
+
+
+ ))}
+
+
+ {/* Trust Indicators */}
+
+
+
+
+
Free cancellation within 24h
+
+
+ ★★★★★
+ 4.8 (2.1k reviews)
+
-
- )}
- {activeStep === 2 && (
-
- {/* Step 3: Journey Planning & Calendar Interface */}
-
-
- {/* Website Header */}
-
-
-
-
← Back
-
3-Day Pass Selected
-
+ {/* Comparison Toggle */}
+
+
+ View detailed comparison →
+
+
+
+
+
+ )}
+
+ {activeStep === 2 && (
+
+ {/* Step 3: Journey Planning & Calendar Interface */}
+
+
+ {/* Website Header */}
+
+
+
+
← Back
+
3-Day Pass Selected
+
+
- {/* Main Content */}
-
-
- {/* Header */}
-
-
- Plan Your {' '}
- Journey
-
-
Choose your travel dates and create your itinerary
+ {/* Main Content */}
+
+
+ {/* Header */}
+
+
+ Plan Your {' '}
+ Journey
+
+
Choose your travel dates and create your itinerary
+
+
+ {/* Two Column Layout */}
+
+
+ {/* Calendar Section */}
+
+ {/* Month Navigation */}
+
+
+
+
+
+
+
+
December 2024
+
+
+
+
+
+
- {/* Two Column Layout */}
-
-
- {/* Calendar Section */}
-
- {/* Month Navigation */}
-
-
-
-
-
-
-
-
December 2024
-
-
-
-
-
-
-
-
- {/* Calendar Grid */}
-
- {/* Weekday Headers */}
-
- {['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'].map((day) => (
-
- {day}
-
- ))}
+ {/* Calendar Grid */}
+
+ {/* Weekday Headers */}
+
+ {['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'].map((day) => (
+
+ {day}
-
- {/* Calendar Days */}
-
- {[
- null, null, null, null, null, 1, 2,
- 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30,
- 31
- ].map((date, idx) => {
- const isSelected = date === 15 || date === 16 || date === 17;
- const isToday = date === 12;
- const isAvailable = date && date > 11;
-
- return (
-
+
+ {/* Calendar Days */}
+
+ {[
+ null, null, null, null, null, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30,
+ 31
+ ].map((date, idx) => {
+ const isSelected = date === 15 || date === 16 || date === 17;
+ const isToday = date === 12;
+ const isAvailable = date && date > 11;
+
+ return (
+
- {date}
-
- );
- })}
-
-
-
-
- {/* Itinerary Section */}
-
-
-
Your Itinerary
-
3 days selected
-
-
- {/* Itinerary Items */}
-
- {[
- {
- day: 'Day 1',
- date: 'Dec 15',
- attractions: ['Opera House', 'Harbour Bridge', 'Circular Quay'],
- color: 'bg-blue-100 text-blue-600'
- },
- {
- day: 'Day 2',
- date: 'Dec 16',
- attractions: ['Bondi Beach', 'Art Gallery', 'Darling Harbour'],
- color: 'bg-green-100 text-green-600'
- },
- {
- day: 'Day 3',
- date: 'Dec 17',
- attractions: ['Blue Mountains', 'Wildlife Park', 'Scenic Railway'],
- color: 'bg-purple-100 text-purple-600'
- }
- ].map((day, dayIdx) => (
-
-
-
- {day.day}
-
-
{day.date}
-
-
-
- {day.attractions.map((attraction, attractionIdx) => (
-
-
- {attraction}
-
- ))}
-
+ {date}
- ))}
-
+ );
+ })}
+
+
+
- {/* Add Activity Button */}
-
+
+
Your Itinerary
+
3 days selected
+
+
+ {/* Itinerary Items */}
+
+ {[
+ {
+ day: 'Day 1',
+ date: 'Dec 15',
+ attractions: ['Opera House', 'Harbour Bridge', 'Circular Quay'],
+ color: 'bg-blue-100 text-blue-600'
+ },
+ {
+ day: 'Day 2',
+ date: 'Dec 16',
+ attractions: ['Bondi Beach', 'Art Gallery', 'Darling Harbour'],
+ color: 'bg-green-100 text-green-600'
+ },
+ {
+ day: 'Day 3',
+ date: 'Dec 17',
+ attractions: ['Blue Mountains', 'Wildlife Park', 'Scenic Railway'],
+ color: 'bg-purple-100 text-purple-600'
+ }
+ ].map((day, dayIdx) => (
+
- + Add activity
-
-
+
+
+ {day.day}
+
+
{day.date}
+
+
+
+ {day.attractions.map((attraction, attractionIdx) => (
+
+
+ {attraction}
+
+ ))}
+
+
+ ))}
- {/* Continue Button */}
-
+ + Add activity
+
+
+
+
+ {/* Continue Button */}
+
+
+ Continue to Payment
+
+
+
+
+
+ )}
+
+ {activeStep === 3 && (
+
+ {/* Step 4: Digital Pass Activation & QR Code */}
+
+
+ {/* Website Header */}
+
+
+
+ ✓ Payment Complete
+
+
+
+ {/* Main Content */}
+
+
+ {/* Success Header */}
+
+
+
+
+
+
+
+
+ Your Pass is {' '}
+ Ready!
+
+
Access your digital pass instantly
+
+
+ {/* Two Column Layout */}
+
+
+ {/* Left: Digital Pass Card */}
+
+ {/* Background Pattern */}
+
+
+ {/* Pass Header */}
+
+
+
+
Sydney 3-Day Pass
+
CityCards Premium
+
+
+
+
+ {/* Pass Details */}
+
+
+ Valid From:
+ Dec 15, 2024
+
+
+ Valid Until:
+ Dec 17, 2024
+
+
+ Attractions:
+ 30+ included
+
+
+
+ {/* Pass Number */}
+
+
Pass ID
+
SYD-2024-12-001234
+
+
+
+
+ {/* Right: QR Code & Instructions */}
+
+
+ {/* QR Code */}
+
+
+ {/* QR Code Grid */}
+
+ {[...Array(144)].map((_, idx) => {
+ const patterns = [
+ // Corner patterns (top-left, top-right, bottom-left)
+ ...[0, 1, 2, 3, 4, 5, 6, 12, 13, 14, 15, 16, 17, 18, 24, 25, 26, 27, 28, 29, 30, 36, 37, 38, 39, 40, 41, 42, 48, 49, 50, 51, 52, 53, 54, 60, 61, 62, 63, 64, 65, 66, 72, 73, 74, 75, 76, 77, 78],
+ ...[5, 6, 7, 8, 9, 10, 11, 17, 18, 19, 20, 21, 22, 23, 29, 30, 31, 32, 33, 34, 35, 41, 42, 43, 44, 45, 46, 47, 53, 54, 55, 56, 57, 58, 59, 65, 66, 67, 68, 69, 70, 71, 77, 78, 79, 80, 81, 82, 83],
+ ...[66, 67, 68, 69, 70, 71, 72, 78, 79, 80, 81, 82, 83, 84, 90, 91, 92, 93, 94, 95, 96, 102, 103, 104, 105, 106, 107, 108, 114, 115, 116, 117, 118, 119, 120, 126, 127, 128, 129, 130, 131, 132, 138, 139, 140, 141, 142, 143, 144],
+ // Data pattern
+ ...[8, 9, 15, 16, 21, 22, 27, 28, 33, 34, 39, 40, 45, 46, 51, 52, 57, 58, 63, 64, 69, 70, 75, 76, 81, 82, 87, 88, 93, 94, 99, 100, 105, 106, 111, 112, 117, 118, 123, 124, 129, 130, 135, 136, 141, 142]
+ ];
+ const isActive = patterns.includes(idx) || Math.random() > 0.6;
+
+ return (
+
+ );
+ })}
+
+
+ {/* Corner Detection Squares */}
+
+
+
+
+
+
Scan to Access
+
Show this QR code at each attraction
+
+
+ {/* Usage Instructions */}
+
+ {[
+ { icon: '📱', text: 'Add to Apple/Google Wallet', status: 'ready' },
+ { icon: '📧', text: 'Email sent to john@example.com', status: 'sent' },
+ { icon: '📲', text: 'Download mobile app for offline access', status: 'optional' }
+ ].map((instruction, idx) => (
+
+ {instruction.icon}
+ {instruction.text}
+ {instruction.status === 'ready' && (
+
+
+
+
+
+ )}
+ {instruction.status === 'sent' && (
+
+ )}
+
+ ))}
+
+
+
+
+ {/* Action Buttons */}
+
+
+ View Itinerary
+
+
+
+ Start Exploring
+
+
+
+
+
+ )}
+
+ {activeStep === 4 && (
+
+ {/* Step 5: Live Mobile App Experience */}
+
+
+ {/* Phone Frame */}
+
+ {/* Phone Screen */}
+
+
+ {/* Status Bar */}
+
+
+ {/* App Header */}
+
+
+
-
- Continue to Payment
-
+
+
+
-
-
- )}
-
- {activeStep === 3 && (
-
- {/* Step 4: Digital Pass Activation & QR Code */}
-
-
- {/* Website Header */}
-
-
-
- ✓ Payment Complete
-
-
{/* Main Content */}
-
-
- {/* Success Header */}
-
+
+
+ {/* Attraction Image */}
+
+
+
+
+ {/* Check-in Status */}
-
-
+
+
+ Checked In
-
-
- Your Pass is {' '}
- Ready!
-
-
Access your digital pass instantly
- {/* Two Column Layout */}
-
-
- {/* Left: Digital Pass Card */}
-
- {/* Background Pattern */}
-
-
-
+ {/* Attraction Info */}
+
+
+
+
Sydney Opera House
+
Iconic performing arts venue
-
- {/* Pass Header */}
-
-
-
-
Sydney 3-Day Pass
-
CityCards Premium
-
-
-
-
- {/* Pass Details */}
-
-
- Valid From:
- Dec 15, 2024
-
-
- Valid Until:
- Dec 17, 2024
-
-
- Attractions:
- 30+ included
-
-
-
- {/* Pass Number */}
-
-
Pass ID
-
SYD-2024-12-001234
-
+
+
Free Entry
+
with CityPass
-
+
- {/* Right: QR Code & Instructions */}
-
-
- {/* QR Code */}
-
-
+ {[
+ { icon: '🎫', label: 'Show Pass', active: true },
+ { icon: '📍', label: 'Directions', active: false },
+ { icon: '📱', label: 'Audio Guide', active: false }
+ ].map((action, idx) => (
+
+ {action.icon}
+ {action.label}
+
+ ))}
+
+
+ {/* Progress Stats */}
+
+
+ Today's Progress
+ 3 of 8 attractions
+
+
+
+
- {/* QR Code Grid */}
-
- {[...Array(144)].map((_, idx) => {
- const patterns = [
- // Corner patterns (top-left, top-right, bottom-left)
- ...[0,1,2,3,4,5,6, 12,13,14,15,16,17,18, 24,25,26,27,28,29,30, 36,37,38,39,40,41,42, 48,49,50,51,52,53,54, 60,61,62,63,64,65,66, 72,73,74,75,76,77,78],
- ...[5,6,7,8,9,10,11, 17,18,19,20,21,22,23, 29,30,31,32,33,34,35, 41,42,43,44,45,46,47, 53,54,55,56,57,58,59, 65,66,67,68,69,70,71, 77,78,79,80,81,82,83],
- ...[66,67,68,69,70,71,72, 78,79,80,81,82,83,84, 90,91,92,93,94,95,96, 102,103,104,105,106,107,108, 114,115,116,117,118,119,120, 126,127,128,129,130,131,132, 138,139,140,141,142,143,144],
- // Data pattern
- ...[8,9,15,16,21,22,27,28,33,34,39,40,45,46,51,52,57,58,63,64,69,70,75,76,81,82,87,88,93,94,99,100,105,106,111,112,117,118,123,124,129,130,135,136,141,142]
- ];
- const isActive = patterns.includes(idx) || Math.random() > 0.6;
-
- return (
-
- );
- })}
-
-
- {/* Corner Detection Squares */}
-
-
-
-
-
-
Scan to Access
-
Show this QR code at each attraction
+ />
- {/* Usage Instructions */}
-
- {[
- { icon: '📱', text: 'Add to Apple/Google Wallet', status: 'ready' },
- { icon: '📧', text: 'Email sent to john@example.com', status: 'sent' },
- { icon: '📲', text: 'Download mobile app for offline access', status: 'optional' }
- ].map((instruction, idx) => (
-
- {instruction.icon}
- {instruction.text}
- {instruction.status === 'ready' && (
-
-
-
-
-
- )}
- {instruction.status === 'sent' && (
-
- )}
-
- ))}
+
+ ✓ Opera House
+ Next: Harbour Bridge
+
- {/* Action Buttons */}
-
-
+ {[
+ { icon: '🗺️', label: 'Map', active: true },
+ { icon: '🎫', label: 'Pass', active: false },
+ { icon: '📅', label: 'Plan', active: false },
+ { icon: '👤', label: 'Profile', active: false }
+ ].map((tab, idx) => (
+
- View Itinerary
-
-
-
- Start Exploring
-
-
+
{tab.icon}
+
{tab.label}
+
+ ))}
+
+
+ {/* Home Indicator */}
+
+
+
+
+ {/* Floating Notifications */}
+
+
+
+
+
Check-in successful!
+
Enjoy the Opera House
- )}
+
+
+ )}
- {activeStep === 4 && (
-
- {/* Step 5: Live Mobile App Experience */}
-
-
- {/* Phone Frame */}
+ {activeStep === 5 && (
+
+ {/* Step 6: App Store Download Experience */}
+
+
+ {/* Two Column Layout */}
+
+
+ {/* Left: App Store Interface */}
+
+
+ {/* App Store Header */}
- {/* Phone Screen */}
-
-
- {/* Status Bar */}
-
-
9:41 AM
-
+ {/* Store Header */}
+
- {/* App Header */}
-
-
+ {/* App Listing */}
+
+
+ {/* App Icon */}
-
-
-
+
-
- {/* Main Content */}
-
-
- {/* Attraction Image */}
-
-
-
-
- {/* Check-in Status */}
-
+ CityCards
+ Travel & Navigation
+
+
+ {'★★★★★'.split('').map((star, idx) => (
+ {star}
+ ))}
+
+
4.8
+
(2.1K)
+
+
+ {/* Download Button */}
+
-
-
-
- Checked In
-
-
-
- {/* Attraction Info */}
-
-
-
-
Sydney Opera House
-
Iconic performing arts venue
-
-
-
Free Entry
-
with CityPass
-
-
-
- {/* Quick Actions */}
-
- {[
- { icon: '🎫', label: 'Show Pass', active: true },
- { icon: '📍', label: 'Directions', active: false },
- { icon: '📱', label: 'Audio Guide', active: false }
- ].map((action, idx) => (
-
- {action.icon}
- {action.label}
-
- ))}
-
-
- {/* Progress Stats */}
-
-
- Today's Progress
- 3 of 8 attractions
-
-
-
-
-
-
-
- ✓ Opera House
- Next: Harbour Bridge
-
-
+ GET
+
- {/* Bottom Tab Bar */}
-
- {[
- { icon: '🗺️', label: 'Map', active: true },
- { icon: '🎫', label: 'Pass', active: false },
- { icon: '📅', label: 'Plan', active: false },
- { icon: '👤', label: 'Profile', active: false }
- ].map((tab, idx) => (
+ {/* App Screenshots Preview */}
+
+ {[0, 1, 2].map((screenshot, idx) => (
- {tab.icon}
- {tab.label}
+ {/* Mini screenshot content */}
+
))}
-
- {/* Home Indicator */}
-
- {/* Floating Notifications */}
+ {/* Download Progress */}
-
-
-
-
Check-in successful!
-
Enjoy the Opera House
-
-
-
-
-
- )}
-
- {activeStep === 5 && (
-
- {/* Step 6: App Store Download Experience */}
-
-
- {/* Two Column Layout */}
-
-
- {/* Left: App Store Interface */}
-
-
- {/* App Store Header */}
+
+
+
+
+
Downloading CityCards...
+
47.2 MB of 52.1 MB
+
+
+
+
+
- {/* Store Header */}
-
+ />
+
+
+
- {/* App Listing */}
-
-
- {/* App Icon */}
+ {/* Right: Phone with App Installation */}
+
+
+ {/* Phone Screen */}
+
+
+ {/* Wallpaper */}
+
+
+ {/* Status Bar */}
+
+
+ {/* App Grid */}
+
+
+ {[
+ { name: 'Phone', color: 'bg-green-500', installing: false },
+ { name: 'Messages', color: 'bg-green-400', installing: false },
+ { name: 'Camera', color: 'bg-gray-600', installing: false },
+ { name: 'Photos', color: 'bg-yellow-500', installing: false },
+ { name: 'Maps', color: 'bg-blue-500', installing: false },
+ { name: 'Weather', color: 'bg-blue-400', installing: false },
+ { name: 'CityCards', color: 'bg-gradient-to-br from-primary to-secondary', installing: true },
+ { name: 'Settings', color: 'bg-gray-500', installing: false }
+ ].map((app, idx) => (
-
-
-
- {/* App Info */}
-
-
CityCards
-
Travel & Navigation
-
-
- {'★★★★★'.split('').map((star, idx) => (
- {star}
- ))}
-
-
4.8
-
(2.1K)
-
-
- {/* Download Button */}
-
- GET
-
-
-
-
- {/* App Screenshots Preview */}
-
- {[0, 1, 2].map((screenshot, idx) => (
-
- {/* Mini screenshot content */}
-
-
-
-
-
-
+ {app.installing ? (
+ <>
+ {/* Installation Progress Circle */}
+
+
-
-
- ))}
-
+ >
+ ) : (
+
+ )}
+
+ ))}
-
+
- {/* Download Progress */}
-
-
-
-
-
-
-
Downloading CityCards...
-
47.2 MB of 52.1 MB
-
-
-
-
-
-
-
+ {/* Dock */}
+
+ {[0, 1, 2, 3].map((dockApp) => (
+
+ ))}
+
+
+ {/* Home Indicator */}
+
-
- {/* Right: Phone with App Installation */}
-
-
- {/* Phone Screen */}
-
-
- {/* Wallpaper */}
-
-
- {/* Status Bar */}
-
-
- {/* App Grid */}
-
-
- {[
- { name: 'Phone', color: 'bg-green-500', installing: false },
- { name: 'Messages', color: 'bg-green-400', installing: false },
- { name: 'Camera', color: 'bg-gray-600', installing: false },
- { name: 'Photos', color: 'bg-yellow-500', installing: false },
- { name: 'Maps', color: 'bg-blue-500', installing: false },
- { name: 'Weather', color: 'bg-blue-400', installing: false },
- { name: 'CityCards', color: 'bg-gradient-to-br from-primary to-secondary', installing: true },
- { name: 'Settings', color: 'bg-gray-500', installing: false }
- ].map((app, idx) => (
-
- {app.installing ? (
- <>
- {/* Installation Progress Circle */}
-
-
- >
- ) : (
-
- )}
-
- ))}
-
-
-
- {/* Dock */}
-
- {[0, 1, 2, 3].map((dockApp) => (
-
- ))}
-
-
- {/* Home Indicator */}
-
-
-
-
-
-
- {/* Success Notification */}
-
-
-
-
- CityCards installed successfully!
-
- {/* Bottom Text */}
-
-
- Ready to explore! Open the app to start your adventure
-
-
+
+
+ {/* Success Notification */}
+
+
+
+
+ CityCards installed successfully!
- )}
-
+
+ {/* Bottom Text */}
+
+
+ Ready to explore! Open the app to start your adventure
+
+
+
+
+ )}
+
@@ -2115,13 +2118,12 @@ export function HowItWorks() {
goToStep(index)}
- className={`h-1.5 rounded-full transition-all duration-200 ${
- index === activeStep ? 'bg-primary w-6' : 'bg-gray-200 w-1.5 hover:bg-gray-300'
- }`}
+ className={`h-1.5 rounded-full transition-all duration-200 ${index === activeStep ? 'bg-primary w-6' : 'bg-gray-200 w-1.5 hover:bg-gray-300'
+ }`}
/>
))}
-
+
Process Flow
-
+
{steps.map((step, index) => {
const isActive = index === activeStep;
const isCompleted = index < activeStep;
-
+
return (
{/* Connection line */}
{index > 0 && (
)}
-
+
goToStep(index)}
className={`
flex-1 flex items-center gap-3 p-3 rounded-2xl border-2 text-left transition-all duration-200
- ${isActive
- ? 'bg-gradient-to-r from-primary to-secondary text-white border-transparent shadow-md'
+ ${isActive
+ ? 'bg-gradient-to-r from-primary to-secondary text-white border-transparent shadow-md'
: isCompleted
- ? 'bg-white border-primary/30 text-gray-700'
- : 'bg-white border-gray-200 text-gray-700 hover:border-primary/30'
+ ? 'bg-white border-primary/30 text-gray-700'
+ : 'bg-white border-gray-200 text-gray-700 hover:border-primary/30'
}
`}
whileTap={{ scale: 0.98 }}
>
{step.id}
-
+
Join thousands of travelers who have discovered the easiest way to explore cities
-
navigate("/passes")}
>
Get Your City Card
diff --git a/src/components/ItineraryViewPage.tsx b/src/components/ItineraryViewPage.tsx
deleted file mode 100644
index 0f72882..0000000
--- a/src/components/ItineraryViewPage.tsx
+++ /dev/null
@@ -1,732 +0,0 @@
-import React, { useState } from 'react';
-import { motion } from 'motion/react';
-import { ArrowLeft, Calendar, Clock, MapPin, Users, Star, Heart, Share2, Download, CheckCircle, Navigation, Cloud, Sun } from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent } from './ui/card';
-import { Badge } from './ui/badge';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-
-interface ItineraryViewPageProps {
- onBackClick: () => void;
- onHomeClick: () => void;
- onMelbourneClick: () => void;
- onPassesClick: () => void;
- onCheckoutClick: () => void;
- onSignInClick: () => void;
- onSignOutClick: () => void;
- onAttractionsClick: () => void;
- onBlogsClick: () => void;
- onHowItWorksClick: () => void;
- onFAQClick: () => void;
- onPrivacyPolicyClick: () => void;
- onAboutUsClick: () => void;
- onProfileClick: () => void;
- onCityCardsClick: () => void;
- onMagicItineraryClick: () => void;
- onPostCardsClick: () => void;
- onOffersClick: () => void;
- onCreateItineraryClick: () => void;
- onContactUsClick?: () => void;
- onEsimsClick?: () => void;
- onHotelDiscountsClick?: () => void;
- currentPage: string;
- user?: { email: string; name: string; } | null;
-}
-
-// Enhanced activity type with more details
-interface Activity {
- time: string;
- activity: string;
- location: string;
- address: string;
- image: string;
- categories: string[];
- description: string[];
- isFavorite?: boolean;
-}
-
-export function ItineraryViewPage({
- onBackClick,
- onHomeClick,
- onMelbourneClick,
- onPassesClick,
- onCheckoutClick,
- onSignInClick,
- onSignOutClick,
- onAttractionsClick,
- onBlogsClick,
- onHowItWorksClick,
- onFAQClick,
- onPrivacyPolicyClick,
- onAboutUsClick,
- onProfileClick,
- onCityCardsClick,
- onMagicItineraryClick,
- onPostCardsClick,
- onOffersClick,
- onCreateItineraryClick,
- onContactUsClick,
- onEsimsClick,
- onHotelDiscountsClick,
- currentPage,
- user
-}: ItineraryViewPageProps) {
- const [viewMode, setViewMode] = useState<'daily' | 'summary'>('daily');
- const [favorites, setFavorites] = useState
>(new Set());
-
- const toggleFavorite = (activityKey: string) => {
- setFavorites(prev => {
- const newSet = new Set(prev);
- if (newSet.has(activityKey)) {
- newSet.delete(activityKey);
- } else {
- newSet.add(activityKey);
- }
- return newSet;
- });
- };
-
- // Enhanced itinerary data with images, addresses, and detailed info
- const generatedItinerary = {
- destination: {
- name: 'Melbourne',
- country: 'Australia',
- weather: '18°C, Sunny',
- image: 'https://images.unsplash.com/photo-1514395462725-fb4566210144?w=400&h=300&fit=crop'
- },
- totalDays: 3,
- estimatedCost: '$450 AUD',
- includedActivities: 18,
- dailyPlans: [
- {
- day: 1,
- title: "City Center & Culture",
- activities: [
- {
- time: '8:00 am',
- activity: 'The Langham Melbourne',
- location: 'The Langham Melbourne',
- address: '1 Southgate Avenue, Southbank VIC 3006',
- image: 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=800&h=600&fit=crop',
- categories: ['Accommodation', 'Luxury'],
- description: [
- 'Check-in at luxury riverside hotel',
- 'Enjoy complimentary breakfast',
- 'Relax at the spa facilities',
- 'Explore the surrounding Southbank area'
- ]
- },
- {
- time: '10:00 am',
- activity: 'Federation Square',
- location: 'Federation Square',
- address: 'Corner Swanston & Flinders Streets, Melbourne VIC 3000',
- image: 'https://images.unsplash.com/photo-1514395462725-fb4566210144?w=800&h=600&fit=crop',
- categories: ['Culture', 'Landmark'],
- description: [
- 'Explore Melbourne\'s cultural precinct',
- 'Visit the ACMI museum',
- 'Enjoy street performances',
- 'Take photos at iconic locations'
- ]
- },
- {
- time: '12:00 pm',
- activity: 'Degrave Street Café',
- location: 'Degrave Street Espresso Bar',
- address: '23-25 Degraves Street, Melbourne VIC 3000',
- image: 'https://images.unsplash.com/photo-1554118811-1e0d58224f24?w=800&h=600&fit=crop',
- categories: ['Food', 'Drinks', 'Culture'],
- description: [
- 'Coffee at Pellegrini\'s Espresso Bar (iconic old-school cafe)',
- 'Try the famous jam doughnuts',
- 'Shop for fresh produce in the Deli Hall',
- 'Pick up unique souvenirs in the General Merchandise section'
- ]
- },
- {
- time: '2:00 pm',
- activity: 'Royal Botanic Gardens',
- location: 'Royal Botanic Gardens Victoria',
- address: 'Birdwood Avenue, South Yarra VIC 3141',
- image: 'https://images.unsplash.com/photo-1585320806297-9794b3e4eeae?w=800&h=600&fit=crop',
- categories: ['Nature', 'Culture'],
- description: [
- 'Stroll through stunning landscaped gardens',
- 'Visit the Australian Forest Walk',
- 'Relax by the Ornamental Lake',
- 'Join a free guided walking tour'
- ]
- },
- {
- time: '4:00 pm',
- activity: 'National Gallery of Victoria',
- location: 'NGV International',
- address: '180 St Kilda Road, Melbourne VIC 3006',
- image: 'https://images.unsplash.com/photo-1564399577149-749794d74eee?w=800&h=600&fit=crop',
- categories: ['Culture', 'Art'],
- description: [
- 'Explore Australia\'s oldest art museum',
- 'View international and Australian art collections',
- 'Visit the stunning water wall entrance',
- 'Browse the NGV design store'
- ]
- },
- {
- time: '7:00 pm',
- activity: 'Dinner at Chin Chin',
- location: 'Chin Chin Restaurant',
- address: '125 Flinders Lane, Melbourne VIC 3000',
- image: 'https://images.unsplash.com/photo-1552566626-52f8b828add9?w=800&h=600&fit=crop',
- categories: ['Food', 'Drinks'],
- description: [
- 'Experience modern Thai cuisine',
- 'Try signature dishes like the Betel Leaf',
- 'Enjoy the vibrant atmosphere',
- 'Book ahead or walk-in for bar seating'
- ]
- }
- ]
- },
- {
- day: 2,
- title: "Markets & Neighborhoods",
- activities: [
- {
- time: '8:00 am',
- activity: 'Queen Victoria Market',
- location: 'Queen Victoria Market',
- address: 'Queen Street, Melbourne VIC 3000',
- image: 'https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&h=600&fit=crop',
- categories: ['Food', 'Shopping', 'Culture'],
- description: [
- 'Explore Melbourne\'s historic market (since 1878)',
- 'Sample fresh local produce',
- 'Shop for artisan goods and souvenirs',
- 'Grab breakfast at the Deli Hall'
- ]
- },
- {
- time: '10:30 am',
- activity: 'Fitzroy Street Art Tour',
- location: 'Fitzroy Arts Precinct',
- address: 'Gertrude Street, Fitzroy VIC 3065',
- image: 'https://images.unsplash.com/photo-1499781350541-7783f6c6a0c8?w=800&h=600&fit=crop',
- categories: ['Culture', 'Art'],
- description: [
- 'Walk through famous street art laneways',
- 'Discover works by renowned artists',
- 'Visit independent galleries',
- 'Explore vintage and record stores'
- ]
- },
- {
- time: '12:30 pm',
- activity: 'Brunswick Street Lunch',
- location: 'Brunswick Street Precinct',
- address: 'Brunswick Street, Fitzroy VIC 3065',
- image: 'https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=800&h=600&fit=crop',
- categories: ['Food', 'Drinks'],
- description: [
- 'Choose from diverse dining options',
- 'Try local cafes and restaurants',
- 'Explore bookshops and boutiques',
- 'Enjoy the vibrant neighborhood atmosphere'
- ]
- },
- {
- time: '2:30 pm',
- activity: 'Carlton Gardens',
- location: 'Carlton Gardens',
- address: 'Carlton Gardens, Carlton VIC 3053',
- image: 'https://images.unsplash.com/photo-1519331379826-f10be5486c6f?w=800&h=600&fit=crop',
- categories: ['Nature', 'Culture', 'Landmark'],
- description: [
- 'Visit the UNESCO World Heritage site',
- 'See the Royal Exhibition Building',
- 'Stroll through Victorian-era gardens',
- 'Relax by the ornamental fountains'
- ]
- },
- {
- time: '4:00 pm',
- activity: 'Melbourne Museum',
- location: 'Melbourne Museum',
- address: '11 Nicholson Street, Carlton VIC 3053',
- image: 'https://images.unsplash.com/photo-1566127992631-137a642a90f4?w=800&h=600&fit=crop',
- categories: ['Culture', 'Museum'],
- description: [
- 'Explore natural and cultural history',
- 'Visit the Bunjilaka Aboriginal Centre',
- 'See the Forest Gallery living ecosystem',
- 'Discover Melbourne\'s story exhibition'
- ]
- },
- {
- time: '7:00 pm',
- activity: 'Rooftop Bar Experience',
- location: 'Naked for Satan',
- address: '285 Brunswick Street, Fitzroy VIC 3065',
- image: 'https://images.unsplash.com/photo-1514933651103-005eec06c04b?w=800&h=600&fit=crop',
- categories: ['Drinks', 'Food'],
- description: [
- 'Enjoy sunset views from the rooftop',
- 'Try Spanish-style pintxos',
- 'Sample craft cocktails and local beers',
- 'Experience Melbourne\'s bar culture'
- ]
- }
- ]
- },
- {
- day: 3,
- title: "Coastal Adventure",
- activities: [
- {
- time: '8:00 am',
- activity: 'St. Kilda Beach',
- location: 'St. Kilda Beach',
- address: 'Jacka Boulevard, St Kilda VIC 3182',
- image: 'https://images.unsplash.com/photo-1505142468610-359e7d316be0?w=800&h=600&fit=crop',
- categories: ['Nature', 'Beach'],
- description: [
- 'Morning walk along the iconic beach',
- 'Visit the historic St Kilda Pier',
- 'See the little penguins at sunset',
- 'Explore the Sunday Esplanade Market (weekends)'
- ]
- },
- {
- time: '10:00 am',
- activity: 'Acland Street Cafes',
- location: 'Acland Street',
- address: 'Acland Street, St Kilda VIC 3182',
- image: 'https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=800&h=600&fit=crop',
- categories: ['Food', 'Drinks'],
- description: [
- 'Brunch at famous cake shops',
- 'Try traditional European pastries',
- 'Visit Lentil as Anything (pay-as-you-feel)',
- 'Browse vintage shops and bookstores'
- ]
- },
- {
- time: '12:00 pm',
- activity: 'Luna Park Melbourne',
- location: 'Luna Park Melbourne',
- address: '18 Lower Esplanade, St Kilda VIC 3182',
- image: 'https://images.unsplash.com/photo-1513026705753-bc3fffca8bf4?w=800&h=600&fit=crop',
- categories: ['Entertainment', 'Landmark'],
- description: [
- 'Visit Melbourne\'s iconic amusement park',
- 'Ride the historic Scenic Railway (1912)',
- 'Take photos at Mr Moon entrance',
- 'Enjoy carnival games and rides'
- ]
- },
- {
- time: '2:00 pm',
- activity: 'Brighton Beach Boxes',
- location: 'Brighton Beach',
- address: 'Esplanade, Brighton VIC 3186',
- image: 'https://images.unsplash.com/photo-1520208422220-d12a3c588e6c?w=800&h=600&fit=crop',
- categories: ['Culture', 'Landmark'],
- description: [
- 'Photograph the famous colorful bathing boxes',
- 'Walk along the pristine beach',
- 'Learn about the heritage structures',
- 'Relax in the beachside atmosphere'
- ]
- },
- {
- time: '4:00 pm',
- activity: 'Southbank Promenade',
- location: 'Southbank',
- address: 'Southbank Promenade, Southbank VIC 3006',
- image: 'https://images.unsplash.com/photo-1559827260-dc66d52bef19?w=800&h=600&fit=crop',
- categories: ['Culture', 'Shopping'],
- description: [
- 'Stroll along the Yarra River',
- 'Visit arts and craft markets',
- 'Explore restaurants and cafes',
- 'Enjoy river views and street performers'
- ]
- },
- {
- time: '7:00 pm',
- activity: 'Farewell Dinner at Vue de Monde',
- location: 'Vue de Monde',
- address: 'Level 55, Rialto, 525 Collins Street, Melbourne VIC 3000',
- image: 'https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=800&h=600&fit=crop',
- categories: ['Food', 'Drinks', 'Luxury'],
- description: [
- 'Experience fine dining at 55th floor',
- 'Enjoy panoramic Melbourne views',
- 'Taste modern Australian cuisine',
- 'Celebrate the end of your journey'
- ]
- }
- ]
- }
- ]
- };
-
- return (
-
- {/* Navbar */}
-
{}}
- onSignInClick={onSignInClick}
- onPassesClick={onPassesClick}
- onCheckoutClick={onCheckoutClick}
- onHomeClick={onHomeClick}
- onMelbourneClick={onMelbourneClick}
- onAttractionsClick={onAttractionsClick}
- onBlogsClick={onBlogsClick}
- onHowItWorksClick={onHowItWorksClick}
- onFAQClick={onFAQClick}
- onPrivacyPolicyClick={onPrivacyPolicyClick}
- onAboutUsClick={onAboutUsClick}
- onProfileClick={onProfileClick}
- onCityCardsClick={onCityCardsClick}
- onMagicItineraryClick={onMagicItineraryClick}
- onPostCardsClick={onPostCardsClick}
- onOffersClick={onOffersClick}
- currentPage="itinerary-view"
- isUserSignedIn={!!user}
- user={user}
- />
-
- {/* Header Section */}
-
-
-
-
-
- Back to Magic Itinerary
-
-
-
-
-
- Your {' '}
- Magic Itinerary
-
-
-
-
- Here's your personalized {generatedItinerary.totalDays}-day adventure in {generatedItinerary.destination.name}!
-
-
-
-
-
- {/* Main Content */}
-
-
-
- {/* View Toggle */}
-
-
- setViewMode('daily')}
- className="rounded-md font-poppins font-medium"
- >
- Daily View
-
- setViewMode('summary')}
- className="rounded-md font-poppins font-medium"
- >
- Summary
-
-
-
-
- {/* Itinerary Overview */}
-
-
-
-
-
{generatedItinerary.totalDays}
-
Days
-
-
-
{generatedItinerary.includedActivities}
-
Activities
-
-
-
{generatedItinerary.estimatedCost}
-
Estimated Cost
-
-
-
-
-
- {/* Daily Plans - Enhanced View */}
- {viewMode === 'daily' && (
-
- {generatedItinerary.dailyPlans.map((day, dayIndex) => (
-
- {/* Location Header with Weather - Only show for first day or when location changes */}
- {(dayIndex === 0 ||
- (dayIndex > 0 &&
- generatedItinerary.dailyPlans[dayIndex - 1] &&
- (generatedItinerary.dailyPlans[dayIndex - 1] as any).destination?.name !== generatedItinerary.destination.name)) && (
-
-
-
-
- {generatedItinerary.destination.name}, {generatedItinerary.destination.country}
-
-
{generatedItinerary.destination.weather}
-
-
-
-
-
-
- )}
-
- {/* Day Header */}
-
-
- {day.day}
-
-
-
Day {day.day}
-
{day.title}
-
-
-
- {/* GMT Label */}
-
-
- {/* Activity Cards - Desktop Grid Layout */}
-
- {day.activities.map((activity, actIndex) => {
- const activityKey = `day${day.day}-act${actIndex}`;
- const isFavorite = favorites.has(activityKey);
-
- return (
-
- {/* Time Column */}
-
-
- {/* Activity Card */}
-
-
-
- {/* Hero Image with Overlay Buttons */}
-
-
-
- {/* Favorite Heart Button - Top Right */}
-
- toggleFavorite(activityKey)}
- >
-
-
-
-
- {/* Get Directions Button - Bottom Left */}
-
-
-
- Get Directions
-
-
-
-
- {/* Content Section */}
-
- {/* Location Name & Address */}
-
-
- {activity.activity}
-
-
-
- {activity.address}
-
-
-
- {/* Category Badges */}
-
- {activity.categories.map((category, catIndex) => (
-
- {category}
-
- ))}
-
-
- {/* Activity Details - Bullet Points */}
-
- {activity.description.map((detail, detailIndex) => (
-
- •
- {detail}
-
- ))}
-
-
-
-
-
-
- );
- })}
-
-
- ))}
-
- )}
-
- {/* Summary View */}
- {viewMode === 'summary' && (
-
- Trip Summary
-
-
- {generatedItinerary.dailyPlans.map((day, index) => (
-
-
-
-
Day {day.day}: {day.title}
-
-
- {day.activities.map((activity, actIndex) => (
-
-
-
-
{activity.activity}
-
- {activity.time}
- •
- {activity.location}
-
-
-
- ))}
-
-
- ))}
-
-
-
- )}
-
- {/* Action Buttons */}
-
-
-
- Create Another
-
-
-
- Save Itinerary
-
-
-
- Share Trip
-
-
-
-
-
-
- {/* Footer */}
-
-
- );
-}
\ No newline at end of file
diff --git a/src/components/LandingMagicItinerary.tsx b/src/components/LandingMagicItinerary.tsx
index cb5c0f5..49174f1 100644
--- a/src/components/LandingMagicItinerary.tsx
+++ b/src/components/LandingMagicItinerary.tsx
@@ -31,7 +31,7 @@ export function LandingMagicItinerary() {
};
return (
-
+
{/* Dynamic Background */}
{/* Background Image as fallback */}
@@ -112,7 +112,7 @@ export function LandingMagicItinerary() {
>
-
AI-Powered Magic Itinerary
+
Magic Itinerary
Plan Your {' '}
-
+
Dream Journey
@@ -250,7 +250,7 @@ export function LandingMagicItinerary() {
>
@@ -258,11 +258,11 @@ export function LandingMagicItinerary() {
-
+ {/*
Free to use • No credit card required
-
+ */}
diff --git a/src/components/LandingUpcomingCities.tsx b/src/components/LandingUpcomingCities.tsx
index 2d724a0..c5c70a1 100644
--- a/src/components/LandingUpcomingCities.tsx
+++ b/src/components/LandingUpcomingCities.tsx
@@ -4,6 +4,7 @@ import { Button } from './ui/button';
import { useRef, useState, useEffect } from 'react';
import Image592Traced from '../imports/Image592Traced-5025-559';
import { useGetUpcomingCitiesQuery } from '../Redux/services/cities.service';
+import LoadingSpinner from './LoadingSpinner';
// const upcomingCities = [
// {
@@ -113,8 +114,10 @@ export function LandingUpcomingCities() {
const { data, isLoading } = useGetUpcomingCitiesQuery(listType)
- if(isLoading){
- return
Loading...
+ if (isLoading) {
+ return (
+
+ );
}
const handleMouseDown = (e: React.MouseEvent) => {
diff --git a/src/components/LandingVarietyOfAdventures.tsx b/src/components/LandingVarietyOfAdventures.tsx
index 3e7ab94..7d0dc42 100644
--- a/src/components/LandingVarietyOfAdventures.tsx
+++ b/src/components/LandingVarietyOfAdventures.tsx
@@ -150,11 +150,11 @@ export function LandingVarietyOfAdventures() {
const extendedCategories = [...melbourneCategories, ...melbourneCategories, ...melbourneCategories];
return (
-
+
{/* Header */}
-
-
+ Experience{' '}
for Every Traveller
-
- From iconic laneways and world-class coffee to stunning gardens and vibrant markets,
+ From iconic laneways and world-class coffee to stunning gardens and vibrant markets,
discover Melbourne's unique character through curated experiences that showcase the city's soul.
@@ -180,7 +180,7 @@ export function LandingVarietyOfAdventures() {
{/* Carousel Container - Full Width */}
{/* Scrolling Track */}
-
-
+
{/* Bottom Content Card */}
-
-
+
{/* Icon */}
-
-
+
{/* Attraction Info */}
@@ -332,19 +332,19 @@ export function LandingVarietyOfAdventures() {
{/* Gradient Fade Edges */}
-
-
+
+
{/* CTA Button */}
-
- {
+ return (
+
+ )
+}
+
+export default LoadingSpinner
\ No newline at end of file
diff --git a/src/components/LoginModal.tsx b/src/components/LoginModal.tsx
index b70ce28..9abd21b 100644
--- a/src/components/LoginModal.tsx
+++ b/src/components/LoginModal.tsx
@@ -1,40 +1,51 @@
+// LoginModal.tsx
import { useState, useEffect } from 'react';
import { motion, AnimatePresence } from 'motion/react';
import { X } from 'lucide-react';
import { Button } from './ui/button';
import { Input } from './ui/input';
import { Label } from './ui/label';
-import { useNavigate } from 'react-router-dom';
import { useAuth } from '../context/AuthContext';
+import { useLoginMutation, useVerifyOtpMutation } from '../Redux/services/auth.service';
+import { toast } from 'sonner';
+import { useNavigate } from 'react-router-dom';
interface LoginModalProps {
isOpen: boolean;
onClose: () => void;
- // onLoginSuccess: (userData: { email: string; name: string }) => void;
}
-export function LoginModal({ isOpen, onClose, }: LoginModalProps) {
+export function LoginModal({ isOpen, onClose }: LoginModalProps) {
const [step, setStep] = useState<'email' | 'otp'>('email');
const [email, setEmail] = useState('');
const [otp, setOtp] = useState(['', '', '', '', '', '']);
const [countdown, setCountdown] = useState(0);
- const [isLoading, setIsLoading] = useState(false);
const [helperText, setHelperText] = useState('');
+ const [error, setError] = useState('');
- const { login } = useAuth(); // from AuthContext
+ const { login } = useAuth();
+ const navigate = useNavigate()
- // Reset modal state when closed
+ const [sendOtp, { isLoading: isSendingOtp }] = useLoginMutation();
+ const [verifyOtp, { isLoading: isVerifying }] = useVerifyOtpMutation();
+
+ // Reset modal when closed
useEffect(() => {
if (!isOpen) {
- setStep('email');
- setEmail('');
- setOtp(['', '', '', '', '', '']);
- setCountdown(0);
- setHelperText('');
+ resetModal();
}
}, [isOpen]);
- // Countdown timer for OTP resend
+ const resetModal = () => {
+ setStep('email');
+ setEmail('');
+ setOtp(['', '', '', '', '', '']);
+ setCountdown(0);
+ setHelperText('');
+ setError('');
+ };
+
+ // Countdown timer
useEffect(() => {
if (countdown > 0) {
const timer = setTimeout(() => setCountdown(countdown - 1), 1000);
@@ -42,67 +53,122 @@ export function LoginModal({ isOpen, onClose, }: LoginModalProps) {
}
}, [countdown]);
- const handleSendOTP = async () => {
- if (!email || !email.includes('@')) {
- setHelperText('Please enter a valid email address');
- return;
+ // ==================== PASTE OTP FEATURE ====================
+ const handlePaste = (e: React.ClipboardEvent) => {
+ e.preventDefault();
+ const pastedData = e.clipboardData.getData('text').trim();
+
+ // Extract only digits
+ const digits = pastedData.replace(/\D/g, '').slice(0, 6);
+
+ if (digits.length === 0) return;
+
+ const newOtp = [...otp];
+
+ // Fill the OTP array with pasted digits
+ for (let i = 0; i < digits.length; i++) {
+ newOtp[i] = digits[i];
}
- setIsLoading(true);
- setHelperText('');
+ setOtp(newOtp);
- // Simulate API call
- setTimeout(() => {
- setStep('otp');
- setCountdown(120); // 2 minutes countdown
- setIsLoading(false);
- setHelperText('OTP sent successfully');
- }, 1500);
+ // Auto-focus the next empty field or the last one
+ const nextIndex = digits.length < 6 ? digits.length : 5;
+ const nextInput = document.querySelector(
+ `input[data-otp-index="${nextIndex}"]`
+ ) as HTMLInputElement;
+
+ nextInput?.focus();
};
const handleOTPChange = (index: number, value: string) => {
- if (value.length > 1) return; // Only allow single digit
+ if (value.length > 1) return;
const newOtp = [...otp];
newOtp[index] = value;
setOtp(newOtp);
- // Auto-focus next input
if (value && index < 5) {
- const nextInput = document.querySelector(`input[data-otp-index="${index + 1}"]`) as HTMLInputElement;
+ const nextInput = document.querySelector(
+ `input[data-otp-index="${index + 1}"]`
+ ) as HTMLInputElement;
nextInput?.focus();
}
};
const handleOTPKeyDown = (index: number, e: React.KeyboardEvent) => {
- if (e.key === 'Backspace' && !otp[index] && index > 0) {
- const prevInput = document.querySelector(`input[data-otp-index="${index - 1}"]`) as HTMLInputElement;
+ if (e.key === "Backspace" && !otp[index] && index > 0) {
+ const prevInput = document.querySelector(
+ `input[data-otp-index="${index - 1}"]`
+ ) as HTMLInputElement;
prevInput?.focus();
}
+
+ // ✅ Trigger verify on Enter if all 6 digits are filled
+ if (e.key === "Enter") {
+ const otpString = otp.join("");
+ if (otpString.length === 6) {
+ handleVerifyLogin();
+ }
+ }
+ };
+
+ // Rest of your functions remain the same
+ const handleSendOTP = async () => {
+ if (!email || !email.includes('@')) {
+ setError('Please enter a valid email address');
+ return;
+ }
+
+ setError('');
+ setHelperText('');
+
+ try {
+ await sendOtp({ emailAddress: email }).unwrap();
+ setStep('otp');
+ setCountdown(120);
+ setHelperText('OTP sent successfully to your email');
+ } catch (err: any) {
+ setError(err?.data?.message || 'Failed to send OTP. Please try again.');
+ }
};
const handleVerifyLogin = async () => {
const otpString = otp.join('');
if (otpString.length !== 6) {
- setHelperText('Please enter complete OTP');
+ setError('Please enter complete 6-digit OTP');
return;
}
- setIsLoading(true);
- setHelperText('');
+ setError('');
- // Simulate API call
- setTimeout(() => {
- // Generate name from email for demo
- const emailParts = email.split('@')[0];
- const name = emailParts.charAt(0).toUpperCase() + emailParts.slice(1);
+ try {
+ const response = await verifyOtp({
+ emailAddress: email,
+ otp: otpString
+ }).unwrap();
- login({ email, name })
+
+ if (!response?.userExists) {
+ localStorage.setItem("userEmail",email)
+ navigate("/register")
+ } else {
+ const userData = {
+ userId: response?.user?.id,
+ email: response?.email || email,
+ name: response?.name || email.split('@')[0].charAt(0).toUpperCase() + email.split('@')[0].slice(1),
+ accessToken: response?.accessToken,
+ };
- setIsLoading(false);
- // navigate("/melbourne")
+ login(userData);
+ toast.success("User Logged in successfully")
+ navigate("/passes")
+ }
onClose();
- }, 1500);
+ } catch (err: any) {
+ setError(err?.data?.message || 'Invalid OTP. Please try again.');
+ toast.error(err?.data?.message)
+ }
};
const formatCountdown = (seconds: number) => {
@@ -112,177 +178,143 @@ export function LoginModal({ isOpen, onClose, }: LoginModalProps) {
};
return (
-
- {isOpen && (
- <>
- {/* Backdrop */}
-
+ <>
+
+ {isOpen && (
+ <>
+
- {/* Modal */}
-
-
- {/* Header */}
-
-
-
-
+
+
+
+
+
+
-
- Login
-
-
- Enter your email Id and verify with OTP sent on it.
-
-
+
+ Login
+
+
+ Enter your email and verify with OTP
+
+
- {/* Content */}
-
- {step === 'email' ? (
-
- {/* Email Input */}
-
-
- Email
-
-
setEmail(e.target.value)}
- className="font-poppins text-base h-12 bg-gray-50 border-0 rounded-xl placeholder:text-gray-400"
- onKeyDown={(e) => e.key === 'Enter' && handleSendOTP()}
- />
- {helperText && (
-
- {helperText}
-
- )}
-
-
- {/* Send OTP Button */}
-
- {isLoading ? (
-
- ) : (
- <>
- Send OTP
-
-
-
- >
- )}
-
-
- ) : (
-
- {/* Email Display */}
-
-
- Email
-
-
- {email}
-
- {helperText && (
-
- {helperText}
-
- )}
-
-
- {/* OTP Input */}
-
-
- Enter OTP
-
-
- {otp.map((digit, index) => (
-
handleOTPChange(index, e.target.value.replace(/\D/g, ''))}
- onKeyDown={(e) => handleOTPKeyDown(index, e)}
- data-otp-index={index}
- className="w-12 h-12 text-center font-poppins font-semibold text-lg bg-gray-300 border-0 rounded-xl focus:bg-white focus:ring-2 focus:ring-primary focus:outline-none transition-colors"
- />
- ))}
+
+ {step === 'email' ? (
+ // ... Email step (unchanged)
+
+
+
+ Email Address
+
+
setEmail(e.target.value)}
+ onKeyDown={(e) => e.key === 'Enter' && handleSendOTP()}
+ className="font-poppins text-base h-12 bg-gray-50 border-0 rounded-xl placeholder:text-gray-400"
+ />
+ {error &&
{error}
}
+ {helperText &&
{helperText}
}
- {/* Countdown */}
- {countdown > 0 && (
-
- {formatCountdown(countdown)}
-
- )}
-
-
- {/* Verify Button */}
-
- {isLoading ? (
-
- ) : (
- <>
- Verify and Login
-
-
-
- >
- )}
-
-
- {/* Resend OTP */}
- {countdown === 0 && (
-
{
- setStep('email');
- setOtp(['', '', '', '', '', '']);
- }}
- className="w-full font-poppins text-sm text-gray-600 hover:text-gray-800 transition-colors"
+
- Didn't receive OTP? Send again
-
- )}
-
- )}
+ {isSendingOtp ? 'Sending OTP...' : 'Send OTP'}
+
+
+
+ ) : (
+
+ {/* Email Display */}
+
+
+ {/* OTP Inputs with Paste Support */}
+
+
+ Enter OTP
+
+
+ {otp.map((digit, index) => (
+ handleOTPChange(index, e.target.value.replace(/\D/g, ''))}
+ onKeyDown={(e) => handleOTPKeyDown(index, e)}
+ onPaste={handlePaste} // ← Paste support added here
+ data-otp-index={index}
+ className="w-12 h-12 text-center font-poppins font-semibold text-lg bg-gray-300 border-0 rounded-xl focus:bg-white focus:ring-2 focus:ring-gray-800 focus:outline-none transition-all"
+ />
+ ))}
+
+
+ {countdown > 0 && (
+
+ Resend OTP in {formatCountdown(countdown)}
+
+ )}
+
+
+ {error &&
{error}
}
+
+
+ {isVerifying ? 'Verifying...' : 'Verify & Login'}
+
+
+ {countdown === 0 && (
+
{
+ setStep('email');
+ setOtp(['', '', '', '', '', '']);
+ setHelperText("")
+ setError('');
+ }}
+ className="w-full text-sm text-gray-600 hover:text-gray-800 font-poppins cursor-pointer"
+ >
+ Didn't receive OTP?
+ Send again
+ {/* Send again */}
+
+ )}
+
+ )}
+
-
-
- >
- )}
-
+
+ >
+ )
+ }
+
+ >
);
}
\ No newline at end of file
diff --git a/src/components/MagicItineraryPage.tsx b/src/components/MagicItineraryPage.tsx
deleted file mode 100644
index 45db6da..0000000
--- a/src/components/MagicItineraryPage.tsx
+++ /dev/null
@@ -1,368 +0,0 @@
-import React from 'react';
-import { motion } from 'motion/react';
-import { ArrowLeft, Sparkles, MapPin, Clock, Users, Calendar, Star, Zap, Heart, Camera } from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent } from './ui/card';
-import { Badge } from './ui/badge';
-import Navbar from './Navbar';
-// import SubNavbar from './SubNavbar';
-import { Footer } from './Footer';
-import { MobileAppSection } from './MobileAppSection';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
-import { HowItWorks } from './HowItWorks';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { Layout } from '../Layout';
-
-interface User {
- email: string;
- name: string;
-}
-
-interface MagicItineraryPageProps {
- onBackClick: () => void;
- onHomeClick: () => void;
- onMelbourneClick: () => void;
- onPassesClick: () => void;
- onCheckoutClick: () => void;
- onSignInClick: () => void;
- onSignOutClick?: () => void;
- onAttractionsClick: () => void;
- onBlogsClick: () => void;
- onHowItWorksClick: () => void;
- onFAQClick: () => void;
- onPrivacyPolicyClick: () => void;
- onAboutUsClick: () => void;
- onProfileClick: () => void;
- onCityCardsClick: () => void;
- onMagicItineraryClick: () => void;
- onPostCardsClick: () => void;
- onOffersClick: () => void;
- onContactUsClick?: () => void;
- onEsimsClick?: () => void;
- onHotelDiscountsClick?: () => void;
- onCreateItineraryClick: () => void;
- onViewItineraryClick: () => void;
- currentPage: string;
- user: User | null;
-}
-
-export function MagicItineraryPage({
- onBackClick,
- onHomeClick,
- onMelbourneClick,
- onPassesClick,
- onCheckoutClick,
- onSignInClick,
- onSignOutClick,
- onAttractionsClick,
- onBlogsClick,
- onHowItWorksClick,
- onFAQClick,
- onPrivacyPolicyClick,
- onAboutUsClick,
- onProfileClick,
- onCityCardsClick,
- onMagicItineraryClick,
- onPostCardsClick,
- onOffersClick,
- onContactUsClick,
- onEsimsClick,
- onHotelDiscountsClick,
- onCreateItineraryClick,
- onViewItineraryClick,
- currentPage,
- user
-}: MagicItineraryPageProps) {
- return (
-
- {/* Navbar */}
-
-
- {/* Sub Navbar */}
- {/* */}
-
- {/* Hero Section */}
-
- {/* Background gradient */}
-
-
-
-
-
- Plan Your Perfect {' '}
-
- Melbourne Adventure
-
-
-
- Let our AI create a personalized itinerary just for you. Answer a few questions about your preferences,
- and we'll craft the perfect Melbourne experience tailored to your interests.
-
-
- Create My Magic Itinerary
-
-
-
-
- {/* Decorative elements */}
-
-
-
-
- {/* How It Works Section */}
-
-
- {/* Features Section */}
-
-
-
- {/* Left side - Features */}
-
-
- Smart Features for
- Smart Travelers
-
-
-
- {[
- {
- icon:
,
- title: 'AI-Powered Recommendations',
- description: 'Our advanced AI analyzes your preferences to suggest the perfect experiences'
- },
- {
- icon:
,
- title: 'Optimized Scheduling',
- description: 'Smart timing that considers opening hours, travel time, and crowd patterns'
- },
- {
- icon:
,
- title: 'Location-Based Planning',
- description: 'Efficiently planned routes that minimize travel time and maximize experiences'
- },
- {
- icon:
,
- title: 'Instagram-Worthy Spots',
- description: 'Discover hidden gems and perfect photo opportunities along your journey'
- }
- ].map((feature, index) => (
-
-
- {feature.icon}
-
-
-
{feature.title}
-
{feature.description}
-
-
- ))}
-
-
-
- {/* Right side - Visual */}
-
-
-
Sample Itinerary
-
- {[
- { time: '9:00 AM', activity: 'Coffee at Degraves Street', duration: '30 min' },
- { time: '10:00 AM', activity: 'Royal Botanic Gardens', duration: '2 hours' },
- { time: '1:00 PM', activity: 'Lunch at Queen Victoria Market', duration: '1 hour' },
- { time: '3:00 PM', activity: 'Street Art Tour in Hosier Lane', duration: '1.5 hours' },
- { time: '6:00 PM', activity: 'Sunset at Eureka Skydeck', duration: '1 hour' }
- ].map((item, index) => (
-
-
- {item.time}
-
-
-
{item.activity}
-
{item.duration}
-
-
- ))}
-
-
-
-
-
-
-
- {/* Benefits Section */}
-
-
-
- Why Use Magic Itinerary?
-
- Save time, discover more, and create unforgettable memories with personalized planning
-
-
-
-
- {[
- {
- icon:
,
- title: 'Save Planning Time',
- description: 'Skip hours of research. Get a complete itinerary in under 5 minutes.',
- stat: '90% faster than manual planning'
- },
- {
- icon:
,
- title: 'Discover Hidden Gems',
- description: 'Find unique experiences and local favorites you might have missed.',
- stat: '50+ curated hidden spots'
- },
- {
- icon:
,
- title: 'Personalized Experience',
- description: 'Every itinerary is unique, tailored specifically to your preferences.',
- stat: '1000+ possible combinations'
- }
- ].map((benefit, index) => (
-
-
-
-
- {benefit.icon}
-
- {benefit.title}
- {benefit.description}
-
- {benefit.stat}
-
-
-
-
- ))}
-
-
-
-
- {/* What's Included Section */}
-
-
-
- What's Included
-
- Your Magic Itinerary comes with everything you need for an amazing Melbourne experience
-
-
-
-
- {[
- {
- title: 'Detailed Timeline',
- description: 'Hour-by-hour schedule with optimal timing'
- },
- {
- title: 'Transportation Tips',
- description: 'Best routes and transport options between locations'
- },
- {
- title: 'Local Recommendations',
- description: 'Insider tips on food, shopping, and experiences'
- },
- {
- title: 'Budget Planning',
- description: 'Estimated costs and money-saving suggestions'
- },
- {
- title: 'Weather Backup Plans',
- description: 'Alternative indoor activities for rainy days'
- },
- {
- title: 'Photo Opportunities',
- description: 'Best spots and times for Instagram-worthy shots'
- },
- {
- title: 'Cultural Insights',
- description: 'Local history and interesting facts about each location'
- },
- {
- title: 'Real-time Updates',
- description: 'Live information on closures, events, and crowds'
- }
- ].map((item, index) => (
-
-
-
- {item.title}
- {item.description}
-
-
-
- ))}
-
-
-
-
- {/* CTA Section */}
-
-
- {/* Mobile App Section */}
-
-
- {/* Customer Reviews */}
-
-
-
-
-
- );
-}
\ No newline at end of file
diff --git a/src/components/MelbourneAttractions.tsx b/src/components/MelbourneAttractions.tsx
index 00bd3a2..f531a81 100644
--- a/src/components/MelbourneAttractions.tsx
+++ b/src/components/MelbourneAttractions.tsx
@@ -2,269 +2,168 @@ import { useState } from 'react';
import { ChevronLeft, ChevronRight, Clock, Users, Star, Zap, CheckCircle, MapPin, Volume2, Camera, Coffee, Palette, Eye } from 'lucide-react';
import { ImageWithFallback } from './figma/ImageWithFallback';
import { motion } from 'motion/react';
-
-const melbourneAttractions = [
- {
- id: 1,
- name: "Royal Botanic Gardens",
- city: "Melbourne",
- country: "Australia",
- image: "https://images.unsplash.com/photo-1721272962395-a848331ce92d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjByb3lhbCUyMGJvdGFuaWMlMjBnYXJkZW5zfGVufDF8fHx8MTc1NzMzNzc4OXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
- rating: 4.8,
- reviews: "15,600+",
- category: "Gardens",
- originalPrice: "Free",
- includedValue: "$25",
- perks: [
- { icon: Volume2, label: "Audio garden tour", color: "text-green-600" },
- { icon: MapPin, label: "Garden maps", color: "text-blue-600" },
- { icon: Camera, label: "Photo spots guide", color: "text-purple-600" }
- ]
- },
- {
- id: 2,
- name: "Federation Square",
- city: "Melbourne",
- country: "Australia",
- image: "https://images.unsplash.com/photo-1639655001512-e4b58d4874b8?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjBmZWRlcmF0aW9uJTIwc3F1YXJlfGVufDF8fHx8MTc1NzMzNzc5Mnww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
- rating: 4.6,
- reviews: "22,400+",
- category: "Landmarks",
- originalPrice: "Free",
- includedValue: "$35",
- perks: [
- { icon: Volume2, label: "Cultural tours", color: "text-orange-600" },
- { icon: Eye, label: "Gallery access", color: "text-blue-600" },
- { icon: Users, label: "Event access", color: "text-purple-600" }
- ]
- },
- {
- id: 3,
- name: "Queen Victoria Market",
- city: "Melbourne",
- country: "Australia",
- image: "https://images.unsplash.com/photo-1676454953709-e0be46f62490?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjBxdWVlbiUyMHZpY3RvcmlhJTIwbWFya2V0fGVufDF8fHx8MTc1NzMzNzc5Nnww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
- rating: 4.7,
- reviews: "18,200+",
- category: "Markets",
- originalPrice: "$45",
- includedValue: "$45",
- perks: [
- { icon: Users, label: "Food tours", color: "text-orange-600" },
- { icon: Coffee, label: "Tastings", color: "text-brown-600" },
- { icon: Volume2, label: "History guide", color: "text-blue-600" }
- ]
- },
- {
- id: 4,
- name: "Eureka Skydeck",
- city: "Melbourne",
- country: "Australia",
- image: "https://images.unsplash.com/photo-1629677713183-29248e1268d7?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjBldXJla2ElMjB0b3dlcnxlbnwxfHx8fDE3NTczMzc4MDB8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
- rating: 4.9,
- reviews: "11,800+",
- category: "Views",
- originalPrice: "$32",
- includedValue: "$32",
- perks: [
- { icon: Zap, label: "Skip-the-line", color: "text-green-600" },
- { icon: Eye, label: "360° views", color: "text-purple-600" },
- { icon: Camera, label: "Photo experiences", color: "text-blue-600" }
- ]
- },
- {
- id: 5,
- name: "St Kilda Beach & Pier",
- city: "Melbourne",
- country: "Australia",
- image: "https://images.unsplash.com/photo-1674732954456-159835c0a46b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjBzdCUyMGtpbGRhJTIwYmVhY2h8ZW58MXx8fHwxNzU3MzM3ODAzfDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
- rating: 4.5,
- reviews: "14,300+",
- category: "Beach",
- originalPrice: "Free",
- includedValue: "$20",
- perks: [
- { icon: Users, label: "Penguin tours", color: "text-blue-600" },
- { icon: MapPin, label: "Beach activities", color: "text-green-600" },
- { icon: Camera, label: "Sunset spots", color: "text-purple-600" }
- ]
- },
- {
- id: 6,
- name: "Melbourne Laneways",
- city: "Melbourne",
- country: "Australia",
- image: "https://images.unsplash.com/photo-1705120624704-0970afc29fea?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjBsYW5ld2F5cyUyMHN0cmVldCUyMGFydHxlbnwxfHx8fDE3NTczMzc4MDd8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
- rating: 4.8,
- reviews: "19,500+",
- category: "Street Art",
- originalPrice: "$55",
- includedValue: "$55",
- perks: [
- { icon: Palette, label: "Art tours", color: "text-pink-600" },
- { icon: Coffee, label: "Café stops", color: "text-brown-600" },
- { icon: Camera, label: "Photo walks", color: "text-purple-600" }
- ]
- },
- {
- id: 7,
- name: "Melbourne Zoo",
- city: "Melbourne",
- country: "Australia",
- image: "https://images.unsplash.com/photo-1681429477985-30dc7b88dd5b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjB6b28lMjBhbmltYWxzfGVufDF8fHx8MTc1NzMzNzgxMHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
- rating: 4.7,
- reviews: "13,900+",
- category: "Wildlife",
- originalPrice: "$42",
- includedValue: "$42",
- perks: [
- { icon: Zap, label: "Skip-the-line", color: "text-green-600" },
- { icon: Users, label: "Animal encounters", color: "text-orange-600" },
- { icon: Volume2, label: "Keeper talks", color: "text-blue-600" }
- ]
- },
- {
- id: 8,
- name: "Royal Exhibition Building",
- city: "Melbourne",
- country: "Australia",
- image: "https://images.unsplash.com/photo-1720523794299-c3b445d71a51?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjByb3lhbCUyMGV4aGliaXRpb24lMjBidWlsZGluZ3xlbnwxfHx8fDE3NTczMzc4MTR8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
- rating: 4.6,
- reviews: "8,700+",
- category: "Heritage",
- originalPrice: "$25",
- includedValue: "$25",
- perks: [
- { icon: Volume2, label: "Audio tours", color: "text-blue-600" },
- { icon: Eye, label: "Exhibitions", color: "text-purple-600" },
- { icon: MapPin, label: "Heritage walks", color: "text-green-600" }
- ]
- }
-];
-
-const categories = ["All", "Landmarks", "Gardens", "Markets", "Views", "Beach", "Street Art", "Wildlife", "Heritage"];
+import { useNavigate } from 'react-router-dom';
+import { useGetAttractionsForHomePageQuery } from '../Redux/services/attractions.service';
export function MelbourneAttractions() {
- const [activeCategory, setActiveCategory] = useState("All");
+ const [selectedCategoryId, setSelectedCategoryId] = useState
(null);
+ const navigate = useNavigate();
+ const cityName = localStorage.getItem("cityName");
+ const cityId = localStorage.getItem("cityId");
- const filteredAttractions = activeCategory === "All"
- ? melbourneAttractions
- : melbourneAttractions.filter(attraction => attraction.category === activeCategory);
+ const { data: homePageAttractionsData } = useGetAttractionsForHomePageQuery({ cityId });
- const AttractionCard = ({ attraction, index }: { attraction: typeof melbourneAttractions[0], index: number }) => (
-
- {/* 3D Flip Container */}
-
-
- {/* FRONT FACE */}
-
- {/* Background Image */}
-
+ const apiAttractions = homePageAttractionsData?.attractions || [];
+ const apiCategories = homePageAttractionsData?.categories || [];
- {/* Rating Badge */}
- {/*
-
- ★
-
-
{attraction.rating}
-
*/}
+ // Filter attractions by selected category
+ const filteredAttractions = selectedCategoryId === null
+ ? apiAttractions
+ : apiAttractions.filter((attraction: any) =>
+ attraction.categories?.some((cat: any) => cat.id === selectedCategoryId)
+ );
- {/* Front Content - Clean Title & Location */}
-
-
-
{attraction.name}
-
- {attraction.city}, {attraction.country}
-
+ const AttractionCard = ({ attraction, index }: { attraction: any; index: number }) => {
+ // Get cover image or first image from galleries
+ const coverImage = attraction.galleries?.find((g: any) => g.isCoverImage)?.filePathUrl
+ || attraction.galleries?.[0]?.filePathUrl
+ || '';
+
+ // Filter only inclusions (isInclusion: true)
+ const inclusions = attraction.inclusions?.filter((inc: any) => inc.isInclusion) || [];
+
+ return (
+
+
+
+ {/* FRONT FACE */}
+
+
+
+
+
{attraction.title}
+
{attraction.city?.cityName}, Australia
+
-
- {/* BACK FACE */}
-
- {/* Back Content Container */}
-
-
- {/* Included Value Section */}
-
-
-
-
Included Value
+ {/* BACK FACE */}
+
+
+
+ {/* Pricing Section */}
+
+
+
+ Included Value
+
+
+ ${attraction.ticketPriceAdult}
+ {attraction.ticketPriceChild && (
+
+ / Child ${attraction.ticketPriceChild}
+
+ )}
+
+
+ {attraction.isBookingRequired ? 'Booking required' : 'No booking required'}
+
-
{attraction.includedValue}
-
- {attraction.originalPrice === "Free"
- ? "Premium access included"
- : "Save money with CityCard"}
-
-
- {/* What's Included List */}
-
-
What's Included:
-
- {attraction.perks.slice(0, 3).map((perk, perkIndex) => (
-
-
-
{perk.label}
+ {/* Inclusions List */}
+ {inclusions.length > 0 && (
+
+
What's Included:
+
+ {inclusions.slice(0, 3).map((inc: any) => (
+
+ ))}
- ))}
-
-
-
- {/* Duration & Meta Info */}
-
-
-
-
- 2-3 hours
-
-
-
All ages
+ )}
+
+ {/* Duration & Group Info */}
+
+
+ {attraction.durations && (
+
+
+ {attraction.durations} mins
+
+ )}
+ {attraction.groupSize && (
+
+
+ Max {attraction.groupSize}
+
+ )}
+ {attraction.ageRange && (
+
+
+ {attraction.ageRange}
+
+ )}
-
- {/* Footer Features */}
-
-
-
-
-
Mobile ticket
+ {/* Categories */}
+ {attraction.categories?.length > 0 && (
+
+ {attraction.categories.slice(0, 2).map((cat: any) => (
+
+ {cat.categoryName}
+
+ ))}
-
-
-
Instant confirmation
+ )}
+
+ {/* Footer */}
+
+
+
+
+ Mobile ticket
+
+
+
+ Instant confirmation
+
-
- {/* Decorative Elements */}
-
-
+ {/* Decorative Elements */}
+
+
+
-
-
-
- );
+
+
+ );
+ };
return (
+
{/* Header */}
- Melbourne Must-Sees
+ {cityName} Must-Sees
Discover {' '}
-
- Melbourne's
+
+ {cityName}'s
{' '}
Best {' '}
Experiences
- Discover Melbourne's iconic landmarks, vibrant culture, world-class dining, and hidden gems - all included with your Melbourne CityCard
+ Discover {cityName}'s iconic landmarks, vibrant culture, world-class dining, and hidden gems — all included with your {cityName} CityCard
@@ -300,23 +199,41 @@ export function MelbourneAttractions() {
viewport={{ once: true }}
className="flex flex-wrap justify-center gap-3 mb-12"
>
- {categories.map((category, index) => (
+ {/* "All" button */}
+ setSelectedCategoryId(null)}
+ whileHover={{ scale: 1.05 }}
+ whileTap={{ scale: 0.95 }}
+ className={`px-6 py-4 h-14 rounded-2xl font-medium transition-all duration-300 ${
+ selectedCategoryId === null
+ ? 'bg-gradient-to-r from-primary to-secondary text-white shadow-xl shadow-primary/25 ring-2 ring-primary/20'
+ : 'bg-white/80 backdrop-blur-sm text-gray-700 hover:text-gray-900 hover:shadow-lg border border-gray-200/50 hover:border-primary/20 hover:bg-white'
+ }`}
+ >
+ All
+
+
+ {/* Dynamic category buttons from API */}
+ {apiCategories.map((category: any, index: number) => (
setActiveCategory(category)}
+ onClick={() => setSelectedCategoryId(category.id)}
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
className={`px-6 py-4 h-14 rounded-2xl font-medium transition-all duration-300 ${
- activeCategory === category
+ selectedCategoryId === category.id
? 'bg-gradient-to-r from-primary to-secondary text-white shadow-xl shadow-primary/25 ring-2 ring-primary/20'
: 'bg-white/80 backdrop-blur-sm text-gray-700 hover:text-gray-900 hover:shadow-lg border border-gray-200/50 hover:border-primary/20 hover:bg-white'
}`}
>
- {category}
+ {category.categoryName}
))}
@@ -324,52 +241,44 @@ export function MelbourneAttractions() {
{/* Mobile Horizontal Carousel */}
- {/* Scroll Container */}
- {filteredAttractions.map((attraction, index) => (
+ {filteredAttractions.map((attraction: any, index: number) => (
))}
-
- {/* Scroll Indicators */}
- {Array.from({ length: Math.ceil(filteredAttractions.length / 2) }).map((_, index) => (
-
+ {Array.from({ length: Math.ceil(filteredAttractions.length / 2) }).map((_: any, index: number) => (
+
))}
-
- {/* Mobile Hint Text */}
-
- Swipe to explore more Melbourne attractions
-
+
Swipe to explore more {cityName} attractions
{/* Desktop Bento Grid */}
- {/* Top Row - 3 equal cards */}
- {filteredAttractions.slice(0, 3).map((attraction, index) => (
+ {filteredAttractions.slice(0, 3).map((attraction: any, index: number) => (
))}
-
- {/* Consistent Vertical Spacing */}
-
- {/* Bottom Row - 2 larger cards */}
- {filteredAttractions.slice(3, 5).map((attraction, index) => (
+ {filteredAttractions.slice(3, 5).map((attraction: any, index: number) => (
))}
+ {/* Empty State */}
+ {filteredAttractions.length === 0 && (
+
+
No attractions found for this category.
+
+ )}
+
{/* Call to Action */}
navigate('/passes')}
>
- Get Your Melbourne Card
-
- {/* Shine animation */}
+ Get Your {cityName} Card
+
);
diff --git a/src/components/MelbourneBlogs.tsx b/src/components/MelbourneBlogs.tsx
index d65a7f9..4f6fff6 100644
--- a/src/components/MelbourneBlogs.tsx
+++ b/src/components/MelbourneBlogs.tsx
@@ -2,6 +2,9 @@ import { motion } from 'motion/react';
import { ImageWithFallback } from './figma/ImageWithFallback';
import { Calendar, Clock, User, ArrowRight, Coffee, Camera, MapPin, Star } from 'lucide-react';
import { Button } from './ui/button';
+import { useRef, useState } from "react";
+import { useNavigate } from 'react-router-dom';
+import { useGetBlogsForCityQuery } from '../Redux/services/blogs.service';
const blogPosts = [
{
@@ -46,7 +49,7 @@ const blogPosts = [
excerpt: "From the iconic MCG to Formula 1 racing, discover why Melbourne holds the title of Australia's sporting capital and home to major international events.",
image: "https://images.unsplash.com/photo-1720347247737-9252d85d3027?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjBjaXR5JTIwc2t5bGluZSUyMGZsaW5kZXJzJTIwc3RyZWV0fGVufDF8fHx8MTc1NzMzOTAyNHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral",
author: "Sports Fan",
- date: "Dec 8, 2024",
+ date: "Dec 8, 2024",
readTime: "6 min read",
category: "Sports",
featured: false,
@@ -88,12 +91,31 @@ const categories = [
];
export function MelbourneBlogs() {
+
+ const sectionRef = useRef(null);
+ const navigate = useNavigate();
+ const cityId = localStorage.getItem('cityId');
+ const [categoryId, setCategoryId] = useState("");
+ const { data: blogsData, error, isLoading } = useGetBlogsForCityQuery({ cityId, categoryId });
const featuredPost = blogPosts.find(post => post.featured);
const regularPosts = blogPosts.filter(post => !post.featured);
+ const cityName = localStorage.getItem('cityName');
+ const baseUrl = import.meta.env.VITE_BASE_URL;
+
+ const blogss = blogsData?.blogs ?? [];
+ const categoriess = blogsData?.categories ?? []
+
+ const handleCategoryClick = (id: string) => {
+ // toggle logic: if already selected, reset to empty
+ setCategoryId(prev => (prev === id ? "" : id));
+ };
+
return (
-
- {/* Background Pattern */}
+ {/* Background Pattern */}
@@ -110,21 +132,21 @@ export function MelbourneBlogs() {
- Melbourne Stories
+ {cityName} Stories
-
+
- Melbourne {' '}
-
+ {cityName} {' '}
+
Blogs
-
+
- Dive deep into Melbourne's rich cultural tapestry, from hidden laneway treasures to world-renowned
- coffee culture. Discover insider stories, local secrets, and expert guides to Australia's cultural capital
- that will transform your Melbourne experience into an unforgettable journey.
+ Dive deep into {cityName}'s rich cultural tapestry, from hidden laneway treasures to world-renowned
+ coffee culture. Discover insider stories, local secrets, and expert guides to Australia's cultural capital
+ that will transform your {cityName} experience into an unforgettable journey.
@@ -136,29 +158,42 @@ export function MelbourneBlogs() {
viewport={{ once: true }}
className="flex flex-wrap justify-center gap-3 mb-16"
>
- {categories.map((category, index) => (
+ setCategoryId("")}
+ className={`cursor-pointer px-6 py-3 rounded-full font-medium shadow-lg hover:shadow-xl transition-all duration-300 group
+ ${categoryId === "" ? "bg-gradient-to-r from-primary to-secondary text-white" : "bg-white text-gray-700"}`}
+ >
+ All
+
+
+ {categoriess.map((category: any, index) => (
handleCategoryClick(category.id)}
+ className={`cursor-pointer px-6 py-3 rounded-full font-medium shadow-lg hover:shadow-xl transition-all duration-300 group
+ ${categoryId === category.id ? "bg-gradient-to-r from-primary to-secondary text-white" : "bg-white text-gray-700"}`}
>
- {category.name}
-
- {category.count}
-
+ {category.categoryName}
))}
+
{/* Featured Post */}
- {featuredPost && (
+ {/* {featuredPost && (
- )}
+ )} */}
{/* Regular Blog Posts Grid */}
- {regularPosts.map((post, index) => (
+ {blogss && blogss?.map((blog: any, index) => (
-
+
{/* Category Badge */}
- {post.category}
+ {blog?.category?.categoryName}
{/* Post Content */}
-
+ {/*
- {post.author}
-
+ {blog?.author}
+
*/}
- {post.date}
+ {blog?.createdAt && new Date(blog.createdAt).toLocaleDateString(
+ 'en-US',
+ { month: 'short', day: 'numeric', year: 'numeric' }
+ )}
- {post.readTime}
+ 5 min read
- {post.title}
+ {blog?.blogTitle}
-
-
- {post.excerpt}
-
+
+
+
{/* Tags */}
-
- {post.tags.slice(0, 2).map((tag, tagIndex) => (
+ {/*
+ {blog?.tags?.slice(0, 2).map((tag, tagIndex) => (
))}
- {post.tags.length > 2 && (
+ {blog?.tags?.length > 2 && (
- +{post.tags.length - 2}
+ +{blog?.tags?.length - 2}
)}
-
+
*/}
@@ -261,23 +301,30 @@ export function MelbourneBlogs() {
>
- Want to explore Melbourne yourself?
+ Want to explore {cityName} yourself?
- Get your Melbourne CityCard and unlock access to all these incredible experiences and more.
+ Get your {cityName} CityCard and unlock access to all these incredible experiences and more.
Start your adventure today with exclusive deals and insider access.
-
+
{ navigate(`/${cityName.toLowerCase()}`), window.scrollTo({ top: 0, behavior: 'smooth' }); }}
>
- Explore Melbourne
+ Explore {cityName}
{
+ sectionRef.current?.scrollIntoView({
+ behavior: "smooth",
+ block: "start",
+ });
+ }}
>
View All Blogs
diff --git a/src/components/MelbourneCardComparison.tsx b/src/components/MelbourneCardComparison.tsx
index 58aa1bb..25ad8ce 100644
--- a/src/components/MelbourneCardComparison.tsx
+++ b/src/components/MelbourneCardComparison.tsx
@@ -1,54 +1,54 @@
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
import { Check, X, Star, Users, MapPin, Calendar, Clock, Zap, Eye } from 'lucide-react';
import { Button } from './ui/button';
import { motion } from 'motion/react';
+import { useNavigate } from 'react-router';
-const cardOptions = [
- {
- id: 'selective',
- name: 'Flexi Card',
- subtitle: 'Pick 5-10 things to do from a choice of 102 attractions tours and activities',
- priceRange: '$89-159',
- duration: '3-7 days',
- popular: false,
- color: 'from-blue-500 to-cyan-500',
- features: {
- passCategory: 'Selective Card',
- accessToAttractions: true,
- entryToAttractions: true,
- accessToExperiences: true,
- entryToSites: true,
- accessToVenues: false,
- entryToEvents: 'Pass Category',
- accessToLocations: 'Pass Category',
- entryToActivities: true,
- accessToExhibits: true,
- entryToActivitiesSecond: true
- }
- },
- {
- id: 'unlimited',
- name: 'Melbourne Unlimited Card',
- subtitle: 'Pick 5-30 things to do from a choice of 102 attractions tours and activities',
- priceRange: '$159-299',
- duration: '3-7 days',
- popular: true,
- color: 'from-purple-500 to-pink-500',
- features: {
- passCategory: 'Pass Category',
- accessToAttractions: true,
- entryToAttractions: true,
- accessToExperiences: true,
- entryToSites: true,
- accessToVenues: true,
- entryToEvents: 'Pass Category',
- accessToLocations: 'Pass Category',
- entryToActivities: true,
- accessToExhibits: true,
- entryToActivitiesSecond: true
- }
- }
-];
+// {
+// id: 'selective',
+// name: 'Flexi Card',
+// subtitle: 'Pick 5-10 things to do from a choice of 102 attractions tours and activities',
+// priceRange: '$89-159',
+// duration: '3-7 days',
+// popular: false,
+// color: 'from-blue-500 to-cyan-500',
+// features: {
+// passCategory: 'Selective Card',
+// accessToAttractions: true,
+// entryToAttractions: true,
+// accessToExperiences: true,
+// entryToSites: true,
+// accessToVenues: false,
+// entryToEvents: 'Pass Category',
+// accessToLocations: 'Pass Category',
+// entryToActivities: true,
+// accessToExhibits: true,
+// entryToActivitiesSecond: true
+// }
+// },
+// {
+// id: 'unlimited',
+// name: 'Melbourne Unlimited Card',
+// subtitle: 'Pick 5-30 things to do from a choice of 102 attractions tours and activities',
+// priceRange: '$159-299',
+// duration: '3-7 days',
+// popular: true,
+// color: 'from-purple-500 to-pink-500',
+// features: {
+// passCategory: 'Pass Category',
+// accessToAttractions: true,
+// entryToAttractions: true,
+// accessToExperiences: true,
+// entryToSites: true,
+// accessToVenues: true,
+// entryToEvents: 'Pass Category',
+// accessToLocations: 'Pass Category',
+// entryToActivities: true,
+// accessToExhibits: true,
+// entryToActivitiesSecond: true
+// }
+// }
+// ];
const features = [
{ key: 'passCategory', label: 'Pass Category', icon: Star },
@@ -71,10 +71,61 @@ const FeatureIcon = ({ feature }: { feature: typeof features[0] }) => {
interface MelbourneCardComparisonProps {
onCheckoutClick?: () => void;
+ cards: any[]
}
-export function MelbourneCardComparison({ onCheckoutClick }: MelbourneCardComparisonProps) {
+export function MelbourneCardComparison({ onCheckoutClick, cards }: MelbourneCardComparisonProps) {
const [selectedCard, setSelectedCard] = useState('unlimited');
+ const navigate = useNavigate();
+
+ const cityName=localStorage.getItem('cityName');
+
+ const cardOptions = [
+ {
+ id: cards[0]?.id,
+ name: cards[0]?.title,
+ subtitle: cards[0]?.description,
+ priceRange: `$${cards[0]?.adultPrice}`,
+ duration: '3-7 days',
+ popular: false,
+ color: 'from-blue-500 to-cyan-500',
+ features: {
+ passCategory: 'Selective Card',
+ accessToAttractions: true,
+ entryToAttractions: true,
+ accessToExperiences: true,
+ entryToSites: true,
+ accessToVenues: false,
+ entryToEvents: 'Pass Category',
+ accessToLocations: 'Pass Category',
+ entryToActivities: true,
+ accessToExhibits: true,
+ entryToActivitiesSecond: true
+ }
+ },
+ {
+ id: cards[1]?.id,
+ name: cards[1]?.title,
+ subtitle: cards[1]?.description,
+ priceRange: `$${cards[1]?.adultPrice}`,
+ duration: '3-7 days',
+ popular: true,
+ color: 'from-purple-500 to-pink-500',
+ features: {
+ passCategory: 'Pass Category',
+ accessToAttractions: true,
+ entryToAttractions: true,
+ accessToExperiences: true,
+ entryToSites: true,
+ accessToVenues: true,
+ entryToEvents: 'Pass Category',
+ accessToLocations: 'Pass Category',
+ entryToActivities: true,
+ accessToExhibits: true,
+ entryToActivitiesSecond: true
+ }
+ }
+ ];
const renderFeatureValue = (value: boolean | string, cardId: string) => {
if (typeof value === 'boolean') {
@@ -92,7 +143,7 @@ export function MelbourneCardComparison({ onCheckoutClick }: MelbourneCardCompar
);
}
-
+
return (
{value}
@@ -122,18 +173,27 @@ export function MelbourneCardComparison({ onCheckoutClick }: MelbourneCardCompar
Choose Your Adventure
-
+
-
+
Buy
{' '}
Now
-
+
- Melbourne is a must-visit cultural epicenter, and this spectacular trip unlocks
- your access around the city in one easy. Save over the cost of visiting Melbourne's
- landmarks, have lunch at Phi Phi Leh, snorkel at Bamboo Island, and visit Monkey Beach.
+ {cityName === 'Melbourne' && (
+
+ Melbourne is a must-visit cultural epicenter, and this spectacular trip unlocks
+ your access around the city in one easy. Save over the cost of visiting Melbourne's
+ landmarks, have lunch at Phi Phi Leh, snorkel at Bamboo Island, and visit Monkey Beach.
+
+ )}
+ {cityName === 'Sydney' && (
+
+ Sydney is a dazzling harbor city that blends iconic landmarks with vibrant coastal escapes. This unforgettable trip gives you seamless access across Sydney in one easy pass. Save on the cost of visiting Sydney’s world‑famous attractions, cruise past the Sydney Opera House and Harbour Bridge, relax on Bondi Beach, snorkel at Manly, and explore the wildlife at Taronga Zoo.
+
+ )}
@@ -151,8 +211,8 @@ export function MelbourneCardComparison({ onCheckoutClick }: MelbourneCardCompar
Features
- {cardOptions.map((card) => (
-
+ {cardOptions.map((card,index) => (
+
@@ -179,9 +239,9 @@ export function MelbourneCardComparison({ onCheckoutClick }: MelbourneCardCompar
{feature.label}
-
- {cardOptions.map((card) => (
-
+
+ {cardOptions.map((card, index) => (
+
{renderFeatureValue(card.features[feature.key as keyof typeof card.features], card.id)}
))}
@@ -196,18 +256,18 @@ export function MelbourneCardComparison({ onCheckoutClick }: MelbourneCardCompar
Ready to explore?
Compare features above
-
- {cardOptions.map((card) => (
-
+
+ {cardOptions.map((card,index) => (
+
{card.priceRange}
{card.duration}
navigate("/passes")}
>
Buy {card.name}
diff --git a/src/components/MelbourneFAQ.tsx b/src/components/MelbourneFAQ.tsx
index 30afd55..79ff7e7 100644
--- a/src/components/MelbourneFAQ.tsx
+++ b/src/components/MelbourneFAQ.tsx
@@ -18,59 +18,61 @@ import {
AccordionTrigger,
} from "./ui/accordion";
+const cityName = localStorage.getItem('cityName') || 'the city';
+
const faqData = [
- {
- id: "refund",
- question: "Can I get a refund on my Melbourne CityCard?",
- answer: "Yes, you can cancel your Melbourne CityCard and receive a full refund if you cancel at least 24 hours in advance of your selected start date. For cancellations within 24 hours, refunds are subject to our cancellation policy. Digital cards can be refunded instantly through your account.",
- icon: CreditCard
- },
+ // {
+ // id: "refund",
+ // question: "Can I get a refund on my Melbourne CityCard?",
+ // answer: "Yes, you can cancel your Melbourne CityCard and receive a full refund if you cancel at least 24 hours in advance of your selected start date. For cancellations within 24 hours, refunds are subject to our cancellation policy. Digital cards can be refunded instantly through your account.",
+ // icon: CreditCard
+ // },
{
id: "duration",
- question: "How long is my Melbourne CityCard valid?",
- answer: "Melbourne CityCards are available in 1, 2, 3, and 5-day options. Your card activates on the first attraction you visit and is valid for consecutive days only. The 5-day Melbourne Unlimited Card provides the best value for extended stays with access to over 40 premium attractions.",
+ question: `How long is my ${cityName} CityCard valid?`,
+ answer: `${cityName} CityCards are available in 1, 2, 3, and 5-day options. Your card activates on the first attraction you visit and is valid for consecutive days only. The 5-day ${cityName} Unlimited Card provides the best value for extended stays with access to over 40 premium attractions.`,
icon: Calendar
},
{
id: "transportation",
- question: "Does the Melbourne CityCard include public transport?",
- answer: "The Melbourne Unlimited Card includes a complimentary Myki card loaded with travel credit for trams, trains, and buses within Melbourne's CBD and inner suburbs. The Selective Card focuses on attractions only, but we provide detailed transport guides for each venue.",
+ question: `Does the ${cityName} CityCard include public transport?`,
+ answer: `The ${cityName} Unlimited Card includes a complimentary Myki card loaded with travel credit for trams, trains, and buses within ${cityName}'s CBD and inner suburbs. The Selective Card focuses on attractions only, but we provide detailed transport guides for each venue.`,
icon: Train
},
{
id: "attractions",
- question: "What are the must-visit attractions included with my card?",
- answer: "Your Melbourne CityCard includes iconic experiences like Eureka Tower SkyDeck, Royal Botanic Gardens tours, Melbourne Zoo, SEA LIFE Melbourne Aquarium, and Melbourne Star observation wheel. Plus unique local experiences like laneways art tours, coffee culture walks, and rooftop dining discounts.",
+ question: `What are the must-visit attractions included with my ${cityName} CityCard?`,
+ answer: `Your ${cityName} CityCard includes iconic experiences like Eureka Tower SkyDeck, Royal Botanic Gardens tours, ${cityName} Zoo, SEA LIFE ${cityName} Aquarium, and ${cityName} Star observation wheel. Plus unique local experiences like laneways art tours, coffee culture walks, and rooftop dining discounts.`,
icon: Camera
},
{
id: "best-time",
- question: "When is the best time to visit Melbourne?",
- answer: "Melbourne is fantastic year-round! Spring (Sep-Nov) offers perfect weather and blooming gardens. Summer (Dec-Feb) brings outdoor festivals and rooftop season. Autumn (Mar-May) showcases beautiful foliage and harvest events. Winter (Jun-Aug) is ideal for cozy cafes, indoor attractions, and cultural experiences.",
+ question: `When is the best time to visit ${cityName}?`,
+ answer: `${cityName} is fantastic year-round! Spring (Sep-Nov) offers perfect weather and blooming gardens. Summer (Dec-Feb) brings outdoor festivals and rooftop season. Autumn (Mar-May) showcases beautiful foliage and harvest events. Winter (Jun-Aug) is ideal for cozy cafes, indoor attractions, and cultural experiences.`,
icon: Clock
},
{
id: "coffee-culture",
- question: "How can I experience Melbourne's famous coffee culture?",
- answer: "Your Melbourne CityCard includes guided coffee tours through famous laneways, visits to historic coffee roasters, and discounts at award-winning cafes. We've partnered with local baristas to offer exclusive tastings and behind-the-scenes experiences at Melbourne's most beloved coffee institutions.",
+ question: `How can I experience ${cityName}'s famous coffee culture?`,
+ answer: `Your ${cityName} CityCard includes guided coffee tours through famous laneways, visits to historic coffee roasters, and discounts at award-winning cafes. We've partnered with local baristas to offer exclusive tastings and behind-the-scenes experiences at ${cityName}'s most beloved coffee institutions.`,
icon: Coffee
},
{
id: "group-bookings",
- question: "Do you offer group discounts for families or friends?",
- answer: "Yes! Groups of 4+ receive automatic discounts, and families with children under 16 get special pricing. School groups and corporate bookings receive additional benefits. Contact our Melbourne team for custom packages that can include private tours and exclusive venue access.",
+ question: `Do you offer group discounts for families or friends?`,
+ answer: `Yes! Groups of 4+ receive automatic discounts, and families with children under 16 get special pricing. School groups and corporate bookings receive additional benefits. Contact our ${cityName} team for custom packages that can include private tours and exclusive venue access.`,
icon: Users
},
{
id: "mobile-app",
- question: "Do I need the mobile app to use my Melbourne CityCard?",
- answer: "While not required, our mobile app enhances your Melbourne experience with interactive maps, real-time attraction wait times, insider tips from locals, and the ability to skip lines at participating venues. Download it for offline access to your itinerary and exclusive app-only deals.",
+ question: `Do I need the mobile app to use my ${cityName} CityCard?`,
+ answer: `While not required, our mobile app enhances your ${cityName} experience with interactive maps, real-time attraction wait times, insider tips from locals, and the ability to skip lines at participating venues. Download it for offline access to your itinerary and exclusive app-only deals.`,
icon: Smartphone
},
{
id: "neighborhoods",
- question: "Which Melbourne neighborhoods should I explore?",
- answer: "Your CityCard provides access to experiences across Melbourne's diverse neighborhoods: Fitzroy for street art and vintage shopping, St. Kilda for beaches and nightlife, Southbank for dining and culture, CBD for iconic attractions, and Richmond for authentic Vietnamese food and shopping.",
+ question: `Which ${cityName} neighborhoods should I explore?`,
+ answer: `Your CityCard provides access to experiences across ${cityName}'s diverse neighborhoods: Fitzroy for street art and vintage shopping, St. Kilda for beaches and nightlife, Southbank for dining and culture, CBD for iconic attractions, and Richmond for authentic Vietnamese food and shopping.`,
icon: MapPin
}
];
@@ -95,20 +97,20 @@ export function MelbourneFAQ() {
- Melbourne Guide
+ {cityName} Guide
Frequently Asked {' '}
-
+
Questions
- Everything you need to know about exploring Melbourne with your CityCard. From iconic attractions
- to hidden local gems, we've got your Melbourne adventure covered.
+ Everything you need to know about exploring {cityName} with your CityCard. From iconic attractions
+ to hidden local gems, we've got your {cityName} adventure covered.
@@ -161,7 +163,7 @@ export function MelbourneFAQ() {
{/* Call to Action */}
-
-
+ */}
);
diff --git a/src/components/MelbourneTourOverview.tsx b/src/components/MelbourneTourOverview.tsx
index 4457593..98c98f7 100644
--- a/src/components/MelbourneTourOverview.tsx
+++ b/src/components/MelbourneTourOverview.tsx
@@ -36,7 +36,7 @@ export function MelbourneTourOverview() {
}
];
- const tourHighlights = [
+ const MelbourneTourHighlights = [
{
icon: Star,
text: "Experience the cultural capital's vibrant arts scene and hidden laneways",
@@ -69,6 +69,43 @@ export function MelbourneTourOverview() {
}
];
+ const SydneyTourHighlights = [
+ {
+ icon: Star,
+ text: "Experience Sydney’s iconic harbour lifestyle with Opera House and Harbour Bridge views",
+ color: "text-yellow-600"
+ },
+ {
+ icon: Coffee,
+ text: "Discover Sydney’s vibrant café culture, waterfront dining, and buzzing food markets",
+ color: "text-amber-600"
+ },
+ {
+ icon: Camera,
+ text: "Capture panoramic views from Sydney Tower Eye and scenic harbour cruises",
+ color: "text-purple-600"
+ },
+ {
+ icon: Users,
+ text: "Enjoy beachside vibes at Bondi and Manly, plus lively nightlife in Darling Harbour",
+ color: "text-green-600"
+ },
+ {
+ icon: MapPin,
+ text: "Explore historic charm in The Rocks and coastal walks like Bondi to Coogee",
+ color: "text-blue-600"
+ },
+ {
+ icon: Calendar,
+ text: "Access year-round festivals, cultural events, and dynamic harbour celebrations",
+ color: "text-rose-600"
+ }
+];
+
+
+ const cityName = localStorage.getItem("cityName")
+ const selectedHighlights = cityName === 'Melbourne' ? MelbourneTourHighlights : SydneyTourHighlights;
+
return (
{/* Background Pattern */}
@@ -88,8 +125,8 @@ export function MelbourneTourOverview() {
className="mb-16"
>
- Melbourne {' '}
-
+ {cityName} {' '}
+
Tour
{' '}
Overview
@@ -108,11 +145,20 @@ export function MelbourneTourOverview() {
viewport={{ once: true }}
>
- Melbourne is a must-visit cultural epicenter, and this spectacular experience unlocks
- your access around the city in one easy pass. Save over the cost of visiting Melbourne's
- landmarks, explore famous laneways and street art, enjoy world-class dining in hidden bars,
- and immerse yourself in the sports capital's vibrant atmosphere. From Royal Botanic Gardens
- to Federation Square, hotel pickup and drop-off all included.
+ { cityName === 'Melbourne' && (
+
+ Melbourne is a must-visit cultural epicenter, and this spectacular experience unlocks
+ your access around the city in one easy pass. Save over the cost of visiting Melbourne's
+ landmarks, explore famous laneways and street art, enjoy world-class dining in hidden bars,
+ and immerse yourself in the sports capital's vibrant atmosphere. From Royal Botanic Gardens
+ to Federation Square, hotel pickup and drop-off all included.
+
+ )}
+ { cityName === 'Sydney' && (
+
+ Sydney is a must-visit global destination, blending iconic landmarks with vibrant coastal charm, and this all-in-one experience gives you seamless access across the city. Save more while exploring Sydney’s top attractions, wander through historic neighborhoods like The Rocks, admire world-famous sights such as the Sydney Opera House and Harbour Bridge, and relax along stunning beaches like Bondi and Manly. Enjoy diverse dining from waterfront restaurants to hidden cafés, soak in the lively cultural scene, and experience the energy of Australia’s most dynamic harbor city—all with convenient access to key locations and experiences included.
+
+ )}
@@ -226,7 +272,7 @@ export function MelbourneTourOverview() {
- {tourHighlights.map((highlight, index) => (
+ {selectedHighlights.map((highlight, index) => (
Access all your {' '}
-
+
city cards
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx
index 900f3b1..c6972a9 100644
--- a/src/components/Navbar.tsx
+++ b/src/components/Navbar.tsx
@@ -2,13 +2,11 @@ import { useState, useEffect, useRef, forwardRef } from 'react';
import { Menu, X, ShoppingBag, ChevronDown, Globe, User, Settings, LogOut } from 'lucide-react';
import { motion, AnimatePresence } from 'motion/react';
import { Link, useLocation, useNavigate } from 'react-router-dom';
-import Frame1597884853 from '../imports/Frame1597884853';
import { Button } from './ui/button';
import { ImageWithFallback } from './figma/ImageWithFallback';
import { CTAButton } from './CTAButton';
import logoImage from '../assets/cit-logo.png';
-import melbourneLogo from '../assets/melbourne-logo.png';
-import { CitySelectionDialog } from './CitySelectionDialog';
+import { CitySelectionDialog, slugify } from './CitySelectionDialog';
import { useAuth } from '../context/AuthContext';
import { LoginModal } from './LoginModal';
@@ -62,15 +60,12 @@ interface NavigationItem {
export default function Navbar({
activeCity,
onCityChange,
- onSignInClick,
- onSignOutClick,
isUserSignedIn = false,
// user
}: NavbarProps) {
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
const [isScrolled, setIsScrolled] = useState(false);
const [activeLanguageDropdown, setActiveLanguageDropdown] = useState(false);
- const [activeCartDropdown, setActiveCartDropdown] = useState(false);
const [activeUserDropdown, setActiveUserDropdown] = useState(false);
const [activeCityDropdown, setActiveCityDropdown] = useState(false);
const [isCityDialogOpen, setIsCityDialogOpen] = useState(false);
@@ -79,7 +74,6 @@ export default function Navbar({
const [dialogSource, setDialogSource] = useState<'navbar' | 'cta'>('navbar');
const languageRef = useRef(null);
- const cartRef = useRef(null);
const userRef = useRef(null);
const cityRef = useRef(null);
@@ -89,7 +83,16 @@ export default function Navbar({
const [lastKnownCity, setLastKnownCity] = useState<'landing' | 'melbourne'>('landing');
const [isLoginOpen, setLoginOpen] = useState(false);
- const { user, login, logout } = useAuth(); // from AuthContext
+ const { user, logout } = useAuth(); // from AuthContext
+
+ const cityLogo = sessionStorage.getItem("cityLogo")
+ const cityId = localStorage.getItem("cityId")
+ const cityName = localStorage.getItem("cityName")
+
+ // const citySelected = location.pathname.includes(slugify(cityName) || "")
+ const citySelected = sessionStorage.getItem("citySelected")
+
+ const baseUrl = import.meta.env.VITE_BASE_URL;
const protectedPaths = ["/passes", "/whats-included", "/", "/melbourne"];
@@ -117,73 +120,75 @@ export default function Navbar({
melbourneLabel: 'How It Works'
},
// Position 2
- {
- label: 'Magic Itinerary',
- path: '/landing-magic-itinerary',
- isShared: false
- },
// Position 3
{
label: 'Whats Included',
path: '/whats-included',
isShared: false
},
- // Position 4 - Shared item
{
- label: 'Your Card',
- path: '/passes',
- isShared: true,
- landingLabel: 'Your Card',
- melbourneLabel: 'Your Card'
+ label: 'Magic Itinerary',
+ path: '/landing-magic-itinerary',
+ isShared: false
},
- // Position 5
{
label: 'FAQ',
path: '/faq',
isShared: false
},
+ {
+ label: 'Your Postcard',
+ path: '/postcards',
+ isShared: true,
+ landingLabel: 'Your Postcard',
+ melbourneLabel: 'Your Postcard'
+ }
],
- melbourne: [
+ citySelected: [
// Position 1
{
label: 'Attractions',
- path: '/attractions',
+ path: `/attractions`,
isShared: false
},
// Position 2
{
label: 'Magic Itinerary',
- path: '/magic-itinerary',
+ path: `/magic-itinerary`,
isShared: false
},
// Position 3
{
label: 'Super Savings',
- path: '/super-savings',
+ path: `/super-savings`,
isShared: false
},
// Position 4 - Shared item
{
label: 'How It Works',
- path: '/how-it-works',
+ path: `/how-it-works`,
isShared: true,
landingLabel: 'Discover',
melbourneLabel: 'How It Works'
},
// Position 5 - Shared item
{
- label: 'Your Card',
- path: '/passes',
+ label: 'Buy Cards',
+ path: `/passes`,
isShared: true,
- landingLabel: 'Your Card',
- melbourneLabel: 'Your Card'
+ landingLabel: 'Buy Cards',
+ melbourneLabel: 'Buy Cards'
+ },
+ {
+ label: 'Your Postcard',
+ path: `/postcards`,
+ isShared: true,
+ landingLabel: 'Your Postcard',
+ melbourneLabel: 'Your Postcard'
}
]
};
- // Check if we're on landing page
- const isLandingPage = location.pathname === '/';
-
// Restore from session on mount
useEffect(() => {
const savedCity = sessionStorage.getItem('lastKnownCity');
@@ -220,20 +225,20 @@ export default function Navbar({
}, [location.pathname]);
// ✅ Determine which navbar to show
- const getAutoNavigationSource = (): 'landing' | 'melbourne' => {
+ const getAutoNavigationSource = () => {
const path = location.pathname;
// Explicit routes
- if (path.startsWith('/melbourne')) return 'melbourne';
+ // if (path.startsWith('/melbourne')) return 'melbourne';
if (path === '/' || path.startsWith('/explore')) return 'landing';
// Shared routes
- if (['/passes', '/how-it-works'].includes(path)) {
- return lastKnownCity; // ← remembers where user came from
- }
+ // if (['/passes', '/how-it-works'].includes(path)) {
+ // return lastKnownCity; // ← remembers where user came from
+ // }
// Fallback
- return lastKnownCity;
+ return citySelected;
};
@@ -241,7 +246,7 @@ export default function Navbar({
const getNavigationItems = (): NavigationItem[] => {
const currentSource = getAutoNavigationSource();
const items = currentSource === 'landing' ?
- navigationConfig.landing : navigationConfig.melbourne;
+ navigationConfig.landing : navigationConfig.citySelected;
return items.map((item, index) => ({
...item,
@@ -285,11 +290,11 @@ export default function Navbar({
setDialogSource('navbar');
};
- const handleCitySelectFromNavbar = (cityId: string) => {
- console.log('City selected from navbar:', cityId);
- onCityChange(cityId);
+ const handleCitySelectFromNavbar = (cityName: string) => {
+ console.log('City selected from navbar:', cityName);
+ onCityChange(cityName);
- if (cityId.toLowerCase() === '1') {
+ if (cityName.toLowerCase() === 'melbourne') {
setNavigationSource('melbourne');
navigate('/melbourne');
} else {
@@ -320,11 +325,11 @@ export default function Navbar({
handleCloseCityDialog();
};
- const handleCitySelect = (cityId: string) => {
+ const handleCitySelect = (cityName: string) => {
if (dialogSource === 'cta') {
- handleCitySelectFromCTA(cityId);
+ handleCitySelectFromCTA(cityName);
} else {
- handleCitySelectFromNavbar(cityId);
+ handleCitySelectFromNavbar(cityName);
}
};
@@ -350,34 +355,6 @@ export default function Navbar({
{ id: '2', name: 'Melbourne Premium Pass', price: '$129', quantity: 1 },
];
- // Calculate cart total
- const cartTotal = cartItems.reduce((total, item) => {
- const price = parseFloat(item.price.replace('$', ''));
- return total + (price * item.quantity);
- }, 0);
-
- // Cart dropdown items with proper navigation for checkout
- const cartDropdownItems: DropdownItem[] = [
- ...cartItems.map(item => ({
- id: item.id,
- label: `${item.name} - ${item.price}`,
- badge: `${item.quantity}x`
- })),
- {
- id: 'total',
- label: `Total: $${cartTotal.toFixed(2)}`,
- icon:
- },
- {
- id: 'checkout',
- label: 'Proceed to Checkout',
- action: () => {
- navigate('/checkout');
- setActiveCartDropdown(false);
- }
- }
- ];
-
const closeMobileMenu = () => {
setIsMobileMenuOpen(false);
};
@@ -405,9 +382,9 @@ export default function Navbar({
}, []);
useEffect(() => {
- if (activeCity.toLowerCase() === 'melbourne') {
+ if (activeCity?.toLowerCase() === 'melbourne') {
setLastKnownCity('melbourne');
- } else if (activeCity.toLowerCase() === 'landing' || activeCity.toLowerCase() === 'landingpage') {
+ } else if (activeCity?.toLowerCase() === 'landing' || activeCity?.toLowerCase() === 'landingpage') {
setLastKnownCity('landing');
}
}, [activeCity]);
@@ -519,7 +496,7 @@ export default function Navbar({
<>
{/* Desktop Navbar - Enhanced Glassmorphism */}
-
+
{/* Enhanced Navigation Items with source tracking */}
{navigationItems.map((item) => {
@@ -609,12 +585,13 @@ export default function Navbar({
onClick={handleOpenCityDialogFromNavbar}
>
- {!activeCity || activeCity === 'shared'
+ {/* {!activeCity || activeCity === 'shared'
? 'City'
: ['landing', 'landingpage'].includes(activeCity.toLowerCase())
? 'City'
: activeCity.charAt(0).toUpperCase() + activeCity.slice(1)
- }
+ } */}
+ {citySelected ? cityName : "City"}
@@ -637,7 +614,7 @@ export default function Navbar({
/>
{/* Shopping Cart */}
- setActiveCartDropdown(prev => !prev)}
@@ -655,7 +632,8 @@ export default function Navbar({
}
- />
+ /> */}
+
navigate("/cart")} />
{/* Enhanced City Card Button with Source Tracking */}
@@ -671,7 +649,8 @@ export default function Navbar({
label: 'My Profile',
icon:
,
action: () => {
- navigate('/profile');
+ // navigate(citySelected ? `/${slugify(cityName)}/profile` : '/profile');
+ navigate(citySelected ? `/profile` : '/profile');
setActiveUserDropdown(false);
}
},
@@ -770,10 +749,11 @@ export default function Navbar({
trigger={
- {activeCity && activeCity !== 'shared' ?
+ {/* {activeCity && activeCity !== 'shared' ?
activeCity.charAt(0).toUpperCase() + activeCity.slice(1) :
currentSource === 'melbourne' ? 'Melbourne' : 'Select City'
- }
+ } */}
+ {cityName ? cityName : "City"}
diff --git a/src/components/PersonalizedTourHero.tsx b/src/components/PersonalizedTourHero.tsx
index e5026cf..ae2927a 100644
--- a/src/components/PersonalizedTourHero.tsx
+++ b/src/components/PersonalizedTourHero.tsx
@@ -3,6 +3,7 @@ import { motion, AnimatePresence } from 'motion/react';
import { Sparkles, MapPin, Calendar, Wand2, Clock } from 'lucide-react';
// import { ImageWithFallback } from './figma/ImageWithFallback';
import cityTourVideo from '../assets/citycards-vid.mp4';
+import { useNavigate } from 'react-router-dom';
interface PersonalizedTourHeroProps {
onCreateItineraryClick?: () => void;
@@ -17,6 +18,7 @@ interface AttractionCard {
}
export function PersonalizedTourHero({ onCreateItineraryClick }: PersonalizedTourHeroProps) {
+ const navigate = useNavigate();
const attractionCards: AttractionCard[] = [
{
id: 1,
@@ -71,6 +73,7 @@ export function PersonalizedTourHero({ onCreateItineraryClick }: PersonalizedTou
const nextCard = attractionCards[(currentCardIndex + 1) % attractionCards.length];
const thirdCard = attractionCards[(currentCardIndex + 2) % attractionCards.length];
+ const cityName = localStorage.getItem("cityName")
return (
{/* Gradient Background Elements */}
@@ -107,7 +110,7 @@ export function PersonalizedTourHero({ onCreateItineraryClick }: PersonalizedTou
>
-
AI-Powered Planning
+
Smart Planning
Create Your {' '}
-
+
Magic Itinerary
- Let AI craft a personalized journey tailored to your interests, timeline, and travel style. Get the perfect itinerary in minutes.
+ Craft a personalized journey tailored to your interests, timeline, and travel style. Get the perfect itinerary in minutes.
{/* Quick Features */}
{[
- { icon:
, text: 'AI-powered smart suggestions' },
- { icon:
, text: '40+ top Melbourne attractions' },
+ { icon:
, text: 'Smart suggestions' },
+ { icon:
, text: `40+ top ${cityName} attractions` },
{ icon:
, text: 'Flexible & customizable plans' }
].map((feature, index) => (
navigate('/create-itinerary')}
+ className="group cursor-pointer px-8 py-4 rounded-lg flex items-center gap-2 overflow-hidden transition-all duration-300 hover:scale-105 shadow-lg hover:shadow-xl font-poppins font-semibold text-base text-white bg-gradient-to-r from-primary via-orange-500 to-rose-500 hover:from-primary/90 hover:via-orange-500/90 hover:to-rose-500/90"
>
Create My Itinerary
-
+ {/*
Free • Takes less than 2 minutes
-
+ */}
diff --git a/src/components/PostCardsPage.tsx b/src/components/PostCardsPage.tsx
deleted file mode 100644
index 29ff99d..0000000
--- a/src/components/PostCardsPage.tsx
+++ /dev/null
@@ -1,238 +0,0 @@
-import React from 'react';
-import { motion } from 'motion/react';
-import { ArrowLeft, Camera, Edit3, Upload, Heart, Star, Download, Share2 } from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent } from './ui/card';
-import { Badge } from './ui/badge';
-import Navbar from './Navbar';
-// import SubNavbar from './SubNavbar';
-import { Footer } from './Footer';
-import { MobileAppSection } from './MobileAppSection';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
-import { CustomPostcards } from './CustomPostcards';
-import { HowItWorks } from './HowItWorks';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { Layout } from '../Layout';
-
-interface User {
- email: string;
- name: string;
-}
-
-interface PostCardsPageProps {
- onBackClick: () => void;
- onHomeClick: () => void;
- onMelbourneClick: () => void;
- onPassesClick: () => void;
- onCheckoutClick: () => void;
- onSignInClick: () => void;
- onSignOutClick: () => void;
- onAttractionsClick: () => void;
- onBlogsClick: () => void;
- onHowItWorksClick: () => void;
- onFAQClick: () => void;
- onPrivacyPolicyClick: () => void;
- onAboutUsClick: () => void;
- onProfileClick: () => void;
- onCityCardsClick: () => void;
- onMagicItineraryClick: () => void;
- onPostCardsClick: () => void;
- onOffersClick: () => void;
- onContactUsClick?: () => void;
- onEsimsClick?: () => void;
- onHotelDiscountsClick?: () => void;
- currentPage: string;
- user: User | null;
-}
-
-export function PostCardsPage({
- onBackClick,
- onHomeClick,
- onMelbourneClick,
- onPassesClick,
- onCheckoutClick,
- onSignInClick,
- onSignOutClick,
- onAttractionsClick,
- onBlogsClick,
- onHowItWorksClick,
- onFAQClick,
- onPrivacyPolicyClick,
- onAboutUsClick,
- onProfileClick,
- onCityCardsClick,
- onMagicItineraryClick,
- onPostCardsClick,
- onOffersClick,
- onContactUsClick,
- onEsimsClick,
- onHotelDiscountsClick,
- currentPage,
- user
-}: PostCardsPageProps) {
- return (
-
- {/* Navbar */}
-
-
- {/* Sub Navbar */}
- {/* */}
-
- {/* Hero Section */}
-
- {/* Background gradient */}
-
-
-
-
-
- Create Beautiful {' '}
-
- Custom Postcards
-
-
-
- Transform your travel memories into stunning, personalized postcards with authentic handwritten messages.
- Share your journey in a way that feels truly personal and meaningful.
-
-
- Start Creating Postcards
-
-
-
-
- {/* Decorative elements */}
-
-
-
-
- {/* Reuse CustomPostcards Component */}
-
-
- {/* How It Works Section */}
-
-
- {/* Features Section */}
-
-
- {/* Gallery Section */}
-
-
-
- Postcard Gallery
-
- Get inspired by beautiful postcards created by our community of travelers
-
-
-
-
- {[
- {
- image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
- title: 'Tropical Paradise',
- message: 'Greetings from paradise! The beaches here are absolutely breathtaking...',
- location: 'Maldives'
- },
- {
- image: 'https://images.unsplash.com/photo-1499856871958-5b9627545d1a?w=400&h=600&fit=crop',
- title: 'City Adventures',
- message: 'Having the most amazing time exploring this incredible city...',
- location: 'Paris, France'
- },
- {
- image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
- title: 'Mountain Views',
- message: 'The views from up here are simply unbelievable. Wish you were here...',
- location: 'Swiss Alps'
- },
- {
- image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
- title: 'Cultural Journey',
- message: 'Immersing myself in the rich culture and history of this amazing place...',
- location: 'Kyoto, Japan'
- },
- {
- image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
- title: 'Safari Adventure',
- message: 'Just saw the most incredible wildlife! This experience is unforgettable...',
- location: 'Kenya, Africa'
- },
- {
- image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
- title: 'Island Escape',
- message: 'Living the island life and loving every moment of this peaceful retreat...',
- location: 'Santorini, Greece'
- }
- ].map((postcard, index) => (
-
-
-
-
-
-
- {postcard.location}
-
-
-
-
{postcard.title}
-
"{postcard.message}"
-
-
-
-
- ))}
-
-
-
-
- {/* Ready to Explore Melbourne Section */}
-
-
-
-
- {/* Mobile App Section */}
-
-
- {/* Customer Reviews */}
-
-
-
-
-
- );
-}
\ No newline at end of file
diff --git a/src/components/ProtectedRoute.tsx b/src/components/ProtectedRoute.tsx
new file mode 100644
index 0000000..dc9cb39
--- /dev/null
+++ b/src/components/ProtectedRoute.tsx
@@ -0,0 +1,29 @@
+// ProtectedRoute.tsx
+import { useState } from 'react';
+import { useAuth } from '../context/AuthContext';
+import { LoginModal } from './LoginModal';
+import { useNavigate } from 'react-router-dom';
+
+interface ProtectedRouteProps {
+ children: React.ReactNode;
+}
+
+export function ProtectedRoute({ children }: ProtectedRouteProps) {
+ const { user } = useAuth();
+ const navigate = useNavigate();
+ const [isLoginOpen, setIsLoginOpen] = useState(!user);
+
+ if (!user) {
+ return (
+
{
+ setIsLoginOpen(false);
+ navigate(-1);
+ }}
+ />
+ );
+ }
+
+ return <>{children}>;
+}
\ No newline at end of file
diff --git a/src/components/RegisterPage.tsx b/src/components/RegisterPage.tsx
new file mode 100644
index 0000000..31ae9c2
--- /dev/null
+++ b/src/components/RegisterPage.tsx
@@ -0,0 +1,306 @@
+//RegisterPage.tsx
+import { useState } from 'react';
+import { Button } from './ui/button';
+import { Input } from './ui/input';
+import { useRegisterMutation } from '../Redux/services/auth.service';
+import { toast } from 'sonner';
+import { useAuth } from '../context/AuthContext';
+import Navbar from './Navbar';
+import { Footer } from './Footer';
+import { useNavigate } from 'react-router-dom';
+import { Label } from './ui/label';
+import { useEffect } from 'react';
+
+export default function RegisterPage() {
+ const { login, user } = useAuth();
+ const email = localStorage.getItem("userEmail")
+ const [formData, setFormData] = useState({
+ firstName: '',
+ lastName: '',
+ emailAddress: email ?? "",
+ isdCode: '',
+ mobileNumber: '',
+ address1: '',
+ address2: '',
+ city: '',
+ state: '',
+ country: '',
+ postalCode: ''
+ });
+
+ const [helperText, setHelperText] = useState('');
+ const [isLoading, setIsLoading] = useState(false);
+
+ const navigate = useNavigate()
+
+ useEffect(() => {
+ const pendingEmail = localStorage.getItem("userEmail");
+ if (user || !pendingEmail) {
+ navigate("/");
+ }
+ }, [user]);
+
+ const [register, { isLoading: isRegistering }] = useRegisterMutation();
+
+ const handleInputChange = (field: string, value: string) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ };
+
+ const validateForm = () => {
+ // First Name
+ if (!formData.firstName.trim()) return toast.error('First name is required'), false;
+ if (!/^[A-Za-z]+$/.test(formData.firstName)) return toast.error('First name must contain only alphabets'), false;
+ if (formData.firstName.length < 2 || formData.firstName.length > 50) return toast.error('First name must be between 2 and 50 characters'), false;
+
+ // Last Name
+ if (!formData.lastName.trim()) return toast.error('Last name is required'), false;
+ if (!/^[A-Za-z]+$/.test(formData.lastName)) return toast.error('Last name must contain only alphabets'), false;
+ if (formData.lastName.length < 2 || formData.lastName.length > 50) return toast.error('Last name must be between 2 and 50 characters'), false;
+
+ // Email
+ if (!formData.emailAddress.includes('@')) return toast.error('Invalid email address'), false;
+
+ // ISD Code
+ if (!formData.isdCode.startsWith("+")) return toast.error("ISD code must start with '+'"), false;
+ if (!/^\+\d+$/.test(formData.isdCode)) return toast.error("ISD code must contain only numbers after '+'"), false;
+
+ // Mobile Number
+ if (!/^\d+$/.test(formData.mobileNumber)) return toast.error('Invalid mobile number'), false;
+ if (formData.mobileNumber.length < 7 || formData.mobileNumber.length > 15) return toast.error('Mobile number must be between 7 and 15 digits'), false;
+
+ // Address Line 1
+ if (!formData.address1.trim()) return toast.error('Address required'), false;
+ if (!/^[A-Za-z0-9\s]+$/.test(formData.address1)) return toast.error('Address must be alphanumeric'), false;
+ if (formData.address1.length < 5 || formData.address1.length > 100) return toast.error('Address must be between 5 and 100 characters'), false;
+
+ // City
+ if (!formData.city.trim()) return toast.error('City required'), false;
+ if (!/^[A-Za-z\s]+$/.test(formData.city)) return toast.error('City must contain only alphabets'), false;
+ if (formData.city.length < 2 || formData.city.length > 50) return toast.error('City must be between 2 and 50 characters'), false;
+
+ // State
+ if (!formData.state.trim()) return toast.error('State required'), false;
+ if (!/^[A-Za-z\s]+$/.test(formData.state)) return toast.error('State must contain only alphabets'), false;
+ if (formData.state.length < 2 || formData.state.length > 50) return toast.error('State must be between 2 and 50 characters'), false;
+
+ // Country
+ if (!formData.country.trim()) return toast.error('Country required'), false;
+ if (!/^[A-Za-z\s]+$/.test(formData.country)) return toast.error('Country must contain only alphabets'), false;
+ if (formData.country.length < 2 || formData.country.length > 50) return toast.error('Country must be between 2 and 50 characters'), false;
+
+ // Postal Code
+ if (!/^\d+$/.test(formData.postalCode)) return toast.error('Postal code should only contain numbers'), false;
+ if (formData.postalCode.length < 4 || formData.postalCode.length > 10) return toast.error('Postal code must be between 4 and 10 digits'), false;
+
+ return true;
+ };
+
+
+
+ const handleRegister = async () => {
+ if (!validateForm()) return;
+
+ setIsLoading(true);
+ setHelperText('');
+
+ try {
+ const response = await register(formData).unwrap();
+ toast.success('Registration successful!');
+ const userData = {
+ userId: response?.user?.id,
+ email: response?.email || formData.emailAddress,
+ name: response?.name || formData.emailAddress.split('@')[0].charAt(0).toUpperCase() + formData.emailAddress.split('@')[0].slice(1),
+ accessToken: response?.accessToken,
+ };
+ login(userData);
+ localStorage.removeItem("userEmail")
+ navigate("/")
+ } catch (err: any) {
+ const msg = err?.data?.message || 'Registration failed';
+ toast.error(msg);
+ setHelperText(msg);
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ return (
+
+ {/* Navbar */}
+
+
+ {/* Main Content */}
+
+
+
+ {/* Header */}
+
+
+ Create Account
+
+
+ Register to get started with City Cards
+
+
+
+ {/* Form Container */}
+
+
+ {/* Personal Info */}
+
+
+ Personal Information
+
+
+
+
+
+ Email Address
+ handleInputChange('emailAddress', e.target.value)}
+ className="h-12 bg-gray-50 border-0 rounded-xl mt-1"
+ />
+
+
+
+
+
+ {/* Address */}
+
+
+ Address Information
+
+
+
+ Address Line 1
+ handleInputChange('address1', e.target.value)}
+ className="h-12 bg-gray-50 border-0 rounded-xl mt-1"
+ />
+
+
+
+ Address Line 2
+ handleInputChange('address2', e.target.value)}
+ className="h-12 bg-gray-50 border-0 rounded-xl mt-1"
+ />
+
+
+
+
+
+
+
+ {helperText && (
+
{helperText}
+ )}
+
+
+ {isLoading || isRegistering ? 'Registering...' : 'Register'}
+
+
+
+
+
+
+ {/* Footer */}
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/SecureCheckoutPage.tsx b/src/components/SecureCheckoutPage.tsx
deleted file mode 100644
index 2b61d96..0000000
--- a/src/components/SecureCheckoutPage.tsx
+++ /dev/null
@@ -1,527 +0,0 @@
-import { useState } from 'react';
-import { motion } from 'motion/react';
-import { ArrowLeft, Lock, Shield, CreditCard, Check, X, Tag } from 'lucide-react';
-import { Button } from './ui/button';
-import { Input } from './ui/input';
-import { Label } from './ui/label';
-import { Card, CardContent, CardHeader, CardTitle } from './ui/card';
-import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs';
-import { Separator } from './ui/separator';
-import { Badge } from './ui/badge';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-
-interface User {
- email: string;
- name: string;
-}
-
-interface SecureCheckoutPageProps {
- onBackClick: () => void;
- onHomeClick: () => void;
- onMelbourneClick: () => void;
- onPassesClick: () => void;
- onCheckoutClick: () => void;
- onSignInClick: () => void;
- onSignOutClick: () => void;
- onAttractionsClick: () => void;
- onBlogsClick: () => void;
- onHowItWorksClick: () => void;
- onFAQClick: () => void;
- onPrivacyPolicyClick: () => void;
- onAboutUsClick: () => void;
- onProfileClick: () => void;
- onCityCardsClick: () => void;
- onMagicItineraryClick: () => void;
- onPostCardsClick: () => void;
- onOffersClick: () => void;
- onContactUsClick?: () => void;
- onEsimsClick?: () => void;
- onHotelDiscountsClick?: () => void;
- currentPage?: string;
- user: User | null;
-}
-
-export function SecureCheckoutPage({
- onBackClick,
- onHomeClick,
- onMelbourneClick,
- onPassesClick,
- onCheckoutClick,
- onSignInClick,
- onSignOutClick,
- onAttractionsClick,
- onBlogsClick,
- onHowItWorksClick,
- onFAQClick,
- onPrivacyPolicyClick,
- onAboutUsClick,
- onProfileClick,
- onCityCardsClick,
- onMagicItineraryClick,
- onPostCardsClick,
- onOffersClick,
- onContactUsClick,
- onEsimsClick,
- onHotelDiscountsClick,
- currentPage,
- user
-}: SecureCheckoutPageProps) {
- const [selectedTab, setSelectedTab] = useState('myself');
- const [formData, setFormData] = useState({
- firstName: 'Frank',
- lastName: 'Adam S',
- email: 'frank2023@mail.com',
- phone: '',
- travelDate: '',
- billingAddress: '',
- city: '',
- country: 'England',
- state: '',
- zipCode: '000000'
- });
- const [discountCode, setDiscountCode] = useState('');
- const [isEmailVerified, setIsEmailVerified] = useState(false);
- const [showPaymentSuccess, setShowPaymentSuccess] = useState(false);
-
- const orderSummary = {
- item: 'Melbourne - Unlimited Card',
- duration: '2 Days',
- adults: 3,
- kids: 3,
- quantity: 1,
- price: 49.80,
- discount: 7.20,
- tax: 2.24
- };
-
- const subtotal = orderSummary.price;
- const discount = orderSummary.discount;
- const total = subtotal - discount;
-
- const handleInputChange = (field: string, value: string) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- };
-
- const handlePayment = () => {
- setShowPaymentSuccess(true);
- setTimeout(() => {
- setShowPaymentSuccess(false);
- onHomeClick();
- }, 2000);
- };
-
- return (
-
-
-
-
- {/* Header */}
-
-
-
- Back
-
-
-
-
- Secure Checkout
-
-
-
- SSL Secured
-
-
-
-
- Complete your purchase securely. Your payment information is protected.
-
-
-
-
- {/* Checkout Form */}
-
-
-
-
-
- For myself
- To gift Someone
-
-
-
-
-
- {/* Personal Information */}
-
-
-
- 1
-
-
Personal Information
-
-
-
-
-
-
Email Address
-
- handleInputChange('email', e.target.value)}
- className="h-12 pr-20"
- />
- setIsEmailVerified(!isEmailVerified)}
- >
- {isEmailVerified ? (
- <>
-
- Verified
- >
- ) : (
- 'Verify'
- )}
-
-
-
-
-
-
-
-
-
- {/* Billing Information */}
-
-
-
- 2
-
-
Billing Information
-
-
-
-
- Billing Address
- handleInputChange('billingAddress', e.target.value)}
- className="h-12"
- />
-
-
-
-
-
-
-
-
-
-
-
- {/* Order Summary */}
-
-
-
-
-
- Order Summary
-
-
-
-
- {/* Item Details */}
-
-
-
-
{orderSummary.item}
-
- {orderSummary.duration}
- •
- Adults-{orderSummary.adults}
- •
- Kids-{orderSummary.kids}
-
-
- Qty: {orderSummary.quantity}
-
-
-
- ${orderSummary.price.toFixed(2)}
-
-
-
-
-
-
- {/* Discount Code */}
-
-
- setDiscountCode(e.target.value)}
- className="flex-1"
- />
-
- Apply
-
-
-
-
-
-
- {/* Price Breakdown */}
-
-
- Subtotal
- ${subtotal.toFixed(2)}
-
-
- Discount
- -${discount.toFixed(2)}
-
-
-
-
-
- {/* Total */}
-
-
-
-
Total
-
- Including ${orderSummary.tax.toFixed(2)} in taxes
-
-
-
- ${total.toFixed(2)}
-
-
-
-
- {/* Payment Button */}
-
- {showPaymentSuccess ? (
-
-
- Payment Successful!
-
- ) : (
- <>
-
- Pay ${total.toFixed(2)}
-
- >
- )}
-
-
- {/* Security Notice */}
-
- Your personal data will be used to process your order, support your experience throughout this website, and for other purposes described in our privacy policy.
-
-
- {/* Trust Badges */}
-
-
-
- 256-bit SSL
-
-
-
- Secure Payment
-
-
-
-
-
-
-
-
-
-
- {/* Success Overlay */}
- {showPaymentSuccess && (
-
-
-
-
-
- Payment Successful!
-
- Your Melbourne CityCard has been purchased successfully.
-
-
-
- )}
-
- );
-}
\ No newline at end of file
diff --git a/src/components/SuperSavingsPage.tsx b/src/components/SuperSavingsPage.tsx
deleted file mode 100644
index 4124ccc..0000000
--- a/src/components/SuperSavingsPage.tsx
+++ /dev/null
@@ -1,745 +0,0 @@
-import { useState } from 'react';
-import { motion } from 'motion/react';
-import { ArrowLeft, Search, Filter, Star, MapPin, Clock, Tag, Heart, Share2, ChevronDown, ChevronRight, Check, Hotel, Plane, Building2, MapPinned, Home, Gift, Percent } from 'lucide-react';
-import { Button } from './ui/button';
-import { Input } from './ui/input';
-import { Card, CardContent, CardHeader, CardTitle } from './ui/card';
-import { Badge } from './ui/badge';
-import { Separator } from './ui/separator';
-import { Checkbox } from './ui/checkbox';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { TrustSection } from './TrustSection';
-import { MobileAppSection } from './MobileAppSection';
-import { ReviewsSection } from './ReviewsSection';
-import { TrustedCompanies } from './TrustedCompanies';
-import { Layout } from '../Layout';
-
-interface SuperSavingsPageProps {
- onBackClick: () => void;
- onHomeClick: () => void;
- onMelbourneClick: () => void;
- onPassesClick: () => void;
- onCheckoutClick: () => void;
- onSignInClick: () => void;
- onSignOutClick: () => void;
- onAttractionsClick: () => void;
- onBlogsClick: () => void;
- onHowItWorksClick: () => void;
- onFAQClick: () => void;
- onPrivacyPolicyClick: () => void;
- onAboutUsClick: () => void;
- onProfileClick: () => void;
- onCityCardsClick: () => void;
- onMagicItineraryClick: () => void;
- onPostCardsClick: () => void;
- onOffersClick: () => void;
- onSuperSavingsClick: () => void;
- onContactUsClick?: () => void;
- onEsimsClick?: () => void;
- onHotelDiscountsClick?: () => void;
- fromSource?: 'products' | 'passes';
- currentPage: string;
- user?: { email: string; name: string; } | null;
-}
-
-// Mock super savings data
-const savingsData = [
- {
- id: '1',
- business: 'Grand Hotels Melbourne',
- title: 'Up to 50% Off on luxury hotel stays across Melbourne',
- discount: '50% OFF',
- savedAmount: 'Save up to $300',
- image: 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=400',
- category: 'hotels'
- },
- {
- id: '2',
- business: 'Adventure Tours',
- title: '40% Off on guided adventure tours and experiences',
- discount: '40% OFF',
- savedAmount: 'Save up to $150',
- image: 'https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=400',
- category: 'tours'
- },
- {
- id: '3',
- business: 'Premium Spa & Wellness',
- title: '45% Off on spa packages and wellness treatments',
- discount: '45% OFF',
- savedAmount: 'Save up to $200',
- image: 'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=400',
- category: 'wellness'
- },
- {
- id: '4',
- business: 'Culinary Delights',
- title: '35% Off on fine dining at Michelin-starred restaurants',
- discount: '35% OFF',
- savedAmount: 'Save up to $120',
- image: 'https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=400',
- category: 'dining'
- },
- {
- id: '5',
- business: 'Entertainment Pass',
- title: '60% Off on theater shows and concert tickets',
- discount: '60% OFF',
- savedAmount: 'Save up to $250',
- image: 'https://images.unsplash.com/photo-1514306191717-452ec28c7814?w=400',
- category: 'entertainment'
- },
- {
- id: '6',
- business: 'Museum Pass',
- title: '55% Off on museum entries and special exhibitions',
- discount: '55% OFF',
- savedAmount: 'Save up to $180',
- image: 'https://images.unsplash.com/photo-1566127992631-137a642a90f4?w=400',
- category: 'museums'
- },
- {
- id: '7',
- business: 'Luxury Shopping',
- title: '30% Off on designer boutiques and luxury shopping',
- discount: '30% OFF',
- savedAmount: 'Save up to $500',
- image: 'https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=400',
- category: 'shopping'
- },
- {
- id: '8',
- business: 'Water Sports',
- title: '45% Off on water sports and beach activities',
- discount: '45% OFF',
- savedAmount: 'Save up to $175',
- image: 'https://images.unsplash.com/photo-1476514525535-07fb3b4ae5f1?w=400',
- category: 'sports'
- },
- {
- id: '9',
- business: 'Wine Tasting Tours',
- title: '40% Off on wine country tours and tastings',
- discount: '40% OFF',
- savedAmount: 'Save up to $160',
- image: 'https://images.unsplash.com/photo-1506377247377-2a5b3b417ebb?w=400',
- category: 'tours'
- },
- {
- id: '10',
- business: 'Family Fun Parks',
- title: '50% Off on family entertainment and theme parks',
- discount: '50% OFF',
- savedAmount: 'Save up to $220',
- image: 'https://images.unsplash.com/photo-1524850011238-e3d235c7d4c9?w=400',
- category: 'entertainment'
- },
- {
- id: '11',
- business: 'Boutique Stays',
- title: '55% Off on boutique hotels and bed & breakfasts',
- discount: '55% OFF',
- savedAmount: 'Save up to $280',
- image: 'https://images.unsplash.com/photo-1551882547-ff40c63fe5fa?w=400',
- category: 'hotels'
- },
- {
- id: '12',
- business: 'Art Galleries',
- title: '35% Off on contemporary art galleries and workshops',
- discount: '35% OFF',
- savedAmount: 'Save up to $140',
- image: 'https://images.unsplash.com/photo-1561214115-f2f134cc4912?w=400',
- category: 'museums'
- },
- {
- id: '13',
- business: 'Luxury Cruises',
- title: '65% Off on harbor cruises and yacht experiences',
- discount: '65% OFF',
- savedAmount: 'Save up to $400',
- image: 'https://images.unsplash.com/photo-1544551763-46a013bb70d5?w=400',
- category: 'tours'
- }
-];
-
-const filterCategories = [
- { value: 'hotels', label: 'Hotels', count: 2 },
- { value: 'tours', label: 'Tours', count: 3 },
- { value: 'wellness', label: 'Wellness', count: 1 },
- { value: 'dining', label: 'Dining', count: 1 },
- { value: 'entertainment', label: 'Entertainment', count: 2 },
- { value: 'museums', label: 'Museums', count: 2 },
- { value: 'shopping', label: 'Shopping', count: 1 },
- { value: 'sports', label: 'Sports', count: 1 }
-];
-
-// Categories data for the Super Savings Categories section
-const categoriesData = [
- {
- icon: Hotel,
- title: 'Luxury Hotels',
- description: 'Premium stays at unbeatable prices',
- savings: 'Up to 50% off',
- color: 'from-primary to-primary/80'
- },
- {
- icon: Plane,
- title: 'Travel Tours',
- description: 'Guided experiences worth your time',
- savings: 'Up to 45% off',
- color: 'from-primary to-primary/80'
- },
- {
- icon: MapPinned,
- title: 'Attractions',
- description: 'Must-see landmarks and experiences',
- savings: 'Up to 60% off',
- color: 'from-primary to-primary/80'
- },
- {
- icon: Building2,
- title: 'Shopping',
- description: 'Designer brands and local boutiques',
- savings: 'Up to 35% off',
- color: 'from-primary to-primary/80'
- },
- {
- icon: Gift,
- title: 'Wellness',
- description: 'Spa treatments and relaxation',
- savings: 'Up to 45% off',
- color: 'from-primary to-primary/80'
- }
-];
-
-export function SuperSavingsPage({
- onBackClick,
- onHomeClick,
- onMelbourneClick,
- onPassesClick,
- onCheckoutClick,
- onSignInClick,
- onSignOutClick,
- onAttractionsClick,
- onBlogsClick,
- onHowItWorksClick,
- onFAQClick,
- onPrivacyPolicyClick,
- onAboutUsClick,
- onProfileClick,
- onCityCardsClick,
- onMagicItineraryClick,
- onPostCardsClick,
- onOffersClick,
- onSuperSavingsClick,
- onContactUsClick,
- onEsimsClick,
- onHotelDiscountsClick,
- fromSource = 'products',
- currentPage,
- user
-}: SuperSavingsPageProps) {
- const [searchQuery, setSearchQuery] = useState('');
- const [selectedCategories, setSelectedCategories] = useState([]);
- const [currentPage_, setCurrentPage_] = useState(1);
- const [showLoadMore, setShowLoadMore] = useState(true);
-
- const toggleCategory = (category: string) => {
- setSelectedCategories(prev =>
- prev.includes(category)
- ? prev.filter(c => c !== category)
- : [...prev, category]
- );
- };
-
- const filteredSavings = savingsData.filter(saving => {
- const matchesSearch = saving.title.toLowerCase().includes(searchQuery.toLowerCase()) ||
- saving.business.toLowerCase().includes(searchQuery.toLowerCase());
- const matchesCategory = selectedCategories.length === 0 || selectedCategories.includes(saving.category);
-
- return matchesSearch && matchesCategory;
- });
-
- const itemsPerPage = 12;
- const displayedSavings = filteredSavings.slice(0, currentPage_ * itemsPerPage);
- const hasMoreItems = filteredSavings.length > displayedSavings.length;
-
- const handleLoadMore = () => {
- setCurrentPage_(prev => prev + 1);
- if (!hasMoreItems) setShowLoadMore(false);
- };
-
- // Show different layouts based on login state
- if (!user) {
- // Not logged in - show marketing/landing page
- return (
-
-
-
- {/* Hero Section */}
-
- {/* Background gradient */}
-
-
-
-
-
- Unlock {' '}
-
- Super Savings
-
-
-
- Experience incredible discounts up to 65% off on premium experiences, luxury stays, and unforgettable attractions.
-
-
- Start Saving Now
-
-
-
-
- {/* Decorative elements */}
-
-
-
-
- {/* Trusted By Companies Section */}
-
-
-
-
-
- Trusted by the
- world's best
-
-
- Join thousands of savvy travelers enjoying massive savings on premium experiences
-
-
-
-
-
-
-
- {/* Featured Super Savings Section */}
-
-
-
-
- Featured {' '}
-
- Super Savings
-
-
-
- Check out our biggest discounts and start saving on premium experiences
-
-
-
-
-
- {/* Left Sidebar - Filters */}
-
-
-
- {/* Search by header */}
-
-
- {/* Filter categories */}
-
- {filterCategories.map(category => (
-
- toggleCategory(category.value)}
- className="border-gray-400"
- />
-
- {category.label} ({category.count})
-
-
- ))}
-
-
-
-
-
- {/* Main Content */}
-
- {/* Breadcrumb */}
-
-
- {fromSource === 'passes' ? (
- <>
- My Profile{'>'}My passes{'>'}
- Super Savings
- >
- ) : (
- <>
- Our Products{'>'}
- Super Savings
- >
- )}
-
-
-
- {/* Header Section */}
-
-
- Super Savings
-
-
- Exclusive discounts up to 65% off on premium experiences
-
-
-
- {/* Savings Grid */}
-
- {displayedSavings.map((saving, index) => (
-
-
- {/* Image */}
-
-
-
-
-
-
- {/* Discount Badge */}
-
- {saving.discount}
-
-
-
-
- {/* Business Name */}
-
-
- {/* Title */}
-
- {saving.title}
-
-
- {/* Saved Amount Display */}
-
-
-
-
- {saving.savedAmount}
-
-
-
-
-
-
- ))}
-
-
- {/* Minimal Pagination */}
-
-
-
-
-
-
-
- {[1, 2, 3].map((page) => (
- setCurrentPage_(page)}
- >
- {page}
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
-
-
- View All Super Savings
-
-
-
-
-
- {/* How It Works Section */}
-
- {/* Background decorative elements */}
-
-
-
-
-
-
-
- Start Saving in Minutes
-
-
- Your journey to smarter travel and bigger savings begins with three simple steps.
-
-
-
-
- {/* Connecting line for desktop */}
-
-
-
- {[
- {
- step: '01',
- title: 'Unlock Access',
- description: 'Get your CityCards pass to instantly activate membership perks.',
- icon: MapPinned
- },
- {
- step: '02',
- title: 'Discover Deals',
- description: 'Browse exclusive offers on hotels, flights, and experiences.',
- icon: Search
- },
- {
- step: '03',
- title: 'Enjoy Savings',
- description: 'Redeem discounts instantly and watch your travel budget grow.',
- icon: Percent
- }
- ].map((item, index) => (
-
-
- {/* Icon Container */}
-
-
-
- {item.title}
-
-
- {item.description}
-
-
-
- ))}
-
-
-
-
-
-
-
- {/* Categories Section */}
-
- {/* Abstract Travel Patterns */}
-
-
-
- {/* Section Header */}
-
-
-
-
-
Explore Collections
-
-
- Curated for the Modern Traveler
-
-
- Discover exclusive savings across our most sought-after travel categories.
-
-
-
-
-
- View All Categories
-
-
-
-
-
-
-
- {/* Bento Grid Layout */}
-
- {categoriesData.map((category, index) => (
-
-
- {/* Background Gradient Hover */}
-
-
- {/* Large Watermark Icon for visual depth */}
-
-
-
-
-
-
-
-
- {category.savings}
-
-
-
-
- {category.title}
-
-
- {category.description}
-
-
-
-
-
-
- ))}
-
-
- {/* Mobile View All Button */}
-
-
- Browse All Categories
-
-
-
-
-
- {/* Access Your CityCards Section */}
-
-
-
-
- );
- }
-
-}
diff --git a/src/components/TrustSection.tsx b/src/components/TrustSection.tsx
index 14fd60c..327f68d 100644
--- a/src/components/TrustSection.tsx
+++ b/src/components/TrustSection.tsx
@@ -151,7 +151,7 @@ export function TrustSection() {
What Our {' '}
-
+
Travelers
{' '}
Say
diff --git a/src/components/WhatsIncludedHero.tsx b/src/components/WhatsIncludedHero.tsx
index 6f8c230..52f7be7 100644
--- a/src/components/WhatsIncludedHero.tsx
+++ b/src/components/WhatsIncludedHero.tsx
@@ -99,10 +99,13 @@ export function WhatsIncludedHero({ onCreateItineraryClick }: WhatsIncludedHeroP
className="text-center max-w-4xl"
>
{/* Main Heading */}
-
- One pass. {' '}
-
- Everything you need
+
+ One CityCard {' '}
+
+ Everything you
+ {' '}
+
+ need
{' '}
to explore.
diff --git a/src/context/AuthContext.tsx b/src/context/AuthContext.tsx
index 8cabeb8..2fb643b 100644
--- a/src/context/AuthContext.tsx
+++ b/src/context/AuthContext.tsx
@@ -1,9 +1,12 @@
+// AuthContext.tsx
import React, { createContext, useContext, useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom';
interface User {
email: string;
- name: string
+ name: string;
+ accessToken:string;
+ userId:string;
}
interface AuthContextType {
@@ -29,11 +32,17 @@ export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
const login = (userData: User) => {
setUser(userData)
localStorage.setItem("user", JSON.stringify(userData))
+ localStorage.setItem("accessToken", userData?.accessToken)
+ localStorage.setItem("userId", userData?.userId)
}
const logout = () => {
setUser(null)
localStorage.removeItem("user")
+ localStorage.removeItem("accessToken")
+ localStorage.removeItem("userId")
+ localStorage.removeItem("userEmail")
+ sessionStorage.removeItem("citySelected")
navigate("/")
}
diff --git a/src/global.d.ts b/src/global.d.ts
index 903f3f8..eb5a13c 100644
--- a/src/global.d.ts
+++ b/src/global.d.ts
@@ -32,3 +32,5 @@ declare module '*.mp4' {
const src: string;
export default src;
}
+
+declare module "*.css";
diff --git a/src/guidelines/Guidelines.md b/src/guidelines/Guidelines.md
deleted file mode 100644
index 4a00ca3..0000000
--- a/src/guidelines/Guidelines.md
+++ /dev/null
@@ -1,345 +0,0 @@
-# Image Reference Guidelines
-
-**IMPORTANT**: When I provide an image for reference, it is for design reference only. Do NOT use that image inside any image section in the code. The image is provided to help understand the layout, styling, and visual direction - not to be embedded as an actual image in the application.
-
-# CityCards Typography Guidelines
-
-**Project**: Typography Guidelines for CityCards Travel Website
-
-## Font System
-
-### Primary Font
-- **Poppins**: Used for all text including headings (H1–H6), body text, buttons, labels, and forms - Clean, readable, and consistent throughout
-
-### Font Weight Scale & Usage
-- **font-light (300)**: Hero headings only - For creating dynamic contrast in H1/H2
-- **font-normal (400)**: Standard body text - Default weight for paragraphs
-- **font-medium (500)**: Buttons, navigation links, subtle emphasis
-- **font-semibold (600)**: Section headings, primary buttons
-- **font-bold (700)**: Hero keywords, strong emphasis
-
-## Heading Typography Specifications
-
-### H1 - Hero/Main Page Headings
-- **Font**: Poppins
-- **Size**: `text-5xl md:text-6xl lg:text-7xl` (48px/60px/72px - targeting ~64px)
-- **Line Height**: `leading-tight`
-- **Pattern**: Dynamic multi-weight with gradient/italic accents (max 2 emphasis styles)
-
-```jsx
-
- Discover {' '}
-
- Melbourne's
- {' '}
- Best Experiences
-
-```
-
-### H2 - Section Headings
-- **Font**: Poppins
-- **Size**: `text-2xl md:text-3xl lg:text-4xl` (24px/36px/48px)
-- **Line Height**: `leading-tight`
-- **Pattern**: Mixed weights with gradient emphasis
-
-```jsx
-
- Explore {' '}
-
- Amazing
- {' '}
- Cities
-
-```
-
-### H3 - Subsection Headings
-- **Font**: Poppins
-- **Size**: `text-xl md:text-2xl` (24px/30px)
-- **Line Height**: `leading-snug`
-- **Weight**: `font-semibold`
-
-```jsx
-
- Feature Title
-
-```
-
-### H4 - Component Headings
-- **Font**: Poppins
-- **Size**: `text-lg md:text-xl` (20px/24px)
-- **Line Height**: `leading-snug`
-- **Weight**: `font-medium` or `font-semibold`
-
-```jsx
-
- Component Heading
-
-```
-
-### H5 - Card/Item Titles
-- **Font**: Poppins
-- **Size**: `text-lg` (18px)
-- **Line Height**: `leading-snug`
-- **Weight**: `font-medium`
-
-```jsx
-
- Card Title
-
-```
-
-### H6 - Small Headings
-- **Font**: Poppins
-- **Size**: `text-base` (16px)
-- **Line Height**: `leading-snug`
-- **Weight**: `font-medium`
-
-```jsx
-
- Small Heading
-
-```
-
-## Body Typography Specifications
-
-### Large Body Text
-- **Font**: Poppins
-- **Size**: `text-xl` (20px)
-- **Line Height**: `leading-relaxed`
-- **Weight**: `font-normal`
-
-```jsx
-
- Large descriptive text for important sections
-
-```
-
-### Regular Body Text
-- **Font**: Poppins
-- **Size**: `text-base` (16px)
-- **Line Height**: `leading-relaxed`
-- **Weight**: `font-normal`
-
-```jsx
-
- Regular body text content
-
-```
-
-### Small Body Text
-- **Font**: Poppins
-- **Size**: `text-sm` (14px)
-- **Line Height**: `leading-relaxed`
-- **Weight**: `font-normal` or `font-light`
-
-```jsx
-
- Caption or meta information
-
-```
-
-## Interactive Element Typography
-
-### Buttons
-- **Font**: Poppins
-- **Primary Weight**: `font-semibold`
-- **Secondary Weight**: `font-medium`
-- **Min Size**: 16px
-
-```jsx
-// Primary Button
-
- Primary Action
-
-
-// Secondary Button
-
- Secondary Action
-
-```
-
-### Navigation Links
-- **Font**: Poppins
-- **Weight**: `font-medium`
-- **Size**: `text-base` (16px)
-
-```jsx
-
- Navigation Link
-
-```
-
-### Form Labels
-- **Font**: Poppins
-- **Weight**: `font-light` or `font-normal`
-- **Size**: `text-sm` or `text-base` (14px/16px)
-
-```jsx
-
- Form Label
-
-```
-
-### Form Inputs
-- **Font**: Poppins
-- **Weight**: `font-normal`
-- **Size**: `text-base` (16px)
-
-```jsx
-
-```
-
-## Accessibility Standards
-
-### Text Size Requirements
-- **Minimum Text Size**: 14px
-- **Interactive Minimum Size**: 16px
-- **Contrast**: WCAG AA or higher
-- **Heading Hierarchy**: Maintain semantic order (H1 → H2 → H3 etc.)
-
-### Implementation Requirements
-```jsx
-// Always include explicit font and size classes to override defaults
-
- Content with explicit styling
-
-```
-
-## Typography Rules
-
-### DO ✅
-- Use Poppins for all text (headings and body)
-- Apply max 2 emphasis styles per heading
-- Use gradient effects sparingly
-- Keep line-heights consistent
-- Always specify explicit font classes to override component defaults
-
-### DON'T ❌
-- Don't use font-light in small text
-- Don't mix more than 3 weights in one heading
-- Don't go below 14px for captions
-- Don't override font sizes without Tailwind classes
-- Don't break semantic heading hierarchy
-
-## Implementation Guidelines
-
-### Component Styling Override
-**IMPORTANT**: Always explicitly set typography classes to override component defaults:
-
-```jsx
-// ✅ CORRECT - Explicit typography classes
-
-
-
- Card Title
-
-
-
-
- Card content with explicit styling
-
-
-
-
-// ❌ INCORRECT - Relying on defaults
-
-
- Card Title
-
-
- Card content without explicit styling
-
-
-```
-
-### Dynamic Heading Patterns
-```jsx
-// Pattern 1: Light → Bold (H1/H2 only)
-
- Discover {' '}
-
- Amazing
- {' '}
- Destinations
-
-
-// Pattern 2: Normal → Semibold (H3/H4)
-
- Experience {' '}
- Melbourne's Culture
-
-```
-
-### Responsive Typography
-```jsx
-// Mobile-first responsive scaling
-
- Responsive Heading
-
-
-
- Responsive body text
-
-```
-
-**Add your own guidelines here**
-
diff --git a/src/imports/MagicItinDay5.tsx b/src/imports/MagicItinDay5.tsx
new file mode 100644
index 0000000..c755882
--- /dev/null
+++ b/src/imports/MagicItinDay5.tsx
@@ -0,0 +1,916 @@
+import svgPaths from "./svg-adqhdgpsh";
+import imgPhoto from "figma:asset/895585e16a5ef99513fed52e650cc187c5d00f0a.png";
+import imgRectangle36 from "figma:asset/c878c3c798a222b8d2bc4e2bd140d905882d2175.png";
+import imgRectangle37 from "figma:asset/a125d02d1ff3e548286c149140a80da8c96f2b93.png";
+
+function Confetti() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function Icon() {
+ return (
+
+ );
+}
+
+function CompletionScreen() {
+ return (
+
+ );
+}
+
+function Frame() {
+ return (
+
+ );
+}
+
+function Container() {
+ return (
+
+
+
+
+ );
+}
+
+function HeaderText() {
+ return (
+
+
+ Your
+ {` `}
+ Magic Itinerary
+ {` `}
+ is
+ {` `}
+ Ready
+ {` ✨`}
+
+
{`We've got everything we need to plan your perfect trip`}
+
+ );
+}
+
+function Frame37() {
+ return (
+
+
+
+
+ Melbourne
+ {` `}
+ Magic Itinerary
+
+
+
+ );
+}
+
+function Photo() {
+ return (
+
+
+
+ );
+}
+
+function OuterFrame() {
+ return (
+
+ );
+}
+
+function Group1() {
+ return (
+
+ );
+}
+
+function Frame35() {
+ return (
+
+
+
+ );
+}
+
+function Frame30() {
+ return (
+
+ );
+}
+
+function Frame36() {
+ return (
+
+ );
+}
+
+function Frame31() {
+ return (
+
+ );
+}
+
+function Overview1() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame32() {
+ return (
+
+ );
+}
+
+function Group() {
+ return (
+
+ );
+}
+
+function LetsIconsDateFill() {
+ return (
+
+
+
+ );
+}
+
+function Adults() {
+ return (
+
+ );
+}
+
+function RiParentFill() {
+ return (
+
+ );
+}
+
+function Adults1() {
+ return (
+
+ );
+}
+
+function FaSolidChild() {
+ return (
+
+ );
+}
+
+function Kids() {
+ return (
+
+ );
+}
+
+function Frame21() {
+ return (
+
+ );
+}
+
+function Frame28() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame29() {
+ return (
+
+
+
+
+ );
+}
+
+function MaterialSymbolsShare() {
+ return (
+
+ );
+}
+
+function Frame9() {
+ return (
+
+ );
+}
+
+function DownloadMinimalisticSvgrepoCom() {
+ return (
+
+ );
+}
+
+function Frame10() {
+ return (
+
+ );
+}
+
+function Frame11() {
+ return (
+
+
+
+
+ );
+}
+
+function Overview() {
+ return (
+
+ );
+}
+
+function Frame4() {
+ return (
+
+ );
+}
+
+function MaterialSymbolsChevronRightRounded() {
+ return (
+
+ );
+}
+
+function Frame5() {
+ return (
+
+
Day 1
+
Day 2
+
Day 3
+
Day 4
+
D
+
Day 3
+
Day 4
+
+
+
+
+ );
+}
+
+function SelectionTabs() {
+ return (
+
+ );
+}
+
+function Frame27() {
+ return (
+
+ );
+}
+
+function Time() {
+ return (
+
+
+
+ );
+}
+
+function Frame2() {
+ return (
+
+
Melbourne Zoo
+
Elliott Avenue, Parkville, Victoria 3052
+
+ );
+}
+
+function Frame1() {
+ return
;
+}
+
+function Cards() {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function Frame13() {
+ return (
+
+ );
+}
+
+function Frame16() {
+ return (
+
+ );
+}
+
+function Frame17() {
+ return (
+
+ );
+}
+
+function Frame18() {
+ return (
+
+ );
+}
+
+function Frame22() {
+ return (
+
+
+
+
+
+
+ );
+}
+
+function MdiLocation() {
+ return (
+
+ );
+}
+
+function Frame6() {
+ return (
+
+ );
+}
+
+function Frame23() {
+ return (
+
+
+
+
+
+ Discover various species of wildlife only present in this zoo!
+
+
+ {`Try the amazing food from our local produce `}
+
+
+ Shop for souvenirs that makes you trip a memorable one
+
+
+
+
+ );
+}
+
+function Frame34() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame26() {
+ return (
+
+ );
+}
+
+function Frame3() {
+ return (
+
+
Melbourne Skydeck
+
South Bank, just across the Yarra River from Melbourne’s CBD
+
+ );
+}
+
+function Cards1() {
+ return (
+
+
+
+
+
+
+ );
+}
+
+function MdiLocation1() {
+ return (
+
+ );
+}
+
+function Frame7() {
+ return (
+
+ );
+}
+
+function Frame14() {
+ return (
+
+ );
+}
+
+function Frame19() {
+ return (
+
+ );
+}
+
+function Frame20() {
+ return (
+
+ );
+}
+
+function Frame25() {
+ return (
+
+
+
+
+
+ );
+}
+
+function Frame24() {
+ return (
+
+
+
+
+
+
+ Take in the breathtaking views from the summit overlooking Melbourne.
+
+
+ Try out the infamous sky dining experience
+
+
+ Have a peek at the award winning voyager theatre
+
+
+
+ );
+}
+
+function Frame33() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame8() {
+ return (
+
+
+
+
+ );
+}
+
+function ItineraryDetails() {
+ return (
+
+
+
+
+ );
+}
+
+function Content() {
+ return (
+
+
+
+
+ );
+}
+
+function ArrowRightLine() {
+ return (
+
+ );
+}
+
+function Frame15() {
+ return (
+
+ );
+}
+
+function Arrow() {
+ return (
+
+ );
+}
+
+function Logo() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function Frame12() {
+ return (
+
+
+
+ );
+}
+
+function Header() {
+ return (
+
+
+
+
+ );
+}
+
+function DietQuestion() {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export default function MagicItinDay() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/MagicItinSummaryTab.tsx b/src/imports/MagicItinSummaryTab.tsx
new file mode 100644
index 0000000..aefe168
--- /dev/null
+++ b/src/imports/MagicItinSummaryTab.tsx
@@ -0,0 +1,996 @@
+import svgPaths from "./svg-8l5dq4lsp8";
+import imgPhoto from "figma:asset/895585e16a5ef99513fed52e650cc187c5d00f0a.png";
+
+function Confetti() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function Icon() {
+ return (
+
+ );
+}
+
+function CompletionScreen() {
+ return (
+
+ );
+}
+
+function Frame() {
+ return (
+
+ );
+}
+
+function Container() {
+ return (
+
+
+
+
+ );
+}
+
+function HeaderText() {
+ return (
+
+
+ Your
+ {` `}
+ Magic Itinerary
+ {` `}
+ is
+ {` `}
+ Ready
+ {` ✨`}
+
+
{`We've got everything we need to plan your perfect trip`}
+
+ );
+}
+
+function Frame35() {
+ return (
+
+
+
+
+ Melbourne
+ {` `}
+ Magic Itinerary
+
+
+
+ );
+}
+
+function Photo() {
+ return (
+
+
+
+ );
+}
+
+function OuterFrame() {
+ return (
+
+ );
+}
+
+function Group5() {
+ return (
+
+ );
+}
+
+function Frame31() {
+ return (
+
+
+
+ );
+}
+
+function Frame28() {
+ return (
+
+ );
+}
+
+function Frame32() {
+ return (
+
+ );
+}
+
+function Frame29() {
+ return (
+
+ );
+}
+
+function Overview1() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame30() {
+ return (
+
+ );
+}
+
+function Group() {
+ return (
+
+ );
+}
+
+function LetsIconsDateFill() {
+ return (
+
+
+
+ );
+}
+
+function Adults() {
+ return (
+
+ );
+}
+
+function RiParentFill() {
+ return (
+
+ );
+}
+
+function Adults1() {
+ return (
+
+ );
+}
+
+function FaSolidChild() {
+ return (
+
+ );
+}
+
+function Kids() {
+ return (
+
+ );
+}
+
+function Frame9() {
+ return (
+
+ );
+}
+
+function Frame26() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame27() {
+ return (
+
+
+
+
+ );
+}
+
+function MaterialSymbolsShare() {
+ return (
+
+ );
+}
+
+function Frame3() {
+ return (
+
+ );
+}
+
+function DownloadMinimalisticSvgrepoCom() {
+ return (
+
+ );
+}
+
+function Frame4() {
+ return (
+
+ );
+}
+
+function Frame5() {
+ return (
+
+
+
+
+ );
+}
+
+function Overview() {
+ return (
+
+ );
+}
+
+function Frame1() {
+ return (
+
+ );
+}
+
+function Frame33() {
+ return (
+
+ );
+}
+
+function Group1() {
+ return (
+
+ );
+}
+
+function LetsIconsDateFill1() {
+ return (
+
+
+
+ );
+}
+
+function Adults2() {
+ return (
+
+ );
+}
+
+function Frame10() {
+ return (
+
+ );
+}
+
+function Frame11() {
+ return (
+
+
+
+
09:00 am: Melbourne Zoo
+
+
+
+
+ );
+}
+
+function Frame15() {
+ return (
+
+
01:00 pm: Melbourne Skydeck
+
+
+ );
+}
+
+function Group2() {
+ return (
+
+ );
+}
+
+function MingcuteLocationLine() {
+ return (
+
+
+
+ );
+}
+
+function Frame7() {
+ return (
+
+ );
+}
+
+function Frame14() {
+ return (
+
+
+
+
+
+
+ Take in the breathtaking views from the summit overlooking Melbourne.
+
+
+ Try out the infamous sky dining experience
+
+
+ Have a peek at the award winning voyager theatre
+
+
+
+
+
+
+ );
+}
+
+function Frame13() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame12() {
+ return (
+
+ );
+}
+
+function Frame34() {
+ return (
+
+ );
+}
+
+function Group3() {
+ return (
+
+ );
+}
+
+function LetsIconsDateFill2() {
+ return (
+
+
+
+ );
+}
+
+function Adults3() {
+ return (
+
+ );
+}
+
+function Frame17() {
+ return (
+
+ );
+}
+
+function Frame19() {
+ return (
+
+
+
+
09:00 am: Royal Botanic Gardens Victoria
+
+
+
+
+ );
+}
+
+function Frame20() {
+ return (
+
+
+
+
01:00 pm: National Gallery of Victoria
+
+
+
+
+ );
+}
+
+function Frame18() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame16() {
+ return (
+
+ );
+}
+
+function Frame36() {
+ return (
+
+ );
+}
+
+function Group4() {
+ return (
+
+ );
+}
+
+function LetsIconsDateFill3() {
+ return (
+
+
+
+ );
+}
+
+function Adults4() {
+ return (
+
+ );
+}
+
+function Frame22() {
+ return (
+
+ );
+}
+
+function Frame24() {
+ return (
+
+
+
+
09:00 am: Queens Victoria Market
+
+
+
+
+ );
+}
+
+function Frame25() {
+ return (
+
+
+
+
{`04:30 pm: St Kilda Beach & Pier`}
+
+
+
+
+ );
+}
+
+function Frame23() {
+ return (
+
+
+
+
+ );
+}
+
+function Frame21() {
+ return (
+
+ );
+}
+
+function Frame2() {
+ return (
+
+
+
+
+
+ );
+}
+
+function ItineraryDetails() {
+ return (
+
+
+
+
+ );
+}
+
+function Content() {
+ return (
+
+
+
+
+ );
+}
+
+function ArrowRightLine() {
+ return (
+
+ );
+}
+
+function Frame8() {
+ return (
+
+ );
+}
+
+function Arrow() {
+ return (
+
+ );
+}
+
+function Logo() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function Frame6() {
+ return (
+
+
+
+ );
+}
+
+function Header() {
+ return (
+
+
+
+
+ );
+}
+
+function DietQuestion() {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export default function MagicItinSummaryTab() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9919-186.tsx b/src/imports/NounRelax65970551-9919-186.tsx
new file mode 100644
index 0000000..4711400
--- /dev/null
+++ b/src/imports/NounRelax65970551-9919-186.tsx
@@ -0,0 +1,13 @@
+import svgPaths from "./svg-wjtpqfkmjn";
+
+export default function NounRelax() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9919-190.tsx b/src/imports/NounRelax65970551-9919-190.tsx
new file mode 100644
index 0000000..c0103af
--- /dev/null
+++ b/src/imports/NounRelax65970551-9919-190.tsx
@@ -0,0 +1,32 @@
+import svgPaths from "./svg-3e945qfv3w";
+
+function Group() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default function NounRelax() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9919-366.tsx b/src/imports/NounRelax65970551-9919-366.tsx
new file mode 100644
index 0000000..5f8e94f
--- /dev/null
+++ b/src/imports/NounRelax65970551-9919-366.tsx
@@ -0,0 +1,13 @@
+import svgPaths from "./svg-nvjqsh4m9x";
+
+export default function NounRelax() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9919-370.tsx b/src/imports/NounRelax65970551-9919-370.tsx
new file mode 100644
index 0000000..1ead897
--- /dev/null
+++ b/src/imports/NounRelax65970551-9919-370.tsx
@@ -0,0 +1,13 @@
+import svgPaths from "./svg-rpecqp6li2";
+
+export default function NounRelax() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9919-374.tsx b/src/imports/NounRelax65970551-9919-374.tsx
new file mode 100644
index 0000000..afae28d
--- /dev/null
+++ b/src/imports/NounRelax65970551-9919-374.tsx
@@ -0,0 +1,29 @@
+import svgPaths from "./svg-u2edxj8dia";
+
+function Group() {
+ return (
+
+ );
+}
+
+export default function NounRelax() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9919-378.tsx b/src/imports/NounRelax65970551-9919-378.tsx
new file mode 100644
index 0000000..35995e4
--- /dev/null
+++ b/src/imports/NounRelax65970551-9919-378.tsx
@@ -0,0 +1,13 @@
+import svgPaths from "./svg-kj92221mds";
+
+export default function NounRelax() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9919-382.tsx b/src/imports/NounRelax65970551-9919-382.tsx
new file mode 100644
index 0000000..c44ebee
--- /dev/null
+++ b/src/imports/NounRelax65970551-9919-382.tsx
@@ -0,0 +1,31 @@
+import svgPaths from "./svg-qafz9g9knb";
+
+function Group() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default function NounRelax() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9919-386.tsx b/src/imports/NounRelax65970551-9919-386.tsx
new file mode 100644
index 0000000..029cd75
--- /dev/null
+++ b/src/imports/NounRelax65970551-9919-386.tsx
@@ -0,0 +1,553 @@
+import svgPaths from "./svg-qnagtgq03x";
+
+function Group1() {
+ return (
+
+ );
+}
+
+function Group2() {
+ return (
+
+ );
+}
+
+function Group3() {
+ return (
+
+ );
+}
+
+function Group4() {
+ return (
+
+ );
+}
+
+function Group5() {
+ return (
+
+ );
+}
+
+function Group6() {
+ return (
+
+ );
+}
+
+function Group7() {
+ return (
+
+ );
+}
+
+function Group9() {
+ return (
+
+ );
+}
+
+function Group10() {
+ return (
+
+ );
+}
+
+function Group11() {
+ return (
+
+ );
+}
+
+function Group12() {
+ return (
+
+ );
+}
+
+function Group8() {
+ return (
+
+
+
+
+
+
+ );
+}
+
+function Group14() {
+ return (
+
+ );
+}
+
+function Group15() {
+ return (
+
+ );
+}
+
+function Group16() {
+ return (
+
+ );
+}
+
+function Group17() {
+ return (
+
+ );
+}
+
+function Group18() {
+ return (
+
+ );
+}
+
+function Group19() {
+ return (
+
+ );
+}
+
+function Group20() {
+ return (
+
+ );
+}
+
+function Group21() {
+ return (
+
+ );
+}
+
+function Group22() {
+ return (
+
+ );
+}
+
+function Group23() {
+ return (
+
+ );
+}
+
+function Group24() {
+ return (
+
+ );
+}
+
+function Group25() {
+ return (
+
+ );
+}
+
+function Group13() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function Group27() {
+ return (
+
+ );
+}
+
+function Group28() {
+ return (
+
+ );
+}
+
+function Group29() {
+ return (
+
+ );
+}
+
+function Group30() {
+ return (
+
+ );
+}
+
+function Group31() {
+ return (
+
+ );
+}
+
+function Group32() {
+ return (
+
+ );
+}
+
+function Group33() {
+ return (
+
+ );
+}
+
+function Group34() {
+ return (
+
+ );
+}
+
+function Group35() {
+ return (
+
+ );
+}
+
+function Group36() {
+ return (
+
+ );
+}
+
+function Group37() {
+ return (
+
+ );
+}
+
+function Group26() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function Group() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default function NounRelax() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9923-625.tsx b/src/imports/NounRelax65970551-9923-625.tsx
new file mode 100644
index 0000000..43778d6
--- /dev/null
+++ b/src/imports/NounRelax65970551-9923-625.tsx
@@ -0,0 +1,15 @@
+import svgPaths from "./svg-bfd6jik9me";
+
+export default function NounRelax() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9923-629.tsx b/src/imports/NounRelax65970551-9923-629.tsx
new file mode 100644
index 0000000..a3da9f5
--- /dev/null
+++ b/src/imports/NounRelax65970551-9923-629.tsx
@@ -0,0 +1,28 @@
+import svgPaths from "./svg-jhl6jizeq8";
+
+function Group() {
+ return (
+
+ );
+}
+
+export default function NounRelax() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9923-633.tsx b/src/imports/NounRelax65970551-9923-633.tsx
new file mode 100644
index 0000000..36112e0
--- /dev/null
+++ b/src/imports/NounRelax65970551-9923-633.tsx
@@ -0,0 +1,34 @@
+import svgPaths from "./svg-70pmm871bv";
+
+function Group() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default function NounRelax() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551-9923-637.tsx b/src/imports/NounRelax65970551-9923-637.tsx
new file mode 100644
index 0000000..6a8b1af
--- /dev/null
+++ b/src/imports/NounRelax65970551-9923-637.tsx
@@ -0,0 +1,28 @@
+import svgPaths from "./svg-5q6zbixxri";
+
+function Group() {
+ return (
+
+ );
+}
+
+export default function NounRelax() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/NounRelax65970551.tsx b/src/imports/NounRelax65970551.tsx
new file mode 100644
index 0000000..6620d53
--- /dev/null
+++ b/src/imports/NounRelax65970551.tsx
@@ -0,0 +1,13 @@
+import svgPaths from "./svg-s8leuc872s";
+
+export default function NounRelax() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/imports/image-1.png b/src/imports/image-1.png
new file mode 100644
index 0000000..def81b8
Binary files /dev/null and b/src/imports/image-1.png differ
diff --git a/src/imports/image-10.png b/src/imports/image-10.png
new file mode 100644
index 0000000..3e066f3
Binary files /dev/null and b/src/imports/image-10.png differ
diff --git a/src/imports/image-2.png b/src/imports/image-2.png
new file mode 100644
index 0000000..2f8209b
Binary files /dev/null and b/src/imports/image-2.png differ
diff --git a/src/imports/image-3.png b/src/imports/image-3.png
new file mode 100644
index 0000000..a92091f
Binary files /dev/null and b/src/imports/image-3.png differ
diff --git a/src/imports/image-4.png b/src/imports/image-4.png
new file mode 100644
index 0000000..82b9593
Binary files /dev/null and b/src/imports/image-4.png differ
diff --git a/src/imports/image-5.png b/src/imports/image-5.png
new file mode 100644
index 0000000..91cc917
Binary files /dev/null and b/src/imports/image-5.png differ
diff --git a/src/imports/image-6.png b/src/imports/image-6.png
new file mode 100644
index 0000000..0657a9e
Binary files /dev/null and b/src/imports/image-6.png differ
diff --git a/src/imports/image-7.png b/src/imports/image-7.png
new file mode 100644
index 0000000..ea6b1f5
Binary files /dev/null and b/src/imports/image-7.png differ
diff --git a/src/imports/image-8.png b/src/imports/image-8.png
new file mode 100644
index 0000000..edaa799
Binary files /dev/null and b/src/imports/image-8.png differ
diff --git a/src/imports/image-9.png b/src/imports/image-9.png
new file mode 100644
index 0000000..e5bea22
Binary files /dev/null and b/src/imports/image-9.png differ
diff --git a/src/imports/image.png b/src/imports/image.png
new file mode 100644
index 0000000..b49d741
Binary files /dev/null and b/src/imports/image.png differ
diff --git a/src/imports/svg-3e945qfv3w.ts b/src/imports/svg-3e945qfv3w.ts
new file mode 100644
index 0000000..6819c47
--- /dev/null
+++ b/src/imports/svg-3e945qfv3w.ts
@@ -0,0 +1,10 @@
+export default {
+p18421100: "M22.0337 1.0852C24.0433 0.497009 25.7803 -0.00844068 28.5834 0.120177C29.9191 0.181446 32.7406 1.18323 33.8005 2.87729C33.9537 2.41777 33.9506 1.91839 33.9445 1.18935C33.9445 1.05455 33.9414 0.913635 33.9414 0.769647C33.9414 0.457169 34.1712 0.196774 34.4806 0.153884C34.79 0.114059 35.081 0.307056 35.1607 0.607283C35.1668 0.631791 35.6815 3.33381 35.8959 4.55301C37.783 4.75826 40.3257 5.60994 41.7717 6.93948C41.9616 7.11716 42.0229 7.39287 41.9248 7.63183C41.8237 7.87078 41.5848 8.02702 41.3244 8.01476C40.7012 7.98805 40.1182 7.90672 39.5031 7.82089M22.0337 1.0852L22.0251 1.08769M22.0337 1.0852C22.0308 1.08603 22.0279 1.08686 22.0251 1.08769M39.4435 7.81257C38.9319 7.73905 38.3804 7.66246 37.7493 7.60732C40.6565 10.6402 40.3778 14.3347 39.6916 18.2622C40.8312 17.6004 41.643 17.9282 42.0842 18.2591C43.7721 19.5274 43.7263 23.5099 42.4579 25.5563C41.6185 26.9104 40.3594 27.4097 38.9288 26.9869C38.6776 28.1909 38.0343 30.6202 36.5822 33.0771C35.657 34.6395 34.3091 36.3489 32.3913 37.6877C32.3943 37.9419 32.3974 38.1962 32.3943 38.4535M39.4435 7.81257L39.5031 7.82089M39.4435 7.81257C39.4634 7.81535 39.4832 7.81812 39.5031 7.82089M32.3943 38.4535L32.3943 38.4655M32.3943 38.4535C32.3943 38.4575 32.3943 38.4615 32.3943 38.4655M19.0227 12.358V12.2416C19.0227 12.067 18.9492 11.8985 18.8205 11.7821C18.6888 11.6626 18.5173 11.6044 18.3426 11.6228C14.5899 11.9873 12.62 15.734 11.1833 18.488C11.0761 15.9576 11.2782 11.8494 11.5907 10.9519C11.6581 10.7589 11.6275 10.5475 11.5049 10.382L11.5051 10.3886C11.0424 9.7575 10.3716 8.72511 9.99781 7.90408C10.9138 7.94995 12.369 7.73554 14.4858 6.65414C14.7799 6.50405 14.9055 6.15481 14.7738 5.85459C14.3878 4.96927 13.5668 4.58327 12.9082 4.27386C12.516 4.08698 12.2464 3.9522 12.0749 3.80208C17.3255 3.75001 20.1225 2.93513 22.3925 2.27342C24.3745 1.6944 25.94 1.23794 28.5348 1.35741C30.039 1.42792 33.0473 2.83094 32.983 4.2953C32.9707 4.55263 33.1208 4.79158 33.3598 4.89268C33.5987 4.99377 33.8744 4.93557 34.0521 4.74563C34.2604 4.52506 34.4289 4.31367 34.5668 4.10536C34.6709 4.67513 34.7506 5.11627 34.7659 5.20511C34.8027 5.50227 35.0477 5.73204 35.351 5.74735C36.2487 5.79024 37.3698 6.0292 38.4268 6.42132C37.7436 6.34473 36.9655 6.28653 36.0281 6.28653C35.7615 6.28653 35.5226 6.45808 35.4399 6.71235C35.3541 6.96662 35.4429 7.2454 35.6574 7.4047C39.6522 10.3817 39.208 14.1195 38.3441 18.7944C36.5764 17.3178 34.0614 13.6569 34.0614 11.5952C34.0614 11.4022 33.9694 11.2184 33.8163 11.102C33.706 11.0192 33.5743 10.9764 33.4395 10.9764C33.3843 10.9764 33.3292 10.9825 33.274 10.9978C31.258 11.5515 30.3143 12.1266 29.4056 12.6804L29.4018 12.6827M19.0227 12.358V12.3693M19.0227 12.358C19.0227 12.3618 19.0227 12.3655 19.0227 12.3693M22.1076 13.5926L22.1399 13.5756M22.1076 13.5926L22.0961 13.5986M22.1076 13.5926C22.1184 13.5869 22.1292 13.5813 22.1399 13.5756M22.1076 13.5926C22.1038 13.5946 22.1 13.5966 22.0961 13.5986M29.4018 12.6827L29.3807 12.6955M29.4018 12.6827C29.3948 12.687 29.3877 12.6912 29.3807 12.6955M30.0416 13.7337C30.7646 13.2926 31.509 12.8392 32.8937 12.395C33.439 15.3295 36.6342 19.4377 38.4907 20.3873C38.4968 20.3904 38.5029 20.3911 38.509 20.3919C38.5152 20.3927 38.5213 20.3934 38.5274 20.3965C38.5856 20.4241 38.6469 20.4363 38.7082 20.4425C38.7128 20.443 38.7174 20.4437 38.7218 20.4444C38.7287 20.4456 38.7353 20.4471 38.7419 20.4485C38.7566 20.4517 38.7707 20.4547 38.7848 20.4547C38.8736 20.4547 38.9624 20.4363 39.0421 20.3965H39.0482C39.0566 20.3931 39.0622 20.387 39.0676 20.3812C39.0721 20.3764 39.0764 20.3717 39.0819 20.3689C39.1371 20.3383 39.1891 20.3046 39.2351 20.2556C39.759 19.6796 40.727 18.779 41.3458 19.2446C42.3047 19.9645 42.5068 23.123 41.4102 24.8967C40.773 25.9291 39.8969 26.1497 38.7388 25.5707C38.5612 25.4818 38.3498 25.4849 38.1721 25.5768C37.9944 25.6718 37.8749 25.8433 37.8474 26.0424C37.8443 26.073 37.3909 29.2989 35.5038 32.4727C33.0193 36.6543 29.3249 38.7834 24.5305 38.8049H24.4968L24.4787 38.8025C18.7435 38.8025 13.0331 32.2311 12.3714 26.8302C12.3469 26.628 12.2274 26.4534 12.0498 26.3584C11.8721 26.2634 11.6607 26.2604 11.48 26.3492C10.2086 26.9803 9.2712 26.7658 8.62175 25.6906C7.53726 23.8985 7.76398 20.4612 8.74736 19.7474C9.1456 19.4594 9.69702 19.9006 10.1259 20.3693C10.1504 20.4857 10.178 20.5899 10.2056 20.6756C10.2822 20.9054 10.4874 21.0708 10.7294 21.0954C10.7539 21.0984 10.7754 21.0984 10.7968 21.0984C11.0143 21.0984 11.2165 20.9851 11.3299 20.7951C11.5984 20.3448 11.8645 19.837 12.1452 19.3013M30.0416 13.7337L30.0325 13.7393M30.0416 13.7337C30.0386 13.7356 30.0355 13.7374 30.0325 13.7393M12.255 19.0918C13.5294 16.6502 15.0918 13.6572 17.7631 12.974C17.7172 13.7644 17.4752 14.5303 16.2835 15.8997C16.1058 16.1049 16.0813 16.4021 16.2253 16.6318C16.3693 16.8647 16.645 16.975 16.9084 16.9076C19.9291 16.1326 21.2035 15.4616 22.6801 14.6835C23.4828 14.2607 24.3068 13.8288 25.5046 13.3294C25.4556 13.7828 25.3515 14.1228 25.1309 14.5272C25.0145 14.7386 25.0329 15.002 25.1799 15.195C25.3239 15.388 25.569 15.4799 25.8079 15.4279C28.0799 14.927 29.0733 14.3227 30.0325 13.7393M12.255 19.0918L12.1452 19.3013M12.255 19.0918C12.2182 19.1621 12.1816 19.2319 12.1452 19.3013M22.0251 1.08769C19.5944 1.79473 16.8312 2.5985 11.2102 2.56484C10.8793 2.56791 10.6036 2.82218 10.5883 3.1561C10.5271 4.5301 11.5938 5.02989 12.3718 5.39434L12.3743 5.39553C12.7021 5.55177 13.0054 5.69269 13.2413 5.87344C10.6526 7.04062 9.5314 6.59029 9.41806 6.53821C9.22506 6.40036 8.98611 6.39423 8.77473 6.51064C8.56028 6.62706 8.45306 6.87214 8.47144 7.11415C8.5603 8.28135 9.83164 10.1807 10.3249 10.8792C10.0063 12.3221 9.82857 16.1453 9.95418 18.6574C9.07496 18.2009 8.40408 18.4766 8.02727 18.7523C6.42204 19.9226 6.17391 24.0369 7.57082 26.3437C8.42251 27.7467 9.74594 28.2491 11.2777 27.7774C12.0282 31.5696 14.8313 35.6839 18.434 38.055C18.4248 38.4379 18.4186 38.8086 18.4186 39.1364C18.4156 40.665 18.3849 41.4064 17.7232 41.9303C16.7276 42.062 15.781 42.2672 14.8589 42.5062C14.767 42.5093 14.672 42.5276 14.5832 42.5767C10.7138 43.6367 7.52477 45.6432 5.10159 48.5964C2.56195 51.6871 0.883168 55.7434 0.108108 60.6511C0.0529676 60.9881 0.285788 61.3067 0.622773 61.3588C0.656472 61.3649 0.69017 61.368 0.720804 61.368C1.02102 61.368 1.28448 61.1505 1.3335 60.8441C2.36009 54.3466 5.54022 46.4885 14.6077 43.8447C16.7244 47.2451 20.8298 49.3927 25.2688 49.3927C25.3546 49.3927 25.4404 49.3927 25.5262 49.3896C29.9955 49.3069 33.7116 47.1135 35.8101 43.3607L43.4263 46.3698C41.8165 42.6238 39.8692 43.1223 35.7856 42.0991C35.7825 42.0991 35.7795 42.096 35.7764 42.0929C35.6906 42.0501 35.5987 42.0347 35.5099 42.0317C34.6827 41.8356 33.8372 41.6671 32.9519 41.5538C32.9458 41.5507 32.9427 41.5507 32.9366 41.5507C32.3779 41.4958 32.3881 39.6034 32.3943 38.4655M29.3807 12.6955C28.6562 13.1351 27.9617 13.5564 26.6692 13.9387C26.7733 13.4516 26.7856 12.9615 26.7856 12.407C26.7856 12.2018 26.6845 12.0118 26.516 11.8954C26.3475 11.779 26.133 11.7545 25.9431 11.828C24.1921 12.4976 23.1002 13.0712 22.1399 13.5756M22.0961 13.5986C21.0132 14.166 20.0399 14.6759 18.3334 15.2193C19.0228 14.042 19.0227 13.223 19.0227 12.3693M34.5489 43.0658L34.5508 43.0662L34.5505 43.0631L34.5489 43.0658ZM34.5489 43.0658C32.6402 46.2318 29.3874 48.0719 25.501 48.1454C25.4214 48.1485 25.3448 48.1485 25.2651 48.1485C21.3963 48.1485 17.8181 46.3624 15.8667 43.5103C16.4089 43.3909 16.9756 43.2898 17.5577 43.204C18.6912 45.8478 22.1346 47.0027 25.342 47.0027C25.4982 47.0027 25.6514 46.9997 25.8046 46.9936C29.5849 46.8649 32.4523 45.2566 33.3193 42.8518C33.7414 42.9129 34.1512 42.9833 34.5489 43.0658ZM17.0094 19.9742C16.8899 20.0937 16.7306 20.155 16.5713 20.155C16.412 20.155 16.2527 20.0937 16.1302 19.9712C15.8882 19.7291 15.8912 19.337 16.1332 19.095C18.103 17.1374 21.7394 17.8941 22.9863 18.9449C23.2497 19.1654 23.2803 19.5576 23.0598 19.818C22.8392 20.0814 22.4471 20.1121 22.1867 19.8915C21.2676 19.1164 18.3818 18.6079 17.0094 19.9742ZM21.2156 22.9825C21.2156 24.0885 20.5477 24.9523 19.6961 24.9523C18.8445 24.9523 18.1766 24.0853 18.1766 22.9825C18.1766 21.8766 18.8444 21.0127 19.6961 21.0127C20.5477 21.0127 21.2156 21.8797 21.2156 22.9825ZM19.9749 22.9825C19.9749 22.5169 19.7604 22.2657 19.693 22.2504C19.6318 22.2657 19.4173 22.5138 19.4173 22.9825C19.4173 23.4421 19.6256 23.6933 19.6961 23.7116C19.7666 23.6902 19.9749 23.4421 19.9749 22.9825ZM27.7346 19.6433C28.6537 18.8683 31.5395 18.3598 32.912 19.7261C33.0314 19.8455 33.1907 19.9068 33.35 19.9068C33.5093 19.9068 33.6686 19.8455 33.7912 19.723C34.0332 19.481 34.0301 19.0889 33.7881 18.8468C31.8214 16.8893 28.182 17.646 26.9351 18.6967C26.6716 18.9173 26.641 19.3094 26.8616 19.5698C27.0821 19.8333 27.4742 19.8639 27.7346 19.6433ZM31.8796 22.7191C31.8796 23.8251 31.2393 24.6889 30.4244 24.6889C29.6095 24.6889 28.9692 23.8219 28.9692 22.7191C28.9692 21.6132 29.6095 20.7493 30.4244 20.7493C31.2393 20.7493 31.8796 21.6163 31.8796 22.7191ZM30.6389 22.7191C30.6389 22.3362 30.5041 22.088 30.4244 22.0053C30.3417 22.085 30.21 22.3331 30.21 22.7191C30.21 23.102 30.3448 23.3502 30.4244 23.4329C30.5072 23.3532 30.6389 23.1051 30.6389 22.7191ZM25.1032 34.8507C23.4611 34.8507 21.7609 33.4109 21.6108 30.1666C21.6016 29.9981 21.6629 29.8327 21.7793 29.7101C21.8957 29.5876 22.055 29.5171 22.2235 29.5171L28.0656 29.4773C28.2279 29.4773 28.3903 29.5416 28.5067 29.6581C28.6231 29.7745 28.6905 29.9338 28.6905 30.0992C28.6905 33.1658 26.9168 34.8108 25.1644 34.8507H25.1001L25.1032 34.8507ZM25.1399 33.61C26.154 33.5855 27.2231 32.5746 27.4223 30.7211L22.9067 30.7518C23.1702 32.7492 24.1841 33.6315 25.1399 33.61ZM19.6657 38.7712L19.6657 38.7742C21.1944 39.5676 22.8272 40.0455 24.4937 40.0455H24.5335C27.2079 40.0333 29.383 39.393 31.1598 38.4341V38.4372C31.1507 40.067 31.1415 41.8745 32.1157 42.53C31.2855 44.6285 28.4119 45.664 25.762 45.7559C22.962 45.8539 19.6596 44.9318 18.7007 42.7108C19.6504 41.804 19.6596 40.5572 19.6626 39.1327C19.6626 39.0748 19.6634 39.0147 19.6642 38.9543C19.6649 38.893 19.6657 38.8313 19.6657 38.7712ZM11.5652 55.9577C11.2282 55.8903 10.9035 56.1078 10.8361 56.4448L9.85269 61.3586C9.78529 61.6956 10.0028 62.0203 10.3398 62.0877C10.3796 62.0969 10.4225 62.1 10.4623 62.1C10.7503 62.1 11.0107 61.8947 11.0689 61.6006L12.0523 56.6868C12.1197 56.3498 11.9021 56.0251 11.5652 55.9577Z",
+p187f9700: "M17.0094 19.9742C16.8899 20.0937 16.7306 20.155 16.5713 20.155C16.412 20.155 16.2527 20.0937 16.1302 19.9712C15.8882 19.7291 15.8912 19.337 16.1332 19.095C18.103 17.1374 21.7394 17.8941 22.9863 18.9449C23.2497 19.1654 23.2803 19.5576 23.0598 19.818C22.8392 20.0814 22.4471 20.1121 22.1867 19.8915C21.2676 19.1164 18.3818 18.6079 17.0094 19.9742Z",
+p2c937b40: "M35.8101 43.3607C33.7116 47.1135 29.9955 49.3069 25.5262 49.3896C25.4404 49.3927 25.3546 49.3927 25.2688 49.3927C20.8298 49.3927 16.7244 47.2451 14.6077 43.8447C5.54022 46.4885 2.36009 54.3466 1.3335 60.8441C1.28448 61.1505 1.02102 61.368 0.720804 61.368C0.69017 61.368 0.656472 61.3649 0.622773 61.3588C0.285788 61.3067 0.0529676 60.9881 0.108108 60.6511C0.883168 55.7434 2.56195 51.6871 5.10159 48.5964C7.52477 45.6432 10.7138 43.6367 14.5832 42.5767C14.672 42.5276 14.767 42.5093 14.8589 42.5062C15.781 42.2672 16.7276 42.062 17.7232 41.9303C18.3849 41.4064 18.4156 40.665 18.4186 39.1364C18.4186 38.8086 18.4248 38.4379 18.434 38.055C14.8313 35.6839 12.0282 31.5696 11.2777 27.7774C9.74594 28.2491 8.42251 27.7467 7.57082 26.3437C6.17391 24.0369 6.42204 19.9226 8.02727 18.7523C8.40408 18.4766 9.07496 18.2009 9.95418 18.6574C9.82857 16.1453 10.0063 12.3221 10.3249 10.8792C9.83164 10.1807 8.5603 8.28135 8.47144 7.11415C8.45306 6.87214 8.56028 6.62706 8.77473 6.51064C8.98611 6.39423 9.22506 6.40036 9.41806 6.53821C9.5314 6.59029 10.6526 7.04062 13.2413 5.87344C13.0054 5.69269 12.7021 5.55177 12.3743 5.39553L12.3718 5.39434C11.5938 5.02989 10.5271 4.5301 10.5883 3.1561C10.6036 2.82218 10.8793 2.56791 11.2102 2.56484C16.8312 2.5985 19.5944 1.79473 22.0251 1.08769L22.0337 1.0852C24.0433 0.497009 25.7803 -0.00844068 28.5834 0.120177C29.9191 0.181446 32.7406 1.18323 33.8005 2.87729C33.9537 2.41777 33.9506 1.91839 33.9445 1.18935C33.9445 1.05455 33.9414 0.913635 33.9414 0.769647C33.9414 0.457169 34.1712 0.196774 34.4806 0.153884C34.79 0.114059 35.081 0.307056 35.1607 0.607283C35.1668 0.631791 35.6815 3.33381 35.8959 4.55301C37.783 4.75826 40.3257 5.60994 41.7717 6.93948C41.9616 7.11716 42.0229 7.39287 41.9248 7.63183C41.8237 7.87078 41.5848 8.02702 41.3244 8.01476C40.7012 7.98805 40.1182 7.90672 39.5031 7.82089L39.4435 7.81257C38.9319 7.73905 38.3804 7.66246 37.7493 7.60732C40.6565 10.6402 40.3778 14.3347 39.6916 18.2622C40.8312 17.6004 41.643 17.9282 42.0842 18.2591C43.7721 19.5274 43.7263 23.5099 42.4579 25.5563C41.6185 26.9104 40.3594 27.4097 38.9288 26.9869C38.6776 28.1909 38.0343 30.6202 36.5822 33.0771C35.657 34.6395 34.3091 36.3489 32.3913 37.6877C32.3943 37.9419 32.3974 38.1962 32.3943 38.4535L32.3943 38.4655C32.3881 39.6034 32.3779 41.4958 32.9366 41.5507C32.9427 41.5507 32.9458 41.5507 32.9519 41.5538C33.8372 41.6671 34.6827 41.8356 35.5099 42.0317C35.5987 42.0347 35.6906 42.0501 35.7764 42.0929C35.7795 42.096 35.7825 42.0991 35.7856 42.0991C39.8692 43.1223 41.8165 42.6238 43.4263 46.3698L35.8101 43.3607ZM11.5907 10.9519C11.6581 10.7589 11.6275 10.5475 11.5049 10.382L11.5051 10.3886C11.0424 9.7575 10.3716 8.72511 9.99781 7.90408C10.9138 7.94995 12.369 7.73554 14.4858 6.65414C14.7799 6.50405 14.9055 6.15481 14.7738 5.85459C14.3878 4.96927 13.5668 4.58327 12.9082 4.27386C12.516 4.08698 12.2464 3.9522 12.0749 3.80208C17.3255 3.75001 20.1225 2.93513 22.3925 2.27342C24.3745 1.6944 25.94 1.23794 28.5348 1.35741C30.039 1.42792 33.0473 2.83094 32.983 4.2953C32.9707 4.55263 33.1208 4.79158 33.3598 4.89268C33.5987 4.99377 33.8744 4.93557 34.0521 4.74563C34.2604 4.52506 34.4289 4.31367 34.5668 4.10536C34.6709 4.67513 34.7506 5.11627 34.7659 5.20511C34.8027 5.50227 35.0477 5.73204 35.351 5.74735C36.2487 5.79024 37.3698 6.0292 38.4268 6.42132C37.7436 6.34473 36.9655 6.28653 36.0281 6.28653C35.7615 6.28653 35.5226 6.45808 35.4399 6.71235C35.3541 6.96662 35.4429 7.2454 35.6574 7.4047C39.6522 10.3817 39.208 14.1195 38.3441 18.7944C36.5764 17.3178 34.0614 13.6569 34.0614 11.5952C34.0614 11.4022 33.9694 11.2184 33.8163 11.102C33.706 11.0192 33.5743 10.9764 33.4395 10.9764C33.3843 10.9764 33.3292 10.9825 33.274 10.9978C31.258 11.5515 30.3143 12.1266 29.4056 12.6804L29.4018 12.6827L29.3807 12.6955C28.6562 13.1351 27.9617 13.5564 26.6692 13.9387C26.7733 13.4516 26.7856 12.9615 26.7856 12.407C26.7856 12.2018 26.6845 12.0118 26.516 11.8954C26.3475 11.779 26.133 11.7545 25.9431 11.828C24.1921 12.4976 23.1002 13.0712 22.1399 13.5756L22.1076 13.5926L22.0961 13.5986C21.0132 14.166 20.0399 14.6759 18.3334 15.2193C19.0228 14.042 19.0227 13.223 19.0227 12.3693V12.358V12.2416C19.0227 12.067 18.9492 11.8985 18.8205 11.7821C18.6888 11.6626 18.5173 11.6044 18.3426 11.6228C14.5899 11.9873 12.62 15.734 11.1833 18.488C11.0761 15.9576 11.2782 11.8494 11.5907 10.9519ZM24.5305 38.8049H24.4968L24.4787 38.8025C18.7435 38.8025 13.0331 32.2311 12.3714 26.8302C12.3469 26.628 12.2274 26.4534 12.0498 26.3584C11.8721 26.2634 11.6607 26.2604 11.48 26.3492C10.2086 26.9803 9.2712 26.7658 8.62175 25.6906C7.53726 23.8985 7.76398 20.4612 8.74736 19.7474C9.1456 19.4594 9.69702 19.9006 10.1259 20.3693C10.1504 20.4857 10.178 20.5899 10.2056 20.6756C10.2822 20.9054 10.4874 21.0708 10.7294 21.0954C10.7539 21.0984 10.7754 21.0984 10.7968 21.0984C11.0143 21.0984 11.2165 20.9851 11.3299 20.7951C11.5984 20.3448 11.8645 19.837 12.1452 19.3013C12.1816 19.2319 12.2182 19.1621 12.255 19.0918C13.5294 16.6502 15.0918 13.6572 17.7631 12.974C17.7172 13.7644 17.4752 14.5303 16.2835 15.8997C16.1058 16.1049 16.0813 16.4021 16.2253 16.6318C16.3693 16.8647 16.645 16.975 16.9084 16.9076C19.9291 16.1326 21.2035 15.4616 22.6801 14.6835C23.4828 14.2607 24.3068 13.8288 25.5046 13.3294C25.4556 13.7828 25.3515 14.1228 25.1309 14.5272C25.0145 14.7386 25.0329 15.002 25.1799 15.195C25.3239 15.388 25.569 15.4799 25.8079 15.4279C28.0799 14.927 29.0733 14.3227 30.0325 13.7393L30.0416 13.7337C30.7646 13.2926 31.509 12.8392 32.8937 12.395C33.439 15.3295 36.6342 19.4377 38.4907 20.3873C38.4968 20.3904 38.5029 20.3911 38.509 20.3919C38.5152 20.3927 38.5213 20.3934 38.5274 20.3965C38.5856 20.4241 38.6469 20.4363 38.7082 20.4425C38.7128 20.443 38.7174 20.4437 38.7218 20.4444C38.7287 20.4456 38.7353 20.4471 38.7419 20.4485C38.7566 20.4517 38.7707 20.4547 38.7848 20.4547C38.8736 20.4547 38.9624 20.4363 39.0421 20.3965H39.0482C39.0566 20.3931 39.0622 20.387 39.0676 20.3812C39.0721 20.3764 39.0764 20.3717 39.0819 20.3689C39.1371 20.3383 39.1891 20.3046 39.2351 20.2556C39.759 19.6796 40.727 18.779 41.3458 19.2446C42.3047 19.9645 42.5068 23.123 41.4102 24.8967C40.773 25.9291 39.8969 26.1497 38.7388 25.5707C38.5612 25.4818 38.3498 25.4849 38.1721 25.5768C37.9944 25.6718 37.8749 25.8433 37.8474 26.0424C37.8443 26.073 37.3909 29.2989 35.5038 32.4727C33.0193 36.6543 29.3249 38.7834 24.5305 38.8049ZM18.7007 42.7108C19.6504 41.804 19.6596 40.5572 19.6626 39.1327C19.6626 39.0748 19.6634 39.0147 19.6642 38.9543C19.6649 38.893 19.6657 38.8313 19.6657 38.7712L19.6657 38.7742C21.1944 39.5676 22.8272 40.0455 24.4937 40.0455H24.5335C27.2079 40.0333 29.383 39.393 31.1598 38.4341V38.4372C31.1507 40.067 31.1415 41.8745 32.1157 42.53C31.2855 44.6285 28.4119 45.664 25.762 45.7559C22.962 45.8539 19.6596 44.9318 18.7007 42.7108ZM25.8046 46.9936C29.5849 46.8649 32.4523 45.2566 33.3193 42.8518C33.7414 42.9129 34.1512 42.9833 34.5489 43.0658L34.5505 43.0631L34.5508 43.0662L34.5489 43.0658C32.6402 46.2318 29.3874 48.0719 25.501 48.1454C25.4214 48.1485 25.3448 48.1485 25.2651 48.1485C21.3963 48.1485 17.8181 46.3624 15.8667 43.5103C16.4089 43.3909 16.9756 43.2898 17.5577 43.204C18.6912 45.8478 22.1346 47.0027 25.342 47.0027C25.4982 47.0027 25.6514 46.9997 25.8046 46.9936Z",
+p2dd59000: "M34.5489 43.0658L34.5508 43.0662L34.5505 43.0631L34.5489 43.0658ZM10.8361 56.4448C10.9035 56.1078 11.2282 55.8903 11.5652 55.9577C11.9021 56.0251 12.1197 56.3498 12.0523 56.6868L11.0689 61.6006C11.0107 61.8947 10.7503 62.1 10.4623 62.1C10.4225 62.1 10.3796 62.0969 10.3398 62.0877C10.0028 62.0203 9.78529 61.6956 9.85269 61.3586L10.8361 56.4448ZM17.0094 19.9742C16.8899 20.0937 16.7306 20.155 16.5713 20.155C16.412 20.155 16.2527 20.0937 16.1302 19.9712C15.8882 19.7291 15.8912 19.337 16.1332 19.095C18.103 17.1374 21.7394 17.8941 22.9863 18.9449C23.2497 19.1654 23.2803 19.5576 23.0598 19.818C22.8392 20.0814 22.4471 20.1121 22.1867 19.8915C21.2676 19.1164 18.3818 18.6079 17.0094 19.9742ZM21.2156 22.9825C21.2156 24.0885 20.5477 24.9523 19.6961 24.9523C18.8445 24.9523 18.1766 24.0853 18.1766 22.9825C18.1766 21.8766 18.8444 21.0127 19.6961 21.0127C20.5477 21.0127 21.2156 21.8797 21.2156 22.9825ZM27.7346 19.6433C28.6537 18.8683 31.5395 18.3598 32.912 19.7261C33.0314 19.8455 33.1907 19.9068 33.35 19.9068C33.5093 19.9068 33.6686 19.8455 33.7912 19.723C34.0332 19.481 34.0301 19.0889 33.7881 18.8468C31.8214 16.8893 28.182 17.646 26.9351 18.6967C26.6716 18.9173 26.641 19.3094 26.8616 19.5698C27.0821 19.8333 27.4742 19.8639 27.7346 19.6433ZM31.8796 22.7191C31.8796 23.8251 31.2393 24.6889 30.4244 24.6889C29.6095 24.6889 28.9692 23.8219 28.9692 22.7191C28.9692 21.6132 29.6095 20.7493 30.4244 20.7493C31.2393 20.7493 31.8796 21.6163 31.8796 22.7191ZM25.1032 34.8507C23.4611 34.8507 21.7609 33.4109 21.6108 30.1666C21.6016 29.9981 21.6629 29.8327 21.7793 29.7101C21.8957 29.5876 22.055 29.5171 22.2235 29.5171L28.0656 29.4773C28.2279 29.4773 28.3903 29.5416 28.5067 29.6581C28.6231 29.7745 28.6905 29.9338 28.6905 30.0992C28.6905 33.1658 26.9168 34.8108 25.1644 34.8507H25.1001L25.1032 34.8507ZM27.4223 30.7211C27.2231 32.5746 26.154 33.5855 25.1399 33.61C24.1841 33.6315 23.1702 32.7492 22.9067 30.7518L27.4223 30.7211ZM19.9749 22.9825C19.9749 22.5169 19.7604 22.2657 19.693 22.2504C19.6318 22.2657 19.4173 22.5138 19.4173 22.9825C19.4173 23.4421 19.6256 23.6933 19.6961 23.7116C19.7666 23.6902 19.9749 23.4421 19.9749 22.9825ZM30.4244 22.0053C30.5041 22.088 30.6389 22.3362 30.6389 22.7191C30.6389 23.1051 30.5072 23.3532 30.4244 23.4329C30.3448 23.3502 30.21 23.102 30.21 22.7191C30.21 22.3331 30.3417 22.085 30.4244 22.0053Z",
+p30d09400: "M51.1571 20.7151C50.9642 20.5221 50.9642 20.2066 51.1602 20.0136C52.986 18.1969 56.3651 18.9015 57.5231 19.8757C57.7314 20.0534 57.759 20.3659 57.5843 20.5742C57.4067 20.7825 57.0942 20.8101 56.8859 20.6355C56.0925 19.9676 53.2986 19.2875 51.8618 20.7182C51.7638 20.8132 51.6382 20.8622 51.5126 20.8622C51.3839 20.8622 51.2583 20.8132 51.1603 20.7151L51.1571 20.7151ZM55.8136 23.6316C55.8136 24.6272 55.2224 25.4053 54.4657 25.4053C53.709 25.4053 53.1177 24.6272 53.1177 23.6316C53.1177 22.636 53.709 21.8579 54.4657 21.8579C55.2223 21.8579 55.8136 22.636 55.8136 23.6316ZM54.8211 23.6316C54.8211 23.1537 54.5883 22.8504 54.4657 22.8504C54.3432 22.8504 54.1104 23.1537 54.1104 23.6316C54.1104 24.1095 54.3432 24.4128 54.4657 24.4128C54.5883 24.4128 54.8211 24.1095 54.8211 23.6316ZM62.0172 20.4027C62.8107 19.7348 65.6045 19.0547 67.0413 20.4854C67.1393 20.5804 67.2649 20.6294 67.3905 20.6294C67.5192 20.6294 67.6448 20.5804 67.7428 20.4823C67.9358 20.2893 67.9358 19.9738 67.7398 19.7808C65.914 17.9641 62.5349 18.6687 61.3769 19.6429C61.1686 19.8206 61.141 20.1331 61.3156 20.3414C61.4933 20.5497 61.8058 20.5773 62.0141 20.4027L62.0172 20.4027ZM65.9078 23.3835C65.9078 24.3791 65.3441 25.1572 64.6212 25.1572C63.8982 25.1572 63.3345 24.3791 63.3345 23.3835C63.3345 22.3878 63.9013 21.6097 64.6212 21.6097C65.3442 21.6097 65.9078 22.3878 65.9078 23.3835ZM64.9153 23.3835C64.9153 22.8933 64.6947 22.6115 64.6212 22.6023C64.5446 22.6115 64.3271 22.8964 64.3271 23.3835C64.3271 23.8736 64.5446 24.1555 64.6212 24.1646C64.6978 24.1554 64.9153 23.8705 64.9153 23.3835ZM82.506 57.569L82.503 57.572C82.503 57.5751 82.4999 57.5751 82.4999 57.5782C80.6342 60.2097 74.0849 61.3064 68.9167 61.7628C66.3648 61.9865 63.5862 62.0998 60.7769 62.0998C57.1865 62.0998 53.544 61.9191 50.2444 61.5576C49.1232 61.4351 47.7446 61.2574 46.3079 61.0123C46.2895 61.0123 46.2742 61.0092 46.2558 61.0062C46.2497 61.0062 46.2466 61 46.2405 61C42.9074 60.4241 39.2588 59.4744 37.7274 57.9549C37.7182 57.9458 37.7152 57.9335 37.706 57.9243C37.6845 57.8967 37.6662 57.8692 37.6508 57.8385C37.6355 57.811 37.6202 57.7834 37.611 57.7558C37.6018 57.7252 37.5957 57.6976 37.5926 57.667C37.5896 57.6333 37.5865 57.5996 37.5896 57.5659C37.5896 57.5536 37.5865 57.5414 37.5865 57.526C38.2758 53.1637 39.7677 49.5581 42.0255 46.81C43.0855 45.5203 44.314 44.4359 45.6895 43.5474C43.1989 43.2227 40.4509 42.1412 39.2163 39.8682C39.1428 39.7334 39.1367 39.5741 39.198 39.4332C39.2592 39.2922 39.3818 39.1881 39.5288 39.1513C42.6811 38.3395 43.4287 33.9924 44.0291 30.5002C44.2343 29.3147 44.4182 28.2854 44.6724 27.4827C44.5162 27.3142 44.3661 27.1304 44.2343 26.9129C43.1499 25.1207 43.2173 21.9653 44.2466 20.6144C42.1389 19.2297 41.0575 17.6275 41.0575 15.8476C41.0575 13.4765 43.1223 11.2831 46.872 9.67471C47.4541 9.42351 48.0791 9.19987 48.7193 8.98543C48.6152 8.58105 48.5417 8.17357 48.5417 7.76004C48.5417 5.73204 49.8069 3.8449 52.1015 2.44187C54.3194 1.08778 57.2603 0.343371 60.3824 0.343371C63.501 0.343371 66.442 1.0878 68.6633 2.44187C70.9578 3.84192 72.2231 5.73204 72.2231 7.76004C72.2231 8.1736 72.1495 8.58107 72.0454 8.98543C72.6857 9.19987 73.3076 9.4235 73.8927 9.67471C77.6424 11.2861 79.7072 13.4796 79.7072 15.8476C79.7072 17.7869 78.3378 19.5851 75.7645 21.077C76.2915 22.6179 76.0556 24.8788 75.2284 26.2114C74.9558 26.6526 74.6311 26.9865 74.2665 27.2162C74.4687 28.4447 74.5667 29.6639 74.6555 30.8434C74.9312 34.4522 75.1671 37.5677 78.3409 39.3541C78.5737 39.4858 78.6595 39.7768 78.54 40.0127C77.6761 41.6945 75.4214 42.4849 73.7548 42.7944C75.4336 43.7533 76.9132 44.9755 78.154 46.4889C80.4087 49.2338 81.9006 52.8365 82.5899 57.1955V57.2016C82.593 57.2231 82.5868 57.2415 82.5868 57.2629C82.5868 57.3058 82.5899 57.3487 82.5807 57.3916C82.5715 57.4314 82.5501 57.4682 82.5317 57.5049C82.5225 57.5233 82.5194 57.5447 82.5041 57.5631L82.506 57.569ZM73.3122 27.5588C72.9262 27.6109 72.5158 27.5772 72.0838 27.4455C71.8693 28.4901 71.3026 30.6897 69.9853 32.9169C69.1612 34.3107 67.9573 35.8364 66.2417 37.025C66.2448 37.2609 66.2448 37.4968 66.2448 37.7357C66.2387 38.8355 66.2264 40.4959 66.7779 40.551C67.0413 40.5847 67.2925 40.6368 67.5499 40.6797C67.5928 40.6797 67.6356 40.6736 67.6785 40.6828C67.703 40.6889 67.7184 40.7012 67.7398 40.7103C68.7661 40.885 69.7433 41.1239 70.6746 41.4333C70.7114 41.4395 70.7481 41.4364 70.7818 41.4517C70.8094 41.4609 70.8278 41.4823 70.8523 41.4977C71.2751 41.6416 71.6917 41.7979 72.093 41.9694C72.9293 42.0246 76.1613 41.5314 77.3989 39.9506C74.1883 37.8736 73.931 34.4946 73.6584 30.9223C73.5757 29.8226 73.4838 28.689 73.3092 27.5586L73.3122 27.5588ZM50.1611 42.5757C51.5643 46.9197 53.7515 50.265 57.0172 52.9976L59.2781 47.1157C59.1188 47.0575 58.9258 46.984 58.696 46.8951C58.0802 46.6562 57.1336 46.261 56.1104 45.7371C53.7791 44.5485 52.3025 43.3476 51.699 42.1681C51.1629 42.2845 50.6544 42.4254 50.1612 42.5786L50.1611 42.5757ZM53.724 41.77C53.6597 41.8159 53.5831 41.8435 53.5034 41.8527C53.2369 41.8864 52.998 41.9415 52.7406 41.9844C54.1161 44.086 58.9503 46.0098 60.0072 46.3162C61.7932 45.5411 65.8462 43.4549 66.8724 41.5708C66.802 41.5616 66.7376 41.5433 66.6672 41.5341C65.2304 41.387 65.2427 39.4417 65.2549 37.7261V37.6281C63.665 38.5043 61.7074 39.0894 59.2933 39.1016H59.2566C57.7524 39.1016 56.2758 38.6605 54.8972 37.9314C54.8972 38.0723 54.8942 38.2101 54.8942 38.3449C54.8911 39.7511 54.888 40.9642 53.7209 41.7699L53.724 41.77ZM60.623 47.128L63.3587 52.4799C65.9749 50.1792 68.1316 46.8094 69.9421 42.236C69.2957 42.0399 68.6064 41.8776 67.8895 41.7428C66.8234 44.2058 62.0843 46.4755 60.623 47.128ZM49.6615 8.68165C52.8046 7.75953 56.5054 7.26325 60.3806 7.26325C64.2559 7.26325 67.9567 7.7626 71.0998 8.68165C71.1764 8.3753 71.2285 8.06895 71.2285 7.75953C71.2285 4.2151 66.3637 1.33541 60.3807 1.33541C54.4008 1.33541 49.5329 4.21816 49.5329 7.75953C49.5329 8.06894 49.5849 8.37835 49.6615 8.68165ZM45.1122 19.9921C45.4492 19.8972 45.8812 19.9094 46.3958 20.2127C46.3039 19.1803 46.2671 18.1816 46.2916 17.235C46.2916 17.2074 46.3039 17.186 46.307 17.1614C46.3131 17.1277 46.3162 17.094 46.3284 17.0603C46.3437 17.0205 46.3682 16.9868 46.3958 16.9531C46.4081 16.9378 46.4111 16.9194 46.4234 16.9072C46.4264 16.9041 46.4326 16.898 46.4356 16.8949L46.4479 16.8827C48.8742 14.3338 53.497 12.5999 58.5269 12.3518C60.1199 12.2722 61.6731 12.3641 63.1712 12.5816C63.3764 12.4345 63.6613 12.4621 63.8298 12.6582C63.839 12.6673 63.8421 12.6827 63.8482 12.6919C65.6097 13.0013 67.2701 13.5129 68.7866 14.2083C68.8877 14.2236 68.9826 14.2634 69.0592 14.3369C70.3949 14.9772 71.6233 15.7462 72.6772 16.6652C72.6833 16.6683 72.6833 16.6744 72.6894 16.6806C72.717 16.7051 72.7354 16.7357 72.7538 16.7663C72.7691 16.7908 72.7905 16.8123 72.7997 16.8368C72.812 16.8644 72.8151 16.8919 72.8212 16.9195C72.8304 16.9532 72.8396 16.9869 72.8426 17.0237C72.8426 17.0298 72.8457 17.0359 72.8457 17.042C72.8396 18.0254 72.7752 18.9843 72.668 19.8911C73.7433 19.1895 74.4999 19.4836 74.9013 19.7838C75.0514 19.8972 75.1801 20.0381 75.2996 20.1944C77.493 18.9108 78.7062 17.3791 78.7062 15.8442C78.7062 13.9234 76.8068 12.0057 73.4922 10.5812C69.9968 9.08003 65.3399 8.25288 60.3771 8.25288C55.4144 8.25288 50.7575 9.08003 47.2621 10.5812C43.9474 12.0057 42.0481 13.9234 42.0481 15.8442C42.0481 17.3545 43.0835 18.7453 45.1085 19.9891L45.1122 19.9921ZM71.663 20.0197C71.7764 19.1527 71.8377 18.2092 71.853 17.2656C71.225 16.7326 70.5572 16.2577 69.8556 15.8411C70.1803 16.5488 70.4683 17.2503 70.7317 17.9028C71.0442 18.6779 71.3659 19.4683 71.6661 20.0197H71.663ZM56.9952 14.7964C58.7659 14.5268 60.4539 14.2572 61.958 13.4179C56.0608 12.8787 50.0656 14.6585 47.2902 17.4555C47.2748 18.3256 47.3024 19.2384 47.3913 20.1851C50.1943 15.838 53.794 15.2866 56.9983 14.7964H56.9952ZM45.0871 26.401C45.2342 26.6461 45.3996 26.8391 45.5803 26.9892L45.5834 26.9922C46.1318 27.4395 46.8334 27.4426 47.7094 27.0106C47.8534 26.9402 48.025 26.9432 48.1659 27.0198C48.3068 27.0964 48.4048 27.2373 48.4232 27.3966C49.0145 32.2308 54.1305 38.1126 59.2678 38.1126H59.2985C63.5935 38.0942 66.902 36.1857 69.1259 32.439C70.8108 29.6022 71.2153 26.7195 71.2214 26.692C71.2428 26.5327 71.3409 26.3948 71.4818 26.3182C71.6227 26.2447 71.7912 26.2416 71.9352 26.3121C72.9982 26.8451 73.8008 26.6399 74.389 25.6902C75.3785 24.091 75.1885 21.2328 74.3155 20.5773C73.7273 20.1361 72.8389 20.9572 72.361 21.4872C72.3242 21.527 72.2813 21.5546 72.2384 21.5791C72.2292 21.5852 72.2231 21.5944 72.2139 21.6005H72.2109C72.1465 21.6312 72.0791 21.6465 72.0087 21.6465C72.0056 21.6465 72.0025 21.6495 71.9964 21.6495C71.9811 21.6495 71.9688 21.6403 71.9535 21.6403C71.9015 21.6342 71.8494 21.625 71.8004 21.6036C71.7912 21.6005 71.7789 21.6005 71.7697 21.5975C70.9977 21.2023 70.5014 19.9769 69.8152 18.2766C69.4078 17.2657 68.9452 16.1291 68.3723 15.0692C66.8222 14.3585 65.1587 13.8836 63.4616 13.611C61.5469 15.0906 59.3167 15.4491 57.1539 15.7799C53.7228 16.3037 50.1753 16.8491 47.5162 21.9589C47.4304 22.1244 47.2589 22.2254 47.0751 22.2254C47.0475 22.2254 47.0199 22.2224 46.9893 22.2193C46.7779 22.1826 46.6125 22.0141 46.5818 21.7996C46.5757 21.7445 46.5696 21.6924 46.5635 21.6403C46.1621 21.19 45.6199 20.7427 45.2217 21.0337C44.3302 21.6832 44.1157 24.7896 45.093 26.4041L45.0871 26.401ZM47.2714 42.6617C47.9147 42.343 48.5887 42.0643 49.2902 41.8223C49.3209 41.8039 49.3515 41.7824 49.3883 41.7702C49.4097 41.7641 49.4342 41.7671 49.4557 41.7641C50.2123 41.5098 50.9997 41.2984 51.8176 41.133C51.8237 41.1299 51.8268 41.1269 51.8329 41.1238C51.8819 41.1085 51.9279 41.1054 51.9769 41.1054C52.3966 41.0258 52.8193 40.943 53.2544 40.8848C53.8732 40.3978 53.9038 39.6962 53.9069 38.3421C53.9069 38.0419 53.9099 37.7019 53.9222 37.3496C50.6933 35.2358 48.1782 31.5381 47.5318 28.1472C46.7935 28.3861 46.1134 28.3616 45.5222 28.0982C45.3353 28.7936 45.1791 29.6759 45.0106 30.6684C44.4316 34.0352 43.6534 38.5689 40.4153 39.9014C41.8154 41.7854 44.7716 42.6432 47.2683 42.6616L47.2714 42.6617ZM81.5761 57.1429C80.6724 51.6653 78.0225 45.1893 70.8876 42.5542C68.9025 47.5845 66.4915 51.2241 63.523 53.6443C63.4066 53.7393 63.2534 53.776 63.1064 53.7454C62.9593 53.7148 62.8337 53.6198 62.7663 53.485L59.9877 48.0504L57.7054 53.9874C57.6502 54.1344 57.5246 54.2447 57.3745 54.2876C57.3316 54.2999 57.2887 54.306 57.2428 54.306C57.1325 54.306 57.0253 54.2692 56.9364 54.1988C53.2235 51.264 50.7727 47.6551 49.2349 42.9009C42.1705 45.5416 39.5298 51.9629 38.62 57.4126C39.7933 58.4113 42.3666 59.2905 45.9601 59.94L47.1518 53.7794C47.2039 53.5098 47.4643 53.3352 47.7339 53.3872C48.0035 53.4393 48.1781 53.6997 48.126 53.9693L46.9404 60.1085C48.0066 60.28 49.1462 60.4363 50.3593 60.568C56.1769 61.2022 63.0822 61.2787 68.8355 60.7702C70.2386 60.6477 71.5436 60.4884 72.7537 60.3046L71.029 53.5587C70.9616 53.2922 71.1209 53.0226 71.3874 52.9552C71.6539 52.8878 71.9235 53.0471 71.9909 53.3137L73.7402 60.1483C77.7932 59.4467 80.5503 58.402 81.5827 57.143L81.5761 57.1429ZM56.7616 30.6806C56.5656 30.8736 56.5625 31.1861 56.7555 31.3822C57.65 32.2982 59.1359 32.4514 60.0365 32.4514H60.1927C61.3752 32.4268 62.8243 32.1205 63.3971 31.4863C63.5809 31.2841 63.5656 30.9686 63.3604 30.7848C63.1582 30.601 62.8426 30.6163 62.6588 30.8216C62.3984 31.1095 61.3722 31.4373 60.1682 31.4618C58.9489 31.4863 57.9625 31.2045 57.4601 30.6929C57.2671 30.4968 56.9546 30.4938 56.7586 30.6868L56.7616 30.6806ZM62.2146 57.1703C62.2146 58.0495 61.4978 58.7664 60.6185 58.7664C59.7393 58.7664 59.0224 58.0496 59.0224 57.1703C59.0224 56.291 59.7393 55.5742 60.6185 55.5742C61.4977 55.5742 62.2146 56.291 62.2146 57.1703ZM61.2221 57.1703C61.2221 56.8364 60.9525 56.5668 60.6186 56.5668C60.2846 56.5668 60.0151 56.8364 60.0151 57.1703C60.0151 57.5042 60.2846 57.7738 60.6186 57.7738C60.9525 57.7738 61.2221 57.5042 61.2221 57.1703ZM58.7958 52.7803C58.7958 51.9011 59.5126 51.1842 60.3919 51.1842C61.2711 51.1842 61.988 51.901 61.988 52.7803C61.988 53.6595 61.2711 54.3764 60.3919 54.3764C59.5126 54.3764 58.7958 53.6595 58.7958 52.7803ZM59.7883 52.7803C59.7883 53.1142 60.0579 53.3838 60.3918 53.3838C60.7257 53.3838 60.9953 53.1142 60.9953 52.7803C60.9953 52.4464 60.7257 52.1768 60.3918 52.1768C60.0579 52.1768 59.7883 52.4464 59.7883 52.7803Z",
+p35fc7b00: "M25.1032 34.8507C23.4611 34.8507 21.7609 33.4109 21.6108 30.1666C21.6016 29.9981 21.6629 29.8327 21.7793 29.7101C21.8957 29.5876 22.055 29.5171 22.2235 29.5171L28.0656 29.4773C28.2279 29.4773 28.3903 29.5416 28.5067 29.6581C28.6231 29.7745 28.6905 29.9338 28.6905 30.0992C28.6905 33.1658 26.9168 34.8108 25.1644 34.8507H25.1001L25.1032 34.8507ZM27.4223 30.7211C27.2231 32.5746 26.154 33.5855 25.1399 33.61C24.1841 33.6315 23.1702 32.7492 22.9067 30.7518L27.4223 30.7211Z",
+p3c4db480: "M31.8796 22.7191C31.8796 23.8251 31.2393 24.6889 30.4244 24.6889C29.6095 24.6889 28.9692 23.8219 28.9692 22.7191C28.9692 21.6132 29.6095 20.7493 30.4244 20.7493C31.2393 20.7493 31.8796 21.6163 31.8796 22.7191ZM30.4244 22.0053C30.5041 22.088 30.6389 22.3362 30.6389 22.7191C30.6389 23.1051 30.5072 23.3532 30.4244 23.4329C30.3448 23.3502 30.21 23.102 30.21 22.7191C30.21 22.3331 30.3417 22.085 30.4244 22.0053Z",
+p3eab2600: "M21.2156 22.9825C21.2156 24.0885 20.5477 24.9523 19.6961 24.9523C18.8445 24.9523 18.1766 24.0853 18.1766 22.9825C18.1766 21.8766 18.8444 21.0127 19.6961 21.0127C20.5477 21.0127 21.2156 21.8797 21.2156 22.9825ZM19.693 22.2504C19.7604 22.2657 19.9749 22.5169 19.9749 22.9825C19.9749 23.4421 19.7666 23.6902 19.6961 23.7116C19.6256 23.6933 19.4173 23.4421 19.4173 22.9825C19.4173 22.5138 19.6318 22.2657 19.693 22.2504Z",
+}
diff --git a/src/imports/svg-5q6zbixxri.ts b/src/imports/svg-5q6zbixxri.ts
new file mode 100644
index 0000000..49aa716
--- /dev/null
+++ b/src/imports/svg-5q6zbixxri.ts
@@ -0,0 +1,8 @@
+export default {
+p19680b80: "M39.1018 14.3339L34.7693 16.1394C34.3059 16.345 33.8404 16.4498 33.3769 16.6029C33.7376 16.0871 33.9452 15.5188 33.9452 14.8498C33.9452 13.147 32.5527 11.7546 30.85 11.7546C29.1472 11.7546 27.7547 13.147 27.7547 14.8498C27.7547 15.5208 27.9603 16.0871 28.323 16.6029C27.8596 16.5002 27.394 16.345 26.9306 16.1394L22.4933 14.2815C21.8747 14.1263 21.2036 14.2815 20.7905 14.6422C20.327 14.2291 19.656 14.0739 18.985 14.2815L14.6525 16.087C14.189 16.2926 13.7235 16.3974 13.26 16.5505C13.6207 16.0346 13.8283 15.4664 13.8283 14.7974C13.8283 13.0946 12.4359 11.7022 10.7331 11.7022C9.03032 11.7022 7.63788 13.0946 7.63788 14.7974C7.63788 15.4684 7.84342 16.0346 8.20616 16.5505C7.74268 16.4477 7.27718 16.2926 6.81373 16.087L2.37642 14.2291C1.49985 13.9711 0.570876 14.3842 0.260528 15.1581C0.105365 15.5712 0.105365 16.087 0.31292 16.5001C0.570855 16.9636 0.983963 17.3264 1.44742 17.4795L6.09025 19.4402C6.60612 19.6457 6.96682 20.1616 7.01923 20.7299L7.32956 25.1672L3.9764 36.0531C3.82124 36.5689 3.87363 37.1876 4.13156 37.6531C4.3895 38.1689 4.85296 38.5296 5.36883 38.6848C5.57437 38.7372 5.78193 38.7876 5.98746 38.7876C6.86402 38.7876 7.74059 38.2193 7.99853 37.2924L10.6806 28.8832L13.3627 37.2924C13.5179 37.8083 13.8786 38.2717 14.3945 38.5297C14.7048 38.6848 15.0131 38.7876 15.3738 38.7876C15.5794 38.7876 15.7869 38.7352 15.9924 38.6848C16.5083 38.5297 16.9718 38.1689 17.2297 37.6531C17.4876 37.1372 17.54 36.5689 17.3849 36.0531L14.0317 25.1672L14.342 20.7299C14.3944 20.1616 14.7551 19.6457 15.271 19.4402L19.8614 17.5319C20.2221 17.4291 20.5325 17.2739 20.7904 17.016C21.0484 17.2739 21.3063 17.4795 21.6166 17.5319L26.2595 19.4926C26.7753 19.6981 27.136 20.214 27.1884 20.7823L27.4988 25.2196L24.1456 36.1055C23.9905 36.6213 24.0428 37.24 24.3008 37.7055C24.5587 38.2214 25.0222 38.5821 25.538 38.7372C25.7436 38.7896 25.9511 38.84 26.1567 38.84C27.0332 38.84 27.9098 38.2717 28.1677 37.3448L30.8499 28.9356L33.532 37.3448C33.6871 37.8607 34.0478 38.3241 34.5637 38.5821C34.874 38.7372 35.1823 38.84 35.543 38.84C35.7486 38.84 35.9561 38.7876 36.1617 38.7372C36.6775 38.5821 37.141 38.2214 37.3989 37.7055C37.6569 37.1896 37.7092 36.6213 37.5541 36.1055L34.2009 25.2196L34.5113 20.7823C34.5636 20.214 34.9244 19.6981 35.4402 19.4926L40.0307 17.5843C40.5465 17.4291 41.01 17.0684 41.2679 16.605C41.4735 16.1415 41.5258 15.676 41.3203 15.2629C40.9072 14.4891 39.9784 14.076 39.1018 14.3339ZM10.6764 12.7863C11.8109 12.7863 12.7922 13.7153 12.7922 14.9022C12.7922 16.0367 11.9157 16.9657 10.7812 16.9657H10.626C9.49151 16.9133 8.61495 15.9863 8.61495 14.9022C8.56054 13.7153 9.48944 12.7863 10.6764 12.7863ZM20.1673 16.1394C20.0646 16.345 19.857 16.5525 19.5487 16.6029L14.9059 18.5636C14.0293 18.9243 13.4107 19.7506 13.3583 20.7299L12.9976 25.272V25.3244V25.4271L16.4031 36.4157C16.5059 36.6736 16.4555 36.984 16.3507 37.2419C16.1956 37.4998 15.99 37.7054 15.6797 37.8102C15.4217 37.9129 15.1114 37.8626 14.8535 37.7578C14.5955 37.6026 14.39 37.3971 14.2852 37.0867L11.1376 27.1299V27.0775C11.1376 27.0251 11.0852 27.0251 11.0852 26.9748L11.0328 26.9224C11.0328 26.9224 10.9804 26.87 10.93 26.87C10.8776 26.87 10.8776 26.8176 10.8272 26.8176H10.7748H10.7224H10.6197H10.5169H10.4645H10.4121C10.3597 26.8176 10.3597 26.87 10.3093 26.87C10.257 26.87 10.257 26.9224 10.2066 26.9224L10.1542 26.9748C10.1542 27.0272 10.1018 27.0272 10.1018 27.0775V27.1299L6.95416 37.0867C6.74861 37.655 6.12794 38.0157 5.56172 37.8081C5.30379 37.7054 5.04585 37.5502 4.89068 37.2398C4.73551 36.9819 4.73551 36.6716 4.83829 36.4136L8.35466 25.4777V25.3749V25.2722L8.04433 20.7321C7.99194 19.7528 7.37329 18.9265 6.49672 18.5658L1.75113 16.6051C1.4932 16.5527 1.28766 16.3996 1.18285 16.1417C1.08008 15.9865 1.08008 15.7809 1.13046 15.6258C1.23323 15.3678 1.64633 15.1623 2.00703 15.2651L6.33951 17.0706C7.6816 17.6389 9.12438 17.8968 10.5692 17.9472H10.672H10.7748C12.2196 17.9472 13.6645 17.6369 15.0045 17.0706L19.2866 15.2651C19.6997 15.1623 20.1128 15.3678 20.2156 15.5754C20.272 15.7789 20.2197 15.9339 20.1673 16.1394ZM30.7953 12.7863C31.9298 12.7863 32.9112 13.7153 32.9112 14.9022C32.9112 16.0367 32.0346 16.9657 30.9001 16.9657H30.7449C29.6104 16.9133 28.7339 15.9863 28.7339 14.9022C28.7319 13.7153 29.6608 12.7863 30.7953 12.7863ZM40.2863 16.1394C40.1835 16.345 39.9759 16.5525 39.6676 16.6029L35.0248 18.5636C34.1482 18.9243 33.5296 19.7506 33.4772 20.7299L33.1165 25.272V25.3244V25.4271L36.522 36.4157C36.6248 36.6736 36.5744 36.984 36.4697 37.2419C36.3145 37.4998 36.1089 37.7054 35.7986 37.8102C35.5407 37.9129 35.2303 37.8626 34.9724 37.7578C34.7145 37.6026 34.5089 37.3971 34.4041 37.0867L31.2565 27.1299V27.0775C31.2565 27.0251 31.2041 27.0251 31.2041 26.9748L31.1517 26.9224C31.1517 26.9224 31.0993 26.87 31.0489 26.87C30.9965 26.87 30.9965 26.8176 30.9462 26.8176H30.8938H30.8414H30.7386H30.6358H30.5834H30.531C30.4786 26.8176 30.4787 26.87 30.4283 26.87C30.3759 26.87 30.3759 26.9224 30.3255 26.9224L30.2731 26.9748C30.2731 27.0272 30.2207 27.0272 30.2207 27.0775V27.1299L27.0731 37.0867C26.8675 37.655 26.2469 38.0157 25.6806 37.8081C25.4227 37.7054 25.1648 37.5502 25.0096 37.2398C24.8544 36.9819 24.8544 36.6716 24.9572 36.4136L28.4736 25.4777V25.3749V25.2722L28.1633 20.7321C28.1109 19.7528 27.4922 18.9265 26.6157 18.5658L21.8701 16.6051C21.6121 16.5527 21.4066 16.3996 21.3018 16.1417C21.199 15.9865 21.199 15.7809 21.2494 15.6258C21.3522 15.3678 21.7653 15.1623 22.126 15.2651L26.4584 17.0706C27.8005 17.6389 29.2433 17.8968 30.6882 17.9472H30.7909H30.8937C32.3385 17.9472 33.7834 17.6369 35.1234 17.0706L39.4056 15.2651C39.8186 15.1623 40.2318 15.3678 40.3345 15.5754C40.3909 15.7789 40.391 15.9339 40.2863 16.1394Z",
+p1ff00f00: "M20.7359 5.41146C20.9939 5.41146 21.2518 5.20592 21.2518 4.89559V0.66587C21.2518 0.407935 21.0462 0.15 20.7359 0.15C20.4256 0.15 20.2201 0.355543 20.2201 0.66587V4.89559C20.2201 5.2039 20.478 5.41146 20.7359 5.41146Z",
+p24992980: "M24.8105 6.18535C24.8629 6.18535 24.9133 6.23774 24.9657 6.23774C25.1712 6.23774 25.3788 6.13497 25.4291 5.92741L26.874 1.95563C26.9768 1.69769 26.8216 1.38735 26.5637 1.28458C26.3057 1.18181 25.9954 1.33698 25.8926 1.59491L24.4478 5.5667C24.4498 5.77224 24.5526 6.08057 24.8105 6.18535Z",
+p2c621c00: "M15.9907 5.8221C16.0431 6.02765 16.2486 6.13243 16.4541 6.13243C16.5065 6.13243 16.5569 6.13243 16.6093 6.08004C16.8672 5.97727 17.0224 5.71933 16.9196 5.46141L15.4748 1.48962C15.372 1.23169 15.1141 1.07652 14.8037 1.17929C14.5458 1.28207 14.3906 1.54 14.4934 1.85034L15.9907 5.8221Z",
+p351aec00: "M12.3268 8.09354C12.4296 8.19631 12.5847 8.2487 12.6875 8.2487C12.7903 8.2487 12.893 8.19631 12.9978 8.14593C13.2034 7.99077 13.2558 7.63006 13.0502 7.42454L10.3157 4.17415C10.1605 3.9686 9.79982 3.91621 9.5943 4.12176C9.38876 4.27692 9.33636 4.63762 9.54191 4.84315L12.3268 8.09354Z",
+p37896700: "M28.7321 8.40134C28.8873 8.40134 29.0424 8.34895 29.0928 8.24618L31.8273 4.99579C31.9825 4.79024 31.9825 4.47992 31.7749 4.2744C31.5694 4.11923 31.2591 4.11923 31.0535 4.32679L28.319 7.57718C28.1638 7.78272 28.1638 8.09305 28.3714 8.29857C28.5266 8.35096 28.6293 8.40134 28.7321 8.40134Z",
+}
diff --git a/src/imports/svg-70pmm871bv.ts b/src/imports/svg-70pmm871bv.ts
new file mode 100644
index 0000000..fb0d4ca
--- /dev/null
+++ b/src/imports/svg-70pmm871bv.ts
@@ -0,0 +1,14 @@
+export default {
+p17231c80: "M14.7116 24.079H12.2935C11.8127 24.0795 11.3517 24.2707 11.0117 24.6107C10.6717 24.9507 10.4805 25.4117 10.4799 25.8925V36.7739C10.4805 37.2547 10.6717 37.7157 11.0117 38.0557C11.3517 38.3957 11.8127 38.5869 12.2935 38.5874H14.7116C15.1925 38.5869 15.6535 38.3957 15.9935 38.0557C16.3335 37.7157 16.5247 37.2547 16.5252 36.7739V25.8925C16.5247 25.4117 16.3335 24.9507 15.9935 24.6107C15.6535 24.2707 15.1925 24.0795 14.7116 24.079ZM15.3162 36.7739C15.316 36.9342 15.2522 37.0878 15.1389 37.2011C15.0255 37.3144 14.8719 37.3782 14.7116 37.3784H12.2935C12.1333 37.3782 11.9796 37.3144 11.8663 37.2011C11.753 37.0878 11.6892 36.9342 11.689 36.7739V25.8925C11.6892 25.7323 11.753 25.5786 11.8663 25.4653C11.9796 25.352 12.1333 25.2882 12.2935 25.288H14.7116C14.8719 25.2882 15.0255 25.352 15.1389 25.4653C15.2522 25.5786 15.316 25.7323 15.3162 25.8925V36.7739Z",
+p1b51ae80: "M28.0117 7.75711H32.2434C32.3231 7.75755 32.4021 7.74223 32.4758 7.71205C32.5495 7.68186 32.6166 7.63741 32.6731 7.58123C32.7295 7.52505 32.7744 7.45826 32.805 7.3847C32.8355 7.31114 32.8513 7.23226 32.8513 7.15259C32.8513 7.07293 32.8355 6.99404 32.805 6.92048C32.7744 6.84692 32.7295 6.78013 32.6731 6.72396C32.6166 6.66778 32.5495 6.62332 32.4758 6.59313C32.4021 6.56295 32.3231 6.54764 32.2434 6.54807H28.0117C27.9321 6.54764 27.8531 6.56295 27.7794 6.59313C27.7057 6.62332 27.6386 6.66778 27.5821 6.72396C27.5257 6.78013 27.4808 6.84692 27.4502 6.92048C27.4197 6.99404 27.4039 7.07293 27.4039 7.15259C27.4039 7.23226 27.4197 7.31114 27.4502 7.3847C27.4808 7.45826 27.5257 7.52505 27.5821 7.58123C27.6386 7.63741 27.7057 7.68186 27.7794 7.71205C27.8531 7.74223 27.9321 7.75755 28.0117 7.75711Z",
+p1c5d9f00: "M28.0117 4.73446H35.2661C35.3458 4.73489 35.4247 4.71958 35.4985 4.68939C35.5722 4.65921 35.6392 4.61475 35.6957 4.55857C35.7522 4.50239 35.797 4.4356 35.8276 4.36204C35.8582 4.28848 35.8739 4.2096 35.8739 4.12994C35.8739 4.05027 35.8582 3.97139 35.8276 3.89783C35.797 3.82427 35.7522 3.75748 35.6957 3.7013C35.6392 3.64512 35.5722 3.60066 35.4985 3.57048C35.4247 3.54029 35.3458 3.52498 35.2661 3.52542H28.0117C27.9321 3.52498 27.8531 3.54029 27.7794 3.57048C27.7057 3.60066 27.6386 3.64512 27.5821 3.7013C27.5257 3.75748 27.4808 3.82427 27.4502 3.89783C27.4197 3.97139 27.4039 4.05027 27.4039 4.12994C27.4039 4.2096 27.4197 4.28848 27.4502 4.36204C27.4808 4.4356 27.5257 4.50239 27.5821 4.55857C27.6386 4.61475 27.7057 4.65921 27.7794 4.68939C27.8531 4.71958 27.9321 4.73489 28.0117 4.73446Z",
+p1e3ba380: "M8.06219 33.751H0.80784C0.728175 33.7506 0.649209 33.7659 0.575482 33.7961C0.501755 33.8263 0.434721 33.8707 0.378235 33.9269C0.321748 33.9831 0.276922 34.0499 0.246334 34.1234C0.215746 34.197 0.2 34.2759 0.2 34.3555C0.2 34.4352 0.215746 34.5141 0.246334 34.5876C0.276922 34.6612 0.321748 34.728 0.378235 34.7842C0.434721 34.8403 0.501755 34.8848 0.575482 34.915C0.649209 34.9452 0.728175 34.9605 0.80784 34.9601H8.06219C8.14185 34.9605 8.22082 34.9452 8.29454 34.915C8.36827 34.8848 8.4353 34.8403 8.49179 34.7842C8.54828 34.728 8.5931 34.6612 8.62369 34.5876C8.65428 34.5141 8.67003 34.4352 8.67003 34.3555C8.67003 34.2759 8.65428 34.197 8.62369 34.1234C8.5931 34.0499 8.54828 33.9831 8.49179 33.9269C8.4353 33.8707 8.36827 33.8263 8.29454 33.7961C8.22082 33.7659 8.14185 33.7506 8.06219 33.751Z",
+p2009e400: "M8.0622 30.7288H3.8305C3.75083 30.7284 3.67186 30.7437 3.59814 30.7739C3.52441 30.8041 3.45738 30.8485 3.40089 30.9047C3.3444 30.9609 3.29958 31.0277 3.26899 31.1013C3.2384 31.1748 3.22266 31.2537 3.22266 31.3334C3.22266 31.413 3.2384 31.4919 3.26899 31.5655C3.29958 31.639 3.3444 31.7058 3.40089 31.762C3.45738 31.8182 3.52441 31.8626 3.59814 31.8928C3.67186 31.923 3.75083 31.9383 3.8305 31.9379H8.0622C8.14186 31.9383 8.22083 31.923 8.29456 31.8928C8.36828 31.8626 8.43532 31.8182 8.4918 31.762C8.54829 31.7058 8.59312 31.639 8.6237 31.5655C8.65429 31.4919 8.67004 31.413 8.67004 31.3334C8.67004 31.2537 8.65429 31.1748 8.6237 31.1013C8.59312 31.0277 8.54829 30.9609 8.4918 30.9047C8.43532 30.8485 8.36828 30.8041 8.29456 30.7739C8.22083 30.7437 8.14186 30.7284 8.0622 30.7288Z",
+p2d70fa80: "M36.4821 24.1381C36.2262 23.8617 35.9156 23.6414 35.5701 23.4913C35.2246 23.3412 34.8516 23.2646 34.4749 23.2662H27.9491L28.29 21.6911C28.5103 20.5969 28.3703 19.4607 27.8908 18.4528C27.4113 17.4448 26.6181 16.6193 25.6301 16.0999C25.4354 15.9928 25.2187 15.9314 24.9967 15.9205C24.7747 15.9096 24.5531 15.9495 24.3488 16.037C24.1569 16.1169 23.9861 16.2399 23.8496 16.3966C23.7131 16.5532 23.6146 16.7393 23.5618 16.9403L22.312 21.7915C22.1662 22.3239 21.9035 22.8171 21.5431 23.2353C21.1826 23.6534 20.7335 23.986 20.2283 24.2087C19.3924 24.5921 18.5219 24.8953 17.6287 25.1142C17.6977 25.368 17.7331 25.6297 17.7341 25.8926V26.3347C18.7667 26.0935 19.7723 25.7488 20.7358 25.3058C21.4037 25.0083 21.997 24.5656 22.4722 24.0098C22.9474 23.454 23.2926 22.7992 23.4827 22.0931L24.7325 17.2419C24.7402 17.2202 24.7526 17.2005 24.7689 17.1842C24.7851 17.1679 24.8047 17.1553 24.8264 17.1475C24.8609 17.1324 24.8985 17.1255 24.9361 17.1272C24.9738 17.1289 25.0105 17.1391 25.0436 17.1572C25.8037 17.5516 26.4156 18.1816 26.7877 18.9528C27.1599 19.724 27.2723 20.595 27.1081 21.4355L26.6087 23.7429C26.5896 23.8311 26.5905 23.9224 26.6114 24.0102C26.6322 24.098 26.6724 24.18 26.7291 24.2503C26.7858 24.3205 26.8574 24.3772 26.9389 24.4161C27.0203 24.455 27.1094 24.4752 27.1996 24.4752H34.4705C34.6787 24.4727 34.8851 24.5134 35.0768 24.5947C35.2685 24.6759 35.4413 24.7961 35.5842 24.9475C35.6868 25.0573 35.7649 25.1878 35.8132 25.3301C35.8616 25.4724 35.8791 25.6234 35.8646 25.7731C35.8091 26.3501 35.2064 26.782 34.4599 26.782H34.446L30.8117 26.7558L30.8076 26.7557H30.8035H30.799C30.7929 26.7557 30.7872 26.7573 30.7811 26.7575C30.666 26.7594 30.554 26.7946 30.4586 26.8591C30.3633 26.9235 30.2887 27.0143 30.2441 27.1204C30.2381 27.1342 30.235 27.1494 30.23 27.1638C30.2214 27.1862 30.2142 27.209 30.2083 27.2323C30.2048 27.2529 30.2024 27.2737 30.2011 27.2946C30.199 27.3137 30.1948 27.3321 30.1945 27.3517L30.1947 27.354L30.1945 27.3558C30.1944 27.3729 30.1979 27.389 30.1992 27.4057C30.2 27.4293 30.2022 27.4528 30.2058 27.4761C30.2089 27.4921 30.215 27.5067 30.2194 27.5222C30.2249 27.5451 30.2317 27.5677 30.2398 27.5899C30.2461 27.6051 30.2551 27.6186 30.2625 27.6331C30.272 27.6537 30.2827 27.6737 30.2945 27.693C30.3038 27.7071 30.3156 27.7191 30.326 27.7324C30.3388 27.75 30.3526 27.767 30.3673 27.7832C30.3794 27.7955 30.3937 27.8055 30.4069 27.8168C30.4225 27.8313 30.4389 27.845 30.4559 27.8579C30.4707 27.8681 30.4874 27.8755 30.5032 27.8844C30.5209 27.8954 30.5392 27.9055 30.5579 27.9146C30.5749 27.922 30.5934 27.9261 30.6112 27.932C30.6308 27.9394 30.6507 27.9457 30.671 27.951C30.6891 27.9549 30.7084 27.9552 30.727 27.9575C30.748 27.961 30.7692 27.9635 30.7905 27.9648L33.5643 28.0046C33.9091 27.9904 34.2458 28.111 34.5032 28.3409C34.7605 28.5708 34.9182 28.8919 34.9428 29.2361C34.943 29.3848 34.9134 29.532 34.8558 29.6691C34.7981 29.8062 34.7136 29.9304 34.6072 30.0342C34.3368 30.2915 33.977 30.4336 33.6038 30.4304L31.6657 30.4087L30.4079 30.3902H30.3988C30.3853 30.3902 30.3726 30.3933 30.3593 30.3942L30.0059 30.3902H29.9991C29.8388 30.3893 29.6846 30.4521 29.5706 30.5649C29.4566 30.6776 29.3921 30.831 29.3912 30.9913C29.3903 31.1517 29.4531 31.3058 29.5658 31.4198C29.6786 31.5338 29.832 31.5984 29.9923 31.5993L31.6426 31.6176L32.54 31.6308C32.8848 31.6166 33.2215 31.7372 33.4788 31.9671C33.7361 32.197 33.8937 32.5181 33.9182 32.8623C33.9184 33.011 33.8888 33.1582 33.8312 33.2952C33.7735 33.4323 33.689 33.5563 33.5826 33.6602C33.4505 33.7906 33.2933 33.893 33.1206 33.9611C32.9478 34.0292 32.7631 34.0616 32.5775 34.0563L28.8376 34.0247H28.8326L28.8301 34.025L28.8051 34.0247H28.7992C28.6391 34.0243 28.4854 34.0874 28.3718 34.2002C28.2582 34.313 28.194 34.4662 28.1932 34.6263C28.1924 34.7864 28.2552 34.9402 28.3677 35.0541C28.4802 35.168 28.6332 35.2326 28.7933 35.2338L30.9968 35.255C31.3416 35.2408 31.6784 35.3614 31.9357 35.5913C32.193 35.8212 32.3507 36.1423 32.3753 36.4865C32.3774 36.64 32.3488 36.7923 32.2911 36.9346C32.2334 37.0768 32.1478 37.2061 32.0394 37.3147C31.7826 37.554 31.4434 37.6851 31.0924 37.6808H26.085C24.2082 37.6675 22.0393 37.5869 20.0462 36.7964C19.2953 36.4771 18.5226 36.2114 17.7341 36.0014V36.774C17.7329 36.9308 17.7195 37.0873 17.694 37.242C18.3418 37.432 18.9783 37.6585 19.6005 37.9204C21.7881 38.788 24.0902 38.8756 26.0806 38.8898H31.1078C31.4384 38.8939 31.7666 38.8323 32.0733 38.7087C32.38 38.5851 32.6591 38.4018 32.8945 38.1696C33.1168 37.9479 33.2923 37.6838 33.4108 37.3931C33.5293 37.1024 33.5883 36.7909 33.5844 36.477C33.579 36.0198 33.4389 35.5743 33.1816 35.1963C33.6561 35.0921 34.0916 34.8559 34.4377 34.515C34.6578 34.298 34.8322 34.0392 34.9506 33.7537C35.0691 33.4682 35.1291 33.1619 35.1273 32.8529C35.1208 32.3398 34.9459 31.8431 34.6293 31.4392C34.9407 31.3129 35.2239 31.1259 35.4623 30.8891C35.6824 30.672 35.8568 30.4131 35.9752 30.1276C36.0936 29.8421 36.1537 29.5357 36.1518 29.2266C36.1448 28.6906 35.9542 28.1731 35.6118 27.7605C36.0015 27.6101 36.343 27.3565 36.5996 27.0269C36.8561 26.6973 37.0182 26.3041 37.0684 25.8894C37.0991 25.5727 37.0628 25.253 36.9618 24.9513C36.8608 24.6496 36.6974 24.3725 36.4821 24.1381Z",
+p34abd3f0: "M12.1232 20.7534C12.3048 20.7536 12.4845 20.7169 12.6515 20.6457C12.8322 20.5704 12.9929 20.4542 13.1209 20.3062C13.249 20.1582 13.3409 19.9825 13.3895 19.7929L14.4831 15.4807C14.6059 15.0197 14.8297 14.5918 15.1384 14.228C15.447 13.8642 15.8327 13.5736 16.2675 13.3773C16.9779 13.0463 17.7179 12.7828 18.4777 12.5904C18.3859 12.2979 18.3392 11.9931 18.3394 11.6865V11.3777C17.4494 11.5925 16.5832 11.8957 15.7536 12.2828C15.1568 12.5548 14.628 12.9563 14.2055 13.4581C13.7831 13.9598 13.4776 14.5493 13.3113 15.1838L13.2112 15.5783L12.9681 16.5367C12.8678 16.9324 12.7675 17.328 12.6671 17.7236C12.5759 18.0835 12.4846 18.4433 12.3933 18.8032C12.3395 19.0154 12.2857 19.2276 12.2319 19.4398C12.2166 19.5004 12.1894 19.5512 12.1149 19.5441C12.041 19.5251 11.9721 19.4904 11.9129 19.4424C11.8488 19.4024 11.7858 19.3606 11.7242 19.3169C11.6028 19.2309 11.4867 19.1378 11.3765 19.038C11.1613 18.8434 10.9702 18.6238 10.8073 18.3838C10.4881 17.9147 10.2901 17.3738 10.2311 16.8094C10.1971 16.4704 10.216 16.1283 10.2869 15.7951L10.7237 13.7442C10.7426 13.6561 10.7414 13.5649 10.7205 13.4773C10.6995 13.3896 10.6592 13.3078 10.6025 13.2378C10.5458 13.1677 10.4742 13.1113 10.3929 13.0725C10.3116 13.0337 10.2226 13.0136 10.1325 13.0136H3.77106C3.60087 13.0154 3.43217 12.9818 3.27559 12.9151C3.11902 12.8484 2.97796 12.75 2.86131 12.6261C2.77513 12.5338 2.70955 12.4243 2.66894 12.3047C2.62833 12.1852 2.61361 12.0584 2.62576 11.9327C2.67741 11.3887 3.25803 11.0974 3.78168 11.0974H3.79143C3.79143 11.0974 6.96987 11.1209 6.97435 11.121C6.97731 11.121 6.98026 11.121 6.99142 11.1202C7.10448 11.1207 7.21527 11.0884 7.31042 11.0274C7.40556 10.9663 7.48099 10.879 7.52759 10.7759C7.54822 10.7339 7.56383 10.6896 7.5741 10.6439C7.57606 10.6348 7.57576 10.625 7.57733 10.6158C7.58332 10.5845 7.58679 10.5527 7.58774 10.5209C7.58787 10.5026 7.58419 10.4853 7.58274 10.4674C7.58186 10.4452 7.57977 10.423 7.5765 10.401C7.57285 10.3822 7.56582 10.3647 7.56045 10.3465C7.55548 10.3265 7.5495 10.3067 7.54253 10.2873C7.53501 10.2689 7.52434 10.2524 7.5151 10.2349C7.50608 10.218 7.49855 10.2001 7.48802 10.1842C7.47604 10.1676 7.46323 10.1516 7.44963 10.1362C7.43812 10.1221 7.42799 10.107 7.41528 10.094C7.40019 10.0798 7.38439 10.0663 7.36794 10.0537C7.35412 10.0422 7.34152 10.0295 7.32671 10.0192C7.30893 10.008 7.29058 9.99766 7.27173 9.98832C7.25599 9.9797 7.24127 9.96958 7.22472 9.96234C7.20538 9.95491 7.18567 9.94847 7.16567 9.94304C7.14759 9.93727 7.1303 9.92985 7.11152 9.92579C7.09274 9.92173 7.07272 9.92131 7.05328 9.91904C7.03301 9.91562 7.01258 9.91325 6.99207 9.91195L4.56392 9.87624C4.27869 9.88595 4.00093 9.78398 3.78974 9.59203C3.57854 9.40008 3.45058 9.13329 3.43308 8.84844C3.43273 8.72357 3.45738 8.5999 3.50559 8.48472C3.55381 8.36954 3.6246 8.26517 3.71379 8.17779C3.82 8.07337 3.94584 7.99105 4.08406 7.93557C4.22228 7.8801 4.37012 7.85258 4.51904 7.85459H4.52819L6.21122 7.87369L7.32385 7.89029H7.3333C7.34525 7.89029 7.35647 7.88749 7.36826 7.8868C7.36826 7.8868 7.6763 7.89029 7.68308 7.89029C7.84286 7.89034 7.99615 7.82713 8.10946 7.71449C8.22277 7.60185 8.28688 7.44893 8.28777 7.28916C8.28867 7.12939 8.22628 6.97576 8.11425 6.86185C8.00221 6.74794 7.84964 6.68302 7.68987 6.68127L6.23635 6.6648L5.46038 6.65323C5.17513 6.66282 4.8974 6.56077 4.68622 6.36878C4.47504 6.17679 4.34708 5.91 4.32954 5.62513C4.32919 5.50027 4.35385 5.3766 4.40206 5.26141C4.45027 5.14623 4.52106 5.04187 4.61026 4.95449C4.71668 4.84995 4.84278 4.76756 4.98125 4.71208C5.11972 4.65659 5.26782 4.62912 5.41698 4.63125H5.42613C5.42613 4.63125 8.6982 4.65958 8.70562 4.65938L8.73274 4.65958C8.89281 4.65997 9.0465 4.59685 9.1601 4.48408C9.27369 4.3713 9.33793 4.21808 9.33871 4.05801C9.33949 3.89794 9.27676 3.74409 9.16426 3.63022C9.05177 3.51634 8.89871 3.45172 8.73864 3.45054L6.81052 3.43136C6.52525 3.44112 6.24743 3.33918 6.03618 3.14722C5.82493 2.95527 5.69692 2.68846 5.6794 2.40356C5.67728 2.27456 5.701 2.14645 5.74916 2.02676C5.79732 1.90707 5.86894 1.79823 5.95982 1.70666C6.06009 1.60944 6.1787 1.53313 6.30873 1.48215C6.43876 1.43117 6.57762 1.40655 6.71725 1.40971H11.1072C12.7419 1.42152 14.6304 1.49266 16.3611 2.18987C17.0036 2.46719 17.6647 2.69964 18.3394 2.88555V2.61877C18.3397 2.29773 18.3915 1.97881 18.4927 1.67414C17.9213 1.50527 17.3603 1.30295 16.8127 1.06823C14.8858 0.291886 12.8617 0.21337 11.1116 0.200678H6.73083C6.42978 0.193235 6.13037 0.247126 5.85081 0.359072C5.57125 0.471018 5.31739 0.638677 5.10468 0.851846C4.90005 1.05652 4.7385 1.30011 4.62955 1.56825C4.5206 1.83638 4.46646 2.12362 4.47034 2.41302C4.47418 2.80019 4.58281 3.1791 4.7847 3.5095C4.39615 3.61365 4.04136 3.81702 3.75513 4.09966C3.39316 4.4576 3.17079 4.93295 3.128 5.44021C3.08522 5.94746 3.22482 6.45334 3.52171 6.86686C3.27543 6.97844 3.05093 7.13288 2.85866 7.32298C2.65571 7.52346 2.49499 7.76257 2.38599 8.0262C2.27699 8.28983 2.22191 8.57263 2.22403 8.85789C2.22908 9.31961 2.382 9.76755 2.66034 10.136C2.35638 10.2663 2.08823 10.4679 1.87853 10.7236C1.66882 10.9794 1.5237 11.2818 1.45542 11.6054C1.38714 11.929 1.3977 12.2643 1.48621 12.5829C1.57472 12.9016 1.73858 13.1943 1.96397 13.4364C2.19363 13.6851 2.47245 13.8834 2.78275 14.0188C3.09306 14.1541 3.4281 14.2236 3.76664 14.2227H9.38568L9.10437 15.543C8.90687 16.5251 9.02965 17.5446 9.45467 18.4517C9.87968 19.3587 10.5845 20.1055 11.4655 20.5822C11.6664 20.6948 11.8929 20.7538 12.1232 20.7534Z",
+p3bcea400: "M28.0117 10.7793H35.2661C35.3458 10.7797 35.4247 10.7644 35.4985 10.7342C35.5722 10.704 35.6392 10.6596 35.6957 10.6034C35.7522 10.5472 35.797 10.4804 35.8276 10.4069C35.8582 10.3333 35.8739 10.2544 35.8739 10.1748C35.8739 10.0951 35.8582 10.0162 35.8276 9.94266C35.797 9.8691 35.7522 9.80231 35.6957 9.74613C35.6392 9.68995 35.5722 9.64549 35.4985 9.61531C35.4247 9.58512 35.3458 9.56981 35.2661 9.57024H28.0117C27.9321 9.56981 27.8531 9.58512 27.7794 9.61531C27.7057 9.64549 27.6386 9.68995 27.5821 9.74613C27.5257 9.80231 27.4808 9.8691 27.4502 9.94266C27.4197 10.0162 27.4039 10.0951 27.4039 10.1748C27.4039 10.2544 27.4197 10.3333 27.4502 10.4069C27.4808 10.4804 27.5257 10.5472 27.5821 10.6034C27.6386 10.6596 27.7057 10.704 27.7794 10.7342C27.8531 10.7644 27.9321 10.7797 28.0117 10.7793Z",
+p3f923a00: "M21.3615 13.4999H23.7796C24.2604 13.4994 24.7214 13.3081 25.0614 12.9681C25.4014 12.6281 25.5927 12.1672 25.5932 11.6863V2.61857C25.5927 2.13774 25.4014 1.67676 25.0614 1.33676C24.7214 0.996771 24.2604 0.805536 23.7796 0.805016H21.3615C20.8807 0.805536 20.4197 0.996771 20.0797 1.33676C19.7397 1.67676 19.5484 2.13774 19.5479 2.61857V11.6863C19.5484 12.1672 19.7397 12.6281 20.0797 12.9681C20.4197 13.3081 20.8807 13.4994 21.3615 13.4999ZM20.757 2.61855C20.7572 2.45829 20.8209 2.30465 20.9343 2.19132C21.0476 2.078 21.2012 2.01425 21.3615 2.01404H23.7796C23.9399 2.01425 24.0935 2.078 24.2068 2.19132C24.3202 2.30465 24.3839 2.45829 24.3841 2.61855V11.6863C24.3839 11.8466 24.3202 12.0002 24.2068 12.1136C24.0935 12.2269 23.9399 12.2907 23.7796 12.2909H21.3615C21.2012 12.2907 21.0476 12.2269 20.9343 12.1136C20.8209 12.0002 20.7572 11.8466 20.757 11.6863V2.61855Z",
+p7bc2000: "M0.80784 31.9379H1.41237C1.49203 31.9383 1.571 31.923 1.64473 31.8928C1.71845 31.8626 1.78549 31.8182 1.84197 31.762C1.89846 31.7058 1.94329 31.639 1.97387 31.5655C2.00446 31.4919 2.02021 31.413 2.02021 31.3334C2.02021 31.2537 2.00446 31.1748 1.97387 31.1013C1.94329 31.0277 1.89846 30.9609 1.84197 30.9047C1.78549 30.8485 1.71845 30.8041 1.64473 30.7739C1.571 30.7437 1.49203 30.7284 1.41237 30.7288H0.80784C0.728175 30.7284 0.649209 30.7437 0.575482 30.7739C0.501755 30.8041 0.434721 30.8485 0.378235 30.9047C0.321748 30.9609 0.276922 31.0277 0.246334 31.1013C0.215746 31.1748 0.2 31.2537 0.2 31.3334C0.2 31.413 0.215746 31.4919 0.246334 31.5655C0.276922 31.639 0.321748 31.7058 0.378235 31.762C0.434721 31.8182 0.501755 31.8626 0.575482 31.8928C0.649209 31.923 0.728175 31.9383 0.80784 31.9379Z",
+pbcf8200: "M8.06219 27.7062H0.80784C0.728175 27.7057 0.649209 27.7211 0.575482 27.7512C0.501755 27.7814 0.434721 27.8259 0.378235 27.8821C0.321748 27.9382 0.276922 28.005 0.246334 28.0786C0.215746 28.1522 0.2 28.231 0.2 28.3107C0.2 28.3904 0.215746 28.4692 0.246334 28.5428C0.276922 28.6164 0.321748 28.6832 0.378235 28.7393C0.434721 28.7955 0.501755 28.84 0.575482 28.8702C0.649209 28.9003 0.728175 28.9157 0.80784 28.9152H8.06219C8.14185 28.9157 8.22082 28.9003 8.29454 28.8702C8.36827 28.84 8.4353 28.7955 8.49179 28.7393C8.54828 28.6832 8.5931 28.6164 8.62369 28.5428C8.65428 28.4692 8.67003 28.3904 8.67003 28.3107C8.67003 28.231 8.65428 28.1522 8.62369 28.0786C8.5931 28.005 8.54828 27.9382 8.49179 27.8821C8.4353 27.8259 8.36827 27.7814 8.29454 27.7512C8.22082 27.7211 8.14185 27.7057 8.06219 27.7062Z",
+pfd3f900: "M35.2661 6.54807H34.6616C34.5819 6.54764 34.503 6.56295 34.4292 6.59313C34.3555 6.62332 34.2885 6.66778 34.232 6.72396C34.1755 6.78013 34.1307 6.84692 34.1001 6.92048C34.0695 6.99404 34.0538 7.07293 34.0538 7.15259C34.0538 7.23226 34.0695 7.31114 34.1001 7.3847C34.1307 7.45826 34.1755 7.52505 34.232 7.58123C34.2885 7.63741 34.3555 7.68186 34.4292 7.71205C34.503 7.74223 34.5819 7.75755 34.6616 7.75711H35.2661C35.3458 7.75755 35.4248 7.74223 35.4985 7.71205C35.5722 7.68186 35.6392 7.63741 35.6957 7.58123C35.7522 7.52505 35.797 7.45826 35.8276 7.3847C35.8582 7.31114 35.874 7.23226 35.874 7.15259C35.874 7.07293 35.8582 6.99404 35.8276 6.92048C35.797 6.84692 35.7522 6.78013 35.6957 6.72396C35.6392 6.66778 35.5722 6.62332 35.4985 6.59313C35.4248 6.56295 35.3458 6.54764 35.2661 6.54807Z",
+}
diff --git a/src/imports/svg-8l5dq4lsp8.ts b/src/imports/svg-8l5dq4lsp8.ts
new file mode 100644
index 0000000..33e58b6
--- /dev/null
+++ b/src/imports/svg-8l5dq4lsp8.ts
@@ -0,0 +1,107 @@
+export default {
+p10f7c300: "M254.114 437.018L246.173 442.018L244.729 432.018L254.114 437.018Z",
+p112ca500: "M228.126 394.018L210.8 364.018",
+p114f0d00: "M323.418 268.018L337.856 264.018",
+p125d3600: "M271.44 287.018L278.659 288.018L272.884 296.018L271.44 287.018Z",
+p1261c6f0: "M364.232 457.177L363.168 448.821L367.663 443.414L361.276 442.102L359.207 433.992L356.072 441.938L350.039 443.411L354.356 448.819L353.409 457.666L359.087 453.407L364.232 457.177Z",
+p130d1600: "M325.583 92.0176V110.018L314.755 107.018L325.583 92.0176Z",
+p13ac0f00: "M168.206 183.018L176.147 187.018L168.206 194.018V183.018Z",
+p13f2e80: "M2 10C2 11.8856 2 12.8284 2.58579 13.4142C3.17157 14 4.11438 14 6 14H10C11.8856 14 12.8284 14 13.4142 13.4142C14 12.8284 14 11.8856 14 10",
+p13f60480: "M258.446 191.018C260.371 196.351 262.296 196.351 264.221 191.018C266.146 185.684 268.071 185.684 269.996 191.018C271.921 196.351 273.846 196.351 275.772 191.018C277.697 185.684 279.622 185.684 281.547 191.018",
+p15a24580: "M16.1716 10.9999L10.8076 5.63589L12.2218 4.22168L20 11.9999L12.2218 19.778L10.8076 18.3638L16.1716 12.9999H4V10.9999H16.1716Z",
+p1617b600: "M120.992 573.144L125.197 578.719L124.5 586.723L129.576 583.323L134.13 586.957L133.426 578.469L137.45 572.645L131.672 571.679L129.217 564.648L126.419 571.927L120.992 573.144Z",
+p1621380: "M251.948 365.018L263.499 362.018L259.167 378.018L251.948 365.018Z",
+p16eea180: "M9.71083 7.91386C9.98045 7.91386 10.1992 8.13261 10.1992 8.40223C10.1992 8.67185 9.98045 8.8906 9.71083 8.8906H9.70447C9.43485 8.8906 9.2161 8.67185 9.2161 8.40223C9.2161 8.13261 9.43485 7.91386 9.70447 7.91386H9.71083Z",
+p18d2ab00: "M7.10634 7.91386C7.37596 7.91386 7.59471 8.13261 7.59471 8.40223C7.59471 8.67185 7.37596 8.8906 7.10634 8.8906H7.09998C6.83036 8.8906 6.61161 8.67185 6.61161 8.40223C6.61161 8.13261 6.83036 7.91386 7.09998 7.91386H7.10634Z",
+p195a2f80: "M144.383 34.0176L134.276 32.0176L140.773 21.0176L144.383 34.0176Z",
+p1a652670: "M0.0831877 3.07411C-0.0277293 3.18503 -0.0277292 3.36486 0.0831876 3.47577C0.194104 3.58669 0.373936 3.58669 0.484853 3.47577L0.28402 3.27494L0.0831877 3.07411ZM3.27531 0.283654L3.07448 0.0828214L0.0831877 3.07411L0.28402 3.27494L0.484853 3.47577L3.47614 0.484487L3.27531 0.283654Z",
+p1aba0880: "M4.50185 10.5183C4.77147 10.5183 4.99022 10.7371 4.99022 11.0067C4.99022 11.2763 4.77147 11.4951 4.50185 11.4951H4.49549C4.22587 11.4951 4.00712 11.2763 4.00712 11.0067C4.00712 10.7371 4.22587 10.5183 4.49549 10.5183H4.50185Z",
+p1ada2c00: "M95.2927 28.0176L106.121 23.0176L103.234 38.0176L95.2927 28.0176Z",
+p1ae38580: "M273.967 358.018C276.855 363.351 279.742 363.351 282.63 358.018C285.518 352.684 288.405 352.684 291.293 358.018C293.699 363.351 296.346 363.351 299.234 358.018C302.122 352.684 305.009 352.684 307.897 358.018",
+p1af8f150: "M362.763 158.518C364.688 153.851 363.966 152.518 360.597 154.518C356.747 156.518 355.784 155.184 357.709 150.518C360.116 145.851 359.394 144.851 355.544 147.518C351.694 149.518 350.972 148.184 353.378 143.518",
+p1b50ff00: "M389.112 507.018L381.171 524.018L372.508 516.018L379.727 499.018L389.112 507.018Z",
+p1c14be00: "M173.283 117.162L172.479 123.777L167.646 125.823L171.463 129.435L171.348 135.758L175.069 132.091L180.055 134.162L177.887 127.76L181.185 122.181L175.93 122.315L173.283 117.162Z",
+p1ca023c0: "M55.5875 462.517C58.9564 466.517 61.3628 465.517 62.8066 459.517C63.7692 453.517 65.9349 452.517 69.3039 456.517C72.6728 461.184 75.0792 460.517 76.523 454.517C77.4856 448.517 79.6513 447.517 83.0202 451.517",
+p1cfa9a70: "M371.908 553.286L374.187 555.938L373.57 559.972L376.466 558.59L379.378 559.445L378.381 555.434L380.295 552.277L377.067 552.321L375.753 549.208L374.488 552.803L371.908 553.286Z",
+p1d1bf900: "M354.1 427.518C352.656 433.518 354.1 436.851 358.431 437.518C363.244 437.518 364.688 440.518 362.763 446.518C361.319 453.184 363.003 456.518 367.816 456.518C372.148 456.518 373.591 459.851 372.148 466.518",
+p1d9db000: "M218.018 98.0176L231.013 105.018L225.959 121.018L213.687 113.018L218.018 98.0176Z",
+p1f72dd00: "M80.8545 86.0176L75.0792 116.018",
+p1f83a980: "M33.208 501.018L38.2614 494.018L43.3148 501.018L38.2614 508.018L33.208 501.018Z",
+p1fa04100: "M7.10634 10.5183C7.37596 10.5183 7.59471 10.7371 7.59471 11.0067C7.59471 11.2763 7.37596 11.4951 7.10634 11.4951H7.09998C6.83036 11.4951 6.61161 11.2763 6.61161 11.0067C6.61161 10.7371 6.83036 10.5183 7.09998 10.5183H7.10634Z",
+p1fd17c80: "M186.976 417.018L190.585 403.018L198.526 411.018L186.976 417.018Z",
+p20991b80: "M320.53 248.018L307.536 243.018L311.145 225.018L324.14 230.018L320.53 248.018Z",
+p21309b00: "M8.00104 2V10.6667M8.00104 10.6667L10.6677 7.75M8.00104 10.6667L5.33437 7.75",
+p21984100: "M127.779 219.018L122.003 208.018L130.666 205.018L127.779 219.018Z",
+p219a1600: "M2.91667 0.583333V2.33333M8.75 0.583333V2.33333",
+p21a2df00: "M253.031 594.079C257.52 597.669 262.29 597.865 263.685 594.517C265.081 591.169 262.573 585.545 258.084 581.955C253.596 578.365 248.826 578.169 247.43 581.517C246.035 584.865 248.542 590.49 253.031 594.079Z",
+p2369e2c0: "M332.442 323.518C330.517 318.851 329.314 319.184 328.832 324.518C327.87 329.851 326.426 330.184 324.501 325.518C323.057 320.184 321.854 320.184 320.891 325.518C320.41 330.851 319.207 331.184 317.282 326.518",
+p23a159d0: "M13.9852 1.99805V5.32797H10.6553",
+p23d70180: "M371.787 244.018L358.792 249.018L355.183 233.018L368.177 227.018L371.787 244.018Z",
+p23dc0000: "M97.4587 264.018L124.892 246.018",
+p245b5500: "M224.321 520.472C226.808 522.227 229.558 521.656 230.463 519.195C231.368 516.735 230.086 513.317 227.599 511.562C225.112 509.807 222.363 510.379 221.458 512.839C220.552 515.3 221.835 518.717 224.321 520.472Z",
+p245cc9b0: "M25.2663 484.157C25.322 479.739 22.7818 476.096 19.5927 476.019C16.4035 475.941 13.7731 479.46 13.7174 483.878C13.6618 488.295 16.2019 491.939 19.3911 492.016C22.5802 492.093 25.2106 488.575 25.2663 484.157Z",
+p26750500: "M357.9 341.225L362.27 336.289L367.802 338.797L365.931 331.162L369.159 323.882L363.923 324.509L360.36 318.456L358.549 326.119L353.038 328.709L357.585 332.99L357.9 341.225Z",
+p273a0500: "M130.326 25.3151C128.451 28.8896 129.023 33.8925 131.604 36.4895C134.184 39.0865 137.796 38.2942 139.671 34.7197C141.546 31.1452 140.974 26.1423 138.393 23.5453C135.813 20.9483 132.201 21.7407 130.326 25.3151Z",
+p28638300: "M1.03703 0C0.880167 0 0.753006 0.12716 0.753006 0.28402C0.753006 0.44088 0.880167 0.568041 1.03703 0.568041V0.28402V0ZM1.03703 0.28402V0.568041H3.57723V0.28402V0H1.03703V0.28402Z",
+p28906180: "M22.9838 319.098L24.2435 315.362L27.2158 315.144L25.3654 312.608L25.9164 308.681L22.8062 309.881L20.818 308.327L20.9757 312.445L19.1452 315.008L21.9798 315.771L22.9838 319.098Z",
+p293abff0: "M306.814 562.018L297.429 571.018L289.488 554.018L298.873 545.018L306.814 562.018Z",
+p2a600580: "M156.655 467.517C160.987 466.851 161.228 465.184 157.377 462.517C154.49 459.184 154.971 457.517 158.821 457.517C162.671 457.517 162.912 456.184 159.543 453.517C156.174 449.517 156.655 447.851 160.987 448.517",
+p2c53d00: "M220.184 197.018L208.634 201.018L215.131 184.018L220.184 197.018Z",
+p2ce32bc0: "M3.12215 2.2972C3.12215 2.45406 3.24931 2.58122 3.40617 2.58122C3.56303 2.58122 3.69019 2.45406 3.69019 2.2972L3.40617 2.2972L3.12215 2.2972ZM3.40617 2.2972L3.69019 2.2972L3.69019 0.000558985L3.40617 0.000558972L3.12215 0.00055896L3.12215 2.2972L3.40617 2.2972Z",
+p2d198000: "M3.60984 235.018C7.94133 233.684 8.66324 230.684 5.77558 226.018C2.40664 222.018 2.88792 219.351 7.21941 218.018C11.5509 216.684 12.0322 214.018 8.66324 210.018C5.77558 205.351 6.4975 202.351 10.829 201.018",
+p2dc248a0: "M187.698 421.018L167.484 411.018",
+p2e546900: "M252.186 5.54095L248.257 7.63402L244.844 3.94005L244.897 10.3428L241.537 13.0515L245.27 14.5538L246.337 20.7841L249.004 16.0561L253.182 16.7703L250.657 11.5003L252.186 5.54095Z",
+p2e64dc00: "M3.28124 1.9681C3.28124 0.880774 4.16267 -0.00065136 5.24999 -0.00065136C6.33732 -0.00065136 7.21874 0.880774 7.21874 1.9681C7.21874 3.05542 6.33732 3.93685 5.24999 3.93685C4.16267 3.93685 3.28124 3.0554 3.28124 1.9681ZM10.2437 2.00564C9.90201 1.66393 9.34797 1.66393 9.00629 2.00564L6.63755 4.37435H3.86241L1.4937 2.00564C1.15201 1.66393 0.597973 1.66393 0.256286 2.00564C-0.0854289 2.34736 -0.0854289 2.90137 0.256286 3.24308L2.84374 5.83051V13.1243C2.84374 13.6076 3.2355 13.9993 3.71874 13.9993H4.15624C4.63949 13.9993 5.03124 13.6076 5.03124 13.1243V10.0618H5.46874V13.1243C5.46874 13.6076 5.8605 13.9993 6.34374 13.9993H6.78124C7.26449 13.9993 7.65624 13.6076 7.65624 13.1243V5.83051L10.2437 3.24306C10.5854 2.90134 10.5854 2.34736 10.2437 2.00564Z",
+p2f540d00: "M68.582 222.018L77.2449 216.018L83.0203 233.018L73.6354 239.018L68.582 222.018Z",
+p302dfa00: "M260.93 107.499C264.208 105.477 266.076 101.384 265.103 98.3568C264.13 95.3296 260.684 94.5144 257.406 96.5361C254.128 98.5579 252.259 102.651 253.232 105.678C254.205 108.705 257.652 109.52 260.93 107.499Z",
+p30587f00: "M184.088 308.018L179.757 282.018",
+p30846ac0: "M332.081 27.0176L337.856 41.0176L329.915 48.0176L324.14 35.0176L332.081 27.0176Z",
+p31508a60: "M288.044 452.518C290.932 457.184 292.857 456.518 293.819 450.518C294.301 444.518 296.226 443.518 299.595 447.518C302.482 452.184 304.407 451.518 305.37 445.518C306.333 439.518 308.258 438.851 311.145 443.518",
+p315a1e30: "M210.521 330.822L215.607 329.284L218.741 334.866L219.673 327.772L223.72 324.845L219.601 322.116L218.492 315.07L215.5 320.8L210.379 319.51L212.492 325.116L210.521 330.822Z",
+p31a57b00: "M6 0C7.5913 0 9.11742 0.632141 10.2426 1.75736C11.3679 2.88258 12 4.4087 12 6C12 8.04933 10.8827 9.72667 9.70533 10.93C9.11711 11.5247 8.47528 12.0639 7.788 12.5407L7.504 12.734L7.37067 12.8227L7.11933 12.9827L6.89533 13.1193L6.618 13.2807C6.42976 13.3881 6.21675 13.4446 6 13.4446C5.78325 13.4446 5.57024 13.3881 5.382 13.2807L5.10467 13.1193L4.758 12.906L4.63 12.8227L4.35667 12.6407C3.61522 12.139 2.9246 11.5661 2.29467 10.93C1.11733 9.726 0 8.04933 0 6C0 4.4087 0.632141 2.88258 1.75736 1.75736C2.88258 0.632141 4.4087 0 6 0ZM6 1.33333C4.76232 1.33333 3.57534 1.825 2.70017 2.70017C1.825 3.57534 1.33333 4.76232 1.33333 6C1.33333 7.548 2.18133 8.90667 3.24733 9.99733C3.70569 10.4613 4.20111 10.8872 4.72867 11.2707L5.034 11.488C5.13267 11.5569 5.22756 11.6209 5.31867 11.68L5.57867 11.8467L5.80733 11.986L6 12.0987L6.30333 11.9193L6.548 11.766C6.67822 11.6833 6.81756 11.5907 6.966 11.488L7.27133 11.2707C7.79889 10.8872 8.29431 10.4613 8.75267 9.99733C9.81867 8.90733 10.6667 7.548 10.6667 6C10.6667 4.76232 10.175 3.57534 9.29983 2.70017C8.42466 1.825 7.23768 1.33333 6 1.33333ZM6 3.33333C6.70724 3.33333 7.38552 3.61428 7.88562 4.11438C8.38572 4.61448 8.66667 5.29276 8.66667 6C8.66667 6.70724 8.38572 7.38552 7.88562 7.88562C7.38552 8.38572 6.70724 8.66667 6 8.66667C5.29276 8.66667 4.61448 8.38572 4.11438 7.88562C3.61428 7.38552 3.33333 6.70724 3.33333 6C3.33333 5.29276 3.61428 4.61448 4.11438 4.11438C4.61448 3.61428 5.29276 3.33333 6 3.33333ZM6 4.66667C5.64638 4.66667 5.30724 4.80714 5.05719 5.05719C4.80714 5.30724 4.66667 5.64638 4.66667 6C4.66667 6.35362 4.80714 6.69276 5.05719 6.94281C5.30724 7.19286 5.64638 7.33333 6 7.33333C6.35362 7.33333 6.69276 7.19286 6.94281 6.94281C7.19286 6.69276 7.33333 6.35362 7.33333 6C7.33333 5.64638 7.19286 5.30724 6.94281 5.05719C6.69276 4.80714 6.35362 4.66667 6 4.66667Z",
+p31b9a200: "M118.104 478.469L120.826 481.901L120.824 487.732L124.539 484.991L128.996 486.367L127.389 480.363L129.867 476.593L125.657 476.589L123.06 470.927L122.067 477.1L118.104 478.469Z",
+p31d95b00: "M8.55637 431.195L8.25539 426.113L10.6332 423.088L7.45944 422.268L6.66349 418.423L4.48466 422.409L1.50987 422.551L3.69372 425.844L2.40782 430.516L5.67858 428.177L8.55637 431.195Z",
+p31f8ed00: "M11.3333 14.6667C10.7778 14.6667 10.3056 14.4722 9.91667 14.0833C9.52778 13.6944 9.33333 13.2222 9.33333 12.6667C9.33333 12.6 9.35 12.4444 9.38333 12.2L4.7 9.46667C4.52222 9.63333 4.31667 9.764 4.08333 9.85867C3.85 9.95333 3.6 10.0004 3.33333 10C2.77778 10 2.30556 9.80556 1.91667 9.41667C1.52778 9.02778 1.33333 8.55556 1.33333 8C1.33333 7.44444 1.52778 6.97222 1.91667 6.58333C2.30556 6.19444 2.77778 6 3.33333 6C3.6 6 3.85 6.04733 4.08333 6.142C4.31667 6.23667 4.52222 6.36711 4.7 6.53333L9.38333 3.8C9.36111 3.72222 9.34733 3.64733 9.342 3.57533C9.33667 3.50333 9.33378 3.42267 9.33333 3.33333C9.33333 2.77778 9.52778 2.30556 9.91667 1.91667C10.3056 1.52778 10.7778 1.33333 11.3333 1.33333C11.8889 1.33333 12.3611 1.52778 12.75 1.91667C13.1389 2.30556 13.3333 2.77778 13.3333 3.33333C13.3333 3.88889 13.1389 4.36111 12.75 4.75C12.3611 5.13889 11.8889 5.33333 11.3333 5.33333C11.0667 5.33333 10.8167 5.286 10.5833 5.19133C10.35 5.09667 10.1444 4.96622 9.96667 4.8L5.28333 7.53333C5.30556 7.61111 5.31956 7.68622 5.32533 7.75867C5.33111 7.83111 5.33378 7.91156 5.33333 8C5.33289 8.08844 5.33022 8.16911 5.32533 8.242C5.32044 8.31489 5.30644 8.38978 5.28333 8.46667L9.96667 11.2C10.1444 11.0333 10.35 10.9029 10.5833 10.8087C10.8167 10.7144 11.0667 10.6671 11.3333 10.6667C11.8889 10.6667 12.3611 10.8611 12.75 11.25C13.1389 11.6389 13.3333 12.1111 13.3333 12.6667C13.3333 13.2222 13.1389 13.6944 12.75 14.0833C12.3611 14.4722 11.8889 14.6667 11.3333 14.6667Z",
+p3282b480: "M384.781 101.018L373.952 106.018L369.621 86.0176L380.449 82.0176L384.781 101.018Z",
+p32b87800: "M311.145 399.018C314.514 403.018 316.68 402.018 317.643 396.018C318.605 390.018 320.771 389.351 324.14 394.018C327.027 398.018 329.193 397.018 330.637 391.018C331.118 385.018 333.284 384.351 337.134 389.018",
+p33b66680: "M288.044 416.018L298.873 402.018L306.814 414.018L295.985 428.018L288.044 416.018Z",
+p34b84f00: "M0 4.08333C0 2.98317 -3.47694e-08 2.43367 0.341833 2.09183C0.683667 1.75 1.23317 1.75 2.33333 1.75H9.33333C10.4335 1.75 10.983 1.75 11.3248 2.09183C11.6667 2.43367 11.6667 2.98317 11.6667 4.08333C11.6667 4.35808 11.6667 4.49575 11.5815 4.5815C11.4958 4.66667 11.3575 4.66667 11.0833 4.66667H0.583333C0.308583 4.66667 0.170917 4.66667 0.0851666 4.5815C-5.21541e-08 4.49575 0 4.3575 0 4.08333ZM0 9.33333C0 10.4335 -3.47694e-08 10.983 0.341833 11.3248C0.683667 11.6667 1.23317 11.6667 2.33333 11.6667H9.33333C10.4335 11.6667 10.983 11.6667 11.3248 11.3248C11.6667 10.983 11.6667 10.4335 11.6667 9.33333V6.41667C11.6667 6.14192 11.6667 6.00425 11.5815 5.9185C11.4958 5.83333 11.3575 5.83333 11.0833 5.83333H0.583333C0.308583 5.83333 0.170917 5.83333 0.0851666 5.9185C-5.21541e-08 6.00425 0 6.1425 0 6.41667V9.33333Z",
+p36217800: "M45.5068 393.826L49.7872 397.93L49.6864 405.928L54.0802 401.034L59.0951 404.156L57.0179 397.104L60.7025 391.193L54.928 391.053L52.1164 384.984L50.5846 391.948L45.5068 393.826Z",
+p365e9600: "M160.265 253.018L158.821 266.018L151.602 257.018L160.265 253.018Z",
+p36d2ba80: "M205.746 57.0176L215.853 23.0176",
+p37f77100: "M74.3568 43.0176L44.0364 19.0176",
+p38fea80: "M126.676 130.315L122.907 131.636L119.777 127.369L119.722 132.369L116.378 134.499L119.668 137.368L120.621 142.589L123.117 138.841L126.566 140.314L124.605 134.872L126.676 130.315Z",
+p394df1c0: "M93.1269 382.018L88.7954 373.018L94.5707 367.018L98.9022 376.018L93.1269 382.018Z",
+p39b4f00: "M93.8494 516.018H86.6303V503.018H93.8494V516.018Z",
+p39dd4ef0: "M25.9887 535.018L31.0421 543.018L22.3791 554.018L17.3257 546.018L25.9887 535.018Z",
+p3a1b1dc0: "M132.471 414.018C133.434 407.351 131.749 404.684 127.418 406.018C122.605 406.018 120.68 403.018 121.643 397.018C123.086 391.018 121.402 388.018 116.589 388.018C111.776 389.351 110.092 386.684 111.536 380.018",
+p3ae84670: "M192.751 597.018V584.018H206.468V597.018H192.751Z",
+p3b167700: "M214.409 260.018L204.302 262.018L210.078 248.018L214.409 260.018Z",
+p3ba87480: "M73.7862 566.429L70.7532 567.019L68.8815 563.814L68.2967 568.212L65.8403 569.404L68.1465 571.811L68.5727 576.013L70.3106 572.818L73.4857 573.628L72.0484 569.624L73.7862 566.429Z",
+p3d2bae00: "M3.00033 0.583333V2.33333M9.00034 0.583333V2.33333",
+p3d2fe400: "M304.648 167.018L294.541 145.018",
+p3e65c400: "M63.1679 295.018C64.1305 288.351 62.2054 285.018 57.3926 285.018C52.5798 285.684 50.6547 282.684 51.6173 276.018C52.5798 269.351 50.4141 266.018 45.12 266.018C40.3073 266.684 38.3822 263.684 39.3447 257.018",
+p3e80b480: "M9.70465 0.1C9.97427 0.1 10.193 0.318752 10.193 0.588372V1.40233H11.6581C13.0062 1.40233 14.1 2.49608 14.1 3.84419V11.6581C14.1 13.0062 13.0062 14.1 11.6581 14.1H2.54186C1.19376 14.1 0.1 13.0062 0.1 11.6581V3.84419C0.1 2.49608 1.19376 1.40233 2.54186 1.40233H4.00698V0.588372C4.00698 0.318752 4.22573 0.1 4.49535 0.1C4.76497 0.1 4.98372 0.318752 4.98372 0.588372V1.40233H9.21628V0.588372C9.21628 0.318752 9.43503 0.1 9.70465 0.1ZM1.07674 11.6581C1.07674 12.467 1.73299 13.1233 2.54186 13.1233H11.6581C12.467 13.1233 13.1233 12.467 13.1233 11.6581V6.28605H1.23953C1.1823 6.28605 1.12762 6.27587 1.07674 6.2568V11.6581ZM2.54186 2.37907C1.73299 2.37907 1.07674 3.03531 1.07674 3.84419V5.33727C1.12762 5.31946 1.1823 5.30929 1.23953 5.30929H13.1233V3.84417C13.1233 3.0353 12.467 2.37906 11.6581 2.37906H10.193V3.19301C10.193 3.46263 9.97427 3.68138 9.70465 3.68138C9.43503 3.68138 9.21628 3.46263 9.21628 3.19301V2.37906H4.98372V3.19301C4.98372 3.46263 4.76497 3.68138 4.49535 3.68138C4.22573 3.68138 4.00698 3.46263 4.00698 3.19301V2.37906L2.54186 2.37907Z",
+p4d87d80: "M0 4.08333C0 2.98317 -3.57628e-08 2.43367 0.3516 2.09183C0.7032 1.75 1.2684 1.75 2.4 1.75H9.6C10.7316 1.75 11.2968 1.75 11.6484 2.09183C12 2.43367 12 2.98317 12 4.08333C12 4.35808 12 4.49575 11.9124 4.5815C11.8242 4.66667 11.682 4.66667 11.4 4.66667H0.6C0.3174 4.66667 0.1758 4.66667 0.0875999 4.5815C-5.36442e-08 4.49575 0 4.3575 0 4.08333ZM0 9.33333C0 10.4335 -3.57628e-08 10.983 0.3516 11.3248C0.7032 11.6667 1.2684 11.6667 2.4 11.6667H9.6C10.7316 11.6667 11.2968 11.6667 11.6484 11.3248C12 10.983 12 10.4335 12 9.33333V6.41667C12 6.14192 12 6.00425 11.9124 5.9185C11.8242 5.83333 11.682 5.83333 11.4 5.83333H0.6C0.3174 5.83333 0.1758 5.83333 0.0875999 5.9185C-5.36442e-08 6.00425 0 6.1425 0 6.41667V9.33333Z",
+p5521d80: "M13.9857 7.99182C13.9857 9.58149 13.3542 11.1061 12.2301 12.2301C11.1061 13.3542 9.58149 13.9857 7.99182 13.9857C6.31617 13.9794 4.70783 13.3255 3.50308 12.1609L1.99795 10.6558",
+p55e1500: "M9.74552 161.518C14.077 160.851 14.5583 158.518 11.1893 154.518C7.82041 151.184 8.30168 149.518 12.6332 149.518C16.4834 148.851 16.9647 146.518 14.077 142.518C10.7081 139.184 10.9487 137.184 14.7989 136.518",
+p670ab80: "M15.4098 383.741C17.0389 379.313 16.6316 374.503 14.5001 372.998C12.3687 371.494 9.32013 373.865 7.69107 378.293C6.062 382.722 6.46929 387.532 8.60077 389.036C10.7323 390.541 13.7808 388.17 15.4098 383.741Z",
+p6b82b00: "M21.4376 69.9849L25.1631 74.8191L24.63 82.8474L29.3026 78.8341L34.4475 82.6036L33.9752 74.8208L37.8791 68.8411L32.0833 68.1027L29.6001 60.811L26.8789 67.9378L21.4376 69.9849Z",
+p6cb7a00: "M5.32788 10.6558H1.99795V13.9857",
+p751e500: "M242.649 228.985C243.325 232.736 245.126 235.344 246.674 234.81C248.221 234.275 248.928 230.801 248.253 227.05C247.578 223.299 245.776 220.691 244.229 221.226C242.681 221.76 241.974 225.234 242.649 228.985Z",
+p7670300: "M3.84243 6.39238C3.4692 6.39238 3.09962 6.31887 2.7548 6.17604C2.40998 6.03321 2.09667 5.82386 1.83276 5.55995C1.56884 5.29603 1.3595 4.98272 1.21667 4.6379C1.07384 4.29308 1.00033 3.92351 1.00033 3.55028C1.00033 3.17705 1.07384 2.80747 1.21667 2.46265C1.3595 2.11783 1.56884 1.80452 1.83276 1.5406C2.09667 1.27669 2.40998 1.06734 2.7548 0.924513C3.09962 0.781684 3.4692 0.70817 3.84243 0.70817C4.5962 0.70817 5.3191 1.00761 5.8521 1.5406C6.3851 2.0736 6.68454 2.7965 6.68454 3.55028C6.68454 4.30405 6.3851 5.02695 5.8521 5.55995C5.3191 6.09295 4.5962 6.39238 3.84243 6.39238ZM10.474 8.9187C9.80399 8.9187 9.16141 8.65253 8.68763 8.17876C8.21386 7.70498 7.94769 7.0624 7.94769 6.39238C7.94769 5.72236 8.21386 5.07978 8.68763 4.60601C9.16141 4.13223 9.80399 3.86607 10.474 3.86607C11.144 3.86607 11.7866 4.13223 12.2604 4.60601C12.7342 5.07978 13.0003 5.72236 13.0003 6.39238C13.0003 7.0624 12.7342 7.70498 12.2604 8.17876C11.7866 8.65253 11.144 8.9187 10.474 8.9187ZM10.474 9.55028C11.2278 9.55028 11.9507 9.84971 12.4837 10.3827C13.0167 10.9157 13.3161 11.6386 13.3161 12.3924V12.7082H7.6319V12.3924C7.6319 11.6386 7.93134 10.9157 8.46434 10.3827C8.99734 9.84971 9.72024 9.55028 10.474 9.55028ZM3.84243 7.02396C4.25713 7.02396 4.66777 7.10564 5.0509 7.26434C5.43404 7.42304 5.78216 7.65565 6.0754 7.94889C6.36864 8.24212 6.60125 8.59025 6.75995 8.97338C6.91864 9.35651 7.00033 9.76715 7.00033 10.1819V12.7082H0.684536V10.1819C0.684536 9.34433 1.01724 8.54111 1.60946 7.94889C2.20168 7.35667 3.0049 7.02396 3.84243 7.02396Z",
+p8f80e00: "M145.105 359.018L139.33 346.018L146.549 340.018L151.603 353.018L145.105 359.018Z",
+p9491b80: "M296.832 22.0362L290.642 21.3557L287.667 14.4983L285.195 22.3894L279.129 23.9382L283.96 29.2505L282.85 38.3409L288.419 33.7055L294.116 37.1305L292.997 28.728L296.832 22.0362Z",
+p9a6ab80: "M83.7424 186.018L80.8547 150.018",
+pa248b00: "M177.591 542.018L171.094 547.018V536.018L177.591 542.018Z",
+pabdaa80: "M1.99795 7.99182C1.99795 6.40215 2.62945 4.87758 3.75352 3.75352C4.87758 2.62945 6.40215 1.99795 7.99182 1.99795C9.66747 2.00426 11.2758 2.65809 12.4806 3.82275L13.9857 5.32788",
+pb0da100: "M75.0792 80.5176C79.4107 78.5176 80.1326 74.5176 77.245 68.5176C74.3573 63.1842 75.3198 59.1842 80.1326 56.5176C84.4641 54.5176 85.186 50.8509 82.2984 45.5176C79.892 39.5176 80.8545 35.5176 85.186 33.5176",
+pbdbaa00: "M4.50185 7.91386C4.77147 7.91386 4.99022 8.13261 4.99022 8.40223C4.99022 8.67185 4.77147 8.8906 4.50185 8.8906H4.49549C4.22587 8.8906 4.00712 8.67185 4.00712 8.40223C4.00712 8.13261 4.22587 7.91386 4.49549 7.91386H4.50185Z",
+pc00e050: "M267.109 506.018L271.44 484.018",
+pca2f800: "M319.087 519.018L337.857 497.018",
+pcd62e8: "M129.945 81.0176L163.153 67.0176",
+pcef7b00: "M4.09758 10.0375C4.07876 9.92874 4.06348 9.81819 4.05171 9.70646C4.03348 9.52886 4.02349 9.35126 4.02349 9.17602V9.17014C4.02525 7.78525 4.58686 6.53154 5.49482 5.62345C6.40279 4.71536 7.6565 4.15387 9.04152 4.15211H9.05328C10.4382 4.15387 11.6919 4.71548 12.6 5.62345C13.5074 6.53083 14.0696 7.78453 14.0713 9.16954V9.18248C14.0696 10.5674 13.5074 11.8205 12.6 12.7286C11.692 13.6365 10.4383 14.1982 9.05328 14.1999H9.0474C8.41406 14.1999 7.80775 14.0823 7.24914 13.8682C6.77457 13.686 6.33411 13.4337 5.94128 13.1243L5.80132 13.5166C6.24119 13.8459 6.73223 14.1105 7.2609 14.2946C7.81897 14.4893 8.42056 14.5957 9.04742 14.5957C10.544 14.5957 11.8989 13.9888 12.8792 13.0085C13.8596 12.0282 14.4664 10.6726 14.4664 9.17667C14.4664 7.68004 13.8596 6.32519 12.8792 5.34484C12.0195 4.48509 10.8722 3.91231 9.59375 3.78474L9.5761 3.78298H9.57552C9.40146 3.76592 9.22562 3.7571 9.04685 3.7571C8.86866 3.7571 8.69224 3.76592 8.51818 3.78298H8.51759L8.49995 3.78474C7.22149 3.91294 6.07421 4.48512 5.21445 5.34484C4.23414 6.32515 3.62725 7.6807 3.62725 9.17667C3.62725 9.43189 3.6443 9.67946 3.67723 9.91881C3.69252 10.0323 3.71193 10.1446 3.73428 10.2558C3.84483 10.1687 3.96657 10.0946 4.09712 10.0376L4.09758 10.0375ZM4.75504 12.424C4.51334 12.424 4.294 12.3258 4.13522 12.1676C3.97703 12.0094 3.87883 11.7895 3.87883 11.5478C3.87883 11.3061 3.97703 11.0867 4.13522 10.9279C4.29341 10.7697 4.51276 10.6715 4.75504 10.6715C4.99674 10.6715 5.21609 10.7697 5.37428 10.9279C5.53247 11.0861 5.63068 11.3061 5.63068 11.5478C5.63068 11.7895 5.53247 12.0088 5.37428 12.1676C5.21609 12.3258 4.99674 12.424 4.75504 12.424ZM4.45454 11.8483C4.53158 11.9253 4.63742 11.9723 4.75504 11.9723C4.87207 11.9723 4.97851 11.9247 5.05496 11.8483C5.132 11.7712 5.17904 11.6654 5.17904 11.5478C5.17904 11.4307 5.13141 11.3243 5.05496 11.2473C4.97792 11.1702 4.87208 11.1232 4.75504 11.1232C4.63743 11.1232 4.53157 11.1708 4.45454 11.2473C4.3775 11.3243 4.33046 11.4301 4.33046 11.5478C4.33046 11.6648 4.37809 11.7712 4.45454 11.8483ZM3.30839 16C3.18373 16 3.08258 15.8989 3.08258 15.7742C3.08258 15.6495 3.18373 15.5484 3.30839 15.5484H4.43455L3.19725 12.0824C3.16902 11.9994 3.14667 11.9148 3.13197 11.8295C3.11609 11.7366 3.10786 11.6431 3.10786 11.5484C3.10786 11.2232 3.20254 10.9192 3.36602 10.6634C3.3078 10.4411 3.26252 10.2123 3.23076 9.97942C3.19489 9.71421 3.17548 9.44604 3.17548 9.17672C3.17548 7.55534 3.83294 6.08753 4.89501 5.02558C5.78299 4.13761 6.95507 3.53248 8.26286 3.35784V2.7833C8.26286 2.56807 8.35107 2.37224 8.49337 2.23051C8.63451 2.0882 8.83092 2 9.04675 2C9.26257 2 9.45898 2.08821 9.60012 2.22993C9.74184 2.37165 9.83005 2.56748 9.83005 2.7833V3.35784C11.1379 3.53251 12.3094 4.13762 13.1979 5.02558C14.2599 6.08763 14.9174 7.5561 14.9174 9.17672C14.9174 10.7981 14.26 12.2659 13.1979 13.3279C12.1358 14.3899 10.6674 15.0474 9.04676 15.0474C8.36989 15.0474 7.71891 14.9321 7.11195 14.7204C6.58387 14.5358 6.0893 14.2782 5.64296 13.9594L5.07548 15.5479H6.20105C6.32572 15.5479 6.42687 15.649 6.42687 15.7737C6.42687 15.8983 6.32572 15.9995 6.20105 15.9995H4.76793C4.7597 16.0001 4.75147 16.0001 4.74324 15.9995H3.30895L3.30839 16ZM6.10176 12.6745C6.24937 12.7991 6.4052 12.9144 6.56811 13.0197L6.86272 12.5098C6.92506 12.4022 7.06266 12.3657 7.17029 12.4281C7.2779 12.4904 7.31436 12.628 7.25203 12.7356L6.95741 13.2455C7.10325 13.3208 7.2538 13.3878 7.40846 13.4472C7.84951 13.6165 8.32466 13.7195 8.82041 13.7436V13.1555C8.82041 13.0308 8.92156 12.9297 9.04623 12.9297C9.1709 12.9297 9.27204 13.0308 9.27204 13.1555V13.7436C9.94068 13.7112 10.5723 13.5348 11.135 13.2449L10.8404 12.7345C10.7787 12.6268 10.8157 12.4892 10.9233 12.4275C11.031 12.3657 11.1686 12.4028 11.2303 12.5104L11.5243 13.0197C11.7972 12.8432 12.0501 12.6386 12.2794 12.4098C12.5082 12.1811 12.7128 11.9282 12.8893 11.6548L12.38 11.3607C12.2724 11.299 12.2353 11.1614 12.2971 11.0537C12.3588 10.9461 12.4964 10.9091 12.604 10.9708L13.1145 11.2654C13.4044 10.7021 13.5802 10.0711 13.6132 9.40245H13.0251C12.9004 9.40245 12.7993 9.3013 12.7993 9.17663C12.7993 9.05196 12.9004 8.95081 13.0251 8.95081H13.6132C13.5808 8.28218 13.4044 7.65119 13.1145 7.08782L12.604 7.38243C12.4964 7.44418 12.3588 7.40713 12.2971 7.29952C12.2353 7.1919 12.2724 7.05429 12.38 6.99254L12.8893 6.69851C12.7128 6.42565 12.5082 6.17278 12.2794 5.94343C12.0507 5.71468 11.7978 5.51003 11.5243 5.33361L11.2303 5.84287C11.1686 5.95049 11.031 5.98754 10.9233 5.92579C10.8157 5.86404 10.7787 5.72644 10.8404 5.61881L11.135 5.10837C10.5717 4.81845 9.94068 4.64203 9.27204 4.60969V5.19775C9.27204 5.32242 9.1709 5.42357 9.04623 5.42357C8.92156 5.42357 8.82041 5.32242 8.82041 5.19775V4.60969C8.15178 4.64203 7.52078 4.81845 6.95741 5.10837L7.25144 5.61822C7.31378 5.72584 7.27732 5.86403 7.1697 5.92579C7.06208 5.98812 6.92389 5.95166 6.86214 5.84405L6.56752 5.33419C6.29466 5.51062 6.04178 5.71525 5.81303 5.94402C5.58428 6.17279 5.37963 6.42565 5.2032 6.69851L5.71305 6.99313C5.82067 7.05546 5.85713 7.19307 5.7948 7.30069C5.73246 7.40831 5.59486 7.44477 5.48723 7.38243L4.97738 7.0884C4.68746 7.65119 4.51162 8.28277 4.4787 8.9514H5.06676C5.19143 8.9514 5.29258 9.05255 5.29258 9.17722C5.29258 9.30189 5.19143 9.40304 5.06676 9.40304H4.4787C4.48282 9.49125 4.48928 9.5771 4.49811 9.66179C4.50693 9.74706 4.51869 9.83174 4.53221 9.91643C4.60455 9.90643 4.67864 9.90172 4.75333 9.90172C5.20732 9.90172 5.61897 10.0864 5.91712 10.3845C6.21528 10.6821 6.39992 11.0937 6.39992 11.5483C6.39992 11.6424 6.3911 11.7365 6.37581 11.8282C6.35993 11.9223 6.33582 12.0141 6.30465 12.1011L6.1 12.6745L6.10176 12.6745ZM3.62891 11.95L4.75506 15.1031L5.88121 11.95C5.90356 11.8864 5.9212 11.82 5.93296 11.7518C5.94414 11.6871 5.95002 11.6183 5.95002 11.5477C5.95002 11.2178 5.81594 10.9185 5.60012 10.7027C5.38488 10.4862 5.08556 10.3528 4.75506 10.3528C4.42457 10.3528 4.12524 10.4863 3.91001 10.7021C3.6936 10.9185 3.56011 11.2178 3.56011 11.5483C3.56011 11.6195 3.56599 11.6888 3.57716 11.7541C3.58775 11.8171 3.60363 11.8776 3.62245 11.9341L3.62891 11.9505L3.62891 11.95ZM9.37898 3.31483V2.78262C9.37898 2.69147 9.34134 2.60856 9.28136 2.54857C9.22138 2.48859 9.13846 2.45095 9.04731 2.45095C8.95616 2.45095 8.87265 2.48859 8.81267 2.54857C8.7521 2.60797 8.71505 2.69147 8.71505 2.78262V3.31483C8.82502 3.30836 8.93557 3.30542 9.0473 3.30542C9.15904 3.30542 9.2696 3.30836 9.37956 3.31483H9.37898ZM8.708 8.72091L9.61069 9.24252L10.1323 7.29718L8.708 8.72147V8.72091ZM9.38604 9.63124L8.48277 9.11022L7.96116 11.0556L9.38545 9.63127L9.38604 9.63124ZM8.18109 8.60918L10.4081 6.38216C10.4963 6.29395 10.6392 6.29395 10.7274 6.38216C10.7898 6.4445 10.808 6.53388 10.7821 6.61209L9.97 9.64241C9.95942 9.6824 9.93884 9.71651 9.91178 9.74356L7.68477 11.9706C7.59656 12.0588 7.45365 12.0588 7.36545 11.9706C7.30311 11.9082 7.28488 11.8189 7.31076 11.7406L8.12287 8.71033C8.13346 8.67034 8.15404 8.63623 8.18109 8.60859V8.60918Z",
+pe6ea010: "M9.71083 10.5183C9.98045 10.5183 10.1992 10.7371 10.1992 11.0067C10.1992 11.2763 9.98045 11.4951 9.71083 11.4951H9.70447C9.43485 11.4951 9.2161 11.2763 9.2161 11.0067C9.2161 10.7371 9.43485 10.5183 9.70447 10.5183H9.71083Z",
+pec20f00: "M0.625 10.625L5.625 5.625L0.625 0.625",
+pee931c0: "M64.9727 342.018L64.2508 326.018L74.3576 338.018L64.9727 342.018Z",
+}
diff --git a/src/imports/svg-adqhdgpsh.ts b/src/imports/svg-adqhdgpsh.ts
new file mode 100644
index 0000000..d24c791
--- /dev/null
+++ b/src/imports/svg-adqhdgpsh.ts
@@ -0,0 +1,105 @@
+export default {
+p10f7c300: "M254.114 437.018L246.173 442.018L244.729 432.018L254.114 437.018Z",
+p112ca500: "M228.126 394.018L210.8 364.018",
+p114f0d00: "M323.418 268.018L337.856 264.018",
+p125d3600: "M271.44 287.018L278.659 288.018L272.884 296.018L271.44 287.018Z",
+p1261c6f0: "M364.232 457.177L363.168 448.821L367.663 443.414L361.276 442.102L359.207 433.992L356.072 441.938L350.039 443.411L354.356 448.819L353.409 457.666L359.087 453.407L364.232 457.177Z",
+p130d1600: "M325.583 92.0176V110.018L314.755 107.018L325.583 92.0176Z",
+p13ac0f00: "M168.206 183.018L176.147 187.018L168.206 194.018V183.018Z",
+p13f2e80: "M2 10C2 11.8856 2 12.8284 2.58579 13.4142C3.17157 14 4.11438 14 6 14H10C11.8856 14 12.8284 14 13.4142 13.4142C14 12.8284 14 11.8856 14 10",
+p13f60480: "M258.446 191.018C260.371 196.351 262.296 196.351 264.221 191.018C266.146 185.684 268.071 185.684 269.996 191.018C271.921 196.351 273.846 196.351 275.772 191.018C277.697 185.684 279.622 185.684 281.547 191.018",
+p149b8d00: "M13.6935 11.9998L9.79352 8.0998C9.61019 7.91647 9.51852 7.68314 9.51852 7.3998C9.51852 7.11647 9.61019 6.88314 9.79352 6.6998C9.97685 6.51647 10.2102 6.4248 10.4935 6.4248C10.7769 6.4248 11.0102 6.51647 11.1935 6.6998L15.7935 11.2998C15.8935 11.3998 15.9645 11.5081 16.0065 11.6248C16.0485 11.7415 16.0692 11.8665 16.0685 11.9998C16.0679 12.1331 16.0472 12.2581 16.0065 12.3748C15.9659 12.4915 15.8949 12.5998 15.7935 12.6998L11.1935 17.2998C11.0102 17.4831 10.7769 17.5748 10.4935 17.5748C10.2102 17.5748 9.97685 17.4831 9.79352 17.2998C9.61019 17.1165 9.51852 16.8831 9.51852 16.5998C9.51852 16.3165 9.61019 16.0831 9.79352 15.8998L13.6935 11.9998Z",
+p15a24580: "M16.1716 10.9999L10.8076 5.63589L12.2218 4.22168L20 11.9999L12.2218 19.778L10.8076 18.3638L16.1716 12.9999H4V10.9999H16.1716Z",
+p1617b600: "M120.992 573.144L125.197 578.719L124.5 586.723L129.576 583.323L134.13 586.957L133.426 578.469L137.45 572.645L131.672 571.679L129.217 564.648L126.419 571.927L120.992 573.144Z",
+p1621380: "M251.948 365.018L263.499 362.018L259.167 378.018L251.948 365.018Z",
+p16eea180: "M9.71083 7.91386C9.98045 7.91386 10.1992 8.13261 10.1992 8.40223C10.1992 8.67185 9.98045 8.8906 9.71083 8.8906H9.70447C9.43485 8.8906 9.2161 8.67185 9.2161 8.40223C9.2161 8.13261 9.43485 7.91386 9.70447 7.91386H9.71083Z",
+p18d2ab00: "M7.10634 7.91386C7.37596 7.91386 7.59471 8.13261 7.59471 8.40223C7.59471 8.67185 7.37596 8.8906 7.10634 8.8906H7.09998C6.83036 8.8906 6.61161 8.67185 6.61161 8.40223C6.61161 8.13261 6.83036 7.91386 7.09998 7.91386H7.10634Z",
+p195a2f80: "M144.383 34.0176L134.276 32.0176L140.773 21.0176L144.383 34.0176Z",
+p1a652670: "M0.0831877 3.07411C-0.0277293 3.18503 -0.0277292 3.36486 0.0831876 3.47577C0.194104 3.58669 0.373936 3.58669 0.484853 3.47577L0.28402 3.27494L0.0831877 3.07411ZM3.27531 0.283654L3.07448 0.0828214L0.0831877 3.07411L0.28402 3.27494L0.484853 3.47577L3.47614 0.484487L3.27531 0.283654Z",
+p1aba0880: "M4.50185 10.5183C4.77147 10.5183 4.99022 10.7371 4.99022 11.0067C4.99022 11.2763 4.77147 11.4951 4.50185 11.4951H4.49549C4.22587 11.4951 4.00712 11.2763 4.00712 11.0067C4.00712 10.7371 4.22587 10.5183 4.49549 10.5183H4.50185Z",
+p1ada2c00: "M95.2927 28.0176L106.121 23.0176L103.234 38.0176L95.2927 28.0176Z",
+p1ae38580: "M273.967 358.018C276.855 363.351 279.742 363.351 282.63 358.018C285.518 352.684 288.405 352.684 291.293 358.018C293.699 363.351 296.346 363.351 299.234 358.018C302.122 352.684 305.009 352.684 307.897 358.018",
+p1af8f150: "M362.763 158.518C364.688 153.851 363.966 152.518 360.597 154.518C356.747 156.518 355.784 155.184 357.709 150.518C360.116 145.851 359.394 144.851 355.544 147.518C351.694 149.518 350.972 148.184 353.378 143.518",
+p1b50ff00: "M389.112 507.018L381.171 524.018L372.508 516.018L379.727 499.018L389.112 507.018Z",
+p1c14be00: "M173.283 117.162L172.479 123.777L167.646 125.823L171.463 129.435L171.348 135.758L175.069 132.091L180.055 134.162L177.887 127.76L181.185 122.181L175.93 122.315L173.283 117.162Z",
+p1ca023c0: "M55.5875 462.517C58.9564 466.517 61.3628 465.517 62.8066 459.517C63.7692 453.517 65.9349 452.517 69.3039 456.517C72.6728 461.184 75.0792 460.517 76.523 454.517C77.4856 448.517 79.6513 447.517 83.0202 451.517",
+p1cfa9a70: "M371.908 553.286L374.187 555.938L373.57 559.972L376.466 558.59L379.378 559.445L378.381 555.434L380.295 552.277L377.067 552.321L375.753 549.208L374.488 552.803L371.908 553.286Z",
+p1d1bf900: "M354.1 427.518C352.656 433.518 354.1 436.851 358.431 437.518C363.244 437.518 364.688 440.518 362.763 446.518C361.319 453.184 363.003 456.518 367.816 456.518C372.148 456.518 373.591 459.851 372.148 466.518",
+p1d9db000: "M218.018 98.0176L231.013 105.018L225.959 121.018L213.687 113.018L218.018 98.0176Z",
+p1f72dd00: "M80.8545 86.0176L75.0792 116.018",
+p1f83a980: "M33.208 501.018L38.2614 494.018L43.3148 501.018L38.2614 508.018L33.208 501.018Z",
+p1fa04100: "M7.10634 10.5183C7.37596 10.5183 7.59471 10.7371 7.59471 11.0067C7.59471 11.2763 7.37596 11.4951 7.10634 11.4951H7.09998C6.83036 11.4951 6.61161 11.2763 6.61161 11.0067C6.61161 10.7371 6.83036 10.5183 7.09998 10.5183H7.10634Z",
+p1fd17c80: "M186.976 417.018L190.585 403.018L198.526 411.018L186.976 417.018Z",
+p20991b80: "M320.53 248.018L307.536 243.018L311.145 225.018L324.14 230.018L320.53 248.018Z",
+p21309b00: "M8.00104 2V10.6667M8.00104 10.6667L10.6677 7.75M8.00104 10.6667L5.33437 7.75",
+p21984100: "M127.779 219.018L122.003 208.018L130.666 205.018L127.779 219.018Z",
+p21a2df00: "M253.031 594.079C257.52 597.669 262.29 597.865 263.685 594.517C265.081 591.169 262.573 585.545 258.084 581.955C253.596 578.365 248.826 578.169 247.43 581.517C246.035 584.865 248.542 590.49 253.031 594.079Z",
+p2369e2c0: "M332.442 323.518C330.517 318.851 329.314 319.184 328.832 324.518C327.87 329.851 326.426 330.184 324.501 325.518C323.057 320.184 321.854 320.184 320.891 325.518C320.41 330.851 319.207 331.184 317.282 326.518",
+p23a159d0: "M13.9852 1.99805V5.32797H10.6553",
+p23d70180: "M371.787 244.018L358.792 249.018L355.183 233.018L368.177 227.018L371.787 244.018Z",
+p23dc0000: "M97.4587 264.018L124.892 246.018",
+p245b5500: "M224.321 520.472C226.808 522.227 229.558 521.656 230.463 519.195C231.368 516.735 230.086 513.317 227.599 511.562C225.112 509.807 222.363 510.379 221.458 512.839C220.552 515.3 221.835 518.717 224.321 520.472Z",
+p245cc9b0: "M25.2663 484.157C25.322 479.739 22.7818 476.096 19.5927 476.019C16.4035 475.941 13.7731 479.46 13.7174 483.878C13.6618 488.295 16.2019 491.939 19.3911 492.016C22.5802 492.093 25.2106 488.575 25.2663 484.157Z",
+p26750500: "M357.9 341.225L362.27 336.289L367.802 338.797L365.931 331.162L369.159 323.882L363.923 324.509L360.36 318.456L358.549 326.119L353.038 328.709L357.585 332.99L357.9 341.225Z",
+p273a0500: "M130.326 25.3151C128.451 28.8896 129.023 33.8925 131.604 36.4895C134.184 39.0865 137.796 38.2942 139.671 34.7197C141.546 31.1452 140.974 26.1423 138.393 23.5453C135.813 20.9483 132.201 21.7407 130.326 25.3151Z",
+p28638300: "M1.03703 0C0.880167 0 0.753006 0.12716 0.753006 0.28402C0.753006 0.44088 0.880167 0.568041 1.03703 0.568041V0.28402V0ZM1.03703 0.28402V0.568041H3.57723V0.28402V0H1.03703V0.28402Z",
+p28906180: "M22.9838 319.098L24.2435 315.362L27.2158 315.144L25.3654 312.608L25.9164 308.681L22.8062 309.881L20.818 308.327L20.9757 312.445L19.1452 315.008L21.9798 315.771L22.9838 319.098Z",
+p293abff0: "M306.814 562.018L297.429 571.018L289.488 554.018L298.873 545.018L306.814 562.018Z",
+p2a600580: "M156.655 467.517C160.987 466.851 161.228 465.184 157.377 462.517C154.49 459.184 154.971 457.517 158.821 457.517C162.671 457.517 162.912 456.184 159.543 453.517C156.174 449.517 156.655 447.851 160.987 448.517",
+p2c53d00: "M220.184 197.018L208.634 201.018L215.131 184.018L220.184 197.018Z",
+p2ce32bc0: "M3.12215 2.2972C3.12215 2.45406 3.24931 2.58122 3.40617 2.58122C3.56303 2.58122 3.69019 2.45406 3.69019 2.2972L3.40617 2.2972L3.12215 2.2972ZM3.40617 2.2972L3.69019 2.2972L3.69019 0.000558985L3.40617 0.000558972L3.12215 0.00055896L3.12215 2.2972L3.40617 2.2972Z",
+p2d198000: "M3.60984 235.018C7.94133 233.684 8.66324 230.684 5.77558 226.018C2.40664 222.018 2.88792 219.351 7.21941 218.018C11.5509 216.684 12.0322 214.018 8.66324 210.018C5.77558 205.351 6.4975 202.351 10.829 201.018",
+p2dc248a0: "M187.698 421.018L167.484 411.018",
+p2e546900: "M252.186 5.54095L248.257 7.63402L244.844 3.94005L244.897 10.3428L241.537 13.0515L245.27 14.5538L246.337 20.7841L249.004 16.0561L253.182 16.7703L250.657 11.5003L252.186 5.54095Z",
+p2e64dc00: "M3.28124 1.9681C3.28124 0.880774 4.16267 -0.00065136 5.24999 -0.00065136C6.33732 -0.00065136 7.21874 0.880774 7.21874 1.9681C7.21874 3.05542 6.33732 3.93685 5.24999 3.93685C4.16267 3.93685 3.28124 3.0554 3.28124 1.9681ZM10.2437 2.00564C9.90201 1.66393 9.34797 1.66393 9.00629 2.00564L6.63755 4.37435H3.86241L1.4937 2.00564C1.15201 1.66393 0.597973 1.66393 0.256286 2.00564C-0.0854289 2.34736 -0.0854289 2.90137 0.256286 3.24308L2.84374 5.83051V13.1243C2.84374 13.6076 3.2355 13.9993 3.71874 13.9993H4.15624C4.63949 13.9993 5.03124 13.6076 5.03124 13.1243V10.0618H5.46874V13.1243C5.46874 13.6076 5.8605 13.9993 6.34374 13.9993H6.78124C7.26449 13.9993 7.65624 13.6076 7.65624 13.1243V5.83051L10.2437 3.24306C10.5854 2.90134 10.5854 2.34736 10.2437 2.00564Z",
+p2f540d00: "M68.582 222.018L77.2449 216.018L83.0203 233.018L73.6354 239.018L68.582 222.018Z",
+p302dfa00: "M260.93 107.499C264.208 105.477 266.076 101.384 265.103 98.3568C264.13 95.3296 260.684 94.5144 257.406 96.5361C254.128 98.5579 252.259 102.651 253.232 105.678C254.205 108.705 257.652 109.52 260.93 107.499Z",
+p30587f00: "M184.088 308.018L179.757 282.018",
+p30846ac0: "M332.081 27.0176L337.856 41.0176L329.915 48.0176L324.14 35.0176L332.081 27.0176Z",
+p31508a60: "M288.044 452.518C290.932 457.184 292.857 456.518 293.819 450.518C294.301 444.518 296.226 443.518 299.595 447.518C302.482 452.184 304.407 451.518 305.37 445.518C306.333 439.518 308.258 438.851 311.145 443.518",
+p315a1e30: "M210.521 330.822L215.607 329.284L218.741 334.866L219.673 327.772L223.72 324.845L219.601 322.116L218.492 315.07L215.5 320.8L210.379 319.51L212.492 325.116L210.521 330.822Z",
+p31b9a200: "M118.104 478.469L120.826 481.901L120.824 487.732L124.539 484.991L128.996 486.367L127.389 480.363L129.867 476.593L125.657 476.589L123.06 470.927L122.067 477.1L118.104 478.469Z",
+p31d95b00: "M8.55637 431.195L8.25539 426.113L10.6332 423.088L7.45944 422.268L6.66349 418.423L4.48466 422.409L1.50987 422.551L3.69372 425.844L2.40782 430.516L5.67858 428.177L8.55637 431.195Z",
+p31f8ed00: "M11.3333 14.6667C10.7778 14.6667 10.3056 14.4722 9.91667 14.0833C9.52778 13.6944 9.33333 13.2222 9.33333 12.6667C9.33333 12.6 9.35 12.4444 9.38333 12.2L4.7 9.46667C4.52222 9.63333 4.31667 9.764 4.08333 9.85867C3.85 9.95333 3.6 10.0004 3.33333 10C2.77778 10 2.30556 9.80556 1.91667 9.41667C1.52778 9.02778 1.33333 8.55556 1.33333 8C1.33333 7.44444 1.52778 6.97222 1.91667 6.58333C2.30556 6.19444 2.77778 6 3.33333 6C3.6 6 3.85 6.04733 4.08333 6.142C4.31667 6.23667 4.52222 6.36711 4.7 6.53333L9.38333 3.8C9.36111 3.72222 9.34733 3.64733 9.342 3.57533C9.33667 3.50333 9.33378 3.42267 9.33333 3.33333C9.33333 2.77778 9.52778 2.30556 9.91667 1.91667C10.3056 1.52778 10.7778 1.33333 11.3333 1.33333C11.8889 1.33333 12.3611 1.52778 12.75 1.91667C13.1389 2.30556 13.3333 2.77778 13.3333 3.33333C13.3333 3.88889 13.1389 4.36111 12.75 4.75C12.3611 5.13889 11.8889 5.33333 11.3333 5.33333C11.0667 5.33333 10.8167 5.286 10.5833 5.19133C10.35 5.09667 10.1444 4.96622 9.96667 4.8L5.28333 7.53333C5.30556 7.61111 5.31956 7.68622 5.32533 7.75867C5.33111 7.83111 5.33378 7.91156 5.33333 8C5.33289 8.08844 5.33022 8.16911 5.32533 8.242C5.32044 8.31489 5.30644 8.38978 5.28333 8.46667L9.96667 11.2C10.1444 11.0333 10.35 10.9029 10.5833 10.8087C10.8167 10.7144 11.0667 10.6671 11.3333 10.6667C11.8889 10.6667 12.3611 10.8611 12.75 11.25C13.1389 11.6389 13.3333 12.1111 13.3333 12.6667C13.3333 13.2222 13.1389 13.6944 12.75 14.0833C12.3611 14.4722 11.8889 14.6667 11.3333 14.6667Z",
+p3282b480: "M384.781 101.018L373.952 106.018L369.621 86.0176L380.449 82.0176L384.781 101.018Z",
+p32b87800: "M311.145 399.018C314.514 403.018 316.68 402.018 317.643 396.018C318.605 390.018 320.771 389.351 324.14 394.018C327.027 398.018 329.193 397.018 330.637 391.018C331.118 385.018 333.284 384.351 337.134 389.018",
+p33b66680: "M288.044 416.018L298.873 402.018L306.814 414.018L295.985 428.018L288.044 416.018Z",
+p36217800: "M45.5068 393.826L49.7872 397.93L49.6864 405.928L54.0802 401.034L59.0951 404.156L57.0179 397.104L60.7025 391.193L54.928 391.053L52.1164 384.984L50.5846 391.948L45.5068 393.826Z",
+p365e9600: "M160.265 253.018L158.821 266.018L151.602 257.018L160.265 253.018Z",
+p36d2ba80: "M205.746 57.0176L215.853 23.0176",
+p37f77100: "M74.3568 43.0176L44.0364 19.0176",
+p38fea80: "M126.676 130.315L122.907 131.636L119.777 127.369L119.722 132.369L116.378 134.499L119.668 137.368L120.621 142.589L123.117 138.841L126.566 140.314L124.605 134.872L126.676 130.315Z",
+p394df1c0: "M93.1269 382.018L88.7954 373.018L94.5707 367.018L98.9022 376.018L93.1269 382.018Z",
+p39b4f00: "M93.8494 516.018H86.6303V503.018H93.8494V516.018Z",
+p39dd4ef0: "M25.9887 535.018L31.0421 543.018L22.3791 554.018L17.3257 546.018L25.9887 535.018Z",
+p3a1b1dc0: "M132.471 414.018C133.434 407.351 131.749 404.684 127.418 406.018C122.605 406.018 120.68 403.018 121.643 397.018C123.086 391.018 121.402 388.018 116.589 388.018C111.776 389.351 110.092 386.684 111.536 380.018",
+p3aac8400: "M12 11.5C11.337 11.5 10.7011 11.2366 10.2322 10.7678C9.76339 10.2989 9.5 9.66304 9.5 9C9.5 8.33696 9.76339 7.70107 10.2322 7.23223C10.7011 6.76339 11.337 6.5 12 6.5C12.663 6.5 13.2989 6.76339 13.7678 7.23223C14.2366 7.70107 14.5 8.33696 14.5 9C14.5 9.3283 14.4353 9.65339 14.3097 9.95671C14.1841 10.26 13.9999 10.5356 13.7678 10.7678C13.5356 10.9999 13.26 11.1841 12.9567 11.3097C12.6534 11.4353 12.3283 11.5 12 11.5ZM12 2C10.1435 2 8.36301 2.7375 7.05025 4.05025C5.7375 5.36301 5 7.14348 5 9C5 14.25 12 22 12 22C12 22 19 14.25 19 9C19 7.14348 18.2625 5.36301 16.9497 4.05025C15.637 2.7375 13.8565 2 12 2Z",
+p3ae84670: "M192.751 597.018V584.018H206.468V597.018H192.751Z",
+p3b167700: "M214.409 260.018L204.302 262.018L210.078 248.018L214.409 260.018Z",
+p3ba87480: "M73.7862 566.429L70.7532 567.019L68.8815 563.814L68.2967 568.212L65.8403 569.404L68.1465 571.811L68.5727 576.013L70.3106 572.818L73.4857 573.628L72.0484 569.624L73.7862 566.429Z",
+p3d2bae00: "M3.00033 0.583333V2.33333M9.00034 0.583333V2.33333",
+p3d2fe400: "M304.648 167.018L294.541 145.018",
+p3e65c400: "M63.1679 295.018C64.1305 288.351 62.2054 285.018 57.3926 285.018C52.5798 285.684 50.6547 282.684 51.6173 276.018C52.5798 269.351 50.4141 266.018 45.12 266.018C40.3073 266.684 38.3822 263.684 39.3447 257.018",
+p3e80b480: "M9.70465 0.1C9.97427 0.1 10.193 0.318752 10.193 0.588372V1.40233H11.6581C13.0062 1.40233 14.1 2.49608 14.1 3.84419V11.6581C14.1 13.0062 13.0062 14.1 11.6581 14.1H2.54186C1.19376 14.1 0.1 13.0062 0.1 11.6581V3.84419C0.1 2.49608 1.19376 1.40233 2.54186 1.40233H4.00698V0.588372C4.00698 0.318752 4.22573 0.1 4.49535 0.1C4.76497 0.1 4.98372 0.318752 4.98372 0.588372V1.40233H9.21628V0.588372C9.21628 0.318752 9.43503 0.1 9.70465 0.1ZM1.07674 11.6581C1.07674 12.467 1.73299 13.1233 2.54186 13.1233H11.6581C12.467 13.1233 13.1233 12.467 13.1233 11.6581V6.28605H1.23953C1.1823 6.28605 1.12762 6.27587 1.07674 6.2568V11.6581ZM2.54186 2.37907C1.73299 2.37907 1.07674 3.03531 1.07674 3.84419V5.33727C1.12762 5.31946 1.1823 5.30929 1.23953 5.30929H13.1233V3.84417C13.1233 3.0353 12.467 2.37906 11.6581 2.37906H10.193V3.19301C10.193 3.46263 9.97427 3.68138 9.70465 3.68138C9.43503 3.68138 9.21628 3.46263 9.21628 3.19301V2.37906H4.98372V3.19301C4.98372 3.46263 4.76497 3.68138 4.49535 3.68138C4.22573 3.68138 4.00698 3.46263 4.00698 3.19301V2.37906L2.54186 2.37907Z",
+p4d87d80: "M0 4.08333C0 2.98317 -3.57628e-08 2.43367 0.3516 2.09183C0.7032 1.75 1.2684 1.75 2.4 1.75H9.6C10.7316 1.75 11.2968 1.75 11.6484 2.09183C12 2.43367 12 2.98317 12 4.08333C12 4.35808 12 4.49575 11.9124 4.5815C11.8242 4.66667 11.682 4.66667 11.4 4.66667H0.6C0.3174 4.66667 0.1758 4.66667 0.0875999 4.5815C-5.36442e-08 4.49575 0 4.3575 0 4.08333ZM0 9.33333C0 10.4335 -3.57628e-08 10.983 0.3516 11.3248C0.7032 11.6667 1.2684 11.6667 2.4 11.6667H9.6C10.7316 11.6667 11.2968 11.6667 11.6484 11.3248C12 10.983 12 10.4335 12 9.33333V6.41667C12 6.14192 12 6.00425 11.9124 5.9185C11.8242 5.83333 11.682 5.83333 11.4 5.83333H0.6C0.3174 5.83333 0.1758 5.83333 0.0875999 5.9185C-5.36442e-08 6.00425 0 6.1425 0 6.41667V9.33333Z",
+p5521d80: "M13.9857 7.99182C13.9857 9.58149 13.3542 11.1061 12.2301 12.2301C11.1061 13.3542 9.58149 13.9857 7.99182 13.9857C6.31617 13.9794 4.70783 13.3255 3.50308 12.1609L1.99795 10.6558",
+p55e1500: "M9.74552 161.518C14.077 160.851 14.5583 158.518 11.1893 154.518C7.82041 151.184 8.30168 149.518 12.6332 149.518C16.4834 148.851 16.9647 146.518 14.077 142.518C10.7081 139.184 10.9487 137.184 14.7989 136.518",
+p670ab80: "M15.4098 383.741C17.0389 379.313 16.6316 374.503 14.5001 372.998C12.3687 371.494 9.32013 373.865 7.69107 378.293C6.062 382.722 6.46929 387.532 8.60077 389.036C10.7323 390.541 13.7808 388.17 15.4098 383.741Z",
+p6b82b00: "M21.4376 69.9849L25.1631 74.8191L24.63 82.8474L29.3026 78.8341L34.4475 82.6036L33.9752 74.8208L37.8791 68.8411L32.0833 68.1027L29.6001 60.811L26.8789 67.9378L21.4376 69.9849Z",
+p6cb7a00: "M5.32788 10.6558H1.99795V13.9857",
+p751e500: "M242.649 228.985C243.325 232.736 245.126 235.344 246.674 234.81C248.221 234.275 248.928 230.801 248.253 227.05C247.578 223.299 245.776 220.691 244.229 221.226C242.681 221.76 241.974 225.234 242.649 228.985Z",
+p7670300: "M3.84243 6.39238C3.4692 6.39238 3.09962 6.31887 2.7548 6.17604C2.40998 6.03321 2.09667 5.82386 1.83276 5.55995C1.56884 5.29603 1.3595 4.98272 1.21667 4.6379C1.07384 4.29308 1.00033 3.92351 1.00033 3.55028C1.00033 3.17705 1.07384 2.80747 1.21667 2.46265C1.3595 2.11783 1.56884 1.80452 1.83276 1.5406C2.09667 1.27669 2.40998 1.06734 2.7548 0.924513C3.09962 0.781684 3.4692 0.70817 3.84243 0.70817C4.5962 0.70817 5.3191 1.00761 5.8521 1.5406C6.3851 2.0736 6.68454 2.7965 6.68454 3.55028C6.68454 4.30405 6.3851 5.02695 5.8521 5.55995C5.3191 6.09295 4.5962 6.39238 3.84243 6.39238ZM10.474 8.9187C9.80399 8.9187 9.16141 8.65253 8.68763 8.17876C8.21386 7.70498 7.94769 7.0624 7.94769 6.39238C7.94769 5.72236 8.21386 5.07978 8.68763 4.60601C9.16141 4.13223 9.80399 3.86607 10.474 3.86607C11.144 3.86607 11.7866 4.13223 12.2604 4.60601C12.7342 5.07978 13.0003 5.72236 13.0003 6.39238C13.0003 7.0624 12.7342 7.70498 12.2604 8.17876C11.7866 8.65253 11.144 8.9187 10.474 8.9187ZM10.474 9.55028C11.2278 9.55028 11.9507 9.84971 12.4837 10.3827C13.0167 10.9157 13.3161 11.6386 13.3161 12.3924V12.7082H7.6319V12.3924C7.6319 11.6386 7.93134 10.9157 8.46434 10.3827C8.99734 9.84971 9.72024 9.55028 10.474 9.55028ZM3.84243 7.02396C4.25713 7.02396 4.66777 7.10564 5.0509 7.26434C5.43404 7.42304 5.78216 7.65565 6.0754 7.94889C6.36864 8.24212 6.60125 8.59025 6.75995 8.97338C6.91864 9.35651 7.00033 9.76715 7.00033 10.1819V12.7082H0.684536V10.1819C0.684536 9.34433 1.01724 8.54111 1.60946 7.94889C2.20168 7.35667 3.0049 7.02396 3.84243 7.02396Z",
+p8f80e00: "M145.105 359.018L139.33 346.018L146.549 340.018L151.603 353.018L145.105 359.018Z",
+p9491b80: "M296.832 22.0362L290.642 21.3557L287.667 14.4983L285.195 22.3894L279.129 23.9382L283.96 29.2505L282.85 38.3409L288.419 33.7055L294.116 37.1305L292.997 28.728L296.832 22.0362Z",
+p9a6ab80: "M83.7424 186.018L80.8547 150.018",
+pa248b00: "M177.591 542.018L171.094 547.018V536.018L177.591 542.018Z",
+pabdaa80: "M1.99795 7.99182C1.99795 6.40215 2.62945 4.87758 3.75352 3.75352C4.87758 2.62945 6.40215 1.99795 7.99182 1.99795C9.66747 2.00426 11.2758 2.65809 12.4806 3.82275L13.9857 5.32788",
+pb0da100: "M75.0792 80.5176C79.4107 78.5176 80.1326 74.5176 77.245 68.5176C74.3573 63.1842 75.3198 59.1842 80.1326 56.5176C84.4641 54.5176 85.186 50.8509 82.2984 45.5176C79.892 39.5176 80.8545 35.5176 85.186 33.5176",
+pbdbaa00: "M4.50185 7.91386C4.77147 7.91386 4.99022 8.13261 4.99022 8.40223C4.99022 8.67185 4.77147 8.8906 4.50185 8.8906H4.49549C4.22587 8.8906 4.00712 8.67185 4.00712 8.40223C4.00712 8.13261 4.22587 7.91386 4.49549 7.91386H4.50185Z",
+pc00e050: "M267.109 506.018L271.44 484.018",
+pca2f800: "M319.087 519.018L337.857 497.018",
+pcd62e8: "M129.945 81.0176L163.153 67.0176",
+pcef7b00: "M4.09758 10.0375C4.07876 9.92874 4.06348 9.81819 4.05171 9.70646C4.03348 9.52886 4.02349 9.35126 4.02349 9.17602V9.17014C4.02525 7.78525 4.58686 6.53154 5.49482 5.62345C6.40279 4.71536 7.6565 4.15387 9.04152 4.15211H9.05328C10.4382 4.15387 11.6919 4.71548 12.6 5.62345C13.5074 6.53083 14.0696 7.78453 14.0713 9.16954V9.18248C14.0696 10.5674 13.5074 11.8205 12.6 12.7286C11.692 13.6365 10.4383 14.1982 9.05328 14.1999H9.0474C8.41406 14.1999 7.80775 14.0823 7.24914 13.8682C6.77457 13.686 6.33411 13.4337 5.94128 13.1243L5.80132 13.5166C6.24119 13.8459 6.73223 14.1105 7.2609 14.2946C7.81897 14.4893 8.42056 14.5957 9.04742 14.5957C10.544 14.5957 11.8989 13.9888 12.8792 13.0085C13.8596 12.0282 14.4664 10.6726 14.4664 9.17667C14.4664 7.68004 13.8596 6.32519 12.8792 5.34484C12.0195 4.48509 10.8722 3.91231 9.59375 3.78474L9.5761 3.78298H9.57552C9.40146 3.76592 9.22562 3.7571 9.04685 3.7571C8.86866 3.7571 8.69224 3.76592 8.51818 3.78298H8.51759L8.49995 3.78474C7.22149 3.91294 6.07421 4.48512 5.21445 5.34484C4.23414 6.32515 3.62725 7.6807 3.62725 9.17667C3.62725 9.43189 3.6443 9.67946 3.67723 9.91881C3.69252 10.0323 3.71193 10.1446 3.73428 10.2558C3.84483 10.1687 3.96657 10.0946 4.09712 10.0376L4.09758 10.0375ZM4.75504 12.424C4.51334 12.424 4.294 12.3258 4.13522 12.1676C3.97703 12.0094 3.87883 11.7895 3.87883 11.5478C3.87883 11.3061 3.97703 11.0867 4.13522 10.9279C4.29341 10.7697 4.51276 10.6715 4.75504 10.6715C4.99674 10.6715 5.21609 10.7697 5.37428 10.9279C5.53247 11.0861 5.63068 11.3061 5.63068 11.5478C5.63068 11.7895 5.53247 12.0088 5.37428 12.1676C5.21609 12.3258 4.99674 12.424 4.75504 12.424ZM4.45454 11.8483C4.53158 11.9253 4.63742 11.9723 4.75504 11.9723C4.87207 11.9723 4.97851 11.9247 5.05496 11.8483C5.132 11.7712 5.17904 11.6654 5.17904 11.5478C5.17904 11.4307 5.13141 11.3243 5.05496 11.2473C4.97792 11.1702 4.87208 11.1232 4.75504 11.1232C4.63743 11.1232 4.53157 11.1708 4.45454 11.2473C4.3775 11.3243 4.33046 11.4301 4.33046 11.5478C4.33046 11.6648 4.37809 11.7712 4.45454 11.8483ZM3.30839 16C3.18373 16 3.08258 15.8989 3.08258 15.7742C3.08258 15.6495 3.18373 15.5484 3.30839 15.5484H4.43455L3.19725 12.0824C3.16902 11.9994 3.14667 11.9148 3.13197 11.8295C3.11609 11.7366 3.10786 11.6431 3.10786 11.5484C3.10786 11.2232 3.20254 10.9192 3.36602 10.6634C3.3078 10.4411 3.26252 10.2123 3.23076 9.97942C3.19489 9.71421 3.17548 9.44604 3.17548 9.17672C3.17548 7.55534 3.83294 6.08753 4.89501 5.02558C5.78299 4.13761 6.95507 3.53248 8.26286 3.35784V2.7833C8.26286 2.56807 8.35107 2.37224 8.49337 2.23051C8.63451 2.0882 8.83092 2 9.04675 2C9.26257 2 9.45898 2.08821 9.60012 2.22993C9.74184 2.37165 9.83005 2.56748 9.83005 2.7833V3.35784C11.1379 3.53251 12.3094 4.13762 13.1979 5.02558C14.2599 6.08763 14.9174 7.5561 14.9174 9.17672C14.9174 10.7981 14.26 12.2659 13.1979 13.3279C12.1358 14.3899 10.6674 15.0474 9.04676 15.0474C8.36989 15.0474 7.71891 14.9321 7.11195 14.7204C6.58387 14.5358 6.0893 14.2782 5.64296 13.9594L5.07548 15.5479H6.20105C6.32572 15.5479 6.42687 15.649 6.42687 15.7737C6.42687 15.8983 6.32572 15.9995 6.20105 15.9995H4.76793C4.7597 16.0001 4.75147 16.0001 4.74324 15.9995H3.30895L3.30839 16ZM6.10176 12.6745C6.24937 12.7991 6.4052 12.9144 6.56811 13.0197L6.86272 12.5098C6.92506 12.4022 7.06266 12.3657 7.17029 12.4281C7.2779 12.4904 7.31436 12.628 7.25203 12.7356L6.95741 13.2455C7.10325 13.3208 7.2538 13.3878 7.40846 13.4472C7.84951 13.6165 8.32466 13.7195 8.82041 13.7436V13.1555C8.82041 13.0308 8.92156 12.9297 9.04623 12.9297C9.1709 12.9297 9.27204 13.0308 9.27204 13.1555V13.7436C9.94068 13.7112 10.5723 13.5348 11.135 13.2449L10.8404 12.7345C10.7787 12.6268 10.8157 12.4892 10.9233 12.4275C11.031 12.3657 11.1686 12.4028 11.2303 12.5104L11.5243 13.0197C11.7972 12.8432 12.0501 12.6386 12.2794 12.4098C12.5082 12.1811 12.7128 11.9282 12.8893 11.6548L12.38 11.3607C12.2724 11.299 12.2353 11.1614 12.2971 11.0537C12.3588 10.9461 12.4964 10.9091 12.604 10.9708L13.1145 11.2654C13.4044 10.7021 13.5802 10.0711 13.6132 9.40245H13.0251C12.9004 9.40245 12.7993 9.3013 12.7993 9.17663C12.7993 9.05196 12.9004 8.95081 13.0251 8.95081H13.6132C13.5808 8.28218 13.4044 7.65119 13.1145 7.08782L12.604 7.38243C12.4964 7.44418 12.3588 7.40713 12.2971 7.29952C12.2353 7.1919 12.2724 7.05429 12.38 6.99254L12.8893 6.69851C12.7128 6.42565 12.5082 6.17278 12.2794 5.94343C12.0507 5.71468 11.7978 5.51003 11.5243 5.33361L11.2303 5.84287C11.1686 5.95049 11.031 5.98754 10.9233 5.92579C10.8157 5.86404 10.7787 5.72644 10.8404 5.61881L11.135 5.10837C10.5717 4.81845 9.94068 4.64203 9.27204 4.60969V5.19775C9.27204 5.32242 9.1709 5.42357 9.04623 5.42357C8.92156 5.42357 8.82041 5.32242 8.82041 5.19775V4.60969C8.15178 4.64203 7.52078 4.81845 6.95741 5.10837L7.25144 5.61822C7.31378 5.72584 7.27732 5.86403 7.1697 5.92579C7.06208 5.98812 6.92389 5.95166 6.86214 5.84405L6.56752 5.33419C6.29466 5.51062 6.04178 5.71525 5.81303 5.94402C5.58428 6.17279 5.37963 6.42565 5.2032 6.69851L5.71305 6.99313C5.82067 7.05546 5.85713 7.19307 5.7948 7.30069C5.73246 7.40831 5.59486 7.44477 5.48723 7.38243L4.97738 7.0884C4.68746 7.65119 4.51162 8.28277 4.4787 8.9514H5.06676C5.19143 8.9514 5.29258 9.05255 5.29258 9.17722C5.29258 9.30189 5.19143 9.40304 5.06676 9.40304H4.4787C4.48282 9.49125 4.48928 9.5771 4.49811 9.66179C4.50693 9.74706 4.51869 9.83174 4.53221 9.91643C4.60455 9.90643 4.67864 9.90172 4.75333 9.90172C5.20732 9.90172 5.61897 10.0864 5.91712 10.3845C6.21528 10.6821 6.39992 11.0937 6.39992 11.5483C6.39992 11.6424 6.3911 11.7365 6.37581 11.8282C6.35993 11.9223 6.33582 12.0141 6.30465 12.1011L6.1 12.6745L6.10176 12.6745ZM3.62891 11.95L4.75506 15.1031L5.88121 11.95C5.90356 11.8864 5.9212 11.82 5.93296 11.7518C5.94414 11.6871 5.95002 11.6183 5.95002 11.5477C5.95002 11.2178 5.81594 10.9185 5.60012 10.7027C5.38488 10.4862 5.08556 10.3528 4.75506 10.3528C4.42457 10.3528 4.12524 10.4863 3.91001 10.7021C3.6936 10.9185 3.56011 11.2178 3.56011 11.5483C3.56011 11.6195 3.56599 11.6888 3.57716 11.7541C3.58775 11.8171 3.60363 11.8776 3.62245 11.9341L3.62891 11.9505L3.62891 11.95ZM9.37898 3.31483V2.78262C9.37898 2.69147 9.34134 2.60856 9.28136 2.54857C9.22138 2.48859 9.13846 2.45095 9.04731 2.45095C8.95616 2.45095 8.87265 2.48859 8.81267 2.54857C8.7521 2.60797 8.71505 2.69147 8.71505 2.78262V3.31483C8.82502 3.30836 8.93557 3.30542 9.0473 3.30542C9.15904 3.30542 9.2696 3.30836 9.37956 3.31483H9.37898ZM8.708 8.72091L9.61069 9.24252L10.1323 7.29718L8.708 8.72147V8.72091ZM9.38604 9.63124L8.48277 9.11022L7.96116 11.0556L9.38545 9.63127L9.38604 9.63124ZM8.18109 8.60918L10.4081 6.38216C10.4963 6.29395 10.6392 6.29395 10.7274 6.38216C10.7898 6.4445 10.808 6.53388 10.7821 6.61209L9.97 9.64241C9.95942 9.6824 9.93884 9.71651 9.91178 9.74356L7.68477 11.9706C7.59656 12.0588 7.45365 12.0588 7.36545 11.9706C7.30311 11.9082 7.28488 11.8189 7.31076 11.7406L8.12287 8.71033C8.13346 8.67034 8.15404 8.63623 8.18109 8.60859V8.60918Z",
+pe6ea010: "M9.71083 10.5183C9.98045 10.5183 10.1992 10.7371 10.1992 11.0067C10.1992 11.2763 9.98045 11.4951 9.71083 11.4951H9.70447C9.43485 11.4951 9.2161 11.2763 9.2161 11.0067C9.2161 10.7371 9.43485 10.5183 9.70447 10.5183H9.71083Z",
+pee931c0: "M64.9727 342.018L64.2508 326.018L74.3576 338.018L64.9727 342.018Z",
+}
diff --git a/src/imports/svg-bfd6jik9me.ts b/src/imports/svg-bfd6jik9me.ts
new file mode 100644
index 0000000..9ee6d65
--- /dev/null
+++ b/src/imports/svg-bfd6jik9me.ts
@@ -0,0 +1,4 @@
+export default {
+p36c8f40: "M16.9103 28.6331H16.9122M18.3885 22.2771C18.0057 22.3958 17.606 22.6768 17.2233 23.1764C16.7444 23.8024 16.5521 24.7809 16.5238 25.7406C16.4842 27.0717 16.735 28.3444 16.735 28.3444C16.7444 28.3877 16.7595 28.4292 16.7783 28.4669C16.784 28.5348 16.7953 28.7441 16.7708 29.0552C16.7482 29.3474 16.7029 29.7434 16.6218 30.2769C15.6942 30.5673 13.2205 31.7287 12.3532 35.9372C11.6065 39.5591 11.2332 40.93 11.6801 44.6798C11.9629 47.0479 12.8528 48.4941 13.952 49.3237H9.11953C8.84803 49.3237 8.62745 49.5462 8.62745 49.8176C8.62745 50.091 8.84804 50.3116 9.11953 50.3116H26.9537C27.757 50.3663 28.6695 50.3191 28.8015 50.3116H36.4808C37.8156 50.3267 38.8168 50.3587 40.4326 50.338C40.6231 50.3361 40.8078 50.3267 40.9832 50.3116H52.8786C53.1501 50.3116 53.3726 50.091 53.3726 49.8176C53.3726 49.5461 53.1501 49.3237 52.8786 49.3237H43.5949C44.5018 48.5695 44.9204 47.4948 45.075 46.4427C45.3182 44.7929 44.909 43.2148 44.909 43.2148C44.9072 43.213 44.9072 43.2092 44.9053 43.2054C44.9053 43.2054 42.5654 34.8962 41.519 33.1996C39.9372 30.6336 37.2523 30.4054 35.5329 30.0698C34.3413 29.836 32.8349 29.5871 32.0883 29.4665C32.6219 29.178 33.5476 28.4993 33.7946 27.1813C33.9813 26.1764 33.9134 25.4807 33.8153 25.0583C33.9379 25.0301 34.0605 24.9942 34.1811 24.9509C34.2905 24.9113 34.381 24.8359 34.4394 24.7359C34.4394 24.7359 35.7177 22.5941 33.7645 20.6747C32.2599 19.2003 32.2938 17.3695 32.2938 17.3695C32.2995 17.1923 32.2071 17.0245 32.0544 16.934C31.9016 16.8435 31.7112 16.8416 31.5566 16.9302C31.5566 16.9302 30.5385 17.5109 29.3356 17.3733C28.6342 17.2941 26.2548 16.7869 23.8978 17.1696C21.4939 17.5599 19.1163 18.8399 18.3885 22.2771ZM31.7353 30.4091C31.543 31.0332 31.2432 31.8345 30.8095 32.6056C30.1779 33.7312 29.2559 34.7814 27.9927 35.2075C26.7295 35.6336 25.4889 35.4602 24.4557 35.0887C23.7524 34.8361 23.1472 34.4929 22.7022 34.1969C22.7211 34.6532 22.7418 35.1491 22.7626 35.6713C22.8757 38.7163 22.9417 42.657 22.2686 45.319C21.7501 47.3722 20.9601 48.5996 20.0872 49.3236H25.1137C24.8083 48.6618 24.9704 48.0038 25.1269 47.5513C25.2249 47.2666 25.4078 46.7179 25.7265 46.3182C26.0055 45.9675 26.3751 45.7243 26.8445 45.7149C27.6383 45.7017 29.1975 45.8884 30.0743 45.862C31.4129 45.8205 32.0314 45.7715 32.3311 45.7319C33.0382 45.6395 35.214 45.4227 36.7336 45.1398C37.3162 45.0305 37.7951 44.9249 38.0138 44.7986C38.2834 44.6402 38.5323 44.5893 38.5059 44.1914V44.1669C38.5059 44.1669 38.4701 42.9508 37.3652 40.0548C37.2672 39.8003 37.3954 39.5156 37.648 39.4175C37.9026 39.3214 38.1873 39.4477 38.2853 39.7022C39.4147 42.6567 39.4863 43.9991 39.4901 44.1349C39.5146 44.5271 39.4335 44.7948 39.3053 45.0041C39.1375 45.2756 38.8585 45.4472 38.5097 45.6508C38.2363 45.8092 37.6443 45.9732 36.9146 46.1089C35.3761 46.3955 33.1758 46.6161 32.4593 46.7104C32.1463 46.7519 31.5015 46.8047 30.1044 46.848C29.2258 46.8744 27.659 46.6878 26.8614 46.701C26.6427 46.7066 26.5126 46.8895 26.4033 47.0686C26.226 47.3552 26.1223 47.687 26.0582 47.8718C25.947 48.1961 25.7773 48.7109 26.1864 49.1766C26.226 49.1879 26.5013 49.2708 26.7163 49.2991C26.803 49.3085 26.8935 49.318 26.984 49.3236H28.7186C28.7865 49.301 28.8412 49.2671 28.8714 49.2199C28.96 49.0861 28.894 48.8975 28.7639 48.8032C28.7582 48.7976 28.7526 48.7938 28.7469 48.7882C28.7469 48.7882 28.4471 48.5827 27.8287 48.5883C27.5553 48.5902 27.3329 48.3715 27.331 48.0981C27.3291 47.8266 27.5478 47.6041 27.8193 47.6023C28.8148 47.5928 29.3069 47.9737 29.3559 48.0133C29.7594 48.3131 29.9555 48.8448 29.8688 49.3236H30.4684C31.6543 49.3218 33.3455 49.3199 35.2234 49.318C35.6835 49.318 36.0945 49.3199 36.4773 49.3236H40.9401C41.8753 49.235 42.5541 48.9352 43.0367 48.5035C43.8927 47.738 44.1284 46.5841 44.1623 45.5905C44.2 44.4686 43.97 43.5316 43.9549 43.4656C43.887 43.2224 41.683 35.3451 40.6799 33.7161C39.2809 31.4498 36.8657 31.3348 35.344 31.0369C34.0487 30.7843 32.3764 30.5128 31.7353 30.4091ZM17.261 49.324C17.8907 49.3146 18.5469 49.1864 19.1558 48.7885C20.0363 48.2154 20.8018 47.0973 21.3128 45.078C21.9652 42.4931 21.886 38.6657 21.7766 35.7074C21.6993 33.658 21.6145 32.0101 21.7144 31.4124C21.7992 30.9015 21.9105 30.5565 22.0519 30.2962C22.2348 29.9569 22.4686 29.7438 22.791 29.527C23.0398 29.3592 23.3566 29.1876 23.7601 28.9066C23.892 28.8161 23.9882 28.7388 24.0561 28.671C24.09 28.637 24.1164 28.62 24.1202 28.5955C24.1296 28.5484 24.1126 28.5069 24.1089 28.4598C24.0994 28.358 24.0957 28.2505 24.1164 28.1298C24.1522 27.9092 24.2635 27.6189 24.6594 27.2211C24.8366 27.0457 24.946 26.8779 24.9517 26.7063C24.9592 26.5235 24.8348 26.367 24.6406 26.2124C24.3427 25.9748 23.892 25.7787 23.3038 25.626C22.412 25.3922 21.82 25.5223 21.3844 25.5299C21.0337 25.5355 20.7528 25.4752 20.5002 25.2942C20.2758 25.132 20.0627 24.8605 19.8742 24.3647C19.7328 23.9913 19.5555 23.6802 19.3462 23.4634C19.1954 23.3088 19.0333 23.2013 18.8523 23.1957C18.5732 23.1863 18.3017 23.3899 18.0057 23.7764C17.6362 24.2609 17.5306 25.0283 17.5099 25.7693C17.4797 26.7856 17.6343 27.766 17.6871 28.062C17.7173 28.1336 17.7474 28.2336 17.7625 28.3787C17.7889 28.637 17.7833 29.2517 17.5495 30.7054C17.5476 30.7374 17.5438 30.7676 17.5344 30.7977C17.4081 31.5746 17.2195 32.5814 16.9405 33.8879C15.8092 39.1766 16.0864 43.4038 16.0864 43.4038C16.1052 43.6772 15.8997 43.911 15.6282 43.9298C15.3567 43.9468 15.121 43.7413 15.1022 43.4698C15.1022 43.4698 14.8118 39.1201 15.9751 33.6807C16.1656 32.7927 16.3126 32.0479 16.4277 31.4257C15.5057 31.8858 13.9464 33.0962 13.3186 36.1374C12.6002 39.6274 12.2288 40.9491 12.6605 44.5653C13.0603 47.912 14.8307 49.1168 16.5332 49.2903C16.7199 49.3091 16.9103 49.3223 17.1026 49.3242L17.261 49.324ZM32.8141 25.1432C32.4502 25.1243 32.0863 25.0602 31.7281 24.9622C30.9909 24.7642 30.2763 24.4323 29.6353 24.1571C29.2525 23.993 28.9 23.8497 28.5869 23.7819C28.389 23.7385 28.2155 23.714 28.0798 23.7969C26.6713 24.6473 25.2252 23.9176 25.2252 23.9176C24.982 23.7951 24.8839 23.499 25.0065 23.2558C25.1271 23.0126 25.425 22.9146 25.6683 23.0371C25.6683 23.0371 26.6317 23.5179 27.5688 22.9523C27.8459 22.7845 28.1759 22.7298 28.553 22.775C28.9753 22.8278 29.4769 23.0164 30.0237 23.2502C30.627 23.5104 31.2944 23.8233 31.9845 24.01C32.5388 24.1608 33.1082 24.2287 33.6644 24.0797C33.8379 23.6612 34.1848 22.4715 33.0724 21.3798C31.8959 20.2259 31.5037 18.8872 31.3736 18.0803C30.8495 18.2632 30.0727 18.4498 29.2224 18.3537C28.5568 18.2764 26.2962 17.7786 24.0544 18.1425C22.0464 18.4687 20.0535 19.5189 19.3898 22.3225C19.9536 22.5563 20.4664 23.1483 20.7964 24.0138C20.9001 24.2872 20.9736 24.4455 21.1056 24.5096C21.2508 24.5794 21.4242 24.5436 21.6448 24.5285C22.1143 24.4964 22.7214 24.4531 23.5548 24.6699C24.9311 25.0319 25.6966 25.6729 25.8851 26.3159C26.0341 26.8212 25.8946 27.3811 25.3572 27.9204C25.2083 28.0693 25.1272 28.173 25.0951 28.2654C25.0744 28.3314 25.0913 28.3823 25.097 28.4294C25.1045 28.503 25.1102 28.5727 25.1064 28.6463C25.0932 28.9046 25.014 29.2383 24.324 29.7172C23.9676 29.9661 23.6773 30.1301 23.4416 30.281C23.0136 30.5506 22.8232 30.7674 22.6874 31.5744C22.6441 31.8384 22.6403 32.3135 22.6573 32.9413C22.925 33.1619 23.7282 33.7785 24.7897 34.1612C25.6344 34.4647 26.6469 34.6212 27.6782 34.2724C28.7095 33.9255 29.4335 33.0393 29.9501 32.1211C30.7722 30.6618 31.0607 29.0856 31.0607 29.0856C31.0927 28.9102 31.219 28.7651 31.3887 28.7066C31.3887 28.7066 32.5822 28.3012 32.8236 27.0003C33.0178 25.9633 32.8876 25.3675 32.8141 25.1432ZM16.982 28.6802C17.0536 28.7217 17.1121 28.7349 17.1536 28.7405C17.195 28.7462 17.2196 28.7405 17.2196 28.7405C17.1347 28.7405 17.0536 28.7198 16.982 28.6802ZM16.965 28.6708H16.9669L16.9594 28.667L16.965 28.6708ZM16.9518 28.6614L16.9556 28.6651L16.9405 28.6538L16.9518 28.6614ZM16.933 28.65L16.9386 28.6538L16.9273 28.6444L16.933 28.65ZM36.3002 16.6681H37.6351L35.8024 18.5008C35.661 18.6403 35.6195 18.8534 35.695 19.0382C35.7723 19.2229 35.9514 19.3417 36.1512 19.3417H38.8248C39.0963 19.3417 39.3188 19.1211 39.3188 18.8496C39.3188 18.5762 39.0963 18.3557 38.8248 18.3557H37.341L39.1736 16.523C39.315 16.3835 39.3565 16.1704 39.2792 15.9857C39.2038 15.8009 39.0247 15.6821 38.8248 15.6821H36.3002C36.0287 15.6821 35.8081 15.9027 35.8081 16.1761C35.8081 16.4476 36.0287 16.6681 36.3002 16.6681ZM40.3275 12.6408H41.6605L39.8297 14.4735C39.6883 14.6149 39.6468 14.8261 39.7223 15.0108C39.7977 15.1937 39.9787 15.3144 40.1785 15.3144H42.8559C43.1255 15.3125 43.3442 15.0919 43.3442 14.8223C43.3442 14.5489 43.1236 14.3284 42.8521 14.3284H41.3683L43.2009 12.4957C43.3423 12.3562 43.3838 12.1431 43.3084 11.9583C43.2311 11.7755 43.052 11.6548 42.8521 11.6548H40.3275C40.056 11.6548 39.8354 11.8754 39.8354 12.1469C39.8354 12.4203 40.056 12.6408 40.3275 12.6408Z",
+p9958380: "M18.3885 22.2771C18.0057 22.3958 17.606 22.6768 17.2233 23.1764C16.7444 23.8024 16.5521 24.7809 16.5238 25.7406C16.4842 27.0717 16.735 28.3444 16.735 28.3444C16.7444 28.3877 16.7595 28.4292 16.7783 28.4669C16.784 28.5348 16.7953 28.7441 16.7708 29.0552C16.7482 29.3474 16.7029 29.7434 16.6218 30.2769C15.6942 30.5673 13.2205 31.7287 12.3532 35.9372C11.6065 39.5591 11.2332 40.93 11.6801 44.6798C11.9629 47.0479 12.8528 48.4941 13.952 49.3237H9.11953C8.84803 49.3237 8.62745 49.5462 8.62745 49.8176C8.62745 50.091 8.84804 50.3116 9.11953 50.3116H26.9537C27.757 50.3663 28.6695 50.3191 28.8015 50.3116H36.4808C37.8156 50.3267 38.8168 50.3587 40.4326 50.338C40.6231 50.3361 40.8078 50.3267 40.9832 50.3116H52.8786C53.1501 50.3116 53.3726 50.091 53.3726 49.8176C53.3726 49.5461 53.1501 49.3237 52.8786 49.3237H43.5949C44.5018 48.5695 44.9204 47.4948 45.075 46.4427C45.3182 44.7929 44.909 43.2148 44.909 43.2148C44.9072 43.213 44.9072 43.2092 44.9053 43.2054C44.9053 43.2054 42.5654 34.8962 41.519 33.1996C39.9372 30.6336 37.2523 30.4054 35.5329 30.0698C34.3413 29.836 32.8349 29.5871 32.0883 29.4665C32.6219 29.178 33.5476 28.4993 33.7946 27.1813C33.9813 26.1764 33.9134 25.4807 33.8153 25.0583C33.9379 25.0301 34.0605 24.9942 34.1811 24.9509C34.2905 24.9113 34.381 24.8359 34.4394 24.7359C34.4394 24.7359 35.7177 22.5941 33.7645 20.6747C32.2599 19.2003 32.2938 17.3695 32.2938 17.3695C32.2995 17.1923 32.2071 17.0245 32.0544 16.934C31.9016 16.8435 31.7112 16.8416 31.5566 16.9302C31.5566 16.9302 30.5385 17.5109 29.3356 17.3733C28.6342 17.2941 26.2548 16.7869 23.8978 17.1696C21.4939 17.5599 19.1163 18.8399 18.3885 22.2771ZM31.7353 30.4091C31.543 31.0332 31.2432 31.8345 30.8095 32.6056C30.1779 33.7312 29.2559 34.7814 27.9927 35.2075C26.7295 35.6336 25.4889 35.4602 24.4557 35.0887C23.7524 34.8361 23.1472 34.4929 22.7022 34.1969C22.7211 34.6532 22.7418 35.1491 22.7626 35.6713C22.8757 38.7163 22.9417 42.657 22.2686 45.319C21.7501 47.3722 20.9601 48.5996 20.0872 49.3236H25.1137C24.8083 48.6618 24.9704 48.0038 25.1269 47.5513C25.2249 47.2666 25.4078 46.7179 25.7265 46.3182C26.0055 45.9675 26.3751 45.7243 26.8445 45.7149C27.6383 45.7017 29.1975 45.8884 30.0743 45.862C31.4129 45.8205 32.0314 45.7715 32.3311 45.7319C33.0382 45.6395 35.214 45.4227 36.7336 45.1398C37.3162 45.0305 37.7951 44.9249 38.0138 44.7986C38.2834 44.6402 38.5323 44.5893 38.5059 44.1914V44.1669C38.5059 44.1669 38.4701 42.9508 37.3652 40.0548C37.2672 39.8003 37.3954 39.5156 37.648 39.4175C37.9026 39.3214 38.1873 39.4477 38.2853 39.7022C39.4147 42.6567 39.4863 43.9991 39.4901 44.1349C39.5146 44.5271 39.4335 44.7948 39.3053 45.0041C39.1375 45.2756 38.8585 45.4472 38.5097 45.6508C38.2363 45.8092 37.6443 45.9732 36.9146 46.1089C35.3761 46.3955 33.1758 46.6161 32.4593 46.7104C32.1463 46.7519 31.5015 46.8047 30.1044 46.848C29.2258 46.8744 27.659 46.6878 26.8614 46.701C26.6427 46.7066 26.5126 46.8895 26.4033 47.0686C26.226 47.3552 26.1223 47.687 26.0582 47.8718C25.947 48.1961 25.7773 48.7109 26.1864 49.1766C26.226 49.1879 26.5013 49.2708 26.7163 49.2991C26.803 49.3085 26.8935 49.318 26.984 49.3236H28.7186C28.7865 49.301 28.8412 49.2671 28.8714 49.2199C28.96 49.0861 28.894 48.8975 28.7639 48.8032C28.7582 48.7976 28.7526 48.7938 28.7469 48.7882C28.7469 48.7882 28.4471 48.5827 27.8287 48.5883C27.5553 48.5902 27.3329 48.3715 27.331 48.0981C27.3291 47.8266 27.5478 47.6041 27.8193 47.6023C28.8148 47.5928 29.3069 47.9737 29.3559 48.0133C29.7594 48.3131 29.9555 48.8448 29.8688 49.3236H30.4684C31.6543 49.3218 33.3455 49.3199 35.2234 49.318C35.6835 49.318 36.0945 49.3199 36.4773 49.3236H40.9401C41.8753 49.235 42.5541 48.9352 43.0367 48.5035C43.8927 47.738 44.1284 46.5841 44.1623 45.5905C44.2 44.4686 43.97 43.5316 43.9549 43.4656C43.887 43.2224 41.683 35.3451 40.6799 33.7161C39.2809 31.4498 36.8657 31.3348 35.344 31.0369C34.0487 30.7843 32.3764 30.5128 31.7353 30.4091ZM17.261 49.324C17.8907 49.3146 18.5469 49.1864 19.1558 48.7885C20.0363 48.2154 20.8018 47.0973 21.3128 45.078C21.9652 42.4931 21.886 38.6657 21.7766 35.7074C21.6993 33.658 21.6145 32.0101 21.7144 31.4124C21.7992 30.9015 21.9105 30.5565 22.0519 30.2962C22.2348 29.9569 22.4686 29.7438 22.791 29.527C23.0398 29.3592 23.3566 29.1876 23.7601 28.9066C23.892 28.8161 23.9882 28.7388 24.0561 28.671C24.09 28.637 24.1164 28.62 24.1202 28.5955C24.1296 28.5484 24.1126 28.5069 24.1089 28.4598C24.0994 28.358 24.0957 28.2505 24.1164 28.1298C24.1522 27.9092 24.2635 27.6189 24.6594 27.2211C24.8366 27.0457 24.946 26.8779 24.9517 26.7063C24.9592 26.5235 24.8348 26.367 24.6406 26.2124C24.3427 25.9748 23.892 25.7787 23.3038 25.626C22.412 25.3922 21.82 25.5223 21.3844 25.5299C21.0337 25.5355 20.7528 25.4752 20.5002 25.2942C20.2758 25.132 20.0627 24.8605 19.8742 24.3647C19.7328 23.9913 19.5555 23.6802 19.3462 23.4634C19.1954 23.3088 19.0333 23.2013 18.8523 23.1957C18.5732 23.1863 18.3017 23.3899 18.0057 23.7764C17.6362 24.2609 17.5306 25.0283 17.5099 25.7693C17.4797 26.7856 17.6343 27.766 17.6871 28.062C17.7173 28.1336 17.7474 28.2336 17.7625 28.3787C17.7889 28.637 17.7833 29.2517 17.5495 30.7054C17.5476 30.7374 17.5438 30.7676 17.5344 30.7977C17.4081 31.5746 17.2195 32.5814 16.9405 33.8879C15.8092 39.1766 16.0864 43.4038 16.0864 43.4038C16.1052 43.6772 15.8997 43.911 15.6282 43.9298C15.3567 43.9468 15.121 43.7413 15.1022 43.4698C15.1022 43.4698 14.8118 39.1201 15.9751 33.6807C16.1656 32.7927 16.3126 32.0479 16.4277 31.4257C15.5057 31.8858 13.9464 33.0962 13.3186 36.1374C12.6002 39.6274 12.2288 40.9491 12.6605 44.5653C13.0603 47.912 14.8307 49.1168 16.5332 49.2903C16.7199 49.3091 16.9103 49.3223 17.1026 49.3242L17.261 49.324ZM32.8141 25.1432C32.4502 25.1243 32.0863 25.0602 31.7281 24.9622C30.9909 24.7642 30.2763 24.4323 29.6353 24.1571C29.2525 23.993 28.9 23.8497 28.5869 23.7819C28.389 23.7385 28.2155 23.714 28.0798 23.7969C26.6713 24.6473 25.2252 23.9176 25.2252 23.9176C24.982 23.7951 24.8839 23.499 25.0065 23.2558C25.1271 23.0126 25.425 22.9146 25.6683 23.0371C25.6683 23.0371 26.6317 23.5179 27.5688 22.9523C27.8459 22.7845 28.1759 22.7298 28.553 22.775C28.9753 22.8278 29.4769 23.0164 30.0237 23.2502C30.627 23.5104 31.2944 23.8233 31.9845 24.01C32.5388 24.1608 33.1082 24.2287 33.6644 24.0797C33.8379 23.6612 34.1848 22.4715 33.0724 21.3798C31.8959 20.2259 31.5037 18.8872 31.3736 18.0803C30.8495 18.2632 30.0727 18.4498 29.2224 18.3537C28.5568 18.2764 26.2962 17.7786 24.0544 18.1425C22.0464 18.4687 20.0535 19.5189 19.3898 22.3225C19.9536 22.5563 20.4664 23.1483 20.7964 24.0138C20.9001 24.2872 20.9736 24.4455 21.1056 24.5096C21.2508 24.5794 21.4242 24.5436 21.6448 24.5285C22.1143 24.4964 22.7214 24.4531 23.5548 24.6699C24.9311 25.0319 25.6966 25.6729 25.8851 26.3159C26.0341 26.8212 25.8946 27.3811 25.3572 27.9204C25.2083 28.0693 25.1272 28.173 25.0951 28.2654C25.0744 28.3314 25.0913 28.3823 25.097 28.4294C25.1045 28.503 25.1102 28.5727 25.1064 28.6463C25.0932 28.9046 25.014 29.2383 24.324 29.7172C23.9676 29.9661 23.6773 30.1301 23.4416 30.281C23.0136 30.5506 22.8232 30.7674 22.6874 31.5744C22.6441 31.8384 22.6403 32.3135 22.6573 32.9413C22.925 33.1619 23.7282 33.7785 24.7897 34.1612C25.6344 34.4647 26.6469 34.6212 27.6782 34.2724C28.7095 33.9255 29.4335 33.0393 29.9501 32.1211C30.7722 30.6618 31.0607 29.0856 31.0607 29.0856C31.0927 28.9102 31.219 28.7651 31.3887 28.7066C31.3887 28.7066 32.5822 28.3012 32.8236 27.0003C33.0178 25.9633 32.8876 25.3675 32.8141 25.1432ZM16.982 28.6802C17.0536 28.7217 17.1121 28.7349 17.1536 28.7405C17.195 28.7462 17.2196 28.7405 17.2196 28.7405C17.1347 28.7405 17.0536 28.7198 16.982 28.6802ZM16.965 28.6708H16.9669L16.9594 28.667L16.965 28.6708ZM16.9518 28.6614L16.9556 28.6651L16.9405 28.6538L16.9518 28.6614ZM16.933 28.65L16.9386 28.6538L16.9273 28.6444L16.933 28.65ZM36.3002 16.6681H37.6351L35.8024 18.5008C35.661 18.6403 35.6195 18.8534 35.695 19.0382C35.7723 19.2229 35.9514 19.3417 36.1512 19.3417H38.8248C39.0963 19.3417 39.3188 19.1211 39.3188 18.8496C39.3188 18.5762 39.0963 18.3557 38.8248 18.3557H37.341L39.1736 16.523C39.315 16.3835 39.3565 16.1704 39.2792 15.9857C39.2038 15.8009 39.0247 15.6821 38.8248 15.6821H36.3002C36.0287 15.6821 35.8081 15.9027 35.8081 16.1761C35.8081 16.4476 36.0287 16.6681 36.3002 16.6681ZM40.3275 12.6408H41.6605L39.8297 14.4735C39.6883 14.6149 39.6468 14.8261 39.7223 15.0108C39.7977 15.1937 39.9787 15.3144 40.1785 15.3144H42.8559C43.1255 15.3125 43.3442 15.0919 43.3442 14.8223C43.3442 14.5489 43.1236 14.3284 42.8521 14.3284H41.3683L43.2009 12.4957C43.3423 12.3562 43.3838 12.1431 43.3084 11.9583C43.2311 11.7755 43.052 11.6548 42.8521 11.6548H40.3275C40.056 11.6548 39.8354 11.8754 39.8354 12.1469C39.8354 12.4203 40.056 12.6408 40.3275 12.6408Z",
+}
diff --git a/src/imports/svg-hgtc6d03x0.ts b/src/imports/svg-hgtc6d03x0.ts
new file mode 100644
index 0000000..e6d0761
--- /dev/null
+++ b/src/imports/svg-hgtc6d03x0.ts
@@ -0,0 +1,3 @@
+export default {
+pc3f4d00: "M44.3466 22.4327C44.4716 22.4411 44.5949 22.4461 44.72 22.4461C46.0236 22.4461 47.2689 21.981 48.2608 21.1158C49.346 20.1689 49.9978 18.8536 50.0962 17.4166C50.1928 15.9796 49.7261 14.5893 48.7776 13.5024C47.8307 12.4155 46.5154 11.7654 45.0784 11.667C43.6447 11.5703 42.2511 12.0371 41.1642 12.9856C40.3257 13.7191 39.7489 14.671 39.4838 15.7296C39.0037 15.4378 38.4486 15.2728 37.8768 15.2728H26.4243C25.1957 15.2728 24.0405 15.7512 23.1703 16.6197L20.368 19.422C19.1494 20.6406 19.0561 22.5527 20.158 23.7745C20.7331 24.413 21.5216 24.7781 22.3784 24.7997C23.232 24.8297 24.0505 24.493 24.6489 23.8945L27.1545 21.389H33.1859L21.2268 33.3468L17.8527 29.9777C17.256 29.3809 16.4274 29.0558 15.5839 29.0725C14.7271 29.0959 13.9385 29.4593 13.3634 30.0977C12.2632 31.3197 12.3549 33.2318 13.5735 34.4503L18.7462 39.623C19.4247 40.3015 20.3199 40.6716 21.2751 40.6716H21.3535C22.3387 40.6499 23.2489 40.2398 23.9124 39.5163L27.7732 35.3537L32.2875 40.1531L32.2991 47.1131C32.2991 48.8368 33.5861 50.2538 35.2281 50.3405C35.2848 50.3438 35.3415 50.3455 35.3965 50.3455C36.1933 50.3455 36.9435 50.0471 37.5236 49.4953C38.1371 48.9135 38.4872 48.095 38.4872 47.2481L38.4738 40.0265C38.4738 38.4595 37.8821 36.9692 36.8068 35.8306L33.8362 32.6816L37.377 29.0475V30.3711C37.377 32.9317 39.4608 35.0155 42.0214 35.0155H46.9526C47.7978 35.0155 48.6146 34.6638 49.1964 34.052C49.7865 33.4302 50.0866 32.615 50.0433 31.7565C49.9566 30.1145 48.5396 28.8275 46.8159 28.8275H43.5685V22.3195C43.8219 22.3745 44.0803 22.4178 44.3454 22.4361L44.3466 22.4327ZM40.6591 16.773C40.7324 15.6911 41.2225 14.7026 42.0394 13.9891C42.7862 13.3373 43.7231 12.9872 44.7033 12.9872C44.7967 12.9872 44.89 12.9906 44.9851 12.9972C46.067 13.0706 47.0555 13.5607 47.769 14.3792C48.4825 15.1961 48.8342 16.2429 48.7609 17.3248C48.6875 18.4084 48.1974 19.3969 47.3805 20.1104C46.5637 20.8239 45.5235 21.174 44.4333 21.1039C42.1994 20.9522 40.5041 19.0102 40.6574 16.7762L40.6591 16.773ZM22.9319 38.6095C22.5135 39.0646 21.9434 39.323 21.3249 39.3363C20.7398 39.3463 20.1263 39.1162 19.6879 38.6795L14.5152 33.5067C13.81 32.8016 13.7367 31.673 14.3518 30.9895C14.6802 30.6261 15.1286 30.4177 15.6154 30.4044C16.0988 30.3977 16.5623 30.5744 16.9073 30.9195L20.7532 34.7603C21.0132 35.0204 21.435 35.0204 21.6967 34.7603L25.4875 30.9695C25.4692 32.1598 25.8976 33.3567 26.7811 34.2969L26.8578 34.3786L22.9319 38.6095ZM32.429 33.1282L35.8381 36.7423C36.6783 37.6342 37.1417 38.7994 37.1417 40.0247L37.1551 47.2463C37.1551 47.7347 36.96 48.1882 36.6066 48.5233C36.2532 48.86 35.7864 49.0284 35.2997 49.0034C34.3811 48.955 33.6343 48.1048 33.6343 47.1063L33.621 39.8813C33.621 39.7112 33.556 39.5495 33.4409 39.4262L27.7531 33.3798C26.4811 32.0279 26.5128 29.9407 27.8248 28.6287L35.2632 21.1903C35.4532 21.0003 35.5116 20.7135 35.4082 20.4635C35.3049 20.2134 35.0615 20.0517 34.7914 20.0517H26.8746C26.6979 20.0517 26.5279 20.1217 26.4028 20.2468L23.7022 22.9474C23.3555 23.2924 22.8721 23.4692 22.4103 23.4625C21.9236 23.4491 21.4735 23.2424 21.1467 22.879C20.5316 22.1955 20.605 21.0653 21.3101 20.3618L24.1124 17.5595C24.7292 16.9427 25.551 16.6026 26.4229 16.6026H37.8754C38.4289 16.6026 38.9573 16.8677 39.289 17.3111C39.3007 17.3278 39.3157 17.3311 39.3291 17.3411C39.4341 19.2666 40.5593 20.9519 42.2047 21.8204C42.1713 22.0838 42.0597 22.3305 41.8713 22.5239L32.439 32.2045C32.189 32.4612 32.1857 32.868 32.4307 33.128L32.429 33.1282ZM46.8172 30.1575C47.8141 30.1575 48.6643 30.9044 48.7126 31.8229C48.7393 32.313 48.5676 32.7764 48.2309 33.1298C47.8941 33.4832 47.4407 33.6783 46.9539 33.6783H42.0227C40.1973 33.6783 38.712 32.193 38.712 30.3676V27.6753L42.2328 24.0612V29.4892C42.2328 29.8576 42.5312 30.156 42.8996 30.156H46.8138L46.8172 30.1575ZM31.4522 48.3281C31.4522 48.6965 31.1538 48.9949 30.7854 48.9949H20.0665C19.698 48.9949 19.3996 48.6965 19.3996 48.3281C19.3996 47.9597 19.698 47.6613 20.0665 47.6613H30.7854C31.1538 47.6613 31.4522 47.9597 31.4522 48.3281ZM16.2822 48.3281C16.2822 48.6965 15.9838 48.9949 15.6154 48.9949H12.8848C12.5164 48.9949 12.218 48.6949 12.218 48.3281C12.218 47.9597 12.5164 47.6613 12.8848 47.6613H15.6154C15.9838 47.6613 16.2822 47.9614 16.2822 48.3281ZM27.121 43.9974C26.7526 43.9974 26.4542 43.699 26.4542 43.3305C26.4542 42.9621 26.7526 42.6637 27.121 42.6637H29.8383C30.2067 42.6637 30.5051 42.9621 30.5051 43.3305C30.5051 43.699 30.2067 43.9974 29.8383 43.9974H27.121ZM15.7287 42.6637H24.0022C24.3707 42.6637 24.6691 42.9621 24.6691 43.3305C24.6691 43.699 24.3707 43.9974 24.0022 43.9974H15.7287C15.3602 43.9974 15.0618 43.699 15.0618 43.3305C15.0618 42.9621 15.3602 42.6637 15.7287 42.6637ZM12.558 38.9996C12.1896 38.9996 11.8912 38.7012 11.8912 38.3328C11.8912 37.9644 12.1896 37.666 12.558 37.666H15.0668C15.4353 37.666 15.7337 37.9644 15.7337 38.3328C15.7337 38.7012 15.4353 38.9996 15.0668 38.9996H12.558Z",
+}
diff --git a/src/imports/svg-jhl6jizeq8.ts b/src/imports/svg-jhl6jizeq8.ts
new file mode 100644
index 0000000..eb2913b
--- /dev/null
+++ b/src/imports/svg-jhl6jizeq8.ts
@@ -0,0 +1,8 @@
+export default {
+p13d26c70: "M11.5348 30.3711H1.20259C1.08912 30.3703 0.976654 30.3961 0.871646 30.447C0.766639 30.4978 0.671165 30.5727 0.590712 30.6673C0.510259 30.7619 0.446415 30.8744 0.402849 30.9983C0.359284 31.1222 0.336856 31.2551 0.336856 31.3892C0.336856 31.5234 0.359284 31.6563 0.402849 31.7802C0.446415 31.9041 0.510259 32.0166 0.590712 32.1112C0.671165 32.2058 0.766639 32.2807 0.871646 32.3315C0.976654 32.3824 1.08912 32.4082 1.20259 32.4074H11.5348C11.6482 32.4082 11.7607 32.3824 11.8657 32.3315C11.9707 32.2807 12.0662 32.2058 12.1467 32.1112C12.2271 32.0166 12.291 31.9041 12.3345 31.7802C12.3781 31.6563 12.4005 31.5234 12.4005 31.3892C12.4005 31.2551 12.3781 31.1222 12.3345 30.9983C12.291 30.8744 12.2271 30.7619 12.1467 30.6673C12.0662 30.5727 11.9707 30.4978 11.8657 30.447C11.7607 30.3961 11.6482 30.3703 11.5348 30.3711Z",
+p14022570: "M11.5346 25.2802H5.50753C5.39407 25.2795 5.2816 25.3053 5.17659 25.3561C5.07158 25.407 4.97611 25.4819 4.89565 25.5765C4.8152 25.6711 4.75136 25.7836 4.70779 25.9075C4.66423 26.0314 4.6418 26.1642 4.6418 26.2984C4.6418 26.4326 4.66423 26.5655 4.70779 26.6893C4.75136 26.8132 4.8152 26.9257 4.89565 27.0204C4.97611 27.115 5.07158 27.1899 5.17659 27.2407C5.2816 27.2915 5.39407 27.3173 5.50753 27.3166H11.5346C11.6481 27.3173 11.7606 27.2915 11.8656 27.2407C11.9706 27.1899 12.0661 27.115 12.1465 27.0204C12.227 26.9257 12.2908 26.8132 12.3344 26.6893C12.3779 26.5655 12.4004 26.4326 12.4004 26.2984C12.4004 26.1642 12.3779 26.0314 12.3344 25.9075C12.2908 25.7836 12.227 25.6711 12.1465 25.5765C12.0661 25.4819 11.9706 25.407 11.8656 25.3561C11.7606 25.3053 11.6481 25.2795 11.5346 25.2802Z",
+p1f010b80: "M52.0132 14.1805C51.6487 13.7149 51.2063 13.344 50.7142 13.0911C50.2221 12.8383 49.6909 12.7092 49.1543 12.7119H39.8597L40.3453 10.0591C40.6591 8.21609 40.4596 6.30246 39.7767 4.60479C39.0937 2.90711 37.9641 1.51675 36.5569 0.641915C36.2795 0.461481 35.971 0.358167 35.6547 0.339819C35.3385 0.321471 35.0229 0.388571 34.7319 0.536023C34.4587 0.670498 34.2154 0.877738 34.021 1.1416C33.8266 1.40547 33.6863 1.71884 33.611 2.05732L31.831 10.2281C31.6233 11.1249 31.2491 11.9557 30.7358 12.6599C30.2224 13.3642 29.5827 13.9242 28.8633 14.2994C27.6726 14.9451 26.4329 15.4558 25.1607 15.8246C25.259 16.252 25.3094 16.6927 25.3107 17.1356V17.8803C26.7814 17.474 28.2138 16.8934 29.586 16.1473C30.5374 15.6462 31.3823 14.9005 32.0591 13.9644C32.7359 13.0283 33.2276 11.9255 33.4984 10.7362L35.2784 2.5654C35.2894 2.52886 35.3071 2.49565 35.3302 2.46815C35.3533 2.44064 35.3813 2.41952 35.4121 2.4063C35.4613 2.38099 35.5148 2.36931 35.5684 2.37215C35.6221 2.375 35.6744 2.39229 35.7215 2.42271C36.8041 3.08706 37.6756 4.1481 38.2056 5.44704C38.7357 6.74599 38.8958 8.213 38.662 9.62852L37.9506 13.5148C37.9235 13.6634 37.9248 13.8172 37.9544 13.9651C37.9841 14.113 38.0414 14.2512 38.1221 14.3694C38.2029 14.4877 38.3049 14.5831 38.4209 14.6487C38.5369 14.7142 38.6638 14.7483 38.7923 14.7483H49.148C49.4445 14.7441 49.7386 14.8126 50.0116 14.9495C50.2846 15.0864 50.5307 15.2887 50.7343 15.5437C50.8804 15.7288 50.9916 15.9484 51.0604 16.1882C51.1293 16.4279 51.1543 16.6822 51.1337 16.9343C51.0546 17.9062 50.1961 18.6336 49.1329 18.6336H49.1131L43.937 18.5894L43.9311 18.5893H43.9252H43.9189C43.9101 18.5893 43.902 18.5921 43.8933 18.5924C43.7294 18.5954 43.5698 18.6549 43.434 18.7634C43.2982 18.8719 43.192 19.0248 43.1285 19.2035C43.12 19.2268 43.1155 19.2523 43.1084 19.2766C43.0962 19.3143 43.0858 19.3528 43.0775 19.392C43.0726 19.4267 43.0691 19.4617 43.0672 19.4969C43.0643 19.529 43.0582 19.5602 43.0578 19.5931L43.0581 19.597L43.0578 19.6001C43.0577 19.6288 43.0627 19.6559 43.0645 19.6841C43.0657 19.7238 43.0688 19.7634 43.0739 19.8027C43.0783 19.8295 43.0871 19.8542 43.0933 19.8803C43.1011 19.9189 43.1108 19.957 43.1224 19.9943C43.1313 20.0198 43.1442 20.0426 43.1547 20.0671C43.1683 20.1017 43.1835 20.1354 43.2002 20.168C43.2135 20.1917 43.2303 20.212 43.2451 20.2342C43.2634 20.264 43.2831 20.2926 43.304 20.3198C43.3212 20.3407 43.3416 20.3574 43.3603 20.3764C43.3825 20.4009 43.4059 20.424 43.4302 20.4456C43.4513 20.4629 43.4751 20.4753 43.4975 20.4903C43.5227 20.5089 43.5487 20.5259 43.5754 20.5412C43.5996 20.5537 43.626 20.5606 43.6513 20.5705C43.6792 20.5829 43.7076 20.5936 43.7365 20.6025C43.7623 20.6091 43.7897 20.6096 43.8163 20.6134C43.8462 20.6194 43.8764 20.6235 43.9067 20.6257L47.8573 20.6928C48.3484 20.6688 48.8281 20.8719 49.1946 21.2592C49.5611 21.6464 49.7857 22.1872 49.8207 22.7669C49.821 23.0174 49.7788 23.2654 49.6967 23.4963C49.6146 23.7272 49.4943 23.9363 49.3427 24.1113C48.9577 24.5446 48.4452 24.7839 47.9137 24.7784L45.1532 24.742L43.3618 24.7108H43.3488C43.3295 24.7108 43.3115 24.716 43.2925 24.7175L42.7892 24.7108H42.7795C42.5512 24.7093 42.3317 24.8151 42.1693 25.005C42.0069 25.1949 41.915 25.4533 41.9137 25.7233C41.9124 25.9933 42.0019 26.2529 42.1624 26.4449C42.323 26.6369 42.5415 26.7457 42.7698 26.7472L45.1203 26.7782L46.3985 26.8004C46.8895 26.7764 47.3691 26.9796 47.7356 27.3668C48.102 27.754 48.3265 28.2948 48.3614 28.8745C48.3617 29.1249 48.3196 29.3729 48.2375 29.6037C48.1554 29.8345 48.035 30.0435 47.8834 30.2183C47.6952 30.4381 47.4714 30.6105 47.2254 30.7252C46.9793 30.8398 46.7162 30.8944 46.4519 30.8855L41.1252 30.8323H41.118L41.1146 30.8328L41.0789 30.8323H41.0705C40.8425 30.8317 40.6236 30.938 40.4618 31.128C40.3001 31.3179 40.2086 31.576 40.2075 31.8456C40.2063 32.1152 40.2957 32.3743 40.4559 32.5661C40.6161 32.7579 40.8341 32.8667 41.0621 32.8687L44.2005 32.9045C44.6916 32.8805 45.1712 33.0837 45.5378 33.4709C45.9043 33.8581 46.1289 34.3989 46.1639 34.9787C46.1669 35.2372 46.1262 35.4938 46.044 35.7334C45.9618 35.973 45.8399 36.1907 45.6854 36.3737C45.3197 36.7767 44.8366 36.9975 44.3367 36.9902H37.2048C34.5318 36.9678 31.4425 36.8321 28.6039 35.5007C27.5343 34.9628 26.4338 34.5154 25.3107 34.1617V35.4629C25.3091 35.727 25.29 35.9906 25.2537 36.2512C26.1763 36.5711 27.0829 36.9526 27.969 37.3939C31.0848 38.855 34.3636 39.0027 37.1985 39.0265H44.3586C44.8296 39.0334 45.297 38.9297 45.7338 38.7215C46.1706 38.5133 46.5682 38.2046 46.9034 37.8134C47.2199 37.44 47.47 36.9954 47.6387 36.5057C47.8075 36.0161 47.8915 35.4914 47.8859 34.9628C47.8783 34.1926 47.6788 33.4423 47.3123 32.8056C47.9881 32.6301 48.6083 32.2323 49.1014 31.6582C49.4148 31.2927 49.6632 30.8567 49.8319 30.3759C50.0005 29.8951 50.0861 29.3792 50.0834 28.8586C50.0743 27.9945 49.8251 27.1578 49.3743 26.4776C49.8178 26.2648 50.221 25.9499 50.5606 25.551C50.8741 25.1855 51.1225 24.7494 51.2911 24.2685C51.4598 23.7876 51.5454 23.2716 51.5427 22.751C51.5326 21.8481 51.2612 20.9766 50.7736 20.2817C51.3287 20.0284 51.815 19.6013 52.1804 19.0461C52.5459 18.4909 52.7767 17.8286 52.8481 17.1302C52.8919 16.5967 52.8402 16.0584 52.6963 15.5502C52.5525 15.042 52.3197 14.5753 52.0132 14.1805Z",
+p294a4200: "M11.5348 20.1899H1.20259C1.08912 20.1892 0.976654 20.215 0.871646 20.2658C0.766639 20.3166 0.671165 20.3915 0.590712 20.4861C0.510259 20.5808 0.446415 20.6932 0.402849 20.8171C0.359284 20.941 0.336856 21.0739 0.336856 21.2081C0.336856 21.3423 0.359284 21.4751 0.402849 21.599C0.446415 21.7229 0.510259 21.8354 0.590712 21.93C0.671165 22.0246 0.766639 22.0995 0.871646 22.1504C0.976654 22.2012 1.08912 22.227 1.20259 22.2263H11.5348C11.6482 22.227 11.7607 22.2012 11.8657 22.1504C11.9707 22.0995 12.0662 22.0246 12.1467 21.93C12.2271 21.8354 12.291 21.7229 12.3345 21.599C12.3781 21.4751 12.4005 21.3423 12.4005 21.2081C12.4005 21.0739 12.3781 20.941 12.3345 20.8171C12.291 20.6932 12.2271 20.5808 12.1467 20.4861C12.0662 20.3915 11.9707 20.3166 11.8657 20.2658C11.7607 20.215 11.6482 20.1892 11.5348 20.1899Z",
+p3d025700: "M21.0064 14.081H17.5623C16.8775 14.0819 16.2209 14.404 15.7367 14.9766C15.2524 15.5493 14.98 16.3257 14.9793 17.1355V35.4628C14.98 36.2726 15.2524 37.0491 15.7367 37.6217C16.2209 38.1944 16.8775 38.5164 17.5623 38.5173H21.0064C21.6912 38.5164 22.3478 38.1944 22.832 37.6217C23.3163 37.0491 23.5887 36.2726 23.5894 35.4628V17.1355C23.5887 16.3257 23.3163 15.5493 22.832 14.9766C22.3478 14.404 21.6912 14.0819 21.0064 14.081ZM21.8674 35.4628C21.8671 35.7327 21.7763 35.9915 21.6149 36.1824C21.4535 36.3732 21.2347 36.4806 21.0064 36.481H17.5623C17.3341 36.4806 17.1152 36.3732 16.9538 36.1824C16.7924 35.9915 16.7016 35.7327 16.7013 35.4628V17.1355C16.7016 16.8656 16.7924 16.6068 16.9538 16.416C17.1152 16.2251 17.3341 16.1177 17.5623 16.1174H21.0064C21.2347 16.1177 21.4535 16.2251 21.6149 16.416C21.7763 16.6068 21.8671 16.8656 21.8674 17.1355V35.4628Z",
+p6506f00: "M1.20259 27.3166H2.0636C2.17707 27.3173 2.28954 27.2915 2.39455 27.2407C2.49955 27.1899 2.59503 27.115 2.67548 27.0204C2.75593 26.9257 2.81978 26.8132 2.86334 26.6893C2.90691 26.5655 2.92934 26.4326 2.92934 26.2984C2.92934 26.1642 2.90691 26.0314 2.86334 25.9075C2.81978 25.7836 2.75593 25.6711 2.67548 25.5765C2.59503 25.4819 2.49955 25.407 2.39455 25.3561C2.28954 25.3053 2.17707 25.2795 2.0636 25.2802H1.20259C1.08912 25.2795 0.976654 25.3053 0.871646 25.3561C0.766639 25.407 0.671165 25.4819 0.590712 25.5765C0.510259 25.6711 0.446415 25.7836 0.402849 25.9075C0.359284 26.0314 0.336856 26.1642 0.336856 26.2984C0.336856 26.4326 0.359284 26.5655 0.402849 26.6893C0.446415 26.8132 0.510259 26.9257 0.590712 27.0204C0.671165 27.115 0.766639 27.1899 0.871646 27.2407C0.976654 27.2915 1.08912 27.3173 1.20259 27.3166Z",
+}
diff --git a/src/imports/svg-kj92221mds.ts b/src/imports/svg-kj92221mds.ts
new file mode 100644
index 0000000..e18d55f
--- /dev/null
+++ b/src/imports/svg-kj92221mds.ts
@@ -0,0 +1,3 @@
+export default {
+p2c67c800: "M40.8041 15.5027C40.9311 15.6249 41.0631 15.7569 41.1755 15.8937C41.6643 16.4484 42.0479 17.0912 42.3045 17.7851C42.8323 19.2098 43.5459 19.8353 44.2155 19.9331C44.6896 20.0015 45.1612 19.8109 45.5302 19.4615C45.6866 19.3124 45.8259 19.1365 45.9407 18.941L45.755 18.6746C45.5155 18.528 45.2443 18.4571 44.9755 18.4571C44.6871 18.4571 44.3988 18.5427 44.152 18.7088C44.0102 18.8041 43.8147 18.7675 43.7194 18.6233C43.6241 18.4816 43.6608 18.2861 43.805 18.1908C44.1569 17.9562 44.5674 17.8364 44.9755 17.834L45.0684 17.8364C43.91 16.5926 42.4903 15.813 40.8066 15.5027L40.8041 15.5027ZM35.2105 44.8194C35.2105 44.4749 35.4915 44.1939 35.8361 44.1939C36.1806 44.1939 36.4617 44.4749 36.4617 44.8194V46.5667C38.8663 45.8776 40.8114 45.1543 41.9306 44.5605C42.2483 44.3918 42.5 44.1548 42.6686 43.8737C42.8348 43.5952 42.9277 43.2628 42.9277 42.9012C42.9277 42.5395 42.8372 42.2071 42.6686 41.9286C42.5 41.65 42.2483 41.4129 41.9306 41.2443C41.0925 40.7995 39.7875 40.2815 38.1747 39.761V40.0029C38.1747 40.3475 37.8937 40.6285 37.5491 40.6285C37.2046 40.6285 36.9235 40.3475 36.9235 40.0029V39.3749C33.6148 38.3974 30.0496 37.6423 26.6208 37.1853V39.3309C26.6208 39.6755 26.3398 39.9565 25.9952 39.9565C25.6507 39.9565 25.3696 39.6755 25.3696 39.3309V37.0314C23.6004 36.8334 21.8361 36.7161 20.1548 36.7161C19.5488 36.7161 18.9574 36.7308 18.3783 36.7626V38.4463C18.3783 38.7908 18.0973 39.0719 17.7527 39.0719C17.4082 39.0719 17.1271 38.7908 17.1271 38.4463V36.8603C15.81 36.9947 14.593 37.2293 13.5227 37.5812C11.7486 38.1676 10.3899 39.0791 9.68126 40.4134C9.31715 41.0976 9.11921 41.9113 9.11921 42.8619V42.945C9.11921 43.8956 9.31715 44.7069 9.68126 45.3936L9.78145 45.572L9.79123 45.5867C10.5268 46.8158 11.839 47.6687 13.5276 48.2259C15.2847 48.805 17.4375 49.064 19.7688 49.0885V46.9063C19.7688 46.5617 20.0499 46.2807 20.3944 46.2807C20.739 46.2807 21.02 46.5617 21.02 46.9063V49.0788C23.6054 49.0201 26.3448 48.7122 28.9818 48.2626V46.6986C28.9818 46.354 29.2628 46.073 29.6074 46.073C29.9519 46.073 30.233 46.354 30.233 46.6986V48.0377C31.9875 47.7078 33.6737 47.3193 35.2156 46.9112V44.8193L35.2105 44.8194ZM13.1293 49.4136C11.3528 48.8271 9.91829 47.9352 8.99212 46.6522C8.56936 46.7988 8.13682 46.9284 7.70429 47.0359C7.10314 47.1849 6.4971 47.2973 5.88622 47.3707C5.28997 47.4415 4.81347 47.3609 4.43712 47.0701C4.0608 46.7817 3.84575 46.3248 3.7822 45.6528C3.70155 44.8121 3.83596 44.3576 4.13897 44.0643C3.96547 44.0081 3.79197 43.9471 3.61847 43.886C3.05154 43.6782 2.66058 43.3923 2.45526 42.9647L2.43571 42.9158C2.25488 42.4979 2.27687 42.0092 2.51146 41.4056C2.8829 40.455 3.28124 40.1495 3.80417 40.0982C3.21524 39.6706 2.95619 39.2038 3.36675 38.0113C3.58668 37.3736 3.90436 36.9826 4.33934 36.7871C4.77432 36.594 5.2582 36.6282 5.81778 36.8359C6.54358 37.1048 7.24737 37.4322 7.91937 37.8085C8.4081 38.0822 8.88464 38.3877 9.34401 38.7225C10.2629 37.6717 11.5653 36.9141 13.1317 36.3985C15.3091 35.6801 17.8431 35.4699 20.157 35.4699C23.4878 35.4699 26.9233 35.8927 30.2033 36.5036C28.7175 33.7593 27.7254 30.2868 27.3711 27.0022C26.9679 23.2634 27.3955 19.7273 28.8617 17.7067C29.2185 17.1911 29.8563 16.7414 30.4379 16.5191L30.6285 16.4506C30.7653 15.9033 30.9461 15.373 31.171 14.8672C31.4227 14.3002 31.733 13.7504 32.0996 13.2299C32.3562 12.8658 32.6445 12.6385 33.0086 12.5725C33.3727 12.5041 33.7369 12.6092 34.1376 12.9049C35.1126 13.6233 34.9147 14.0705 34.5775 14.8256C34.3991 15.2435 34.2305 15.6467 34.0863 16.0792C33.991 16.3676 33.903 16.6632 33.8273 16.9638C33.9372 17.0445 34.0423 17.13 34.1425 17.2204C34.6239 17.6627 34.988 18.2394 35.1713 18.8895C35.1908 18.9604 35.1981 19.0337 35.1933 19.1021C35.1786 19.5077 35.1761 19.911 35.1859 20.3117C35.8555 19.6446 36.6081 19.0605 37.4268 18.5767C38.4189 17.9902 39.5112 17.548 40.6671 17.284C40.2101 16.5729 39.5528 15.9816 38.8025 15.6003C38.7341 15.5686 38.6706 15.5221 38.6168 15.4659C38.3822 15.2142 38.392 14.8183 38.6437 14.5837C40.8601 12.4895 44.0687 12.7876 46.1482 14.7694C46.3901 14.3198 46.6711 13.8922 46.9864 13.4938C47.5826 12.8022 48.064 12.294 48.824 11.7661C48.9706 11.6635 49.149 11.6342 49.3127 11.6684C49.6402 11.7368 49.9383 11.8932 50.1827 12.1083C50.4246 12.3209 50.6152 12.5994 50.7276 12.9196C50.8376 13.2348 50.8645 13.5696 50.8107 13.8873C50.7545 14.2074 50.6177 14.5153 50.405 14.7768C50.3317 14.8648 50.2413 14.9283 50.1411 14.9674C49.5595 15.1874 49.017 15.4879 48.5308 15.8521C48.1202 16.1575 47.7463 16.5143 47.4189 16.9102L47.4458 17.0397L47.5606 17.0324C47.8294 17.0152 48.086 17.0055 48.3206 17.0055C51.4583 17.0055 54.3003 18.2762 56.3556 20.3338C58.4107 22.3914 59.6839 25.2333 59.6839 28.3688C59.6839 29.3462 59.5568 30.3017 59.3198 31.2205C59.1194 31.9976 58.8384 32.743 58.4865 33.4467C58.6356 33.6129 58.7651 33.8035 58.875 34.0161C59.1952 34.6466 59.2269 35.2868 59.0461 35.8929C58.8628 36.5136 58.4523 37.0854 57.9171 37.557L57.9147 37.5595L57.8658 37.5986C57.1131 38.2412 56.3116 38.8107 55.4807 39.3043C54.8405 39.6831 54.1807 40.0203 53.5063 40.3136C53.6553 40.6654 53.7384 41.054 53.7384 41.4768C53.7384 42.2709 53.4403 42.9307 52.9491 43.4463C52.4433 43.9766 51.7371 44.3432 50.9502 44.5436L50.9453 44.546L50.9355 44.5484L50.9209 44.5533L50.9062 44.5558L50.8769 44.5631L50.8622 44.5655C49.5866 44.8686 48.2963 45.0421 47.0061 45.0934C45.8136 45.1374 44.6259 45.0787 43.4554 44.9174C43.2012 45.218 42.8836 45.477 42.5146 45.6725C37.3584 48.4119 21.201 52.0847 13.1266 49.4211L13.1293 49.4136ZM42.5173 40.145C43.0378 40.4211 43.4532 40.817 43.7391 41.291C44.025 41.77 44.179 42.3198 44.179 42.9063C44.179 43.1922 44.1423 43.4708 44.0715 43.7347C45.022 43.8422 45.9873 43.8813 46.9526 43.8422C47.8152 43.808 48.6803 43.7151 49.5404 43.5612C49.4476 43.4243 49.3645 43.2826 49.2887 43.1335C49.037 42.6326 48.9002 42.0803 48.8929 41.5134C46.2879 40.9636 43.8222 39.9494 41.6061 38.537C39.2431 37.0292 37.1634 35.067 35.5042 32.7357C33.8669 30.4313 32.7086 27.8581 32.0562 25.1699C31.455 22.6847 31.2864 20.0968 31.5772 17.5309C31.3353 17.5456 31.1007 17.5969 30.8783 17.6824C30.4849 17.8339 30.1281 18.0979 29.8617 18.4498C28.5911 20.2117 28.2367 23.4227 28.6081 26.8733C28.9869 30.3897 30.1281 34.1213 31.8338 36.8263C34.8419 37.4567 39.7712 38.6884 42.515 40.1473L42.5173 40.145ZM6.12088 44.5583L5.69812 44.7C5.23627 44.8491 4.96256 44.937 5.02124 45.5382C5.05056 45.8412 5.10921 46.0171 5.19963 46.0855C5.28761 46.154 5.47088 46.1637 5.73968 46.132C6.30662 46.0635 6.86624 45.9609 7.4063 45.8265C7.73131 45.7459 8.0514 45.653 8.36914 45.5479C8.26161 45.2987 8.1712 45.0396 8.09789 44.7684C7.43565 44.7415 6.77336 44.6707 6.12088 44.5583ZM8.62565 39.7418C8.20778 39.4388 7.76547 39.1553 7.30848 38.8987C6.69757 38.5541 6.05488 38.256 5.38776 38.0092C5.13117 37.9139 4.9479 37.8821 4.8477 37.9261C4.74751 37.9701 4.64732 38.1289 4.54958 38.4173C4.35163 38.9891 4.59601 39.1381 5.00899 39.3899C5.53683 39.7124 6.01337 40.0375 6.51183 40.3893L6.85639 40.4138C7.33779 40.4431 7.81678 40.4578 8.29085 40.4578C8.37393 40.2427 8.46924 40.035 8.57431 39.8346L8.62565 39.7418ZM7.95609 41.7016C7.56265 41.6967 7.16679 41.6821 6.77824 41.6576C6.59741 41.6454 6.41658 41.6332 6.23574 41.6161C5.77144 41.5745 5.30469 41.5159 4.8355 41.445L4.65222 41.4157C4.1757 41.3399 3.89226 41.2959 3.66987 41.858C3.56479 42.1268 3.53547 42.3076 3.57212 42.4127L3.57945 42.4274C3.62833 42.5276 3.78716 42.6229 4.03887 42.7133C4.74021 42.9699 5.45863 43.1678 6.17955 43.3022L6.20888 43.3071H6.21376L6.28463 43.3193C6.81246 43.4146 7.34762 43.4782 7.88281 43.5099C7.86814 43.3267 7.86326 43.1385 7.86326 42.9454V42.8624C7.86326 42.4567 7.89502 42.0682 7.95367 41.6991L7.95609 41.7016ZM48.5089 19.855C48.1643 19.855 47.8833 19.574 47.8833 19.2294C47.8833 18.8848 48.1643 18.6038 48.5089 18.6038C50.1853 18.6038 51.7614 19.0486 53.125 19.8256C54.535 20.6296 55.7177 21.7904 56.5437 23.1857C56.7196 23.4814 56.6194 23.865 56.3238 24.041C56.0281 24.217 55.6444 24.1168 55.4685 23.8211C54.7525 22.6139 53.7286 21.6071 52.5067 20.9107C51.3313 20.2411 49.9653 19.8575 48.5088 19.8575L48.5089 19.855ZM47.9639 14.2712C47.7245 14.5742 47.507 14.8943 47.3188 15.229C47.4679 15.0971 47.6243 14.9725 47.7832 14.8527C48.311 14.4593 48.8926 14.1245 49.5133 13.8728C49.545 13.8117 49.567 13.7433 49.5792 13.6773C49.5988 13.5625 49.589 13.4427 49.5499 13.3303C49.5133 13.2228 49.4424 13.1226 49.3569 13.0468L49.2738 12.9858C48.8315 13.323 48.289 13.8239 47.9639 14.2736L47.9639 14.2712ZM44.1616 15.3244C44.2154 15.1607 44.3913 15.0727 44.555 15.124C44.7188 15.1778 44.8067 15.3537 44.7554 15.5174C44.6748 15.7667 44.6601 16.0282 44.7114 16.2701C44.7603 16.5071 44.8703 16.7344 45.034 16.925C45.5081 17.3624 45.8111 17.8439 46.207 18.2422C46.2289 18.142 46.2436 18.0369 46.2534 17.9318C46.4293 15.7985 43.8488 14.2345 41.911 14.4056C41.9818 14.4862 42.0087 14.6011 41.9721 14.7086C41.9378 14.8113 41.9452 14.9212 41.9867 15.0141C42.0234 15.0996 42.0918 15.1729 42.1798 15.2169C42.8542 15.4491 43.4822 15.7594 44.0638 16.1528C44.0394 15.8743 44.0712 15.5932 44.1591 15.3196L44.1616 15.3244ZM41.3807 14.5179L41.3905 14.4886C41.0703 14.5595 40.7576 14.6695 40.4618 14.8185C40.76 14.8576 41.0532 14.9114 41.3391 14.9774C41.3196 14.8259 41.3318 14.6695 41.3806 14.5155L41.3807 14.5179ZM41.2218 18.4449C40.0904 18.6697 39.025 19.0851 38.0622 19.6521C37.0065 20.2752 36.073 21.0866 35.3106 22.0396C35.3986 22.7703 35.5281 23.4911 35.6967 24.1973C37.3926 27.8189 40.3641 30.5458 43.8681 32.0734C47.5751 33.6911 51.5146 33.8866 55.38 32.7284C56.0863 32.5182 56.7998 32.5158 57.4181 32.7333L57.4449 32.743C57.7235 32.1614 57.9508 31.5456 58.1169 30.9078C58.3247 30.1038 58.4371 29.251 58.4371 28.3664C58.4371 25.5733 57.3056 23.044 55.4777 21.216C53.6474 19.3881 51.1182 18.2566 48.3248 18.2566C48.0805 18.2566 47.8532 18.264 47.6455 18.2762L47.4744 18.2884C47.3474 19.1119 46.9442 19.8524 46.3894 20.3729C45.7517 20.974 44.911 21.299 44.0411 21.1719C42.9951 21.018 41.937 20.214 41.2235 18.4472L41.2218 18.4449ZM31.9701 16.2847C32.2609 16.3043 32.4197 16.3434 32.6836 16.4094C32.7521 16.1674 32.8229 15.9255 32.9036 15.6835C33.0575 15.2168 33.2335 14.7672 33.4338 14.3175C33.5169 14.1367 33.5634 14.0267 33.3972 13.907L33.231 13.7946L33.1186 13.9412C32.8058 14.3835 32.5346 14.8649 32.3122 15.3658C32.1802 15.6664 32.0629 15.9743 31.9652 16.2822L31.9701 16.2847ZM56.0113 33.8548C55.9428 34.065 55.9086 34.2874 55.9086 34.5073C55.9111 34.8201 55.9917 35.1354 56.1334 35.4139C56.2776 35.6974 56.4853 35.9418 56.7346 36.1226C56.9057 36.2497 57.1011 36.3499 57.3064 36.4158C57.5654 36.1421 57.7609 35.8416 57.8514 35.5336C57.9418 35.2282 57.9271 34.8983 57.7634 34.5782C57.5923 34.241 57.3235 34.0186 57.0059 33.9062C56.7126 33.8035 56.3705 33.7864 56.0113 33.8548ZM56.2458 37.2956C56.1603 37.2442 56.0772 37.188 55.9966 37.1294C55.6178 36.8508 55.3001 36.4916 55.0704 36.0762C52.8784 36.6602 50.6107 36.8435 48.3773 36.6284C46.7889 36.4769 45.2152 36.1226 43.7001 35.5703C45.875 36.9974 48.3504 37.9651 50.9137 38.3928C51.6345 38.5321 52.2748 38.8326 52.7635 39.27C53.4819 38.9743 54.1833 38.6224 54.8528 38.2241C55.3318 37.9406 55.7985 37.6278 56.2482 37.293L56.2458 37.2956ZM54.6868 34.8861C54.6721 34.7639 54.6623 34.6417 54.6623 34.5171C54.6623 34.4169 54.6672 34.3167 54.6746 34.2165C50.838 35.1549 46.8573 34.7346 43.3703 33.2146C41.2956 32.3104 39.3919 31.0128 37.7962 29.378C38.2727 30.1844 38.8079 30.9566 39.3993 31.6824L39.6607 31.9976C40.0273 32.2713 40.4012 32.523 40.7701 32.7576C41.1733 33.0117 41.5839 33.2463 41.9944 33.4614C44.0373 34.5268 46.2464 35.1744 48.4948 35.387C50.5573 35.5849 52.6564 35.4187 54.6896 34.886L54.6868 34.8861ZM38.7882 32.9018C38.7638 32.8773 38.7418 32.8505 38.7198 32.8236L38.4265 32.4692C35.3597 28.6962 33.7835 23.9751 33.9424 19.1412C33.8177 18.7502 33.5929 18.4056 33.2997 18.1393C33.1531 18.0049 32.9869 17.8876 32.8085 17.7947C32.5544 20.1797 32.7156 22.577 33.2728 24.8763C33.8862 27.4104 34.981 29.8394 36.5253 32.0117C38.0917 34.2134 40.0516 36.0658 42.2802 37.4856C44.3525 38.8076 46.6617 39.7606 49.0978 40.2812C49.1516 40.1199 49.2176 39.9635 49.2933 39.812C49.3666 39.6678 49.4473 39.5261 49.5377 39.3917C45.2343 38.4093 41.5152 36.0756 38.7877 32.9012L38.7882 32.9018ZM50.9114 43.2533C51.3683 43.1042 51.7667 42.8794 52.0477 42.5813C52.3214 42.2929 52.49 41.9215 52.49 41.4719C52.49 41.0638 52.3605 40.7119 52.1405 40.426L52.1112 40.3893L52.1088 40.3844L52.1015 40.3771L52.099 40.3722L52.0306 40.2965C51.7569 40.0081 51.3732 39.7931 50.9261 39.6709C50.7135 39.8713 50.5375 40.1083 50.408 40.3649C50.2418 40.6997 50.149 41.076 50.149 41.4694C50.149 41.8604 50.2394 42.2392 50.408 42.574C50.5326 42.8232 50.7037 43.0529 50.9114 43.2508L50.9114 43.2533Z",
+}
diff --git a/src/imports/svg-nvjqsh4m9x.ts b/src/imports/svg-nvjqsh4m9x.ts
new file mode 100644
index 0000000..4407979
--- /dev/null
+++ b/src/imports/svg-nvjqsh4m9x.ts
@@ -0,0 +1,3 @@
+export default {
+pf613c00: "M33.9623 27.716C33.2433 28.3195 32.8023 29.1667 32.7211 30.1023C32.6392 31.0373 32.9262 31.9477 33.5297 32.6673C34.1332 33.3857 34.9804 33.8273 35.9154 33.9086C36.0201 33.9182 36.1242 33.9218 36.2283 33.9218C37.052 33.9218 37.842 33.6354 38.4798 33.0999C39.1988 32.4964 39.6404 31.6498 39.7217 30.7142C39.8041 29.7792 39.5165 28.8683 38.9136 28.1493C37.6681 26.6661 35.4473 26.473 33.9623 27.716ZM37.5123 31.9477C37.1013 32.2918 36.5797 32.4573 36.0454 32.4104C35.5105 32.3634 35.0267 32.1113 34.6814 31.6998C33.9684 30.8508 34.0797 29.5813 34.928 28.8689C35.3041 28.5536 35.7626 28.3996 36.2193 28.3996C36.7933 28.3996 37.3631 28.6432 37.7608 29.1162C38.1055 29.5277 38.2698 30.0488 38.2229 30.5831C38.1765 31.118 37.9238 31.6023 37.5123 31.9477ZM29.6344 30.5018C28.5857 29.2521 26.7139 29.0867 25.4618 30.1378C24.8559 30.6462 24.4846 31.3598 24.4154 32.148C24.3468 32.9368 24.5887 33.704 25.0971 34.3099C25.6062 34.9158 26.3198 35.2876 27.108 35.3562C27.1958 35.3646 27.2843 35.3682 27.3715 35.3682C28.0652 35.3682 28.7313 35.127 29.2692 34.6757C29.8751 34.1667 30.247 33.4531 30.3155 32.6649C30.3853 31.8755 30.1435 31.1083 29.6344 30.5018ZM28.3023 33.5229C28.0045 33.7726 27.6224 33.8953 27.2391 33.858C26.8511 33.8237 26.4997 33.6414 26.2488 33.343C25.9991 33.0451 25.8799 32.6673 25.9136 32.2792C25.9473 31.8911 26.1302 31.5397 26.4281 31.29C26.7006 31.0608 27.0328 30.9495 27.3637 30.9495C27.7801 30.9495 28.194 31.1264 28.4816 31.4693C28.9991 32.0849 28.9184 33.0054 28.3023 33.5229ZM39.4058 36.2864C38.7644 36.2281 38.1404 36.4266 37.6477 36.8406C37.1543 37.2545 36.8516 37.8351 36.7957 38.4765C36.7391 39.1173 36.9359 39.7425 37.3498 40.2353C37.7638 40.728 38.3444 41.0301 38.9858 41.0866C39.0574 41.0927 39.1284 41.0963 39.1994 41.0963C39.7644 41.0963 40.3065 40.8995 40.7439 40.5319C41.7608 39.6781 41.8943 38.1558 41.0412 37.1378C40.6278 36.645 40.0466 36.3424 39.4058 36.2864ZM39.777 39.3797C39.5911 39.5355 39.3534 39.6083 39.1164 39.5879C38.8757 39.5674 38.6573 39.4531 38.502 39.2684C38.3462 39.083 38.2722 38.849 38.2933 38.6077C38.3143 38.3664 38.428 38.1486 38.6134 37.9934C38.7776 37.8556 38.981 37.781 39.194 37.781C39.2205 37.781 39.2475 37.7822 39.274 37.7846C39.5147 37.8057 39.7331 37.9194 39.8883 38.1041C40.209 38.4874 40.1591 39.059 39.777 39.3797ZM49.1073 49.3917L40.1326 17.1192C40.2018 17.0295 40.2788 16.9477 40.3396 16.8508C40.8209 16.0831 40.9738 15.1733 40.7704 14.2895C40.5676 13.4062 40.0327 12.6547 39.265 12.1733C38.4972 11.6932 37.5881 11.5386 36.7042 11.7425C31.4353 12.9531 26.6687 15.3244 22.5382 18.7907C18.4076 22.2576 15.2446 26.5391 13.1369 31.5175C12.7837 32.352 12.7765 33.2744 13.117 34.1143C13.4576 34.9543 14.105 35.6113 14.9383 35.9645C15.3679 36.1462 15.8192 36.2353 16.2662 36.2353C16.8168 36.2353 17.3589 36.0933 17.8511 35.8303L18.8336 36.3015C19.6405 36.6889 20.2139 37.3995 20.3673 38.2034C20.5135 38.9705 20.4413 39.8532 20.1537 40.8267C19.6706 42.4573 20.0731 43.5397 20.4955 44.16C20.975 44.8646 21.7253 45.3261 22.5021 45.3941C23.6212 45.4892 24.91 44.7834 25.2289 42.9741C25.3005 42.5656 25.6146 42.3369 25.8462 42.3514C26.1784 42.3706 26.5394 42.8652 26.6008 43.9248C26.7602 46.6913 27.6952 48.2467 29.3811 48.5487C30.3673 48.7256 31.6922 48.4699 32.4281 47.5006C32.8889 46.8935 33.2674 45.8141 32.4497 44.1197C32.3571 43.9278 32.2764 43.7491 32.2054 43.5818C32.0923 43.3159 32.2409 43.1336 32.3095 43.068C32.3781 43.0024 32.5652 42.864 32.8234 42.9868L48.058 50.2713C48.1615 50.3207 48.2716 50.3448 48.3823 50.3448C48.5556 50.3448 48.7271 50.2846 48.866 50.1691C49.0917 49.9795 49.1861 49.6757 49.1073 49.3917ZM15.5256 34.5788C15.0611 34.3827 14.7007 34.0163 14.5111 33.5488C14.3216 33.0819 14.3252 32.568 14.5226 32.1035C16.5364 27.3466 19.558 23.2552 23.5057 19.9435C27.4527 16.6312 32.0069 14.3653 37.0418 13.2082C37.1832 13.1758 37.3264 13.1601 37.4684 13.1601C37.8185 13.1601 38.1627 13.2582 38.4666 13.4483C38.8943 13.7155 39.1916 14.1342 39.3053 14.6264C39.4184 15.118 39.333 15.6246 39.0658 16.0518C38.7981 16.4796 38.3793 16.7768 37.8871 16.8905C33.4407 17.9122 29.419 19.9134 25.9341 22.837C22.4491 25.7612 19.7807 29.3749 18.0027 33.5764C17.8842 33.8556 17.7079 34.0939 17.4786 34.2864C16.9317 34.7449 16.1838 34.8586 15.5256 34.5788ZM33.472 41.6294C32.7283 41.2738 31.8637 41.4128 31.2698 41.9807C30.6747 42.5505 30.4985 43.4103 30.8216 44.1709C30.901 44.358 30.9918 44.559 31.0953 44.7732C31.3637 45.3303 31.6056 46.0975 31.2307 46.5909C30.8956 47.0307 30.1796 47.1643 29.6471 47.068C29.3077 47.0072 28.2746 46.8225 28.1032 43.8393C27.9816 41.7214 26.9034 40.9067 25.9347 40.8496C24.8968 40.7876 23.9461 41.5891 23.747 42.7136C23.608 43.503 23.2 43.941 22.6332 43.8965C22.389 43.8748 22.0075 43.7094 21.7385 43.3141C21.3956 42.8099 21.3462 42.0981 21.5953 41.2545C21.9527 40.0487 22.0364 38.9278 21.8444 37.9218C21.6026 36.6516 20.7205 35.5385 19.4846 34.9459L19.0641 34.7443C19.1886 34.5608 19.2999 34.3683 19.3872 34.1631C21.0719 30.1823 23.5996 26.7588 26.9004 23.9898C30.2012 21.2197 34.0105 19.325 38.2229 18.3569C38.4431 18.3063 38.6549 18.2353 38.8564 18.1451L47.2144 48.2016L33.472 41.6294Z",
+}
diff --git a/src/imports/svg-qafz9g9knb.ts b/src/imports/svg-qafz9g9knb.ts
new file mode 100644
index 0000000..edf061c
--- /dev/null
+++ b/src/imports/svg-qafz9g9knb.ts
@@ -0,0 +1,11 @@
+export default {
+p1315a800: "M30.318 7.90272C30.3397 7.23079 30.3041 6.54645 30.1756 5.88693C30.157 5.79249 30.0966 5.71352 30.0114 5.67017C29.9263 5.62682 29.8257 5.62527 29.739 5.66553L28.8533 6.08047L29.1196 4.4703C29.1336 4.38359 29.1104 4.29534 29.0562 4.22567C29.002 4.15755 28.9199 4.11575 28.8317 4.10955C28.7434 4.10491 26.6564 3.99963 24.0477 4.97193C23.0615 5.33886 22.2084 5.75845 21.5148 6.21671C21.2021 6.42262 20.976 6.70905 20.8367 7.03109C20.6463 7.13172 20.4589 7.23391 20.2762 7.33919C20.1276 6.81589 19.8071 6.35604 19.3519 6.0371C19.0624 5.83428 18.7326 5.70113 18.3812 5.64384C18.4106 5.27536 18.3286 4.91151 18.1583 4.5926C20.171 4.09562 22.1804 4.05072 23.9981 4.47958C24.1637 4.51829 24.3309 4.4161 24.3712 4.24889C24.4099 4.08168 24.3077 3.91602 24.1405 3.87577C22.1448 3.4051 19.9341 3.47169 17.7355 4.06001C17.686 4.0182 17.638 3.97485 17.5838 3.9377C16.8189 3.40044 15.7909 3.5073 15.1499 4.16064C14.1761 3.86493 13.0892 4.22877 12.4994 5.07566C12.3894 5.23048 12.2996 5.40079 12.2284 5.58346C11.3831 5.5045 10.5517 5.88072 10.0516 6.59138C9.73265 7.04809 9.5871 7.59775 9.63047 8.14582C8.90126 8.17988 8.22002 8.54835 7.79117 9.16147C7.50164 9.57486 7.35455 10.0641 7.36386 10.5642C6.77552 10.688 6.25531 11.0287 5.90541 11.5272C5.53384 12.0567 5.39916 12.6946 5.51061 13.317C4.67919 13.5693 3.9918 14.1236 3.57223 14.8853C2.98543 15.9505 3.05047 17.1984 3.62951 18.1753C3.63261 18.1815 3.63261 18.1893 3.63725 18.1955C3.6419 18.2032 3.64809 18.2078 3.65273 18.214C3.92677 18.6615 4.31075 19.0485 4.79069 19.3319L4.8294 21.2733L2.95756 20.2406C3.12013 20.0131 3.3152 19.8118 3.54281 19.6446C3.6806 19.5424 3.70847 19.3489 3.60783 19.2111C3.50565 19.0733 3.31212 19.0438 3.17431 19.146C2.79189 19.4294 2.48224 19.7839 2.25002 20.2019C1.66477 21.2671 1.72981 22.515 2.30885 23.4935C2.31195 23.4997 2.31195 23.5074 2.31659 23.5152C2.32124 23.5229 2.32743 23.5276 2.33208 23.5353C2.6216 24.0091 3.03187 24.4178 3.55208 24.7058C3.55208 24.7058 3.55363 24.7058 3.55363 24.7073C3.33378 24.9256 3.14024 25.1749 2.98851 25.4505L2.98697 25.452V25.4536C2.40172 26.5157 2.46676 27.7635 3.04425 28.7405C3.04735 28.7482 3.04735 28.756 3.05199 28.7637C3.05664 28.7715 3.06438 28.7777 3.06902 28.7854C3.35854 29.2592 3.76882 29.6664 4.28903 29.9528C4.73028 30.1958 5.20404 30.3212 5.67625 30.3491C6.42559 31.4886 7.37001 32.464 8.48629 33.2474C9.47407 33.9379 10.5687 34.4535 11.7407 34.7848L12.2191 36.217C12.2562 36.3269 12.3507 36.4074 12.4668 36.4244C12.4823 36.426 12.4978 36.4275 12.5132 36.4275C12.6123 36.4275 12.7052 36.3811 12.7641 36.299C12.8508 36.1798 14.8774 33.3372 14.9068 30.6835L14.9238 29.0625C15.1112 28.8706 15.3248 28.7002 15.5075 28.5702C15.4828 29.5394 15.8729 30.4978 16.599 31.1387C17.723 32.1358 19.3812 32.2581 20.6291 31.4344C21.01 31.1805 21.4946 31.1651 21.8584 31.3942C22.2083 31.6171 22.6 31.7797 23.0196 31.8741C23.1187 31.8974 23.2178 31.9097 23.3169 31.9252C20.513 33.7754 17.4041 34.7198 14.4827 34.5975C14.3139 34.5882 14.1668 34.7229 14.1606 34.8932C14.1529 35.0635 14.286 35.2091 14.4563 35.2152C14.6359 35.223 14.8171 35.2261 14.9982 35.2261C18.1365 35.2261 21.4341 34.0773 24.3513 31.9624C25.5419 31.8586 26.6473 31.261 27.3193 30.2841C27.6815 29.7592 27.8998 29.1693 27.985 28.564C28.386 28.0933 28.7746 27.5917 29.1416 27.0653C33.5771 20.7301 34.0511 12.8697 30.3136 7.90102L30.318 7.90272ZM21.8583 6.73381C22.5132 6.30187 23.3229 5.90393 24.2658 5.55249C26.1438 4.85269 27.7664 4.73965 28.4521 4.72574L28.1517 6.53718L27.743 7.78814C27.6903 7.9507 27.7786 8.12565 27.9412 8.1783C27.9737 8.18913 28.0062 8.19378 28.0372 8.19378C28.1672 8.19378 28.288 8.11017 28.3313 7.98012L28.706 6.83289L29.6334 6.39782C29.9136 8.47092 29.3361 10.747 28.949 11.9606C28.7989 12.4343 28.3839 12.7703 27.8947 12.8168C23.9404 13.1899 22.123 10.1011 21.389 8.22784C21.1722 7.67359 21.3642 7.05738 21.8581 6.73226L21.8583 6.73381ZM25.5725 23.1514C23.871 24.1562 22.8244 25.6363 21.9822 26.8269C21.157 27.9943 20.5051 28.9155 19.6056 28.9557C18.4955 29.0099 17.7725 28.1027 17.3839 27.4153C24.3711 23.0677 27.169 18.9928 28.2478 16.1114C28.8516 16.7229 29.1412 17.4924 29.0839 18.361C28.9724 20.0532 27.5605 21.9794 25.5725 23.1514ZM6.41458 11.8816C6.71804 11.4497 7.19333 11.1772 7.72131 11.1369C7.80646 11.1307 7.88542 11.0889 7.93961 11.0208C7.9938 10.9542 8.01702 10.8675 8.00464 10.7823C7.93961 10.3334 8.04489 9.88438 8.3019 9.51589C8.67657 8.98019 9.31445 8.69688 9.96161 8.77583C10.0638 8.78821 10.1629 8.74951 10.231 8.67365C10.2991 8.59778 10.3239 8.4925 10.2991 8.39341C10.1737 7.89334 10.2697 7.36536 10.5623 6.94737C10.9742 6.36367 11.6879 6.08345 12.38 6.23208C12.5425 6.26769 12.702 6.1686 12.7453 6.00758C12.8011 5.79393 12.8893 5.60041 13.0101 5.43165C13.4808 4.75817 14.371 4.49805 15.1312 4.80926C15.2597 4.8619 15.4083 4.8232 15.4935 4.71172C15.9115 4.16983 16.6748 4.0537 17.2321 4.44388C17.6734 4.75353 17.8716 5.31398 17.7245 5.83728C17.6982 5.93018 17.7168 6.02927 17.774 6.10668C17.8313 6.18409 17.9211 6.22899 18.0171 6.23054C18.3763 6.23673 18.7154 6.34356 18.9987 6.54328C19.3827 6.81268 19.6397 7.21831 19.7233 7.67506C19.5793 7.76641 19.4384 7.8593 19.2991 7.9522C17.8019 7.56359 15.2829 7.192 14.2317 8.6969C14.0862 8.90436 13.9221 9.13042 13.7487 9.36883C12.3289 11.3243 10.1986 14.2566 11.1073 16.9554C10.8333 17.282 10.1877 18.1227 9.85326 19.1601C9.75572 19.1244 9.66127 19.078 9.57303 19.0161C9.37021 18.8752 9.22157 18.6739 9.1395 18.4463C9.22465 18.3302 9.30361 18.2094 9.37483 18.0809C9.96163 17.0157 9.89659 15.7679 9.31755 14.7909C9.31445 14.7847 9.31445 14.777 9.30981 14.7708C9.30671 14.7661 9.30207 14.763 9.29742 14.7584C9.0079 14.2815 8.59608 13.8712 8.07432 13.5833C7.5603 13.3 6.99209 13.1637 6.42079 13.173C6.4177 13.173 6.4146 13.1714 6.40996 13.1714C6.40531 13.1714 6.40221 13.1745 6.39757 13.1745C6.30467 13.1761 6.21333 13.1823 6.12043 13.1916C6.04147 12.7349 6.14366 12.2688 6.4146 11.8802L6.41458 11.8816ZM10.6119 26.1022C10.2403 26.5621 9.75109 26.8965 9.19838 27.073C9.20148 26.4707 9.03737 25.8793 8.73236 25.3622C8.72926 25.3544 8.72771 25.3451 8.72307 25.3389C8.71997 25.3327 8.71378 25.3296 8.70913 25.3235C8.41961 24.8482 8.00934 24.4394 7.49068 24.1514C7.48913 24.1514 7.48758 24.1499 7.48603 24.1499C7.70433 23.9331 7.89633 23.6854 8.05115 23.4037C8.7494 22.1387 8.54967 20.6168 7.61144 19.5842C8.00469 19.4402 8.36854 19.2219 8.6859 18.9354C8.8175 19.1661 8.99245 19.369 9.21538 19.5238C9.36711 19.6291 9.52968 19.708 9.69845 19.7638C9.67833 19.8783 9.6613 19.9945 9.65046 20.1121C9.51886 21.6712 10.4076 23.1591 11.3644 23.8619C11.3241 24.1484 11.2854 24.4224 11.2482 24.6748C11.1693 25.1919 10.9495 25.6857 10.6119 26.1022ZM3.39876 26.0295L5.26905 27.0606L3.44212 28.1629C3.14176 27.5034 3.10925 26.7323 3.39722 26.0279L3.39876 26.0295ZM2.66024 20.7826L4.53208 21.8153L2.70515 22.9176C2.40634 22.258 2.37227 21.4855 2.66024 20.7826ZM3.98397 15.4628L5.85426 16.4955L4.02733 17.5978C3.72697 16.9382 3.69445 16.1672 3.98397 15.4628ZM6.73055 13.8046C7.0913 13.8387 7.44585 13.944 7.77406 14.1251C8.10693 14.3078 8.38408 14.5524 8.60235 14.8357L6.77233 15.9397L6.73055 13.8046ZM7.64247 22.8231L5.77218 21.7905L7.6053 20.6835C7.90875 21.3461 7.93507 22.1171 7.644 22.8216L7.64247 22.8231ZM7.22135 19.0686C7.13775 19.0934 7.0526 19.112 6.96899 19.129C6.9597 19.1306 6.95196 19.1321 6.94422 19.1337C6.90861 19.1399 6.873 19.143 6.83584 19.1476L6.79404 17.0126L8.66433 18.0453C8.31288 18.5392 7.81127 18.8983 7.22138 19.0702L7.22135 19.0686ZM8.96311 17.5018L7.09282 16.4691L8.91975 15.3668C9.22011 16.0264 9.25262 16.7974 8.96465 17.5018H8.96311ZM6.46734 19.7932C6.48437 19.7932 6.49985 19.7901 6.51533 19.7901C6.51998 19.7901 6.52462 19.7932 6.53081 19.7932H6.53701C6.54784 19.7932 6.55559 19.7886 6.56642 19.787C6.67945 19.7839 6.79402 19.7793 6.90549 19.7638C7.04638 19.883 7.17179 20.0146 7.28171 20.1555L5.45014 21.261L5.41763 19.6137C5.76134 19.7298 6.11588 19.7917 6.46732 19.7917L6.46734 19.7932ZM5.51364 24.4658L5.47184 22.3323L7.34368 23.365C6.90242 23.9843 6.23203 24.3667 5.51364 24.4658ZM6.94113 24.5803C7.02629 24.616 7.11144 24.6485 7.18885 24.6918C7.52172 24.8745 7.79887 25.1191 8.01714 25.4025L6.18866 26.5064L6.1577 24.9489C6.43329 24.8606 6.6965 24.7367 6.94267 24.5804L6.94113 24.5803ZM6.50761 27.0374L8.33299 25.9351C8.63181 26.5946 8.66587 27.3657 8.37789 28.0701L6.50605 27.0374H6.50761ZM6.20879 27.5793L8.08064 28.612C7.63938 29.2313 6.96899 29.6137 6.25216 29.7128L6.21035 27.5793H6.20879ZM11.4668 23.1406C10.7561 22.4748 10.1724 21.3105 10.27 20.1649C10.4016 18.6352 11.6743 17.248 11.6866 17.234C11.7671 17.1473 11.7919 17.0219 11.7486 16.9105C10.8026 14.4782 12.8772 11.6232 14.249 9.73455C14.4255 9.49303 14.5911 9.26544 14.7382 9.05331C15.4891 7.98194 17.3981 8.17234 18.6289 8.43247C13.1728 12.5601 12.0349 19.1121 11.4653 23.139L11.4668 23.1406ZM5.72604 13.8961C5.853 13.859 5.98305 13.8326 6.11155 13.8156L6.15336 15.9522L4.28306 14.921C4.63296 14.4271 5.13613 14.068 5.72601 13.8976L5.72604 13.8961ZM4.345 18.1291L6.17503 17.0252L6.21683 19.1633C5.85609 19.1293 5.50154 19.0224 5.17332 18.8413C4.84045 18.6586 4.5633 18.414 4.34503 18.1306L4.345 18.1291ZM3.02282 23.4505L4.8513 22.3466L4.8931 24.4832C4.537 24.4491 4.18245 24.3454 3.85114 24.1627C3.51827 23.9784 3.24109 23.7339 3.02282 23.4505ZM5.14392 25.1149C5.1594 25.1149 5.17644 25.1118 5.19192 25.1118C5.19811 25.1118 5.2043 25.1149 5.21049 25.1149H5.21669C5.22907 25.1149 5.23836 25.1087 5.2492 25.1071C5.34674 25.104 5.44273 25.0994 5.53872 25.0885L5.56659 26.5191L3.69475 25.4864C3.83564 25.2883 4.0013 25.1164 4.1871 24.9662C4.50139 25.0622 4.82343 25.1149 5.14238 25.1149L5.14392 25.1149ZM3.75979 28.696L5.58827 27.5921L5.63007 29.7286C5.27398 29.6946 4.91942 29.5908 4.58811 29.4081C4.25524 29.2239 3.97806 28.9793 3.75979 28.696ZM8.84416 32.7383C8.03133 32.167 7.31295 31.4889 6.70915 30.7256C7.89665 31.1437 9.31637 31.4936 10.6185 31.4177L11.501 34.0621C10.5488 33.7509 9.65704 33.3081 8.84266 32.7384L8.84416 32.7383ZM14.2892 30.6761C14.2691 32.4953 13.1791 34.4894 12.6063 35.4137L11.1308 30.9936C11.0843 30.8558 10.9496 30.7675 10.8057 30.783C9.56552 30.9084 8.16279 30.5755 6.98151 30.1653C7.72467 29.9051 8.37956 29.3896 8.78831 28.648C8.94778 28.3585 9.05771 28.055 9.12273 27.7485C9.20169 27.7237 9.28066 27.6974 9.35807 27.6742C9.83801 27.5255 10.2793 27.2778 10.6555 26.948C10.7964 27.4992 11.1169 28.2919 11.829 28.823C12.4762 29.3045 13.3076 29.4686 14.3031 29.3107L14.2892 30.6778L14.2892 30.6761ZM14.4642 28.6479C13.5244 28.8492 12.7626 28.7439 12.2022 28.3289C11.411 27.7422 11.216 26.694 11.1741 26.3766C11.5318 25.8998 11.7718 25.3486 11.86 24.768C11.9049 24.4645 11.9514 24.1363 11.9994 23.7879C12.6264 19.2715 13.6699 11.7904 20.6802 7.82416C20.6864 8.03472 20.7298 8.24837 20.8103 8.45741C21.4188 10.0103 23.2255 13.4704 27.2541 13.4704C27.4802 13.4704 27.7124 13.4596 27.9524 13.4364C28.0546 13.4271 28.1552 13.407 28.2527 13.3806C28.2109 13.9396 28.0902 14.6502 27.8177 15.4801C27.8161 15.4863 27.813 15.4909 27.8115 15.4971C26.8423 18.4388 23.9548 22.8993 15.7383 27.6848C15.7305 27.6895 15.5246 27.801 15.2614 27.9837C15.0369 28.1369 14.7257 28.3738 14.4625 28.6479L14.4642 28.6479ZM26.8128 29.9345C26.0356 31.0632 24.5694 31.5988 23.1606 31.2691C22.8045 31.1886 22.4871 31.057 22.1914 30.8696C21.6201 30.5089 20.8723 30.529 20.2886 30.9161C19.2745 31.5849 17.926 31.4858 17.011 30.673C16.3127 30.0552 15.9938 29.0752 16.1733 28.1463C16.4056 28.01 16.6316 27.8738 16.8561 27.7376C17.3129 28.5349 18.1644 29.5753 19.5114 29.5753C19.5516 29.5753 19.5934 29.5738 19.6352 29.5722C20.8382 29.518 21.603 28.4358 22.4886 27.1833C23.3386 25.9819 24.3001 24.621 25.887 23.6843C26.6704 23.2213 27.3625 22.6578 27.9384 22.0385C28.2249 22.8498 28.1118 23.7679 27.6117 24.4817C27.5576 24.5575 27.5003 24.6349 27.4322 24.7092C26.9661 25.245 26.8531 25.9974 27.1395 26.6755C27.5994 27.75 27.4771 28.9669 26.8129 29.933L26.8128 29.9345ZM28.6382 26.7126C28.4323 27.0068 28.2202 27.2916 28.0034 27.5688C27.9601 27.1848 27.8672 26.8024 27.7093 26.4355C27.5173 25.9788 27.5885 25.474 27.8935 25.1241C27.9802 25.0297 28.0545 24.929 28.1165 24.8423C28.8008 23.8669 28.8952 22.585 28.3858 21.5167C29.1553 20.5336 29.6322 19.4451 29.7018 18.4032C29.7777 17.2466 29.3473 16.2403 28.4663 15.4724C28.7698 14.4877 28.872 13.6718 28.889 13.0695C29.1878 12.8435 29.42 12.5276 29.5393 12.1529C29.7854 11.3804 30.1044 10.1929 30.2484 8.88616C33.3541 13.661 32.7426 20.8496 28.6382 26.714L28.6382 26.7126Z",
+p175044f0: "M25.2137 15.9937C25.2385 15.9998 25.2633 16.0029 25.288 16.0029C25.4274 16.0029 25.5528 15.9085 25.5884 15.7676C25.6302 15.6019 25.528 15.4332 25.3624 15.3929C21.5475 14.4501 19.3878 11.2792 19.366 11.2483C19.2715 11.1059 19.078 11.0672 18.9371 11.1632C18.7947 11.2576 18.7575 11.4496 18.852 11.592C18.9449 11.7298 21.1604 14.9919 25.2154 15.9935L25.2137 15.9937Z",
+p1b76b0f0: "M23.5415 18.3841C23.5663 18.3903 23.5911 18.3934 23.6158 18.3934C23.7552 18.3934 23.8806 18.299 23.9162 18.1581C23.958 17.9924 23.8558 17.8237 23.6902 17.7834C19.8753 16.8405 17.7156 13.6713 17.6938 13.6388C17.5978 13.4964 17.4074 13.4577 17.2649 13.5536C17.1225 13.6481 17.0838 13.8401 17.1798 13.9825C17.2727 14.1203 19.4882 17.3824 23.5432 18.384L23.5415 18.3841Z",
+p25c1fb00: "M29.9109 2.65252C22.2749 -2.69503 10.8025 0.464868 4.33728 9.69684C-2.12679 18.929 -1.17278 30.7902 6.46456 36.1377C8.98356 37.9012 11.9191 38.7403 14.9568 38.7403C21.1247 38.7403 27.7065 35.28 32.0386 29.0932C38.5027 19.861 37.5487 7.99983 29.9113 2.65228L29.9109 2.65252ZM31.5304 28.7371C25.2617 37.689 14.1762 40.781 6.81878 35.63C-0.538259 30.479 -1.4241 19.0051 4.84476 10.0532C11.1134 1.10121 22.1989 -1.9923 29.5564 3.16024C36.9134 8.3112 37.7993 19.7867 31.5304 28.7387V28.7371Z",
+p27c0e980: "M23.992 9.24192C24.2165 9.39829 24.4735 9.47415 24.7274 9.47415C25.133 9.47415 25.5325 9.28372 25.7818 8.92608C25.9784 8.6443 26.0543 8.30369 25.9954 7.96616C25.9366 7.62865 25.7477 7.33291 25.4675 7.13629C25.1873 6.93966 24.8451 6.8638 24.5076 6.92263C24.1701 6.98146 23.8743 7.17035 23.6777 7.45057C23.2721 8.03114 23.413 8.8347 23.9936 9.24032L23.992 9.24192ZM24.184 7.8067C24.2862 7.66116 24.4379 7.56362 24.6144 7.53266C24.6531 7.52646 24.6933 7.52182 24.732 7.52182C24.8683 7.52182 24.9999 7.56362 25.1129 7.64258C25.2584 7.74476 25.356 7.89649 25.3869 8.07298C25.4179 8.24793 25.3792 8.42443 25.277 8.56996C25.0665 8.87032 24.65 8.94309 24.3496 8.73407C24.0493 8.52351 23.975 8.10705 24.1871 7.80669L24.184 7.8067Z",
+p35ead8c0: "M19.1182 22.8308C19.1539 22.8431 19.1895 22.8509 19.2266 22.8509C19.352 22.8509 19.4712 22.7735 19.5177 22.6496C19.5765 22.4886 19.496 22.3105 19.335 22.2517C17.6025 21.6076 16.2942 20.5409 15.5031 19.759C15.3823 19.6383 15.1857 19.6398 15.0649 19.7621C14.9442 19.8844 14.9457 20.0795 15.068 20.2003C15.9025 21.0255 17.2835 22.1511 19.1199 22.8338L19.1182 22.8308Z",
+p5c4670: "M9.91694 13.238C9.97732 13.238 10.0377 13.2209 10.0903 13.1853C10.2312 13.0893 10.2684 12.8973 10.1724 12.7549C9.98506 12.4793 9.92778 12.1387 10.0129 11.8182C10.1321 11.3739 10.5022 11.0441 10.9589 10.9806C11.123 10.9574 11.2407 10.8088 11.2237 10.6431C11.2097 10.5038 11.2206 10.3675 11.2562 10.2359C11.3924 9.72345 11.8816 9.36892 12.4065 9.38905C12.583 9.39525 12.7223 9.26364 12.7285 9.09179C12.7363 8.92148 12.6031 8.77595 12.4313 8.76976C11.6076 8.7357 10.8675 9.28533 10.657 10.0765C10.626 10.1911 10.6074 10.3087 10.6012 10.4279C10.0253 10.6044 9.57318 11.0643 9.41527 11.6603C9.28367 12.1527 9.37347 12.6791 9.66144 13.1033C9.72182 13.1915 9.81936 13.2395 9.91845 13.2395L9.91694 13.238Z",
+p6408e00: "M21.8675 20.7733C21.8923 20.7795 21.917 20.7826 21.9418 20.7826C22.0811 20.7826 22.2066 20.6881 22.2422 20.5472C22.284 20.3816 22.1818 20.2128 22.0161 20.1726C18.9692 19.4201 16.9983 17.2774 16.2924 16.3902C16.1856 16.2555 15.9905 16.2354 15.8574 16.3407C15.7242 16.4475 15.701 16.6426 15.8078 16.7757C16.5541 17.7109 18.6363 19.9744 21.8675 20.7733Z",
+p8ca8800: "M16.8904 24.9674C17.0081 24.9674 17.1211 24.9009 17.1722 24.7863C17.2434 24.6299 17.1738 24.4472 17.0189 24.376C16.1891 23.9982 15.3886 23.495 14.6393 22.8804C14.5077 22.772 14.3126 22.7906 14.2042 22.9238C14.0959 23.0554 14.1144 23.2504 14.2476 23.3588C15.0372 24.0075 15.8841 24.5402 16.7635 24.9396C16.8053 24.9582 16.8486 24.9675 16.892 24.9675L16.8904 24.9674Z",
+}
diff --git a/src/imports/svg-qnagtgq03x.ts b/src/imports/svg-qnagtgq03x.ts
new file mode 100644
index 0000000..34b7250
--- /dev/null
+++ b/src/imports/svg-qnagtgq03x.ts
@@ -0,0 +1,37 @@
+export default {
+p119fe300: "M4.44095 0.72106H0.385528C0.2002 0.72106 0.05 0.57086 0.05 0.385531C0.05 0.200203 0.2002 0.05 0.385528 0.05H4.44095C4.62628 0.05 4.77648 0.200203 4.77648 0.385531C4.77648 0.57086 4.62628 0.72106 4.44095 0.72106Z",
+p15afe300: "M2.31149 7.98157H0.385531C0.200203 7.98157 0.05 7.83136 0.05 7.64603V0.385528C0.05 0.2002 0.200203 0.05 0.385531 0.05C0.57086 0.05 0.72106 0.2002 0.72106 0.385528V7.31051H2.3127C2.49803 7.31051 2.64823 7.46071 2.64823 7.64603C2.64702 7.83136 2.49682 7.98157 2.31149 7.98157Z",
+p1a7ca200: "M1.45268 0.72106H0.385528C0.2002 0.72106 0.05 0.57086 0.05 0.385531C0.05 0.200203 0.2002 0.05 0.385528 0.05H1.45268C1.63801 0.05 1.78821 0.200203 1.78821 0.385531C1.78821 0.57086 1.6368 0.72106 1.45268 0.72106Z",
+p1aa58800: "M8.25411 4.44337H0.38553C0.200202 4.44337 0.05 4.29317 0.05 4.10784V3.18362C0.05 2.50408 0.391585 1.87906 0.965739 1.51325L3.17272 0.103296C3.22602 0.0693796 3.28901 0.05 3.3532 0.05H5.28764C5.35184 0.05 5.41362 0.0681683 5.46813 0.103296L7.6739 1.51203C8.24684 1.87784 8.58964 2.50287 8.58964 3.18241V4.10784C8.58964 4.29317 8.43944 4.44337 8.25411 4.44337ZM0.721058 3.77352H7.91979V3.18362C7.91979 2.73302 7.69328 2.31997 7.31414 2.07771L5.18953 0.719847H3.45132L1.32671 2.0765C0.947571 2.31876 0.721058 2.73302 0.721058 3.18241V3.77352Z",
+p1b540400: "M0.385528 11.4919C0.2002 11.4919 0.05 11.3417 0.05 11.1564V0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05C0.570857 0.05 0.721057 0.2002 0.721057 0.385528V11.1564C0.721057 11.3417 0.570857 11.4919 0.385528 11.4919Z",
+p1b618330: "M3.71538 16.5321C3.54822 16.5321 3.40287 16.4061 3.38349 16.2353C3.31565 15.6539 2.75603 14.634 2.48713 14.1434C2.43504 14.0489 2.39143 13.9678 2.35752 13.9048L1.62711 12.5142C1.11109 11.5331 0.716213 10.4902 0.449728 9.41332C0.184454 8.33769 0.05 7.22935 0.05 6.12101V0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05C0.570857 0.05 0.721057 0.2002 0.721057 0.385528V6.12101C0.721057 8.23109 1.23949 10.3339 2.22064 12.2029L2.95105 13.5935C2.98134 13.6516 3.02494 13.7304 3.07461 13.8212C3.38591 14.3893 3.96612 15.4456 4.0497 16.1578C4.0715 16.3419 3.93947 16.5079 3.75535 16.5297C3.74203 16.5309 3.72871 16.5321 3.71538 16.5321Z",
+p1dc35100: "M8.5434 2.27273H0.54885C0.306591 2.27273 0.105517 2.10678 0.0594875 1.86937C0.0134583 1.63195 0.13822 1.40302 0.363521 1.31338L2.56202 0.432771C3.19553 0.178399 3.86295 0.05 4.54613 0.05C5.2293 0.05 5.89672 0.178399 6.53023 0.432771L8.72873 1.31338C8.95403 1.40302 9.07879 1.63195 9.03276 1.86937C8.98673 2.10678 8.78566 2.27273 8.5434 2.27273ZM1.44157 1.60288H7.64946L6.2807 1.05416C5.16146 0.605984 3.92958 0.605984 2.81155 1.05416L1.44157 1.60288Z",
+p200bb800: "M1.72401 5.98777C0.801003 5.98777 0.05 5.23677 0.05 4.31376C0.05 3.90677 0.203834 2.90018 0.453361 1.98444C0.593871 1.46722 0.746495 1.04932 0.903963 0.74165C0.992388 0.570857 1.26008 0.05 1.7228 0.05C2.18551 0.05 2.45321 0.569646 2.54163 0.74165C2.70031 1.04811 2.85173 1.466 2.99224 1.98444C3.24176 2.90018 3.3956 3.90677 3.3956 4.31376C3.39802 5.23677 2.64702 5.98777 1.72401 5.98777ZM1.72401 0.731959C1.68283 0.764664 1.57987 0.868835 1.43814 1.17893C1.31096 1.45753 1.18256 1.84151 1.06628 2.28847C0.839765 3.15818 0.719846 4.02305 0.719846 4.31376C0.719846 4.86732 1.17045 5.31671 1.7228 5.31671C2.27636 5.31671 2.72575 4.86611 2.72575 4.31376C2.72575 4.02305 2.60583 3.15818 2.37932 2.28847C2.26304 1.84151 2.13464 1.45753 2.00745 1.17893C1.86937 0.868835 1.76641 0.764664 1.72401 0.731959Z",
+p20329b80: "M3.21148 0.721057H0.38553C0.200202 0.721057 0.05 0.570857 0.05 0.385528C0.05 0.2002 0.200202 0.05 0.38553 0.05H3.21148C3.39681 0.05 3.54701 0.2002 3.54701 0.385528C3.5458 0.570857 3.3956 0.721057 3.21148 0.721057Z",
+p2040a800: "M3.88738 9.27281C2.86263 9.27281 1.89844 8.87308 1.17408 8.14872C0.449728 7.42437 0.05 6.46018 0.05 5.43542V0.385531C0.05 0.200203 0.200202 0.05 0.38553 0.05H5.48509C5.67041 0.05 5.82061 0.200203 5.82061 0.385531C5.82061 0.57086 5.67041 0.72106 5.48509 0.72106H0.721058V5.43542C0.721058 7.18211 2.14191 8.60296 3.8886 8.60296C4.23987 8.60296 4.55481 8.56904 4.75225 8.5109C4.9291 8.4576 5.11564 8.55935 5.16894 8.7362C5.22223 8.91305 5.12049 9.09959 4.94364 9.15289C4.60932 9.25221 4.18536 9.27281 3.88738 9.27281Z",
+p2051aa80: "M7.44815 2.34298C6.38826 2.34298 5.59729 1.86937 4.89958 1.45147C4.26971 1.07476 3.67375 0.718635 2.93849 0.718635C2.12571 0.718635 1.53097 0.933034 1.17485 1.11231C0.807824 1.29763 0.624917 1.47691 0.622495 1.47933C0.491675 1.61015 0.279697 1.61136 0.148877 1.48175C0.0180568 1.35093 0.0168461 1.13896 0.146455 1.00814C0.185216 0.969375 1.11792 0.05 2.93728 0.05C3.85787 0.05 4.56163 0.471533 5.24238 0.878528C5.92676 1.28795 6.57238 1.67435 7.44693 1.67435C8.99739 1.67435 9.44436 0.962105 9.448 0.954837C9.53884 0.793735 9.74355 0.736805 9.90465 0.828864C10.0658 0.919711 10.1227 1.12442 10.0306 1.28552C10.0137 1.3158 9.85136 1.58835 9.44315 1.84756C8.92593 2.17583 8.25487 2.34298 7.44815 2.34298Z",
+p206c6580: "M0.385528 9.4545C0.2002 9.4545 0.05 9.3043 0.05 9.11897V0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05C0.570857 0.05 0.721057 0.2002 0.721057 0.385528V9.11897C0.719845 9.30551 0.570857 9.4545 0.385528 9.4545Z",
+p21290430: "M7.19907 0.72106H0.385528C0.2002 0.72106 0.05 0.57086 0.05 0.385531C0.05 0.200203 0.2002 0.05 0.385528 0.05H7.19907C7.3844 0.05 7.5346 0.200203 7.5346 0.385531C7.53338 0.57086 7.3844 0.72106 7.19907 0.72106Z",
+p26102900: "M1.72401 5.98777C0.801003 5.98777 0.05 5.23677 0.05 4.31376C0.05 3.90677 0.203835 2.90018 0.453362 1.98444C0.593872 1.46722 0.746495 1.04932 0.903963 0.74165C0.992388 0.570857 1.26009 0.05 1.7228 0.05C2.18552 0.05 2.45321 0.569646 2.54163 0.74165C2.70031 1.04811 2.85173 1.466 2.99224 1.98444C3.24177 2.90018 3.3956 3.90677 3.3956 4.31376C3.39802 5.23677 2.64702 5.98777 1.72401 5.98777ZM1.72401 0.731959C1.68283 0.764664 1.57987 0.868835 1.43815 1.17893C1.31096 1.45753 1.18256 1.84151 1.06628 2.28847C0.839767 3.15818 0.719847 4.02305 0.719847 4.31376C0.719847 4.86732 1.17045 5.31671 1.7228 5.31671C2.27636 5.31671 2.72575 4.86611 2.72575 4.31376C2.72575 4.02305 2.60583 3.15818 2.37932 2.28847C2.26304 1.84151 2.13464 1.45753 2.00746 1.17893C1.86937 0.868835 1.76641 0.764664 1.72401 0.731959Z",
+p2b2e2f00: "M0.385528 2.46654C0.2002 2.46654 0.05 2.31633 0.05 2.13101V0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05C0.570857 0.05 0.72106 0.2002 0.72106 0.385528V2.13101C0.72106 2.31754 0.570857 2.46654 0.385528 2.46654Z",
+p2c63c800: "M0.385528 2.46654C0.2002 2.46654 0.05 2.31633 0.05 2.13101V0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05C0.570857 0.05 0.721058 0.2002 0.721058 0.385528V2.13101C0.721058 2.31754 0.570857 2.46654 0.385528 2.46654Z",
+p2ceb9900: "M5.7758 0.72106H0.38553C0.200202 0.72106 0.05 0.57086 0.05 0.385531C0.05 0.200203 0.200202 0.05 0.38553 0.05H5.7758C5.96112 0.05 6.11132 0.200203 6.11132 0.385531C6.11132 0.57086 5.96112 0.72106 5.7758 0.72106Z",
+p2f0cc900: "M12.5106 0.721057H0.385528C0.2002 0.721057 0.05 0.570857 0.05 0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05H12.5106C12.6959 0.05 12.8461 0.2002 12.8461 0.385528C12.8461 0.572068 12.6959 0.721057 12.5106 0.721057Z",
+p2f242100: "M1.63074 0.72106H0.385528C0.2002 0.72106 0.05 0.57086 0.05 0.385531C0.05 0.200203 0.2002 0.05 0.385528 0.05H1.63074C1.81607 0.05 1.96627 0.200203 1.96627 0.385531C1.96506 0.57086 1.81607 0.72106 1.63074 0.72106Z",
+p3263c200: "M1.77852 0.721057H0.385528C0.2002 0.721057 0.05 0.570857 0.05 0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05H1.77852C1.96385 0.05 2.11405 0.2002 2.11405 0.385528C2.11405 0.570857 1.96385 0.721057 1.77852 0.721057Z",
+p32a21d80: "M4.83462 0.721057H0.38553C0.200202 0.721057 0.05 0.570857 0.05 0.385528C0.05 0.2002 0.200202 0.05 0.38553 0.05H4.83462C5.01995 0.05 5.17015 0.2002 5.17015 0.385528C5.17015 0.570857 5.01995 0.721057 4.83462 0.721057Z",
+p332aed00: "M3.88738 9.27281C2.86263 9.27281 1.89844 8.87308 1.17408 8.14872C0.449727 7.42437 0.05 6.46018 0.05 5.43542V0.385531C0.05 0.200203 0.2002 0.05 0.385528 0.05C0.570857 0.05 0.721057 0.200203 0.721057 0.385531V5.43542C0.721057 7.18211 2.14191 8.60296 3.8886 8.60296C5.63528 8.60296 7.05613 7.18211 7.05613 5.43542V0.385531C7.05613 0.200203 7.20633 0.05 7.39166 0.05C7.57699 0.05 7.72719 0.200203 7.72719 0.385531V5.43542C7.72719 6.46018 7.32746 7.42437 6.60311 8.14872C5.87633 8.87429 4.91214 9.27281 3.88738 9.27281Z",
+p3401a40: "M5.23919 11.6373C4.52695 11.6373 3.83772 11.4592 3.18968 11.1067C2.57071 10.7712 2.01714 10.2915 1.54232 9.68344C0.579336 8.44791 0.05 6.81024 0.05 5.07203C0.05 4.27137 0.161437 3.3532 0.362512 2.48592C0.516346 1.82334 0.794945 0.889428 1.24676 0.201412C1.30853 0.106931 1.41392 0.05 1.52657 0.05H8.94939C9.06204 0.05 9.16742 0.106931 9.2292 0.201412C9.68101 0.889428 9.95961 1.82334 10.1134 2.48592C10.3157 3.3532 10.426 4.27137 10.426 5.07203C10.426 6.81024 9.89541 8.44791 8.93364 9.68344C8.45881 10.2927 7.90525 10.7712 7.28628 11.1067C6.63945 11.458 5.95022 11.6373 5.23919 11.6373ZM1.71432 0.719847C1.06749 1.82697 0.721057 3.75293 0.721057 5.07203C0.721057 8.32194 2.74877 10.9662 5.2404 10.9662C7.73204 10.9662 9.75974 8.32194 9.75974 5.07203C9.75974 3.75414 9.4121 1.82697 8.76648 0.719847H1.71432Z",
+p3450f000: "M10.3739 36.0945H2.62037C1.20315 36.0945 0.05 34.9414 0.05 33.5242V20.6663C0.05 19.4404 0.198989 18.2146 0.492123 17.0239C0.785257 15.8332 1.22375 14.6788 1.79427 13.5935L2.52468 12.2029C3.50583 10.3351 4.02426 8.2323 4.02426 6.12101V0.385528C4.02426 0.2002 4.17446 0.05 4.35979 0.05C4.54512 0.05 4.69532 0.2002 4.69532 0.385528V6.12101C4.69532 7.22935 4.56087 8.33769 4.29559 9.41332C4.03032 10.4889 3.63422 11.5331 3.11821 12.5142L2.3878 13.9048C1.29642 15.9822 0.719847 18.32 0.719847 20.665V33.5217C0.719847 34.5695 1.5726 35.4223 2.62037 35.4223H10.3739C10.5592 35.4223 10.7094 35.5725 10.7094 35.7578C10.7094 35.9431 10.558 36.0945 10.3739 36.0945Z",
+p34c8570: "M2.31997 7.98157H0.38553C0.200202 7.98157 0.05 7.83136 0.05 7.64603V0.385528C0.05 0.2002 0.200202 0.05 0.38553 0.05C0.570858 0.05 0.721058 0.2002 0.721058 0.385528V7.31051H1.98565V0.385528C1.98565 0.2002 2.13585 0.05 2.32118 0.05C2.50651 0.05 2.65671 0.2002 2.65671 0.385528V7.64603C2.65429 7.83136 2.5053 7.98157 2.31997 7.98157Z",
+p35856480: "M7.39045 0.721057H0.385528C0.2002 0.721057 0.05 0.570857 0.05 0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05H7.39045C7.57578 0.05 7.72598 0.2002 7.72598 0.385528C7.72477 0.570857 7.57457 0.721057 7.39045 0.721057Z",
+p35daba00: "M6.04349 3.32534H3.89102C3.70569 3.32534 3.55549 3.17514 3.55549 2.98981C3.55549 2.80449 3.70569 2.65429 3.89102 2.65429H6.04349C6.19006 2.65429 6.30877 2.53558 6.30877 2.38901V0.986332C6.30877 0.839765 6.19006 0.721057 6.04349 0.721057H0.986332C0.839765 0.721057 0.72106 0.839765 0.72106 0.986332V2.38901C0.72106 2.53558 0.839765 2.65429 0.986332 2.65429H2.17461C2.35994 2.65429 2.51014 2.80449 2.51014 2.98981C2.51014 3.17514 2.35994 3.32534 2.17461 3.32534H0.986332C0.47032 3.32534 0.05 2.90502 0.05 2.38901V0.986332C0.05 0.47032 0.47032 0.05 0.986332 0.05H6.04349C6.5595 0.05 6.97982 0.47032 6.97982 0.986332V2.38901C6.97982 2.90502 6.5595 3.32534 6.04349 3.32534Z",
+p37797c00: "M4.31982 4.44337H0.38553C0.200202 4.44337 0.05 4.29317 0.05 4.10784V3.18362C0.05 2.50408 0.391585 1.87906 0.965739 1.51325L3.17272 0.103296C3.22602 0.0693795 3.28901 0.05 3.3532 0.05H5.28764C5.47297 0.05 5.62317 0.2002 5.62317 0.385528C5.62317 0.570857 5.47297 0.721057 5.28764 0.721057H3.45132L1.32671 2.0765C0.94757 2.31876 0.721058 2.73302 0.721058 3.18241V3.77231H4.31982C4.50515 3.77231 4.65535 3.92251 4.65535 4.10784C4.65535 4.29317 4.50515 4.44337 4.31982 4.44337Z",
+p39705400: "M5.10353 8.78708C4.9182 8.78708 4.768 8.63688 4.768 8.45155V0.721058H0.721058V8.45155C0.721058 8.63688 0.570858 8.78708 0.38553 8.78708C0.200202 8.78708 0.05 8.63688 0.05 8.45155V0.385528C0.05 0.2002 0.200202 0.05 0.38553 0.05H5.10231C5.28764 0.05 5.43784 0.2002 5.43784 0.385528V8.45155C5.43906 8.63688 5.28886 8.78708 5.10353 8.78708Z",
+p3c314100: "M9.24373 2.78753H4.81524C4.62991 2.78753 4.47971 2.63733 4.47971 2.452C4.47971 2.26667 4.62991 2.11647 4.81524 2.11647H9.24373C9.62893 2.11647 9.94144 1.80275 9.94144 1.41876C9.94144 1.03357 9.62772 0.721057 9.24373 0.721057H1.41876C1.03357 0.721057 0.721058 1.03478 0.721058 1.41876C0.721058 1.80396 1.03478 2.11647 1.41876 2.11647H2.93409C3.11942 2.11647 3.26962 2.26667 3.26962 2.452C3.26962 2.63733 3.11942 2.78753 2.93409 2.78753H1.41876C0.664127 2.78753 0.05 2.1734 0.05 1.41876C0.05 0.664127 0.664127 0.05 1.41876 0.05H9.24373C9.99837 0.05 10.6125 0.664127 10.6125 1.41876C10.6125 2.1734 9.99837 2.78753 9.24373 2.78753Z",
+p3ce0580: "M2.56202 0.432771L0.363521 1.31338C0.13822 1.40302 0.0134583 1.63195 0.0594875 1.86937C0.105517 2.10678 0.306591 2.27273 0.54885 2.27273H8.5434C8.78566 2.27273 8.98673 2.10678 9.03276 1.86937C9.07879 1.63195 8.95403 1.40302 8.72873 1.31338L6.53023 0.432771C5.89672 0.178399 5.2293 0.05 4.54613 0.05C3.86295 0.05 3.19553 0.178399 2.56202 0.432771ZM2.56202 0.432771L2.68679 0.744073M1.44157 1.60288H7.64946L6.2807 1.05416C5.16146 0.605984 3.92958 0.605984 2.81155 1.05416L1.44157 1.60288Z",
+p5cab80: "M6.93137 0.721057H0.385528C0.2002 0.721057 0.05 0.570857 0.05 0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05H6.93137C7.1167 0.05 7.2669 0.2002 7.2669 0.385528C7.2669 0.570857 7.1167 0.721057 6.93137 0.721057Z",
+p88545c0: "M5.10353 8.78708C4.9182 8.78708 4.768 8.63688 4.768 8.45155V0.721058H0.721058V8.45155C0.721058 8.63688 0.570857 8.78708 0.385528 8.78708C0.2002 8.78708 0.05 8.63688 0.05 8.45155V0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05H5.10231C5.28764 0.05 5.43784 0.2002 5.43784 0.385528V8.45155C5.43905 8.63688 5.28886 8.78708 5.10353 8.78708Z",
+pbe42b80: "M5.28643 0.721057H0.385528C0.2002 0.721057 0.05 0.570857 0.05 0.385528C0.05 0.2002 0.2002 0.05 0.385528 0.05H5.28643C5.47176 0.05 5.62196 0.2002 5.62196 0.385528C5.62075 0.570857 5.47055 0.721057 5.28643 0.721057Z",
+pcabba00: "M4.854 0.72106H0.38553C0.200202 0.72106 0.05 0.57086 0.05 0.385531C0.05 0.200203 0.200202 0.05 0.38553 0.05H4.854C5.03933 0.05 5.18953 0.200203 5.18953 0.385531C5.18953 0.57086 5.03933 0.72106 4.854 0.72106Z",
+}
diff --git a/src/imports/svg-rf4f5wcll0.ts b/src/imports/svg-rf4f5wcll0.ts
new file mode 100644
index 0000000..3b03db7
--- /dev/null
+++ b/src/imports/svg-rf4f5wcll0.ts
@@ -0,0 +1,4 @@
+export default {
+p1054ae00: "M53.2116 48.9121H38.9889L40.9593 33.2206L48.4109 24.4796C49.5519 23.1182 49.5376 21.1299 48.3751 19.7867L43.109 13.7681C42.86 13.4743 42.5018 13.2952 42.1184 13.2665C41.7333 13.2396 41.3553 13.3686 41.0669 13.6247L40.6012 14.0546C40.6621 13.5854 40.4884 13.116 40.1355 12.8008L39.2399 12.0126C38.6685 11.5092 37.8033 11.5397 37.2695 12.0842L31.7526 17.7447C31.7472 18.7048 31.5143 19.6506 31.0719 20.5032L38.3084 13.0874L39.204 13.8756L32.5049 22.4736C32.367 22.658 32.3276 22.8981 32.3974 23.1184C32.4333 23.2259 33.4005 26.0919 37.9144 27.5607C37.8427 28.3489 37.6636 29.2087 37.2695 29.4236C36.9238 29.6206 36.8038 30.063 37.0009 30.4087C37.1979 30.7545 37.6403 30.8745 37.986 30.6774C39.1324 30.0326 39.3115 28.2055 39.3474 27.3457L44.542 22.6886C45.0776 22.2175 45.185 21.4222 44.7927 20.8257L41.2102 15.3803L42.0342 14.6638L47.3003 20.7182C48.0186 21.5188 48.0348 22.7297 47.3362 23.5483L39.7415 32.4687C39.6484 32.569 39.5874 32.6926 39.5624 32.827L37.5562 48.9123H35.335V34.26C35.3332 33.9483 35.1308 33.6725 34.8334 33.5793C34.7618 33.5793 29.4238 31.8955 26.4147 26.6651C26.2947 26.4573 26.0798 26.323 25.8415 26.3069L14.1625 25.6262V24.4798L24.3727 23.8349H24.5877L24.731 23.7633C23.7135 23.6128 22.7535 23.2062 21.9366 22.5811L14.0549 23.0827C13.3062 23.1382 12.7276 23.7651 12.7294 24.5157V25.6621C12.7276 26.4269 13.3277 27.0575 14.0908 27.0951L25.3755 27.7041C27.3745 30.9211 30.3678 33.3985 33.9019 34.7618V48.9125H8.78843C8.39256 48.9125 8.07193 49.2331 8.07193 49.629C8.07193 50.0248 8.39256 50.3455 8.78843 50.3455H53.2114C53.6073 50.3455 53.9279 50.0248 53.9279 49.629C53.9279 49.2331 53.6075 48.9121 53.2116 48.9121ZM43.6103 21.6493L38.4873 26.2349C35.4421 25.3035 34.2957 23.6913 33.9017 23.0107L39.7767 15.416C39.7803 15.6973 39.8681 15.9713 40.0275 16.2042L43.6103 21.6493Z",
+p365acf00: "M20.9685 17.7085C20.9685 19.5929 22.1024 21.291 23.8434 22.011C25.5846 22.7329 27.5872 22.3335 28.9179 21.0008C30.2505 19.6699 30.65 17.6673 29.9281 15.9264C29.208 14.1853 27.51 13.0514 25.6255 13.0514C23.0533 13.0514 20.9685 15.1364 20.9685 17.7085ZM28.8502 17.7085C28.8502 19.0125 28.0639 20.1875 26.8602 20.6873C25.6547 21.1871 24.2683 20.9112 23.3457 19.9887C22.4232 19.0663 22.1474 17.6798 22.6472 16.4743C23.1469 15.2706 24.322 14.4842 25.626 14.4842C26.4876 14.4753 27.3169 14.8102 27.9295 15.4157C28.5421 16.0211 28.886 16.8469 28.886 17.7085H28.8502Z",
+}
diff --git a/src/imports/svg-rfrt8mx1lu.ts b/src/imports/svg-rfrt8mx1lu.ts
new file mode 100644
index 0000000..d645376
--- /dev/null
+++ b/src/imports/svg-rfrt8mx1lu.ts
@@ -0,0 +1,3 @@
+export default {
+p2dfacf40: "M44.7705 22.9905H47.5959C48.7962 22.9865 49.7672 22.0155 49.7732 20.8152V18.5043C49.7672 17.3039 48.7962 16.3329 47.5959 16.3289H44.7705V22.9905ZM21.105 23.7742C21.3323 23.6326 21.5795 23.5269 21.8367 23.4591L19.2546 20.9428L20.417 24.3544H20.419C20.6144 24.1271 20.8457 23.9297 21.105 23.7742ZM23.7469 23.6146H23.7449C24.5026 23.9596 25.0689 24.6156 25.3002 25.4151V24.159C23.6871 23.8599 22.5167 22.4542 22.5127 20.8152V18.5043C22.5147 17.1025 23.378 15.8444 24.6841 15.336C24.1896 15.2403 23.6891 15.1804 23.1866 15.1525V15.4795C23.1866 15.8185 22.9115 16.0916 22.5745 16.0916C22.2355 16.0916 21.9604 15.8185 21.9604 15.4795V15.1525C19.452 15.2881 17.0654 16.2771 15.195 17.956L15.4243 18.1853H15.4263C15.6377 18.4285 15.6237 18.7934 15.3964 19.0207C15.1691 19.248 14.8042 19.26 14.561 19.0506L14.3317 18.8213V18.8193C12.6528 20.6896 11.6638 23.0763 11.5282 25.5847H11.8532C12.1922 25.5847 12.4654 25.8598 12.4654 26.1988C12.4654 26.5358 12.1922 26.8109 11.8532 26.8109H11.5282C11.6638 29.3193 12.6528 31.7059 14.3317 33.5763L14.561 33.347C14.8042 33.1356 15.1691 33.1476 15.3964 33.3749C15.6237 33.6022 15.6377 33.9671 15.4263 34.2103L15.197 34.4396H15.195C16.4392 35.5562 17.9207 36.3757 19.5278 36.8343V35.636C19.5298 34.33 20.5885 33.2732 21.8946 33.2692H25.2982V32.5713L21.3981 28.7789H21.4001C20.9136 28.5576 20.4989 28.2047 20.2058 27.758C20.1838 27.7301 20.1639 27.6982 20.1459 27.6663C19.8688 27.2097 19.7272 26.6853 19.7392 26.1509L17.2767 18.9292C17.187 18.656 17.2987 18.3609 17.5439 18.2134C17.7892 18.0679 18.1042 18.1097 18.3016 18.3151L23.7469 23.6146ZM24.7319 28.0371H24.7299C24.359 28.4738 23.8645 28.7869 23.3103 28.9344L25.3002 30.8705V29.7061L24.7319 28.0371ZM22.9294 24.6216C22.401 24.5039 21.8507 24.6555 21.4599 25.0283C21.0691 25.3992 20.8897 25.9416 20.9814 26.4739C21.0751 27.0063 21.426 27.4569 21.9205 27.6743C22.413 27.8936 22.9832 27.8517 23.4399 27.5626C23.9902 27.2117 24.2753 26.5657 24.1637 25.9216C24.052 25.2796 23.5655 24.7652 22.9294 24.6216ZM19.5298 40.4115C15.1472 39.4784 11.4403 36.5733 9.48228 32.5416C7.52628 28.5099 7.53822 23.8023 9.51419 19.7806C11.4902 15.7589 15.2107 12.8738 19.5995 11.9606C23.9861 11.0454 28.55 12.2079 31.9674 15.107H47.5956C49.4699 15.111 50.9892 16.6304 50.9952 18.5046V20.8155C50.9912 22.4545 49.8208 23.8602 48.2077 24.1593V33.2697H51.6114C52.9174 33.2737 53.9741 34.3324 53.9761 35.6364V44.952C53.9721 46.567 52.6661 47.8731 51.053 47.877H50.1538V48.5589V48.5569C50.1498 49.5459 49.3483 50.3455 48.3613 50.3455H25.1424C24.1534 50.3455 23.3519 49.5459 23.3499 48.5569V47.877H22.4526C20.8395 47.873 19.5335 46.567 19.5295 44.952L19.5298 40.4115ZM29.9479 15.107C26.6619 12.9237 22.5781 12.3115 18.7978 13.4301C15.0174 14.5507 11.9268 17.2883 10.3597 20.907C8.79253 24.5259 8.91018 28.6535 10.6788 32.1765C12.4494 35.7017 15.6914 38.2579 19.5298 39.1614V38.0966C16.1741 37.2373 13.3387 35.0001 11.7195 31.9377C10.1025 28.875 9.85123 25.2718 11.0316 22.0157C12.212 18.7577 14.7104 16.1518 17.9144 14.8359C21.1186 13.5199 24.7298 13.6176 27.8578 15.1071L29.9479 15.107ZM40.8065 25.9896H41.1135V24.213H32.3921V25.9876H32.6992V25.9896C33.0382 25.9896 33.3113 26.2627 33.3113 26.6017V28.5896C33.3113 28.9266 33.0382 29.2017 32.6992 29.2017H32.3921V29.5706C33.1758 29.7899 33.9873 29.8896 34.8008 29.8677V28.7571C34.8008 28.4181 35.076 28.143 35.4149 28.143H38.0927C38.4317 28.143 38.7049 28.4181 38.7049 28.7571V29.8697V29.8677C39.5184 29.8896 40.3299 29.7899 41.1135 29.5706V29.2017H40.8065H40.8085C40.645 29.2017 40.4894 29.1379 40.3738 29.0243C40.2581 28.9086 40.1943 28.7511 40.1963 28.5896V26.6017C40.1943 26.4382 40.2581 26.2827 40.3738 26.167C40.4894 26.0514 40.645 25.9876 40.8085 25.9876L40.8065 25.9896ZM42.3378 25.9896H43.5541V16.329H42.3358L42.3378 25.9896ZM44.7743 25.9896C45.0973 25.9896 45.4203 25.9477 45.6177 26.3046C46.0524 25.6586 46.3913 24.9547 46.6267 24.213H44.7703L44.7743 25.9896ZM45.6955 28.155V28.5876C45.6955 28.9266 45.4204 29.2017 45.0834 29.2017H44.7743V32.5037H44.7723C44.7743 32.6532 44.7185 32.7968 44.6208 32.9065L43.4424 34.4437C43.3268 34.5933 43.1493 34.679 42.9599 34.681C42.7724 34.683 42.595 34.5973 42.4754 34.4517L41.2431 32.8825C41.1594 32.7749 41.1135 32.6413 41.1155 32.5037V30.8288C40.3259 31.0202 39.5164 31.108 38.7068 31.09V32.2046V32.2026C38.7068 32.5416 38.4317 32.8147 38.0927 32.8147H35.4129C35.0739 32.8147 34.8008 32.5416 34.8008 32.2026V31.09C33.9893 31.108 33.1797 31.0202 32.3921 30.8288V32.5017C32.3921 32.6512 32.3383 32.7948 32.2386 32.9064L31.0602 34.4437C30.9445 34.5913 30.7671 34.679 30.5797 34.681C30.3902 34.681 30.2128 34.5973 30.0951 34.4517L28.8629 32.8805C28.7791 32.7729 28.7333 32.6393 28.7333 32.5017H28.7313V29.1997H28.4242C28.0872 29.1997 27.8121 28.9266 27.8121 28.5876V28.1549C27.3156 27.6265 26.8829 27.0443 26.5201 26.4183V37.0559C26.5201 37.1177 26.5181 37.1914 26.5101 37.2772V37.2752C26.5181 37.3131 26.5221 37.3529 26.5241 37.3928C26.5241 37.4845 26.5021 37.5743 26.4603 37.656C26.4204 37.9132 26.3586 38.1645 26.2808 38.4117C26.1831 38.8065 25.9498 39.1534 25.6208 39.3927C24.9927 39.8852 24.6099 40.627 24.574 41.4245V48.5569C24.576 48.87 24.8292 49.1232 25.1423 49.1252H48.3612C48.6742 49.1232 48.9255 48.87 48.9275 48.5569V41.4245C48.8916 40.627 48.5087 39.8853 47.8806 39.3927C47.5517 39.1535 47.3183 38.8065 47.2226 38.4117C47.1429 38.1645 47.0831 37.9132 47.0412 37.656C47.0013 37.5743 46.9794 37.4845 46.9794 37.3928C46.9794 37.3529 46.9834 37.3131 46.9913 37.2752C46.9834 37.1914 46.9794 37.1177 46.9794 37.0539V26.4204C46.6185 27.0465 46.1858 27.6287 45.6893 28.155L45.6955 28.155ZM43.5521 29.1998H42.3358V32.2923L42.9499 33.0799L43.5481 32.2984L43.5521 29.1998ZM44.4713 27.2119H41.4166V27.9775H44.4693L44.4713 27.2119ZM28.4261 25.9876H28.7332L28.7312 24.213H26.8788C27.1121 24.9567 27.4531 25.6606 27.8898 26.3067C27.9974 26.1113 28.2008 25.9916 28.4241 25.9916L28.4261 25.9876ZM29.9574 25.9876H31.1697V16.3291H29.9534L29.9574 25.9876ZM31.1737 29.1978H29.9534V32.2904L30.5695 33.078L31.1697 32.2964L31.1737 29.1978ZM32.0929 27.2099H29.0362V27.9756H32.0889L32.0929 27.2099ZM41.1134 16.3294H32.392V22.9911H41.1134V16.3294ZM28.7332 16.3294H25.9118C24.7115 16.3334 23.7405 17.3044 23.7345 18.5047V20.8156C23.7405 22.016 24.7115 22.987 25.9118 22.991H28.7312L28.7332 16.3294ZM25.2997 34.4939H21.896C21.2659 34.4959 20.7535 35.0063 20.7515 35.6364V36.7809H25.2997V34.4939ZM25.1282 38.0052L20.7516 38.0032V44.9518C20.7536 45.8909 21.5152 46.6506 22.4523 46.6526H23.3496V41.4247C23.3875 40.1904 24.0036 39.0439 25.0125 38.3301L25.1282 38.0052ZM52.7517 36.7809V35.6364C52.7497 35.0063 52.2372 34.4959 51.6072 34.4939H48.2035V36.7809H52.7517ZM50.1536 46.6528H51.0529H51.0509C51.99 46.6509 52.7477 45.8912 52.7517 44.9521V38.0034H48.3731L48.4887 38.3304H48.4867C49.4976 39.0442 50.1137 40.1907 50.1516 41.425L50.1536 46.6528ZM37.4804 29.3658H36.0248V31.591H37.4804V29.3658ZM29.8238 35.6268H43.6777C44.0146 35.6268 44.2898 35.902 44.2898 36.2409V40.147C44.2898 40.3105 44.224 40.466 44.1083 40.5817C43.9927 40.6973 43.8352 40.7611 43.6717 40.7591V46.7011C43.6717 47.0401 43.3965 47.3133 43.0576 47.3133H30.4441C30.1071 47.3133 29.832 47.0401 29.832 46.7011V40.7571C29.6685 40.7591 29.5109 40.6953 29.3953 40.5796C29.2797 40.464 29.2138 40.3084 29.2138 40.1449V36.2389C29.2138 35.8999 29.487 35.6268 29.826 35.6268L29.8238 35.6268ZM42.447 40.7573H31.0581V46.0888H42.4511L42.447 40.7573ZM43.0651 36.8512H30.4358V39.535H43.0671L43.0651 36.8512Z",
+}
diff --git a/src/imports/svg-rpecqp6li2.ts b/src/imports/svg-rpecqp6li2.ts
new file mode 100644
index 0000000..8259aa9
--- /dev/null
+++ b/src/imports/svg-rpecqp6li2.ts
@@ -0,0 +1,3 @@
+export default {
+p32a3dd80: "M21.8998 49.0952H44.7405V48.3769C44.7405 48.1786 44.6592 47.9982 44.5308 47.8698C44.4008 47.7398 44.2221 47.6602 44.0238 47.6602H22.6163C22.4197 47.6602 22.241 47.7414 22.111 47.8714L22.0866 47.8958C21.9712 48.0226 21.8997 48.1916 21.8997 48.3785V49.0968L21.8998 49.0952ZM17.4796 28.635H20.1984L20.0521 28.5375C19.5629 28.2206 19.0234 27.9639 18.4335 27.7672L14.5024 26.459C13.7207 26.199 13.1162 25.6416 12.7733 24.9558C12.4304 24.2716 12.3476 23.4542 12.6076 22.6725C12.7652 22.1996 13.0301 21.7917 13.3649 21.4667L13.4347 21.4017C13.048 21.1173 12.7392 20.7452 12.5295 20.3259C12.1867 19.6418 12.1038 18.8243 12.3638 18.0426C12.6141 17.2902 13.1341 16.7035 13.7792 16.3542C14.0896 16.1868 14.4276 16.0746 14.7803 16.0226L14.764 15.9901C14.3951 15.2524 14.361 14.4317 14.6015 13.7052C14.8437 12.9772 15.3637 12.3402 16.1015 11.9712C16.8393 11.6023 17.66 11.5666 18.3864 11.8087C19.1144 12.0509 19.7515 12.5709 20.1204 13.3087L20.135 13.3396C20.3869 13.0893 20.681 12.8862 20.9996 12.7399C21.661 12.4344 22.4361 12.3694 23.1821 12.6115L23.1983 12.6164C23.9816 12.8764 24.5861 13.4338 24.9307 14.1196C25.1403 14.5389 25.2525 15.0086 25.2492 15.488L25.3467 15.4701C25.8066 15.397 26.2893 15.4295 26.7589 15.5855L26.7719 15.5904C27.5487 15.852 28.15 16.4062 28.4896 17.0887C28.8325 17.7729 28.9154 18.5903 28.6554 19.372L27.3472 23.3015C27.0514 24.1904 26.9344 25.0712 26.9962 25.9358C27.0433 26.5988 27.1961 27.2554 27.4545 27.9022C29.4891 24.7755 31.6243 21.2782 33.7614 18.4035C34.0816 17.9826 34.5496 17.7421 35.0436 17.6803C35.4613 17.6283 35.9017 17.7079 36.2885 17.9159L36.6525 15.1207C36.7094 14.6884 36.9369 14.3179 37.2586 14.0709C37.5771 13.8255 37.9932 13.702 38.4238 13.7573C38.8561 13.8125 39.2055 14.0336 39.446 14.3456C39.6865 14.656 39.8133 15.0607 39.7954 15.4767L39.7369 16.832L40.3609 16.0178C40.6242 15.6798 41.0029 15.4783 41.401 15.4247C41.8008 15.371 42.2233 15.4702 42.5678 15.7334L42.5808 15.7432C42.9188 16.0065 43.122 16.3867 43.174 16.7833C43.2276 17.183 43.1285 17.6056 42.8652 17.9517L42.2493 18.7561L43.5445 18.345C43.9394 18.2182 44.3619 18.2361 44.7243 18.384C45.0916 18.5351 45.3955 18.8163 45.5629 19.216C45.7302 19.6174 45.7172 20.0513 45.5629 20.4251C45.4085 20.8005 45.1111 21.1174 44.7081 21.2848L42.1063 22.3671C42.4069 22.6872 42.5971 23.0919 42.6556 23.5079C42.7254 24.0003 42.6149 24.5123 42.2932 24.9315C41.2498 26.1764 40.1399 27.4082 39.0478 28.6351H49.1656C49.5101 28.6351 49.7896 28.9146 49.7896 29.2591V33.2065C49.7896 36.3072 48.8958 39.2098 47.3519 41.6685C46.1721 43.5471 44.612 45.1641 42.7807 46.4137H44.0287C44.5667 46.4137 45.0591 46.6347 45.4149 46.9906C45.7725 47.3481 45.9935 47.8405 45.9935 48.3784V49.7207C45.9935 50.0653 45.7139 50.3448 45.3694 50.3448H21.2807C20.9362 50.3448 20.6567 50.0653 20.6567 49.7207V48.3784C20.6567 47.86 20.8614 47.3855 21.1962 47.0328L21.2336 46.9906C21.5895 46.6347 22.0819 46.4136 22.6214 46.4136H23.8679C22.0364 45.1656 20.4747 43.547 19.2966 41.6701C17.7527 39.213 16.8589 36.3105 16.8589 33.2082V29.2608C16.8589 28.9163 17.1384 28.6368 17.4829 28.6368L17.4796 28.635ZM18.1036 32.5824H48.5384V29.8831H18.1036V32.5824ZM48.5255 33.8305H18.1165C18.227 36.4566 19.0298 38.9089 20.3461 41.0053C21.7909 43.3064 23.8547 45.1834 26.2974 46.399H40.3432C42.7858 45.1835 44.8496 43.3048 46.2945 41.0036C47.6108 38.9072 48.4136 36.4564 48.5241 33.8288L48.5255 33.8305ZM31.5092 26.0641C31.2362 25.8561 31.1842 25.4645 31.3922 25.1914C31.6002 24.9184 31.9918 24.8664 32.2649 25.0744L33.513 26.03C33.786 26.238 33.838 26.6296 33.63 26.9027C33.422 27.1757 33.0303 27.2277 32.7573 27.0197L31.5092 26.0641ZM28.4719 28.635H37.3806C38.5556 27.3236 40.4082 25.4417 41.302 24.1757C41.4093 24.0359 41.445 23.8555 41.4207 23.6784C41.3963 23.4964 41.3085 23.3209 41.1704 23.1908L40.6162 22.7488C40.5415 22.7114 40.4749 22.6594 40.4212 22.5944C39.1634 21.5983 37.8243 20.5598 36.534 19.6107C36.4397 19.5717 36.3585 19.5116 36.2951 19.4352L35.7653 19.0517C35.5963 18.9396 35.3915 18.8957 35.1981 18.9201C35.0226 18.9412 34.8617 19.0224 34.7561 19.1606L28.475 28.6364L28.4719 28.635ZM37.4393 18.717C38.598 19.5507 39.9696 20.5582 41.0584 21.4536L44.229 20.1357C44.3135 20.1015 44.3769 20.0333 44.4094 19.9553C44.4419 19.8757 44.4451 19.7814 44.4094 19.6969C44.3785 19.6205 44.3183 19.5669 44.2468 19.5376C44.1526 19.4986 44.034 19.497 43.9169 19.5344L40.7708 20.5306C40.5757 20.6037 40.3499 20.5793 40.1711 20.4428C39.8981 20.2348 39.8461 19.8431 40.0541 19.5701L41.871 17.1975C41.9262 17.1243 41.9473 17.0333 41.9376 16.9456C41.9278 16.8692 41.8905 16.7945 41.8287 16.7392L41.7897 16.7083C41.7198 16.6628 41.6386 16.6466 41.5589 16.6579C41.4826 16.6677 41.4078 16.7051 41.3542 16.7668L39.5211 19.159C39.4008 19.315 39.2107 19.4109 38.9994 19.4027C38.6565 19.3881 38.39 19.0972 38.4046 18.7543L38.5493 15.4229C38.5541 15.301 38.5216 15.1872 38.4583 15.106C38.4111 15.0442 38.3429 15.0003 38.2616 14.9906C38.1706 14.9792 38.0812 15.0068 38.0114 15.0605C37.9431 15.1125 37.8944 15.1921 37.883 15.2815L37.4345 18.7169L37.4393 18.717ZM36.9859 25.3522C36.7129 25.1442 36.6609 24.7525 36.8689 24.4795C37.0769 24.2064 37.4686 24.1545 37.7416 24.3625L38.4485 24.9036C38.7215 25.1117 38.7735 25.5033 38.5655 25.7763C38.3575 26.0494 37.9659 26.1014 37.6928 25.8933L36.9859 25.3522ZM35.0537 21.3512C34.7807 21.1432 34.7287 20.7515 34.9367 20.4785C35.1447 20.2054 35.5363 20.1535 35.8094 20.3615L36.5163 20.9026C36.7893 21.1107 36.8413 21.5023 36.6333 21.7753C36.4253 22.0484 36.0336 22.1004 35.7606 21.8923L35.0537 21.3512ZM23.1142 24.5851L25.2268 18.2341C25.334 17.909 25.6867 17.7319 26.0117 17.8392C26.3367 17.9464 26.5138 18.2991 26.4066 18.6241L23.8991 26.1579L25.1407 28.6362H26.418C26.041 27.7797 25.8216 26.9071 25.7582 26.0246C25.6851 25.0008 25.8232 23.9608 26.171 22.9126L27.4808 18.975C27.6303 18.5199 27.5799 18.0454 27.3817 17.6456C27.1802 17.2442 26.8275 16.9192 26.3725 16.7681L26.3627 16.7648C26.0914 16.6754 25.8102 16.6576 25.5437 16.6998C25.2658 16.7453 25.0009 16.8558 24.7734 17.0248C24.4971 17.2296 24.1071 17.1711 23.9039 16.8948C23.7739 16.7193 23.7496 16.4983 23.8211 16.3065L23.9348 15.9652C24.0681 15.5216 24.0161 15.0633 23.8227 14.6749C23.6293 14.2881 23.2913 13.9696 22.8574 13.812L22.7648 13.7811C22.3422 13.6543 21.9035 13.695 21.5264 13.8689C21.1348 14.0492 20.8081 14.3743 20.6359 14.7984C20.5075 15.1169 20.1435 15.2713 19.8233 15.143C19.6624 15.0779 19.5422 14.9512 19.4804 14.8017L19.0108 13.864C18.7963 13.4333 18.4225 13.1295 17.9983 12.9881C17.571 12.8467 17.0915 12.8662 16.6592 13.0807C16.2286 13.2952 15.9247 13.669 15.7833 14.0931C15.6419 14.5189 15.6614 14.9999 15.8759 15.4306L16.3667 16.4105C16.5195 16.7177 16.396 17.0914 16.0888 17.2442C15.9491 17.3141 15.7947 17.3254 15.6533 17.2897C15.2113 17.1743 14.7546 17.2409 14.3743 17.4457C13.9957 17.6521 13.6902 17.9934 13.5455 18.4289C13.3928 18.8872 13.4415 19.365 13.643 19.7663C13.8446 20.1677 14.1972 20.4928 14.6539 20.6455L14.9724 20.7512C15.2974 20.86 15.4745 21.2127 15.3657 21.5393C15.299 21.7392 15.1414 21.8822 14.9529 21.9391C14.6831 22.0203 14.4345 22.165 14.2329 22.36C14.0347 22.5518 13.8819 22.7874 13.7909 23.0604C13.6382 23.5187 13.6869 23.9965 13.8884 24.3978C14.0883 24.7992 14.4426 25.1243 14.9009 25.277L18.8271 26.5852C19.5227 26.816 20.1597 27.1199 20.7333 27.492C21.2387 27.8203 21.697 28.2006 22.1066 28.6329H23.7511L22.7891 26.7104L15.2582 24.2045C14.9332 24.0972 14.756 23.7446 14.8633 23.4196C14.9705 23.0945 15.3232 22.9174 15.6482 23.0247L22.0022 25.1389L20.0569 21.2533L15.0143 19.5746C14.6892 19.4673 14.5121 19.1146 14.6194 18.7896C14.7266 18.4646 15.0793 18.2875 15.4043 18.3947L19.2704 19.6818L16.8896 14.9267C16.7369 14.6195 16.8604 14.2458 17.1675 14.093C17.4747 13.9402 17.8484 14.0637 18.0012 14.3709L20.382 19.1261L21.6674 15.2632C21.7747 14.9382 22.1273 14.761 22.4523 14.8683C22.7773 14.9755 22.9545 15.3282 22.8472 15.6532L21.1685 20.6975L23.1142 24.5851Z",
+}
diff --git a/src/imports/svg-s8leuc872s.ts b/src/imports/svg-s8leuc872s.ts
new file mode 100644
index 0000000..07fe677
--- /dev/null
+++ b/src/imports/svg-s8leuc872s.ts
@@ -0,0 +1,3 @@
+export default {
+pc549500: "M47.3183 37.6567C48.1247 37.6565 48.7822 36.9989 48.7824 36.1924C48.7822 35.3861 48.1246 34.7287 47.3183 34.7285H38.1503V33.096C39.028 32.9497 39.8138 32.2795 39.8464 31.0841V28.9321C39.8464 28.7275 39.6804 28.5616 39.4758 28.5616H36.0837C35.879 28.5616 35.7131 28.7275 35.7131 28.9321C35.7131 28.9321 35.7131 31.0841 35.7131 31.0841C35.7456 32.2796 36.5313 32.9498 37.4091 33.096V34.7285H32.3914C31.585 34.7287 30.9275 35.3861 30.9273 36.1926C30.9275 36.9989 31.5851 37.6565 32.3914 37.6567H39.4843V40.6189H28.2725C28.2725 38.3307 28.2725 25.8817 28.2725 23.4347C29.0275 23.53 29.7794 23.6829 30.5291 23.9024C30.5974 23.9777 30.6941 24.027 30.8024 24.0268C31.3557 23.9012 31.9082 23.8111 32.4602 23.7489C34.2511 23.6174 36.0532 23.6859 37.946 24.1209C37.9602 24.124 37.9736 24.1188 37.9877 24.1202C38.0246 24.1235 38.0609 24.1256 38.0959 24.1182C38.1151 24.1141 38.1313 24.1051 38.1496 24.098C38.1796 24.0866 38.2081 24.0743 38.2341 24.0556C38.2499 24.0442 38.2621 24.0307 38.2759 24.0171C38.2976 23.9957 38.3168 23.9736 38.3329 23.947C38.3449 23.9275 38.3529 23.9075 38.3611 23.8858C38.3665 23.8715 38.3764 23.8601 38.38 23.8448C38.3803 23.832 38.3797 23.8193 38.38 23.8065C38.382 23.7916 38.3902 23.7791 38.3902 23.7638C38.4009 23.0165 38.3393 22.2855 38.218 21.5743C38.208 21.5147 38.1996 21.4546 38.1886 21.3953C38.1728 21.3101 38.1537 21.2262 38.136 21.1416C38.1116 21.0234 38.0877 20.905 38.0597 20.788C38.0527 20.7591 38.0444 20.7307 38.0372 20.7018C37.5717 18.8202 36.6559 17.1109 35.4072 15.6978C35.3886 15.6768 35.3688 15.6568 35.3501 15.6359C35.2431 15.5164 35.1348 15.398 35.0231 15.2829C35.0202 15.2799 35.0174 15.2767 35.0145 15.2737C35.0055 15.2641 34.9953 15.2562 34.9863 15.2466C34.8211 15.0781 34.6501 14.9155 34.4753 14.7569C33.6774 14.0136 32.7849 13.4051 31.8266 12.932C31.7399 12.8882 31.6512 12.8479 31.5633 12.8062C31.3748 12.719 31.187 12.6312 30.9943 12.5543C29.6431 11.9976 28.1692 11.6783 26.6229 11.6572C25.0673 11.635 23.5785 11.9146 22.2079 12.4365C22.0777 12.4845 21.9499 12.538 21.8214 12.5907C21.6694 12.6547 21.5185 12.7206 21.3699 12.7907C20.4096 13.233 19.5102 13.8095 18.6992 14.5204C17.63 15.4349 16.7221 16.5333 16.0295 17.7706C16.0181 17.791 16.0079 17.8122 15.9966 17.8327C15.9152 17.9802 15.8355 18.1289 15.7602 18.2802C15.7269 18.3472 15.6968 18.4162 15.6646 18.484C15.6143 18.59 15.5628 18.6953 15.5155 18.8031C15.4653 18.9175 15.4195 19.0343 15.3728 19.1506C15.3477 19.2133 15.3204 19.2748 15.2963 19.3379C15.2385 19.4891 15.1854 19.6426 15.1338 19.7966C15.1237 19.8268 15.1121 19.8563 15.1022 19.8866C15.048 20.0522 14.9988 20.2199 14.9519 20.3886C14.9461 20.4092 14.9394 20.4293 14.9337 20.45C14.8892 20.6135 14.8496 20.7789 14.812 20.9451C14.8057 20.9729 14.7981 21.0001 14.7919 21.0279C14.7608 21.1704 14.7346 21.3146 14.7087 21.459C14.6988 21.5137 14.6869 21.5677 14.6778 21.6227C14.6608 21.7254 14.6481 21.8295 14.6338 21.9331C14.6197 22.0343 14.604 22.135 14.5925 22.237C14.5872 22.2842 14.5843 22.3321 14.5796 22.3794C14.5448 22.7238 14.5214 23.0718 14.5164 23.4244C14.5163 23.4314 14.5203 23.4371 14.5205 23.4441C14.5204 23.4559 14.5194 23.4676 14.5194 23.4794C14.5223 23.5011 14.5337 23.5187 14.5402 23.5389C14.5466 23.5586 14.5507 23.5783 14.5603 23.5964C14.576 23.6269 14.5973 23.6519 14.6204 23.6765C14.6308 23.6876 14.6386 23.7002 14.6503 23.7099C14.681 23.7356 14.7162 23.7535 14.7537 23.7682C14.7633 23.772 14.7711 23.7786 14.7811 23.7816C14.8302 23.7962 14.8823 23.8024 14.9363 23.795C16.5823 23.5676 18.2137 23.5084 19.8485 23.6286C20.4393 23.6823 21.0243 23.757 21.6055 23.8295C21.7505 23.852 21.8953 23.8713 22.0404 23.8968C22.0701 23.9024 22.0975 23.894 22.1262 23.8922C22.1506 23.8949 22.1753 23.8984 22.1997 23.901C23.2604 23.6168 24.307 23.4356 25.3442 23.3581V40.6189H23.5837L18.5584 31.9148C18.1629 31.2323 17.5274 30.7739 16.8203 30.5854C14.4287 29.9048 12.3183 32.6163 13.6121 34.7798L19.4645 44.9162C19.7238 45.3641 20.0879 45.7157 20.5083 45.9582C20.8346 46.1506 21.1956 46.2638 21.567 46.316V49.0964C21.5665 49.7827 22.1301 50.3433 22.8143 50.344H24.9948C25.6787 50.3434 26.2431 49.7832 26.2421 49.0964V46.3485C30.3333 46.3485 36.4504 46.3485 40.5416 46.3485V49.0964C40.5418 49.7835 41.1021 50.3437 41.7891 50.344H43.9695C44.6565 50.3437 45.2168 49.7835 45.2169 49.0964V46.3171C48.6297 45.8612 48.4996 40.7333 44.8463 40.6189H40.2256V37.6567H47.3183ZM36.4543 31.0841V29.3028H39.1051V31.0841C39.1052 31.8122 38.5078 32.4096 37.7797 32.4096C37.0517 32.4096 36.4543 31.8122 36.4543 31.0841ZM22.4887 23.0723C22.5758 20.1119 23.0772 17.4482 23.8394 15.5052C24.5986 13.5705 25.5837 12.3809 26.6142 12.3956C27.644 12.4102 28.5944 13.6275 29.2979 15.5828C29.9979 17.5288 30.421 20.1777 30.4306 23.1115C29.2056 22.7791 27.9404 22.5901 26.6273 22.5761C25.2944 22.5619 23.9146 22.7285 22.4887 23.0723ZM20.3714 22.9289C20.1728 22.9104 19.9741 22.8949 19.7752 22.8815C19.6545 22.8731 19.5338 22.8646 19.413 22.858C19.3168 22.8531 19.2207 22.8499 19.1245 22.8462C18.9214 22.8378 18.7182 22.8309 18.5147 22.828C18.5075 22.8279 18.5004 22.8281 18.4933 22.828C17.4225 22.8139 16.3463 22.8721 15.269 23.0052C15.285 22.6987 15.3163 22.3963 15.3564 22.0967C15.3618 22.0565 15.3659 22.0159 15.3717 21.9759C15.4128 21.692 15.466 21.412 15.528 21.1352C15.5391 21.0856 15.5502 21.036 15.5619 20.9867C15.6271 20.7134 15.7019 20.4438 15.7867 20.1786C15.8008 20.1345 15.816 20.0909 15.8306 20.047C15.9211 19.776 16.0195 19.5087 16.1297 19.2473C16.1398 19.2233 16.1511 19.1998 16.1615 19.1758C16.2756 18.9102 16.399 18.6495 16.5326 18.395C16.5393 18.3822 16.5454 18.369 16.5521 18.3562C16.6865 18.1026 16.8325 17.8561 16.9854 17.6145C17.0074 17.5798 17.0286 17.5445 17.051 17.51C17.2002 17.28 17.3583 17.0564 17.5236 16.8383C17.5537 16.7985 17.5841 16.7589 17.6148 16.7195C17.7814 16.5055 17.9551 16.2974 18.1365 16.0962C18.168 16.0614 18.2005 16.0275 18.2323 15.993C18.4207 15.7893 18.615 15.591 18.818 15.4018C18.8384 15.3828 18.8598 15.3649 18.8804 15.3461C19.0807 15.1621 19.2879 14.9854 19.5014 14.8161C19.5251 14.7973 19.548 14.7775 19.5718 14.7589C19.7902 14.5886 20.0166 14.4279 20.2476 14.2739C20.2874 14.2473 20.3268 14.2202 20.3668 14.1942C20.5953 14.046 20.8299 13.9064 21.0696 13.7748C21.1128 13.7511 21.1563 13.7277 21.1998 13.7045C21.4451 13.574 21.6951 13.4514 21.951 13.339C21.9853 13.3238 22.0202 13.3098 22.0547 13.295C22.325 13.1796 22.5995 13.0721 22.8802 12.9777C22.8884 12.9749 22.8966 12.9727 22.9047 12.97C23.1964 12.8726 23.4935 12.7871 23.7954 12.7135C23.8067 12.7108 23.8177 12.7075 23.829 12.7047C24.1196 12.6349 24.4156 12.5786 24.7147 12.5317C24.7369 12.5282 24.7589 12.5245 24.7811 12.5211C24.1611 13.1408 23.6075 14.0707 23.1503 15.236C22.3558 17.261 21.8296 20.0275 21.7441 23.0967C21.3082 23.0287 20.8711 22.9773 20.4334 22.9352C20.4127 22.9331 20.392 22.9309 20.3714 22.9289ZM28.6343 12.6141C28.7839 12.6438 28.9315 12.6786 29.0788 12.7141C29.2662 12.7592 29.4521 12.8077 29.6356 12.8621C29.783 12.9057 29.9288 12.9522 30.0734 13.0016C30.2541 13.0634 30.4322 13.1303 30.6085 13.2009C30.7466 13.2561 30.8844 13.3119 31.0196 13.3723C31.1994 13.4528 31.3751 13.5403 31.5497 13.6298C31.6735 13.6933 31.7985 13.7549 31.9195 13.8228C32.1055 13.927 32.2855 14.0403 32.4647 14.1547C32.5666 14.2197 32.6712 14.2809 32.7708 14.349C32.9875 14.4974 33.1961 14.6564 33.4014 14.8193C33.4569 14.8632 33.5157 14.9027 33.5703 14.9477C33.8291 15.161 34.0781 15.3857 34.3166 15.621C34.3677 15.6713 34.4135 15.7264 34.4635 15.7776C34.6457 15.9643 34.8244 16.1544 34.9932 16.3534C35.0697 16.4436 35.1398 16.539 35.2134 16.6315C35.347 16.7994 35.4793 16.9683 35.6032 17.1438C35.6801 17.2527 35.7515 17.3656 35.8246 17.4773C35.9343 17.6452 36.0419 17.8146 36.1428 17.9885C36.2129 18.1094 36.279 18.2328 36.3447 18.3565C36.4369 18.5303 36.5251 18.7064 36.6082 18.8854C36.668 19.0141 36.7258 19.1437 36.7807 19.2749C36.8577 19.4586 36.9283 19.6454 36.9955 19.8339C37.0425 19.9656 37.0899 20.0971 37.1321 20.231C37.1951 20.4311 37.2489 20.6351 37.3008 20.8399C37.333 20.9673 37.3686 21.0934 37.3964 21.2224C37.4467 21.4554 37.4845 21.6928 37.52 21.9309C37.5358 22.0367 37.5575 22.1406 37.5703 22.2473C37.6118 22.5927 37.6392 22.9424 37.6484 23.2966C35.9878 22.9417 34.3216 22.8225 32.6544 22.9829C32.1575 23.0182 31.6641 23.0776 31.174 23.1577C31.169 20.1183 30.7238 17.3657 29.993 15.3338C29.5714 14.1621 29.0477 13.2211 28.4495 12.5839C28.5107 12.595 28.5733 12.6021 28.6343 12.6141ZM26.0854 23.3271C26.5689 23.3147 27.0513 23.3173 27.5313 23.3526V40.6189H26.0854C26.0854 40.6189 26.0854 25.8228 26.0854 23.3271ZM25.5009 49.0964C25.5001 49.3741 25.2741 49.6036 24.9948 49.6027H22.8143C22.6748 49.6027 22.548 49.5461 22.4573 49.4552V49.4537C22.3654 49.3618 22.3083 49.2352 22.3083 49.0964V46.3485C22.8629 46.3485 24.0067 46.3485 25.5009 46.3485V49.0964ZM44.4756 49.0964C44.4758 49.3739 44.2469 49.6027 43.9695 49.6027H41.7891C41.6504 49.6027 41.5238 49.5455 41.4319 49.4537C41.34 49.3618 41.2829 49.2352 41.2829 49.0964V46.3485H44.4756V49.0964ZM46.9699 43.4837C46.9693 44.6592 46.0218 45.6067 44.8463 45.6072H40.9123H25.8715H22.0012C21.6085 45.6043 21.2173 45.5199 20.8761 45.3184C20.5667 45.1399 20.2975 44.8792 20.1043 44.5455L14.252 34.4092C13.959 33.9031 13.8989 33.3253 14.0386 32.8007C14.4597 31.0302 17.0041 30.6598 17.9059 32.2639L23.0509 41.1748C23.1193 41.2931 23.2434 41.359 23.3708 41.3602H25.7148H27.9019H44.8463C46.0218 41.3607 46.9693 42.3081 46.9699 43.4837ZM31.6686 36.1924C31.6685 35.7957 31.9947 35.4697 32.3914 35.4697H47.3183C47.7152 35.4697 48.0412 35.7956 48.0412 36.1926C48.0412 36.5894 47.7152 36.9155 47.3183 36.9155H32.3914C31.9945 36.9155 31.6685 36.5894 31.6686 36.1924Z",
+}
diff --git a/src/imports/svg-u2edxj8dia.ts b/src/imports/svg-u2edxj8dia.ts
new file mode 100644
index 0000000..d73e83d
--- /dev/null
+++ b/src/imports/svg-u2edxj8dia.ts
@@ -0,0 +1,9 @@
+export default {
+p11d0e900: "M0.884818 27.4327C1.10144 27.7782 1.3664 28.0915 1.67254 28.3636C1.6994 28.1094 1.74773 27.8588 1.81576 27.6117C1.88737 27.2949 1.98405 26.9834 2.1022 26.6808C1.60091 25.8931 1.81576 24.819 2.20962 24.0671C2.66792 23.1702 2.58556 22.0907 1.99479 21.2743C1.37535 20.2825 1.66181 18.9792 2.63925 18.3384C4.03564 17.3716 5.3604 17.6223 6.57779 19.1261C6.73175 19.3391 6.86243 19.5665 6.97164 19.8064V19.878C7.58031 21.1312 10.0509 21.525 11.6619 21.6682C11.6279 21.1902 11.6386 20.7104 11.6977 20.236C10.0506 20.0928 8.47529 19.6989 8.22464 19.2335V19.1619C8.07963 18.8343 7.89882 18.521 7.68756 18.231C6.04052 16.1543 3.85645 15.7246 1.85157 17.121C0.884834 17.7297 -0.583147 19.5199 0.705822 21.9547L0.777431 22.0621C1.06387 22.447 1.10504 22.9608 0.884847 23.3869C0.204547 24.8191 0.168724 26.3228 0.884818 27.4327Z",
+p15b7cd00: "M41.0576 28.8649C41.0576 28.9007 39.8761 31.8725 35.0424 33.6986C34.7023 33.8096 34.4964 34.1533 34.5591 34.506C34.6217 34.8587 34.935 35.1093 35.2931 35.095H35.5437C40.986 33.0184 42.3467 29.5812 42.4182 29.4377C42.5202 29.2551 42.5381 29.0385 42.4665 28.8434C42.3949 28.6465 42.241 28.4925 42.0458 28.4191C41.8525 28.3439 41.6341 28.36 41.4515 28.4585C41.2689 28.5587 41.1382 28.7324 41.0934 28.9365L41.0576 28.8649Z",
+p17868d00: "M9.19108 25.2484H9.11947C8.79544 25.1177 8.46066 25.0229 8.11694 24.962C5.5748 24.5323 3.74879 25.6781 3.17601 27.9696C2.88957 29.0437 2.99699 31.2636 5.5033 32.1229H5.64652C6.08155 32.1945 6.43425 32.5186 6.54163 32.9464C6.93548 34.4144 7.90223 35.4886 9.11956 35.8108C9.47045 35.9039 9.83029 35.9522 10.1937 35.954C10.815 35.9576 11.4236 35.784 11.9481 35.4527C13.3803 34.5576 13.81 32.8032 13.9174 32.3019C13.9998 31.8526 14.0248 31.3961 13.989 30.9413C13.9711 30.3702 14.2074 29.8189 14.6335 29.4376L16.8176 27.3251C17.8398 27.9552 19.0178 28.29 20.219 28.2918C21.2788 28.2882 22.3225 28.0304 23.2624 27.5399L23.9427 27.1819C24.981 26.609 25.6971 26.2151 27.2725 26.1793C28.0173 26.1614 28.7602 26.2223 29.4924 26.3584C31.3901 26.6806 36.152 26.9312 39.6969 22.4915C45.0677 15.7242 43.5638 9.06465 40.3056 5.05453C38.0195 2.2886 34.7148 0.559249 31.1396 0.256588C27.3085 -0.0656522 20.4342 0.722036 17.6413 9.74477V9.85218C17.4265 11.3202 16.5313 15.366 15.135 16.5837C14.7447 16.9131 14.4063 17.2998 14.1324 17.7294C13.1442 19.2708 12.8703 21.1631 13.3805 22.9211L13.2731 22.9927C11.6261 24.3533 9.72812 25.4632 9.19108 25.2484ZM15.3135 18.4454C15.5104 18.1375 15.7521 17.86 16.0296 17.6219C17.9989 15.8675 18.8582 10.8904 19.0014 10.103C21.4003 2.47647 26.8425 1.33072 30.996 1.68911C34.197 1.95406 37.1547 3.50439 39.1955 5.98567C42.0956 9.53034 43.4204 15.5096 38.5868 21.6325C37.5574 22.9412 36.1879 23.9437 34.6286 24.5309C33.0711 25.118 31.3811 25.2667 29.7431 24.9623C28.9053 24.8137 28.0531 24.7529 27.201 24.7833C25.8064 24.8173 24.4458 25.2255 23.2624 25.9648L22.5821 26.3229C20.4482 27.44 17.8254 26.9172 16.2805 25.0697L15.8867 24.5684L15.7076 24.3178C13.7384 21.8473 14.6335 19.5918 15.3138 18.446L15.3135 18.4454ZM14.5974 25.1769L14.7048 25.356C14.8588 25.5815 15.0253 25.7964 15.2061 26.0004L15.6716 26.5017L13.6307 28.471C12.929 29.1405 12.5512 30.0804 12.5924 31.0489C12.6228 31.3837 12.6121 31.7202 12.5566 32.0514C12.4134 32.8033 11.9837 33.8059 11.2318 34.2713C10.7127 34.5775 10.0843 34.6437 9.5132 34.4504C8.68968 34.2355 8.1526 33.3404 7.93779 32.5885C7.68895 31.6308 6.90662 30.9039 5.93273 30.7267C4.21411 30.118 4.50054 28.6142 4.57213 28.292C4.96598 26.6808 6.0759 26.0363 7.90195 26.3227L8.61805 26.5375H8.68966C10.2293 27.1104 12.8788 25.0695 13.9528 24.1744C14.1425 24.5253 14.3575 24.8601 14.5974 25.1769Z",
+p18f61d00: "M32.4646 34.2716C32.0529 34.4291 31.6017 34.4542 31.1757 34.3432C30.7997 34.2143 30.3915 34.4148 30.2626 34.7908C30.1337 35.1667 30.3342 35.5749 30.7102 35.7038C31.5122 35.9526 32.3769 35.9007 33.1449 35.5606C33.5012 35.3833 33.6444 34.9501 33.4671 34.5938C33.2899 34.2376 32.8567 34.0944 32.5004 34.2716L32.4646 34.2716Z",
+p1cd27a80: "M36.0448 21.489C36.3527 21.7343 36.7985 21.6859 37.0474 21.3816C40.6636 16.8344 40.0907 13.1464 40.0549 13.0034C40.046 12.7957 39.9493 12.6042 39.7882 12.4735C39.6271 12.3446 39.4158 12.2909 39.2135 12.3267C39.0095 12.3643 38.8304 12.486 38.7248 12.6651C38.6192 12.8423 38.5941 13.0571 38.6586 13.2541C38.6586 13.2899 39.1599 16.4407 35.9374 20.4865C35.6922 20.7944 35.7405 21.2401 36.0448 21.489Z",
+p1d2c1e00: "M45.9985 25.5706C46.1471 22.7689 45.4489 19.9848 43.9934 17.5861C43.8019 18.184 43.5745 18.7694 43.3131 19.3405C44.2494 21.2525 44.6809 23.3721 44.5663 25.4991C44.2799 30.2971 41.1291 35.9539 33.1803 37.2788C28.1674 38.1381 25.1601 35.0589 24.1216 33.6625C23.5952 32.9572 22.9955 32.3091 22.3314 31.7291C20.8276 30.4401 19.7534 30.1895 18.5002 29.903L17.7484 29.724C17.4154 29.6363 17.0913 29.5163 16.7816 29.366L15.7075 30.4043C16.2338 30.7176 16.7995 30.9592 17.3903 31.1204L18.178 31.3352C19.3953 31.6216 20.1831 31.8365 21.4004 32.8748C21.984 33.3904 22.5121 33.9668 22.9758 34.5934C24.05 35.9898 26.8427 38.89 31.4617 38.89C32.1098 38.8846 32.756 38.8238 33.3952 38.711C42.239 37.2072 45.7121 30.9414 45.9985 25.5706Z",
+p1df26700: "M32.6077 23.6372C33.4473 23.6103 34.2493 23.2792 34.8634 22.7063C35.0693 22.4145 35.0263 22.0135 34.7649 21.77C34.5035 21.5265 34.1025 21.514 33.825 21.7396C33.4831 22.0314 33.057 22.2068 32.6077 22.2408C32.2121 22.2408 31.8916 22.5613 31.8916 22.9569C31.8916 23.3526 32.2121 23.673 32.6077 23.673L32.6077 23.6372Z",
+}
diff --git a/src/imports/svg-wjtpqfkmjn.ts b/src/imports/svg-wjtpqfkmjn.ts
new file mode 100644
index 0000000..c21ae0f
--- /dev/null
+++ b/src/imports/svg-wjtpqfkmjn.ts
@@ -0,0 +1,3 @@
+export default {
+p1bfdb500: "M31.4931 41.9801C31.6422 41.8938 31.8195 41.8702 31.986 41.9146C32.1525 41.959 32.2946 42.0676 32.381 42.2167C32.5839 42.5732 32.8776 42.8696 33.2322 43.0757C33.5868 43.2819 33.9897 43.3905 34.3999 43.3905C34.8101 43.3905 35.213 43.2819 35.5676 43.0757C35.9222 42.8696 36.2159 42.5732 36.4188 42.2167C36.4594 42.139 36.5154 42.0704 36.5832 42.0149C36.6511 41.9594 36.7295 41.9182 36.8137 41.8937C36.8979 41.8693 36.9861 41.8622 37.0731 41.8727C37.1602 41.8833 37.2442 41.9114 37.3201 41.9552C37.396 41.9991 37.4622 42.0579 37.5148 42.128C37.5674 42.1982 37.6052 42.2782 37.6261 42.3634C37.647 42.4485 37.6504 42.537 37.6361 42.6235C37.6219 42.71 37.5903 42.7927 37.5433 42.8667C37.2261 43.4202 36.7684 43.8801 36.2164 44.1999C35.6645 44.5197 35.0378 44.6882 34.3999 44.6882C33.762 44.6882 33.1354 44.5197 32.5834 44.1999C32.0315 43.8801 31.5737 43.4202 31.2565 42.8667C31.1706 42.7177 31.1473 42.5407 31.1916 42.3745C31.236 42.2083 31.3444 42.0665 31.4931 41.9801ZM85.4899 75.0716C85.5276 75.8624 85.4043 76.6526 85.1276 77.3943C84.851 78.136 84.4266 78.8139 83.8803 79.3869C83.3339 79.9598 82.677 80.4159 81.9493 80.7275C81.2215 81.0392 80.4381 81.1998 79.6464 81.1998H20.3599C19.5677 81.2007 18.7836 81.0407 18.055 80.7294C17.3265 80.4182 16.6688 79.9623 16.1218 79.3892C15.5748 78.8162 15.1498 78.138 14.8728 77.3958C14.5957 76.6536 14.4722 75.8629 14.5099 75.0716L15.2665 59.1817C15.3579 57.327 16.0563 55.5538 17.2543 54.135C18.4523 52.7162 20.0834 51.7305 21.8965 51.3297L29.1999 49.719V47.2932C27.6209 46.3815 26.3092 45.0708 25.3966 43.4923C24.4839 41.9138 24.0022 40.1231 23.9999 38.2998C23.5006 38.3023 23.0111 38.1602 22.5907 37.8907C22.1704 37.6212 21.8369 37.2357 21.6308 36.7809C21.4246 36.3261 21.3545 35.8213 21.4288 35.3275C21.5032 34.8337 21.7189 34.372 22.0499 33.9981V27.2498C22.0527 25.0096 22.9438 22.8619 24.5279 21.2778C26.112 19.6937 28.2597 18.8026 30.4999 18.7998H35.6999C36.3565 18.7999 37.0053 18.9431 37.6009 19.2194C38.1966 19.4958 38.7248 19.8987 39.1488 20.4001C39.4493 20.729 39.8177 20.9888 40.2285 21.1614C40.6392 21.334 41.0825 21.4153 41.5278 21.3998H42.1999C42.7974 21.3998 43.3891 21.5175 43.9411 21.7462C44.4932 21.9748 44.9947 22.31 45.4172 22.7325C45.8398 23.155 46.1749 23.6566 46.4036 24.2086C46.6322 24.7606 46.7499 25.3523 46.7499 25.9498V33.9981C47.0809 34.372 47.2966 34.8337 47.371 35.3275C47.4454 35.8213 47.3752 36.3261 47.169 36.7809C46.9629 37.2357 46.6295 37.6212 46.2091 37.8907C45.7887 38.1602 45.2993 38.3023 44.7999 38.2998C44.7976 40.1231 44.3159 41.9138 43.4033 43.4923C42.4906 45.0708 41.179 46.3815 39.5999 47.2932V48.4047C42.1596 48.5646 44.578 49.6333 46.4197 51.4181C46.4916 51.3719 46.5719 51.3403 46.656 51.3251C46.7401 51.3099 46.8263 51.3115 46.9098 51.3297C48.0258 51.5831 49.079 52.0593 50.0064 52.7298C50.9293 52.0607 51.9783 51.5857 53.09 51.3336L53.844 51.1685C54.2821 50.7738 54.7516 50.4155 55.248 50.0973C48.5179 47.9575 47.1477 44.0926 47.0918 43.9197C47.0605 43.8256 47.0512 43.7257 47.0645 43.6274C47.0778 43.5292 47.1134 43.4353 47.1685 43.3529C47.2244 43.2709 47.298 43.2025 47.384 43.153C47.47 43.1035 47.5661 43.074 47.6651 43.0669C52.2346 42.7627 53.0757 37.9969 52.9769 34.0618L52.5999 30.3373V28.6473C52.5999 23.2198 57.7921 18.7998 64.1699 18.7998H67.0299C73.4116 18.7998 78.5999 23.2198 78.5999 28.6499V30.2723L78.219 34.106C78.1241 37.9982 78.9652 42.7588 83.5347 43.063C83.6337 43.0701 83.7298 43.0996 83.8158 43.1491C83.9018 43.1986 83.9755 43.267 84.0313 43.349C84.0865 43.4314 84.1221 43.5253 84.1354 43.6235C84.1486 43.7218 84.1393 43.8217 84.108 43.9158C84.0378 44.1277 82.4869 48.4866 74.5725 50.4925L78.1202 51.3323C79.9301 51.7357 81.5575 52.7222 82.7522 54.1403C83.947 55.5584 84.643 57.3296 84.7333 59.1817L85.4899 75.0716ZM71.6761 51.0567C71.4902 51.084 71.3056 51.1126 71.1132 51.1386C71.6849 51.3605 72.159 51.7784 72.4509 52.3177C72.6877 52.7755 72.7846 53.2928 72.7296 53.8053C72.6746 54.3177 72.4701 54.8027 72.1415 55.1998C72.47 55.5953 72.6747 56.0788 72.7302 56.59C72.7857 57.1011 72.6895 57.6173 72.4535 58.0741V58.0819C72.1489 58.6444 71.6476 59.0748 71.0456 59.2909C71.613 59.5051 72.0876 59.9109 72.3874 60.438C72.6872 60.9652 72.7932 61.5806 72.6873 62.1777C72.5813 62.7748 72.2699 63.316 71.8071 63.7078C71.3442 64.0996 70.7589 64.3173 70.1525 64.3232H69.6325C69.0431 65.6617 68.1492 66.844 67.0221 67.776C66.5092 68.1894 65.9535 68.5467 65.3646 68.842C65.4244 68.8719 65.4816 68.907 65.5401 68.9382C65.5762 68.9419 65.6119 68.9488 65.6467 68.959C65.7324 68.9948 65.8091 69.049 65.8716 69.1176C66.926 69.7238 67.8562 70.5239 68.6133 71.4758L68.6224 71.4667C69.116 71.1345 69.6791 70.9196 70.2685 70.8385C70.8579 70.7573 71.4581 70.8122 72.0231 70.9987C72.588 71.1853 73.1028 71.4987 73.5281 71.9148C73.9533 72.331 74.2776 72.839 74.4763 73.3998H77.2999V73.2217C77.2999 73.1278 77.3202 73.035 77.3595 72.9498C77.3988 72.8645 77.4561 72.7887 77.5274 72.7277C78.2629 72.1498 78.8728 71.4279 79.3199 70.6062C79.7669 69.7846 80.0417 68.8804 80.1274 67.9489C80.3978 64.2504 77.4897 60.86 77.4598 60.8262C77.3465 60.6962 77.2896 60.5266 77.3014 60.3546C77.3132 60.1826 77.3929 60.0223 77.5229 59.9091C77.6528 59.7958 77.8225 59.7388 77.9945 59.7506C78.1665 59.7625 78.3267 59.8421 78.44 59.9721C78.57 60.1255 81.729 63.7902 81.43 68.0321C81.408 68.3222 81.3694 68.6109 81.3143 68.8966L83.8649 68.1517L83.4411 59.2389C83.3627 57.6703 82.7711 56.171 81.7574 54.9714C80.7436 53.7719 79.3639 52.9386 77.8303 52.5998L71.9504 51.2075C71.8481 51.1803 71.7539 51.1286 71.6761 51.0567ZM56.561 68.9382C56.6091 68.9135 56.6546 68.8849 56.704 68.8602C54.9451 67.9374 53.5239 66.481 52.6441 64.7002C52.1799 65.8016 52.0155 67.0062 52.1676 68.1917C52.3197 69.3771 52.7828 70.5012 53.5099 71.4498C54.2652 70.5056 55.1913 69.7118 56.2399 69.1098C56.3024 69.0421 56.3787 68.9885 56.4635 68.9525C56.4955 68.9449 56.5282 68.9401 56.561 68.9382ZM52.7325 72.5782C52.1699 71.9257 51.7137 71.1887 51.3805 70.3942L48.267 69.4842L48.0239 74.0862C48.0216 74.0998 48.0186 74.1132 48.0148 74.1265C48.1894 74.5918 48.3276 75.0699 48.4282 75.5565L49.2979 79.8998H50.7019L51.5716 75.5539C51.7877 74.5027 52.1792 73.4954 52.7299 72.5743L52.7325 72.5782ZM46.8396 71.8931L47.201 65.0382C46.3076 66.6708 44.9505 68.0021 43.301 68.8641C43.3504 68.8888 43.3959 68.9174 43.444 68.9421C43.4793 68.9458 43.5141 68.9527 43.548 68.9629C43.6329 68.9989 43.7091 69.0525 43.7716 69.1202C44.9821 69.8111 46.0287 70.7557 46.8396 71.8892V71.8931ZM29.8902 62.9439C29.8039 62.6163 29.7354 62.2844 29.6848 61.9494C29.6718 61.8727 29.6562 61.796 29.6458 61.7193C29.5936 61.3258 29.5663 60.9294 29.5639 60.5324C29.5639 60.5064 29.5639 60.4804 29.5639 60.4544C29.2513 60.5241 28.9755 60.7068 28.7893 60.9674C28.6031 61.228 28.5196 61.5481 28.5549 61.8664C28.5902 62.1847 28.7417 62.4788 28.9805 62.6923C29.2192 62.9058 29.5284 63.0236 29.8486 63.0232H29.9058C29.8993 62.9998 29.898 62.9699 29.8902 62.9439ZM29.2935 51.0294L28.0442 51.2998C28.2489 52.3621 28.7214 53.3546 29.417 54.1832C29.6302 53.7728 29.8699 53.3768 30.1346 52.9976C29.9637 52.7537 29.8145 52.4953 29.6887 52.2254C29.6744 52.1955 29.6627 52.1669 29.6497 52.137C29.4881 51.783 29.3686 51.4112 29.2935 51.0294ZM33.8084 66.7698C34.8468 67.6141 36.0767 68.1904 37.3899 68.4481C37.4692 68.4637 37.5459 68.4806 37.6252 68.4936C37.8488 68.5313 38.075 68.5547 38.3012 68.5742C38.413 68.5833 38.5248 68.5963 38.6379 68.6015C38.8407 68.6106 39.0435 68.6015 39.2463 68.6015C39.3698 68.6015 39.4946 68.6015 39.6181 68.5898C39.9406 68.565 40.2614 68.5216 40.5788 68.4598C40.6269 68.4507 40.6724 68.4325 40.7192 68.4221C42.0197 68.1372 43.2291 67.5335 44.2384 66.6653C45.2477 65.7971 46.0255 64.6916 46.5016 63.4483V63.4418C46.5536 63.304 46.5926 63.1818 46.6316 63.044C46.7306 62.7541 46.8117 62.4585 46.8747 62.1587V62.147V62.1158C46.9429 61.746 46.9863 61.3721 47.0047 60.9965C47.0196 60.6063 47.0101 60.2155 46.9761 59.8265C46.9761 59.8187 46.9761 59.8122 46.9761 59.8044C46.8935 58.7882 46.6172 57.7971 46.1623 56.8846C45.916 56.4068 45.4915 56.0451 44.9807 55.8778C44.4698 55.7104 43.9136 55.7508 43.4323 55.9902L42.4937 56.4608C40.7065 57.3523 38.7372 57.8181 36.7399 57.8219H32.9452C32.4577 57.8129 31.9836 57.982 31.6118 58.2974C31.2399 58.6128 30.9958 59.0529 30.925 59.5353C30.9133 59.6289 30.9159 59.7264 30.9081 59.8213V59.8291V59.8928C30.8912 60.1047 30.8691 60.3153 30.8691 60.5324C30.8722 60.9946 30.9157 61.4557 30.9991 61.9104C31.0069 61.9585 31.0147 62.0079 31.0238 62.056C31.3782 63.9023 32.3624 65.5683 33.8084 66.7698ZM48.1565 62.3901C48.1162 62.5968 48.0668 62.8074 48.007 63.0206H48.0499C48.3723 63.0209 48.6833 62.9015 48.9226 62.6854C49.1618 62.4693 49.3122 62.172 49.3446 61.8513C49.377 61.5305 49.2891 61.2091 49.0979 60.9496C48.9067 60.69 48.6259 60.5108 48.3099 60.4466V60.4622C48.3099 60.6936 48.3099 60.9224 48.2891 61.1551C48.2738 61.5702 48.2295 61.9838 48.1565 62.3927V62.3901ZM48.4698 54.1611C48.6362 53.9648 48.7909 53.7581 48.9729 53.5787C48.5799 53.3279 48.1632 53.1163 47.7288 52.9469C48.0027 53.3342 48.2502 53.7407 48.4698 54.1611ZM49.658 59.6939C49.7819 59.7913 49.8963 59.9002 49.9999 60.0189C50.1035 59.9002 50.218 59.7913 50.3418 59.6939C50.2023 57.2917 50.8825 54.9134 52.271 52.9482C50.9902 53.4519 49.8826 54.3156 49.0821 55.4351C49.0743 55.4455 49.06 55.4494 49.0522 55.4611C49.5352 56.8182 49.7412 58.2584 49.658 59.6965V59.6939ZM59.5211 45.0598C60.6408 44.6887 61.8551 44.7212 62.9533 45.1517C64.0515 45.5822 64.9644 46.3835 65.5336 47.4167C65.5554 47.4098 65.5775 47.4042 65.5999 47.3998C68.0124 47.3967 70.3252 46.437 72.0312 44.7311C73.7371 43.0251 74.6968 40.7123 74.6999 38.2998V32.4498C74.6998 31.6316 74.391 30.8436 73.8353 30.2431C73.2796 29.6425 72.5178 29.2737 71.7021 29.2102C69.9312 30.8672 67.5987 31.7924 65.1735 31.7998H59.7499C58.888 31.7998 58.0613 32.1422 57.4518 32.7517C56.8423 33.3612 56.4999 34.1879 56.4999 35.0498V38.2998C56.4999 39.5757 56.769 40.8372 57.2896 42.002C57.8102 43.1668 58.5706 44.2087 59.5211 45.0598ZM70.5113 55.1998C70.5113 55.0883 70.54 54.9786 70.5947 54.8814C70.6493 54.7842 70.7281 54.7027 70.8233 54.6447C71.0369 54.5159 71.2085 54.3279 71.3176 54.1036C71.4266 53.8793 71.4683 53.6282 71.4376 53.3806C71.4069 53.1331 71.3052 52.8998 71.1448 52.7088C70.9843 52.5179 70.772 52.3775 70.5334 52.3047C70.3706 52.2546 70.1995 52.2372 70.0299 52.2535C69.8604 52.2698 69.6957 52.3194 69.5454 52.3996C69.1268 52.6595 68.7425 52.9709 68.4014 53.3265C68.5422 53.4634 68.6674 53.6156 68.7745 53.7802C68.8018 53.8218 68.8213 53.866 68.846 53.9102C68.9331 54.0597 69.0054 54.2173 69.0618 54.3808C69.0813 54.4393 69.1008 54.4939 69.1164 54.5537C69.243 54.9804 69.243 55.4348 69.1164 55.8615C69.1008 55.9213 69.0813 55.9759 69.0618 56.0344C69.0067 56.1962 68.9357 56.3521 68.8499 56.4998C68.8265 56.5427 68.807 56.5856 68.7797 56.6298C68.673 56.7951 68.5478 56.9477 68.4066 57.0848C68.7498 57.4423 69.1368 57.7551 69.5584 58.0156C69.7077 58.0947 69.8712 58.1434 70.0394 58.1591C70.2076 58.1747 70.3773 58.1569 70.5386 58.1066C70.7772 58.0338 70.9895 57.8934 71.15 57.7025C71.3104 57.5115 71.4121 57.2782 71.4428 57.0307C71.4735 56.7831 71.4318 56.532 71.3228 56.3077C71.2137 56.0834 71.0421 55.8954 70.8285 55.7666C70.7306 55.7082 70.6497 55.6252 70.594 55.5257C70.5384 55.4262 70.5098 55.3138 70.5113 55.1998ZM70.0927 63.0232H70.1499C70.4702 63.0236 70.7793 62.9058 71.018 62.6923C71.2568 62.4788 71.4083 62.1847 71.4436 61.8664C71.4789 61.5481 71.3954 61.228 71.2092 60.9674C71.023 60.7068 70.7472 60.5241 70.4346 60.4544C70.4346 60.4804 70.4346 60.5064 70.4346 60.5324C70.4322 60.9294 70.4049 61.3258 70.3527 61.7193C70.3423 61.796 70.3267 61.8727 70.3137 61.9494C70.2632 62.2844 70.1946 62.6163 70.1083 62.9439C70.1018 62.9699 70.1005 62.9998 70.0927 63.0232ZM66.1927 66.7724C67.6402 65.5707 68.6254 63.9036 68.9799 62.056C68.989 62.0079 68.9968 61.9585 69.0046 61.9104C69.088 61.4557 69.1315 60.9946 69.1346 60.5324C69.134 60.1987 69.1136 59.8653 69.0735 59.534C69.0621 59.4287 69.0778 59.3222 69.119 59.2246C69.0566 59.1973 68.989 59.1843 68.9292 59.1518C68.2951 58.7614 67.7221 58.2795 67.2288 57.7218C67.0265 57.7733 66.8187 57.7999 66.61 57.8011H65.31C65.1017 57.7998 64.8944 57.7732 64.6925 57.7218C64.2021 58.2786 63.6328 58.7604 63.0025 59.1518C62.701 59.3143 62.3703 59.4155 62.0295 59.4498C61.6887 59.484 61.3444 59.4506 61.0166 59.3514C60.6887 59.2523 60.3837 59.0893 60.119 58.8719C59.8544 58.6544 59.6353 58.3869 59.4743 58.0845C59.3298 57.7952 59.2416 57.4811 59.2143 57.1589C58.629 56.9699 58.0581 56.7387 57.5061 56.4673L56.5675 55.9967C56.0863 55.7569 55.5299 55.7164 55.019 55.8838C54.5081 56.0512 54.0836 56.4131 53.8375 56.8911C53.3826 57.8036 53.1063 58.7947 53.0237 59.8109C53.0237 59.8187 53.0237 59.8252 53.0237 59.833C52.9897 60.222 52.9802 60.6128 52.9951 61.003C53.0121 61.3895 53.0556 61.7743 53.1251 62.1548C53.1896 62.4584 53.272 62.758 53.3721 63.0518C53.415 63.1818 53.454 63.3118 53.5021 63.4418V63.4483C53.9368 64.5786 54.6213 65.596 55.5044 66.4247C56.3875 67.2533 57.4464 67.8717 58.602 68.2336H58.6098L58.6813 68.2557C58.9252 68.3362 59.1729 68.4043 59.4236 68.4598C59.7411 68.5215 60.0618 68.565 60.3843 68.5898C60.5143 68.6002 60.6365 68.5963 60.7626 68.6015C60.9641 68.6015 61.1643 68.6132 61.3632 68.6015C61.4802 68.6015 61.5946 68.5833 61.7103 68.5729C61.9313 68.5547 62.1536 68.5313 62.3746 68.4936C62.4565 68.4806 62.5384 68.4624 62.6203 68.4468C62.8803 68.3948 63.1403 68.3324 63.3925 68.2544C64.4152 67.9512 65.3668 67.4464 66.1914 66.7698L66.1927 66.7724ZM48.5348 64.4155L48.3372 68.1478L50.9515 68.9122C50.6974 67.3494 50.8542 65.7473 51.4065 64.2634C50.8591 64.1431 50.3655 63.8484 49.9999 63.4236C49.6163 63.8686 49.0919 64.1691 48.514 64.2751C48.5262 64.321 48.5332 64.3681 48.5348 64.4155ZM50.6499 61.7232C50.6499 62.068 50.7869 62.3986 51.0307 62.6424C51.2745 62.8862 51.6051 63.0232 51.9499 63.0232H51.9928C51.933 62.81 51.8836 62.5994 51.8433 62.394C51.7713 61.9854 51.7279 61.5723 51.7133 61.1577C51.6977 60.925 51.6912 60.6962 51.6925 60.4648V60.4492C51.3984 60.5086 51.1339 60.6679 50.9439 60.9001C50.7538 61.1324 50.65 61.4232 50.6499 61.7232ZM64.7692 54.0194C64.5437 54.1235 64.3527 54.2899 64.2189 54.4991C64.085 54.7083 64.0139 54.9515 64.0139 55.1998C64.0139 55.4482 64.085 55.6913 64.2189 55.9005C64.3527 56.1097 64.5437 56.2762 64.7692 56.3802C64.9386 56.4603 65.1239 56.5012 65.3113 56.4998H66.6113C66.7983 56.5018 66.9833 56.4608 67.1521 56.3802C67.3204 56.3015 67.4702 56.1882 67.5918 56.0478C67.7135 55.9074 67.8041 55.7429 67.858 55.5651C67.8934 55.4466 67.9114 55.3235 67.9113 55.1998C67.9095 54.9515 67.8374 54.7088 67.7032 54.4999C67.5691 54.291 67.3784 54.1244 67.1534 54.0194C66.9841 53.9389 66.7987 53.898 66.6113 53.8998H65.3113C65.1239 53.8984 64.9386 53.9393 64.7692 54.0194ZM63.5212 53.32C63.179 52.9624 62.7929 52.6497 62.372 52.3892C62.1882 52.2919 61.9833 52.241 61.7753 52.241C61.4939 52.2436 61.2209 52.3375 60.9973 52.5086C60.7738 52.6796 60.6119 52.9186 60.5358 53.1896C60.4597 53.4606 60.4737 53.749 60.5755 54.0114C60.6774 54.2738 60.8616 54.496 61.1006 54.6447C61.1958 54.7027 61.2745 54.7842 61.3291 54.8815C61.3838 54.9787 61.4124 55.0883 61.4124 55.1998C61.4124 55.3113 61.3838 55.4209 61.3291 55.5181C61.2745 55.6154 61.1958 55.6969 61.1006 55.7549C60.887 55.8837 60.7154 56.0717 60.6064 56.296C60.4973 56.5203 60.4556 56.7714 60.4863 57.019C60.517 57.2665 60.6187 57.4998 60.7792 57.6908C60.9396 57.8817 61.152 58.0221 61.3905 58.0949C61.72 58.1951 62.0758 58.1605 62.3798 57.9987C62.7982 57.7396 63.1822 57.4286 63.5225 57.0731C63.3822 56.9361 63.2575 56.7839 63.1507 56.6194C63.1221 56.5765 63.1026 56.531 63.0766 56.4894C62.9901 56.3409 62.9187 56.1841 62.8634 56.0214C62.8426 55.9629 62.8231 55.907 62.8075 55.8472C62.6792 55.4212 62.6792 54.9668 62.8075 54.5407C62.8231 54.4822 62.8426 54.4263 62.8621 54.3691C62.919 54.2062 62.9913 54.0491 63.0779 53.8998C63.1026 53.8582 63.1221 53.8153 63.1494 53.7698C63.2557 53.6065 63.3812 53.4556 63.5212 53.32ZM69.4999 50.8071V47.9341C68.4035 48.3771 67.239 48.6282 66.0575 48.6764C66.1473 49.0166 66.2017 49.3651 66.22 49.7164C67.0835 50.1931 67.8767 50.7872 68.5769 51.4818C68.7004 51.396 68.8226 51.3141 68.924 51.2582C69.1201 51.1561 69.3285 51.0796 69.5441 51.0307C69.5161 50.9594 69.5011 50.8837 69.4999 50.8071ZM57.2721 49.0768C59.7052 48.1348 62.4024 48.1348 64.8355 49.0768C64.6302 48.2286 64.1457 47.474 63.4598 46.9343C62.7739 46.3947 61.9265 46.1012 61.0538 46.1012C60.1811 46.1012 59.3337 46.3947 58.6478 46.9343C57.9619 47.474 57.4774 48.2286 57.2721 49.0768ZM54.1729 52.6492C52.5179 54.4061 51.6076 56.7357 51.6327 59.1492L51.7757 59.1349C51.9202 58.1464 52.223 57.1877 52.6727 56.2957C53.0754 55.5108 53.7716 54.9167 54.61 54.6423C55.4484 54.368 56.3611 54.4356 57.1499 54.8306L58.0898 55.2999C58.5116 55.5076 58.9457 55.6891 59.3898 55.8433C59.4889 55.6115 59.6202 55.3949 59.7798 55.1998C59.4515 54.8041 59.247 54.3206 59.1918 53.8094C59.1365 53.2983 59.233 52.7822 59.4691 52.3255C59.6292 52.0231 59.8473 51.7553 60.1111 51.5374C60.3749 51.3194 60.6791 51.1557 61.0062 51.0556C61.3334 50.9555 61.6771 50.9209 62.0177 50.9539C62.3582 50.9869 62.6889 51.0868 62.9908 51.2478C63.6249 51.6388 64.1982 52.1206 64.6925 52.6778C64.8948 52.6268 65.1026 52.6006 65.3113 52.5998H66.6113C66.82 52.601 67.0278 52.6276 67.2301 52.6791C67.3458 52.5491 67.4589 52.4295 67.5785 52.3125C66.9119 51.6723 66.1545 51.1339 65.3308 50.7148L65.2996 50.6992C63.4849 49.7714 61.4174 49.4598 59.4098 49.8116C57.4023 50.1635 55.5639 51.1596 54.1729 52.6492ZM35.4932 69.8716C35.8543 70.4647 36.362 70.955 36.9674 71.2952C37.5728 71.6354 38.2555 71.8141 38.9499 71.8141C39.6443 71.8141 40.3271 71.6354 40.9325 71.2952C41.5378 70.955 42.0455 70.4647 42.4066 69.8716C42.1372 69.7448 41.8612 69.6324 41.5798 69.5349C41.3311 69.6161 41.0781 69.6834 40.8219 69.7364C40.478 69.8012 40.1308 69.8477 39.7819 69.8755C39.6714 69.8846 39.5596 69.8859 39.4478 69.8924C39.2892 69.9002 39.1293 69.9145 38.972 69.9145C38.9187 69.9145 38.8667 69.9028 38.8134 69.9015C38.3466 69.8965 37.8808 69.857 37.4198 69.7832C37.2898 69.7624 37.178 69.7247 37.0558 69.6987C36.814 69.648 36.5709 69.6025 36.3304 69.5323C36.0457 69.6308 35.7662 69.7441 35.4932 69.8716ZM57.5932 69.8716C57.9543 70.4647 58.462 70.955 59.0674 71.2952C59.6727 71.6354 60.3555 71.8141 61.0499 71.8141C61.7443 71.8141 62.4271 71.6354 63.0325 71.2952C63.6378 70.955 64.1455 70.4647 64.5066 69.8716C64.2345 69.7441 63.9559 69.6309 63.672 69.5323C63.4328 69.6025 63.191 69.648 62.9492 69.6987C62.8257 69.7234 62.7061 69.7624 62.5813 69.7832C62.1212 69.8569 61.6563 69.8965 61.1903 69.9015C61.1357 69.9015 61.085 69.9145 61.0304 69.9145C60.8705 69.9145 60.708 69.9002 60.5455 69.8911C60.4376 69.8911 60.3297 69.8846 60.2205 69.8755C59.8759 69.8481 59.5331 69.8021 59.1935 69.7377H59.1766C58.921 69.684 58.6685 69.6168 58.42 69.5362C58.1387 69.6333 57.8627 69.7452 57.5932 69.8716ZM55.9591 48.9416C56.1015 48.2669 56.3766 47.6273 56.7682 47.0598C57.1599 46.4923 57.6604 46.0082 58.2406 45.6357C57.2768 44.6725 56.5123 43.5289 55.9905 42.2702C55.4688 41.0115 55.2002 39.6624 55.1999 38.2998V35.0498C55.1999 33.8431 55.6793 32.6858 56.5326 31.8325C57.3859 30.9792 58.5432 30.4998 59.7499 30.4998H65.1735C67.354 30.4936 69.444 29.6275 70.9897 28.0896C71.0502 28.0293 71.122 27.9815 71.2009 27.9489C71.2799 27.9163 71.3645 27.8997 71.4499 27.8998C72.6566 27.8998 73.814 28.3792 74.6672 29.2325C75.5205 30.0858 75.9999 31.2431 75.9999 32.4498V38.2998C75.9976 40.1231 75.5159 41.9138 74.6033 43.4923C73.6906 45.0708 72.379 46.3815 70.7999 47.2932V49.8698C78.6844 48.8649 81.5743 45.6838 82.4934 44.2343C78.7442 43.4972 76.7734 39.9144 76.9229 34.0228L77.2999 30.2073V28.6473C77.2999 23.9348 72.6914 20.0998 67.0299 20.0998H64.1699C58.5084 20.0998 53.8999 23.9348 53.8999 28.6499V30.2723L54.273 33.9773C54.4238 39.9092 52.453 43.4946 48.7142 44.2343C49.4448 45.3705 51.413 47.5649 55.9591 48.9416ZM45.8269 52.6492C44.5324 51.2653 42.8504 50.3042 41.001 49.8914C39.1515 49.4787 37.2205 49.6334 35.4604 50.3356C33.7003 51.0377 32.193 52.2545 31.1354 53.8269C30.0779 55.3994 29.5193 57.2543 29.5327 59.1492C29.5847 59.1427 29.6354 59.1375 29.6887 59.1336C29.8464 58.39 30.2559 57.7235 30.848 57.2468C31.4401 56.77 32.1785 56.5121 32.9387 56.5167H36.7399C38.5358 56.5144 40.3067 56.0961 41.9139 55.2947L42.8538 54.8254C43.6433 54.4323 44.5558 54.3662 45.3937 54.6414C46.2316 54.9166 46.9272 55.511 47.3297 56.2957C47.7794 57.1877 48.0823 58.1464 48.2267 59.1349L48.3697 59.1492C48.3942 56.7353 47.4828 54.4057 45.8269 52.6492ZM46.0999 35.6998C46.0999 35.355 45.9629 35.0244 45.7192 34.7806C45.4754 34.5368 45.1447 34.3998 44.7999 34.3998V36.9998C45.1447 36.9998 45.4754 36.8628 45.7192 36.619C45.9629 36.3752 46.0999 36.0446 46.0999 35.6998ZM23.3499 27.2498V33.1921C23.5617 33.1335 23.7802 33.1025 23.9999 33.0998H24.4562C24.824 32.3245 25.4035 31.669 26.1278 31.209C26.8521 30.7489 27.6918 30.5031 28.5499 30.4998H33.9735C36.154 30.4936 38.244 29.6275 39.7897 28.0896C39.8502 28.0293 39.922 27.9815 40.0009 27.9489C40.0799 27.9163 40.1645 27.8997 40.2499 27.8998C41.4566 27.8998 42.614 28.3792 43.4672 29.2325C44.3205 30.0858 44.7999 31.2431 44.7999 32.4498V33.0998C45.0196 33.1025 45.2381 33.1335 45.4499 33.1921V25.9498C45.4499 25.0879 45.1075 24.2612 44.498 23.6517C43.8885 23.0422 43.0619 22.6998 42.1999 22.6998H41.5278C40.8939 22.7158 40.2642 22.5936 39.6823 22.3418C39.1004 22.0899 38.5803 21.7143 38.1582 21.2412C37.8562 20.8836 37.4797 20.5962 37.0551 20.399C36.6305 20.2019 36.168 20.0998 35.6999 20.0998H30.4999C28.6044 20.1022 26.7871 20.8563 25.4468 22.1967C24.1064 23.537 23.3523 25.3542 23.3499 27.2498ZM23.9999 36.9998V35.0498C23.9999 34.8321 24.0173 34.6147 24.0519 34.3998H23.9999C23.6551 34.3998 23.3245 34.5368 23.0807 34.7806C22.8369 35.0244 22.6999 35.355 22.6999 35.6998C22.6999 36.0446 22.8369 36.3752 23.0807 36.619C23.3245 36.8628 23.6551 36.9998 23.9999 36.9998ZM30.2399 46.3858C30.5184 46.5317 30.8049 46.6619 31.0979 46.7758C31.1434 46.794 31.1902 46.8096 31.237 46.8265C33.2774 47.5649 35.512 47.5649 37.5524 46.8265C37.5992 46.8096 37.646 46.794 37.6915 46.7758C37.9845 46.6619 38.271 46.5317 38.5495 46.3858C40.0381 45.6231 41.2876 44.4649 42.161 43.0384C43.0343 41.612 43.4976 39.9724 43.4999 38.2998V32.4498C43.4998 31.6316 43.191 30.8436 42.6353 30.2431C42.0796 29.6425 41.3178 29.2737 40.5021 29.2102C38.7312 30.8672 36.3987 31.7924 33.9735 31.7998H28.5499C27.8821 31.8025 27.2313 32.0108 26.686 32.3965C26.1408 32.7821 25.7276 33.3264 25.5027 33.9552V33.9669C25.4404 34.1414 25.3917 34.3205 25.3571 34.5025C25.3222 34.6829 25.303 34.8661 25.2999 35.0498V38.2998C25.3013 39.9713 25.763 41.6101 26.6344 43.0365C27.5058 44.4629 28.7533 45.6217 30.2399 46.3858ZM30.7066 48.0121C30.6364 47.9848 30.5636 47.9666 30.4947 47.938V50.0817C30.4947 50.1194 30.5025 50.1545 30.5038 50.1896C30.5031 50.1978 30.5031 50.2061 30.5038 50.2143C30.5232 50.8132 30.684 51.399 30.9731 51.9238C31.0212 51.8705 31.0628 51.812 31.1122 51.76C32.9941 49.768 35.5644 48.5681 38.2999 48.4047V47.938C38.231 47.9666 38.1582 47.9848 38.088 48.0121C37.8501 48.1031 37.6096 48.1902 37.3639 48.2643L37.3158 48.276C35.4129 48.8411 33.3869 48.8411 31.484 48.276L31.4359 48.2643C31.1902 48.1902 30.9497 48.1031 30.7118 48.0121H30.7066ZM16.5639 59.2415L16.0764 69.4998H21.3999V64.9498C21.3999 64.7774 21.4684 64.6121 21.5903 64.4902C21.7122 64.3683 21.8775 64.2998 22.0499 64.2998C22.2223 64.2998 22.3876 64.3683 22.5095 64.4902C22.6314 64.6121 22.6999 64.7774 22.6999 64.9498V73.3998H25.5235C25.7199 72.8366 26.0437 72.3263 26.4696 71.9086C26.8954 71.491 27.4119 71.1772 27.9789 70.9918C28.5458 70.8064 29.1479 70.7543 29.7383 70.8396C30.3286 70.9249 30.8913 71.1453 31.3826 71.4836C32.1416 70.5285 33.0745 69.7257 34.1321 69.1176C34.1946 69.049 34.2714 68.9948 34.357 68.959C34.3918 68.9488 34.4275 68.9419 34.4636 68.9382C34.5221 68.907 34.5793 68.8719 34.6391 68.842C34.0502 68.5467 33.4946 68.1894 32.9816 67.776C31.854 66.8442 30.9597 65.6618 30.3699 64.3232H29.8499C29.3105 64.3251 28.7839 64.1586 28.3437 63.8467C27.9035 63.5349 27.5717 63.0934 27.3946 62.5838C27.2175 62.0742 27.2039 61.5221 27.3558 61.0045C27.5077 60.4868 27.8174 60.0296 28.2418 59.6965C28.1586 58.2644 28.3628 56.83 28.8424 55.478C27.7881 54.408 27.0711 53.0519 26.7806 51.578L22.1695 52.5998C20.6365 52.9397 19.2576 53.7738 18.2448 54.9738C17.2321 56.1738 16.6415 57.6732 16.5639 59.2415ZM20.3599 79.8998H28.6019L29.4716 75.5539C29.6902 74.4933 30.0881 73.4777 30.6481 72.5509C30.2953 72.3097 29.8881 72.1597 29.4631 72.1144C29.0381 72.0691 28.6085 72.1299 28.2127 72.2912C27.8169 72.4526 27.4673 72.7096 27.1952 73.0392C26.923 73.3687 26.7368 73.7606 26.6532 74.1798C26.6232 74.3266 26.5435 74.4586 26.4274 74.5533C26.3113 74.6481 26.1661 74.6998 26.0162 74.6998H22.0499C21.8775 74.6998 21.7122 74.6313 21.5903 74.5094C21.4684 74.3875 21.3999 74.2222 21.3999 74.0498V70.7998H16.014L15.8099 75.1327C15.7805 75.7482 15.8764 76.3633 16.0919 76.9407C16.3074 77.518 16.6379 78.0455 17.0633 78.4913C17.4888 78.9371 18.0004 79.2918 18.5671 79.5339C19.1337 79.776 19.7437 79.9005 20.3599 79.8998ZM45.537 79.8998H47.9771L47.1607 75.8087C46.9435 74.7271 46.513 73.6996 45.8942 72.7863C45.2755 71.8729 44.481 71.092 43.5571 70.4891C43.0845 71.2887 42.4116 71.9513 41.6048 72.4116C40.7981 72.8719 39.8853 73.114 38.9564 73.114C38.0276 73.114 37.1148 72.8719 36.308 72.4116C35.5012 71.9513 34.8283 71.2887 34.3557 70.4891C33.4321 71.0923 32.6378 71.8733 32.0191 72.7866C31.4004 73.6999 30.9697 74.7273 30.7521 75.8087L29.9292 79.8998H33.6849V75.3498C33.6849 75.1774 33.7534 75.0121 33.8753 74.8902C33.9972 74.7683 34.1625 74.6998 34.3349 74.6998C34.5073 74.6998 34.6726 74.7683 34.7945 74.8902C34.9164 75.0121 34.9849 75.1774 34.9849 75.3498V79.8998H42.9149V75.3498C42.9149 75.1774 42.9834 75.0121 43.1053 74.8902C43.2272 74.7683 43.3925 74.6998 43.5649 74.6998C43.7373 74.6998 43.9026 74.7683 44.0245 74.8902C44.1464 75.0121 44.2149 75.1774 44.2149 75.3498V79.8998H45.537ZM70.0771 79.8998L69.2607 75.8087C69.0431 74.7273 68.6124 73.6999 67.9937 72.7866C67.375 71.8733 66.5807 71.0923 65.6571 70.4891C65.1845 71.2887 64.5116 71.9513 63.7048 72.4116C62.8981 72.8719 61.9853 73.114 61.0564 73.114C60.1276 73.114 59.2148 72.8719 58.408 72.4116C57.6012 71.9513 56.9283 71.2887 56.4557 70.4891C55.5318 71.092 54.7373 71.8729 54.1186 72.7863C53.4999 73.6996 53.0693 74.7271 52.8521 75.8087L52.0292 79.8998H55.7849V75.3498C55.7849 75.1774 55.8534 75.0121 55.9753 74.8902C56.0972 74.7683 56.2625 74.6998 56.4349 74.6998C56.6073 74.6998 56.7726 74.7683 56.8945 74.8902C57.0164 75.0121 57.0849 75.1774 57.0849 75.3498V79.8998H65.0149V75.3498C65.0149 75.1774 65.0834 75.0121 65.2053 74.8902C65.3272 74.7683 65.4925 74.6998 65.6649 74.6998C65.8373 74.6998 66.0026 74.7683 66.1245 74.8902C66.2464 75.0121 66.3149 75.1774 66.3149 75.3498V79.8998H70.0771ZM84.1899 75.1327L83.9299 69.4881L80.8762 70.3812C80.3836 71.5316 79.6474 72.5615 78.7182 73.3998H79.3682C79.5406 73.3998 79.7059 73.4683 79.8278 73.5902C79.9497 73.7121 80.0182 73.8774 80.0182 74.0498C80.0182 74.2222 79.9497 74.3875 79.8278 74.5094C79.7059 74.6313 79.5406 74.6998 79.3682 74.6998H73.9836C73.8338 74.6998 73.6885 74.6481 73.5724 74.5533C73.4564 74.4586 73.3766 74.3266 73.3466 74.1798C73.2268 73.5927 72.9079 73.0651 72.4438 72.6861C71.9798 72.3071 71.3991 72.1 70.7999 72.0998C70.2824 72.0985 69.7764 72.253 69.3478 72.5431C69.9097 73.4722 70.3089 74.4905 70.5282 75.5539L71.3979 79.8998H79.6464C80.2626 79.9005 80.8726 79.776 81.4393 79.5339C82.0059 79.2918 82.5175 78.9371 82.943 78.4913C83.3685 78.0455 83.699 77.518 83.9144 76.9407C84.1299 76.3633 84.2258 75.7482 84.1964 75.1327H84.1899ZM30.4999 37.9735C30.6927 37.9745 30.8815 37.9183 31.0423 37.8119C31.2031 37.7056 31.3287 37.5539 31.4032 37.376C31.4777 37.1982 31.4977 37.0023 31.4607 36.8131C31.4238 36.6238 31.3314 36.4498 31.1955 36.3132C31.0595 36.1765 30.886 36.0832 30.697 36.0452C30.508 36.0072 30.3119 36.0262 30.1337 36.0997C29.9555 36.1733 29.8031 36.2981 29.6959 36.4583C29.5887 36.6185 29.5314 36.807 29.5314 36.9998C29.5314 37.2571 29.6333 37.504 29.8148 37.6865C29.9962 37.8689 30.2426 37.9721 30.4999 37.9735ZM38.2895 37.9735C38.4823 37.9745 38.6711 37.9183 38.8319 37.8119C38.9927 37.7056 39.1183 37.5539 39.1928 37.376C39.2673 37.1982 39.2873 37.0023 39.2503 36.8131C39.2134 36.6238 39.121 36.4498 38.9851 36.3132C38.8491 36.1765 38.6756 36.0832 38.4866 36.0452C38.2976 36.0072 38.1015 36.0262 37.9233 36.0997C37.7451 36.1733 37.5927 36.2981 37.4855 36.4583C37.3783 36.6185 37.321 36.807 37.321 36.9998C37.321 37.1281 37.3464 37.2552 37.3956 37.3736C37.4449 37.4921 37.5171 37.5997 37.608 37.6902C37.699 37.7806 37.807 37.8523 37.9257 37.9009C38.0444 37.9495 38.1716 37.9742 38.2999 37.9735H38.2895ZM62.6788 36.9998C62.6788 36.8072 62.6217 36.619 62.5147 36.4588C62.4077 36.2987 62.2556 36.1739 62.0777 36.1002C61.8998 36.0265 61.704 36.0072 61.5151 36.0448C61.3263 36.0824 61.1528 36.1751 61.0166 36.3113C60.8804 36.4475 60.7877 36.621 60.7501 36.8098C60.7125 36.9987 60.7318 37.1945 60.8055 37.3724C60.8792 37.5503 61.004 37.7024 61.1642 37.8094C61.3243 37.9164 61.5125 37.9735 61.7051 37.9735C61.9634 37.9735 62.211 37.8709 62.3936 37.6883C62.5762 37.5057 62.6788 37.258 62.6788 36.9998ZM69.4999 37.9735C69.6923 37.9725 69.88 37.9145 70.0394 37.8069C70.1989 37.6993 70.3229 37.5468 70.3958 37.3688C70.4687 37.1908 70.4872 36.9952 70.4491 36.8067C70.4109 36.6181 70.3178 36.4451 70.1814 36.3095C70.045 36.1738 69.8715 36.0816 69.6828 36.0444C69.494 36.0073 69.2985 36.0269 69.1209 36.1007C68.9433 36.1746 68.7915 36.2994 68.6848 36.4594C68.578 36.6194 68.521 36.8074 68.521 36.9998C68.521 37.1281 68.5464 37.2552 68.5956 37.3736C68.6449 37.4921 68.7171 37.5997 68.808 37.6902C68.899 37.7806 69.007 37.8523 69.1257 37.9009C69.2444 37.9495 69.3716 37.9742 69.4999 37.9735ZM62.4617 42.8693C62.7789 43.4228 63.2367 43.8827 63.7886 44.2025C64.3406 44.5223 64.9672 44.6908 65.6051 44.6908C66.243 44.6908 66.8697 44.5223 67.4216 44.2025C67.9736 43.8827 68.4313 43.4228 68.7485 42.8693C68.7955 42.7953 68.8271 42.7126 68.8413 42.6261C68.8556 42.5396 68.8522 42.4511 68.8313 42.366C68.8104 42.2808 68.7726 42.2008 68.72 42.1306C68.6674 42.0605 68.6011 42.0017 68.5253 41.9578C68.4494 41.914 68.3654 41.8859 68.2783 41.8753C68.1913 41.8648 68.1031 41.8719 68.0189 41.8963C67.9347 41.9208 67.8563 41.962 67.7884 42.0175C67.7206 42.073 67.6646 42.1416 67.624 42.2193C67.4211 42.5758 67.1274 42.8722 66.7728 43.0783C66.4182 43.2845 66.0153 43.3931 65.6051 43.3931C65.1949 43.3931 64.792 43.2845 64.4374 43.0783C64.0828 42.8722 63.7891 42.5758 63.5862 42.2193C63.5456 42.1416 63.4896 42.073 63.4218 42.0175C63.3539 41.962 63.2756 41.9208 63.1914 41.8963C63.1072 41.8719 63.0189 41.8648 62.9319 41.8753C62.8449 41.8859 62.7609 41.914 62.685 41.9578C62.6091 42.0017 62.5428 42.0605 62.4902 42.1306C62.4376 42.2008 62.3998 42.2808 62.3789 42.366C62.3581 42.4511 62.3546 42.5396 62.3689 42.6261C62.3831 42.7126 62.4147 42.7953 62.4617 42.8693ZM35.8117 63.6927C36.1286 64.2462 36.586 64.7062 37.1378 65.0261C37.6895 65.346 38.316 65.5145 38.9538 65.5145C39.5916 65.5145 40.2181 65.346 40.7698 65.0261C41.3216 64.7062 41.7791 64.2462 42.0959 63.6927C42.1678 63.545 42.181 63.3756 42.133 63.2185C42.085 63.0614 41.9794 62.9283 41.8372 62.846C41.6951 62.7636 41.5271 62.7381 41.367 62.7746C41.2068 62.8111 41.0664 62.9069 40.974 63.0427C40.7713 63.3998 40.4775 63.6968 40.1226 63.9034C39.7677 64.11 39.3644 64.2188 38.9538 64.2188C38.5432 64.2188 38.1399 64.11 37.785 63.9034C37.4301 63.6968 37.1364 63.3998 36.9336 63.0427C36.8412 62.9069 36.7008 62.8111 36.5407 62.7746C36.3805 62.7381 36.2125 62.7636 36.0704 62.846C35.9283 62.9283 35.8226 63.0614 35.7746 63.2185C35.7266 63.3756 35.7399 63.545 35.8117 63.6927ZM42.8499 61.3956C43.0425 61.3956 43.2307 61.3385 43.3909 61.2315C43.551 61.1245 43.6758 60.9724 43.7495 60.7945C43.8232 60.6166 43.8425 60.4208 43.8049 60.2319C43.7673 60.0431 43.6746 59.8696 43.5384 59.7334C43.4022 59.5972 43.2287 59.5045 43.0399 59.4669C42.851 59.4293 42.6552 59.4486 42.4773 59.5223C42.2994 59.596 42.1473 59.7208 42.0403 59.8809C41.9333 60.0411 41.8762 60.2293 41.8762 60.4219C41.8762 60.6801 41.9788 60.9278 42.1614 61.1104C42.344 61.293 42.5917 61.3956 42.8499 61.3956ZM35.0603 61.3956C35.2529 61.3956 35.4411 61.3385 35.6013 61.2315C35.7614 61.1245 35.8862 60.9724 35.9599 60.7945C36.0336 60.6166 36.0529 60.4208 36.0153 60.2319C35.9777 60.0431 35.885 59.8696 35.7488 59.7334C35.6126 59.5972 35.4392 59.5045 35.2503 59.4669C35.0614 59.4293 34.8656 59.4486 34.6877 59.5223C34.5098 59.596 34.3577 59.7208 34.2507 59.8809C34.1437 60.0411 34.0866 60.2293 34.0866 60.4219C34.0866 60.6784 34.1878 60.9245 34.3681 61.1068C34.5485 61.2891 34.7935 61.3929 35.0499 61.3956H35.0603ZM58.134 60.4219C58.134 60.2293 58.0769 60.0411 57.9699 59.8809C57.8629 59.7208 57.7108 59.596 57.5329 59.5223C57.355 59.4486 57.1592 59.4293 56.9704 59.4669C56.7815 59.5045 56.608 59.5972 56.4718 59.7334C56.3356 59.8696 56.2429 60.0431 56.2053 60.2319C56.1677 60.4208 56.187 60.6166 56.2607 60.7945C56.3344 60.9724 56.4592 61.1245 56.6193 61.2315C56.7795 61.3385 56.9677 61.3956 57.1603 61.3956C57.4176 61.3942 57.664 61.291 57.8455 61.1086C58.0269 60.9261 58.1288 60.6792 58.1288 60.4219H58.134ZM64.9499 59.4482C64.7573 59.4482 64.5691 59.5053 64.4089 59.6123C64.2488 59.7193 64.124 59.8714 64.0503 60.0493C63.9766 60.2272 63.9573 60.423 63.9949 60.6119C64.0325 60.8007 64.1252 60.9742 64.2614 61.1104C64.3976 61.2466 64.5711 61.3393 64.76 61.3769C64.9488 61.4145 65.1446 61.3952 65.3225 61.3215C65.5004 61.2478 65.6525 61.123 65.7595 60.9629C65.8665 60.8027 65.9236 60.6145 65.9236 60.4219C65.9236 60.294 65.8984 60.1674 65.8495 60.0493C65.8006 59.9311 65.7288 59.8238 65.6384 59.7334C65.548 59.643 65.4407 59.5713 65.3225 59.5223C65.2044 59.4734 65.0778 59.4482 64.9499 59.4482ZM63.9632 62.8048C63.8145 62.7182 63.6376 62.694 63.4712 62.7376C63.3047 62.7813 63.1624 62.8891 63.0753 63.0375C62.8726 63.3946 62.5788 63.6916 62.2239 63.8982C61.869 64.1048 61.4657 64.2136 61.0551 64.2136C60.6445 64.2136 60.2412 64.1048 59.8863 63.8982C59.5314 63.6916 59.2377 63.3946 59.0349 63.0375C58.9425 62.9017 58.8021 62.8059 58.642 62.7694C58.4818 62.7329 58.3138 62.7584 58.1717 62.8408C58.0296 62.9231 57.9239 63.0562 57.8759 63.2133C57.8279 63.3704 57.8412 63.5398 57.913 63.6875C58.2299 64.241 58.6873 64.701 59.2391 65.0209C59.7908 65.3408 60.4173 65.5093 61.0551 65.5093C61.6929 65.5093 62.3194 65.3408 62.8711 65.0209C63.4229 64.701 63.8804 64.241 64.1972 63.6875C64.2817 63.5385 64.3039 63.3623 64.2591 63.197C64.2143 63.0317 64.1061 62.8908 63.958 62.8048H63.9632Z",
+}
diff --git a/src/index.css b/src/index.css
index 5c19f7d..9c6c605 100644
--- a/src/index.css
+++ b/src/index.css
@@ -3661,6 +3661,7 @@
.bg-gradient-to-r {
--tw-gradient-position: to right in oklab;
background-image: linear-gradient(var(--tw-gradient-stops));
+ /* padding-right: 8px; */
}
.bg-gradient-to-t {
diff --git a/src/main.tsx b/src/main.tsx
index 241b0b3..cfff6d7 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -4,10 +4,12 @@ import App from "./App";
import "./index.css";
import { Provider } from "react-redux";
import { store } from "./Redux/Store";
+import { Toaster } from "sonner";
createRoot(document.getElementById("root")!).render(
+
diff --git a/src/components/AboutUsPage.tsx b/src/pages/AboutUsPage.tsx
similarity index 97%
rename from src/components/AboutUsPage.tsx
rename to src/pages/AboutUsPage.tsx
index 558ffdb..29b87fd 100644
--- a/src/components/AboutUsPage.tsx
+++ b/src/pages/AboutUsPage.tsx
@@ -1,13 +1,13 @@
import React from 'react';
import { motion } from 'motion/react';
import { ArrowLeft, Heart, MapPin, Zap, Globe, Users, Camera, Coffee } from 'lucide-react';
-import { Button } from './ui/button';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { MobileAppSection } from './MobileAppSection';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
-import { ReviewsSection } from './ReviewsSection';
+// import { Button } from './ui/button';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
+import { ReviewsSection } from '../components/ReviewsSection';
interface User {
email: string;
@@ -168,7 +168,7 @@ export function AboutUsPage({
transition={{ duration: 3, repeat: Infinity }}
>
Meet the {' '}
-
+
Dream Team
{' '}
✈️
diff --git a/src/components/AttractionDetailsPage.tsx b/src/pages/AttractionDetailsPage.tsx
similarity index 64%
rename from src/components/AttractionDetailsPage.tsx
rename to src/pages/AttractionDetailsPage.tsx
index d92c3b1..4c9f90c 100644
--- a/src/components/AttractionDetailsPage.tsx
+++ b/src/pages/AttractionDetailsPage.tsx
@@ -1,13 +1,14 @@
import { useState } from 'react';
import { motion } from 'motion/react';
import { ArrowLeft, Clock, Users, Calendar, MapPin, Star, Check, X, ChevronLeft, ChevronRight } from 'lucide-react';
-import { Button } from './ui/button';
-import { Badge } from './ui/badge';
-import { Card, } from './ui/card';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { Button } from '../components/ui/button';
+import { Badge } from '../components/ui/badge';
+import { Card, } from '../components/ui/card';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
import { Layout } from '../Layout';
import { useParams } from 'react-router-dom';
import { useGetAttractionDetailsByIdQuery } from '../Redux/services/attractions.service';
+import LoadingSpinner from '../components/LoadingSpinner';
interface AttractionDetailsPageProps {
onBackClick: () => void;
@@ -31,7 +32,9 @@ export function AttractionDetailsPage({
const { data: attraction, isLoading } = useGetAttractionDetailsByIdQuery(Number(attractionId));
if (isLoading) {
- return loading...
+ return (
+
+ );
}
return (
@@ -40,7 +43,7 @@ export function AttractionDetailsPage({
onSignInClick={onSignInClick}
onSignOutClick={onSignOutClick}
user={user}
- // showCitySubmenu={false}
+ // showCitySubmenu={false}
>
{/* Back Button */}
@@ -82,7 +85,7 @@ export function AttractionDetailsPage({
{attraction.title}
{' '}
- Day Trip by {attraction.partner.businessName}
+ Day Trip by {attraction.partner.businessName}
@@ -99,10 +102,10 @@ export function AttractionDetailsPage({
{/* Gallery images */}
- {attraction.attractionGalleries.slice().map((image:any) => (
+ {attraction.attractionGalleries.slice().map((image: any) => (
@@ -255,131 +258,7 @@ export function AttractionDetailsPage({
{/* Right Sidebar - Calendar and Booking */}
-
- {/* Calendar Widget with Custom Design */}
-
-
-
Select Date
-
Choose your preferred visit date
-
-
- {/* Custom Calendar Design */}
-
- {/* Calendar Header */}
-
-
-
-
- September 2025
-
-
-
-
-
- {/* Days of week */}
-
-
Su
-
Mo
-
Tu
-
We
-
Th
-
Fr
-
Sa
-
-
- {/* Calendar Grid */}
-
- {/* Previous month */}
- 31
-
- {/* Current month */}
- {Array.from({ length: 30 }, (_, i) => {
- const day = i + 1;
- const isSelected = day === 27;
- const isToday = day === 15;
- return (
-
- {day}
-
- );
- })}
-
- {/* Next month */}
- {Array.from({ length: 4 }, (_, i) => (
-
- {i + 1}
-
- ))}
-
-
-
- {/* Selected Date Display */}
-
-
-
-
-
Selected Date
-
September 27, 2025
-
-
-
-
-
- {/* Pricing Card */}
-
-
-
- Adult Ticket
- {attraction.ticketPriceAdult}
-
-
- Service Fee
- $5
-
-
-
- Total
- ${attraction.ticketPriceAdult + 5}
-
-
-
-
-
- {/* Confirm Booking Button */}
-
onCheckoutClick()}
- >
-
-
- Confirm Booking
-
-
-
-
- {/* Trust Indicators */}
-
-
-
- Instant Confirmation
-
-
-
- Free Cancellation
-
-
-
+
diff --git a/src/components/AttractionsPage.tsx b/src/pages/AttractionsPage.tsx
similarity index 59%
rename from src/components/AttractionsPage.tsx
rename to src/pages/AttractionsPage.tsx
index 7df14cb..b8d3d8c 100644
--- a/src/components/AttractionsPage.tsx
+++ b/src/pages/AttractionsPage.tsx
@@ -2,14 +2,15 @@ import { useEffect, useState } from 'react';
import { motion } from 'motion/react';
import { Search, Star, Clock } from 'lucide-react';
import { useNavigate, useParams } from 'react-router-dom';
-import { Button } from './ui/button';
-import { Input } from './ui/input';
-import { Card, CardContent } from './ui/card';
-import { Badge } from './ui/badge';
-import { Checkbox } from './ui/checkbox';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { Button } from '../components/ui/button';
+import { Input } from '../components/ui/input';
+import { Card, CardContent } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import { Checkbox } from '../components/ui/checkbox';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
import { Layout } from '../Layout';
import { useGetAttractionFiltersQuery, useGetCustomerAttractionsQuery } from '../Redux/services/attractions.service';
+import LoadingSpinner from '../components/LoadingSpinner';
interface User {
email: string;
name: string;
@@ -29,187 +30,6 @@ interface Attraction {
passType: string;
}
-// {
-// id: '1',
-// name: 'Centipede Tour - Guided Arizona Desert Tour by ATV',
-// description: 'Experience the thrill of off-road adventure through the stunning Arizona desert landscape',
-// image: 'https://images.unsplash.com/photo-1682687220742-aba13b6e50ba?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxhdHYlMjBkZXNlcnQlMjB0b3VyfGVufDF8fHx8MTc1ODEwNDg5Nnww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'Paris, France',
-// duration: '4 days',
-// rating: 4.8,
-// price: 189.25,
-// category: 'adventure',
-// hasReservation: true,
-// reviewCount: 243,
-// passType: 'unlimited'
-// },
-// {
-// id: '2',
-// name: 'Molokini and Turtle Town Snorkeling Adventure Aboard',
-// description: 'Snorkel in crystal-clear waters and swim alongside sea turtles in this unforgettable marine adventure',
-// image: 'https://images.unsplash.com/photo-1559827260-dc66d52bef19?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzbm9ya2VsaW5nJTIwdHVydGxlJTIwYWR2ZW50dXJlfGVufDF8fHx8MTc1ODEwNDkwMHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'New York, USA',
-// duration: '4 days',
-// rating: 4.8,
-// price: 225,
-// category: 'adventure',
-// hasReservation: false,
-// reviewCount: 167,
-// passType: 'selective'
-// },
-// {
-// id: '3',
-// name: 'Westminster Walking Tour & Westminster Abbey Entry',
-// description: 'Explore the heart of London with guided tours of historic Westminster and the famous Abbey',
-// image: 'https://images.unsplash.com/photo-1533929736458-ca588d08c8be?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx3ZXN0bWluc3RlciUyMGFiYmV5JTIwbG9uZG9ufGVufDF8fHx8MTc1ODEwNDkwNnww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'London, UK',
-// duration: '4 days',
-// rating: 4.8,
-// price: 343,
-// category: 'culture',
-// hasReservation: true,
-// reviewCount: 343,
-// passType: 'unlimited'
-// },
-// {
-// id: '4',
-// name: 'All Inclusive Ultimate Circle Island Day Tour with Lunch',
-// description: 'Comprehensive island tour including all major attractions, lunch, and transportation',
-// image: 'https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxpc2xhbmQlMjB0b3VyJTIwYWRvJTIwdHJvcGljYWx8ZW58MXx8fHwxNzU4MTA0OTEwfDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'New York, USA',
-// duration: '4 days',
-// rating: 4.8,
-// price: 225,
-// category: 'adventure',
-// hasReservation: false,
-// reviewCount: 243,
-// passType: 'unlimited'
-// },
-// {
-// id: '5',
-// name: 'Space Center Houston Admission Ticket',
-// description: 'Explore NASA\'s Johnson Space Center and discover the wonders of space exploration',
-// image: 'https://images.unsplash.com/photo-1446776653964-20c1d3a81b06?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzcGFjZSUyMGNlbnRlciUyMG5hc2ElMjBob3VzdG9ufGVufDF8fHx8MTc1ODEwNDkxM3ww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'Paris, France',
-// duration: '4 days',
-// rating: 4.8,
-// price: 225,
-// category: 'family',
-// hasReservation: true,
-// reviewCount: 243,
-// passType: 'selective'
-// },
-// {
-// id: '6',
-// name: 'Melbourne Skydeck Observatory',
-// description: 'Experience breathtaking 360-degree views from the Southern Hemisphere\'s highest viewing platform',
-// image: 'https://images.unsplash.com/photo-1677200922658-d0df5b2ac91e?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjBhdHRyYWN0aW9ucyUyMGZhbW91cyUyMGxhbmRtYXJrc3xlbnwxfHx8fDE3NTc0MDEwODV8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'Melbourne CBD',
-// duration: '2 hours',
-// rating: 4.5,
-// price: 25,
-// category: 'adventure',
-// hasReservation: true,
-// reviewCount: 892,
-// passType: 'selective'
-// },
-// {
-// id: '7',
-// name: 'Royal Botanic Gardens Melbourne',
-// description: 'Explore 38 hectares of stunning gardens featuring over 8,500 species of plants',
-// image: 'https://images.unsplash.com/photo-1721272962395-a848331ce92d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjByb3lhbCUyMGJvdGFuaWMlMjBnYXJkZW5zfGVufDF8fHx8MTc1NzMzNzc4OXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'South Yarra',
-// duration: '3 hours',
-// rating: 4.7,
-// price: 0,
-// category: 'nature',
-// hasReservation: false,
-// reviewCount: 1245,
-// passType: 'selective'
-// },
-// {
-// id: '8',
-// name: 'Federation Square Cultural Precinct',
-// description: 'Melbourne\'s cultural precinct featuring galleries, museums, and unique architecture',
-// image: 'https://images.unsplash.com/photo-1580688027085-8220709e3d84?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxmZWRlcmF0aW9uJTIwc3F1YXJlJTIwbWVsYm91cm5lfGVufDF8fHx8MTc1NzQwMTA5Mnww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'Melbourne CBD',
-// duration: '3 hours',
-// rating: 4.3,
-// price: 0,
-// category: 'culture',
-// hasReservation: true,
-// reviewCount: 672,
-// passType: 'unlimited'
-// },
-// {
-// id: '9',
-// name: 'St Kilda Pier & Little Penguins',
-// description: 'Watch little penguins return home at sunset while enjoying the scenic pier',
-// image: 'https://images.unsplash.com/photo-1597889790884-2bb63cfbd4f6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzdCUyMGtpbGRhJTIwcGllciUyMG1lbGJvdXJuZXxlbnwxfHx8fDE3NTc0MDEwOTV8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'St Kilda',
-// duration: '2 hours',
-// rating: 4.4,
-// price: 0,
-// category: 'nature',
-// hasReservation: false,
-// reviewCount: 543,
-// passType: 'unlimited'
-// },
-// {
-// id: '10',
-// name: 'Queen Victoria Market Experience',
-// description: 'Historic market offering fresh produce, gourmet foods, and unique souvenirs',
-// image: 'https://images.unsplash.com/photo-1676454953709-e0be46f62490?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxxdWVlbiUyMHZpY3RvcmlhJTIwbWFya2V0JTIwbWVsYm91cm5lfGVufDF8fHx8MTc1NzQwMTA5OHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'Melbourne CBD',
-// duration: '2 hours',
-// rating: 4.6,
-// price: 0,
-// category: 'culture',
-// hasReservation: true,
-// reviewCount: 987,
-// passType: 'selective'
-// },
-// {
-// id: '11',
-// name: 'Melbourne Zoo Adventure',
-// description: 'Meet over 320 animal species from around the world in naturalistic habitats',
-// image: 'https://images.unsplash.com/photo-1681429477985-30dc7b88dd5b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtZWxib3VybmUlMjB6b28lMjBhbmltYWxzfGVufDF8fHx8MTc1NzMzNzgxMHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'Parkville',
-// duration: '4 hours',
-// rating: 4.5,
-// price: 40,
-// category: 'family',
-// hasReservation: false,
-// reviewCount: 1156,
-// passType: 'selective'
-// },
-// {
-// id: '12',
-// name: 'Great Ocean Road Day Tour',
-// description: 'Scenic coastal drive featuring the famous Twelve Apostles and stunning ocean views',
-// image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxncmVhdCUyMG9jZWFuJTIwcm9hZCUyMGF1c3RyYWxpYXxlbnwxfHx8fDE3NTgxMDQ5Mzd8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral',
-// location: 'Great Ocean Road',
-// duration: '12 hours',
-// rating: 4.9,
-// price: 85,
-// category: 'adventure',
-// hasReservation: true,
-// reviewCount: 678,
-// passType: 'unlimited'
-// }
-// ];
-// const filterCategories = [
-// { value: 'with-reservation', label: 'With Reservation', count: 3 },
-// { value: 'without-reservation', label: 'Without Reservation', count: 3 },
-// { value: 'beach', label: 'Beach', count: 3 },
-// { value: 'adventure', label: 'Adventure', count: 3 },
-// { value: 'mountains', label: 'Mountains', count: 3 },
-// { value: 'family', label: 'Family Friendly', count: 3 }
-// ];
-// const passTypeCategories = [
-// { value: 'selective', label: 'Flexi Pass', count: 6 },
-// { value: 'unlimited', label: 'Unlimited Pass', count: 6 }
-// ];
interface AttractionsPageProps {
onSignInClick: () => void;
onSignOutClick?: () => void;
@@ -229,8 +49,11 @@ export function AttractionsPage({
const [selectedCategory, setSelectedCategory] = useState
(null);
const [selectedPassType, setSelectedPassType] = useState(null);
- const cityId = 1
-
+ const cityId = localStorage.getItem("cityId")
+ const cityName = localStorage.getItem("cityName")
+
+ console.log(cityName)
+
const { data: filterData, isLoading } = useGetAttractionFiltersQuery(cityId)
const { data: attractions } = useGetCustomerAttractionsQuery({
cityId, // required
@@ -239,9 +62,11 @@ export function AttractionsPage({
cardType: selectedPassType, // optional
search, // optional
});
-
+
if (isLoading) {
- return Loading...
+ return (
+
+ );
}
const handleAttractionClick = (attractionId: string) => {
@@ -254,7 +79,7 @@ export function AttractionsPage({
const showingFrom = 1;
const showingTo = Math.min(12, attractions?.length);
const totalItems = attractions?.length;
-
+
function handlePassTypeSelection(key: string, checked: boolean) {
if (checked) {
setSelectedPassType(key); // only keep the newly selected one
@@ -301,12 +126,12 @@ export function AttractionsPage({
Discover {' '}
- Melbourne's {' '}
+ {cityName}'s {' '}
Best {' '}
Attractions
- Skip the lines and explore Melbourne's most iconic destinations with your CityCard pass
+ Skip the lines and explore {cityName}'s most iconic destinations with your CityCard pass
{/* City Card Promotional Banner */}
@@ -403,7 +228,7 @@ export function AttractionsPage({
htmlFor={key}
className="font-poppins text-sm text-[#414141] cursor-pointer flex-1 font-normal"
>
- {key==="selective_pass" ?"Selective":"Unlimited"} ({count as number})
+ {key === "selective_pass" ? "Selective" : "Unlimited"} ({count as number})
))}
@@ -416,7 +241,7 @@ export function AttractionsPage({
{/* Header */}
-
Attractions in Melbourne
+
Attractions in {cityName}
{/* Results count */}
Showing {showingFrom}-{showingTo} of {totalItems} Item(s)
@@ -493,7 +318,7 @@ export function AttractionsPage({
) => {
+ onClick={(e: React.MouseEvent) => {
e.stopPropagation();
handleCheckoutClick();
}}
diff --git a/src/components/BlogDetailsPage.tsx b/src/pages/BlogDetailsPage.tsx
similarity index 98%
rename from src/components/BlogDetailsPage.tsx
rename to src/pages/BlogDetailsPage.tsx
index 675c7de..5c935cc 100644
--- a/src/components/BlogDetailsPage.tsx
+++ b/src/pages/BlogDetailsPage.tsx
@@ -1,13 +1,13 @@
import { useState } from 'react';
import { motion } from 'motion/react';
import { ArrowLeft, Calendar, User, Clock, Share2, BookmarkPlus, ThumbsUp, MessageSquare, Tag, MapPin } from 'lucide-react';
-import { Button } from './ui/button';
-import { Badge } from './ui/badge';
-import { Card, CardContent } from './ui/card';
-import { Separator } from './ui/separator';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { Button } from '../components/ui/button';
+import { Badge } from '../components/ui/badge';
+import { Card, CardContent } from '../components/ui/card';
+import { Separator } from '../components/ui/separator';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
interface User {
email: string;
diff --git a/src/components/BlogsPage.tsx b/src/pages/BlogsPage.tsx
similarity index 96%
rename from src/components/BlogsPage.tsx
rename to src/pages/BlogsPage.tsx
index df21c8b..677c947 100644
--- a/src/components/BlogsPage.tsx
+++ b/src/pages/BlogsPage.tsx
@@ -1,18 +1,18 @@
import { useState } from 'react';
import { motion } from 'motion/react';
import { Calendar, User, Clock, ArrowRight, Search, Tag, CreditCard, MapPin, Check, Smartphone, Star, Heart, Share2 } from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card';
-import { Badge } from './ui/badge';
-import { Input } from './ui/input';
-import Navbar from './Navbar';
+import { Button } from '../components/ui/button';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import { Input } from '../components/ui/input';
+import Navbar from '../components/Navbar';
// import { CitySubmenu } from './CitySubmenu';
-import { MobileAppSection } from './MobileAppSection';
-import { WhyChooseCityCards } from './WhyChooseCityCards';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
-import { ReviewsSection } from './ReviewsSection';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { WhyChooseCityCards } from '../components/WhyChooseCityCards';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
+import { ReviewsSection } from '../components/ReviewsSection';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
import imgFrame1597884939 from "figma:asset/5da1b0444c0d21bc7ee776c49e36e2a8ea4d3e12.png";
// Blog Mobile App Section Component
diff --git a/src/pages/CartPage.tsx b/src/pages/CartPage.tsx
new file mode 100644
index 0000000..1ac50de
--- /dev/null
+++ b/src/pages/CartPage.tsx
@@ -0,0 +1,889 @@
+import React, { useState } from 'react';
+import { motion, AnimatePresence } from 'motion/react';
+import {
+ Users, Baby, ShoppingBag, Trash2, Check, CreditCard, Mail,
+ ChevronRight, ChevronDown, Minus, Plus, Calendar, ArrowLeft, MapPin,
+ Zap, Shield, Clock, Percent, Sparkles
+} from 'lucide-react';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { useNavigate } from 'react-router-dom';
+import { useGetCardsinCartQuery } from '../Redux/services/cards.service';
+import LoadingSpinner from '../components/LoadingSpinner';
+// import { CheckoutStepper } from './CheckoutStepper';
+// import imgRectangle26 from "figma:asset/2496f45326066d3adf0d5494c1dc1595575894ff.png";
+
+/* ─── Types ─── */
+export interface CartItem {
+ id: string;
+ city: string;
+ cardType: 'Flexi' | 'Unlimited';
+ days: number;
+ adults: number;
+ children: number;
+ quantity: number;
+ pricePerUnit: number;
+ image: string;
+}
+
+interface Attraction {
+ id: string;
+ name: string;
+ image: string;
+ category: string;
+ included: boolean;
+}
+
+interface CartPageProps {
+ onBackClick: () => void;
+ onHomeClick: () => void;
+ onPassesClick: () => void;
+ onCheckoutClick?: () => void;
+ onSecureCheckoutClick?: (item: CartItem) => void;
+ onSignInClick: () => void;
+ onSignOutClick?: () => void;
+ onAttractionsClick?: () => void;
+ onBlogsClick?: () => void;
+ onHowItWorksClick?: () => void;
+ onFAQClick?: () => void;
+ onPrivacyPolicyClick?: () => void;
+ onAboutUsClick?: () => void;
+ onProfileClick?: () => void;
+ onCityCardsClick?: () => void;
+ onMagicItineraryClick?: () => void;
+ onPostCardsClick?: () => void;
+ onOffersClick?: () => void;
+ onSuperSavingsClick?: () => void;
+ onEsimsClick?: () => void;
+ onHotelDiscountsClick?: () => void;
+ onContactUsClick?: () => void;
+ onCartClick?: () => void;
+ currentPage?: string;
+ user?: { email: string; name: string } | null;
+}
+
+/* ─── Data ─── */
+const initialCartItems: CartItem[] = [
+ {
+ id: '1', city: 'Melbourne', cardType: 'Flexi', days: 3, adults: 3, children: 3, quantity: 2, pricePerUnit: 49.50,
+ image: 'https://images.unsplash.com/photo-1655963754904-2cf2b562a681?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjBmbGluZGVycyUyMHN0YXRpb24lMjBzdW5zZXR8ZW58MXx8fHwxNzc2MzE5NDgzfDA&ixlib=rb-4.1.0&q=80&w=1080',
+ },
+ {
+ id: '2', city: 'Sydney', cardType: 'Flexi', days: 3, adults: 3, children: 3, quantity: 2, pricePerUnit: 49.50,
+ image: 'https://images.unsplash.com/photo-1695018228065-2e0026c654af?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxTeWRuZXklMjBvcGVyYSUyMGhvdXNlJTIwaGFyYm91ciUyMGJyaWRnZXxlbnwxfHx8fDE3NzYzMTk0ODN8MA&ixlib=rb-4.1.0&q=80&w=1080',
+ },
+ {
+ id: '3', city: 'Melbourne', cardType: 'Unlimited', days: 6, adults: 2, children: 1, quantity: 1, pricePerUnit: 79.00,
+ image: 'https://images.unsplash.com/photo-1705120624704-0970afc29fea?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjBzdHJlZXQlMjBhcnQlMjBsYW5ld2F5c3xlbnwxfHx8fDE3NzYzMTk0ODR8MA&ixlib=rb-4.1.0&q=80&w=1080',
+ },
+];
+
+const dayOptions = [3, 6, 12, 18, 24];
+
+const attractionsData: Record> = {
+ Melbourne: {
+ Flexi: [
+ { id: 'mel-1', name: 'SEA LIFE Aquarium', image: 'https://images.unsplash.com/photo-1536845111858-bb269af65cb6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjBhcXVhcml1bSUyMHVuZGVyd2F0ZXJ8ZW58MXx8fHwxNzc2MzE5OTcwfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Wildlife', included: true },
+ { id: 'mel-2', name: 'Melbourne Zoo', image: 'https://images.unsplash.com/photo-1730074888490-31239540bacf?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjB6b28lMjB3aWxkbGlmZXxlbnwxfHx8fDE3NzYzMTk5NzB8MA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Wildlife', included: true },
+ { id: 'mel-3', name: 'Royal Botanic Gardens', image: 'https://images.unsplash.com/photo-1585894507208-eeead8cb9a56?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjBib3RhbmljYWwlMjBnYXJkZW4lMjBncmVlbnxlbnwxfHx8fDE3NzYzMTk5NzF8MA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Nature', included: true },
+ { id: 'mel-4', name: 'NGV Art Gallery', image: 'https://images.unsplash.com/photo-1752429242469-55ba7ec210d2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxhcnQlMjBnYWxsZXJ5JTIwbXVzZXVtJTIwaW50ZXJpb3J8ZW58MXx8fHwxNzc2MzE5OTczfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Culture', included: true },
+ ],
+ Unlimited: [
+ { id: 'mel-1', name: 'SEA LIFE Aquarium', image: 'https://images.unsplash.com/photo-1536845111858-bb269af65cb6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjBhcXVhcml1bSUyMHVuZGVyd2F0ZXJ8ZW58MXx8fHwxNzc2MzE5OTcwfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Wildlife', included: true },
+ { id: 'mel-2', name: 'Melbourne Zoo', image: 'https://images.unsplash.com/photo-1730074888490-31239540bacf?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjB6b28lMjB3aWxkbGlmZXxlbnwxfHx8fDE3NzYzMTk5NzB8MA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Wildlife', included: true },
+ { id: 'mel-3', name: 'Royal Botanic Gardens', image: 'https://images.unsplash.com/photo-1585894507208-eeead8cb9a56?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjBib3RhbmljYWwlMjBnYXJkZW4lMjBncmVlbnxlbnwxfHx8fDE3NzYzMTk5NzF8MA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Nature', included: true },
+ { id: 'mel-4', name: 'NGV Art Gallery', image: 'https://images.unsplash.com/photo-1752429242469-55ba7ec210d2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxhcnQlMjBnYWxsZXJ5JTIwbXVzZXVtJTIwaW50ZXJpb3J8ZW58MXx8fHwxNzc2MzE5OTczfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Culture', included: true },
+ { id: 'mel-5', name: 'Melbourne Star Wheel', image: 'https://images.unsplash.com/photo-1769880659692-fa77e04c5ffa?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxvYnNlcnZhdGlvbiUyMHdoZWVsJTIwYW11c2VtZW50JTIwbmlnaHR8ZW58MXx8fHwxNzc2MzE5OTc2fDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Experience', included: true },
+ { id: 'mel-6', name: 'Penguin Parade', image: 'https://images.unsplash.com/photo-1670391050251-d1cfbc3891c4?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxwZW5ndWlucyUyMHdpbGRsaWZlJTIwbmF0dXJlfGVufDF8fHx8MTc3NjMxOTk3Nnww&ixlib=rb-4.1.0&q=80&w=1080', category: 'Wildlife', included: true },
+ { id: 'mel-7', name: 'Yarra River Cruise', image: 'https://images.unsplash.com/photo-1562003914-018a4a6c2171?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxyaXZlciUyMGNydWlzZSUyMGJvYXQlMjBjaXR5fGVufDF8fHx8MTc3NjMxOTk3M3ww&ixlib=rb-4.1.0&q=80&w=1080', category: 'Experience', included: true },
+ ],
+ },
+ Sydney: {
+ Flexi: [
+ { id: 'syd-1', name: 'Harbour Bridge Climb', image: 'https://images.unsplash.com/photo-1767974062666-2685a670e353?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxTeWRuZXklMjBoYXJib3VyJTIwYnJpZGdlJTIwY2xpbWJ8ZW58MXx8fHwxNzc2MzE5OTcxfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Adventure', included: true },
+ { id: 'syd-2', name: 'Taronga Zoo', image: 'https://images.unsplash.com/photo-1704852168456-b70e08441917?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxTeWRuZXklMjB0YXJvbmdhJTIwem9vJTIwYW5pbWFsc3xlbnwxfHx8fDE3NzYzMTk5NzJ8MA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Wildlife', included: true },
+ { id: 'syd-3', name: 'Art Gallery NSW', image: 'https://images.unsplash.com/photo-1752429242469-55ba7ec210d2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxhcnQlMjBnYWxsZXJ5JTIwbXVzZXVtJTIwaW50ZXJpb3J8ZW58MXx8fHwxNzc2MzE5OTczfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Culture', included: true },
+ ],
+ Unlimited: [
+ { id: 'syd-1', name: 'Harbour Bridge Climb', image: 'https://images.unsplash.com/photo-1767974062666-2685a670e353?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxTeWRuZXklMjBoYXJib3VyJTIwYnJpZGdlJTIwY2xpbWJ8ZW58MXx8fHwxNzc2MzE5OTcxfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Adventure', included: true },
+ { id: 'syd-2', name: 'Taronga Zoo', image: 'https://images.unsplash.com/photo-1704852168456-b70e08441917?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxTeWRuZXklMjB0YXJvbmdhJTIwem9vJTIwYW5pbWFsc3xlbnwxfHx8fDE3NzYzMTk5NzJ8MA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Wildlife', included: true },
+ { id: 'syd-3', name: 'Art Gallery NSW', image: 'https://images.unsplash.com/photo-1752429242469-55ba7ec210d2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxhcnQlMjBnYWxsZXJ5JTIwbXVzZXVtJTIwaW50ZXJpb3J8ZW58MXx8fHwxNzc2MzE5OTczfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Culture', included: true },
+ { id: 'syd-4', name: 'Sydney Harbour Cruise', image: 'https://images.unsplash.com/photo-1562003914-018a4a6c2171?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxyaXZlciUyMGNydWlzZSUyMGJvYXQlMjBjaXR5fGVufDF8fHx8MTc3NjMxOTk3M3ww&ixlib=rb-4.1.0&q=80&w=1080', category: 'Experience', included: true },
+ { id: 'syd-5', name: 'SEA LIFE Aquarium', image: 'https://images.unsplash.com/photo-1536845111858-bb269af65cb6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxNZWxib3VybmUlMjBhcXVhcml1bSUyMHVuZGVyd2F0ZXJ8ZW58MXx8fHwxNzc2MzE5OTcwfDA&ixlib=rb-4.1.0&q=80&w=1080', category: 'Wildlife', included: true },
+ ],
+ },
+};
+
+const offersData: Record = {
+ Flexi: [
+ { title: 'Astor Hotels Ultra Deluxe', description: '15% Discount on all treatments for first-time clients', image: 'https://images.unsplash.com/photo-1715191904112-4a5d9c3089fa?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxsdXh1cnklMjBob3RlbCUyMHJlc29ydCUyMGV4dGVyaW9yfGVufDF8fHx8MTc3NjMyMTM2MXww&ixlib=rb-4.1.0&q=80&w=1080' },
+ { title: 'Green Valley Spa Lux', description: '20% Off on membership plans for new members', image: 'https://images.unsplash.com/photo-1759216853079-831ef8c8b327?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzcGElMjB3ZWxsbmVzcyUyMHRyZWF0bWVudCUyMGludGVyaW9yfGVufDF8fHx8MTc3NjMyMTM2M3ww&ixlib=rb-4.1.0&q=80&w=1080' },
+ { title: 'Harbour Dining Co.', description: '10% Off your first dining experience at waterfront', image: 'https://images.unsplash.com/photo-1676471932681-45fa972d848a?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxyZXN0YXVyYW50JTIwZmluZSUyMGRpbmluZ3xlbnwxfHx8fDE3NzYzMTkxNDl8MA&ixlib=rb-4.1.0&q=80&w=1080' },
+ { title: 'National Gallery Exhibition', description: 'Free audio guide with every gallery visit', image: 'https://images.unsplash.com/photo-1569342380852-035f42d9ca41?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtdXNldW0lMjBnYWxsZXJ5JTIwZXhoaWJpdGlvbnxlbnwxfHx8fDE3NzYyNDYwMjh8MA&ixlib=rb-4.1.0&q=80&w=1080' },
+ { title: 'Sunset Harbour Cruise', description: 'Complimentary drink on every sunset cruise booking', image: 'https://images.unsplash.com/photo-1765783800962-83d99ff7b158?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjcnVpc2UlMjBib2F0JTIwaGFyYm9yJTIwdG91cnxlbnwxfHx8fDE3NzYzMjE2MDd8MA&ixlib=rb-4.1.0&q=80&w=1080' },
+ ],
+ Unlimited: [
+ { title: 'SkyView Ferris Wheel', description: 'Complimentary second ride for all pass holders', image: 'https://images.unsplash.com/photo-1626209025747-b41ee6ec191f?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxmZXJyaXMlMjB3aGVlbCUyMGFtdXNlbWVudCUyMHBhcmt8ZW58MXx8fHwxNzc2MzE3NDI2fDA&ixlib=rb-4.1.0&q=80&w=1080' },
+ { title: 'City Mall Boutique', description: '15% Off at select boutique stores with your pass', image: 'https://images.unsplash.com/photo-1567966689299-819568579d36?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzaG9wcGluZyUyMG1hbGwlMjBib3V0aXF1ZSUyMHJldGFpbHxlbnwxfHx8fDE3NzYzMjEzNjN8MA&ixlib=rb-4.1.0&q=80&w=1080' },
+ { title: 'Adventure Outfitters', description: 'Free gear rental on outdoor adventure bookings', image: 'https://images.unsplash.com/photo-1761131221577-0716baffc6ef?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxhZHZlbnR1cmUlMjBzcG9ydHMlMjBvdXRkb29yJTIwYWN0aXZpdHl8ZW58MXx8fHwxNzc2MzIxMzYzfDA&ixlib=rb-4.1.0&q=80&w=1080' },
+ { title: 'Skyline Rooftop Lounge', description: 'Buy one get one free on signature cocktails', image: 'https://images.unsplash.com/photo-1642114955097-8f3d0e141641?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxyb29mdG9wJTIwYmFyJTIwY2l0eSUyMHNreWxpbmUlMjBuaWdodHxlbnwxfHx8fDE3NzYyNDU2NTl8MA&ixlib=rb-4.1.0&q=80&w=1080' },
+ { title: 'Yarra Valley Wines', description: 'Exclusive wine tasting tour with pass holders discount', image: 'https://images.unsplash.com/photo-1764649841527-c8852b63cc53?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx3aW5lJTIwdGFzdGluZyUyMHZpbmV5YXJkJTIwY2VsbGFyfGVufDF8fHx8MTc3NjMyMTYwOHww&ixlib=rb-4.1.0&q=80&w=1080' },
+ ],
+};
+
+const priceTable: Record> = {
+ Flexi: { 3: 49.5, 6: 69, 12: 99, 18: 129, 24: 159 },
+ Unlimited: { 3: 79, 6: 109, 12: 149, 18: 189, 24: 229 },
+};
+
+/* ═══════════════════════════════════════════
+ FIGMA CARD TYPE COMPONENTS
+ ═══════════════════════════════════════════ */
+
+function FlexiCardPreview({ city, adultPrice, childPrice, isSelected }: { city: string; adultPrice: number; childPrice: number; isSelected: boolean }) {
+ return (
+
+ {/* Card bg */}
+
+ {/* City image */}
+
+ {/*
*/}
+
+ {/* City name - left aligned */}
+
+ {/* Pricing */}
+
+
+ From
+ ${adultPrice}
+ /Adult
+
+
+ and
+ ${childPrice}
+ /Child
+
+
+ {/* Description */}
+
+
+ Dive into an extensive selection of thrilling destinations!
+
+
+ {/* Side tab - Flexi (pink) */}
+
+ Card
+ Flexi
+
+ {/* Selected checkmark */}
+ {isSelected && (
+
+
+
+ )}
+
+ );
+}
+
+function UnlimitedCardPreview({ city, adultPrice, childPrice, isSelected }: { city: string; adultPrice: number; childPrice: number; isSelected: boolean }) {
+ return (
+
+ {/* Card bg */}
+
+ {/* City image */}
+
+ {/*
*/}
+
+ {/* City name - left aligned */}
+
+ {/* Pricing */}
+
+
+ From
+ ${adultPrice}
+ /Adult
+
+
+ and
+ ${childPrice}
+ /Child
+
+
+ {/* Description */}
+
+
+ Dive into an extensive selection of thrilling destinations!
+
+
+ {/* Side tab - Unlimited (coral) */}
+
+ Card
+ Unlimited
+
+ {/* Selected checkmark */}
+ {isSelected && (
+
+
+
+ )}
+
+ );
+}
+
+/* ═══════════════════════════════════════════
+ CHECKOUT CONFIGURATION CARD (Mobile-first)
+ ═══════════════════════════════════════════ */
+
+function CheckoutConfigCard({
+ item,
+ onChange,
+ onProceed,
+}: {
+ item: CartItem;
+ onChange: (updates: Partial) => void;
+ onProceed: () => void;
+}) {
+ const [daysOpen, setDaysOpen] = useState(false);
+ const originalPrice = (item.pricePerUnit * item.quantity * 1.35);
+ const totalPrice = item.pricePerUnit * item.quantity;
+
+ const navigate = useNavigate()
+
+ return (
+
+ {/* City header */}
+
+
{item.city}
+
+
+ {item.cardType} Card
+
+
+
+
+ {/* Configuration rows */}
+
+ {/* No. of Adults */}
+
+
No. of Adults
+
+
item.adults > 1 && onChange({ adults: item.adults - 1 })}
+ disabled={item.adults <= 1}
+ className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors ${item.adults <= 1 ? 'bg-gray-100 text-gray-300 cursor-not-allowed' : 'bg-[#f95f62]/10 text-[#f95f62] hover:bg-[#f95f62]/20'
+ }`}
+ >
+
+
+
{item.adults}
+
onChange({ adults: item.adults + 1 })}
+ className="w-8 h-8 rounded-full bg-[#f95f62]/10 text-[#f95f62] hover:bg-[#f95f62]/20 flex items-center justify-center transition-colors"
+ >
+
+
+
+
+
+ {/* No. of Children */}
+
+
No. of Children
+
+
item.children > 0 && onChange({ children: item.children - 1 })}
+ disabled={item.children <= 0}
+ className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors ${item.children <= 0 ? 'bg-gray-100 text-gray-300 cursor-not-allowed' : 'bg-[#f95f62]/10 text-[#f95f62] hover:bg-[#f95f62]/20'
+ }`}
+ >
+
+
+
{item.children}
+
onChange({ children: item.children + 1 })}
+ className="w-8 h-8 rounded-full bg-[#f95f62]/10 text-[#f95f62] hover:bg-[#f95f62]/20 flex items-center justify-center transition-colors"
+ >
+
+
+
+
+
+ {/* No. of Days (dropdown) */}
+
+
+ {item.cardType === 'Flexi' ? 'No. of Attractions' : 'No. of Days'}
+
+
+
setDaysOpen(!daysOpen)}
+ className="flex items-center gap-2 border border-[#f95f62]/30 rounded-lg px-3 py-1.5 min-w-[72px] justify-between hover:border-[#f95f62] transition-colors"
+ >
+ {item.days}
+
+
+
+ {daysOpen && (
+
+ {dayOptions.map((d) => (
+ { onChange({ days: d }); setDaysOpen(false); }}
+ className={`w-full px-3 py-2 text-left font-poppins text-sm transition-colors ${item.days === d
+ ? 'bg-[#f95f62]/10 text-[#f95f62] font-medium'
+ : 'text-[#2a2a2a] hover:bg-gray-50 font-normal'
+ }`}
+ >
+ {d}
+
+ ))}
+
+ )}
+
+
+
+
+ {/* You Pay */}
+
+
You Pay
+
+
+ ${originalPrice.toFixed(0)}
+
+
+ ${totalPrice.toFixed(0)}
+
+
+
+
+
+ {/* Proceed button */}
+
+ navigate("/payment")}
+ className="w-full py-4 rounded-full bg-[#f95f62] text-white font-poppins text-base font-medium hover:bg-[#e8545a] transition-colors shadow-lg shadow-[#f95f62]/20"
+ >
+ Proceed to Pay
+
+
+
+ );
+}
+
+/* ═══════════════════════════════════════════
+ MAIN CART PAGE
+ ═══════════════════════════════════════════ */
+
+export function CartPage({
+ onBackClick,
+ onHomeClick,
+ onPassesClick,
+ onCheckoutClick,
+ onSecureCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onProfileClick,
+ onCityCardsClick,
+ onMagicItineraryClick,
+ onPostCardsClick,
+ onOffersClick,
+ onSuperSavingsClick,
+ onEsimsClick,
+ onHotelDiscountsClick,
+ onContactUsClick,
+ onCartClick,
+ currentPage,
+ user,
+}: CartPageProps) {
+ const [activeTab, setActiveTab] = useState<'cards' | 'postcards'>('cards');
+ const [cartItems, setCartItems] = useState(initialCartItems);
+ const [selectedCardId, setSelectedCardId] = useState(null);
+ const [view, setView] = useState<'cart' | 'checkout'>('cart');
+ const [checkoutItem, setCheckoutItem] = useState(null);
+
+ const navigate = useNavigate()
+
+ const cityId = localStorage.getItem("cityId")
+
+ const { data, isLoading } = useGetCardsinCartQuery(cityId)
+
+ const CartItems = data?.cartItems ?? []
+
+ if (isLoading) {
+ return (
+
+ )
+ }
+
+ const handleRemoveItem = (id: string) => {
+ setCartItems(prev => prev.filter(item => item.id !== id));
+ if (selectedCardId === id) setSelectedCardId(null);
+ };
+
+ const handleSelectCard = (id: string) => {
+ setSelectedCardId(prev => (prev === id ? null : id));
+ };
+
+ const handleGoToCheckout = (selectedItemId:number) => {
+ // const item = cartItems.find(i => i.id === selectedCardId);
+ // if (item) {
+ // setCheckoutItem({ ...item });
+ // setView('checkout');
+ // window.scrollTo({ top: 0, behavior: 'smooth' });
+ // }
+ navigate(`/payment/${selectedItemId}`)
+ };
+
+ const handleBackToCart = () => {
+ setView('cart');
+ setCheckoutItem(null);
+ };
+
+ const handleCheckoutItemChange = (updates: Partial) => {
+ if (!checkoutItem) return;
+ const updated = { ...checkoutItem, ...updates };
+ const prices = priceTable[updated.cardType];
+ if (prices && prices[updated.days] !== undefined) {
+ updated.pricePerUnit = prices[updated.days];
+ }
+ setCheckoutItem(updated);
+ };
+
+ const isEmpty = cartItems.length === 0;
+ const selectedItem = CartItems.find((i: any) => i.id === selectedCardId);
+ const attractions = checkoutItem ? (attractionsData[checkoutItem.city]?.[checkoutItem.cardType] || []) : [];
+ const offers = checkoutItem ? (offersData[checkoutItem.cardType] || []) : [];
+
+ return (
+
+
{ }} onSignInClick={onSignInClick} onSignOutClick={onSignOutClick}
+ onPassesClick={onPassesClick} onCheckoutClick={onCheckoutClick} onHomeClick={onHomeClick}
+ onAttractionsClick={onAttractionsClick} onBlogsClick={onBlogsClick} onHowItWorksClick={onHowItWorksClick}
+ onFAQClick={onFAQClick} onPrivacyPolicyClick={onPrivacyPolicyClick} onAboutUsClick={onAboutUsClick}
+ onProfileClick={onProfileClick} onCityCardsClick={onCityCardsClick} onMagicItineraryClick={onMagicItineraryClick}
+ onPostCardsClick={onPostCardsClick} onOffersClick={onOffersClick} onSuperSavingsClick={onSuperSavingsClick}
+ onEsimsClick={onEsimsClick} onHotelDiscountsClick={onHotelDiscountsClick} onCartClick={onCartClick}
+ currentPage={currentPage as any} user={user}
+ />
+
+
+ {view === 'cart' ? (
+ /* ─── CART VIEW ─── */
+
+ {/* Header */}
+
+
+ Your {' '}
+ Cart
+
+
+ {isEmpty ? 'Your cart is empty' : `${CartItems.length} ${CartItems.length === 1 ? 'item' : 'items'} in your cart`}
+
+
+
+ {/* Tab switcher */}
+ {/* Cards listed directly below */}
+
+ {/* Content */}
+
+ {activeTab === 'cards' ? (
+
+ {isEmpty ? (
+ } title="No cards in your cart" description="Browse our city passes to unlock amazing experiences and savings on your next adventure" actionLabel="Explore Passes" onAction={onPassesClick} />
+ ) : (
+
+ {/* Table header (desktop) */}
+
+
City Cards
+
Travellers
+ {/*
Qty
*/}
+
Price
+
+
+
+
+ {CartItems.map((item: any) => {
+ const isSelected = selectedCardId === item.id;
+ const totalPrice = item.pricePerUnit * item.quantity;
+
+ return (
+ handleSelectCard(item.id)}
+ className={`relative bg-white rounded-2xl overflow-hidden cursor-pointer transition-all duration-300 ${isSelected ? 'ring-2 ring-[#F95F62] shadow-lg shadow-[#F95F62]/8' : 'ring-1 ring-gray-100 hover:ring-gray-200 hover:shadow-md'
+ }`}
+ >
+ {/* Selected badge */}
+
+ {isSelected && (
+
+
+
+ )}
+
+
+ {/* Mobile layout */}
+
+
+
+
+
+
+
+
{item.city?.cityName}
+
+ {item.displayCardMode}
+ {item.cardMode === 'flexi' ? `${item.noOfAttractions} ${item.noOfAttractions === 1 ? 'attraction' : 'attractions'}` : `${item.noOfDays} ${item.noOfDays === 1 ? 'day' : 'days'}`}
+
+
+ {/*
{ e.stopPropagation(); handleRemoveItem(item.id); }} className="p-1.5 rounded-lg text-gray-300 hover:text-[#F95F62] hover:bg-red-50 transition-colors">
+
+ */}
+
+
+
{item.totalAdult}A · {item.totalChild}C
+
+ ${item.totalAmount}
+ {/* {item.quantity > 1 && ${item.pricePerUnit.toFixed(2)}/ea } */}
+
+
+
+
+
+ {/* Desktop layout */}
+
+
+
+
+
+
+
{item.city?.cityName}
+
+ {item.displayCardMode}
+ {item.cardMode === 'flexi' ? `${item.noOfAttractions} ${item.noOfAttractions === 1 ? 'attraction' : 'attractions'}` : `${item.noOfDays} ${item.noOfDays === 1 ? 'day' : 'days'}`}
+
+
+
+
+
+ {item.totalAdult}
+ {item.totalChild}
+
+
+ {/*
+ {item.quantity}
+
*/}
+
+ ${item.totalAmount}
+ {/* {item.quantity > 1 && ${item.pricePerUnit.toFixed(2)} per unit } */}
+
+ {/*
+ { e.stopPropagation(); handleRemoveItem(item.id); }} className="p-2 rounded-lg text-gray-300 hover:text-[#F95F62] hover:bg-red-50 transition-all" title="Remove from cart">
+
+
+
*/}
+
+
+ );
+ })}
+
+
+ {/* Bottom checkout bar */}
+
+
+ {selectedItem ? (
+ <>
+
+ Selected: {selectedItem.city.cityName} {selectedItem.displayCardMode} · {selectedItem.cardMode === 'flexi' ? `${selectedItem.noOfAttractions} ${selectedItem.noOfAttractions === 1 ? 'attraction' : 'attractions'}` : `${selectedItem.noOfDays} ${selectedItem.noOfDays === 1 ? 'day' : 'days'}`}
+
+
+ ${selectedItem.totalAmount}
+
+ >
+ ) : (
+
Tap a card above to select it for checkout
+ )}
+
+ handleGoToCheckout(selectedItem.id)}
+ disabled={!selectedItem}
+ className={`sm:w-auto px-8 py-3.5 rounded-xl font-poppins text-base font-medium flex items-center justify-center gap-2 transition-all duration-200 ${selectedItem ? 'bg-[#F95F62] text-white hover:bg-[#e8545a] shadow-lg shadow-[#F95F62]/20' : 'bg-gray-100 text-gray-400 cursor-not-allowed'
+ }`}
+ >
+ Secure Checkout
+
+
+
+ )}
+
+ ) : (
+
+ } title="No post cards yet" description="Send beautiful digital post cards to friends and family from your favourite destinations around the world" actionLabel="Browse Post Cards" onAction={onPostCardsClick} />
+
+ )}
+
+
+ ) : (
+ /* ─── CHECKOUT VIEW ─── */
+
+ {checkoutItem && (
+ <>
+ {/* Back */}
+
+ Back to Cart
+
+
+ {/* Stepper */}
+ {/* */}
+
+ {/* Checkout heading */}
+
+
+ Checkout {' '}
+ {checkoutItem.city}
+
+
+
+
+
+ {/* Left column */}
+
+
+ {/* ── Card Type Selection (Figma cards) ── */}
+
+
+ Choose Your Card
+
+
+ Select the card type that best suits your travel style
+
+
+ {/* Flexi */}
+ handleCheckoutItemChange({ cardType: 'Flexi' })}
+ className="relative transition-all duration-200"
+ >
+
+
+
+ {/* Unlimited */}
+ handleCheckoutItemChange({ cardType: 'Unlimited' })}
+ className="relative transition-all duration-200"
+ >
+
+
+
+
+ {/* ── Config Card (mobile only) — right after card selection ── */}
+
+ checkoutItem && onSecureCheckoutClick?.(checkoutItem)}
+ />
+
+
+ {/* Features Comparison */}
+
+
+ {/* Header */}
+
Features
+
Flexi
+
Unlimited
+ {[
+ { feature: 'Access to attractions', flexi: true, unlimited: true },
+ { feature: 'Entry to attractions', flexi: true, unlimited: true },
+ { feature: 'Access to experiences', flexi: true, unlimited: true },
+ { feature: 'Entry to sites', flexi: false, unlimited: true },
+ { feature: 'Access to venues', flexi: true, unlimited: true },
+ { feature: 'Entry to events', flexi: true, unlimited: true },
+ { feature: 'Access to experiences', flexi: false, unlimited: true },
+ { feature: 'Access to Itinerary creation', flexi: false, unlimited: true },
+ { feature: 'Access to postcard creation', flexi: false, unlimited: true },
+ ].map((row, i) => (
+
+
+ • {row.feature}
+
+
+ {row.flexi ? (
+
+
+
+ ) : (
+
–
+ )}
+
+
+ {row.unlimited ? (
+
+
+
+ ) : (
+
–
+ )}
+
+
+ ))}
+
+
+
+
+ {/* ── Offers ── */}
+
+
+ {checkoutItem.cardType} Card Offers
+
+
+ Exclusive deals and discounts included with your {checkoutItem.cardType} pass
+
+
+ {offers.map((offer, idx) => (
+
+
+
+
+
+
+
+
+ {offer.description}
+
+
+
+
+
+ ))}
+
+
+
+ {/* ── Available Attractions ── */}
+
+
+
Available Attractions
+ {attractions.length} included
+
+
+ Explore all the experiences you can enjoy with your pass
+
+
+ {attractions.map((a) => (
+
+
+
+
+
+ {a.category}
+
+
+
{a.name}
+
+
+
+
+ ))}
+
+
+
+
+ {/* Right column: Config card (desktop only, sticky) */}
+
+
+ checkoutItem && onSecureCheckoutClick?.(checkoutItem)}
+ />
+
+
+
+ >
+ )}
+
+ )}
+
+
+
+
+ );
+}
+
+/* ─── Empty state ─── */
+function EmptyState({ icon, title, description, actionLabel, onAction }: {
+ icon: React.ReactNode; title: string; description: string; actionLabel: string; onAction?: () => void;
+}) {
+ return (
+
+ {icon}
+ {title}
+ {description}
+ {actionLabel}
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/CheckoutPage.tsx b/src/pages/CheckoutPage.tsx
new file mode 100644
index 0000000..b6b8a79
--- /dev/null
+++ b/src/pages/CheckoutPage.tsx
@@ -0,0 +1,514 @@
+import React, { useEffect, useState } from 'react';
+import { motion, AnimatePresence } from 'motion/react';
+import {
+ ArrowLeft, Check, Minus, Plus, ChevronDown
+} from 'lucide-react';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { useNavigate } from 'react-router-dom';
+import { useAddCardToCartMutation, useGetCheckoutPageDataQuery } from '../Redux/services/cards.service';
+import LoadingSpinner from '../components/LoadingSpinner';
+import { toast } from 'sonner';
+
+/* ─── Types ─── */
+export interface CartItem {
+ id: string;
+ city: string;
+ cardType: 'Flexi' | 'Unlimited';
+ days: number;
+ adults: number;
+ children: number;
+ quantity: number;
+ pricePerUnit: number;
+ image: string;
+}
+
+interface Attraction {
+ id: string;
+ name: string;
+ image: string;
+ category: string;
+ included: boolean;
+}
+
+/* ─── FIGMA CARD PREVIEWS (Exact Copy) ─── */
+function FlexiCardPreview({ city, adultPrice, childPrice, isSelected, image }: { city: string; adultPrice: number; childPrice: number; isSelected: boolean, image: string; }) {
+ return (
+
+ {/* Card bg */}
+
+ {/* City image */}
+
+
+
+ {/* City name - left aligned */}
+
+ {/* Pricing */}
+
+
+ From
+ ${adultPrice}
+ /Adult
+
+
+ and
+ ${childPrice}
+ /Child
+
+
+ {/* Description */}
+
+
+ Dive into an extensive selection of thrilling destinations!
+
+
+ {/* Side tab - Flexi (pink) */}
+
+ Card
+ Flexi
+
+ {/* Selected checkmark */}
+ {isSelected && (
+
+
+
+ )}
+
+ );
+}
+
+function UnlimitedCardPreview({ city, adultPrice, childPrice, isSelected, image }: { city: string; adultPrice: number; childPrice: number; isSelected: boolean, image: string; }) {
+ return (
+
+ {/* Card bg */}
+
+ {/* City image */}
+
+
+
+ {/* City name - left aligned */}
+
+ {/* Pricing */}
+
+
+ From
+ ${adultPrice}
+ /Adult
+
+
+ and
+ ${childPrice}
+ /Child
+
+
+ {/* Description */}
+
+
+ Dive into an extensive selection of thrilling destinations!
+
+
+ {/* Side tab - Unlimited (coral) */}
+
+ Card
+ Unlimited
+
+ {/* Selected checkmark */}
+ {isSelected && (
+
+
+
+ )}
+
+ );
+}
+
+/* ─── CheckoutConfigCard (Exact Copy) ─── */
+function CheckoutConfigCard({
+ item,
+ onProceed,
+}: {
+ item: any;
+ onProceed: () => void;
+}) {
+ const [dropdownOpen, setDropdownOpen] = useState(false);
+ const [noOfAdults, setNoOfAdults] = useState(1)
+ const [noOfChildren, setNoOfChildren] = useState(0)
+ const [noOfAttractions, setNoOfAttractions] = useState(item?.minNumber);
+ const [noOfDays, setNoOfDays] = useState(item?.minNumber)
+
+ const cityId = localStorage.getItem("cityId")
+ const cityName = localStorage.getItem("cityName")
+ const cardTypeId = item?.cardType?.id
+ const cardId = item?.id
+ const cardMode = item?.cardType?.name === "selective_pass" ? "flexi" : "unlimited"
+ const adultPrice = item?.adultPrice * noOfAdults
+ const childPrice = item?.childPrice * noOfChildren
+ const basePrice = Math.round(adultPrice + childPrice)
+ const taxAmount = Math.round(basePrice * 0.1)
+ const strikedPrice = Math.round(basePrice + 20)
+
+ const [addCardToCart] = useAddCardToCartMutation()
+
+ useEffect(() => {
+ setNoOfAttractions(item?.minNumber)
+ setNoOfDays(item?.minNumber)
+ }, [item])
+
+ const numberArray = Array.from(
+ { length: item?.maxNumber - item?.minNumber + 1 },
+ (_, i) => item?.minNumber + i
+ );
+ const navigate = useNavigate();
+
+ const cardBookingDetails = {
+ cityXid: cityId,
+ cardTypeXid: cardTypeId,
+ cardXid: cardId,
+ cardMode, // stays as-is
+ totalAdult: noOfAdults,
+ baseAmount: basePrice, // static value
+ taxAmount,
+ totalChild: noOfChildren,
+ noOfAttractions,
+ noOfDays
+ };
+
+ const handleProceedToPayment = async () => {
+ try {
+ const response = await addCardToCart(cardBookingDetails);
+ const bookingId = response?.data?.id
+ if (bookingId) {
+ navigate(`/payment/${bookingId}`)
+ } else {
+ throw new Error(response?.error?.data?.message)
+ }
+ } catch (error:any) {
+ toast.error(error.message);
+ }
+ }
+
+ return (
+
+
+
{cityName}
+
+
+ {item?.cardType?.displayName}
+
+
+
+
+
+
No. of Adults
+
+
noOfAdults > 1 && setNoOfAdults((prev) => prev - 1)} disabled={noOfAdults <= 1} className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors ${noOfAdults <= 1 ? 'bg-gray-100 text-gray-300 cursor-not-allowed' : 'bg-[#f95f62]/10 text-[#f95f62] hover:bg-[#f95f62]/20'}`}>
+
+
+
{noOfAdults}
+
setNoOfAdults((prev) => prev + 1)} disabled={noOfAdults >= 15} className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors ${noOfAdults >= 15 ? 'bg-gray-100 text-gray-300 cursor-not-allowed' : 'bg-[#f95f62]/10 text-[#f95f62] hover:bg-[#f95f62]/20'}`}>
+
+
+
+
+
+
+
No. of Children
+
+
noOfChildren > 0 && setNoOfChildren((prev) => prev - 1)} disabled={noOfChildren <= 0} className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors ${noOfChildren <= 0 ? 'bg-gray-100 text-gray-300 cursor-not-allowed' : 'bg-[#f95f62]/10 text-[#f95f62] hover:bg-[#f95f62]/20'}`}>
+
+
+
{noOfChildren}
+
setNoOfChildren((prev) => prev + 1)} disabled={noOfChildren >= 10} className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors ${noOfChildren >= 10 ? 'bg-gray-100 text-gray-300 cursor-not-allowed' : 'bg-[#f95f62]/10 text-[#f95f62] hover:bg-[#f95f62]/20'}`}>
+
+
+
+
+
+
+
+ {item?.cardType?.name === 'selective_pass' ? 'No. of Attractions' : 'No. of Days'}
+
+
+
setDropdownOpen(!dropdownOpen)} className="flex items-center gap-2 border border-[#f95f62]/30 rounded-lg px-3 py-1.5 min-w-[72px] justify-between hover:border-[#f95f62] transition-colors">
+ {cardMode === "flexi" ? noOfAttractions : noOfDays}
+
+
+
+ {dropdownOpen && (
+
+ {numberArray.map((i) => (
+ {
+ cardMode === "flexi" ? setNoOfAttractions(i) : setNoOfDays(i);
+ setDropdownOpen(false);
+ }}
+ className={`w-full px-3 py-2 text-left font-poppins text-sm transition-colors ${(cardMode === "flexi" ? noOfAttractions === i : noOfDays === i)
+ ? "bg-[#f95f62]/10 text-[#f95f62] font-medium"
+ : "text-[#2a2a2a] hover:bg-gray-50 font-normal"
+ }`}
+
+ >
+ {i}
+
+ ))}
+
+ )}
+
+
+
+
+
+
You Pay
+
+ ${strikedPrice}
+ ${basePrice}
+
+
+
+
+
+
+ Proceed to Pay
+
+
+
+ );
+}
+
+/* ─── MAIN CHECKOUT PAGE 2 ─── */
+export function CheckoutPage({
+ onHomeClick,
+ onPassesClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onContactUsClick,
+ onSignInClick,
+ onSignOutClick,
+ onProfileClick,
+ user,
+ currentPage,
+}: any) {
+ const navigate = useNavigate();
+
+ // Default item (you can pass via props later)
+ const baseUrl = import.meta.env.VITE_BASE_URL;
+
+ const cityId = localStorage.getItem("cityId")
+ const { data: checkoutPageData, isLoading } = useGetCheckoutPageDataQuery(cityId)
+
+ const cityName = checkoutPageData?.city?.name ?? ""
+ const cityImage = checkoutPageData?.city?.heroBanner?.image ?? ""
+ const cards = checkoutPageData?.cards ?? []
+ const flexiCard = checkoutPageData?.cards[0] ?? null
+ const unlimitedCard = checkoutPageData?.cards[1] ?? null
+ const attractions = checkoutPageData?.attractions ?? [];
+
+ const [checkoutItem, setCheckoutItem] = useState(flexiCard);
+
+ useEffect(() => {
+ setCheckoutItem(flexiCard)
+ }, [cards])
+
+ if (isLoading) {
+ return
+ }
+
+ const handleCheckoutItemChange = (cardObject: any) => {
+ setCheckoutItem(cardObject);
+ };
+
+
+ return (
+
+
{ }}
+ onSignInClick={onSignInClick}
+ onSignOutClick={onSignOutClick}
+ onPassesClick={onPassesClick}
+ onCheckoutClick={() => { }}
+ onHomeClick={onHomeClick}
+ onAttractionsClick={onAttractionsClick}
+ onBlogsClick={onBlogsClick}
+ onHowItWorksClick={onHowItWorksClick}
+ onFAQClick={onFAQClick}
+ onPrivacyPolicyClick={onPrivacyPolicyClick}
+ onAboutUsClick={onAboutUsClick}
+ onProfileClick={onProfileClick}
+ onCityCardsClick={() => { }}
+ onMagicItineraryClick={() => { }}
+ onPostCardsClick={() => { }}
+ onOffersClick={() => { }}
+ onSuperSavingsClick={() => { }}
+ onEsimsClick={() => { }}
+ onHotelDiscountsClick={() => { }}
+ onCartClick={() => { }}
+ currentPage={currentPage}
+ user={user}
+ />
+
+
+
navigate(-1)} className="flex items-center gap-2 text-[#8e8e8e] hover:text-[#2a2a2a] transition-colors font-poppins text-sm font-normal mb-8">
+ Back
+
+
+
+
+ Checkout {' '}
+ {cityName}
+
+
+
+
+ {/* Left Column */}
+
+ {/* Card Type Selection */}
+
+
Choose Your Card
+
Select the card type that best suits your travel style
+
+ handleCheckoutItemChange(flexiCard)}>
+
+
+ handleCheckoutItemChange(unlimitedCard)}>
+
+
+
+
+ {/* Features Comparison (Exact Copy) */}
+
+
+
Features
+
Flexi
+
Unlimited
+ {[
+ { feature: 'Access to attractions', flexi: true, unlimited: true },
+ { feature: 'Entry to attractions', flexi: true, unlimited: true },
+ { feature: 'Access to experiences', flexi: true, unlimited: true },
+ { feature: 'Entry to sites', flexi: false, unlimited: true },
+ { feature: 'Access to venues', flexi: true, unlimited: true },
+ { feature: 'Entry to events', flexi: true, unlimited: true },
+ { feature: 'Access to experiences', flexi: false, unlimited: true },
+ { feature: 'Access to Itinerary creation', flexi: false, unlimited: true },
+ { feature: 'Access to postcard creation', flexi: false, unlimited: true },
+ ].map((row, i) => (
+
+
+ • {row.feature}
+
+
+
+ {row.unlimited ?
:
– }
+
+
+ ))}
+
+
+
+
+ {/* Offers Section (Exact) */}
+
+
{checkoutItem?.cardType?.displayName} Offers
+
Exclusive deals and discounts included with your {checkoutItem?.cardType.displayName} pass
+
+ {checkoutItem?.offers.map((offer: any) => (
+
+ ))}
+
+
+
+ {/* Attractions Section (Exact) */}
+
+
+
Available Attractions
+ {attractions.length} included
+
+
Explore all the experiences you can enjoy with your pass
+
+ {attractions.map((a: any) => (
+
+
+
+
+
+ {a.category}
+
+
+
{a.title}
+
+
+
+ ))}
+
+
+
+
+ {/* Right Column - Config Card */}
+
+
+ navigate("/payment")}
+ />
+
+
+
+ {/* Mobile Config Card */}
+
+ navigate("/payment")}
+ />
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/CityCardsPage.tsx b/src/pages/CityCardsPage.tsx
similarity index 96%
rename from src/components/CityCardsPage.tsx
rename to src/pages/CityCardsPage.tsx
index 1ae32fa..5a27856 100644
--- a/src/components/CityCardsPage.tsx
+++ b/src/pages/CityCardsPage.tsx
@@ -1,18 +1,15 @@
import React from 'react';
import { motion } from 'motion/react';
import { ArrowLeft, Star, MapPin, Clock, CreditCard, Users, Shield, Smartphone, Check } from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card';
-import { Badge } from './ui/badge';
-import Navbar from './Navbar';
-// import SubNavbar from './SubNavbar';
-import { Footer } from './Footer';
-import { MobileAppSection } from './MobileAppSection';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
+import { Button } from '../components/ui/button';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
import { FAQPage } from './FAQPage';
-import { HowItWorks } from './HowItWorks';
-import { WhyChooseCityCards } from './WhyChooseCityCards';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { HowItWorks } from '../components/HowItWorks';
+import { WhyChooseCityCards } from '../components/WhyChooseCityCards';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
import { Layout } from '../Layout';
interface User {
diff --git a/src/components/ContactUsPage.tsx b/src/pages/ContactUsPage.tsx
similarity index 97%
rename from src/components/ContactUsPage.tsx
rename to src/pages/ContactUsPage.tsx
index d8f9483..46852a3 100644
--- a/src/components/ContactUsPage.tsx
+++ b/src/pages/ContactUsPage.tsx
@@ -12,13 +12,13 @@ import {
ChevronRight,
CheckCircle
} from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent, CardHeader, CardTitle } from './ui/card';
-import { Input } from './ui/input';
-import { Label } from './ui/label';
-import { Textarea } from './ui/textarea';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
+import { Button } from '../components/ui/button';
+import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card';
+import { Input } from '../components/ui/input';
+import { Label } from '../components/ui/label';
+import { Textarea } from '../components/ui/textarea';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
interface ContactUsPageProps {
onBackClick: () => void;
diff --git a/src/pages/CreateMagicIternaryPage.tsx b/src/pages/CreateMagicIternaryPage.tsx
new file mode 100644
index 0000000..9353b8f
--- /dev/null
+++ b/src/pages/CreateMagicIternaryPage.tsx
@@ -0,0 +1,1087 @@
+import React, { useState } from 'react';
+import { motion, AnimatePresence } from 'motion/react';
+import {
+ ArrowLeft,
+ ArrowRight,
+ MapPin,
+ Sparkles,
+ CheckCircle,
+ X,
+ Clock,
+ Calendar,
+
+ Search,
+ Navigation,
+ Heart,
+ ChevronDown,
+ ChevronUp,
+ Share2,
+ Download,
+ ChevronRight,
+} from 'lucide-react';
+import { Button } from '../components/ui/button';
+import { Card, CardContent } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import { Progress } from '../components/ui/progress';
+import { Calendar as CalendarComponent } from '../components/ui/calendar';
+import { Input } from '../components/ui/input';
+import { Popover, PopoverContent, PopoverTrigger } from '../components/ui/popover';
+import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../components/ui/collapsible';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import svgRelaxPaths from '../imports/svg-s8leuc872s';
+import svgRunningPaths from '../imports/svg-hgtc6d03x0';
+import svgLuggagePaths from '../imports/svg-rfrt8mx1lu';
+import svgYogaPaths from '../imports/svg-rf4f5wcll0';
+import NounKidsIcon from '../imports/NounRelax65970551-9919-190';
+import NounSoloIcon from '../imports/NounRelax65970551-9919-186';
+import DietPizzaIcon from '../imports/NounRelax65970551-9919-366';
+import DietVeganIcon from '../imports/NounRelax65970551-9919-370';
+import DietPescatarianIcon from '../imports/NounRelax65970551-9919-374';
+import DietVegetarianIcon from '../imports/NounRelax65970551-9919-378';
+import DietHalalIcon from '../imports/NounRelax65970551-9919-382';
+import DietKosherIcon from '../imports/NounRelax65970551-9919-386';
+import MuseumNotInterestedIcon from '../imports/NounRelax65970551-9923-625';
+import MuseumMaybeIcon from '../imports/NounRelax65970551-9923-629';
+import MuseumSoundsGoodIcon from '../imports/NounRelax65970551-9923-633';
+import MuseumLoveItIcon from '../imports/NounRelax65970551-9923-637';
+import { useCreateMagicItineraryMutation } from '../Redux/services/itinerary.service';
+import { toast } from 'sonner';
+import { useNavigate } from 'react-router-dom';
+
+
+interface User {
+ email: string;
+ name: string;
+}
+
+interface CreateMagicItineraryPageProps {
+ onBackClick: () => void;
+ onHomeClick: () => void;
+ onMelbourneClick: () => void;
+ onPassesClick: () => void;
+ onCheckoutClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick: () => void;
+ onAttractionsClick: () => void;
+ onBlogsClick: () => void;
+ onHowItWorksClick: () => void;
+ onFAQClick: () => void;
+ onPrivacyPolicyClick: () => void;
+ onAboutUsClick: () => void;
+ onProfileClick: () => void;
+ onCityCardsClick: () => void;
+ onMagicItineraryClick: () => void;
+ onPostCardsClick: () => void;
+ onOffersClick: () => void;
+ onContactUsClick?: () => void;
+ onEsimsClick?: () => void;
+ onHotelDiscountsClick?: () => void;
+ currentPage: string;
+ user: User | null;
+}
+
+interface ItineraryData {
+ destination: string;
+ locationSearch: string;
+ startDate: Date | undefined;
+ endDate: Date | undefined;
+ energy: string;
+ withKids: boolean;
+ museums: string;
+ dietaryPreferences: string[];
+
+}
+
+export function CreateMagicItineraryPage({
+ onBackClick,
+ onHomeClick,
+ onMelbourneClick,
+ onPassesClick,
+ onCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onProfileClick,
+ onCityCardsClick,
+ onMagicItineraryClick,
+ onPostCardsClick,
+ onOffersClick,
+ onContactUsClick,
+ onEsimsClick,
+ onHotelDiscountsClick,
+ currentPage,
+ user
+}: CreateMagicItineraryPageProps) {
+ const [currentStep, setCurrentStep] = useState(1);
+ const [isGenerating, setIsGenerating] = useState(false);
+ const [showResults, setShowResults] = useState(false);
+ const [viewMode, setViewMode] = useState<'daily' | 'summary'>('daily');
+ const [selectedDayTab, setSelectedDayTab] = useState(1);
+
+ const [startDate, setStartDate] = useState(undefined);
+ const [tripEnergy, setTripEnergy] = useState("")
+ const [travellingWithKids, setTravellingWithKids] = useState(undefined)
+ const [dietaryPreferences, setDietaryPreferences] = useState([])
+ const [artAndMuseums, setArtAndMuseums] = useState(undefined)
+
+ const [itineraryData, setItineraryData] = useState({
+ destination: 'melbourne',
+ locationSearch: 'Melbourne',
+ startDate: undefined,
+ endDate: undefined,
+ energy: '',
+ withKids: false,
+ museums: '',
+ dietaryPreferences: [],
+
+ });
+
+ const [generatedItinerary, setGeneratedItinerary] = useState(null);
+ const [favorites, setFavorites] = useState>(new Set());
+ const [openDays, setOpenDays] = useState>(new Set([1])); // First day open by default
+ const [selectedActivity, setSelectedActivity] = useState(null);
+ const [createMagicItinerary] = useCreateMagicItineraryMutation();
+
+ const navigate = useNavigate()
+
+ const toggleFavorite = (activityKey: string) => {
+ setFavorites(prev => {
+ const newSet = new Set(prev);
+ if (newSet.has(activityKey)) {
+ newSet.delete(activityKey);
+ } else {
+ newSet.add(activityKey);
+ }
+ return newSet;
+ });
+ };
+
+ const toggleDay = (dayNumber: number) => {
+ setOpenDays(prev => {
+ const newSet = new Set(prev);
+ if (newSet.has(dayNumber)) {
+ newSet.delete(dayNumber);
+ } else {
+ newSet.add(dayNumber);
+ }
+ return newSet;
+ });
+ };
+
+ const handleActivityClick = (activityKey: string) => {
+ setSelectedActivity(selectedActivity === activityKey ? null : activityKey);
+ };
+
+ const totalSteps = 5;
+ const progress = (currentStep / totalSteps) * 100;
+
+
+ const cityId = localStorage.getItem("cityId")
+
+ const itineraryDetails = {
+ cityXid: cityId, // from your variable
+ startDate: startDate, // from your state
+ tripEnergy: tripEnergy, // from your variable
+ travelingWithKids: travellingWithKids, // note spelling difference
+ dietaryPreferences: dietaryPreferences, // your string[] state
+ preferences: {
+ artAndMuseums: artAndMuseums,
+ }
+ };
+
+
+ const handleNext = () => {
+ if (currentStep < totalSteps) {
+ setCurrentStep(currentStep + 1);
+ } else {
+ generateItinerary();
+ }
+ };
+
+ const handlePrevious = () => {
+ if (currentStep > 1) {
+ setCurrentStep(currentStep - 1);
+ }
+ };
+
+ const generateItinerary = async () => {
+ try {
+ setIsGenerating(true);
+ const response = await createMagicItinerary(itineraryDetails);
+ setGeneratedItinerary(response);
+ if (response?.data?.id) {
+ navigate(`/itinerary-summary/${response?.data?.id}`)
+ toast.success("Itinerary created successfully!");
+ } else {
+ throw new Error(response?.error?.data?.message)
+ }
+ } catch (error: any) {
+ toast.error(error.message);
+ } finally {
+ setIsGenerating(false);
+ }
+ }
+
+ const canProceed = () => {
+ switch (currentStep) {
+ case 1: return !!startDate;
+ case 2: return tripEnergy !== '';
+ case 3: return travellingWithKids !== undefined; // Kids question - always allow proceeding
+ case 4: return true; // Dietary preferences - always allow proceeding
+ case 5: return artAndMuseums !== undefined; // Optional preference questions
+ default: return true;
+ }
+ };
+
+ const handleDietaryToggle = (option: string) => {
+ setDietaryPreferences(prev =>
+ prev.includes(option)
+ ? prev.filter(item => item !== option) // remove if already present
+ : [...prev, option] // add if not present
+ );
+ };
+
+
+ const renderStepper = () => (
+
+
+ {Array.from({ length: totalSteps }, (_, index) => {
+ const stepNumber = index + 1;
+ const isActive = stepNumber === currentStep;
+ const isCompleted = stepNumber < currentStep;
+
+ return (
+
+
+ {isCompleted ? (
+
+ ) : (
+ {stepNumber}
+ )}
+
+ {stepNumber < totalSteps && (
+
+ )}
+
+ );
+ })}
+
+
+ );
+
+ const renderStep = () => {
+ if (isGenerating) {
+ return (
+
+
+
+
+
+
+
+
+
Creating your
+
Magic Itinerary
+
+ Your smart itinerary is being created — we're crafting the perfect travel experience based on your preferences...
+
+
+
+
+
+ );
+ }
+
+ if (showResults) {
+ const totalStops = generatedItinerary?.dailyPlans?.reduce((acc: number, day: any) => acc + (day.activities?.length || 0), 0) || 0;
+ const tripStartDate = itineraryData.startDate ? itineraryData.startDate.toLocaleDateString('en-AU', { day: '2-digit', month: '2-digit', year: 'numeric' }) : '';
+ const selectedDayPlan = generatedItinerary?.dailyPlans?.find((d: any) => d.day === selectedDayTab);
+
+ return (
+
+ {/* Title */}
+
+
+ Your
+
+
+ Melbourne Magic Itinerary
+
+
+
+ {/* Trip Details Card */}
+
+ {/* Background Image */}
+
+
+
+
+
Your Trip
+
Melbourne, Australia
+
+
+ {/* Stats Row */}
+
+
+ {generatedItinerary?.totalDays}
+ Days
+
+
+ {totalStops}
+ Stops
+
+
+ {tripStartDate}
+ Start Date
+
+
+
+
+ {/* Share & Download Buttons */}
+
+
+
+ Share
+
+
+
+ Download
+
+
+
+ {/* View Toggle */}
+
+
+ setViewMode('daily')}
+ className={`px-6 py-2.5 rounded-full font-poppins font-medium text-sm transition-all ${viewMode === 'daily'
+ ? 'bg-white shadow-sm text-gray-900'
+ : 'text-gray-500 hover:text-gray-700'
+ }`}
+ >
+ Daily View
+
+ setViewMode('summary')}
+ className={`px-6 py-2.5 rounded-full font-poppins font-medium text-sm transition-all ${viewMode === 'summary'
+ ? 'bg-white shadow-sm text-gray-900'
+ : 'text-gray-500 hover:text-gray-700'
+ }`}
+ >
+ Summary
+
+
+
+
+ {/* Daily View */}
+ {viewMode === 'daily' && (
+
+ {/* Day Tabs */}
+
+ {generatedItinerary?.dailyPlans?.map((day: any) => (
+ setSelectedDayTab(day.day)}
+ className={`px-5 py-2.5 rounded-xl whitespace-nowrap font-poppins text-base transition-all ${selectedDayTab === day.day
+ ? 'text-primary font-semibold bg-primary/10 border border-primary/20'
+ : 'text-gray-400 font-medium hover:text-gray-600'
+ }`}
+ >
+ Day {day.day}
+
+ ))}
+ {generatedItinerary?.dailyPlans?.length > 4 && (
+
+
+
+ )}
+
+
+ {/* Activities for selected day */}
+ {selectedDayPlan && (
+
+
+ {selectedDayPlan.activities?.map((activity: any, actIndex: number) => {
+ const activityKey = `day${selectedDayPlan.day}-act${actIndex}`;
+ const isFavorite = favorites.has(activityKey);
+
+ return (
+
+ {/* Time Label */}
+
+ {activity.time}
+
+
+ {/* Activity Card */}
+
+
+ {/* Image */}
+
+
+ {/* Favorite Button */}
+
+ toggleFavorite(activityKey)}
+ >
+
+
+
+ {/* Get Directions Badge */}
+
+
+
+ Get Directions
+
+
+
+
+ {/* Content */}
+
+
+ {activity.activity}
+
+
+ {activity.address}
+
+
+ {/* Category Tags */}
+
+ {activity.categories?.map((cat: string, ci: number) => (
+
+ {cat}
+
+ ))}
+
+
+ {/* Bullet Points */}
+
+ {activity.description?.map((detail: string, di: number) => (
+
+ •
+ {detail}
+
+ ))}
+
+
+
+
+
+ );
+ })}
+
+
+ )}
+
+ )}
+
+ {/* Summary View */}
+ {viewMode === 'summary' && (
+
+ {generatedItinerary?.dailyPlans?.map((day: any, dayIndex: number) => {
+ const dayDate = itineraryData.startDate
+ ? new Date(new Date(itineraryData.startDate).setDate(itineraryData.startDate.getDate() + dayIndex)).toLocaleDateString('en-AU', { day: '2-digit', month: '2-digit', year: 'numeric' })
+ : '';
+
+ return (
+
+ {/* Day Header */}
+
+
Day {day.day}:
+
+
+ {dayDate}
+
+
+
+ {/* Activity List */}
+
+ {day.activities?.map((activity: any, actIndex: number) => {
+ const activityKey = `summary-day${day.day}-act${actIndex}`;
+ const isExpanded = selectedActivity === activityKey;
+
+ return (
+
+
handleActivityClick(activityKey)}
+ >
+
+ {activity.time}: {activity.activity}
+
+
+
+
+
+ {isExpanded && (
+
+
+ {activity.description?.map((detail: string, di: number) => (
+
+ •
+ {detail}
+
+ ))}
+
+
+ Get directions
+
+
+
+ )}
+
+
+ );
+ })}
+
+
+ );
+ })}
+
+ )}
+
+ {/* Bottom Action */}
+
+ { setShowResults(false); setCurrentStep(1); }}
+ className="w-full font-poppins font-semibold px-8 py-3 rounded-xl bg-primary hover:bg-primary/90 text-white shadow-md shadow-primary/20"
+ >
+ Create Another Itinerary
+
+
+
+ );
+ }
+
+ switch (currentStep) {
+ case 1:
+ return (
+
+ {/* Destination badge — centered */}
+
+
+
+ Melbourne, Australia
+
+
+
+ {/* Question — left aligned */}
+
+
+ When are you planning {' '}
+ to visit?
+
+
Pick your arrival date and we'll build your itinerary around it
+
+
+ {/* Inline Calendar — centered */}
+
+
+
+
+
+
+ {startDate
+ ? startDate.toLocaleDateString('en-AU', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' })
+ : 'Select your arrival date'}
+
+
+
setStartDate(date)}
+ disabled={(date: Date) => date < new Date()}
+ initialFocus
+ className="p-3 mx-auto"
+ classNames={{
+ month: "flex flex-col gap-4 items-center w-full",
+ caption: "flex justify-center pt-1 relative items-center w-full transition-all duration-300",
+ head_row: "flex w-full justify-around",
+ head_cell: "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem] text-center",
+ row: "flex w-full mt-2 justify-around",
+ cell: "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:rounded-full h-9 w-9 flex items-center justify-center transition-all duration-200 ease-out [&:has([aria-selected])]:scale-110",
+ day: "h-9 w-9 p-0 font-normal aria-selected:opacity-100 flex items-center justify-center rounded-full transition-all duration-200 ease-out hover:scale-110 hover:bg-primary/10 active:scale-95 cursor-pointer",
+ day_selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-full shadow-lg shadow-primary/30 scale-110 transition-all duration-200 ease-out",
+ day_today: "bg-accent text-accent-foreground ring-2 ring-primary/20",
+ day_disabled: "text-muted-foreground opacity-50 hover:scale-100 hover:bg-transparent cursor-not-allowed",
+ table: "w-full border-collapse",
+ }}
+ />
+
+
+ {/* Confirmation pill */}
+ {startDate && (
+
+
+
+
Arrival date set!
+
+ {startDate.toLocaleDateString('en-AU', { day: 'numeric', month: 'long', year: 'numeric' })}
+
+
+
+ )}
+
+
+
+ );
+
+ case 2:
+ return (
+
+
+
+ What kind of energy are you after on {' '}
+ this trip?
+
+
Choose the pace that suits you best
+
+
+
+ {([
+ {
+ id: 'relaxed',
+ name: 'Relaxed',
+ renderIcon: (sel: boolean) => (
+
+
+
+ )
+ },
+ {
+ id: 'balanced',
+ name: 'Balanced',
+ renderIcon: (sel: boolean) => (
+
+
+
+
+ )
+ },
+ {
+ id: 'active',
+ name: 'Action Packed',
+ renderIcon: (sel: boolean) => (
+
+
+
+ )
+ },
+ {
+ id: 'adventure',
+ name: 'Explorer',
+ renderIcon: (sel: boolean) => (
+
+
+
+ )
+ }
+ ] as Array<{ id: string; name: string; renderIcon: (sel: boolean) => React.ReactElement }>).map((option) => {
+ const isSelected = tripEnergy === option.id;
+ return (
+
+ setTripEnergy(option.id)}
+ >
+
+ {option.renderIcon(false)}
+
+
+ {option.name}
+
+
+
+ );
+ })}
+
+
+ );
+
+ case 3:
+ return (
+
+
+
+ Are you {' '}
+ travelling with kids?
+
+
We'll tailor the experience to your group
+
+
+
+ {[
+ { value: true, label: 'Yes', Icon: NounKidsIcon },
+ { value: false, label: 'No', Icon: NounSoloIcon }
+ ].map((option) => {
+ const isSelected = travellingWithKids === option.value;
+ return (
+
+ setTravellingWithKids(option.value)}
+ >
+
+
+
+
+ {option.label}
+
+
+
+ );
+ })}
+
+
+ );
+
+ case 4:
+ return (
+
+
+
+ Do you follow any {' '}
+ dietary preferences?
+
+
We'll find the best food spots for you
+
+
+
+ {[
+ { id: 'no-restriction', label: 'No Restrictions', Icon: DietPizzaIcon },
+ { id: 'veg', label: 'Vegetarian', Icon: DietVegetarianIcon },
+ { id: 'vegan', label: 'Vegan', Icon: DietVeganIcon },
+ { id: 'pescatarian', label: 'Pescatarian', Icon: DietPescatarianIcon },
+ { id: 'halal', label: 'Halal', Icon: DietHalalIcon },
+ { id: 'kosher', label: 'Kosher', Icon: DietKosherIcon }
+ ].map((option) => {
+ const isSelected = dietaryPreferences.includes(option.id);
+ return (
+
+ handleDietaryToggle(option.id)}
+ >
+
+
+
+
+ {option.label}
+
+
+
+ );
+ })}
+
+
+ );
+
+ case 5:
+ return (
+
+
+
+ Do you enjoy visiting {' '}
+ museums and art galleries?
+
+
Help us personalise your cultural experiences
+
+
+
+ {[
+ { id: 0, label: 'Not interested', Icon: MuseumNotInterestedIcon },
+ { id: 1, label: 'Maybe one or two', Icon: MuseumMaybeIcon },
+ { id: 2, label: 'Sounds good!', Icon: MuseumSoundsGoodIcon },
+ { id: 3, label: 'Absolutely love it!', Icon: MuseumLoveItIcon }
+ ].map((option) => {
+ const isSelected = artAndMuseums === option.id;
+ return (
+
+ setArtAndMuseums(option.id)}
+ >
+
+
+
+
+ {option.label}
+
+
+
+ );
+ })}
+
+
+ );
+
+
+
+ default:
+ return null;
+ }
+ };
+
+ return (
+
+
{ }}
+ onHomeClick={onHomeClick}
+ onPassesClick={onPassesClick}
+ onSignInClick={onSignInClick}
+ onAttractionsClick={onAttractionsClick}
+ onBlogsClick={onBlogsClick}
+ onHowItWorksClick={onHowItWorksClick}
+ onFAQClick={onFAQClick}
+ onPrivacyPolicyClick={onPrivacyPolicyClick}
+ onAboutUsClick={onAboutUsClick}
+ onProfileClick={onProfileClick}
+ onCityCardsClick={onCityCardsClick}
+ onMagicItineraryClick={onMagicItineraryClick}
+ onPostCardsClick={onPostCardsClick}
+ onOffersClick={onOffersClick}
+ currentPage="create-itinerary"
+ isUserSignedIn={!!user}
+ user={user}
+ />
+
+
+
+ {/* Step header — left aligned, travel-magazine style */}
+ {!isGenerating && !showResults && (
+
+ {/* Step label */}
+
+
+ Step {currentStep} of {totalSteps}
+
+
+
+ {/* Dashed flight-path progress */}
+
+ {Array.from({ length: totalSteps }, (_, index) => {
+ const stepNumber = index + 1;
+ const isCompleted = stepNumber < currentStep;
+ const isActive = stepNumber === currentStep;
+ return (
+
+
+ {isCompleted ? (
+
+ ) : (
+ {stepNumber}
+ )}
+
+ {stepNumber < totalSteps && (
+
+ {Array.from({ length: 4 }).map((_, di) => (
+
+ ))}
+
+ )}
+
+ );
+ })}
+
+
+ {/* Thin fill bar */}
+
+
+
+
+ )}
+
+ {/* Main content card */}
+
+ {!isGenerating && !showResults && (
+
+
+ {renderStep()}
+
+
+ {/* Navigation */}
+
+
+
+ Back
+
+
+
+ {currentStep === totalSteps ? 'Create My Itinerary' : 'Continue'}
+ {currentStep !== totalSteps && }
+ {currentStep === totalSteps && }
+
+
+
+ )}
+
+ {(isGenerating || showResults) && (
+
+ {renderStep()}
+
+ )}
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/DiscoverPage.tsx b/src/pages/DiscoverPage.tsx
similarity index 98%
rename from src/components/DiscoverPage.tsx
rename to src/pages/DiscoverPage.tsx
index 1ccebfa..85c1fc8 100644
--- a/src/components/DiscoverPage.tsx
+++ b/src/pages/DiscoverPage.tsx
@@ -1,11 +1,12 @@
import { ArrowRight, Check, CreditCard, DollarSign, MapPin, Palette, Sparkles, Ticket, Zap } from 'lucide-react';
import { AnimatePresence, motion } from 'motion/react';
-import { useEffect, useState } from 'react';
+import { use, useEffect, useState } from 'react';
import { Layout } from '../Layout';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { MobileAppSection } from './MobileAppSection';
-import { TrustSection } from './TrustSection';
-import { Button } from './ui/button';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { TrustSection } from '../components/TrustSection';
+import { Button } from '../components/ui/button';
+import { useNavigate } from 'react-router-dom';
interface User {
email: string;
@@ -68,6 +69,8 @@ export function DiscoverPage({
const [direction, setDirection] = useState(0);
const [activeStep, setActiveStep] = useState(0);
+ const navigate =useNavigate();
+
const handleStepInView = (index: number) => {
setActiveStep(index);
};
@@ -483,7 +486,7 @@ export function DiscoverPage({
transition={{ duration: 0.6, delay: 0.1 }}
>
Unlock Your
- Adventure
+ Adventure
navigate('/passes')}
+ className="cursor-pointer w-full py-6 rounded-full font-poppins font-semibold text-lg bg-gray-900 hover:bg-black text-white transition-all duration-300"
>
VIEW FLEXI OPTIONS
@@ -743,8 +746,8 @@ export function DiscoverPage({
navigate('/passes')}
+ className=" cursor-pointer w-full py-6 rounded-full font-poppins font-semibold text-lg bg-primary hover:bg-primary/90 text-white transition-all duration-300"
>
VIEW UNLIMITED OPTIONS
diff --git a/src/components/DownloadAppPage.tsx b/src/pages/DownloadAppPage.tsx
similarity index 99%
rename from src/components/DownloadAppPage.tsx
rename to src/pages/DownloadAppPage.tsx
index 7b0c1e0..fe125a4 100644
--- a/src/components/DownloadAppPage.tsx
+++ b/src/pages/DownloadAppPage.tsx
@@ -1,12 +1,12 @@
import { useState } from 'react';
import { motion } from 'motion/react';
import { ArrowLeft, ChevronRight, QrCode, CreditCard, Calendar, MapPin, Star, CheckCircle, Sparkles, Users, Clock, Gift, Ticket } from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent } from './ui/card';
-import { Badge } from './ui/badge';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { Button } from '../components/ui/button';
+import { Card, CardContent } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
interface User {
email: string;
diff --git a/src/components/HotelDiscountsPage.tsx b/src/pages/HotelDiscountsPage.tsx
similarity index 98%
rename from src/components/HotelDiscountsPage.tsx
rename to src/pages/HotelDiscountsPage.tsx
index 3811808..798f4f0 100644
--- a/src/components/HotelDiscountsPage.tsx
+++ b/src/pages/HotelDiscountsPage.tsx
@@ -1,10 +1,6 @@
import { motion } from 'motion/react';
import { BadgePercent, Clock, Crown, Check, ArrowRight } from 'lucide-react';
-import { Button } from './ui/button';
-import Navbar from './Navbar';
-// import { SubNavbar } from './SubNavbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
import cityCardsLogo from '../assets/cityLogo.png';
import marriottHotelImage from '../assets/marriott-hotel.png';
import { Layout } from '../Layout';
diff --git a/src/pages/ItinerarySummaryPage.tsx b/src/pages/ItinerarySummaryPage.tsx
new file mode 100644
index 0000000..4b69ffb
--- /dev/null
+++ b/src/pages/ItinerarySummaryPage.tsx
@@ -0,0 +1,379 @@
+import React, { useCallback, useEffect, useState } from 'react';
+import { motion, AnimatePresence } from 'motion/react';
+import {
+ MapPin,
+ Calendar,
+ ChevronDown,
+ Share2,
+ Download,
+ ChevronRight,
+ Loader2,
+} from 'lucide-react';
+import { Button } from '../components/ui/button';
+import { Card, CardContent } from '../components/ui/card';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { useDownloadItineraryQuery, useGetItineraryDetailsByIdQuery } from '../Redux/services/itinerary.service';
+import { toast } from 'sonner';
+import { useNavigate, useParams } from 'react-router-dom';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+
+const ItinerarySummaryPage = () => {
+ const [viewMode, setViewMode] = useState<'daily' | 'summary'>('daily');
+ const [selectedDayTab, setSelectedDayTab] = useState(1);
+ const [selectedActivity, setSelectedActivity] = useState(null);
+
+ const navigate = useNavigate();
+
+ const { itineraryId } = useParams()
+ const { data: itineraryDetails, isLoading: itineraryDetailsLoading } = useGetItineraryDetailsByIdQuery(itineraryId);
+ // Download logic using standard query with manual trigger
+ const [shouldDownload, setShouldDownload] = useState(false);
+ const { data: pdfBlob, isFetching: isDownloading, refetch } = useDownloadItineraryQuery
+ (itineraryId!, {
+ skip: !shouldDownload || !itineraryId,
+ });
+
+ useEffect(() => {
+ if (shouldDownload && pdfBlob) {
+ // Create download link
+ const url = window.URL.createObjectURL(pdfBlob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = `itinerary-${itineraryId}.pdf`;
+ document.body.appendChild(link);
+ link.click();
+ link.remove();
+ window.URL.revokeObjectURL(url);
+ toast.success('Itinerary downloaded successfully!');
+ setShouldDownload(false); // reset trigger
+ }
+ }, [pdfBlob, shouldDownload, itineraryId]);
+
+ const handleDownloadItinerary = useCallback(() => {
+ if (!itineraryId) {
+ toast.error('Itinerary ID not found');
+ return;
+ }
+ setShouldDownload(true);
+ refetch(); // manually trigger the download query
+ }, [itineraryId, refetch]);
+
+ const generatedItinerary = itineraryDetails ?? null;
+ const days = generatedItinerary?.days ?? [];
+ const summaries = generatedItinerary?.summary ?? [];
+
+ const selectedDayPlan = days?.find((d: any) => d.dayNumber === selectedDayTab);
+
+
+ return (
+
+ {/* Navbar */}
+
+
+ {/* Title */}
+
+
+ Your
+
+
+ {generatedItinerary?.title}
+
+
+
+ {/* Trip Details Card */}
+
+ {/* Background Image */}
+
+
+
+
+
Your Trip
+
{generatedItinerary?.city}
+
+
+ {/* Stats Row */}
+
+
+ {generatedItinerary?.totalDays}
+ Days
+
+
+ {generatedItinerary?.totalStops}
+ Stops
+
+
+ {generatedItinerary?.days[0]?.date}
+ Start Date
+
+
+
+
+ {/* Share & Download Buttons */}
+
+
+
+ Share
+
+
+ {isDownloading ? (
+
+ ) : (
+
+ )}
+
+ Download
+
+
+
+ {/* View Toggle */}
+
+
+ setViewMode('daily')}
+ className={`px-6 py-2.5 rounded-full font-poppins font-medium text-sm transition-all ${viewMode === 'daily'
+ ? 'bg-white shadow-sm text-gray-900'
+ : 'text-gray-500 hover:text-gray-700'
+ }`}
+ >
+ Daily View
+
+ setViewMode('summary')}
+ className={`px-6 py-2.5 rounded-full font-poppins font-medium text-sm transition-all ${viewMode === 'summary'
+ ? 'bg-white shadow-sm text-gray-900'
+ : 'text-gray-500 hover:text-gray-700'
+ }`}
+ >
+ Summary
+
+
+
+
+ {/* Daily View */}
+ {viewMode === 'daily' && (
+
+ {/* Day Tabs */}
+
+ {days?.map((day: any) => (
+ setSelectedDayTab(day.dayNumber)}
+ className={`px-5 py-2.5 rounded-xl whitespace-nowrap font-poppins text-base transition-all ${selectedDayTab === day.dayNumber
+ ? 'text-primary font-semibold bg-primary/10 border border-primary/20'
+ : 'text-gray-400 font-medium hover:text-gray-600'
+ }`}
+ >
+ Day {day.dayNumber}
+
+ ))}
+ {days?.length > 4 && (
+
+
+
+ )}
+
+
+ {/* Activities for selected day */}
+ {selectedDayPlan && (
+
+
+ {selectedDayPlan?.items?.map((activity: any, actIndex: number) => {
+ const activityKey = `day${selectedDayPlan.day}-act${actIndex}`;
+
+ return (
+
+ {/* Time Label */}
+
+ {activity.timeSlot}
+
+
+ {/* Activity Card */}
+
+
+ {/* Image */}
+
+
+
+ {/* TODO: Get Directions Badge redirect it to lat,long */}
+
+
+
+ Get Directions
+
+
+
+
+ {/* Content */}
+
+
+ {activity.title}
+
+
+ {activity.locationName}
+
+
+ {/* Category Tags */}
+
+ {activity.categories?.map((cat: string, ci: number) => (
+
+ {cat}
+
+ ))}
+
+
+ {/* Bullet Points */}
+
+
+
+ •
+ {activity.description}
+
+
+
+
+
+
+
+ );
+ })}
+
+
+ )}
+
+ )}
+
+ {/* Summary View */}
+ {viewMode === 'summary' && (
+
+ {days?.map((day: any, dayIndex: number) => {
+ const dayDate = days[0]?.date
+ ? new Date(
+ new Date(days[0].date).setDate(
+ new Date(days[0].date).getDate() + dayIndex
+ )
+ ).toLocaleDateString('en-AU', {
+ day: '2-digit',
+ month: '2-digit',
+ year: 'numeric',
+ })
+ : '';
+
+ // ✅ Find the matching summary for this day
+ const daySummary = summaries.find((s: any) => s.dayNumber === day.dayNumber);
+
+ return (
+
+ {/* Day Header */}
+
+
+ Day {day.dayNumber}:
+
+
+
+ {dayDate}
+
+
+
+ {/* Activity List */}
+
+ {daySummary?.items?.map((item: any, actIndex: number) => {
+ const activityKey = `summary-day${day.dayNumber}-act${actIndex}`;
+ const isExpanded = selectedActivity === activityKey;
+
+ return (
+
+
+ setSelectedActivity(isExpanded ? null : activityKey)
+ }
+ >
+
+ {item.timeSlot}: {item.title}
+
+
+
+
+
+ {isExpanded && (
+
+
+
+ •
+
+ {item.description}
+
+
+
+
+ Get directions
+
+
+
+ )}
+
+
+ );
+ })}
+
+
+ );
+ })}
+
+ )}
+
+ {/* Bottom Action */}
+
+ navigate('/create-itinerary')}
+ className="w-full font-poppins font-semibold px-8 py-3 rounded-xl bg-primary hover:bg-primary/90 text-white shadow-md shadow-primary/20"
+ >
+ Create Another Itinerary
+
+
+
+
+
+ );
+}
+
+export default ItinerarySummaryPage
\ No newline at end of file
diff --git a/src/pages/ItineraryViewPage.tsx b/src/pages/ItineraryViewPage.tsx
new file mode 100644
index 0000000..9d3226b
--- /dev/null
+++ b/src/pages/ItineraryViewPage.tsx
@@ -0,0 +1,504 @@
+import React, { useState, useCallback, useEffect } from 'react';
+import { motion } from 'motion/react';
+import { ArrowLeft, Calendar, MapPin, Users, Star, Heart, Share2, Download, CheckCircle, Navigation, Cloud, Sun, Loader2 } from 'lucide-react';
+import { Button } from '../components/ui/button';
+import { Card, CardContent } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { useGetItineraryDetailsByIdQuery, useDownloadItineraryQuery } from '../Redux/services/itinerary.service';
+import { useNavigate, useParams } from 'react-router-dom';
+import LoadingSpinner from '../components/LoadingSpinner';
+import { toast } from 'sonner'; // optional, install if not present
+
+interface ItineraryViewPageProps {
+ onBackClick: () => void;
+ onHomeClick: () => void;
+ onMelbourneClick: () => void;
+ onPassesClick: () => void;
+ onCheckoutClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick: () => void;
+ onAttractionsClick: () => void;
+ onBlogsClick: () => void;
+ onHowItWorksClick: () => void;
+ onFAQClick: () => void;
+ onPrivacyPolicyClick: () => void;
+ onAboutUsClick: () => void;
+ onProfileClick: () => void;
+ onCityCardsClick: () => void;
+ onMagicItineraryClick: () => void;
+ onPostCardsClick: () => void;
+ onOffersClick: () => void;
+ onCreateItineraryClick: () => void;
+ onContactUsClick?: () => void;
+ onEsimsClick?: () => void;
+ onHotelDiscountsClick?: () => void;
+ currentPage: string;
+ user?: { email: string; name: string; } | null;
+}
+
+export function ItineraryViewPage({
+ onHomeClick,
+ onMelbourneClick,
+ onPassesClick,
+ onCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onProfileClick,
+ onCityCardsClick,
+ onMagicItineraryClick,
+ onPostCardsClick,
+ onOffersClick,
+ onCreateItineraryClick,
+ onContactUsClick,
+ currentPage,
+ user
+}: ItineraryViewPageProps) {
+ const [viewMode, setViewMode] = useState<'daily' | 'summary'>('daily');
+ const navigate = useNavigate();
+
+ // ── API Integration ──────────────────────────────────────────────────────────
+ const { itineraryId } = useParams();
+ const { data: itineraryDetails, isLoading } = useGetItineraryDetailsByIdQuery(itineraryId);
+
+ // Download logic using standard query with manual trigger
+ const [shouldDownload, setShouldDownload] = useState(false);
+ const { data: pdfBlob, isFetching: isDownloading, refetch } = useDownloadItineraryQuery(itineraryId!, {
+ skip: !shouldDownload || !itineraryId,
+ });
+
+ useEffect(() => {
+ if (shouldDownload && pdfBlob) {
+ // Create download link
+ const url = window.URL.createObjectURL(pdfBlob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = `itinerary-${itineraryId}.pdf`;
+ document.body.appendChild(link);
+ link.click();
+ link.remove();
+ window.URL.revokeObjectURL(url);
+ toast.success('Itinerary downloaded successfully!');
+ setShouldDownload(false); // reset trigger
+ }
+ }, [pdfBlob, shouldDownload, itineraryId]);
+
+ const handleDownloadItinerary = useCallback(() => {
+ if (!itineraryId) {
+ toast.error('Itinerary ID not found');
+ return;
+ }
+ setShouldDownload(true);
+ refetch(); // manually trigger the download query
+ }, [itineraryId, refetch]);
+
+ const generatedItinerary = itineraryDetails ?? null;
+ const days = generatedItinerary?.days ?? [];
+ const summaries = generatedItinerary?.summary ?? [];
+
+ // ── Loading State ─────────────────────────────────────────────────────────────
+ if (isLoading) {
+ return ;
+ }
+
+ return (
+
+ {/* Navbar */}
+
{}}
+ onSignInClick={onSignInClick}
+ onPassesClick={onPassesClick}
+ onCheckoutClick={onCheckoutClick}
+ onHomeClick={onHomeClick}
+ onMelbourneClick={onMelbourneClick}
+ onAttractionsClick={onAttractionsClick}
+ onBlogsClick={onBlogsClick}
+ onHowItWorksClick={onHowItWorksClick}
+ onFAQClick={onFAQClick}
+ onPrivacyPolicyClick={onPrivacyPolicyClick}
+ onAboutUsClick={onAboutUsClick}
+ onProfileClick={onProfileClick}
+ onCityCardsClick={onCityCardsClick}
+ onMagicItineraryClick={onMagicItineraryClick}
+ onPostCardsClick={onPostCardsClick}
+ onOffersClick={onOffersClick}
+ currentPage="itinerary-view"
+ isUserSignedIn={!!user}
+ user={user}
+ />
+
+ {/* Header Section */}
+
+
+
+ navigate(-1)}
+ className="mb-6 hover:bg-primary/5 font-poppins font-medium cursor-pointer"
+ >
+
+ Back to Magic Itinerary
+
+
+
+
+
+ Your {' '}
+
+ {generatedItinerary?.title ?? 'Magic Itinerary'}
+
+
+
+
+
+ Here's your personalized {generatedItinerary?.totalDays}-day adventure in {generatedItinerary?.city}!
+
+
+
+
+
+ {/* Main Content */}
+
+
+
+
+ {/* View Toggle */}
+
+
+ setViewMode('daily')}
+ className="rounded-md font-poppins font-medium"
+ >
+ Daily View
+
+ setViewMode('summary')}
+ className="rounded-md font-poppins font-medium"
+ >
+ Summary
+
+
+
+
+ {/* Itinerary Overview Card */}
+
+
+
+
+
+
+
Your Trip
+
{generatedItinerary?.city}
+
+
+
+ {/* Stats Row */}
+
+
+ {generatedItinerary?.totalDays}
+ Days
+
+
+ {generatedItinerary?.totalStops}
+ Stops
+
+
+ {days[0]?.date}
+ Start Date
+
+
+
+
+
+ {/* ── Daily View ──────────────────────────────────────────────────── */}
+ {viewMode === 'daily' && (
+
+ {days.map((day: any, dayIndex: number) => (
+
+
+ {/* City / Weather header — only on first day */}
+ {dayIndex === 0 && (
+
+
+
+
+ {generatedItinerary?.city}, Australia
+
+
+
+
+
+ )}
+
+ {/* Day Header */}
+
+
+ {day.dayNumber}
+
+
+
+ Day {day.dayNumber}
+
+
{day.title}
+
+
+
+ {/* Time-zone label */}
+
+
+ {/* Activity Cards */}
+
+ {day.items?.map((activity: any, actIndex: number) => (
+
+ {/* Time Column */}
+
+
+ {activity.timeSlot}
+
+
+
+ {/* Activity Card */}
+
+
+
+ {/* Hero Image */}
+
+
+
+ {/* Get Directions */}
+
+
+ window.open(
+ `https://www.google.com/maps?q=${activity.latitude},${activity.longitude}`,
+ '_blank'
+ )
+ }
+ >
+
+ Get Directions
+
+
+
+
+ {/* Content */}
+
+
+
+ {activity.title}
+
+
+
+
+ {activity.locationName}
+
+
+
+
+ {/* Category Badges */}
+
+ {activity.categories?.map((cat: string, ci: number) => (
+
+ {cat}
+
+ ))}
+
+
+ {/* Description */}
+
+
+ •
+
+ {activity.description}
+
+
+
+
+
+
+
+
+ ))}
+
+
+ ))}
+
+ )}
+
+ {/* ── Summary View ─────────────────────────────────────────────────── */}
+ {viewMode === 'summary' && (
+
+
+ Trip Summary
+
+
+
+ {days.map((day: any, dayIndex: number) => {
+ const daySummary = summaries.find((s: any) => s.dayNumber === day.dayNumber);
+ const dayDate = days[0]?.date
+ ? new Date(
+ new Date(days[0].date).setDate(
+ new Date(days[0].date).getDate() + dayIndex
+ )
+ ).toLocaleDateString('en-AU', {
+ day: '2-digit',
+ month: '2-digit',
+ year: 'numeric',
+ })
+ : '';
+
+ return (
+
+
+
+
+
+ Day {day.dayNumber}: {daySummary?.title ?? day.title}
+
+
+
{dayDate}
+
+
+
+ {daySummary?.items?.map((item: any, actIndex: number) => (
+
+
+
+
{item.title}
+
+ {item.timeSlot}
+ •
+ {item.locationName}
+
+
+
+ ))}
+
+
+ );
+ })}
+
+
+
+ )}
+
+ {/* Action Buttons */}
+
+ navigate(`/create-itinerary`)}
+ className="font-poppins font-medium px-8 py-3 text-lg"
+ >
+
+ Create Another
+
+
+
+ {isDownloading ? (
+
+ ) : (
+
+ )}
+ Save Itinerary
+
+
+
+
+ Share Trip
+
+
+
+
+
+
+ {/* Footer */}
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/LandingMagicItineraryPage.tsx b/src/pages/LandingMagicItineraryPage.tsx
similarity index 97%
rename from src/components/LandingMagicItineraryPage.tsx
rename to src/pages/LandingMagicItineraryPage.tsx
index 32fa27c..0c7f059 100644
--- a/src/components/LandingMagicItineraryPage.tsx
+++ b/src/pages/LandingMagicItineraryPage.tsx
@@ -1,16 +1,16 @@
import React from 'react';
import { motion } from 'motion/react';
import { ArrowLeft, Sparkles, MapPin, Clock, Users, Calendar, Star, Zap, Heart, Camera } from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent } from './ui/card';
-import { Badge } from './ui/badge';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { MobileAppSection } from './MobileAppSection';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
-import { HowItWorks } from './HowItWorks';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { PersonalizedTourHero } from './PersonalizedTourHero';
+import { Button } from '../components/ui/button';
+import { Card, CardContent } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
+import { HowItWorks } from '../components/HowItWorks';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { PersonalizedTourHero } from '../components/PersonalizedTourHero';
import { Layout } from '../Layout';
interface User {
diff --git a/src/pages/MagicItineraryPage.tsx b/src/pages/MagicItineraryPage.tsx
new file mode 100644
index 0000000..b9368c9
--- /dev/null
+++ b/src/pages/MagicItineraryPage.tsx
@@ -0,0 +1,427 @@
+import React from 'react';
+import { motion } from 'motion/react';
+import { ArrowLeft, Sparkles, MapPin, Clock, Users, Calendar, Star, Zap, Heart, Camera } from 'lucide-react';
+import { Button } from '../components/ui/button';
+import { Card, CardContent } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
+import { HowItWorks } from '../components/HowItWorks';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { PersonalizedTourHero } from '../components/PersonalizedTourHero';
+import { Layout } from '../Layout';
+
+interface User {
+ email: string;
+ name: string;
+}
+
+interface MagicItineraryPageProps {
+ onBackClick: () => void;
+ onHomeClick: () => void;
+ onMelbourneClick: () => void;
+ onPassesClick: () => void;
+ onCheckoutClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick?: () => void;
+ onAttractionsClick: () => void;
+ onBlogsClick: () => void;
+ onHowItWorksClick: () => void;
+ onFAQClick: () => void;
+ onPrivacyPolicyClick: () => void;
+ onAboutUsClick: () => void;
+ onProfileClick: () => void;
+ onCityCardsClick: () => void;
+ onMagicItineraryClick: () => void;
+ onPostCardsClick: () => void;
+ onOffersClick: () => void;
+ onSuperSavingsClick?: () => void;
+ onContactUsClick?: () => void;
+ onEsimsClick?: () => void;
+ onHotelDiscountsClick?: () => void;
+ onCreateItineraryClick: () => void;
+ onViewItineraryClick: () => void;
+ currentPage: string;
+ user: User | null;
+}
+
+export function MagicItineraryPage({
+ onBackClick,
+ onHomeClick,
+ onMelbourneClick,
+ onPassesClick,
+ onCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onProfileClick,
+ onCityCardsClick,
+ onMagicItineraryClick,
+ onPostCardsClick,
+ onOffersClick,
+ onSuperSavingsClick,
+ onContactUsClick,
+ onEsimsClick,
+ onHotelDiscountsClick,
+ onCreateItineraryClick,
+ onViewItineraryClick,
+ currentPage,
+ user
+}: MagicItineraryPageProps) {
+ const cityName = localStorage.getItem("cityName") || "your city";
+ return (
+
+
+
+
+
+ {/* Hero Section */}
+
+
+ {/* How It Works Section */}
+
+
+ {/* Features Section */}
+
+
+ {/* Section Header */}
+
+
+ Smart Features for {' '}
+ Smart Travelers
+
+
+ Experience intelligent trip planning powered by AI technology
+
+
+
+
+ {/* Left side - Features */}
+
+ {[
+ {
+ icon: ,
+ title: 'AI-Powered Recommendations',
+ description: 'Our advanced AI analyzes your preferences to suggest the perfect experiences'
+ },
+ {
+ icon: ,
+ title: 'Optimized Scheduling',
+ description: 'Smart timing that considers opening hours, travel time, and crowd patterns'
+ },
+ {
+ icon: ,
+ title: 'Location-Based Planning',
+ description: 'Efficiently planned routes that minimize travel time and maximize experiences'
+ },
+ {
+ icon: ,
+ title: 'Instagram-Worthy Spots',
+ description: 'Discover hidden gems and perfect photo opportunities along your journey'
+ }
+ ].map((feature, index) => (
+
+ {/* Subtle accent line */}
+
+
+
+
+ {feature.icon}
+
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+
+
+ ))}
+
+
+ {/* Right side - Sample Itinerary */}
+
+
+ {/* Header */}
+
+
+
+
+
+
+ Sample Day Itinerary
+
+
+
+ A perfectly planned Melbourne adventure
+
+
+
+ {/* Timeline */}
+
+ {/* Vertical line */}
+
+
+ {[
+ { time: '9:00 AM', activity: 'Coffee at Degraves Street', duration: '30 min', emoji: '☕' },
+ { time: '10:00 AM', activity: 'Royal Botanic Gardens', duration: '2 hours', emoji: '🌿' },
+ { time: '1:00 PM', activity: 'Lunch at Queen Victoria Market', duration: '1 hour', emoji: '🍽️' },
+ { time: '3:00 PM', activity: 'Street Art Tour in Hosier Lane', duration: '1.5 hours', emoji: '🎨' },
+ { time: '6:00 PM', activity: 'Sunset at Eureka Skydeck', duration: '1 hour', emoji: '🌅' }
+ ].map((item, index) => (
+
+ {/* Timeline dot */}
+
+
+
+
+
+ {item.emoji}
+
+ {item.time}
+
+
+
+ {item.duration}
+
+
+
+ {item.activity}
+
+
+
+ ))}
+
+
+ {/* Decorative gradient blur */}
+
+
+
+
+
+
+
+ {/* Benefits Section */}
+
+
+
+ Why Use Magic Itinerary?
+
+ Save time, discover more, and create unforgettable memories with personalized planning
+
+
+
+
+ {[
+ {
+ icon:
,
+ title: 'Save Planning Time',
+ description: 'Skip hours of research. Get a complete itinerary in under 5 minutes.',
+ stat: '90% faster than manual planning'
+ },
+ {
+ icon:
,
+ title: 'Discover Hidden Gems',
+ description: 'Find unique experiences and local favorites you might have missed.',
+ stat: '50+ curated hidden spots'
+ },
+ {
+ icon:
,
+ title: 'Personalized Experience',
+ description: 'Every itinerary is unique, tailored specifically to your preferences.',
+ stat: '1000+ possible combinations'
+ }
+ ].map((benefit, index) => (
+
+
+
+
+
+ {benefit.title}
+
+
+ {benefit.description}
+
+
+ {benefit.stat}
+
+
+
+
+ ))}
+
+
+
+
+ {/* What's Included Section */}
+
+
+
+
+ Everything You Need, {' '}
+ All Included
+
+
+ Your Magic Itinerary comes with comprehensive features for an amazing Melbourne experience
+
+
+
+
+ {[
+ {
+ emoji: '⏰',
+ title: 'Detailed Timeline',
+ description: 'Hour-by-hour schedule with optimal timing'
+ },
+ {
+ emoji: '🚇',
+ title: 'Transportation Tips',
+ description: 'Best routes and transport options between locations'
+ },
+ {
+ emoji: '⭐',
+ title: 'Local Recommendations',
+ description: 'Insider tips on food, shopping, and experiences'
+ },
+ {
+ emoji: '💰',
+ title: 'Budget Planning',
+ description: 'Estimated costs and money-saving suggestions'
+ },
+ {
+ emoji: '☔',
+ title: 'Weather Backup Plans',
+ description: 'Alternative indoor activities for rainy days'
+ },
+ {
+ emoji: '📸',
+ title: 'Photo Opportunities',
+ description: 'Best spots and times for Instagram-worthy shots'
+ },
+ {
+ emoji: '🏛️',
+ title: 'Cultural Insights',
+ description: 'Local history and interesting facts about each location'
+ },
+ {
+ emoji: '🔔',
+ title: 'Real-time Updates',
+ description: 'Live information on closures, events, and crowds'
+ }
+ ].map((item, index) => (
+
+
+
+
+ {item.emoji}
+
+
+ {item.title}
+
+
+ {item.description}
+
+
+
+
+ ))}
+
+
+
+
+ {/* CTA Section */}
+
+
+ {/* Mobile App Section */}
+
+
+ {/* Customer Reviews */}
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/MelbournePage.tsx b/src/pages/MelbournePage.tsx
similarity index 94%
rename from src/components/MelbournePage.tsx
rename to src/pages/MelbournePage.tsx
index 2471181..75ba85a 100644
--- a/src/components/MelbournePage.tsx
+++ b/src/pages/MelbournePage.tsx
@@ -1,22 +1,22 @@
import { motion, useAnimationControls, AnimatePresence } from 'motion/react';
-import { Button } from './ui/button';
+import { Button } from '../components/ui/button';
import { ArrowRight, Calendar, Thermometer, Eye, MapPin, Clock, Users, Ticket, Wand2, Plane, Sparkles } from 'lucide-react';
-import { useEffect, useRef, useState } from 'react';
-import Navbar from './Navbar';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { MelbourneAttractions } from './MelbourneAttractions';
-import { MelbourneCardComparison } from './MelbourneCardComparison';
-import { MelbourneTourOverview } from './MelbourneTourOverview';
-import { MelbourneBlogs } from './MelbourneBlogs';
-import { CustomPostcards } from './CustomPostcards';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
-import { MobileAppPromotion } from './MobileAppPromotion';
-import { MelbourneFAQ } from './MelbourneFAQ';
-import { Footer } from './Footer';
-// import { MinimalHeroBanner } from './MinimalHeroBanner';
+import { useState } from 'react';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { MelbourneAttractions } from '../components/MelbourneAttractions';
+import { MelbourneCardComparison } from '../components/MelbourneCardComparison';
+import { MelbourneTourOverview } from '../components/MelbourneTourOverview';
+import { MelbourneBlogs } from '../components/MelbourneBlogs';
+import { CustomPostcards } from '../components/CustomPostcards';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
+import { MobileAppPromotion } from '../components/MobileAppPromotion';
+import { MelbourneFAQ } from '../components/MelbourneFAQ';
import { Layout } from '../Layout';
-import { HeroBannerCarousel } from './HeroBannerCarousel';
-import { HotelEsimOffers } from './HotelEsimOffers';
+import { HeroBannerCarousel } from '../components/HeroBannerCarousel';
+import { HotelEsimOffers } from '../components/HotelEsimOffers';
+import { useGetSelectedCityDetailsQuery } from '../Redux/services/cities.service';
+import LoadingSpinner from '../components/LoadingSpinner';
+import { useNavigate } from 'react-router-dom';
interface User {
email: string;
@@ -148,6 +148,22 @@ export function MelbournePage({
// Magic Itinerary state
const [currentCardIndex, setCurrentCardIndex] = useState(0);
const [isAnimating, setIsAnimating] = useState(false);
+ const navigate= useNavigate();
+
+ const cityId = localStorage.getItem("cityId")
+ const cityName = localStorage.getItem("cityName")
+
+ const { data: cityDetails, isLoading: loadingCityDetails } = useGetSelectedCityDetailsQuery(cityId)
+
+
+ if (loadingCityDetails) {
+ return (
+
+ )
+ }
+
+ const cards = cityDetails?.city?.cards
+ sessionStorage.setItem("cityLogo", String(cityDetails?.city?.cityIconPath))
const currentCard = itineraryCards[currentCardIndex];
const nextCard = itineraryCards[(currentCardIndex + 1) % itineraryCards.length];
@@ -157,7 +173,7 @@ export function MelbournePage({
{/* Navigation */}
-
+
{/* Pass Comparison */}
-
+
{/* Tour Overview */}
@@ -395,7 +411,7 @@ export function MelbournePage({
viewport={{ once: true }}
>
Plan Your {' '}
-
+
Dream Journey
@@ -737,8 +753,8 @@ export function MelbournePage({
}, 400);
}}
className={`font-poppins group relative transition-all duration-300 px-4 py-2 rounded-full font-medium ${idx === currentCardIndex
- ? 'bg-gradient-to-r from-primary to-orange-500 text-white shadow-lg scale-110'
- : 'bg-white/80 backdrop-blur-sm text-gray-600 hover:text-primary hover:bg-white border border-gray-200 hover:border-primary/30 hover:scale-105'
+ ? 'bg-gradient-to-r from-primary to-orange-500 text-white shadow-lg scale-110'
+ : 'bg-white/80 backdrop-blur-sm text-gray-600 hover:text-primary hover:bg-white border border-gray-200 hover:border-primary/30 hover:scale-105'
}`}
whileHover={{ y: -2 }}
whileTap={{ scale: 0.95 }}
@@ -766,7 +782,7 @@ export function MelbournePage({
viewport={{ once: true }}
>
{navigate('/create-itinerary');}}
className="font-poppins py-7 px-16 rounded-full text-xl font-bold bg-gradient-to-r from-primary via-orange-500 to-rose-500 hover:from-primary/90 hover:via-orange-500/90 hover:to-rose-500/90 shadow-2xl hover:shadow-primary/50 transition-all hover:scale-105 hover:-translate-y-1"
>
diff --git a/src/components/OffersPage.tsx b/src/pages/OffersPage.tsx
similarity index 97%
rename from src/components/OffersPage.tsx
rename to src/pages/OffersPage.tsx
index c9c5fb1..4e1a26d 100644
--- a/src/components/OffersPage.tsx
+++ b/src/pages/OffersPage.tsx
@@ -1,20 +1,20 @@
import { useState } from 'react';
import { motion } from 'motion/react';
import { ArrowLeft, Search, Filter, Star, MapPin, Clock, Tag, Heart, Share2, Copy, ChevronDown, ChevronRight, Check, Hotel, Plane, Building2, MapPinned, Home } from 'lucide-react';
-import { Button } from './ui/button';
-import { Input } from './ui/input';
-import { Card, CardContent, CardHeader, CardTitle } from './ui/card';
-import { Badge } from './ui/badge';
-import { Separator } from './ui/separator';
-import { Checkbox } from './ui/checkbox';
-import Navbar from './Navbar';
+import { Button } from '../components/ui/button';
+import { Input } from '../components/ui/input';
+import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import { Separator } from '../components/ui/separator';
+import { Checkbox } from '../components/ui/checkbox';
+import Navbar from '../components/Navbar';
// import SubNavbar from './SubNavbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { TrustSection } from './TrustSection';
-import { MobileAppSection } from './MobileAppSection';
-import { ReviewsSection } from './ReviewsSection';
-import { TrustedCompanies } from './TrustedCompanies';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { TrustSection } from '../components/TrustSection';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { ReviewsSection } from '../components/ReviewsSection';
+import { TrustedCompanies } from '../components/TrustedCompanies';
import { Layout } from '../Layout';
interface OffersPageProps {
diff --git a/src/components/PassesPage.tsx b/src/pages/PassesPage.tsx
similarity index 75%
rename from src/components/PassesPage.tsx
rename to src/pages/PassesPage.tsx
index 2c05c99..04dcbb4 100644
--- a/src/components/PassesPage.tsx
+++ b/src/pages/PassesPage.tsx
@@ -1,16 +1,18 @@
import { useState } from 'react';
import { Check, X, Star, Shield, Clock, Smartphone, Download, QrCode, Heart, Users, Award, Headphones } from 'lucide-react';
-import { Button } from './ui/button';
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card';
-import { RadioGroup, RadioGroupItem } from './ui/radio-group';
-import { Badge } from './ui/badge';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
-import { ReviewsSection } from './ReviewsSection';
+import { Button } from '../components/ui/button';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../components/ui/card';
+import { RadioGroup, RadioGroupItem } from '../components/ui/radio-group';
+import { Badge } from '../components/ui/badge';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
+import { ReviewsSection } from '../components/ReviewsSection';
import { Layout } from '../Layout';
-import { LoginModal } from './LoginModal';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { LoginModal } from '../components/LoginModal';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
import { useAuth } from '../context/AuthContext';
import { useNavigate } from 'react-router-dom';
+import { useGetSelectedCityDetailsQuery } from '../Redux/services/cities.service';
+import LoadingSpinner from '../components/LoadingSpinner';
interface PassesPageProps {
onCheckoutClick?: () => void;
@@ -148,21 +150,29 @@ export function PassesPage({
onSignInClick,
onSignOutClick,
}: PassesPageProps) {
- const [selectedPass, setSelectedPass] = useState('unlimited');
+ const [selectedPass, setSelectedPass] = useState(passTypes[1].id);
const [isLoginOpen, setIsLoginOpen] = useState(false);
const { user } = useAuth(); // from AuthContext
- const navigate= useNavigate()
+ const navigate = useNavigate()
+ const cityId = localStorage.getItem("cityId")
+
+ const { data: cityDetails, isLoading: loadingCityDetails } = useGetSelectedCityDetailsQuery(cityId)
+ const cards = cityDetails?.city?.cards ?? []
+ console.log(cards)
+
+ if (loadingCityDetails) {
+ return ( )
+ }
-
- const handleCheckoutClick = () => {
+ const handleCheckoutClick = () => {
console.log('Proceeding to checkout for user:', user);
// Add your checkout logic here
navigate('/checkout');
};
- const handleSignInClick = () => {
+ const handleSignInClick = () => {
setIsLoginOpen(true);
};
@@ -189,7 +199,7 @@ export function PassesPage({
- Buy Passes
+ Buy Cards
Skip the lines, save money, and explore more with our flexible city cards designed for modern travelers
@@ -200,136 +210,190 @@ export function PassesPage({
{/* Pass Comparison Section */}
- {passTypes.map((pass) => (
-
-
+ {/* Flexi Pass Card */}
+
+
setSelectedPass(passTypes[0].id)}
+ >
+
+ {/* */}
+
- {/* Popular Badge */}
- {pass.popular && (
-
-
- Most Popular
-
-
- )}
+
+
+ {cards[0]?.title}
+
+
+ {cards[0]?.description}
+
+
- {/* Radio Button */}
-
-
+ {/* Pricing */}
+
+
+
+ ${cards[0]?.adultPrice}
+
+
+ / {passTypes[0].period}
+
-
- {/* Header - Fixed Height */}
-
-
- {pass.title}
-
-
- {pass.description}
-
-
-
- {/* Attraction Images Grid */}
-
-
-
-
+
+ {cards[0]?.adultPrice && (
+
+ {/* Strikethrough price = originalPrice + $5 */}
+
+ ${parseFloat(cards[0]?.adultPrice) + 5}
+
+
+ Save{" "}
+ {Math.round(
+ ((5) / (parseFloat(cards[0]?.adultPrice) + 5)) * 100
+ )}
+ %
+
-
-
-
-
-
-
-
-
-
-
+ )}
+
- {/* Pricing Section - Fixed Height */}
-
-
- {pass.price}
- / {pass.period}
-
-
- {pass.originalPrice && (
-
-
{pass.originalPrice}
-
Save {Math.round(((parseFloat(pass.originalPrice.slice(1)) - parseFloat(pass.price.slice(1))) / parseFloat(pass.originalPrice.slice(1))) * 100)}%
+
+
+
+
+ {passTypes[0].features.map((feature, index) => (
+
+
+ {feature}
- )}
+ ))}
- {/* Content - Flexible Height with Fixed Features Area */}
-
- {/* Features List - Fixed height */}
-
-
- {pass.features.slice(0, 6).map((feature, index) => (
-
-
- {feature}
-
- ))}
+
+
+ {user ? 'PURCHASE NOW' : 'LOGIN TO BUY PASS'}
+
+
+ ✓ Free cancellation up to 24 hours • Instant delivery
+
+
+
+
+
+
+ {/* Unlimited Pass Card */}
+
+
setSelectedPass(passTypes[1]?.id)}
+
+ >
+ {passTypes[1]?.popular && (
+
+
+ Most Popular
+
+
+ )}
+
+
+ {/* */}
+
+
+
+
+ {cards[1]?.title}
+
+
+ {cards[1]?.description}
+
+
+
+ {/* Pricing */}
+
+
+ ${cards[1]?.adultPrice}
+ / {passTypes[1]?.period}
+
+
+ {cards[1]?.adultPrice && (
+
+ {/* Strikethrough price = originalPrice + $5 */}
+
+ ${parseFloat(cards[1]?.adultPrice) + 5}
+
+
+ Save{" "}
+ {Math.round(
+ ((5) / (parseFloat(cards[1]?.adultPrice) + 5)) * 100
+ )}
+ %
+
-
+ )}
+
+
- {/* CTA Button - Pushed to bottom */}
-
-
- {user ? 'PURCHASE NOW' : 'LOGIN TO BUY PASS'}
-
-
-
- ✓ Free cancellation up to 24 hours • Instant delivery
-
+
+
+
+ {passTypes[1]?.features.map((feature, index) => (
+
+
+ {feature}
+
+ ))}
-
-
-
- ))}
+
+
+
+
+ {user ? 'PURCHASE NOW' : 'LOGIN TO BUY PASS'}
+
+
+ ✓ Free cancellation up to 24 hours • Instant delivery
+
+
+
+
+
+
{/* Good to Know Section */}
Good to {' '}
- Know
+ Know
Simple tips to help you get the most out of your CityCard experience
@@ -351,7 +415,7 @@ export function PassesPage({
-
Calendar Days Policy
+
Calendar Days Policy
Unlimited passes work on a consecutive calendar day basis , not 24-hour periods. Your pass expires at 11:59 PM on your final day.
@@ -388,7 +452,7 @@ export function PassesPage({
-
60-Minute Adventure Gap
+
60-Minute Adventure Gap
To keep the journey smooth for everyone, there's a simple 60-minute wait between scanning your pass at attractions.
@@ -604,7 +668,7 @@ export function PassesPage({
Access all your {' '}
- city cards {' '}
+ city cards {' '}
on your {' '}
phone
@@ -663,7 +727,7 @@ export function PassesPage({
Why Choose {' '}
- CityCards ?
+ CityCards ?
We're committed to providing the best city exploration experience with unmatched value and service
diff --git a/src/pages/PaymentCancelPage.tsx b/src/pages/PaymentCancelPage.tsx
new file mode 100644
index 0000000..99dd51e
--- /dev/null
+++ b/src/pages/PaymentCancelPage.tsx
@@ -0,0 +1,99 @@
+import React, { useEffect } from 'react';
+import { useNavigate } from 'react-router-dom';
+import { XCircle } from 'lucide-react';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+
+interface PaymentCancelPageProps {
+ onHomeClick: () => void;
+ onPassesClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick?: () => void;
+ currentPage?: string;
+ user?: { email: string; name: string } | null;
+}
+
+export function PaymentCancelPage({
+ onHomeClick,
+ onPassesClick,
+ onSignInClick,
+ onSignOutClick,
+ currentPage,
+ user,
+}: PaymentCancelPageProps) {
+ const navigate = useNavigate();
+
+ // ✅ Clear stored booking ID when user cancels
+ useEffect(() => {
+ localStorage.removeItem('pendingBookingId');
+ sessionStorage.removeItem('pendingBookingId');
+ document.cookie = 'pendingBookingId=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
+ }, []);
+
+ return (
+
+
{}}
+ onSignInClick={onSignInClick}
+ onSignOutClick={onSignOutClick}
+ onHomeClick={onHomeClick}
+ onPassesClick={onPassesClick}
+ onCheckoutClick={() => {}}
+ onAttractionsClick={() => {}}
+ onBlogsClick={() => {}}
+ onHowItWorksClick={() => {}}
+ onFAQClick={() => {}}
+ onPrivacyPolicyClick={() => {}}
+ onAboutUsClick={() => {}}
+ onProfileClick={() => {}}
+ onCityCardsClick={() => {}}
+ onMagicItineraryClick={() => {}}
+ onPostCardsClick={() => {}}
+ onOffersClick={() => {}}
+ onSuperSavingsClick={() => {}}
+ onEsimsClick={() => {}}
+ onHotelDiscountsClick={() => {}}
+ onCartClick={() => {}}
+ currentPage={currentPage as any}
+ user={user}
+ />
+
+
+
+
+
Payment Cancelled
+
+ You cancelled the payment process. No charges have been made.
+
+
+ navigate(-1)}
+ className="px-6 py-3 bg-[#F95F62] text-white rounded-xl font-medium hover:bg-[#e8545a] transition"
+ >
+ Go Back & Try Again
+
+
+ Return to Home
+
+
+
+
+
+ {}}
+ onBlogsClick={() => {}}
+ onHowItWorksClick={() => {}}
+ onFAQClick={() => {}}
+ onPrivacyPolicyClick={() => {}}
+ onAboutUsClick={() => {}}
+ onContactUsClick={() => {}}
+ />
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/PaymentDetailsPage.tsx b/src/pages/PaymentDetailsPage.tsx
new file mode 100644
index 0000000..b5f438b
--- /dev/null
+++ b/src/pages/PaymentDetailsPage.tsx
@@ -0,0 +1,658 @@
+import React, { useEffect, useState } from 'react';
+import { motion, AnimatePresence } from 'motion/react';
+import {
+ ArrowLeft, User, Lock, Shield, Pencil, UserCheck, Gift, AlertCircle
+} from 'lucide-react';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { Card, CardContent, CardHeader } from '../components/ui/card';
+import { Separator } from '../components/ui/separator';
+import { useGetUserProfileDetailsQuery } from '../Redux/services/profile.service';
+import LoadingSpinner from '../components/LoadingSpinner';
+import { useNavigate, useParams } from 'react-router-dom';
+import {
+ useGetCardBookingDetailsQuery,
+ useStoreRecipientDetailsMutation,
+ usePayForCardMutation,
+} from '../Redux/services/cards.service';
+import { toast } from 'sonner';
+
+import countries from 'i18n-iso-countries';
+import enLocale from 'i18n-iso-countries/langs/en.json';
+
+export interface CheckoutOrderItem {
+ city: string;
+ cardType: 'Flexi' | 'Unlimited';
+ days: number;
+ adults: number;
+ children: number;
+ quantity: number;
+ pricePerUnit: number;
+}
+
+interface PaymentDetailsPageProps {
+ checkoutOrder?: CheckoutOrderItem | null;
+ onBackClick: () => void;
+ onPaymentComplete: () => void;
+ onHomeClick: () => void;
+ onPassesClick: () => void;
+ onAttractionsClick?: () => void;
+ onBlogsClick?: () => void;
+ onHowItWorksClick?: () => void;
+ onFAQClick?: () => void;
+ onPrivacyPolicyClick?: () => void;
+ onAboutUsClick?: () => void;
+ onProfileClick?: () => void;
+ onCityCardsClick?: () => void;
+ onMagicItineraryClick?: () => void;
+ onPostCardsClick?: () => void;
+ onOffersClick?: () => void;
+ onSuperSavingsClick?: () => void;
+ onEsimsClick?: () => void;
+ onHotelDiscountsClick?: () => void;
+ onContactUsClick?: () => void;
+ onCartClick?: () => void;
+ onCheckoutClick?: () => void;
+ onSignInClick: () => void;
+ onSignOutClick?: () => void;
+ currentPage?: string;
+ user?: { email: string; name: string } | null;
+}
+
+// Register English locale for country codes
+countries.registerLocale(enLocale);
+
+const getCountryCode = (countryName: string): string => {
+ const code = countries.getAlpha2Code(countryName, 'en');
+ if (code) return code;
+ if (countryName.length === 2 && /^[A-Z]{2}$/i.test(countryName)) {
+ return countryName.toUpperCase();
+ }
+ console.warn(`Unknown country name: ${countryName}, defaulting to 'AU'`);
+ return 'AU';
+};
+
+/* ─── Editable field component ─── */
+function Field({
+ label,
+ value,
+ onChange,
+ placeholder,
+ type = 'text',
+ error,
+ maxLength,
+ inputMode,
+ prefilled,
+ disabled = false,
+}: {
+ label: string;
+ value: string;
+ onChange: (v: string) => void;
+ placeholder?: string;
+ type?: string;
+ error?: string;
+ maxLength?: number;
+ inputMode?: React.HTMLAttributes
['inputMode'];
+ prefilled?: boolean;
+ disabled?: boolean;
+}) {
+ const [focused, setFocused] = useState(false);
+
+ return (
+
+
+ {label}
+
+
+
onChange(e.target.value)}
+ onFocus={() => setFocused(true)}
+ onBlur={() => setFocused(false)}
+ placeholder={placeholder}
+ maxLength={maxLength}
+ inputMode={inputMode}
+ disabled={disabled}
+ className={`w-full border rounded-xl px-4 py-3 pr-10 font-poppins text-base font-normal text-[#2a2a2a] outline-none transition-all duration-200 placeholder:text-[#ccc]
+ ${disabled
+ ? 'bg-gray-100 text-gray-500 cursor-not-allowed border-gray-300'
+ : error
+ ? 'border-red-300 focus:border-red-400 bg-red-50/30'
+ : focused
+ ? 'border-[#F95F62] ring-2 ring-[#F95F62]/10'
+ : prefilled
+ ? 'border-[#F95F62]/25 bg-[#F95F62]/[0.02]'
+ : 'border-[#E4AFB1] bg-[#FFF5F5]'
+ }`}
+ />
+ {prefilled && !focused && !disabled && (
+
+ )}
+
+ {error && (
+
+ {error}
+
+ )}
+
+ );
+}
+
+/* ─── Card type badge ─── */
+function CardTypeBadge({ cardType }: { cardType: 'Flexi' | 'Unlimited' }) {
+ return (
+
+ {cardType} Card
+
+ );
+}
+
+/* ─── Main Component ─── */
+export function PaymentDetailsPage({
+ onHomeClick,
+ onPassesClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onProfileClick,
+ onCityCardsClick,
+ onMagicItineraryClick,
+ onPostCardsClick,
+ onOffersClick,
+ onSuperSavingsClick,
+ onEsimsClick,
+ onHotelDiscountsClick,
+ onContactUsClick,
+ onCartClick,
+ onCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ currentPage,
+ user,
+}: PaymentDetailsPageProps) {
+ const [selectedTab, setSelectedTab] = useState<'myself' | 'gift'>('myself');
+
+ // Gift fields
+ const [giftFirstName, setGiftFirstName] = useState('');
+ const [giftLastName, setGiftLastName] = useState('');
+ const [giftEmail, setGiftEmail] = useState('');
+ const [giftPhone, setGiftPhone] = useState('');
+ const [giftCity, setGiftCity] = useState('');
+ const [giftCountry, setGiftCountry] = useState('');
+ const [giftIsd, setGiftIsd] = useState('');
+ const [giftMessage, setGiftMessage] = useState('');
+
+ // Profile data
+ const [formData, setFormData] = useState({
+ firstName: '',
+ lastName: '',
+ email: '',
+ phone: '',
+ country: '',
+ address1: '',
+ address2: '',
+ city: '',
+ postalCode: '',
+ });
+
+ const navigate = useNavigate();
+ const userId = localStorage.getItem('userId');
+ const { bookingId } = useParams();
+ const { data: userDetails, isLoading } = useGetUserProfileDetailsQuery(userId);
+ const { data } = useGetCardBookingDetailsQuery(bookingId);
+ const [storeRecipientDetails] = useStoreRecipientDetailsMutation();
+ const [payForCard, { isLoading: isCreatingPayment }] = usePayForCardMutation();
+
+ const bookingDetails = data?.bookingDetails ?? null;
+
+ useEffect(() => {
+ if (userDetails) {
+ setFormData({
+ firstName: userDetails?.firstName,
+ lastName: userDetails?.lastName,
+ email: userDetails?.emailAddress,
+ phone: userDetails?.mobileNumber,
+ country: userDetails?.country,
+ address1: userDetails?.address1,
+ address2: userDetails?.address2,
+ city: userDetails?.cityName,
+ postalCode: userDetails?.zipCode,
+ });
+ }
+ }, [userDetails]);
+
+ const [errors, setErrors] = useState>({});
+
+ const validate = () => {
+ const e: Record = {};
+ if (selectedTab === 'gift') {
+ if (!giftFirstName.trim()) e.giftFirstName = 'Required';
+ if (!giftLastName.trim()) e.giftLastName = 'Required';
+ if (!giftIsd.trim()) e.giftIsd = 'Required';
+ if (!giftMessage.trim()) e.giftMessage = 'Required';
+ if (!giftEmail.trim() || !/\S+@\S+\.\S+/.test(giftEmail)) {
+ e.giftEmail = 'Valid email required';
+ }
+ if (!giftPhone.trim() || !/^\+?[0-9]{7,15}$/.test(giftPhone)) {
+ e.giftPhone = 'Valid phone required';
+ }
+ if (!giftCity.trim()) e.giftCity = 'Required';
+ if (!giftCountry.trim()) e.giftCountry = 'Required';
+ }
+ return e;
+ };
+
+ const [isRedirecting, setIsRedirecting] = useState(false);
+
+ const handlePayment = async () => {
+ const validationErrors = validate();
+ setErrors(validationErrors);
+ if (Object.keys(validationErrors).length > 0) {
+ toast.error('Please fill all required fields');
+ return;
+ }
+
+ if (selectedTab === 'gift') {
+ const recipientDetails = {
+ isForSelf: true,
+ recipientFirstName: giftFirstName,
+ recipientLastName: giftLastName,
+ recipientEmail: giftEmail,
+ recipientIsdCode: `+${giftIsd}`,
+ recipientPhone: giftPhone,
+ recipientCity: giftCity,
+ recipientCountry: giftCountry,
+ giftMessage: giftMessage,
+ };
+ try {
+ await storeRecipientDetails({ recipientDetails, bookingId }).unwrap();
+ toast.success('Gift details saved!');
+ } catch (err) {
+ console.error('Failed to save gift details:', err);
+ toast.error('Failed to save gift details. Please try again.');
+ return;
+ }
+ }
+
+ setIsRedirecting(true);
+
+ try {
+ const payResponse = await payForCard(bookingId).unwrap();
+ console.log('payForCard response:', payResponse);
+
+ const { checkoutPageUrl } = payResponse;
+
+
+ const setCookie = (name: string, value: string, days = 1) => {
+ const expires = new Date();
+ expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);
+ document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/;SameSite=Lax`;
+ };
+ setCookie('pendingBookingId', bookingId);
+ localStorage.setItem('pendingBookingId', bookingId);
+ sessionStorage.setItem('pendingBookingId', bookingId);
+
+ if (!checkoutPageUrl || typeof checkoutPageUrl !== 'string') {
+ throw new Error('Invalid checkout URL received from server');
+ }
+
+ if (!checkoutPageUrl.startsWith('http://') && !checkoutPageUrl.startsWith('https://')) {
+ throw new Error('Checkout URL must start with http:// or https://');
+ }
+
+ window.location.href = checkoutPageUrl;
+ } catch (err: any) {
+ console.error('Payment initiation error:', err);
+ const errorMsg = err?.data?.message || err?.message || 'Failed to initiate payment. Please try again.';
+ toast.error(errorMsg);
+ setIsRedirecting(false);
+ }
+ };
+
+ if (isLoading) {
+ return ;
+ }
+
+ return (
+
+
{ }}
+ onSignInClick={onSignInClick}
+ onSignOutClick={onSignOutClick}
+ onPassesClick={onPassesClick}
+ onCheckoutClick={onCheckoutClick}
+ onHomeClick={onHomeClick}
+ onAttractionsClick={onAttractionsClick}
+ onBlogsClick={onBlogsClick}
+ onHowItWorksClick={onHowItWorksClick}
+ onFAQClick={onFAQClick}
+ onPrivacyPolicyClick={onPrivacyPolicyClick}
+ onAboutUsClick={onAboutUsClick}
+ onProfileClick={onProfileClick}
+ onCityCardsClick={onCityCardsClick}
+ onMagicItineraryClick={onMagicItineraryClick}
+ onPostCardsClick={onPostCardsClick}
+ onOffersClick={onOffersClick}
+ onSuperSavingsClick={onSuperSavingsClick}
+ onEsimsClick={onEsimsClick}
+ onHotelDiscountsClick={onHotelDiscountsClick}
+ onCartClick={onCartClick}
+ currentPage={currentPage as any}
+ user={user}
+ />
+
+
+
navigate(-1)}
+ className="flex items-center gap-2 text-[#8e8e8e] hover:text-[#2a2a2a] transition-colors font-poppins text-sm font-normal mb-8"
+ >
+ Back
+
+
+
+
+
+ Review &
+ Pay
+
+
+
+ SSL Secured
+
+
+
+ Complete your purchase securely. You will be redirected to Stripe to enter your card details.
+
+
+
+
+
+
+
+
+ setSelectedTab('myself')}
+ className={`flex-1 flex items-center justify-center gap-2 py-3 rounded-xl font-poppins text-sm font-medium transition-all duration-200 ${selectedTab === 'myself'
+ ? 'bg-[#F95F62] text-white shadow-md shadow-[#F95F62]/20'
+ : 'bg-gray-100 text-[#555] hover:bg-gray-200'
+ }`}
+ >
+
+ For myself
+
+ setSelectedTab('gift')}
+ className={`flex-1 flex items-center justify-center gap-2 py-3 rounded-xl font-poppins text-sm font-medium transition-all duration-200 ${selectedTab === 'gift'
+ ? 'bg-[#F95F62] text-white shadow-md shadow-[#F95F62]/20'
+ : 'bg-gray-100 text-[#555] hover:bg-gray-200'
+ }`}
+ >
+
+ To gift Someone
+
+
+
+
+
+
+
+
+
+
+ Details pre-filled from your profile. {' '}
+ {selectedTab === 'myself' ? 'Personal & billing details are locked.' : 'Only gift recipient details are editable.'}
+
+
+
+
+
+ {/* Personal Information */}
+
+
+
+ 1
+
+
Personal Information
+
+
+ { }} prefilled disabled />
+ { }} prefilled disabled />
+
+
+ { }} type="email" prefilled disabled />
+ { }} type="tel" prefilled disabled />
+
+
+
+ {/* Gift Section */}
+
+ {selectedTab === 'gift' && (
+
+
+
+
+
Gift Recipient Details
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+
+
+
+ {/* Billing Address */}
+
+
+
+ 2
+
+
Billing Address
+
+
+
{ }} prefilled disabled />
+ { }} prefilled disabled />
+
+ { }} prefilled disabled />
+ { }} prefilled disabled />
+
+
+ { }} inputMode="numeric" prefilled disabled />
+ { }} prefilled disabled />
+
+
+
+
+
+
+
+ {/* Right Column: Order Summary & Payment Button */}
+
+
+
+
+
Order Summary
+
+
+
+
+
+ {bookingDetails?.cardMode}
+
+
+
+
{bookingDetails?.name}
+
+
+
+ {bookingDetails?.cardMode?.toLowerCase() === 'flexi'
+ ? `${bookingDetails?.noOfAttractions} Attractions`
+ : `${bookingDetails?.noOfDays} Days`}
+
+
+
+
+
+ Adults
+ {bookingDetails?.totalAdult}
+
+
+ Children
+ {bookingDetails?.totalChild}
+
+
+
+
+
+
+
+ Subtotal
+ ${bookingDetails?.baseAmount}
+
+
+ GST (10%)
+ ${bookingDetails?.totalTaxAmount}
+
+
+ Booking fee
+ Free
+
+
+ Total
+ ${bookingDetails?.totalAmount}
+
+
+
+
+
+
+ {isRedirecting ? (
+ <>
+
+ Redirecting to Stripe...
+ >
+ ) : (
+ <>
+
+ Proceed to Payment · ${bookingDetails?.totalAmount}
+ >
+ )}
+
+
+
+ You will be redirected to Stripe’s secure checkout page to enter your card details.
+ By completing your purchase you agree to our Terms of Service and Privacy Policy.
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/PaymentSuccessPage.tsx b/src/pages/PaymentSuccessPage.tsx
new file mode 100644
index 0000000..5872761
--- /dev/null
+++ b/src/pages/PaymentSuccessPage.tsx
@@ -0,0 +1,184 @@
+import React, { useEffect, useState } from 'react';
+import { useNavigate, useSearchParams } from 'react-router-dom';
+import { CheckCircle, XCircle, Loader2 } from 'lucide-react';
+import { useConfirmCardPaymentMutation } from '../Redux/services/cards.service';
+import { toast } from 'sonner';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+
+interface PaymentSuccessPageProps {
+ onHomeClick: () => void;
+ onPassesClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick?: () => void;
+ currentPage?: string;
+ user?: { email: string; name: string } | null;
+}
+
+// Helper to get cookie value
+const getCookie = (name: string): string | null => {
+ const value = `; ${document.cookie}`;
+ const parts = value.split(`; ${name}=`);
+ if (parts.length === 2) return parts.pop()?.split(';').shift() || null;
+ return null;
+};
+
+export function PaymentSuccessPage({
+ onHomeClick,
+ onPassesClick,
+ onSignInClick,
+ onSignOutClick,
+ currentPage,
+ user,
+}: PaymentSuccessPageProps) {
+ const [searchParams] = useSearchParams();
+ const [confirmPayment, { isLoading }] = useConfirmCardPaymentMutation();
+ const [status, setStatus] = useState<'loading' | 'success' | 'error'>('loading');
+ const [errorMsg, setErrorMsg] = useState('');
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ const confirm = async () => {
+ // 1. Retrieve bookingId from storage (cookie, localStorage, sessionStorage, or query param)
+ let bookingId = getCookie('pendingBookingId');
+ if (!bookingId) bookingId = localStorage.getItem('pendingBookingId');
+ if (!bookingId) bookingId = sessionStorage.getItem('pendingBookingId');
+ if (!bookingId) bookingId = searchParams.get('bookingId');
+
+ // 2. Get checkoutSessionId from URL query parameter
+ const checkoutSessionId = searchParams.get('session_id');
+
+ console.log('Retrieved data:', {
+ bookingId: bookingId,
+ checkoutSessionId: checkoutSessionId,
+ cookie: getCookie('pendingBookingId'),
+ localStorage: localStorage.getItem('pendingBookingId'),
+ sessionStorage: sessionStorage.getItem('pendingBookingId'),
+ queryBookingId: searchParams.get('bookingId'),
+ });
+
+ if (!bookingId) {
+ setStatus('error');
+ setErrorMsg(
+ 'Booking ID not found. Please contact support with your order details. ' +
+ 'If you just completed payment, your order may still be processing.'
+ );
+ return;
+ }
+
+ if (!checkoutSessionId) {
+ setStatus('error');
+ setErrorMsg(
+ 'Missing session ID. Please contact support with your order details.'
+ );
+ return;
+ }
+
+ try {
+ // Call API with both id and checkoutSessionId
+ await confirmPayment({ id: bookingId, checkoutSessionId }).unwrap();
+ setStatus('success');
+ toast.success('Payment confirmed! Your order is complete.');
+
+ // Clean up all storage
+ document.cookie = 'pendingBookingId=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
+ localStorage.removeItem('pendingBookingId');
+ sessionStorage.removeItem('pendingBookingId');
+ } catch (err: any) {
+ console.error('Confirmation error:', err);
+ setStatus('error');
+ setErrorMsg(err?.data?.message || 'Failed to confirm payment. Please contact support.');
+ toast.error('Confirmation failed');
+ // Clean up to avoid retry loops
+ document.cookie = 'pendingBookingId=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
+ localStorage.removeItem('pendingBookingId');
+ sessionStorage.removeItem('pendingBookingId');
+ }
+ };
+
+ confirm();
+ }, [confirmPayment, searchParams]);
+
+ return (
+
+
{}}
+ onSignInClick={onSignInClick}
+ onSignOutClick={onSignOutClick}
+ onHomeClick={onHomeClick}
+ onPassesClick={onPassesClick}
+ onCheckoutClick={() => {}}
+ onAttractionsClick={() => {}}
+ onBlogsClick={() => {}}
+ onHowItWorksClick={() => {}}
+ onFAQClick={() => {}}
+ onPrivacyPolicyClick={() => {}}
+ onAboutUsClick={() => {}}
+ onProfileClick={() => {}}
+ onCityCardsClick={() => {}}
+ onMagicItineraryClick={() => {}}
+ onPostCardsClick={() => {}}
+ onOffersClick={() => {}}
+ onSuperSavingsClick={() => {}}
+ onEsimsClick={() => {}}
+ onHotelDiscountsClick={() => {}}
+ onCartClick={() => {}}
+ currentPage={currentPage as any}
+ user={user}
+ />
+
+
+
+ {status === 'loading' && (
+ <>
+
+
Confirming your payment...
+
Please wait while we verify your transaction.
+ >
+ )}
+
+ {status === 'success' && (
+ <>
+
+
Payment Successful!
+
Thank you for your purchase. Your order is now confirmed.
+
navigate('/profile')}
+ className="mt-6 px-6 py-3 bg-[#F95F62] text-white rounded-xl font-medium hover:bg-[#e8545a] transition"
+ >
+ View My Profile
+
+ >
+ )}
+
+ {status === 'error' && (
+ <>
+
+
Payment Confirmation Failed
+
{errorMsg}
+
navigate('/')}
+ className="mt-6 px-6 py-3 bg-gray-200 text-[#2a2a2a] rounded-xl font-medium hover:bg-gray-300 transition"
+ >
+ Go to Homepage
+
+ >
+ )}
+
+
+
+ {}}
+ onBlogsClick={() => {}}
+ onHowItWorksClick={() => {}}
+ onFAQClick={() => {}}
+ onPrivacyPolicyClick={() => {}}
+ onAboutUsClick={() => {}}
+ onContactUsClick={() => {}}
+ />
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/PostCardsPage.tsx b/src/pages/PostCardsPage.tsx
new file mode 100644
index 0000000..2228d7f
--- /dev/null
+++ b/src/pages/PostCardsPage.tsx
@@ -0,0 +1,230 @@
+import React from 'react';
+import { motion } from 'motion/react';
+import { ArrowLeft, Camera, Edit3, Upload, Heart, Star, Download, Share2 } from 'lucide-react';
+import { Button } from '../components/ui/button';
+import { Card, CardContent } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import Navbar from '../components/Navbar';
+// import SubNavbar from './SubNavbar';
+import { Footer } from '../components/Footer';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
+import { CustomPostcards } from '../components/CustomPostcards';
+import { HowItWorks } from '../components/HowItWorks';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { Layout } from '../Layout';
+// import front from '../assets/front.jpg'
+
+
+interface User {
+ email: string;
+ name: string;
+}
+
+interface PostCardsPageProps {
+ onBackClick: () => void;
+ onHomeClick: () => void;
+ onMelbourneClick: () => void;
+ onPassesClick: () => void;
+ onCheckoutClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick: () => void;
+ onAttractionsClick: () => void;
+ onBlogsClick: () => void;
+ onHowItWorksClick: () => void;
+ onFAQClick: () => void;
+ onPrivacyPolicyClick: () => void;
+ onAboutUsClick: () => void;
+ onProfileClick: () => void;
+ onCityCardsClick: () => void;
+ onMagicItineraryClick: () => void;
+ onPostCardsClick: () => void;
+ onOffersClick: () => void;
+ onContactUsClick?: () => void;
+ onEsimsClick?: () => void;
+ onHotelDiscountsClick?: () => void;
+ currentPage: string;
+ user: User | null;
+}
+
+export function PostCardsPage({
+ onBackClick,
+ onHomeClick,
+ onMelbourneClick,
+ onPassesClick,
+ onCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onProfileClick,
+ onCityCardsClick,
+ onMagicItineraryClick,
+ onPostCardsClick,
+ onOffersClick,
+ onContactUsClick,
+ onEsimsClick,
+ onHotelDiscountsClick,
+ currentPage,
+ user
+}: PostCardsPageProps) {
+ return (
+
+ {/* Navbar */}
+
+
+ {/* Hero Section */}
+
+ {/* Background gradient */}
+
+
+
+
+
+ Create Beautiful {' '}
+
+ Custom Postcards
+
+
+
+ Transform your travel memories into stunning, personalized postcards with authentic handwritten messages.
+ Share your journey in a way that feels truly personal and meaningful.
+
+ {/*
+ Start Creating Postcards
+ */}
+
+ {/* < img src={front} alt='Postcard image' /> */}
+
+
+ {/* Decorative elements */}
+
+
+
+
+ {/* How It Works Section */}
+
+
+ {/* Reuse CustomPostcards Component */}
+
+
+ {/* Features Section */}
+
+
+ {/* Gallery Section */}
+
+
+
+
+ Postcard {' '}
+
+ Gallery
+ {' '}
+
+
+
+ Get inspired by beautiful postcards created by our community of travelers
+
+
+
+
+ {[
+ {
+ image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
+ title: 'Tropical Paradise',
+ message: 'Greetings from paradise! The beaches here are absolutely breathtaking...',
+ location: 'Maldives'
+ },
+ {
+ image: 'https://images.unsplash.com/photo-1499856871958-5b9627545d1a?w=400&h=600&fit=crop',
+ title: 'City Adventures',
+ message: 'Having the most amazing time exploring this incredible city...',
+ location: 'Paris, France'
+ },
+ {
+ image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
+ title: 'Mountain Views',
+ message: 'The views from up here are simply unbelievable. Wish you were here...',
+ location: 'Swiss Alps'
+ },
+ {
+ image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
+ title: 'Cultural Journey',
+ message: 'Immersing myself in the rich culture and history of this amazing place...',
+ location: 'Kyoto, Japan'
+ },
+ {
+ image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
+ title: 'Safari Adventure',
+ message: 'Just saw the most incredible wildlife! This experience is unforgettable...',
+ location: 'Kenya, Africa'
+ },
+ {
+ image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop',
+ title: 'Island Escape',
+ message: 'Living the island life and loving every moment of this peaceful retreat...',
+ location: 'Santorini, Greece'
+ }
+ ].map((postcard, index) => (
+
+ {/* */}
+ {/* */}
+
+
+
+
+
+ {postcard.location}
+
+
{postcard.title}
+
"{postcard.message}"
+
+ {/*
+ */}
+
+ ))}
+
+
+
+
+ {/* Customer Reviews */}
+
+
+ {/* Mobile App Section */}
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/PrivacyPolicyPage.tsx b/src/pages/PrivacyPolicyPage.tsx
similarity index 97%
rename from src/components/PrivacyPolicyPage.tsx
rename to src/pages/PrivacyPolicyPage.tsx
index 5117319..9787bc2 100644
--- a/src/components/PrivacyPolicyPage.tsx
+++ b/src/pages/PrivacyPolicyPage.tsx
@@ -1,13 +1,13 @@
import { useState, useEffect } from 'react';
import { motion, useScroll, useTransform } from 'motion/react';
import { ArrowLeft } from 'lucide-react';
-import Navbar from './Navbar';
+import Navbar from '../components/Navbar';
// import { CitySubmenu } from './CitySubmenu';
-import { Footer } from './Footer';
-import { MobileAppSection } from './MobileAppSection';
-import { WhyChooseCityCards } from './WhyChooseCityCards';
-import { EnhancedTestimonials } from './EnhancedTestimonials';
-import { ReviewsSection } from './ReviewsSection';
+import { Footer } from '../components/Footer';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { WhyChooseCityCards } from '../components/WhyChooseCityCards';
+import { EnhancedTestimonials } from '../components/EnhancedTestimonials';
+import { ReviewsSection } from '../components/ReviewsSection';
interface User {
email: string;
diff --git a/src/components/ProfilePage.tsx b/src/pages/ProfilePage.tsx
similarity index 75%
rename from src/components/ProfilePage.tsx
rename to src/pages/ProfilePage.tsx
index 02842d6..2353841 100644
--- a/src/components/ProfilePage.tsx
+++ b/src/pages/ProfilePage.tsx
@@ -1,11 +1,11 @@
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
import { motion } from 'motion/react';
-import {
- ArrowLeft,
- User,
- CreditCard,
- Calendar,
- MapPin,
+import {
+ ArrowLeft,
+ User,
+ CreditCard,
+ Calendar,
+ MapPin,
Settings,
Download,
QrCode,
@@ -15,17 +15,22 @@ import {
Badge as BadgeIcon,
Camera
} from 'lucide-react';
-import { Button } from './ui/button';
-import { Input } from './ui/input';
-import { Label } from './ui/label';
-import { Card, CardContent, CardHeader, CardTitle } from './ui/card';
-import { Separator } from './ui/separator';
-import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs';
-import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select';
-import { Badge } from './ui/badge';
-import Navbar from './Navbar';
-import { Footer } from './Footer';
-import { ImageWithFallback } from './figma/ImageWithFallback';
+import { Button } from '../components/ui/button';
+import { Input } from '../components/ui/input';
+import { Label } from '../components/ui/label';
+import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card';
+import { Separator } from '../components/ui/separator';
+import { Tabs, TabsContent, TabsList, TabsTrigger } from '../components/ui/tabs';
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../components/ui/select';
+import { Badge } from '../components/ui/badge';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { useGetUserCardsQuery, useGetUserProfileDetailsQuery, useUpdateUserProfileDetailsMutation } from '../Redux/services/profile.service';
+import { toast } from 'sonner';
+import { useNavigate } from 'react-router-dom';
+import LoadingSpinner from '../components/LoadingSpinner';
+import { useGetUserItinerariesQuery } from '../Redux/services/itinerary.service';
interface ProfilePageProps {
onBackClick: () => void;
@@ -55,83 +60,6 @@ interface ProfilePageProps {
currentPage: string;
}
-// Mock user data
-const mockUserData = {
- firstName: 'John',
- lastName: 'Doe',
- email: 'john.doe@example.com',
- phone: '+1 (555) 123-4567',
- country: 'us',
- address: '123 Main Street',
- city: 'New York',
- postalCode: '10001'
-};
-
-// Mock passes data
-const mockPasses = [
- {
- id: '1',
- name: 'Melbourne Unlimited Card',
- city: 'Melbourne',
- type: 'Unlimited Pass',
- status: 'active',
- price: 149.00,
- originalPrice: 249.00,
- discount: 40,
- attractions: 25,
- validFrom: '2024-01-15',
- validUntil: '2024-01-22',
- daysRemaining: 3,
- image: 'https://images.unsplash.com/photo-1514395462725-fb4566210144?w=400',
- usedAttractions: 8
- },
- {
- id: '2',
- name: 'Melbourne Selective Card',
- city: 'Melbourne',
- type: 'Flexi Pass',
- status: 'active',
- price: 89.00,
- originalPrice: 149.00,
- discount: 40,
- attractions: 12,
- validFrom: '2024-02-01',
- validUntil: '2024-02-08',
- daysRemaining: 12,
- image: 'https://images.unsplash.com/photo-1502602898536-47ad22581b52?w=400',
- usedAttractions: 3
- },
- {
- id: '3',
- name: 'Sydney Explorer Pass',
- city: 'Sydney',
- type: 'Standard Pass',
- status: 'expired',
- price: 89.00,
- originalPrice: 149.00,
- discount: 40,
- attractions: 15,
- validFrom: '2023-12-01',
- validUntil: '2023-12-08',
- daysRemaining: 0,
- image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400',
- usedAttractions: 12
- }
-];
-
-// Mock itineraries data
-const mockItineraries = [
- {
- id: '1',
- name: 'Melbourne Unlimited Card',
- city: 'Melbourne',
- duration: '7 days',
- attractions: 25,
- createdDate: '2024-01-15',
- status: 'active'
- }
-];
-
export function ProfilePage({
onBackClick,
onHomeClick,
@@ -160,55 +88,93 @@ export function ProfilePage({
currentPage
}: ProfilePageProps) {
const [activeTab, setActiveTab] = useState('profile');
- const [formData, setFormData] = useState(mockUserData);
+ const [formData, setFormData] = useState({
+ firstName: '',
+ lastName: '',
+ email: '',
+ phone: '',
+ country: '',
+ address1: '',
+ address2: '',
+ city: '',
+ postalCode: ''
+ });
+
+ const [sort, setSort] = useState("latest")
+ const navigate = useNavigate()
+ const userId = localStorage.getItem("userId")
+ const cityId = localStorage.getItem("cityId")
+ const { data: userDetails, isLoading } = useGetUserProfileDetailsQuery(userId)
+ const [updateUserProfileDetails, { isLoading: savingChanges }] = useUpdateUserProfileDetailsMutation();
+ const { data, isLoading: loadingCards } = useGetUserCardsQuery({sort,cityId})
+ const { data: userItineraries, isLoading: loadingItineraries } = useGetUserItinerariesQuery(cityId)
+
+ const cards = data ?? []
+ const itineraries = userItineraries?.itineraries ?? []
+
+ useEffect(() => {
+ if (userDetails) {
+ setFormData({
+ firstName: userDetails?.firstName,
+ lastName: userDetails?.lastName,
+ email: userDetails?.emailAddress,
+ phone: userDetails?.mobileNumber,
+ country: userDetails?.country,
+ address1: userDetails?.address1,
+ address2: userDetails?.address2,
+ city: userDetails?.cityName,
+ postalCode: userDetails?.zipCode
+ })
+ }
+
+ }, [userDetails])
+
const handleInputChange = (field: string, value: string) => {
setFormData(prev => ({ ...prev, [field]: value }));
};
- const handleSaveProfile = () => {
- console.log('Saving profile...', formData);
- // Handle profile save
+ const handleSaveProfile = async () => {
+ try {
+ console.log("Saving profile...", formData);
+ const response = await updateUserProfileDetails({ userDetails: formData, userId });
+ console.log(response)
+ toast.success("Profile updated successfully!");
+ } catch (error) {
+ console.error("Error saving profile:", error);
+ toast.error("Failed to update profile. Please try again.");
+ }
};
- const activePasses = mockPasses.filter(pass => pass.status === 'active');
- const expiredPasses = mockPasses.filter(pass => pass.status === 'expired');
+ const activeCards = cards.filter((card: any) => card.isActive === true);
+ const expiredCards = cards.filter((card: any) => card.isActive === false);
+
+ if (isLoading && loadingCards) {
+ return (
+
+ );
+ }
return (
{/* Navbar */}
-
{}}
- onHomeClick={onHomeClick}
- onMelbourneClick={onMelbourneClick}
- onPassesClick={onPassesClick}
- onCheckoutClick={onCheckoutClick}
onSignInClick={onSignInClick}
onSignOutClick={onSignOutClick}
- onAttractionsClick={onAttractionsClick}
- onBlogsClick={onBlogsClick}
- onHowItWorksClick={onHowItWorksClick}
- onFAQClick={onFAQClick}
- onPrivacyPolicyClick={onPrivacyPolicyClick}
- onAboutUsClick={onAboutUsClick}
- onProfileClick={onProfileClick}
- onCityCardsClick={onCityCardsClick}
- onMagicItineraryClick={onMagicItineraryClick}
- onPostCardsClick={onPostCardsClick}
- onOffersClick={onOffersClick}
- currentPage={currentPage}
isUserSignedIn={true}
user={{ email: "user@example.com", name: "John Doe" }}
- />
+ onCityChange={function (city: string): void {
+ throw new Error('Function not implemented.');
+ }} />
{/* Header Section */}
{/* Back Button */}
navigate(-1)}
+ className="flex items-center gap-2 text-gray-600 hover:text-gray-900 mb-6 transition-colors duration-200 cursor-pointer"
initial={{ opacity: 0, x: -20 }}
animate={{ opacity: 1, x: 0 }}
transition={{ duration: 0.5 }}
@@ -225,10 +191,10 @@ export function ProfilePage({
>
My {' '}
- Profile
+ Profile
- Manage your account, passes, and travel itineraries
+ Manage your account, cards, and travel itineraries
@@ -241,7 +207,7 @@ export function ProfilePage({
{/* Tab Navigation */}
My Profile
- My Passes
+ My Cards
My Itineraries
@@ -312,29 +278,32 @@ export function ProfilePage({
Country
- handleInputChange('country', value)}>
-
-
-
-
- United States
- Australia
- United Kingdom
- Canada
- Germany
- France
- India
- Japan
-
-
+ handleInputChange('country', e.target.value)}
+ className="mt-1 font-poppins font-light"
+ />
- Street Address
+
+ Address Line 1
+
handleInputChange('address', e.target.value)}
+ id="address1"
+ value={formData.address1}
+ onChange={(e) => handleInputChange('address1', e.target.value)}
+ className="mt-1 font-poppins font-light mb-4"
+ />
+
+
+ Address Line 2
+
+ handleInputChange('address2', e.target.value)}
className="mt-1 font-poppins font-light"
/>
@@ -362,9 +331,9 @@ export function ProfilePage({
- Save Changes
+ {savingChanges ? "Saving Changes..." : "Save Changes"}
@@ -382,9 +351,9 @@ export function ProfilePage({
{(() => {
// Determine which pass type to show
- const hasUnlimitedPass = activePasses.some(pass => pass.type === 'Unlimited Pass');
- const hasSelectivePass = activePasses.some(pass => pass.type === 'Flexi Pass');
-
+ const hasUnlimitedPass = activeCards.some((card: any) => card.cardType.cardTypeName === 'selective_pass');
+ const hasSelectivePass = activeCards.some((card: any) => card.cardType.cardTypeName === 'unlimited_card');
+
if (hasUnlimitedPass) {
return (
<>
@@ -394,7 +363,7 @@ export function ProfilePage({
Melbourne Unlimited Card
- Unlimited access to 25+ attractions. Visit as many places as you want with one simple card.
+ Unlimited access to 25+ attractions. Visit as many places as you want with one simple card.
Save up to 40% compared to individual tickets.
@@ -423,13 +392,13 @@ export function ProfilePage({
{/* Purchase CTA */}
-
Purchase Unlimited Card
-
- Choose your own adventure with 12 hand-picked attractions. Perfect for visitors
+ Choose your own adventure with 12 hand-picked attractions. Perfect for visitors
who want flexibility and value.
@@ -478,13 +447,13 @@ export function ProfilePage({
{/* Purchase CTA */}
-
Purchase Selective Card
-
- Explore Melbourne's best attractions with our flexible card options.
+ Explore Melbourne's best attractions with our flexible card options.
Choose unlimited access or select your favorites.
@@ -535,13 +504,13 @@ export function ProfilePage({
{/* Purchase CTA */}
-
Explore All Cards
-
- {/* My Passes Tab */}
+ {/* My Cards Tab */}
- {/* Active Passes */}
+ {/* Active Cards */}
- Active Passes
+ Active Cards
- {activePasses.map((pass) => (
-
- (
+
+ onDownloadAppClick?.()}
+ onClick={() => navigate(`/view-card-details/${card.id}`)}
>
-
{pass.name}
-
- {pass.status}
+ {card.card.title}
+
+ {card.isActive && "Active"}
-
${pass.price}
-
${pass.originalPrice}
+
${card.totalAmount}
+
${card.totalAmount + 50}
-
+
- Attractions:
- {pass.usedAttractions}/{pass.attractions}
+ {card.cardMode === "flexi" ? (
+ <>
+ Attractions:
+ {card.noOfAttractions}
+ >
+ ) : (
+ <>
+ Days:
+ {card.noOfDays}
+ >
+ )
+ }
Valid until:
- {new Date(pass.validUntil).toLocaleDateString()}
+ {new Date(card.validUpto).toLocaleDateString()}
Days remaining:
- {pass.daysRemaining} days
+ {Math.max(
+ 0,
+ Math.ceil(
+ (new Date(card.validUpto).getTime() - new Date().getTime()) /
+ (1000 * 60 * 60 * 24)
+ )
+ )} days
@@ -616,11 +601,11 @@ export function ProfilePage({
))}
-
+
{/* Offers Button */}
- navigate("/super-savings")}
className="bg-gradient-to-r from-primary to-secondary hover:from-primary/90 hover:to-secondary/90 text-white font-poppins px-8 py-3 font-normal"
>
@@ -629,46 +614,56 @@ export function ProfilePage({
- {/* Expired Passes */}
- {expiredPasses.length > 0 && (
+ {/* Expired Cards */}
+ {expiredCards.length > 0 && (
- Expired Passes
+ Expired Cards
- {expiredPasses.map((pass) => (
-
+ {expiredCards.map((card: any) => (
+
-
{pass.name}
+ {card.card.title}
- {pass.status}
+ {!card.isActive && "Expired"}
-
${pass.price}
+
${card.price}
-
+
- Attractions visited:
- {pass.usedAttractions}/{pass.attractions}
+ {card.cardMode === "flexi" ? (
+ <>
+ Attractions:
+ {card.noOfAttractions}
+ >
+ ) : (
+ <>
+ Days:
+ {card.noOfDays}
+ >
+ )
+ }
Expired on:
- {new Date(pass.validUntil).toLocaleDateString()}
+ {new Date(card.validUpto).toLocaleDateString()}
@@ -689,49 +684,49 @@ export function ProfilePage({
>
My Itineraries
-
navigate("/create-itinerary")}
>
Create Itinerary
- {mockItineraries.length > 0 ? (
+ {itineraries?.length > 0 ? (
- {mockItineraries.map((itinerary) => (
+ {itineraries.map((itinerary: any) => (
-
{itinerary.name}
-
{itinerary.city}
+
{ }
+
{itinerary.city.cityName} Travel Plan
-
- {itinerary.status}
+
+ {itinerary.isActive ? "Active" : "Inactive"}
-
+
- {itinerary.duration}
+ {itinerary.totalDays}
- {itinerary.attractions} attractions
+ {itinerary?.attractions} attractions
- Created {new Date(itinerary.createdDate).toLocaleDateString()}
+ Created {new Date(itinerary.createdAt).toLocaleDateString()}
- navigate(`/view-itinerary/${itinerary.id}`)}
>
View Itinerary
@@ -749,9 +744,9 @@ export function ProfilePage({
Create your first itinerary to plan your perfect trip
- navigate("/create-itinerary")}
>
Create Itinerary
@@ -766,7 +761,7 @@ export function ProfilePage({
{/* Footer */}
- void;
+ onCheckoutClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick?: () => void;
+ user?: { email: string; name: string } | null;
+}
+
+export function SuperSavingsDetailsPage({
+ onBackClick,
+ onCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ user,
+}: SuperSavingsDetailsPageProps) {
+ const { id } = useParams();
+ const { data: offer, isLoading } = useGetOfferDetailsByIdQuery(Number(id));
+ const baseUrl = import.meta.env.VITE_BASE_URL;
+
+
+ if (isLoading) {
+ return ;
+ }
+
+ // Guard against missing data – but keep all UI elements
+ const safeOffer = offer || {
+ id: 0,
+ title: 'Offer Details',
+ description: 'No description available.',
+ cityXid: 0,
+ cardXid: 0,
+ cardTypeXid: 0,
+ categoryXid: 0,
+ partnerName: '',
+ offerCode: '',
+ websiteBannerImage: '',
+ mobileBannerImage: '',
+ redemptionLink: '',
+ passType: '',
+ startDateTime: null,
+ endDateTime: null,
+ applyToPasses: false,
+ stepsForBooking: null,
+ offerStatus: '',
+ isActive: true,
+ createdAt: '',
+ updatedAt: '',
+ city: { id: 0, cityName: 'Unknown City' },
+ card: { id: 0, title: 'Unknown Card' },
+ cardType: { id: 0, cardTypeDisplayName: 'Standard' },
+ category: { id: 0, categoryName: 'General' },
+ };
+
+ // Build badges from available API data (preserves the badge UI section)
+ const superSavingsBadges = [
+ safeOffer.category && { badgeXid: safeOffer.category.id, badge: { badgeName: safeOffer.category.categoryName } },
+ safeOffer.cardType && { badgeXid: safeOffer.cardType.id, badge: { badgeName: safeOffer.cardType.cardTypeDisplayName } },
+ safeOffer.offerCode && { badgeXid: -1, badge: { badgeName: `Code: ${safeOffer.offerCode}` } },
+ safeOffer.offerStatus && { badgeXid: -2, badge: { badgeName: safeOffer.offerStatus.toUpperCase() } },
+ ].filter(Boolean);
+
+ // Build gallery array from banner images (original expected superSavingsGalleries)
+ const superSavingsGalleries = [];
+ if (safeOffer.websiteBannerImage) {
+ superSavingsGalleries.push({ id: 1, filePathUrl: safeOffer.websiteBannerImage });
+ }
+ if (safeOffer.mobileBannerImage) {
+ superSavingsGalleries.push({ id: 2, filePathUrl: safeOffer.mobileBannerImage });
+ }
+ // If no images, add a placeholder
+ if (superSavingsGalleries.length === 0) {
+ superSavingsGalleries.push({ id: 0, filePathUrl: 'https://placehold.co/1200x800?text=No+Image' });
+ }
+
+ // Mock data for sections not present in API (preserve structure but show empty/fallback)
+ const durations = safeOffer.startDateTime && safeOffer.endDateTime
+ ? Math.round((new Date(safeOffer.endDateTime).getTime() - new Date(safeOffer.startDateTime).getTime()) / (1000 * 60))
+ : 'Not specified';
+ const groupSize = 'Not specified';
+ const ageRange = 'All ages';
+ const superSavingsLanguages: any[] = []; // API has no language data
+ const superSavingsHighlights: any[] = []; // API has no highlights
+ // Inclusions: API has none, so show empty state (or we could derive from redemptionLink etc.)
+ const superSavingsInclusions: any[] = [];
+ const address = safeOffer.city?.cityName || 'Location not specified';
+
+ return (
+
+
+ {/* Back Button */}
+
+
+
+ Back to Super-Savings Page
+
+
+
+ {/* Title and Badges Section */}
+
+
+ {superSavingsBadges.map((badge: any, index: number) => (
+
+ {badge.badge.badgeName}
+
+ ))}
+
+
+
+
+ {safeOffer.title}
+ {' '}
+
+ Day Trip by {safeOffer.partnerName || safeOffer.card?.title || 'Partner'}
+
+
+
+
+ {/* Image Gallery Section - preserved exactly as original */}
+
+ {/* Main large image */}
+
+
+
+
+ {/* Gallery images - use remaining images or repeat first if needed */}
+ {superSavingsGalleries.slice(1, 5).map((image: any) => (
+
+
+
+ ))}
+ {/* If less than 4 extra images, fill with placeholders to maintain grid */}
+ {superSavingsGalleries.slice(1, 5).length < 4 &&
+ Array(4 - superSavingsGalleries.slice(1, 5).length)
+ .fill(null)
+ .map((_, idx) => (
+
+ ))}
+
+
+ {/* Main Content Grid */}
+
+ {/* Left Content - Tour Details */}
+
+ {/* Overview Cards - preserved */}
+
+ {/* Duration */}
+
+
+
+
+ Duration
+
+ {typeof durations === 'number' ? `${durations} mins` : durations}
+
+
+
+ {/* Group Size */}
+
+
+
+
+ Group Size
+ {groupSize}
+
+
+ {/* Age Range */}
+
+
+
+
+ Age Range
+ {ageRange}
+
+
+ {/* Languages */}
+
+
+
+
+ Languages
+
+ {superSavingsLanguages?.length > 0
+ ? superSavingsLanguages?.map((lang: any) => lang.language.name).join(', ')
+ : 'English (default)'}
+
+
+
+
+ {/* Tour Overview */}
+
+
+
+ {safeOffer.description}
+
+
+
+ {/* Tour Highlights - preserved even if empty */}
+
+
+
+
+ Tour Highlights
+
+
+ {superSavingsHighlights.length > 0 ? (
+
+ {superSavingsHighlights.map((highlight: any) => (
+
+
+ {highlight.title}
+
+ ))}
+
+ ) : (
+
No highlights listed for this offer.
+ )}
+
+
+ {/* What's Included/Not Included - preserved */}
+
+
+
+
+ What's included
+
+
+
+ {/* Included */}
+
+
+
+ Included
+
+ {superSavingsInclusions.filter((inc: any) => inc.isInclusion === true).length > 0 ? (
+ superSavingsInclusions
+ .filter((inclusion: any) => inclusion.isInclusion === true)
+ .map((inclusion: any) => (
+
+
+
+
+
{inclusion.title}
+
+ ))
+ ) : (
+
No included items specified.
+ )}
+
+
+ {/* Not Included */}
+
+
+
+ Not Included
+
+ {superSavingsInclusions.filter((inc: any) => inc.isInclusion === false).length > 0 ? (
+ superSavingsInclusions
+ .filter((inclusion: any) => inclusion.isInclusion === false)
+ .map((inclusion: any) => (
+
+
+
+
+
{inclusion.title}
+
+ ))
+ ) : (
+
No excluded items specified.
+ )}
+
+
+
+
+ {/* Location on map - preserved */}
+
+
+
+
+ Location on map
+
+
+
+
+
+
+
+
Interactive Map
+
{safeOffer.title}
+
{address}
+
+
+
+
+
+ {/* Right Sidebar - Calendar and Booking (preserved, but you can add a real calendar if needed) */}
+
+
+ Book This Offer
+
+
+ Availability
+
+ {safeOffer.offerStatus === 'active' ? 'Available' : 'Unavailable'}
+
+
+ {safeOffer.startDateTime && (
+
+ Valid from
+
+ {new Date(safeOffer.startDateTime).toLocaleDateString()}
+
+
+ )}
+ {safeOffer.endDateTime && (
+
+ Valid until
+
+ {new Date(safeOffer.endDateTime).toLocaleDateString()}
+
+
+ )}
+
+
+ Proceed to Checkout
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/SuperSavingsPage.tsx b/src/pages/SuperSavingsPage.tsx
new file mode 100644
index 0000000..6222ed9
--- /dev/null
+++ b/src/pages/SuperSavingsPage.tsx
@@ -0,0 +1,618 @@
+import { useState } from 'react';
+import { motion } from 'motion/react';
+import { ArrowLeft, Search, Filter, Star, MapPin, Clock, Tag, Heart, Share2, ChevronDown, ChevronRight, Check, Hotel, Plane, Building2, MapPinned, Home, Gift, Percent } from 'lucide-react';
+import { Button } from '../components/ui/button';
+import { Input } from '../components/ui/input';
+import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import { Separator } from '../components/ui/separator';
+import { Checkbox } from '../components/ui/checkbox';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { TrustSection } from '../components/TrustSection';
+import { MobileAppSection } from '../components/MobileAppSection';
+import { ReviewsSection } from '../components/ReviewsSection';
+import { TrustedCompanies } from '../components/TrustedCompanies';
+import { Layout } from '../Layout';
+import { useGetSelectedCityOffersQuery } from '../Redux/services/cities.service';
+import LoadingSpinner from '../components/LoadingSpinner';
+import { useNavigate } from 'react-router-dom';
+
+interface SuperSavingsPageProps {
+ onBackClick: () => void;
+ onHomeClick: () => void;
+ onMelbourneClick: () => void;
+ onPassesClick: () => void;
+ onCheckoutClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick: () => void;
+ onAttractionsClick: () => void;
+ onBlogsClick: () => void;
+ onHowItWorksClick: () => void;
+ onFAQClick: () => void;
+ onPrivacyPolicyClick: () => void;
+ onAboutUsClick: () => void;
+ onProfileClick: () => void;
+ onCityCardsClick: () => void;
+ onMagicItineraryClick: () => void;
+ onPostCardsClick: () => void;
+ onOffersClick: () => void;
+ onSuperSavingsClick: () => void;
+ onContactUsClick?: () => void;
+ onEsimsClick?: () => void;
+ onHotelDiscountsClick?: () => void;
+ fromSource?: 'products' | 'passes';
+ currentPage: string;
+ user?: { email: string; name: string; } | null;
+}
+
+// Categories data for the Super Savings Categories section
+const categoriesData = [
+ {
+ icon: Hotel,
+ title: 'Luxury Hotels',
+ description: 'Premium stays at unbeatable prices',
+ savings: 'Up to 50% off',
+ color: 'from-primary to-primary/80'
+ },
+ {
+ icon: Plane,
+ title: 'Travel Tours',
+ description: 'Guided experiences worth your time',
+ savings: 'Up to 45% off',
+ color: 'from-primary to-primary/80'
+ },
+ {
+ icon: MapPinned,
+ title: 'Attractions',
+ description: 'Must-see landmarks and experiences',
+ savings: 'Up to 60% off',
+ color: 'from-primary to-primary/80'
+ },
+ {
+ icon: Building2,
+ title: 'Shopping',
+ description: 'Designer brands and local boutiques',
+ savings: 'Up to 35% off',
+ color: 'from-primary to-primary/80'
+ },
+ {
+ icon: Gift,
+ title: 'Wellness',
+ description: 'Spa treatments and relaxation',
+ savings: 'Up to 45% off',
+ color: 'from-primary to-primary/80'
+ }
+];
+
+export function SuperSavingsPage({
+ onBackClick,
+ onHomeClick,
+ onMelbourneClick,
+ onPassesClick,
+ onCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onProfileClick,
+ onCityCardsClick,
+ onMagicItineraryClick,
+ onPostCardsClick,
+ onOffersClick,
+ onSuperSavingsClick,
+ onContactUsClick,
+ onEsimsClick,
+ onHotelDiscountsClick,
+ fromSource = 'products',
+ currentPage,
+ user
+}: SuperSavingsPageProps) {
+
+ const navigate = useNavigate();
+ const [categoryId, setCategoryId] = useState(null)
+ const [page, setPage] = useState(1)
+ const [limit, setLimit] = useState(4)
+ const cityId = localStorage.getItem("cityId")
+ const { data, isLoading } = useGetSelectedCityOffersQuery({ cityId, categoryId, page, limit })
+
+ // optional chaining ensures no crash if data is undefined
+ const offers = data?.offers ?? [];
+ const categories = data?.categories ?? [];
+
+ const totalOffers = data?.paginationData.total ?? 0;
+ const totalPages = Math.ceil(totalOffers / limit);
+
+ const baseUrl = import.meta.env.VITE_BASE_URL;
+
+ if (isLoading) {
+ return (
+
+ );
+ }
+
+ return (
+
+
+
+ {/* Hero Section */}
+
+ {/* Background gradient */}
+
+
+
+
+
+ Unlock {' '}
+
+ Super Savings
+
+
+
+ Experience incredible discounts up to 65% off on premium experiences, luxury stays, and unforgettable attractions.
+
+
+ Start Saving Now
+
+
+
+
+ {/* Decorative elements */}
+
+
+
+
+ {/* Trusted By Companies Section */}
+
+
+
+
+
+ Trusted by the
+ world's best
+
+
+ Join thousands of savvy travelers enjoying massive savings on premium experiences
+
+
+
+
+
+
+
+ {/* Featured Super Savings Section */}
+
+
+
+
+ Featured {' '}
+
+ Super Savings
+
+
+
+ Check out our biggest discounts and start saving on premium experiences
+
+
+
+
+
+ {/* Left Sidebar - Filters */}
+
+
+
+ {/* Search by header */}
+
+
+ {/* Filter categories */}
+
+ {categories.map((category: any) => (
+
+ {
+ if (checked) {
+ setCategoryId(category.id); // select this category
+ } else {
+ setCategoryId(null); // unselect if unchecked
+ }
+ }}
+ className="border-gray-400"
+ />
+
+ {category.categoryName} ({category.offerCount})
+
+
+ ))}
+
+
+
+
+
+ {/* Main Content */}
+
+ {/* Breadcrumb */}
+ {/*
+
+ {fromSource === 'passes' ? (
+ <>
+ My Profile{'>'}My passes{'>'}
+ Super Savings
+ >
+ ) : (
+ <>
+ Our Products{'>'}
+ Super Savings
+ >
+ )}
+
+
*/}
+
+ {/* Header Section */}
+
+
+ Super Savings
+
+
+ Exclusive discounts up to 65% off on premium experiences
+
+
+
+ {/* Offers Grid */}
+
+ {offers.map((offer: any, index: number) => (
+
+ navigate(`/super-savings/${offer.id}`)}>
+ {/* Image */}
+
+
+ {/*
+
+ */}
+
+ {/* Discount Badge */}
+
+ {offer.offerCode}
+
+
+
+
+ {/* Business Name */}
+
+
+
{offer.partnerName}
+
+
+ {/* Title */}
+
+ {offer.description}
+
+
+ {/* Saved Amount Display */}
+
+
+ {/*
*/}
+
+ {offer.title}
+
+
+
+
+
+
+ ))}
+
+
+ {/* Minimal Pagination */}
+
+
+ {/* Previous button */}
+
setPage(prev => Math.max(prev - 1, 1))}
+ >
+
+
+
+ {/* Page numbers */}
+
+ {Array.from({ length: totalPages }, (_, i) => i + 1).map(p => (
+ setPage(p)}
+ >
+ {p}
+
+ ))}
+
+
+ {/* Next button */}
+
setPage(prev => Math.min(prev + 1, totalPages))}
+ >
+
+
+
+
+
+
+
+
+ {/*
+
+ View All Super Savings
+
+
*/}
+
+
+
+ {/* How It Works Section */}
+
+ {/* Background decorative elements */}
+
+
+
+
+
+
+
+ Start Saving in Minutes
+
+
+ Your journey to smarter travel and bigger savings begins with three simple steps.
+
+
+
+
+ {/* Connecting line for desktop */}
+
+
+
+ {[
+ {
+ step: '01',
+ title: 'Unlock Access',
+ description: 'Get your CityCards pass to instantly activate membership perks.',
+ icon: MapPinned
+ },
+ {
+ step: '02',
+ title: 'Discover Deals',
+ description: 'Browse exclusive offers on hotels, flights, and experiences.',
+ icon: Search
+ },
+ {
+ step: '03',
+ title: 'Enjoy Savings',
+ description: 'Redeem discounts instantly and watch your travel budget grow.',
+ icon: Percent
+ }
+ ].map((item, index) => (
+
+
+ {/* Icon Container */}
+
+
+
+ {item.title}
+
+
+ {item.description}
+
+
+
+ ))}
+
+
+
+
+
+
+
+ {/* Categories Section */}
+
+ {/* Abstract Travel Patterns */}
+
+
+
+ {/* Section Header */}
+
+
+
+
+
Explore Collections
+
+
+ Curated for the Modern Traveler
+
+
+ Discover exclusive savings across our most sought-after travel categories.
+
+
+
+
+
+ View All Categories
+
+
+
+
+
+
+
+ {/* Bento Grid Layout */}
+
+ {categoriesData.map((category, index) => (
+
+
+ {/* Background Gradient Hover */}
+
+
+ {/* Large Watermark Icon for visual depth */}
+
+
+
+
+
+
+
+
+ {category.savings}
+
+
+
+
+ {category.title}
+
+
+ {category.description}
+
+
+
+
+
+
+ ))}
+
+
+ {/* Mobile View All Button */}
+
+
+ Browse All Categories
+
+
+
+
+
+ {/* Access Your CityCards Section */}
+
+
+
+
+ );
+
+
+}
diff --git a/src/pages/ViewCardDetailsPage.tsx b/src/pages/ViewCardDetailsPage.tsx
new file mode 100644
index 0000000..4677616
--- /dev/null
+++ b/src/pages/ViewCardDetailsPage.tsx
@@ -0,0 +1,417 @@
+import { motion } from 'motion/react';
+import { ArrowLeft, ChevronRight, Calendar, MapPin, Star, CheckCircle, Sparkles, Users, Clock, Gift, Ticket } from 'lucide-react';
+import { Button } from '../components/ui/button';
+import { Card, CardContent } from '../components/ui/card';
+import { Badge } from '../components/ui/badge';
+import Navbar from '../components/Navbar';
+import { Footer } from '../components/Footer';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { useGetUserCardDetailsQuery } from '../Redux/services/profile.service';
+import { useNavigate, useParams } from 'react-router-dom';
+import LoadingSpinner from '../components/LoadingSpinner';
+
+interface User {
+ email: string;
+ name: string;
+}
+
+interface ViewCardDetailsPageProps {
+ onBackClick: () => void;
+ onHomeClick: () => void;
+ onMelbourneClick: () => void;
+ onPassesClick: () => void;
+ onCheckoutClick: () => void;
+ onSignInClick: () => void;
+ onSignOutClick: () => void;
+ onAttractionsClick: () => void;
+ onBlogsClick: () => void;
+ onHowItWorksClick: () => void;
+ onFAQClick: () => void;
+ onPrivacyPolicyClick: () => void;
+ onAboutUsClick: () => void;
+ onProfileClick: () => void;
+ onCityCardsClick: () => void;
+ onMagicItineraryClick: () => void;
+ onPostCardsClick: () => void;
+ onOffersClick: () => void;
+ onContactUsClick?: () => void;
+ onEsimsClick?: () => void;
+ onHotelDiscountsClick?: () => void;
+ currentPage: string;
+ user: User | null;
+}
+
+export function ViewCardDetailsPage({
+ onBackClick,
+ onHomeClick,
+ onMelbourneClick,
+ onPassesClick,
+ onCheckoutClick,
+ onSignInClick,
+ onSignOutClick,
+ onAttractionsClick,
+ onBlogsClick,
+ onHowItWorksClick,
+ onFAQClick,
+ onPrivacyPolicyClick,
+ onAboutUsClick,
+ onProfileClick,
+ onCityCardsClick,
+ onMagicItineraryClick,
+ onPostCardsClick,
+ onOffersClick,
+ onContactUsClick,
+ currentPage,
+ user
+}: ViewCardDetailsPageProps) {
+ // Card type state
+ const { cardId } = useParams()
+ const { data, isLoading } = useGetUserCardDetailsQuery(cardId)
+ const navigate = useNavigate()
+
+ const baseUrl = import.meta.env.VITE_BASE_URL;
+
+ const cardDetails = data?.bookingDetails ?? {}
+
+ const attractions = data?.attractions ?? []
+ const offers = data?.offers ?? []
+
+ if (isLoading) {
+ return (
+
+ )
+ }
+
+ // Generate QR code pattern
+ const generateQRPattern = () => {
+ const size = 17;
+ const pattern = [];
+
+ for (let i = 0; i < size * size; i++) {
+ const row = Math.floor(i / size);
+ const col = i % size;
+
+ // Corner squares (5x5 for smaller QR)
+ const isCornerSquare =
+ (row < 5 && col < 5) || // Top-left
+ (row < 5 && col >= 12) || // Top-right
+ (row >= 12 && col < 5); // Bottom-left
+
+ // Finder patterns within corner squares
+ const isFinderPattern = isCornerSquare && (
+ (row === 0 || row === 4 || col === 0 || col === 4) ||
+ (row >= 2 && row <= 2 && col >= 2 && col <= 2)
+ );
+
+ // Timing patterns
+ const isTimingPattern = (row === 4 && col >= 6 && col <= 10) || (col === 4 && row >= 6 && row <= 10);
+
+ // Random data pattern for other areas
+ const isDataPattern = !isCornerSquare && !isTimingPattern && Math.random() > 0.4;
+
+ pattern.push(isFinderPattern || isTimingPattern || isDataPattern);
+ }
+
+ return pattern;
+ };
+
+ const qrPattern = generateQRPattern();
+
+ return (
+
+
+
+
+ {/* Back Button */}
+
+ navigate(-1)}
+ className="p-0 hover:bg-transparent"
+ >
+
+
+
+
+ {/* Pass Card - Redesigned */}
+
+
+ {/* Gradient Header Bar */}
+
+
+
+ {/* Card Header */}
+
+
+ {/* Icon */}
+
+
+
+
+ {/* Title and Status */}
+
+
+ {cardDetails.name}
+
+
+
+ {cardDetails.isActive ? "Active" : "Inactive"}
+
+
+
+
+ {/* Date Badge */}
+
+
+
+ {cardDetails.validUpto}
+
+
+
+
+ {/* Stats Grid */}
+
+ {/* Duration */}
+
+
+
+
+
Duration
+
{cardDetails.noOfDays}
+
+
+ {/* Adults */}
+
+
+
+
+
Adults
+
{cardDetails.totalAdult}
+
+
+ {/* Kids */}
+
+
+
+
+
Kids
+
{cardDetails.totalChild}
+
+
+
+
+
+
+ {/* Attractions Section - Redesigned */}
+
+
+
+ {/* Section Header */}
+
+
+
+
+
+
+
+ Included Attractions
+
+
+ Explore amazing places
+
+
+
+
+ {attractions.length} {attractions.length > 1 ? "Places" : "Place"}
+
+
+
+ {/* Attractions Scroll */}
+
+ {attractions.map((attraction, index) => (
+
+
+
+ {/* Image */}
+
+
+
+
+ {/* Info */}
+
+
+ {attraction.title}
+
+
+
+ {/* {attraction.tours} */}
+
+
+
+
+
+ ))}
+
+
+ {/* View All Button */}
+ navigate("/attractions")}
+ >
+ View All Attractions
+
+
+
+
+
+
+ {/* Special Benefits & Offers - Redesigned */}
+
+
+
+ {/* Header */}
+
+
+
+
+
+
+
+ Exclusive Offers
+
+
+ Special deals for cardholders
+
+
+
+
+
+ Limited Time
+
+
+
+ {/* Featured Offers Grid */}
+
+ {
+ offers.map((offer: any) => (
+
navigate(`/super-savings/${offer.id}`)}
+ >
+
+
+
+
+
+
+
+ {offer.title}
+
+ {/*
+ {offer.description}
+
*/}
+
+
+ {/*
+ 25%
+ OFF
+
*/}
+
+
+
+ {offer.description}
+
+
+
+
+ ))
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/WhatsIncluded.tsx b/src/pages/WhatsIncluded.tsx
similarity index 97%
rename from src/components/WhatsIncluded.tsx
rename to src/pages/WhatsIncluded.tsx
index afc1307..0bdec15 100644
--- a/src/components/WhatsIncluded.tsx
+++ b/src/pages/WhatsIncluded.tsx
@@ -1,11 +1,11 @@
import { ArrowRight, Hotel, Mail, MapPin, Sparkles, Ticket, Wifi } from 'lucide-react';
import { motion } from 'motion/react';
import { Layout } from '../Layout';
-import { ImageWithFallback } from './figma/ImageWithFallback';
-import { SmartSaving } from './SmartSaving';
-import { Badge } from './ui/badge';
-import { Button } from './ui/button';
-import { WhatsIncludedHero } from './WhatsIncludedHero';
+import { ImageWithFallback } from '../components/figma/ImageWithFallback';
+import { SmartSaving } from '../components/SmartSaving';
+import { Badge } from '../components/ui/badge';
+import { Button } from '../components/ui/button';
+import { WhatsIncludedHero } from '../components/WhatsIncludedHero';
interface User {
email: string;
@@ -41,7 +41,7 @@ interface WhatsIncludedProps {
user: User | null;
}
-export function WhatsIncluded({
+export function WhatsIncluded({
onBackClick,
onHomeClick,
onMelbourneClick,
diff --git a/src/utils/footerConstants.ts b/src/utils/footerConstants.ts
index 86afdeb..ef31a2b 100644
--- a/src/utils/footerConstants.ts
+++ b/src/utils/footerConstants.ts
@@ -1,16 +1,20 @@
export const footerSections = {
explore: {
title: 'Explore',
- links: ['Home', 'My Adventures', 'Cancellation policy']
+ links: ['Home',
+ 'Cancellation policy'
+ ]
},
learn: {
title: 'Learn',
- links: ['How It Works', 'Safety Tips', 'FAQ', 'Blog']
- },
- community: {
- title: 'Community',
- links: ['Testimonials', 'Partner Stories', 'Events & Meetups', 'Newsletter']
+ links: ['How It Works',
+ // 'Safety Tips',
+ 'FAQ', 'Blog']
},
+ // community: {
+ // title: 'Community',
+ // links: ['Testimonials', 'Partner Stories', 'Events & Meetups', 'Newsletter']
+ // },
support: {
title: 'Support',
links: ['Contact Us', 'Privacy Policy', 'Terms of Service']
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
index 8abf8d3..602f7ff 100644
--- a/src/vite-env.d.ts
+++ b/src/vite-env.d.ts
@@ -1,6 +1,7 @@
interface ImportMetaEnv {
readonly VITE_BASE_URL: string
readonly VITE_GOOGLE_MAP: string
+ readonly VITE_STRIPE_PUBLISHABLE_KEY: string
}
interface ImportMeta {
diff --git a/tsconfig.json b/tsconfig.json
index 3d0a51a..e444793 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -5,12 +5,12 @@
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"allowJs": false,
"skipLibCheck": true,
- "esModuleInterop": false,
+ "esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "ESNext",
- "moduleResolution": "Node",
+ "moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
diff --git a/vite.config.ts b/vite.config.ts
index 551b307..b60eb7e 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -84,7 +84,7 @@ import * as path from 'path';
outDir: 'build',
},
server: {
- port: 4008,
+ port: 4009,
open: true,
},
});
\ No newline at end of file