diff --git a/.eslintrc.cjs b/.eslintrc.cjs index d6c95379..e2365072 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -5,14 +5,64 @@ module.exports = { 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', + 'plugin:import/recommended', + 'plugin:prettier/recommended', ], ignorePatterns: ['dist', '.eslintrc.cjs'], parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], + plugins: ['react-refresh', 'import'], rules: { - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, + 'prettier/prettier': 'error', + 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], + 'import/order': [ + 'error', + { + groups: [ + 'builtin', + 'external', + 'internal', + ['parent', 'sibling', 'index'], + 'object', + 'type', + ], + pathGroups: [ + { + pattern: 'react', + group: 'external', + position: 'before', + }, + { + pattern: 'react*', + group: 'external', + position: 'before', + }, + { + pattern: '@tanstack/*', + group: 'external', + position: 'before', + }, + { + pattern: '@apis/**', + group: 'internal', + position: 'before', + }, + { + pattern: '{@types,@schema}', + group: 'type', + position: 'before', + }, + ], + alphabetize: { order: 'asc', caseInsensitive: true }, + 'newlines-between': 'always', + }, ], }, -} + settings: { + 'import/resolver': { + typescript: { + alwaysTryTypes: true, + project: './tsconfig.app.json', + }, + }, + }, +}; diff --git a/.github/workflows/ec2Deploy.yaml b/.github/workflows/ec2Deploy.yaml new file mode 100644 index 00000000..c1c49cfa --- /dev/null +++ b/.github/workflows/ec2Deploy.yaml @@ -0,0 +1,27 @@ +name: Deploy to EC2 + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install SSH key + run: | + mkdir -p ~/.ssh + echo "${{ secrets.EC2_PEM_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + + - name: Add EC2 to known hosts + run: ssh-keyscan -H ec2-43-200-222-157.ap-northeast-2.compute.amazonaws.com >> ~/.ssh/known_hosts + + - name: SSH into EC2 and execute deployment script + run: | + ssh -i ~/.ssh/id_rsa ubuntu@ec2-43-200-222-157.ap-northeast-2.compute.amazonaws.com "cd PICKPLE-client && sh deploy.sh" diff --git a/README.md b/README.md index 480aa050..dd68cbc5 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,42 @@ -

🌸🌼 PICK!PLE 🌼🌸

-

🍀 NOW SOPT AppJam 🍀

+# PICK!PLE -## 🏷️ 서비스 이름 +내가 PICK!한 바로 '그 사람'과 함께하는 클래스 모임 -### 내가 PICK!한 바로 '그 사람'과 함께하는 클래스 모임 - - + +

## 💁 서비스 소개 - 인증 받은 호스트들이 클래스 모임을 개최할 수 있는 곳 - -image + +

## 🔨 서비스 주요 기능 -### 호스트 승인 - -
- image - image -
+### 호스트 -
+ + + -### 모임 개설 공지사항 게시 - -
- image - image -

-### 게스트 승인 리뷰 수집 +### 게스트 -
- image - image - image -
+ +
- -### 모임 탐색 - -
- image - image -
-
-### 모임 참여 - -
- image - image - image - image -
- -
-
-## 👩🏻‍💻🧑🏻‍💻 PICK!PLE Web Developers +## 👩🏻‍💻🧑🏻‍💻 PICKPLE Developers
@@ -422,5 +388,14 @@
+
+ + +## 📝 픽픽이들의 아티클 + +- [[TS] type 아직도 일일이 만드시나요? - 태승](https://super-wildcat-183.notion.site/TS-type-096037760bb448bea10decbd010b049e?pvs=4) +- [뚝딱뚝딱 공통 컴포넌트 만들기 - 채연](https://super-wildcat-183.notion.site/45144539ad7c40ea950e984f2ff65825?pvs=4) +- [리액트 쿼리 간지나게 사용하는 법 - 정안](https://super-wildcat-183.notion.site/5402dc0f2f0444e69080bdce0541100c?pvs=4) +- [[Funnel] 퍼널구조를 통해 여러 단계의 입력폼 다루기 - 화랑](https://super-wildcat-183.notion.site/Funnel-728fd096626f47e1a534847729b2a90a?pvs=4) --- diff --git a/package.json b/package.json index 4ac8c82d..4e6c9307 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,13 @@ "@typescript-eslint/parser": "^7.13.1", "@vitejs/plugin-react-swc": "^3.5.0", "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", + "prettier": "^3.3.3", "typescript": "^5.2.2", "vite": "^5.3.1", "vite-plugin-svgr": "^4.2.0", diff --git a/public/image/banners/picksight-banner.png b/public/image/banners/picksight-banner.png new file mode 100644 index 00000000..212fafb7 Binary files /dev/null and b/public/image/banners/picksight-banner.png differ diff --git a/public/image/banners/picksight-image.png b/public/image/banners/picksight-image.png new file mode 100644 index 00000000..0b790113 Binary files /dev/null and b/public/image/banners/picksight-image.png differ diff --git a/public/image/banners/picksight-main.png b/public/image/banners/picksight-main.png new file mode 100644 index 00000000..ecdc5a9e Binary files /dev/null and b/public/image/banners/picksight-main.png differ diff --git a/public/image/graphics/image_review_finish.png b/public/image/graphics/image_review_finish.png new file mode 100644 index 00000000..97d02f01 Binary files /dev/null and b/public/image/graphics/image_review_finish.png differ diff --git a/public/image/graphics/img_review_empty.png b/public/image/graphics/img_review_empty.png new file mode 100644 index 00000000..4f7867fc Binary files /dev/null and b/public/image/graphics/img_review_empty.png differ diff --git a/public/svg/ic_check_active.svg b/public/svg/ic_check_active.svg index 649ed14b..da63f469 100644 --- a/public/svg/ic_check_active.svg +++ b/public/svg/ic_check_active.svg @@ -1,3 +1,3 @@ - + diff --git a/public/svg/ic_check_default.svg b/public/svg/ic_check_default.svg index 341e0fab..6d1a4626 100644 --- a/public/svg/ic_check_default.svg +++ b/public/svg/ic_check_default.svg @@ -1,3 +1,3 @@ - + diff --git a/public/svg/ic_comment.svg b/public/svg/ic_comment.svg new file mode 100644 index 00000000..38b9bc71 --- /dev/null +++ b/public/svg/ic_comment.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/svg/ic_commentList_empty.svg b/public/svg/ic_commentList_empty.svg new file mode 100644 index 00000000..d23e85fa --- /dev/null +++ b/public/svg/ic_commentList_empty.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/svg/ic_delete16.svg b/public/svg/ic_delete16.svg new file mode 100644 index 00000000..034c13d8 --- /dev/null +++ b/public/svg/ic_delete16.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/svg/ic_delete20.svg b/public/svg/ic_delete20.svg new file mode 100644 index 00000000..61f878aa --- /dev/null +++ b/public/svg/ic_delete20.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/svg/ic_lock.svg b/public/svg/ic_lock.svg new file mode 100644 index 00000000..ba895455 --- /dev/null +++ b/public/svg/ic_lock.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/svg/ic_park_more.svg b/public/svg/ic_park_more.svg new file mode 100644 index 00000000..3bbc893d --- /dev/null +++ b/public/svg/ic_park_more.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/svg/ic_send.svg b/public/svg/ic_send.svg new file mode 100644 index 00000000..838e54a9 --- /dev/null +++ b/public/svg/ic_send.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/svg/ic_spicker_mark.svg b/public/svg/ic_spicker_mark.svg new file mode 100644 index 00000000..4b575f02 --- /dev/null +++ b/public/svg/ic_spicker_mark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/App.tsx b/src/App.tsx index 73433af0..3e9db17f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,33 +1,37 @@ import { Global, ThemeProvider } from '@emotion/react'; -import { createBrowserRouter, RouterProvider } from 'react-router-dom'; -import theme from './styles/theme'; -import GlobalStyle from './styles/global'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { createBrowserRouter, RouterProvider } from 'react-router-dom'; + +import { wrapRoutes } from '@hooks'; import { authRoutes, - categoriesRoutes, + classListRoutes, classRoutes, guestRoutes, homeRoutes, + articleRoutes, hostRoutes, myPageRoutes, //devRoutes, - adminRoutes - + adminRoutes, } from '@routes'; + import errorPageRoutes from './routes/errorRoutes'; import PrivateRoute from './routes/PrivateRoute/PrivateRoute'; +import GlobalStyle from './styles/global'; +import theme from './styles/theme'; const allRoutes = [ - ...categoriesRoutes, + ...classListRoutes, ...classRoutes, ...guestRoutes, ...homeRoutes, + ...articleRoutes, ...hostRoutes, ...myPageRoutes, ...errorPageRoutes, - ...adminRoutes + ...adminRoutes, // ...devRoutes, ]; @@ -36,10 +40,18 @@ const protectedRoutes = allRoutes.map((route) => ({ element: , })); -const router = createBrowserRouter([...authRoutes, ...protectedRoutes]); +const wrapRouter = wrapRoutes([...authRoutes, ...protectedRoutes]); + +const router = createBrowserRouter(wrapRouter); const App = () => { - const queryClient = new QueryClient(); + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + throwOnError: true, + }, + }, + }); return ( diff --git a/src/apis/domains/actuator/useFetchHealth.ts b/src/apis/domains/actuator/useFetchHealth.ts index fc206f6b..a9a8dbdc 100644 --- a/src/apis/domains/actuator/useFetchHealth.ts +++ b/src/apis/domains/actuator/useFetchHealth.ts @@ -1,6 +1,7 @@ import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; const getHealth = async () => { const response = await get('/actuator/health'); diff --git a/src/apis/domains/guest/useFetchGuestInfo.ts b/src/apis/domains/guest/useFetchGuestInfo.ts new file mode 100644 index 00000000..e1b7fd9c --- /dev/null +++ b/src/apis/domains/guest/useFetchGuestInfo.ts @@ -0,0 +1,25 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; + +import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +type GuestGetResponse = components['schemas']['GuestGetResponse']; +const getGuestInfo = async (guestId: string): Promise => { + try { + const response = await get>(`/v2/guest/${guestId}`); + return response.data.data; + } catch (err) { + console.error(err); + return null; + } +}; + +export const useFetchGuestInfo = (guestId: string) => { + return useSuspenseQuery({ + queryKey: [QUERY_KEY.GUEST_INFO], + queryFn: () => getGuestInfo(guestId), + }); +}; diff --git a/src/apis/domains/host/index.ts b/src/apis/domains/host/index.ts index 50190773..db476faf 100644 --- a/src/apis/domains/host/index.ts +++ b/src/apis/domains/host/index.ts @@ -1,4 +1,4 @@ -import { usePostHostApply } from './usePostHostApply'; import { useFetchMoimHost } from './useFetchMoimHost'; +import { usePostHostApply } from './usePostHostApply'; -export { usePostHostApply, useFetchMoimHost }; \ No newline at end of file +export { usePostHostApply, useFetchMoimHost }; diff --git a/src/apis/domains/host/useFetchMoimHost.ts b/src/apis/domains/host/useFetchMoimHost.ts index 515c2c93..5ccab984 100644 --- a/src/apis/domains/host/useFetchMoimHost.ts +++ b/src/apis/domains/host/useFetchMoimHost.ts @@ -1,14 +1,16 @@ import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { get } from '@apis/api'; -import { ApiResponseType } from '@types'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; +import { ApiResponseType } from '@types'; type HostByMoimResponse = components['schemas']['HostByMoimResponse']; const getMoimHost = async (hostId: number): Promise => { try { - const response = await get>(`/host/${hostId}`); + const response = await get>(`/v2/host/${hostId}`); return response.data.data; } catch (error) { console.error('An error occurred while fetching the host info:', error); @@ -26,4 +28,4 @@ export const useFetchMoimHost = (hostId: number) => { refetchOnWindowFocus: false, enabled: !!hostId && hostId > 0, }); -}; \ No newline at end of file +}; diff --git a/src/apis/domains/host/usePostHostApply.ts b/src/apis/domains/host/usePostHostApply.ts index 42428e53..d1299b67 100644 --- a/src/apis/domains/host/usePostHostApply.ts +++ b/src/apis/domains/host/usePostHostApply.ts @@ -1,17 +1,20 @@ +import { useQueryClient, useMutation } from '@tanstack/react-query'; +import { Dispatch, RefObject, SetStateAction } from 'react'; + import { post } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { useEasyNavigate } from '@hooks'; + import { components } from '@schema'; -import { useQueryClient, useMutation } from '@tanstack/react-query'; import { ErrorResponse, ErrorType, MutateResponseType } from '@types'; -import { Dispatch, RefObject, SetStateAction } from 'react'; type HostApplyRequest = components['schemas']['SubmitterCreateRequest']; const postHostApply = async (hostApplyState: HostApplyRequest): Promise => { // 여긴 사용자와 query/axios 사이의 데이터 타입 try { - const response = await post('submitter', hostApplyState); //여긴 query/axios와 server 사이의 데이터 타입 + const response = await post('/v2/submitter', hostApplyState); //여긴 query/axios와 server 사이의 데이터 타입 return response.data; } catch (error) { const errorResponse = error as ErrorResponse; diff --git a/src/apis/domains/moim/useFetchGuestApply.ts b/src/apis/domains/moim/useFetchGuestApply.ts index c6a12c73..07947f7d 100644 --- a/src/apis/domains/moim/useFetchGuestApply.ts +++ b/src/apis/domains/moim/useFetchGuestApply.ts @@ -1,7 +1,9 @@ +import { keepPreviousData, useQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; -import { keepPreviousData, useQuery } from '@tanstack/react-query'; import { ApiResponseType } from '@types'; type SubmittedMoimByGuestResponse = components['schemas']['SubmittedMoimByGuestResponse']; @@ -12,7 +14,7 @@ const getGuestApplyMoim = async ( ): Promise => { try { const response = await get>( - `/guest/${guestId}/submitted-moim-list?moimSubmissionState=${moimSubmissionState}` + `/v1/guest/${guestId}/submitted-moim-list?moimSubmissionState=${moimSubmissionState}` ); return response.data.data; } catch (err) { diff --git a/src/apis/domains/moim/useFetchGuestParticipate.ts b/src/apis/domains/moim/useFetchGuestParticipate.ts index 3404e108..6e1c74e3 100644 --- a/src/apis/domains/moim/useFetchGuestParticipate.ts +++ b/src/apis/domains/moim/useFetchGuestParticipate.ts @@ -1,7 +1,9 @@ +import { useQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; -import { useQuery } from '@tanstack/react-query'; import { ApiResponseType } from '@types'; type SubmittedMoimByGuestResponse = components['schemas']['SubmittedMoimByGuestResponse']; @@ -10,7 +12,7 @@ const getGuestParticipateMoim = async ( ): Promise => { try { const response = await get>( - `/guest/${guestId}/completed-moim-list` + `/v2/guest/${guestId}/completed-moim-list` ); return response.data.data; } catch (err) { diff --git a/src/apis/domains/moim/useFetchHostMoimInfo.ts b/src/apis/domains/moim/useFetchHostMoimInfo.ts index b69bcb2c..2ab1942b 100644 --- a/src/apis/domains/moim/useFetchHostMoimInfo.ts +++ b/src/apis/domains/moim/useFetchHostMoimInfo.ts @@ -1,18 +1,21 @@ +import { keepPreviousData, useQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; -import { keepPreviousData, useQuery } from '@tanstack/react-query'; import { ApiResponseType } from '@types'; -type MoimListByHostGetResponse = components['schemas']['MoimListByHostGetResponse']; +type MoimListByHostAndMoimStateGetResponse = + components['schemas']['MoimListByHostAndMoimStateGetResponse']; const getHostMoimInfo = async ( hostId: number, moimState: string -): Promise => { +): Promise => { try { - const response = await get>( - `/host/${hostId}/moim-list?moimState=${moimState}` + const response = await get>( + `/v1/host/${hostId}/moim-list?moimState=${moimState}` ); if (!response) { diff --git a/src/apis/domains/moim/useFetchMoimBanner.ts b/src/apis/domains/moim/useFetchMoimBanner.ts index f1271a09..f3d8f196 100644 --- a/src/apis/domains/moim/useFetchMoimBanner.ts +++ b/src/apis/domains/moim/useFetchMoimBanner.ts @@ -1,12 +1,13 @@ -import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; +import { useSuspenseQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { ApiResponseType } from '@types'; -import { isLoggedIn } from '@utils'; const getMoimBanner = async (): Promise => { try { - const response = await get>('/moim/banner'); + const response = await get>('/v1/moim/banner'); return response.data.data; } catch (error) { console.error('An error occurred while fetching the banner:', error); @@ -15,12 +16,11 @@ const getMoimBanner = async (): Promise => { }; export const useFetchMoimBanner = () => { - return useQuery({ + return useSuspenseQuery({ queryKey: [QUERY_KEY.MOIM_BANNER], queryFn: () => getMoimBanner(), staleTime: 1000 * 10, gcTime: 1000 * 30, - enabled: isLoggedIn(), refetchOnWindowFocus: false, }); }; diff --git a/src/apis/domains/moim/useFetchMoimCategories.ts b/src/apis/domains/moim/useFetchMoimCategories.ts index 7a83f5ff..e85ac953 100644 --- a/src/apis/domains/moim/useFetchMoimCategories.ts +++ b/src/apis/domains/moim/useFetchMoimCategories.ts @@ -1,12 +1,15 @@ import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { get } from '@apis/api'; -import { ApiResponseType } from '@types'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { isLoggedIn } from '@utils'; +import { ApiResponseType } from '@types'; + const getMoimCategories = async (): Promise => { try { - const response = await get>('/moim/categories'); + const response = await get>('/v1/moim/categories'); return response.data.data; } catch (error) { console.error('An error occurred while fetching the category:', error); diff --git a/src/apis/domains/moim/useFetchMoimDescription.ts b/src/apis/domains/moim/useFetchMoimDescription.ts index 4725faed..445b721d 100644 --- a/src/apis/domains/moim/useFetchMoimDescription.ts +++ b/src/apis/domains/moim/useFetchMoimDescription.ts @@ -1,12 +1,14 @@ import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { ApiResponseType } from '@types'; const getMoimDescription = async (moimId: string): Promise => { try { const response = await get>( - `/moim/${Number(moimId)}/description` + `/v1/moim/${Number(moimId)}/description` ); return response.data.data.description; } catch (error) { diff --git a/src/apis/domains/moim/useFetchMoimDetail.ts b/src/apis/domains/moim/useFetchMoimDetail.ts index a098cd3a..8e64f1b9 100644 --- a/src/apis/domains/moim/useFetchMoimDetail.ts +++ b/src/apis/domains/moim/useFetchMoimDetail.ts @@ -1,6 +1,8 @@ import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; import { ApiResponseType } from '@types'; @@ -8,7 +10,7 @@ type MoimDetailResponse = components['schemas']['MoimDetailResponse']; const getMoimDetail = async (moimId: string): Promise => { try { - const response = await get>(`/moim/${Number(moimId)}`); + const response = await get>(`/v1/moim/${Number(moimId)}`); return response.data.data; } catch (error) { console.error('An error occurred while fetching the class detail:', error); diff --git a/src/apis/domains/moim/useFetchMoimListByCategory.ts b/src/apis/domains/moim/useFetchMoimListByCategory.ts index 50928483..707b2abc 100644 --- a/src/apis/domains/moim/useFetchMoimListByCategory.ts +++ b/src/apis/domains/moim/useFetchMoimListByCategory.ts @@ -1,8 +1,10 @@ import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { get } from '@apis/api'; -import { ApiResponseType } from '@types'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; +import { ApiResponseType } from '@types'; type MoimByCategoryResponse = components['schemas']['MoimByCategoryResponse']; @@ -11,7 +13,7 @@ const getMoimListByCategory = async ( ): Promise => { try { const response = await get>( - `/moim-list?category=${category}` + `/v1/moim-list?category=${category}` ); return response.data.data; diff --git a/src/apis/domains/moim/useFetchMyHost.ts b/src/apis/domains/moim/useFetchMyHost.ts index c7014ad0..62a64ab2 100644 --- a/src/apis/domains/moim/useFetchMyHost.ts +++ b/src/apis/domains/moim/useFetchMyHost.ts @@ -1,14 +1,16 @@ +import { useQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; -import { useQuery } from '@tanstack/react-query'; import { ApiResponseType } from '@types'; type HostGetResponse = components['schemas']['HostGetResponse']; const getMyHostInfo = async (): Promise => { try { - const response = await get>(`/host`); + const response = await get>(`/v2/host`); return response.data.data; } catch (err) { console.error(err); diff --git a/src/apis/domains/moim/useFetchQuestionList.ts b/src/apis/domains/moim/useFetchQuestionList.ts index 55cc0b45..bb6c0328 100644 --- a/src/apis/domains/moim/useFetchQuestionList.ts +++ b/src/apis/domains/moim/useFetchQuestionList.ts @@ -1,14 +1,16 @@ import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { get } from '@apis/api'; -import { ApiResponseType } from '@types'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; +import { ApiResponseType } from '@types'; type QuestionInfo = components['schemas']['QuestionInfo']; const getQuestionList = async (moimId: number): Promise => { try { - const response = await get>(`/moim/${moimId}/question-list`); + const response = await get>(`/v1/moim/${moimId}/question-list`); return response.data.data; } catch (error) { console.error('error:', error); diff --git a/src/apis/domains/moim/useFetchSubmittedMoimDetail.ts b/src/apis/domains/moim/useFetchSubmittedMoimDetail.ts index 8a1b3c2d..7c543dab 100644 --- a/src/apis/domains/moim/useFetchSubmittedMoimDetail.ts +++ b/src/apis/domains/moim/useFetchSubmittedMoimDetail.ts @@ -1,6 +1,8 @@ import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; import { ApiResponseType } from '@types'; @@ -8,7 +10,9 @@ type MoimByGuestResponse = components['schemas']['MoimByGuestResponse']; const SubmittedMoimDetail = async (moimId: number): Promise => { try { - const response = await get>(`/submitted-moim/${moimId}`); + const response = await get>( + `/v1/submitted-moim/${moimId}` + ); return response.data.data; } catch (error) { console.error('error:', error); diff --git a/src/apis/domains/moim/usePostMoim.ts b/src/apis/domains/moim/usePostMoim.ts index c1a53457..8815ccc0 100644 --- a/src/apis/domains/moim/usePostMoim.ts +++ b/src/apis/domains/moim/usePostMoim.ts @@ -1,10 +1,13 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + import { post } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { ApiResponseType, ErrorResponse } from '@types'; + import { ClassPostDataType } from 'src/stores/types/classPostDataType'; import { transformClassPostState } from 'src/utils/postMoimTypeChange'; +import { ApiResponseType, ErrorResponse } from '@types'; + interface postMoimResponseType { moimId: number; } @@ -12,7 +15,10 @@ interface postMoimResponseType { const postMoim = async (classPostState: ClassPostDataType) => { const transformedState = transformClassPostState(classPostState); try { - const response = await post>('moim', transformedState); + const response = await post>( + '/v1/moim', + transformedState + ); return response.data.data.moimId; } catch (error) { const errorResponse = error as ErrorResponse; diff --git a/src/apis/domains/moimSubmission/useFetchSubmitRequest.ts b/src/apis/domains/moimSubmission/useFetchSubmitRequest.ts index 3e717189..c9efa196 100644 --- a/src/apis/domains/moimSubmission/useFetchSubmitRequest.ts +++ b/src/apis/domains/moimSubmission/useFetchSubmitRequest.ts @@ -1,8 +1,10 @@ +import { useQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; -import { useQuery } from '@tanstack/react-query'; -import { ApiResponseType } from '@types'; + import { components } from '@schema'; +import { ApiResponseType } from '@types'; type SubmittionDetailResponse = components['schemas']['SubmittionDetailResponse']; @@ -15,7 +17,7 @@ const getSubmitRequest = async ({ }): Promise => { try { const response = await get>( - `/moim/${moimId}/submitter/${submitterId}` + `/v1/moim/${moimId}/submitter/${submitterId}` ); return response.data.data; } catch (error) { diff --git a/src/apis/domains/moimSubmission/useFetchSubmitterList.ts b/src/apis/domains/moimSubmission/useFetchSubmitterList.ts index 34bb39bd..c2cd6a00 100644 --- a/src/apis/domains/moimSubmission/useFetchSubmitterList.ts +++ b/src/apis/domains/moimSubmission/useFetchSubmitterList.ts @@ -1,7 +1,9 @@ +import { useQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; -import { useQuery } from '@tanstack/react-query'; import { ApiResponseType } from '@types'; type MoimSubmissionByMoimResponse = components['schemas']['MoimSubmissionByMoimResponse']; @@ -9,7 +11,7 @@ type MoimSubmissionByMoimResponse = components['schemas']['MoimSubmissionByMoimR const getSubmitterList = async (moimId: number): Promise => { try { const response = await get>( - `/moim/${moimId}/submitter-list` + `/v1/moim/${moimId}/submitter-list` ); return response.data.data; } catch (error) { diff --git a/src/apis/domains/moimSubmission/usePatchSubmitter.ts b/src/apis/domains/moimSubmission/usePatchSubmitter.ts index ec580392..5794ed85 100644 --- a/src/apis/domains/moimSubmission/usePatchSubmitter.ts +++ b/src/apis/domains/moimSubmission/usePatchSubmitter.ts @@ -1,10 +1,12 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useAtom } from 'jotai'; +import { useNavigate } from 'react-router-dom'; + import { patch } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { userAtom } from '@stores'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; import { smoothScroll } from '@utils'; -import { useAtom } from 'jotai'; -import { useNavigate } from 'react-router-dom'; export interface PatchSubmitterRequest { moimId: number; @@ -13,7 +15,7 @@ export interface PatchSubmitterRequest { const patchSubmitter = async ({ moimId, submitterIdList }: PatchSubmitterRequest) => { try { - const response = await patch(`/moim/${moimId}/submitter`, { submitterIdList }); + const response = await patch(`/v1/moim/${moimId}/submitter`, { submitterIdList }); return response.data; } catch (error) { console.error(error); diff --git a/src/apis/domains/moimSubmission/usePostAnswerList.ts b/src/apis/domains/moimSubmission/usePostAnswerList.ts index da4a0b5c..dd7df2a2 100644 --- a/src/apis/domains/moimSubmission/usePostAnswerList.ts +++ b/src/apis/domains/moimSubmission/usePostAnswerList.ts @@ -1,9 +1,13 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useNavigate } from 'react-router-dom'; + import { post } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { DataType } from '@pages/class/page/ClassApply/ClassApplyQuestion/ClassApplyQuestion'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ClassApplyProps } from '@pages/class/page/ClassApply/ClassApplyRule/ClassApplyRule'; + import { ErrorResponse, ErrorType, MutateResponseType } from '@types'; -import { useNavigate } from 'react-router-dom'; interface PostAnswerRequest { moimId: number; @@ -15,7 +19,7 @@ const postAnswerList = async ({ body, }: PostAnswerRequest): Promise => { try { - const response = await post(`/moim/${moimId}`, body); + const response = await post(`/v1/moim/${moimId}`, body); return response.data; } catch (error) { const err = error as ErrorResponse; @@ -35,15 +39,13 @@ const postAnswerList = async ({ status: statusCode, message: errorMessage, }; - - throw new Error(errorMessage); } else { throw new Error('unknown error'); } } }; -export const usePostAnswerList = (moimId: string) => { +export const usePostAnswerList = ({ handlePageChange }: ClassApplyProps) => { const navigate = useNavigate(); const queryClient = useQueryClient(); return useMutation({ @@ -51,10 +53,10 @@ export const usePostAnswerList = (moimId: string) => { onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: [QUERY_KEY.ANSWER_LIST] }); if (data.status === 20008) { - navigate(`/class/${moimId}/apply/deposit`); + handlePageChange(); } else { alert(data.message); - navigate(-2); + navigate(-1); } }, }); diff --git a/src/apis/domains/notice/useDeleteNotice.ts b/src/apis/domains/notice/useDeleteNotice.ts new file mode 100644 index 00000000..9d18d783 --- /dev/null +++ b/src/apis/domains/notice/useDeleteNotice.ts @@ -0,0 +1,25 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { del } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +const deleteNotice = async (noticeId: string) => { + try { + const response = await del(`/v2/notice/${noticeId}`); + + return response.data; + } catch (err) { + console.error(err); + return null; + } +}; + +export const useDeleteNotice = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (noticeId: string) => deleteNotice(noticeId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [QUERY_KEY.MOIM_NOTICE_LIST] }); + }, + }); +}; diff --git a/src/apis/domains/notice/useDeleteNoticeComment.ts b/src/apis/domains/notice/useDeleteNoticeComment.ts new file mode 100644 index 00000000..fb610de6 --- /dev/null +++ b/src/apis/domains/notice/useDeleteNoticeComment.ts @@ -0,0 +1,26 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { del } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +const deleteNoticeComment = async (noticeId: string, commentId: string) => { + try { + const response = await del(`/v2/notice/${noticeId}/comment/${commentId}`); + + return response.data; + } catch (err) { + console.error(err); + return null; + } +}; + +export const useDeleteNoticeComment = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ noticeId, commentId }: { noticeId: string; commentId: string }) => + deleteNoticeComment(noticeId, commentId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [QUERY_KEY.COMMENT_LIST] }); + }, + }); +}; diff --git a/src/apis/domains/notice/useFetchCommentList.ts b/src/apis/domains/notice/useFetchCommentList.ts new file mode 100644 index 00000000..a2fc73f9 --- /dev/null +++ b/src/apis/domains/notice/useFetchCommentList.ts @@ -0,0 +1,30 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; + +import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +export type CommentGetResponse = components['schemas']['CommentGetResponse']; + +const getCommentList = async (noticeId: string): Promise => { + try { + const response = await get>( + `/v2/notice/${noticeId}/comment-list` + ); + return response.data.data; + } catch (err) { + console.error(err); + return null; + } +}; + +export const useFetchCommentList = (noticeId: string) => { + return useSuspenseQuery({ + queryKey: [QUERY_KEY.COMMENT_LIST, noticeId], + queryFn: () => getCommentList(noticeId), + staleTime: 1000 * 60 * 5, + gcTime: 1000 * 60 * 10, + }); +}; diff --git a/src/apis/domains/notice/useFetchMoimNoticeDetail.ts b/src/apis/domains/notice/useFetchMoimNoticeDetail.ts new file mode 100644 index 00000000..0bbdcd91 --- /dev/null +++ b/src/apis/domains/notice/useFetchMoimNoticeDetail.ts @@ -0,0 +1,33 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; + +import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +type NoticeDetailGetResponse = components['schemas']['NoticeDetailGetResponse']; + +const getMoimNoticeDetail = async ( + moimId: string, + noticeId: string +): Promise => { + try { + const response = await get>( + `/v2/moim/${moimId}/notice/${noticeId}` + ); + return response.data.data; + } catch (err) { + console.error(err); + return null; + } +}; + +export const useFetchMoimNoticeDetail = (moimId: string, noticeId: string) => { + return useSuspenseQuery({ + queryKey: [QUERY_KEY.MOIM_NOTICE_DETAIL, moimId, noticeId], + queryFn: () => getMoimNoticeDetail(moimId, noticeId), + staleTime: 1000 * 60, // useFetchMoimNoticeList와 staleTime 맞춤 + gcTime: 1000 * 60 * 5, // useFetchMoimNoticeList와 staleTime 맞춤 + }); +}; diff --git a/src/apis/domains/notice/useFetchMoimNoticeList.ts b/src/apis/domains/notice/useFetchMoimNoticeList.ts index 3d1354ca..e142ac19 100644 --- a/src/apis/domains/notice/useFetchMoimNoticeList.ts +++ b/src/apis/domains/notice/useFetchMoimNoticeList.ts @@ -1,15 +1,17 @@ -import { useQuery } from '@tanstack/react-query'; -import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; +import { useSuspenseQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; -import { ApiResponseType } from '@types'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; +import { ApiResponseType } from '@types'; type NoticeListGetByMoimResponse = components['schemas']['NoticeListGetByMoimResponse']; const getMoimNoticeList = async (moimId: string): Promise => { try { const response = await get>( - `/moim/${Number(moimId)}/notice-list` + `/v2/moim/${Number(moimId)}/notice-list` ); return response.data.data; } catch (error) { @@ -18,12 +20,11 @@ const getMoimNoticeList = async (moimId: string): Promise { - return useQuery({ +export const useFetchMoimNoticeList = (moimId: string) => { + return useSuspenseQuery({ queryKey: [QUERY_KEY.MOIM_NOTICE_LIST, moimId], queryFn: () => getMoimNoticeList(moimId), staleTime: 1000 * 60, gcTime: 1000 * 60 * 5, - enabled: selectTab === '공지사항', }); }; diff --git a/src/apis/domains/notice/usePostNotice.ts b/src/apis/domains/notice/usePostNotice.ts index 12f7a164..9484d1e3 100644 --- a/src/apis/domains/notice/usePostNotice.ts +++ b/src/apis/domains/notice/usePostNotice.ts @@ -1,10 +1,13 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useParams } from 'react-router-dom'; + import { post } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { useEasyNavigate } from '@hooks'; + import { components } from '@schema'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; import { MoimIdPathParameterType } from '@types'; -import { useParams } from 'react-router-dom'; type MutateFunctionProps = { params: NoticeCreateRequest; @@ -15,7 +18,7 @@ type NoticeCreateRequest = components['schemas']['NoticeCreateRequest']; const postNotice = async (params: NoticeCreateRequest, moimId: number) => { try { - const response = await post(`/moim/${moimId}/notice`, params); + const response = await post(`/v2/moim/${moimId}/notice`, params); return response.data; } catch (err) { diff --git a/src/apis/domains/notice/usePostNoticeComment.ts b/src/apis/domains/notice/usePostNoticeComment.ts new file mode 100644 index 00000000..600266d5 --- /dev/null +++ b/src/apis/domains/notice/usePostNoticeComment.ts @@ -0,0 +1,37 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { post } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +type CommentCreateRequest = components['schemas']['CommentCreateRequest']; +const postNoticeComment = async ( + noticeId: string, + commentContent: string +): Promise => { + try { + const response = await post>( + `/v2/notice/${noticeId}/comment`, + { + commentContent, + } + ); + return response.data.data; + } catch (err) { + console.error(err); + } + return null; +}; + +export const usePostNoticeComment = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ noticeId, commentContent }: { noticeId: string; commentContent: string }) => + postNoticeComment(noticeId, commentContent), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [QUERY_KEY.NOTICE_COMMENT] }); + }, + }); +}; diff --git a/src/apis/domains/presignedUrl/useFetchPresignedUrl.ts b/src/apis/domains/presignedUrl/useFetchPresignedUrl.ts deleted file mode 100644 index 379c33be..00000000 --- a/src/apis/domains/presignedUrl/useFetchPresignedUrl.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { get } from '@apis/api'; -import { components } from '@schema'; -import { ApiResponseType } from '@types'; - -type PreSignedUrlResponse = components['schemas']['PreSignedUrlResponse']; - -export type PresignedUrlType = 'notice' | 'moim'; - -export const getPresignedUrl = async ( - count: number, - type: PresignedUrlType -): Promise => { - try { - const response = await get>( - `/${type}-image-list/upload/${count}` - ); - - if (!response) { - return null; - } - - return response.data.data; - } catch (err) { - console.error(err); - } - - return null; -}; diff --git a/src/apis/domains/presignedUrl/usePostPresignedUrl.ts b/src/apis/domains/presignedUrl/usePostPresignedUrl.ts new file mode 100644 index 00000000..e2b09a7b --- /dev/null +++ b/src/apis/domains/presignedUrl/usePostPresignedUrl.ts @@ -0,0 +1,34 @@ +import { post } from '@apis/api'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +type PreSignedUrlResponse = components['schemas']['PreSignedUrlResponse']; + +export type PresignedPrefixType = + | 'MOIM_PREFIX' + | 'NOTICE_PREFIX' + | 'REVIEW_PREFIX' + | 'HOST_PROFILE_PREFIX'; + +export const postPresignedUrl = async ( + prefix: PresignedPrefixType, + count: number +): Promise => { + try { + const response = await post>(`/v2/image/upload`, { + prefix, + count, + }); + + if (!response) { + return null; + } + + return response.data.data; + } catch (err) { + console.error(err); + } + + return null; +}; diff --git a/src/apis/domains/review/useFetchMoimFromReviewPage.ts b/src/apis/domains/review/useFetchMoimFromReviewPage.ts new file mode 100644 index 00000000..4a934ed1 --- /dev/null +++ b/src/apis/domains/review/useFetchMoimFromReviewPage.ts @@ -0,0 +1,28 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; + +import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +type MoimInfoResponse = components['schemas']['MoimGetResponse']; + +const getMoimInfo = async (moimId: string): Promise => { + try { + const response = await get>( + `/v2/moim/${Number(moimId)}/review` + ); + return response.data.data; + } catch (error) { + console.log(error); + return null; + } +}; + +export const useFetchMoimFromReviewPage = (moimId: string) => { + return useSuspenseQuery({ + queryKey: [QUERY_KEY.REVIEW_MOIM_INFO, moimId], + queryFn: () => getMoimInfo(moimId), + }); +}; diff --git a/src/apis/domains/review/useFetchMoimReviewList.ts b/src/apis/domains/review/useFetchMoimReviewList.ts new file mode 100644 index 00000000..e0959c30 --- /dev/null +++ b/src/apis/domains/review/useFetchMoimReviewList.ts @@ -0,0 +1,29 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; + +import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +type ReviewListGetByMoimResponse = components['schemas']['ReviewListGetByMoimResponse']; + +const getMoimReviewList = async (moimId: string): Promise => { + try { + const response = await get>( + `/v2/moim/${moimId}/review-list` + ); + return response.data.data; + } catch (error) { + return null; + } +}; + +export const useFetchMoimReviewList = (moimId: string) => { + return useSuspenseQuery({ + queryKey: [QUERY_KEY.MOIM_REVIEW_LIST, moimId], + queryFn: () => getMoimReviewList(moimId), + staleTime: 1000 * 60, + gcTime: 1000 * 60 * 5, + }); +}; diff --git a/src/apis/domains/review/useFetchReviewTagList.ts b/src/apis/domains/review/useFetchReviewTagList.ts new file mode 100644 index 00000000..76335583 --- /dev/null +++ b/src/apis/domains/review/useFetchReviewTagList.ts @@ -0,0 +1,26 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; + +import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +type TagListResponse = components['schemas']['TagListGetResponse']; + +const getTagList = async (): Promise => { + try { + const response = await get>('/v2/review/tag-list'); + return response.data.data; + } catch { + console.log(console.log); + return null; + } +}; + +export const useFetchReviewTagList = () => { + return useSuspenseQuery({ + queryKey: [QUERY_KEY.REVIEW_TAG_LIST], + queryFn: () => getTagList(), + }); +}; diff --git a/src/apis/domains/review/usePostReview.ts b/src/apis/domains/review/usePostReview.ts new file mode 100644 index 00000000..696bcf48 --- /dev/null +++ b/src/apis/domains/review/usePostReview.ts @@ -0,0 +1,34 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { post } from '@apis/api'; + +import { components } from '@schema'; +import { MutateResponseType } from '@types'; + +type ReviewCreateReqeust = components['schemas']['ReviewCreateReqeust']; + +type MutateFunctionProps = { + params: ReviewCreateReqeust; + moimId: number; +}; +const postReview = async (params: ReviewCreateReqeust, moimId: number) => { + try { + const response = await post(`/v2/moim/${moimId}/review`, params); + return response.data; + } catch (error) { + console.log(error); + return null; + } +}; + +export const usePostReview = () => { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ params, moimId }: MutateFunctionProps) => postReview(params, moimId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [] }); + //추후 MOIM_REVIEW_LIST 쿼리키 넣을 예정 + }, + }); +}; diff --git a/src/apis/domains/submitter/useFetchHostSubmitterList.ts b/src/apis/domains/submitter/useFetchHostSubmitterList.ts index 72bfc777..d799198d 100644 --- a/src/apis/domains/submitter/useFetchHostSubmitterList.ts +++ b/src/apis/domains/submitter/useFetchHostSubmitterList.ts @@ -1,14 +1,16 @@ +import { useQuery } from '@tanstack/react-query'; + import { get } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { components } from '@schema'; -import { useQuery } from '@tanstack/react-query'; import { ApiResponseType } from '@types'; type SubmitterListGetResponse = components['schemas']['SubmitterListGetResponse']; const getHostSubmitterList = async (): Promise => { try { - const response = await get>(`/submitter-list`); + const response = await get>(`/v1/submitter-list`); return response.data.data; } catch (error) { console.error('error:', error); diff --git a/src/apis/domains/submitter/useFetchMoimSubmitter.ts b/src/apis/domains/submitter/useFetchMoimSubmitter.ts new file mode 100644 index 00000000..5fbebd91 --- /dev/null +++ b/src/apis/domains/submitter/useFetchMoimSubmitter.ts @@ -0,0 +1,27 @@ +import { useQuery } from '@tanstack/react-query'; + +import { get } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +import { components } from '@schema'; +import { ApiResponseType } from '@types'; + +type MoImSubmitterListGetResponse = components['schemas']['MoimSubmissionAllResponse']; + +const getMoimSubmitterList = async (): Promise => { + try { + const response = + await get>(`/v2/moim-submission-list`); + return response.data.data; + } catch (error) { + console.error('error:', error); + return null; + } +}; + +export const useFetchMoimSubmitterList = () => { + return useQuery({ + queryKey: [QUERY_KEY.MOIM_SUBMITTER_ALL], + queryFn: () => getMoimSubmitterList(), + }); +}; diff --git a/src/apis/domains/submitter/usePatchHostSubmitter.tsx b/src/apis/domains/submitter/usePatchHostSubmitter.ts similarity index 74% rename from src/apis/domains/submitter/usePatchHostSubmitter.tsx rename to src/apis/domains/submitter/usePatchHostSubmitter.ts index 35c48235..e1a8f1c4 100644 --- a/src/apis/domains/submitter/usePatchHostSubmitter.tsx +++ b/src/apis/domains/submitter/usePatchHostSubmitter.ts @@ -1,6 +1,7 @@ +import { QueryClient, useMutation } from '@tanstack/react-query'; + import { patch } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; -import { QueryClient, useMutation } from '@tanstack/react-query'; export interface PatchHostSubmitterRequest { submitterId: number; @@ -8,7 +9,7 @@ export interface PatchHostSubmitterRequest { const patchHostSubmitter = async ({ submitterId }: PatchHostSubmitterRequest) => { try { - const response = await patch(`/submitter/${submitterId}`, { submitterId }); + const response = await patch(`/v2/submitter/${submitterId}`, { submitterId }); return response.data; } catch (error) { console.error(error); @@ -19,10 +20,9 @@ const patchHostSubmitter = async ({ submitterId }: PatchHostSubmitterRequest) => export const usePatchHostSubmitter = () => { const queryClient = new QueryClient(); return useMutation({ - mutationFn: ({ submitterId }: PatchHostSubmitterRequest) => - patchHostSubmitter({ submitterId }), + mutationFn: ({ submitterId }: PatchHostSubmitterRequest) => patchHostSubmitter({ submitterId }), onSuccess: () => { - queryClient.invalidateQueries({ queryKey: [QUERY_KEY.HOST_SUBMIT_REQUEST] }); + queryClient.invalidateQueries({ queryKey: [QUERY_KEY.HOST_SUBMITTER] }); }, }); -}; \ No newline at end of file +}; diff --git a/src/apis/domains/submitter/usePatchMoimSubmitter.ts b/src/apis/domains/submitter/usePatchMoimSubmitter.ts new file mode 100644 index 00000000..678a4d24 --- /dev/null +++ b/src/apis/domains/submitter/usePatchMoimSubmitter.ts @@ -0,0 +1,29 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { patch } from '@apis/api'; +import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + +export interface PatchMoimSubmitterRequest { + moimSubmissionId: number; +} + +const patchMoimSubmitter = async ({ moimSubmissionId }: PatchMoimSubmitterRequest) => { + try { + const response = await patch(`/v2/moimSubmission/${moimSubmissionId}`, { moimSubmissionId }); + return response.data; + } catch (error) { + console.error(error); + return null; + } +}; + +export const usePatchMoimSubmitter = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ moimSubmissionId }: PatchMoimSubmitterRequest) => + patchMoimSubmitter({ moimSubmissionId }), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [QUERY_KEY.MOIM_SUBMITTER_ALL_REQUEST] }); + }, + }); +}; diff --git a/src/apis/domains/test/usePostTest.ts b/src/apis/domains/test/usePostTest.ts index d792009e..19cd0022 100644 --- a/src/apis/domains/test/usePostTest.ts +++ b/src/apis/domains/test/usePostTest.ts @@ -1,6 +1,7 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + import { post } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; const postTest = async () => { const response = await post('/test'); diff --git a/src/apis/domains/user/usePostKakaoLogin.ts b/src/apis/domains/user/usePostKakaoLogin.ts index 4f0c2bac..ebbd24df 100644 --- a/src/apis/domains/user/usePostKakaoLogin.ts +++ b/src/apis/domains/user/usePostKakaoLogin.ts @@ -1,12 +1,14 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { AxiosResponse } from 'axios'; +import { useAtom } from 'jotai'; + import { instance, post } from '@apis/api'; import { QUERY_KEY } from '@apis/queryKeys/queryKeys'; + import { useEasyNavigate } from '@hooks'; import { userAtom } from '@stores'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useAtom } from 'jotai'; import { components } from '@schema'; -import { AxiosResponse } from 'axios'; import { ApiResponseType } from '@types'; type LoginSuccessResponse = components['schemas']['LoginSuccessResponse']; @@ -15,9 +17,10 @@ const postKakaoLogin = async ( authCode: string ): Promise>> => { const response = await post>( - `/user/login?authorizationCode=${authCode}`, + `/v1/user/login?authorizationCode=${authCode}`, { socialType: 'KAKAO', + redirectUri: import.meta.env.VITE_REDIRECT_URI, } ); diff --git a/src/apis/domains/user/usePostLogout.ts b/src/apis/domains/user/usePostLogout.ts index 9a0c9387..45fb9522 100644 --- a/src/apis/domains/user/usePostLogout.ts +++ b/src/apis/domains/user/usePostLogout.ts @@ -1,13 +1,15 @@ -import { post } from '@apis/api'; -import { useEasyNavigate } from '@hooks'; -import { userAtom } from '@stores'; import { useMutation } from '@tanstack/react-query'; import { useAtom } from 'jotai'; import { RESET } from 'jotai/utils'; +import { post } from '@apis/api'; + +import { useEasyNavigate } from '@hooks'; +import { userAtom } from '@stores'; + const postLogout = async () => { try { - const response = await post(`/user/logout`); + const response = await post(`/v1/user/logout`); return response; } catch (error) { console.error(error); diff --git a/src/apis/queryKeys/queryKeys.ts b/src/apis/queryKeys/queryKeys.ts index 90a883f5..f4841b08 100644 --- a/src/apis/queryKeys/queryKeys.ts +++ b/src/apis/queryKeys/queryKeys.ts @@ -16,6 +16,7 @@ export const QUERY_KEY = { MOIM_DESCRIPTION: 'moimDescription', MOIM_HOST: 'moimHost', MOIM_NOTICE_LIST: 'moimNoticeList', + MOIM_REVIEW_LIST: 'moimReviewList', MOIM_SUBMIT_REQUEST: 'moimSubmitRequest', MOIM_SUBMITTER: 'moimSubmitter', POST_MOIM: 'postMoim', @@ -23,4 +24,12 @@ export const QUERY_KEY = { MOIM_LIST_BY_CATEGORY: 'moimListByCategory', HOST_SUBMITTER: 'hostSubmitter', HOST_SUBMIT_REQUEST: 'hostSubmitRequest', + MOIM_SUBMITTER_ALL: 'moimSubmitterAll', + MOIM_SUBMITTER_ALL_REQUEST: 'miomSubmitterAllRequest', + REVIEW_MOIM_INFO: 'reviewMoimInfo', + REVIEW_TAG_LIST: 'reviewTagList', + MOIM_NOTICE_DETAIL: 'moimNoticeDetail', + COMMENT_LIST: 'commentList', + NOTICE_COMMENT: 'noticeComment', + GUEST_INFO: 'guestInfo', } as const; diff --git a/src/assets/lotties/home-banner1.json b/src/assets/lotties/home-banner1.json new file mode 100644 index 00000000..ddcf44f4 --- /dev/null +++ b/src/assets/lotties/home-banner1.json @@ -0,0 +1 @@ +{"assets":[{"id":"el-608","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[88.94,10.66]},"o":{"a":0,"k":100},"p":{"a":0,"k":[88.94,10.66]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[172.5,5.5],[177.5,10.5],[172.5,15.5]]}}},{"ty":"st","hd":false,"bm":0,"c":{"a":0,"k":[0.243,0.247,0.271]},"lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":1.511}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 (35) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.139,-0.894],[0,0],[0.608,1.685],[1.546,-0.732],[0,0],[-0.007,2.249],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,2.168],[0,0],[-1.567,-0.681],[-0.608,1.816],[0,0],[2.087,-0.967],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[5.435,7.826],[8.848,13.173],[7.954,14.462],[4.636,10.712],[1.318,14.784],[0.381,13.51],[3.779,7.826],[3.779,6.713],[0.864,6.713],[0.864,5.365],[8.335,5.365],[8.335,6.713],[5.435,6.713]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[9.815,17.304],[9.815,4.062],[11.455,4.062],[11.455,17.304]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.102,-0.659],[0,0],[0.601,1.296],[1.479,-0.489],[0,0],[0.008,1.795],[0,0],[0,0]],"o":[[-0.008,1.743],[0,0],[-1.523,-0.506],[-0.601,1.437],[0,0],[2.139,-0.726],[0,0],[0,0],[0,0]],"v":[[18.34,5.95],[21.533,9.993],[20.727,11.283],[17.512,8.47],[14.238,11.502],[13.418,10.228],[16.655,5.95],[16.655,4.69],[18.34,4.69]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.396,13.89],[15.396,12.586],[24.434,12.586],[24.434,17.303],[22.793,17.303],[22.793,13.89]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[22.793,11.985],[22.793,4.062],[24.433,4.062],[24.433,11.986]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[41.03,4.075],[41.03,14.095],[39.39,14.095],[39.39,12.937],[36.797,12.937],[36.797,11.795],[39.39,11.795],[39.39,4.075]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.812,0.359],[0,0],[1.12,-0.08],[0,0],[0,0],[0,0],[1.153,0.005]],"o":[[2.44,-0.014],[0,0],[-1.091,0.183],[0,0],[0,0],[0,0],[-1.152,0.043],[0,0]],"v":[[29.868,10.022],[38.408,9.627],[38.496,10.799],[35.156,11.179],[35.156,13.729],[33.53,13.729],[33.53,11.268],[30.073,11.326]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.963,-0.007],[-0.015,-1.399],[1.925,-0.008],[0,1.421]],"o":[[0,-1.399],[1.926,-0.008],[-0.014,1.421],[-1.963,-0.008],[0,0]],"v":[[30.878,6.902],[34.19,4.559],[37.485,6.902],[34.19,9.232],[30.879,6.902]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[31.627,17.039],[31.627,13.128],[33.253,13.128],[33.253,15.721],[41.339,15.721],[41.339,17.039]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.063,-0.007],[-0.008,0.718],[1.01,-0.008],[0,-0.717]],"o":[[0,0.718],[1.01,-0.007],[-0.008,-0.717],[-1.063,-0.008],[0,0]],"v":[[32.418,6.902],[34.191,8.045],[35.934,6.902],[34.191,5.76],[32.418,6.902]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[54.318,4.061],[54.318,17.303],[52.735,17.303],[52.735,4.062]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.296,0.271],[0,0],[2,-0.007]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.56,-0.007],[0,0],[-1.494,0.307],[0,0]],"v":[[43.33,14.272],[43.33,5.614],[48.37,5.614],[48.37,6.918],[44.927,6.918],[44.927,12.909],[48.911,12.558],[49.043,13.891],[44.223,14.271]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[47.46,10.302],[47.46,8.969],[50.01,8.969],[50.01,4.325],[51.533,4.325],[51.533,16.66],[50.01,16.66],[50.01,10.303]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[66.87,4.062],[66.87,17.318],[65.23,17.318],[65.23,4.062]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.006,0],[-0.007,-2.856],[1.985,0],[-0.007,2.878]],"o":[[-0.008,-2.857],[1.985,0],[-0.007,2.879],[-2.006,0],[0,0]],"v":[[56.28,9.702],[59.736,5.028],[63.193,9.701],[59.736,14.389],[56.279,9.701]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.121,-0.008],[0,2.036],[1.114,0],[0,-2.021]],"o":[[0,2.035],[1.113,-0.008],[0,-2.021],[-1.12,0],[0,0]],"v":[[57.846,9.701],[59.736,12.923],[61.61,9.7],[59.735,6.492],[57.845,9.7]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0.285,-1.414],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.043,0.41],[0,0],[0,0],[0,0],[0,0.307],[0,0],[0,0]],"o":[[0,0],[0.007,1.033],[0,0],[0,0],[0,0],[0,0],[0,0],[0.088,-0.468],[0,0],[0,0],[0,0],[0.015,-0.322],[0,0],[0,0],[0,0]],"v":[[82.996,4.602],[82.996,5.7],[82.718,9.274],[84.417,9.274],[84.417,10.578],[72.407,10.578],[72.407,9.276],[81.101,9.276],[81.291,7.966],[73.726,8.28],[73.536,7.02],[81.357,6.83],[81.372,5.893],[73.872,5.893],[73.872,4.603]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.738,12.775],[73.738,11.53],[83.069,11.53],[83.069,14.87],[75.379,14.87],[75.379,15.866],[83.538,15.866],[83.538,17.141],[73.768,17.141],[73.768,13.683],[81.443,13.683],[81.443,12.775]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[-1.479,0.242],[0,0],[1.64,-0.007],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.34,-0.015],[0,0],[-1.787,0.3],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[90.732,5.41],[90.732,10.347],[87.305,10.347],[87.305,12.925],[91.406,12.617],[91.523,13.936],[86.646,14.287],[85.737,14.287],[85.737,9.027],[89.165,9.027],[89.165,6.727],[85.723,6.727],[85.723,5.41]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[92.197,16.63],[92.197,4.312],[93.691,4.312],[93.691,9.146],[95.186,9.146],[95.186,4.062],[96.738,4.062],[96.738,17.304],[95.186,17.304],[95.186,10.463],[93.69,10.463],[93.69,16.63]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.776,-0.484],[0,0],[0.864,1.78],[2.212,-0.47],[0,0],[-0.007,2.036],[0,0],[0,0]],"o":[[0,2.043],[0,0],[-2.219,-0.461],[-0.872,1.765],[0,0],[2.732,-0.498],[0,0],[0,0],[0,0]],"v":[[105.146,5.879],[109.922,10.464],[109.189,11.826],[104.29,8.237],[99.39,11.827],[98.672,10.464],[103.418,5.879],[103.418,4.897],[105.146,4.897]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[98.306,15.62],[98.306,14.272],[110.405,14.272],[110.405,15.62]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.08,-0.578],[0,0],[0.6,1.135],[1.575,-0.453],[0,0],[0,1.582],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.007,1.443],[0,0],[-1.523,-0.418],[-0.579,1.253],[0,0],[2.087,-0.585],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[119.59,6.787],[122.739,10.2],[121.992,11.46],[118.792,9.021],[115.532,11.694],[114.756,10.434],[117.964,6.787],[117.964,6.757],[115.195,6.757],[115.195,5.469],[117.964,5.469],[117.964,4.003],[119.604,4.003],[119.604,5.468],[122.358,5.468],[122.358,6.757],[119.59,6.757]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[116.719,17.144],[116.719,12.41],[125.273,12.41],[125.273,17.142]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[118.33,15.825],[123.662,15.825],[123.662,13.7],[118.33,13.7]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[123.647,11.855],[123.647,4.063],[125.273,4.063],[125.273,7.256],[127.119,7.256],[127.119,8.604],[125.273,8.604],[125.273,11.856]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.593,-1.164],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.275,0],[-0.008,2.879],[-1.992,0]],"o":[[1.194,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.578,1.319],[-1.992,0],[-0.008,-2.856],[0,0]],"v":[[131.411,5.029],[134.187,6.86],[137.285,6.86],[137.285,4.062],[138.896,4.062],[138.896,17.318],[137.285,17.318],[137.285,12.308],[134.304,12.308],[131.411,14.388],[128.013,9.701],[131.411,5.028]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.091,-0.008],[-0.007,2.036],[1.099,0],[-0.007,-2.021]],"o":[[-0.007,2.036],[1.099,-0.008],[-0.007,-2.021],[-1.091,0],[0,0]],"v":[[129.58,9.701],[131.411,12.924],[133.257,9.701],[131.411,6.493],[129.58,9.701]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.001,-0.544],[0.073,-0.403],[0,0],[0,0]],"o":[[0.097,0.463],[0,0.453],[0,0],[0,0],[0,0]],"v":[[134.648,8.192],[134.795,9.702],[134.685,10.99],[137.285,10.99],[137.285,8.192]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[151.128,4.062],[151.128,9.335],[153.164,9.335],[153.164,10.683],[151.128,10.683],[151.128,17.303],[149.517,17.303],[149.517,4.063]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[140.684,7.402],[140.684,6.097],[143.818,6.097],[143.818,4.252],[145.444,4.252],[145.444,6.098],[148.491,6.098],[148.491,7.4]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.934,-0.008],[-0.007,-1.831],[1.904,0],[-0.015,1.824]],"o":[[-0.015,-1.831],[1.904,-0.008],[-0.007,1.824],[-1.934,0],[0,0]],"v":[[141.299,11.386],[144.639,8.266],[147.964,11.386],[144.639,14.491],[141.299,11.386]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.04,0.007],[-0.015,1.076],[1.018,0],[-0.008,-1.077]],"o":[[-0.008,1.076],[1.018,0.007],[-0.015,-1.077],[-1.04,0],[0,0]],"v":[[142.852,11.386],[144.639,13.144],[146.411,11.386],[144.639,9.599],[142.852,11.386]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[164.78,4.062],[164.78,17.304],[163.14,17.304],[163.14,4.062]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (35)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.293,3.011],[0,0],[0,0],[0,0],[4.636,-2.205]],"o":[[3.471,-1.648],[0,0],[0,0],[0,0],[0,3.94],[0,0]],"v":[[153.809,13.656],[159.17,6.756],[154.482,6.756],[154.482,5.469],[160.825,5.469],[154.658,14.961]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.243,0.247,0.271]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]}]},{"id":"el-578","layers":[{"ddd":0,"ind":5,"ty":4,"nm":"Layer 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[80.888,26.222]},"o":{"a":0,"k":100},"p":{"a":0,"k":[80.888,26.222]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 (9) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[80.846,37.475],[80.846,39.709],[78.203,39.709],[78.203,45.338],[75.453,45.338],[75.453,32.404],[78.203,32.404],[78.203,37.474]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.44,2.804],[0,0],[0,0],[0,0],[5.909,-1.666]],"o":[[4.405,-1.193],[0,0],[0,0],[0,0],[0.01,5.285],[0,0]],"v":[[62.519,42.352],[69.889,36.078],[63.594,36.078],[63.594,33.887],[72.897,33.887],[63.658,44.565]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,2.288],[0,0],[0,0],[0,0],[-4.147,-0.623],[0,0],[1.193,1.902],[3.051,-0.527]],"o":[[4.135,-0.613],[0,0],[0,0],[0,0],[0.01,2.266],[0,0],[-3.05,-0.505],[-1.181,1.902],[0,0]],"v":[[64.389,49.721],[70.598,44.565],[70.598,43.963],[73.326,43.963],[73.326,44.565],[79.514,49.699],[78.418,51.869],[71.951,48.066],[65.506,51.891]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.599,-1],[0,0],[0.698,1.44],[1.826,-0.762],[0,0],[0,2.18],[0,0],[0,0]],"o":[[0,2.117],[0,0],[-1.676,-0.634],[-0.709,1.687],[0,0],[2.76,-1.214],[0,0],[0,0],[0,0]],"v":[[87.957,35.906],[91.652,41.106],[90.192,43.19],[86.668,39.956],[82.908,43.812],[81.426,41.707],[85.293,35.907],[85.293,33.607],[87.957,33.607]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-4.147,-0.011],[-0.022,-2.288],[4.125,0.01],[-0.011,2.267]],"o":[[-0.011,-2.288],[4.125,-0.01],[-0.022,2.267],[-4.146,0.01],[0,0]],"v":[[85.057,48.324],[91.824,44.672],[98.614,48.324],[91.824,51.977],[85.057,48.324]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.567,0],[0,1.053],[2.546,0],[-0.022,-1.063]],"o":[[-0.022,1.053],[2.546,0],[0,-1.063],[-2.567,0],[0,0]],"v":[[87.807,48.324],[91.824,49.914],[95.842,48.324],[91.824,46.713],[87.807,48.324]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[91.717,43.791],[91.717,32.791],[94.273,32.791],[94.273,37.217],[95.906,37.217],[95.906,32.447],[98.506,32.447],[98.506,44.393],[95.906,44.393],[95.906,39.43],[94.273,39.43],[94.273,43.791]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[117.197,32.426],[117.197,52.02],[114.469,52.02],[114.469,41.707],[111.311,41.707],[111.311,39.473],[114.469,39.473],[114.469,32.426]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (9)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.525,0.441],[0,0],[3.276,0.01],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[2.696,-0.022],[0,0],[-2.901,0.483],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[101.363,36.272],[101.363,34.059],[110.215,34.059],[110.215,41.385],[104.135,41.385],[104.135,45.209],[111.633,44.65],[111.848,46.885],[103.018,47.465],[101.406,47.465],[101.406,39.215],[107.551,39.215],[107.551,36.272]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.329,0.318,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 (30) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-3.211,-1.493],[0,0],[0.881,2.343],[2.256,-1.064],[0,0],[-0.022,3.234],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.01,2.975],[0,0],[-2.181,-1],[-0.87,2.579],[0,0],[3.255,-1.515],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[7.799,5.754],[12.589,13.66],[11.065,15.809],[6.456,10.469],[1.719,16.303],[0.129,14.133],[5.049,5.753],[5.049,4.552],[0.902,4.552],[0.902,2.316],[11.731,2.316],[11.731,4.551],[7.798,4.551]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[13.256,19.977],[13.256,0.426],[16.006,0.426],[16.006,7.88],[18.885,7.88],[18.885,10.179],[16.005,10.179],[16.005,19.976]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[37.469,12.006],[37.469,14.24],[29.842,14.24],[29.842,19.977],[27.135,19.977],[27.135,14.24],[19.572,14.24],[19.572,12.006]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[21.829,10.588],[21.829,1.22],[35.342,1.22],[35.342,3.368],[24.514,3.368],[24.514,4.83],[34.934,4.83],[34.934,6.936],[24.514,6.936],[24.514,8.418],[35.557,8.418],[35.557,10.588]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[55,0.426],[55,20.02],[52.272,20.02],[52.272,0.425]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.869,0.473],[0,0],[3.567,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[2.986,-0.022],[0,0],[-3.212,0.57],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[39.639,4.27],[39.639,2.06],[48.941,2.06],[48.941,9.6],[42.496,9.6],[42.496,13.189],[50.875,12.544],[51.111,14.757],[41.421,15.444],[39.661,15.444],[39.661,7.43],[46.148,7.43],[46.148,4.27]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-3.319,-1.407],[0,0],[0.892,2.417],[2.385,-1.084],[0,0],[-0.011,3.792],[0,0],[0,0]],"o":[[-0.01,3.588],[0,0],[-2.234,-1.01],[-0.88,2.643],[0,0],[3.416,-1.44],[0,0],[0,0],[0,0]],"v":[[70.297,4.85],[75.238,13.444],[73.627,15.636],[68.954,10.254],[64.088,16.108],[62.434,13.831],[67.525,4.851],[67.525,1.93],[70.297,1.93]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[76.29,20.02],[76.29,0.425],[79.062,0.425],[79.062,20.02]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[97.217,0.425],[97.217,5.903],[99.859,5.903],[99.859,8.16],[97.217,8.16],[97.217,14.434],[94.445,14.434],[94.445,0.426]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.43,2.75],[0,0],[0,0],[0,0],[5.865,-1.655]],"o":[[4.382,-1.214],[0,0],[0,0],[0,0],[-0.011,5.285],[0,0]],"v":[[81.577,10.351],[88.87,4.121],[82.436,4.121],[82.436,1.886],[91.889,1.886],[82.715,12.521]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[84.498,19.631],[84.498,12.993],[87.269,12.993],[87.269,17.44],[97.883,17.44],[97.883,19.632]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[118.615,15.485],[118.615,17.7],[100.719,17.7],[100.719,15.487],[108.281,15.487],[108.281,11.126],[111.031,11.126],[111.031,15.487]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.236,2.589],[0,0],[0,0],[0,0],[0,0],[0,0],[-4.189,-0.612],[0,0],[1.267,2.32],[3.373,-0.612]],"o":[[4.061,-0.655],[0,0],[0,0],[0,0],[0,0],[0,0],[0.215,2.578],[0,0],[-3.427,-0.602],[-1.236,2.353],[0,0]],"v":[[101.449,9.813],[108.174,4.12],[102.201,4.12],[102.201,1.908],[117.047,1.908],[117.047,4.121],[111.096,4.121],[117.949,9.707],[116.875,11.877],[109.646,7.29],[102.523,11.984]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-3.115,-1.471],[0,0],[0.816,2.181],[2.213,-0.977],[0,0],[-0.022,2.932],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,2.782],[0,0],[-2.095,-0.945],[-0.849,2.353],[0,0],[3.191,-1.407],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[126.801,6.548],[131.355,13.938],[129.83,16.001],[125.469,11.038],[120.871,16.345],[119.367,14.218],[124.094,6.548],[124.094,5.796],[120.055,5.796],[120.055,3.605],[124.072,3.605],[124.072,0.855],[126.822,0.855],[126.822,3.605],[130.797,3.605],[130.797,5.797],[126.801,5.797]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[132.408,19.976],[132.408,0.426],[135.158,0.426],[135.158,8.01],[138.037,8.01],[138.037,10.309],[135.158,10.309],[135.158,19.977]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.011,-4.264],[2.986,0],[-0.011,4.297],[-2.997,0]],"o":[[2.986,0],[-0.01,4.298],[-2.997,0],[-0.011,-4.264],[0,0]],"v":[[5.844,33.8],[11,40.76],[5.844,47.743],[0.688,40.761],[5.844,33.8]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.494,0.011],[-0.011,2.91],[1.525,0],[0,-2.9]],"o":[[0,2.912],[1.525,0.01],[-0.01,-2.9],[-1.493,0],[0,0]],"v":[[3.33,40.76],[5.844,45.251],[8.379,40.761],[5.844,36.271],[3.33,40.761]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[13.256,51.977],[13.256,32.426],[16.006,32.426],[16.006,39.795],[18.885,39.795],[18.885,42.072],[16.005,42.072],[16.005,51.977]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[35.256,32.426],[35.256,40.096],[37.856,40.096],[37.856,42.352],[35.256,42.352],[35.256,51.977],[32.506,51.977],[32.506,32.426]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.172,3.9],[0,0],[0,0],[0,0],[3.502,-3.846]],"o":[[2.664,-2.89],[0,0],[0,0],[0,0],[-0.021,5.37],[0,0]],"v":[[19.207,46.305],[22.817,36.658],[20.067,36.658],[20.067,34.424],[25.437,34.424],[21.355,47.83]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.151,4.297],[0,0],[0,0],[0,0],[3.459,-4.254]],"o":[[2.653,-3.265],[0,0],[0,0],[0,0],[-0.011,5.575],[0,0]],"v":[[24.729,47.572],[28.263,36.658],[26.082,36.658],[26.082,34.424],[30.852,34.424],[26.898,49.098]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[56.482,41.943],[56.482,44.135],[49.07,44.135],[49.07,47.529],[46.3,47.529],[46.3,44.135],[38.587,44.135],[38.587,41.943]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-4.254,0.021],[-0.011,-2.48],[4.233,0],[0,2.493]],"o":[[0,-2.482],[4.232,0.022],[-0.01,2.493],[-4.254,0],[0,0]],"v":[[40.434,36.852],[47.524,32.791],[54.592,36.851],[47.523,40.891],[40.433,36.851]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[40.712,51.631],[40.712,45.79],[43.483,45.79],[43.483,49.42],[54.505,49.42],[54.505,51.634]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.524,-0.01],[0,1.192],[2.525,0],[-0.01,-1.245]],"o":[[-0.01,1.192],[2.525,-0.01],[0,-1.246],[-2.525,0],[0,0]],"v":[[43.397,36.851],[47.522,38.698],[51.647,36.851],[47.522,34.96],[43.397,36.85]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[142.634,43.209],[142.634,45.4],[135.028,45.4],[135.028,51.975],[132.321,51.975],[132.321,45.4],[124.802,45.4],[124.802,43.209]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.29,1.922],[0,0],[0,0],[0,0],[0,0],[0,0],[-4.018,-0.484],[0,0],[1.182,2.008],[3.406,-0.461]],"o":[[3.953,-0.484],[0,0],[0,0],[0,0],[0,0],[0,0],[0.279,1.923],[0,0],[-3.438,-0.462],[-1.192,2.008],[0,0]],"v":[[125.683,39.922],[132.117,35.604],[126.413,35.604],[126.413,33.455],[141.044,33.455],[141.044,35.603],[135.34,35.603],[141.796,39.922],[140.808,42.07],[133.728,38.139],[126.692,42.07]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[159.392,33.197],[159.392,40.072],[154.085,40.072],[154.085,41.942],[161.647,41.942],[161.647,44.154],[143.815,44.154],[143.815,41.941],[151.335,41.941],[151.335,40.072],[146.028,40.072],[146.028,33.2]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[145.792,47.742],[145.792,45.594],[159.478,45.594],[159.478,51.974],[156.749,51.974],[156.749,47.742]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (30)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[148.714,37.924],[156.706,37.924],[156.706,35.324],[148.714,35.324]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.133,0.133,0.141]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]}]}],"ddd":0,"fr":30,"h":280,"ip":0,"layers":[{"ddd":0,"ind":4,"ty":0,"nm":"Frame 1171275725","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[91.5,10.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[111.5,113.36]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"h":21,"refId":"el-608","w":183},{"ddd":0,"ind":8,"ty":0,"nm":"자투리 시간조차 아까운 갓생러 주목","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[81,26.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[101,53]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"h":53,"refId":"el-578","w":162},{"ddd":0,"ind":9,"ty":4,"nm":"subtitle","hd":true,"sr":1,"ks":{"a":{"a":0,"k":[114.493,109.044]},"o":{"a":0,"k":100},"p":{"a":0,"k":[114.493,109.044]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":true,"nm":"Path 1 (44) Group","bm":0,"it":[{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[-0.527,0.055],[0,0],[2.161,-0.007],[0,0],[-0.492,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.553,-0.041],[0,0],[-2.51,0.382],[0,0],[0.445,0],[0,0],[0,0],[0,0],[0,0]],"v":[[27.656,103.787],[27.656,105.031],[26.55,105.031],[26.55,108.415],[28.177,108.271],[28.273,109.393],[20.78,109.83],[20.616,108.572],[22.024,108.565],[22.024,105.031],[20.944,105.031],[20.944,103.787]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[22.27,112.154],[22.27,110.924],[30.705,110.924],[30.705,115.217],[29.174,115.217],[29.174,112.154]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.538,0.023],[0,0],[0,0]],"o":[[0.538,-0.009],[0,0],[0,0],[0,0]],"v":[[23.486,108.538],[25.1,108.49],[25.1,105.031],[23.486,105.031]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[29.174,110.404],[29.174,102.857],[30.705,102.857],[30.705,110.404]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[42.736,103.213],[42.736,104.361],[41.041,104.361],[41.041,106.234],[42.668,106.234],[42.668,107.383],[33.59,107.383],[33.59,106.234],[35.217,106.234],[35.217,104.361],[33.522,104.361],[33.522,103.213]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[32.51,109.365],[32.51,108.162],[43.775,108.162],[43.775,109.365]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[33.836,111.307],[33.836,110.199],[42.367,110.199],[42.367,113.139],[35.34,113.139],[35.34,113.973],[42.709,113.973],[42.709,115.107],[33.849,115.107],[33.849,112.086],[40.877,112.086],[40.877,111.307]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[36.734,106.234],[39.51,106.234],[39.51,104.361],[36.734,104.361]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[54.891,102.857],[54.891,115.23],[53.359,115.23],[53.359,102.857]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.873,0],[-0.007,-2.666],[1.853,0],[-0.007,2.687]],"o":[[-0.007,-2.666],[1.853,0],[-0.007,2.687],[-1.873,0],[0,0]],"v":[[45.006,108.121],[48.232,103.76],[51.459,108.121],[48.232,112.496],[45.006,108.121]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.045,-0.007],[0,1.9],[1.04,0],[0,-1.887]],"o":[[0,1.9],[1.04,-0.007],[0,-1.887],[-1.045,0],[0,0]],"v":[[46.469,108.121],[48.232,111.129],[49.982,108.121],[48.232,105.127],[46.469,108.121]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-0.006,-1.901],[2.284,0],[0,0],[0,0]],"o":[[0,0],[0,0],[2.27,0],[-0.007,1.893],[0,0],[0,0],[0,0]],"v":[[60.537,114],[60.537,104.102],[64.256,104.102],[67.742,107.383],[64.228,110.65],[62.315,110.65],[62.315,114]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,1.046],[1.34,0],[0,0]],"o":[[0,0],[1.34,-0.007],[0,-1.06],[0,0],[0,0]],"v":[[62.315,109.188],[63.982,109.188],[65.924,107.383],[63.982,105.592],[62.315,105.592]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[70.955,104.102],[70.955,114],[69.178,114],[69.178,104.102]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.204,0],[-0.007,-2.242],[-1.613,0],[-0.24,1.162],[0,0],[2.345,0],[-0.007,3.192],[-2.591,0],[-0.308,-2.202]],"o":[[-0.212,-1.19],[-1.62,0],[-0.007,2.276],[1.176,0],[0,0],[-0.273,1.9],[-2.611,0],[-0.007,-3.199],[2.188,0],[0,0]],"v":[[79.473,107.438],[77.107,105.564],[74.346,109.051],[77.107,112.537],[79.473,110.719],[81.263,110.719],[77.08,114.137],[72.555,109.051],[77.08,103.965],[81.264,107.438]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[82.795,114],[82.795,104.102],[84.572,104.102],[84.572,108.654],[84.709,108.654],[88.579,104.102],[90.752,104.102],[86.924,108.545],[90.793,114],[88.646,114],[85.68,109.748],[84.572,111.047],[84.572,114]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[93.924,104.102],[93.774,111.088],[92.228,111.088],[92.065,104.102]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.588,0.007],[-0.009,-0.578],[0.583,-0.009],[-0.002,0.59]],"o":[[-0.006,-0.574],[0.578,0.009],[-0.002,0.583],[-0.59,0.002],[0,0]],"v":[[91.941,113.043],[93.008,111.99],[94.061,113.043],[93.008,114.109],[91.941,113.043]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[105.189,102.871],[105.189,106.754],[106.912,106.754],[106.912,108.012],[105.189,108.012],[105.189,112.1],[103.672,112.1],[103.672,102.871]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[95.455,105.455],[95.455,104.238],[98.367,104.238],[98.367,102.857],[99.885,102.857],[99.885,104.238],[102.783,104.238],[102.783,105.455]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.798,0],[-0.007,-1.422],[1.784,0],[0,1.415]],"o":[[0,-1.422],[1.784,0],[-0.007,1.415],[-1.798,0],[0,0]],"v":[[96.084,108.326],[99.119,105.961],[102.141,108.326],[99.119,110.664],[96.084,108.326]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[97.274,114.971],[97.274,111.375],[98.791,111.375],[98.791,113.74],[105.682,113.74],[105.682,114.971]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.936,0.007],[0,0.745],[0.937,0],[-0.007,-0.752]],"o":[[-0.007,0.745],[0.937,0.007],[0,-0.752],[-0.936,0],[0,0]],"v":[[97.561,108.326],[99.119,109.488],[100.691,108.326],[99.119,107.137],[97.561,108.326]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.643,114],[115.936,105.66],[115.936,105.592],[110.959,105.592],[110.959,104.102],[117.781,104.102],[117.781,105.619],[113.488,114]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[129.17,102.871],[129.17,110.076],[127.639,110.076],[127.639,109.57],[125.328,109.57],[125.328,108.641],[127.639,108.641],[127.639,102.871]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.652,0.267],[0,0],[1.141,-0.055],[0,0],[0,0],[0,0],[0.93,0.006]],"o":[[2.386,0],[0,0],[-1.128,0.15],[0,0],[0,0],[0,0],[-1.06,0.028],[0,0]],"v":[[118.793,107.328],[126.818,107.041],[126.9,107.998],[123.469,108.306],[123.469,110.09],[121.965,110.09],[121.965,108.367],[118.957,108.395]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.88,0.007],[-0.007,-1.121],[1.839,0],[0,1.148]],"o":[[0,-1.121],[1.839,0.007],[-0.007,1.148],[-1.88,0],[0,0]],"v":[[119.668,104.922],[122.785,103.062],[125.875,104.922],[122.785,106.768],[119.668,104.922]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.598,111.498],[120.598,110.459],[129.17,110.459],[129.17,113.234],[122.143,113.234],[122.143,114.027],[129.498,114.027],[129.498,115.107],[120.652,115.107],[120.652,112.236],[127.666,112.236],[127.666,111.498]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.039,0.007],[0,0.519],[1.019,-0.007],[-0.013,-0.52]],"o":[[-0.013,0.519],[1.019,0.007],[0,-0.52],[-1.039,-0.007],[0,0]],"v":[[121.117,104.922],[122.785,105.756],[124.453,104.922],[122.785,104.074],[121.117,104.922]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[145.521,112.469],[145.521,113.713],[134.229,113.713],[134.229,112.469],[139.096,112.469],[139.096,109.775],[135.473,109.775],[135.473,103.814],[144.223,103.814],[144.223,109.775],[140.6,109.775],[140.6,112.469]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[136.963,108.586],[142.719,108.586],[142.719,105.031],[136.963,105.031]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[156.623,102.871],[156.623,109.871],[155.092,109.871],[155.092,102.871]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.914,0.007],[0.007,-1.743],[1.907,0],[0,1.702]],"o":[[0,-1.743],[1.907,0.007],[0.007,1.702],[-1.914,0],[0,0]],"v":[[146.547,106.412],[149.883,103.459],[153.205,106.412],[149.883,109.338],[146.547,106.412]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.08,0.007],[0,0.998],[1.059,0],[-0.007,-1.025]],"o":[[-0.007,0.998],[1.059,0.007],[0,-1.025],[-1.08,0],[0,0]],"v":[[148.037,106.412],[149.883,108.053],[151.715,106.412],[149.883,104.744],[148.037,106.412]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[148.42,115.066],[148.42,110.473],[156.623,110.473],[156.623,115.066]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[149.924,113.836],[155.133,113.836],[155.133,111.676],[149.924,111.676]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[171.43,102.857],[171.43,107.561],[173.33,107.561],[173.33,108.846],[171.43,108.846],[171.43,115.217],[169.912,115.217],[169.912,102.857]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[162.188,112.318],[162.188,103.869],[163.691,103.869],[163.691,106.959],[166.604,106.959],[166.604,103.869],[168.121,103.869],[168.121,112.318]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[163.691,111.074],[166.604,111.074],[166.604,108.148],[163.691,108.148]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[185.143,112.523],[185.143,113.781],[173.85,113.781],[173.85,112.523],[178.717,112.523],[178.717,110.514],[175.189,110.514],[175.189,106.467],[182.299,106.467],[182.299,104.936],[175.162,104.936],[175.162,103.705],[183.803,103.705],[183.803,107.67],[176.707,107.67],[176.707,109.27],[184.09,109.27],[184.09,110.514],[180.221,110.514],[180.221,112.523]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[195.629,102.857],[195.629,107.684],[197.461,107.684],[197.461,108.955],[195.629,108.955],[195.629,115.189],[194.111,115.189],[194.111,102.857]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.3,2.817],[0,0],[0,0],[0,0],[4.109,-2.023]],"o":[[3.008,-1.503],[0,0],[0,0],[0,0],[-0.007,3.629],[0,0]],"v":[[185.881,111.812],[190.816,105.4],[186.551,105.4],[186.551,104.143],[192.361,104.143],[186.742,112.988]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[208.371,102.857],[208.371,115.217],[206.84,115.217],[206.84,102.857]]}}},{"ty":"sh","hd":true,"nm":"Path 1 (44)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.274,2.81],[0,0],[0,0],[0,0],[4.327,-2.057]],"o":[[3.24,-1.538],[0,0],[0,0],[0,0],[0,3.678],[0,0]],"v":[[198.131,111.812],[203.135,105.373],[198.76,105.373],[198.76,104.17],[204.68,104.17],[198.924,113.029]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.243,0.247,0.271]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":11,"ty":4,"nm":"star1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[206.501,213.369]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":82.8,"s":[360],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 3 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 (2) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (2)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[4.194,-4.412],[0.372,-1.015],[1.28,0.628],[1.205,-0.001],[0,-4.366],[-0.518,-1.051],[0.256,-0.615],[0.729,-0.245],[-4.567,-4.026],[-1.055,-0.332],[-0.269,-0.608],[0.323,-0.697],[-5.777,0.001],[-1.043,0.483],[-0.608,-0.269],[-0.23,-0.732],[-4.119,4.482],[-0.347,1.117],[-0.605,0.271],[-0.696,-0.318],[-2.232,1.33],[2.234,3.751],[-0.246,0.562],[-0.65,0.152],[4.162,4.441],[1.255,0.414],[0.261,0.597],[-0.31,0.679],[6.059,-0.574],[1.006,-0.599],[0.534,0.209],[0.185,0.601]],"o":[[-1.724,-5.838],[-0.745,0.783],[-0.491,1.341],[-1.083,-0.529],[-4.366,0],[0,1.254],[0.34,0.69],[-0.257,0.614],[-5.77,1.943],[0.83,0.731],[0.732,0.229],[0.269,0.608],[-2.431,5.24],[1.149,0.001],[0.696,-0.324],[0.608,0.269],[1.822,5.808],[0.791,-0.861],[0.226,-0.73],[0.605,-0.271],[2.362,1.084],[3.752,-2.233],[-0.307,-0.531],[0.216,-0.508],[5.927,-1.384],[-0.904,-0.964],[-0.708,-0.234],[-0.26,-0.596],[2.532,-5.534],[-1.166,0.11],[-0.586,0.349],[-0.588,-0.224],[0,0]],"v":[[213.848,190.669],[200.534,187.46],[198.841,190.186],[195.42,191.559],[191.943,190.756],[184.038,198.661],[184.847,202.15],[184.882,204.222],[183.386,205.656],[180.68,219.085],[183.539,220.697],[185.061,222.095],[185.072,224.163],[192.245,235.396],[195.573,234.664],[197.64,234.674],[199.039,236.196],[212.407,239.18],[214.136,236.176],[215.524,234.654],[217.584,234.633],[224.922,234.239],[227.671,223.403],[227.573,221.664],[228.893,220.531],[232.864,207.426],[229.575,205.325],[228.101,203.948],[228.094,201.932],[220.159,190.772],[216.861,191.849],[215.072,191.977],[213.848,190.669]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (2)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.559,0.333],[-0.093,-6.854],[0.549,-1.2],[-0.795,-0.262],[5.117,-4.561],[0.488,-0.291],[0.889,-0.21],[-0.307,-0.515],[4.227,-2.515],[2.661,1.22],[0.254,-0.82],[4.651,5.041],[0.394,1.254],[0.781,-0.363],[-0.607,6.829],[-0.434,0.935],[0.822,0.258],[-5.053,4.638],[-1.179,0.397],[0.381,0.775],[-6.595,-0.002],[-1.182,-0.58],[-0.286,0.782],[-4.395,-5.261],[-0.242,-0.406],[-0.207,-0.697]],"o":[[0.184,0.623],[5.89,-3.508],[0.018,1.32],[-0.348,0.762],[6.509,2.151],[-0.424,0.378],[-0.786,0.467],[-0.583,0.136],[2.516,4.226],[-2.514,1.498],[-0.78,-0.357],[-2.04,6.549],[-0.891,-0.966],[-0.257,-0.822],[-6.218,2.889],[0.091,-1.027],[0.363,-0.781],[-6.543,-2.057],[0.917,-0.841],[0.819,-0.275],[-2.911,-5.918],[1.406,0],[0.748,0.367],[2.358,-6.437],[0.303,0.363],[0.389,0.653],[0,0]],"v":[[214.807,190.385],[216.35,190.99],[229.811,198.52],[229.004,202.347],[229.889,204.375],[233.02,219.478],[231.648,220.483],[229.121,221.505],[228.531,222.891],[225.433,235.098],[217.168,235.543],[215.091,236.473],[200.036,239.866],[198.084,236.495],[195.994,235.571],[183.371,226.705],[184.165,223.741],[183.24,221.651],[179.888,206.587],[183.067,204.708],[183.95,202.591],[191.943,189.756],[195.86,190.661],[197.902,189.842],[213.097,187.196],[213.916,188.352],[214.807,190.385]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[181.06333210881155,229.40161895755392]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0.17]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[206.50000143633156,187.198288879985]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[206.501,213.368]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,-0.001]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 4 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0.184,0.623],[0.38,0.638],[3.349,-5.981],[0.163,-0.444],[0.748,0.367],[1.358,-0.001],[-2.911,-5.918],[0.819,-0.275],[-5.147,-4.534],[-1.187,-0.373],[0.363,-0.781],[-6.829,0.607],[-0.935,0.434],[-0.257,-0.822],[-4.64,5.05],[-0.391,1.257],[-0.78,-0.357],[-2.514,1.498],[2.516,4.226],[-0.583,0.136],[-0.786,0.467],[5.981,3.349],[0.539,0.178],[-0.348,0.762],[6.825,-0.646],[1.134,-0.675]],"o":[[-0.559,0.333],[-0.212,-0.712],[-3.505,-5.891],[-0.231,0.413],[-0.286,0.782],[-1.22,-0.596],[-6.595,-0.002],[0.381,0.775],[-6.5,2.191],[0.934,0.822],[0.822,0.258],[-2.889,6.217],[1.027,-0.091],[0.781,-0.363],[2.054,6.543],[0.891,-0.969],[0.254,-0.82],[2.661,1.22],[4.227,-2.515],[-0.307,-0.515],[0.889,-0.21],[5.891,-3.505],[-0.496,-0.278],[-0.795,-0.262],[2.853,-6.233],[-1.314,0.124],[0,0]],"v":[[216.35,190.99],[214.807,190.385],[213.916,188.352],[198.493,188.555],[197.902,189.842],[195.86,190.661],[191.943,189.756],[183.95,202.591],[183.067,204.708],[180.023,219.837],[183.24,221.651],[184.165,223.741],[193.03,236.365],[195.994,235.571],[198.084,236.495],[213.145,239.854],[215.091,236.473],[217.168,235.543],[225.433,235.098],[228.531,222.891],[229.121,221.505],[231.648,220.483],[231.445,205.06],[229.889,204.375],[229.004,202.347],[220.068,189.775],[216.35,190.99]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.435,0.42,1]},"r":1,"o":{"a":0,"k":92}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[206.5,213.37]},"o":{"a":0,"k":100},"p":{"a":0,"k":[-0.001,0.001]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":16,"ty":4,"nm":"Layer 5","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[165.37,189.037]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":12.3,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":37.5,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[139.406,215.216],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":38.4,"s":[164.367,187.038],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-0.583],[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0]],"o":[[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0],[0,0],[0,-0.583],[0,0]],"v":[[187.793,164.328],[250.98,164.328],[252.036,165.383],[252.036,165.383],[250.98,166.439],[187.793,166.439],[186.737,165.383],[186.737,165.383],[187.793,164.328]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[245.67433684226214,165.3093311347346]},"g":{"p":2,"k":{"a":0,"k":[0,0.933,0.933,1,1,0.882,0.878,1,0,1,1,0]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[186.736998597057,165.38400256454094]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[186.737,164.328]},"o":{"a":0,"k":100},"p":{"a":0,"k":[186.737,164.328]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":18,"ty":4,"nm":"Group 5","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":10.8,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":21.6,"s":[50],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[4.861,243.541]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 6 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-0.409],[0,0],[0.409,0],[0,0],[0,0.409],[0,0],[-0.409,0]],"o":[[0,0],[0.409,0],[0,0],[0,0.409],[0,0],[-0.409,0],[0,0],[0,-0.409],[0,0]],"v":[[26.735,203.461],[71.081,203.461],[71.822,204.202],[71.822,204.202],[71.081,204.943],[26.735,204.943],[25.994,204.202],[25.994,204.202],[26.735,203.461]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[104.30932593088706,196.79933671622064]},"g":{"p":2,"k":{"a":0,"k":[0,0.933,0.933,1,1,0.576,0.569,1,0,1,1,0.45]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[25.993990751443846,204.20199599946645]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[25.994,203.461]},"o":{"a":0,"k":100},"p":{"a":0,"k":[25.994,203.461]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[10.998,220.802]},"o":{"a":0,"k":100},"p":{"a":0,"k":[-2.758,3.264]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 15 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.969,0],[0,0.969],[-0.969,0],[0,-0.969]],"o":[[0,0.969],[-0.969,0],[0,-0.969],[0.969,0],[0,0]],"v":[[31.51,197.755],[29.755,199.51],[28,197.755],[29.755,196],[31.51,197.755]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[29.755,197.755]},"o":{"a":0,"k":100},"p":{"a":0,"k":[15.999,-19.783]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":23,"ty":4,"nm":"circle","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[311.5,212.5]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":48,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":60.9,"s":[50],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[311.5,212.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.381,0],[0,1.381],[-1.381,0],[0,-1.381]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0],[0,0]],"v":[[314,212.5],[311.5,215],[309,212.5],[311.5,210],[314,212.5]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":25,"ty":4,"nm":"white","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"white","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[420,32.5],[268.5,184],[117,32.5],[268.5,-119],[420,32.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[268.5,175.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[268.5,32.5]}}]},{"ddd":0,"ind":26,"ty":4,"nm":"line","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[268.5,84.037]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":10.2,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":33.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[256.5,101.037],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":33.6,"s":[268.5,84.037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-0.583],[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0]],"o":[[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0],[0,0],[0,-0.583],[0,0]],"v":[[294.793,236.328],[357.98,236.328],[359.036,237.383],[359.036,237.383],[357.98,238.439],[294.793,238.439],[293.737,237.383],[293.737,237.383],[294.793,236.328]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[359.1203238096947,237.46733608097176]},"g":{"p":2,"k":{"a":0,"k":[0,0.933,0.933,1,1,0.576,0.569,1,0,1,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[293.73699889722417,237.38400274205353]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[293.737,236.328]},"o":{"a":0,"k":100},"p":{"a":0,"k":[293.737,236.328]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":28,"ty":4,"nm":"circle","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[300.499,226.5]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":36.9,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":53.7,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[300.499,226.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.381,0],[0,1.381],[-1.381,0],[0,-1.381]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0],[0,0]],"v":[[302.999,226.5],[300.499,229],[297.999,226.5],[300.499,224],[302.999,226.5]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":30,"ty":4,"nm":"lili","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[107.737,257.328]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":12,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":27.3,"s":[80],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[107.737,257.328]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"lili","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-0.583],[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0]],"o":[[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0],[0,0],[0,-0.583],[0,0]],"v":[[108.793,257.328],[171.98,257.328],[173.036,258.384],[173.036,258.384],[171.98,259.439],[108.793,259.439],[107.737,258.384],[107.737,258.384],[108.793,257.328]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[173.12034009939043,258.46733608229556]},"g":{"p":2,"k":{"a":0,"k":[0,0.933,0.933,1,1,0.576,0.569,1,0,1,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":12,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":27.3,"s":[75],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"s":{"a":0,"k":[107.73699950629775,258.3840027429502]}}]},{"ddd":0,"ind":31,"ty":4,"nm":"circir","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":28.8,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":39,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"circir","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.105,0],[0,1.105],[-1.105,0],[0,-1.105]],"o":[[0,1.105],[-1.105,0],[0,-1.105],[1.105,0],[0,0]],"v":[[121,241],[119,243],[117,241],[119,239],[121,241]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}}]},{"ddd":0,"ind":32,"ty":4,"nm":"white1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[108,32.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[108,32.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[202,32.5],[50.5,184],[-101,32.5],[50.5,-119],[202,32.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[50.5,175.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[50.5,32.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[317,32.5],[165.5,184],[14,32.5],[165.5,-119],[317,32.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[165.5,175.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[165.5,32.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":35,"ty":4,"nm":"star3","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[103.4,185.401]},"o":{"a":0,"k":100},"p":{"a":0,"k":[103.4,185.401]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":106.8,"s":[360],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0],[-0.776,-1.197],[0,0],[0,0],[0.297,-1.395],[0,0],[0,0],[1.196,-0.776],[0,0],[0,0],[1.394,0.297],[0,0],[0,0],[0.776,1.197],[0,0],[0,0],[-0.297,1.395],[0,0],[0,0],[-1.197,0.776],[0,0],[0,0],[-1.394,-0.297]],"o":[[0,0],[0,0],[-0.186,-1.414],[0,0],[0,0],[0.868,-1.131],[0,0],[0,0],[1.413,-0.187],[0,0],[0,0],[1.131,0.868],[0,0],[0,0],[0.186,1.413],[0,0],[0,0],[-0.868,1.131],[0,0],[0,0],[-1.414,0.187],[0,0],[0,0],[-1.131,-0.868],[0,0]],"v":[[97.092,182.054],[99.945,182.662],[99.564,179.77],[102.013,178.867],[103.601,181.314],[105.376,179],[107.746,180.093],[107.138,182.946],[110.031,182.565],[110.934,185.014],[108.486,186.602],[110.801,188.377],[109.708,190.747],[106.855,190.139],[107.236,193.032],[104.786,193.934],[103.199,191.487],[101.423,193.801],[99.053,192.708],[99.661,189.856],[96.769,190.236],[95.866,187.787],[98.313,186.199],[96,184.424],[97.093,182.054]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,-1]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":37,"ty":4,"nm":"star2","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[368.792,200.792]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":43.8,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[368.792,200.792]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":96,"s":[360],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0],[-1.483,-2.286],[0,0],[0,0],[0.568,-2.665],[0,0],[0,0],[2.287,-1.483],[0,0],[0,0],[2.665,0.568],[0,0],[0,0],[1.483,2.286],[0,0],[0,0],[-0.568,2.665],[0,0],[0,0],[-2.287,1.483],[0,0],[0,0],[-2.666,-0.568]],"o":[[0,0],[0,0],[-0.356,-2.702],[0,0],[0,0],[1.659,-2.162],[0,0],[0,0],[2.702,-0.356],[0,0],[0,0],[2.162,1.659],[0,0],[0,0],[0.356,2.702],[0,0],[0,0],[-1.659,2.162],[0,0],[0,0],[-2.702,0.356],[0,0],[0,0],[-2.162,-1.659],[0,0]],"v":[[356.734,192.483],[362.187,193.645],[361.459,188.116],[366.141,186.39],[369.176,191.068],[372.57,186.644],[377.1,188.734],[375.939,194.187],[381.467,193.459],[383.193,198.141],[378.515,201.176],[382.939,204.57],[380.85,209.1],[375.396,207.939],[376.124,213.467],[371.442,215.194],[368.407,210.515],[365.013,214.939],[360.483,212.85],[361.645,207.396],[356.116,208.124],[354.39,203.443],[359.068,200.407],[354.644,197.013],[356.734,192.483]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.886,0.882,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":39,"ty":4,"nm":"circircir","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[194.499,150.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[194.499,150.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"cicicici Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"cicicici","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.381,0],[0,1.381],[-1.381,0],[0,-1.381]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0],[0,0]],"v":[[196.999,150.5],[194.499,153],[191.999,150.5],[194.499,148],[196.999,150.5]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":41.4,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":55.2,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":41,"ty":4,"nm":"white","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[94.5,23.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[94.5,23.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[246,23.5],[94.5,175],[-57,23.5],[94.5,-128],[246,23.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[94.5,166.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[94.5,23.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":43,"ty":4,"nm":"circle1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[350,159]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":37.5,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":72.3,"s":[75],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[350,159]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.209,0],[0,2.209],[-2.209,0],[0,-2.209]],"o":[[0,2.209],[-2.209,0],[0,-2.209],[2.209,0],[0,0]],"v":[[354,159],[350,163],[346,159],[350,155],[354,159]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":97.2,"s":[50],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":45,"ty":4,"nm":"linecircle","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[273.543,244.543]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[262.543,257.543],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":16.5,"s":[273.543,244.543],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 25 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[35.8,0],[0,35.8],[-35.8,0],[0,-35.8]],"o":[[0,35.8],[-35.8,0],[0,-35.8],[35.8,0],[0,0]],"v":[[338.365,244.543],[273.543,309.365],[208.721,244.543],[273.543,179.721],[338.365,244.543]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[273.6263325902639,309.4483226228316]},"g":{"p":2,"k":{"a":0,"k":[0.5,1,1,1,1,1,1,1,0.5,0.14,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":18},"r":1,"s":{"a":0,"k":[273.5429992577774,179.72099304373438]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[273.543,244.543]},"o":{"a":0,"k":100},"p":{"a":0,"k":[273.543,244.543]},"r":{"a":0,"k":24},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[273.543,244.543]},"o":{"a":0,"k":100},"p":{"a":0,"k":[273.543,244.543]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[34.696,0],[0,34.696],[-34.696,0],[0,-34.696]],"o":[[0,34.696],[-34.696,0],[0,-34.696],[34.696,0],[0,0]],"v":[[336.365,244.543],[273.543,307.365],[210.721,244.543],[273.543,181.721],[336.365,244.543]]}}},{"ty":"gs","hd":false,"bm":0,"o":{"a":0,"k":100},"e":{"a":1,"k":[{"t":0,"s":[271.5133262594674,289.2793410688357],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":120,"s":[271.5133262594674,289.2793410688357],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"g":{"p":2,"k":{"a":1,"k":[{"t":0,"s":[0,1,1,1,1,1,1,1,0,1,1,0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":120,"s":[0,1,1,1,0.81,1,1,1,0,1,0.81,0],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":1,"k":[{"t":0,"s":[273.5429995378976,179.72099289405037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":120,"s":[273.5429995378976,179.72099289405037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"lc":1,"lj":1,"ml":4,"w":{"a":0,"k":4}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[273.543,244.543]},"o":{"a":0,"k":100},"p":{"a":0,"k":[273.543,244.543]},"r":{"a":0,"k":24},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":49,"ty":4,"nm":"bar3","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[137.596,322.886]},"o":{"a":1,"k":[{"t":0,"s":[50],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":18.9,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[115.596,346.886],"i":{"x":0.88,"y":0.77},"o":{"x":0.5,"y":0},"ti":[0,0],"to":[0,0]},{"t":18.9,"s":[137.596,322.886],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-25.256],[0,0],[25.256,0],[0,0],[0,25.256],[0,0],[-25.256,0]],"o":[[0,0],[25.256,0],[0,0],[0,25.256],[0,0],[-25.256,0],[0,0],[0,-25.256],[0,0]],"v":[[363.107,178.201],[722.809,178.201],[768.539,223.931],[768.539,229.797],[722.809,275.527],[363.107,275.527],[317.377,229.797],[317.377,223.931],[363.107,178.201]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[768.6223207839564,226.9473335769283]},"g":{"p":3,"k":{"a":0,"k":[0,0.914,0.898,1,0,0.922,0.91,1,1,1,1,1,0,1,0,1,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":20},"r":1,"s":{"a":0,"k":[317.37701657338135,226.8640002407687]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[317.377,178.201]},"o":{"a":0,"k":100},"p":{"a":0,"k":[317.377,178.201]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":51,"ty":4,"nm":"star0","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[299.354,133.138]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":120,"s":[360],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 26 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 (2) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (2)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0.334,0.729],[4.821,-2.21],[0.973,-1.98],[1.921,1.213],[1.455,0.155],[0.567,-5.273],[-0.503,-1.38],[0.496,-0.904],[1.209,-0.267],[0.442,-4.1],[-3.748,-1.632],[-0.314,-0.981],[0.638,-1.059],[0.148,-1.388],[-5.273,-0.566],[-1.321,0.451],[-0.891,-0.515],[-0.241,-1.211],[-5.555,4.882],[-0.564,1.301],[-0.977,0.317],[-1.058,-0.628],[-2.869,1.318],[2.21,4.821],[-0.442,0.789],[-1.119,0.139],[2.709,5.905],[2.107,0.952],[0.304,0.968],[-0.612,1.032],[1.317,2.866],[4.821,-2.21],[0.822,0.428],[0.204,1.115]],"o":[[-0.145,-0.788],[-2.211,-4.82],[-2.007,0.916],[-1.005,2.041],[-1.239,-0.78],[-5.273,-0.566],[-0.158,1.46],[0.426,1.164],[-0.497,0.904],[-4.026,0.892],[-0.46,4.275],[1.132,0.493],[0.314,0.981],[-0.718,1.197],[-0.567,5.273],[1.388,0.153],[1.17,-0.398],[0.892,0.515],[1.45,7.252],[1.065,-0.936],[0.487,-1.129],[0.977,-0.318],[2.712,1.617],[4.82,-2.21],[-0.472,-1.027],[0.441,-0.79],[6.448,-0.795],[-0.959,-2.104],[-1.094,-0.497],[-0.304,-0.967],[1.613,-2.711],[-2.21,-4.821],[-1.033,0.474],[-0.82,-0.429],[0,0]],"v":[[311.293,104.893],[310.572,102.609],[297.841,97.882],[293.232,102.361],[287.612,103.945],[283.518,102.524],[272.944,111.046],[273.468,115.363],[273.182,118.627],[270.584,120.622],[263.107,128.975],[268.817,138.807],[270.98,141.257],[270.638,144.509],[269.323,148.432],[277.844,159.005],[281.957,158.553],[285.207,158.911],[287.142,161.545],[302.904,166.878],[305.378,163.48],[307.812,161.315],[311.055,161.638],[319.969,162.115],[324.696,149.384],[324.835,146.488],[327.226,144.852],[334.78,131.317],[330.024,126.577],[327.929,124.162],[328.266,120.985],[328.739,112.077],[316.008,107.35],[313.06,107.251],[311.293,104.893]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (2)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.77,0.353],[-2.671,-5.824],[1.948,-3.275],[-0.993,-0.45],[-1.161,-2.542],[5.825,-2.671],[1.181,-0.147],[-0.326,-0.709],[5.825,-2.671],[3.276,1.951],[0.444,-1.026],[5.179,0.556],[0.964,4.842],[1.062,-0.362],[1.735,0.186],[-0.685,6.371],[-0.845,1.402],[1.029,0.447],[-0.555,5.168],[-4.733,1.044],[0.387,1.057],[-0.191,1.765],[-6.371,-0.684],[-1.451,-0.916],[-0.48,0.974],[-2.426,1.107],[-2.671,-5.825],[-0.17,-0.931]],"o":[[0.153,0.834],[5.825,-2.67],[1.591,3.463],[-0.556,0.938],[2.545,1.152],[2.671,5.824],[-1.082,0.497],[-0.775,0.096],[2.67,5.825],[-3.465,1.591],[-0.961,-0.571],[-1.963,4.542],[-5.168,-0.556],[-0.219,-1.1],[-1.55,0.527],[-6.371,-0.685],[0.187,-1.735],[0.579,-0.961],[-4.526,-1.971],[0.547,-5.086],[1.099,-0.243],[-0.608,-1.668],[0.684,-6.371],[1.821,0.195],[0.917,0.58],[1.176,-2.393],[5.824,-2.67],[0.412,0.9],[0,0]],"v":[[313.26,104.533],[315.175,105.532],[330.557,111.243],[329.986,122.005],[330.85,124.755],[336.598,130.484],[330.887,145.866],[327.472,146.837],[326.514,148.551],[320.802,163.933],[310.034,163.358],[307.213,164.274],[295.322,171.202],[285.181,161.935],[282.602,160.447],[277.63,160.994],[267.334,148.219],[268.925,143.477],[268.018,140.641],[261.118,128.762],[270.153,118.669],[271.59,116.05],[270.956,110.832],[283.731,100.536],[288.68,102.254],[291.438,101.477],[297.008,96.064],[312.39,101.776],[313.26,104.533]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[248.58333866400585,144.64146192540215]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0.17]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[332.50000474232445,82.5581306565912]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[299.354,133.138]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 27 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0.153,0.834],[0.403,0.88],[5.824,-2.67],[1.176,-2.393],[0.917,0.58],[1.759,0.186],[0.684,-6.371],[-0.608,-1.668],[1.099,-0.243],[0.547,-5.086],[-4.526,-1.971],[0.579,-0.961],[0.179,-1.678],[-6.371,-0.685],[-1.55,0.527],[-0.219,-1.1],[-5.168,-0.556],[-1.963,4.542],[-0.961,-0.571],[-3.465,1.591],[2.67,5.825],[-0.775,0.096],[-1.082,0.497],[2.671,5.824],[2.545,1.152],[-0.556,0.938],[1.591,3.463],[5.825,-2.67]],"o":[[-0.77,0.353],[-0.175,-0.951],[-2.671,-5.825],[-2.426,1.107],[-0.48,0.974],[-1.496,-0.944],[-6.371,-0.685],[-0.191,1.765],[0.387,1.057],[-4.733,1.044],[-0.555,5.168],[1.029,0.447],[-0.869,1.446],[-0.685,6.371],[1.735,0.186],[1.062,-0.362],[0.964,4.842],[5.179,0.556],[0.444,-1.026],[3.276,1.951],[5.825,-2.671],[-0.326,-0.709],[1.181,-0.147],[5.825,-2.671],[-1.161,-2.542],[-0.993,-0.45],[1.948,-3.275],[-2.671,-5.824],[0,0]],"v":[[315.175,105.532],[313.26,104.533],[312.39,101.776],[297.008,96.064],[291.438,101.477],[288.68,102.254],[283.731,100.536],[270.956,110.832],[271.59,116.05],[270.153,118.669],[261.118,128.762],[268.018,140.641],[268.925,143.477],[267.334,148.219],[277.63,160.994],[282.602,160.447],[285.181,161.935],[295.322,171.202],[307.213,164.274],[310.034,163.358],[320.802,163.933],[326.514,148.551],[327.472,146.837],[330.887,145.866],[336.598,130.484],[330.85,124.755],[329.986,122.005],[330.557,111.243],[315.175,105.532]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.643,0.631,1]},"r":1,"o":{"a":0,"k":42}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[299.354,133.138]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":56,"ty":4,"nm":"bar2","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[30],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":15.9,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[87.976,222.83],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":15.9,"s":[104.663,211.615],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 30 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-11.04],[0,0],[11.04,0],[0,0],[0,11.04],[0,0],[-11.04,0]],"o":[[0,0],[11.04,0],[0,0],[0,11.04],[0,0],[-11.04,0],[0,0],[0,-11.04],[0,0]],"v":[[177.692,177.882],[256.902,177.882],[276.892,197.872],[276.892,197.872],[256.902,217.862],[177.692,217.862],[157.702,197.872],[157.702,197.872],[177.692,177.882]]}}},{"ty":"gs","hd":false,"bm":0,"o":{"a":0,"k":100},"e":{"a":0,"k":[200.8973279481403,188.34734147744402]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0.12]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[153.93499708017174,179.23800686232664]},"lc":1,"lj":1,"ml":4,"w":{"a":0,"k":1.332}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[157.702,177.882]},"o":{"a":0,"k":100},"p":{"a":0,"k":[157.702,177.882]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[104.663,211.616]},"o":{"a":0,"k":100},"p":{"a":0,"k":[-0.001,0.001]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 31 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-11.408],[0,0],[11.408,0],[0,0],[0,11.408],[0,0],[-11.408,0]],"o":[[0,0],[11.408,0],[0,0],[0,11.408],[0,0],[-11.408,0],[0,0],[0,-11.408],[0,0]],"v":[[179.295,177.783],[258.504,177.783],[279.16,198.439],[279.16,198.439],[258.504,219.095],[179.295,219.095],[158.639,198.439],[158.639,198.439],[179.295,177.783]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":1,"k":[{"t":0,"s":[279.2433341828642,198.52232893687037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":31.2,"s":[279.2433341828642,198.52232893687037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"g":{"p":2,"k":{"a":1,"k":[{"t":0,"s":[0,0.475,0.376,1,1,1,1,1,0,1,1,1],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":31.2,"s":[0,0.184,0.039,1,1,1,1,1,0,1,1,1],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":20},"r":1,"s":{"a":1,"k":[{"t":0,"s":[158.63900898776984,198.43899559940522],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":31.2,"s":[158.63900898776984,198.43899559940522],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[158.639,177.783]},"o":{"a":0,"k":100},"p":{"a":0,"k":[158.639,177.783]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[104.663,211.615]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":61,"ty":4,"nm":"bar1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":5.1,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":29.1,"s":[75],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[-2.662,300.473],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":29.1,"s":[49.3,247.455],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 32 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-9.682],[0,0],[9.683,0],[0,0],[0,9.682],[0,0],[-9.683,0]],"o":[[0,0],[9.683,0],[0,0],[0,9.682],[0,0],[-9.683,0],[0,0],[0,-9.682],[0,0]],"v":[[113.349,217.87],[182.817,217.87],[200.349,235.401],[200.349,235.401],[182.817,252.933],[113.349,252.933],[95.817,235.401],[95.817,235.401],[113.349,217.87]]}}},{"ty":"gs","hd":false,"bm":0,"o":{"a":0,"k":100},"e":{"a":0,"k":[133.71033056182884,227.05833948393797]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0.12]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[92.51299989133324,219.05900606962715]},"lc":1,"lj":1,"ml":4,"w":{"a":0,"k":1.168}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[95.817,217.87]},"o":{"a":0,"k":100},"p":{"a":0,"k":[95.817,217.87]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[49.3,247.455]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0.001]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 33 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-10.005],[0,0],[10.005,0],[0,0],[0,10.005],[0,0],[-10.005,0]],"o":[[0,0],[10.005,0],[0,0],[0,10.005],[0,0],[-10.005,0],[0,0],[0,-10.005],[0,0]],"v":[[114.754,217.783],[184.222,217.783],[202.338,235.898],[202.338,235.898],[184.222,254.014],[114.754,254.014],[96.638,235.898],[96.638,235.898],[114.754,217.783]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[202.42133706372954,235.98233658775376]},"g":{"p":2,"k":{"a":0,"k":[0,0.475,0.376,1,1,1,1,1,0,1,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":20},"r":1,"s":{"a":0,"k":[96.63800171186502,235.89900325304652]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[96.638,217.783]},"o":{"a":0,"k":100},"p":{"a":0,"k":[96.638,217.783]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[49.3,247.455]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":66,"ty":4,"nm":"background","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[245.5,98]},"o":{"a":0,"k":100},"p":{"a":0,"k":[245.5,98]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0,0],[375,0],[375,315],[0,315]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":1,"k":[{"t":0,"s":[187.58334451030575,315.0833132138756],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":51.9,"s":[187.58334451030575,315.0833132138756],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"g":{"p":2,"k":{"a":1,"k":[{"t":0,"s":[0,1,1,1,1,0.329,0.318,1,0,0.52,1,1],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":51.9,"s":[0,1,1,1,1,0.329,0.318,1,0,0.52,1,1],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":1,"k":[{"t":0,"s":[187.50001117882678,-2.086162520509305e-9],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":51.9,"s":[187.50001117882678,-2.086162520509305e-9],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[491,37.5],[339.5,189],[188,37.5],[339.5,-114],[491,37.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[339.5,180.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[339.5,37.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[468,32.5],[316.5,184],[165,32.5],[316.5,-119],[468,32.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[316.5,175.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[316.5,32.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0,0],[375,0],[375,280],[0,280]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.973,0.976,0.988]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":71,"ty":4,"nm":"Screen","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[187.5,140]},"o":{"a":0,"k":100},"p":{"a":0,"k":[250,250]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Screen Group","bm":0,"it":[{"ty":"rc","hd":false,"nm":"Screen","d":1,"p":{"a":0,"k":[187.5,140]},"r":{"a":0,"k":0},"s":{"a":0,"k":[375,280]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]}],"meta":{"g":"@phase-software/lottie-exporter 0.7.0"},"nm":"","op":120,"v":"5.6.0","w":375} \ No newline at end of file diff --git a/src/assets/lotties/home-banner2.json b/src/assets/lotties/home-banner2.json new file mode 100644 index 00000000..d1f603c7 --- /dev/null +++ b/src/assets/lotties/home-banner2.json @@ -0,0 +1 @@ +{"assets":[{"id":"el-640","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[67.47,10.66]},"o":{"a":0,"k":100},"p":{"a":0,"k":[67.47,10.66]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[129.5,5.5],[134.5,10.5],[129.5,15.5]]}}},{"ty":"st","hd":false,"bm":0,"c":{"a":0,"k":[0.243,0.247,0.271]},"lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":1.511}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 (25) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.776,-0.484],[0,0],[0.865,1.78],[2.212,-0.47],[0,0],[-0.008,2.036],[0,0],[0,0]],"o":[[0,2.043],[0,0],[-2.219,-0.461],[-0.871,1.765],[0,0],[2.732,-0.498],[0,0],[0,0],[0,0]],"v":[[7.28,5.878],[12.056,10.463],[11.323,11.825],[6.423,8.236],[1.523,11.826],[0.806,10.463],[5.552,5.878],[5.552,4.896],[7.28,4.896]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.44,15.619],[0.44,14.271],[12.54,14.271],[12.54,15.619]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[-0.564,0.059],[0,0],[2.314,-0.008],[0,0],[-0.527,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.594,-0.044],[0,0],[-2.688,0.41],[0,0],[0.476,0],[0,0],[0,0],[0,0],[0,0]],"v":[[21.166,5.058],[21.166,6.39],[19.98,6.39],[19.98,10.015],[21.724,9.861],[21.826,11.062],[13.799,11.532],[13.623,10.184],[15.132,10.176],[15.132,6.391],[13.975,6.391],[13.975,5.058]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.394,14.023],[15.394,12.704],[24.433,12.704],[24.433,17.304],[22.792,17.304],[22.792,14.023]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.579,0.021],[0,0],[0,0]],"o":[[0.571,-0.007],[0,0],[0,0],[0,0]],"v":[[16.698,10.148],[18.427,10.097],[18.427,6.39],[16.698,6.39]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[22.792,12.148],[22.792,4.062],[24.432,4.062],[24.432,12.148]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[4.739,-2.439],[0,0],[-0.784,1.575],[0,0],[0,0],[0,0],[-0.045,0.669],[0,0],[0,0]],"o":[[-0.008,3.992],[0,0],[2.197,-1.135],[0,0],[0,0],[0,0],[0.184,-0.645],[0,0],[0,0],[0,0]],"v":[[33.134,5.365],[27.201,15.238],[26.308,13.993],[30.658,9.965],[26.601,10.345],[26.366,8.955],[31.164,8.661],[31.508,6.684],[27.055,6.684],[27.055,5.365]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[33.104,10.565],[33.104,9.232],[35.829,9.232],[35.829,4.062],[37.455,4.062],[37.455,17.304],[35.83,17.304],[35.83,10.565]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[53.92,4.076],[53.92,13.744],[52.28,13.744],[52.28,4.076]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.007,1.904],[0,0],[0,0],[0,0],[-2.102,-0.703],[0,0],[0.586,1.355],[1.56,-0.564]],"o":[[2.146,-0.754],[0,0],[0,0],[0,0],[-0.007,1.845],[0,0],[-1.509,-0.528],[-0.585,1.45],[0,0]],"v":[[42.904,10.624],[46.142,6.098],[46.142,4.808],[47.826,4.808],[47.826,6.098],[51.005,10.39],[50.17,11.679],[46.998,8.742],[43.754,11.913]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[45.16,17.04],[45.16,12.821],[46.8,12.821],[46.8,15.721],[54.286,15.721],[54.286,17.04]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.08,-0.564],[0,0],[0.608,1.15],[1.582,-0.468],[0,0],[0,1.597],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.007,1.45],[0,0],[-1.524,-0.418],[-0.58,1.297],[0,0],[2.073,-0.63],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[60.615,6.889],[63.823,10.331],[63.062,11.591],[59.832,9.137],[56.572,11.927],[55.81,10.668],[58.99,6.888],[58.99,6.815],[56.22,6.815],[56.22,5.526],[58.99,5.526],[58.99,4.003],[60.63,4.003],[60.63,5.526],[63.384,5.526],[63.384,6.816],[60.615,6.816]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.783,0],[-0.007,-1.574],[2.798,0],[-0.015,1.574]],"o":[[-0.015,-1.575],[2.798,0],[-0.007,1.576],[-2.783,0],[0,0]],"v":[[57.964,14.799],[62.461,12.338],[66.987,14.798],[62.461,17.289],[57.964,14.799]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.838,0],[0,0.783],[1.875,0.007],[-0.007,-0.791]],"o":[[-0.007,0.784],[1.875,0],[0,-0.791],[-1.838,0.007],[0,0]],"v":[[59.575,14.799],[62.461,16.029],[65.361,14.799],[62.461,13.583],[59.575,14.799]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[62.988,9.013],[62.988,7.694],[65.318,7.694],[65.318,4.062],[66.943,4.062],[66.943,12.074],[65.317,12.074],[65.317,9.013]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[79.19,4.062],[79.19,9.335],[81.227,9.335],[81.227,10.683],[79.19,10.683],[79.19,17.303],[77.58,17.303],[77.58,4.063]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[68.746,7.402],[68.746,6.097],[71.881,6.097],[71.881,4.252],[73.507,4.252],[73.507,6.098],[76.554,6.098],[76.554,7.4]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.933,-0.008],[-0.007,-1.831],[1.905,0],[-0.014,1.824]],"o":[[-0.014,-1.831],[1.904,-0.008],[-0.007,1.824],[-1.933,0],[0,0]],"v":[[69.361,11.386],[72.701,8.266],[76.026,11.386],[72.701,14.491],[69.361,11.386]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.04,0.007],[-0.015,1.076],[1.018,0],[-0.007,-1.077]],"o":[[-0.007,1.076],[1.018,0.007],[-0.015,-1.077],[-1.04,0],[0,0]],"v":[[70.914,11.386],[72.701,13.144],[74.474,11.386],[72.701,9.599],[70.914,11.386]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[92.872,4.062],[92.872,17.318],[91.246,17.318],[91.246,10.272],[88.976,10.272],[88.976,8.94],[91.246,8.94],[91.246,4.062]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.78,0.322],[0,0],[2.277,-0.007],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.97,-0.008],[0,0],[-1.97,0.344],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[82.222,6.537],[82.222,5.22],[88.214,5.22],[88.214,10.068],[83.878,10.068],[83.878,12.852],[89.21,12.456],[89.342,13.789],[83.322,14.214],[82.267,14.214],[82.267,8.749],[86.617,8.749],[86.617,6.537]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[108.678,4.062],[108.678,9.232],[110.641,9.232],[110.641,10.595],[108.678,10.595],[108.678,17.275],[107.052,17.275],[107.052,4.061]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.323,3.018],[0,0],[0,0],[0,0],[4.401,-2.168]],"o":[[3.223,-1.611],[0,0],[0,0],[0,0],[-0.008,3.89],[0,0]],"v":[[98.233,13.656],[103.522,6.786],[98.952,6.786],[98.952,5.438],[105.177,5.438],[99.157,14.916]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[122.33,4.062],[122.33,17.304],[120.689,17.304],[120.689,4.062]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (25)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.293,3.011],[0,0],[0,0],[0,0],[4.636,-2.205]],"o":[[3.472,-1.648],[0,0],[0,0],[0,0],[0,3.94],[0,0]],"v":[[111.358,13.656],[116.72,6.756],[112.032,6.756],[112.032,5.469],[118.375,5.469],[112.208,14.961]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.243,0.247,0.271]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]}]},{"id":"el-622","layers":[{"ddd":0,"ind":5,"ty":4,"nm":"Layer 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[121.204,26.126]},"o":{"a":0,"k":100},"p":{"a":0,"k":[121.204,26.126]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 (5) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (5)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[16.586,38.549],[16.586,40.74],[2.793,40.74],[2.793,33.307],[5.543,33.307],[5.543,38.549]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (5)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.58,45.209],[0.58,42.975],[18.477,42.975],[18.477,45.209],[10.807,45.209],[10.807,51.977],[8.057,51.977],[8.057,45.209]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (5)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0.495,-2.739],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.012,1.686],[0,0],[0,0]],"o":[[0,0],[-0.01,1.826],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.506,-2.514],[0,0],[0,0],[0,0]],"v":[[35.342,33.565],[35.342,35.326],[34.837,41.879],[37.426,41.879],[37.426,44.092],[29.799,44.092],[29.799,51.998],[27.049,51.998],[27.049,44.092],[19.594,44.092],[19.594,41.879],[32.054,41.879],[32.614,35.756],[21.634,35.756],[21.634,33.565]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (5)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[56.805,39.838],[56.805,42.072],[54.033,42.072],[54.033,51.934],[51.283,51.934],[51.283,32.426],[54.033,32.426],[54.033,39.838]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (5)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[-2.64,0.526],[0,0],[2.879,0]],"o":[[0,0],[0,0],[0,0],[2.692,-0.039],[0,0],[-3.276,0.666],[0,0]],"v":[[39.23,47.164],[39.23,34.294],[41.958,34.294],[41.958,44.898],[49.972,44.048],[50.251,46.326],[40.927,47.164]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.329,0.318,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 (57) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.022,-2.342],[4.275,0.01],[-0.011,2.309],[-4.242,0]],"o":[[4.275,0],[-0.021,2.31],[-4.243,0.01],[-0.011,-2.342],[0,0]],"v":[[9.389,12.607],[16.371,16.303],[9.389,19.977],[2.428,16.303],[9.388,12.607]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.623,11.361],[0.623,9.148],[7.283,9.148],[7.283,5.732],[9.99,5.732],[9.99,9.148],[18.37,9.148],[18.37,11.361]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0.569,-2.009],[0,0],[-0.021,1.332]],"o":[[0,0],[0,0],[0,0],[0.01,1.557],[0,0],[0.44,-1.773],[0,0]],"v":[[2.621,3.455],[2.621,1.307],[16.264,1.307],[16.264,2.897],[15.705,8.139],[13.02,7.88],[13.535,3.454]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.697,0],[0,1.052],[2.696,-0.01],[-0.01,-1.085]],"o":[[-0.01,1.052],[2.697,0],[0,-1.085],[-2.697,-0.01],[0,0]],"v":[[5.156,16.303],[9.389,17.893],[13.643,16.303],[9.389,14.648],[5.156,16.303]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[37.469,11.297],[37.469,13.51],[33.279,13.51],[33.279,19.977],[30.486,19.977],[30.486,13.51],[26.49,13.51],[26.49,19.977],[23.676,19.977],[23.676,13.51],[19.572,13.51],[19.572,11.297]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-4.2,0.011],[0,-2.696],[4.2,0.011],[-0.01,2.632]],"o":[[-0.01,-2.697],[4.2,0.011],[0,2.632],[-4.2,0.01],[0,0]],"v":[[21.377,5.497],[28.467,1.07],[35.6,5.496],[28.467,9.793],[21.377,5.496]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.621,-0.011],[0,1.375],[2.642,0.01],[-0.01,-1.439]],"o":[[-0.01,1.374],[2.642,-0.011],[0,-1.44],[-2.621,0.01],[0,0]],"v":[[24.191,5.496],[28.467,7.644],[32.764,5.495],[28.467,3.261],[24.191,5.495]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[54.033,0.425],[54.033,8.073],[56.913,8.073],[56.913,10.329],[54.033,10.329],[54.033,19.976],[51.326,19.976],[51.326,0.426]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[38.5,5.539],[38.5,3.348],[42.926,3.348],[42.926,0.727],[45.676,0.727],[45.676,3.347],[49.994,3.347],[49.994,5.54]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.89,-0.011],[0,-2.729],[2.847,-0.011],[-0.011,2.728]],"o":[[-0.01,-2.729],[2.846,-0.011],[0,2.729],[-2.89,-0.01],[0,0]],"v":[[39.295,11.297],[44.301,6.635],[49.285,11.297],[44.301,15.959],[39.295,11.297]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.386,0.011],[0,1.515],[1.364,0.022],[0,-1.504]],"o":[[0,1.515],[1.364,0.01],[0,-1.504],[-1.386,0.022],[0,0]],"v":[[41.916,11.297],[44.301,13.703],[46.664,11.297],[44.301,8.847],[41.916,11.297]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0.784,-4.146],[0,0],[-0.01,2.299],[0,0],[0,0]],"o":[[0,0],[-0.01,2.449],[0,0],[0.751,-3.695],[0,0],[0,0],[0,0]],"v":[[73.734,2.123],[73.734,3.971],[72.94,13.316],[70.19,13.037],[70.984,4.293],[59.47,4.293],[59.47,2.123]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[57.621,17.592],[57.621,15.357],[64.002,15.357],[64.002,8.633],[66.731,8.633],[66.731,15.357],[75.453,15.357],[75.453,17.592]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[98.076,0.447],[98.076,11.275],[95.326,11.275],[95.326,0.447]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,2.417],[0,0],[0,0],[0,0],[-3.201,-0.881],[0,0],[0.892,1.75],[2.342,-0.709]],"o":[[3.265,-0.988],[0,0],[0,0],[0,0],[-0.021,2.32],[0,0],[-2.257,-0.666],[-0.891,1.89],[0,0]],"v":[[81.641,8.847],[86.346,3.004],[86.346,1.114],[89.203,1.114],[89.203,3.004],[93.801,8.504],[92.491,10.674],[87.785,6.904],[82.951,10.996]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[84.584,19.762],[84.584,17.57],[87.119,17.57],[87.119,14.326],[84.756,14.326],[84.756,12.156],[98.184,12.156],[98.184,14.326],[95.842,14.326],[95.842,17.57],[98.356,17.57],[98.356,19.762]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[89.826,17.57],[93.135,17.57],[93.135,14.326],[89.826,14.326]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[118.551,10.416],[118.551,12.607],[100.719,12.607],[100.719,10.416]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-4.308,-0.021],[-0.011,-2.492],[4.275,0],[0,2.503]],"o":[[0,-2.492],[4.275,-0.021],[-0.011,2.503],[-4.308,0],[0,0]],"v":[[102.502,5.023],[109.635,1.027],[116.746,5.023],[109.635,9.063],[102.502,5.023]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[102.867,19.633],[102.867,13.918],[105.617,13.918],[105.617,17.441],[116.531,17.441],[116.531,19.633]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.718,0],[0,1.214],[2.696,0.021],[-0.021,-1.181]],"o":[[-0.021,1.214],[2.696,0],[0,-1.181],[-2.718,0.021],[0,0]],"v":[[105.359,5.023],[109.635,6.85],[113.91,5.023],[109.635,3.176],[105.359,5.023]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.297,-1.171],[0,0],[-0.386,2.686],[0,0],[0,0],[0,0],[0.097,-0.604],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.225,3.094],[0,0],[4.49,-1.171],[0,0],[0,0],[0,0],[0.004,0.611],[0,0],[0,0],[0,0]],"v":[[141.281,0.447],[141.281,11.705],[138.553,11.705],[138.553,9.793],[134.148,9.793],[134.148,7.602],[138.553,7.602],[138.553,5.732],[134.353,5.732],[126.049,12.135],[124.975,9.965],[132.064,3.949],[126.027,3.949],[126.027,1.758],[135.051,1.758],[134.911,3.584],[138.553,3.584],[138.553,0.447]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-4.017,0.011],[-0.011,-2.418],[3.964,0],[-0.011,2.449]],"o":[[-0.011,-2.418],[3.964,0.011],[-0.011,2.449],[-4.017,0],[0,0]],"v":[[128.09,15.895],[134.771,11.941],[141.432,15.895],[134.771,19.891],[128.09,15.895]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.481,0],[-0.011,1.213],[2.428,-0.022],[0,-1.204]],"o":[[0,1.213],[2.428,0],[-0.011,-1.204],[-2.481,-0.022],[0,0]],"v":[[130.818,15.895],[134.771,17.721],[138.682,15.895],[134.771,14.09],[130.818,15.895]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[160.295,0.425],[160.295,12.242],[157.566,12.242],[157.566,8.396],[155.031,8.396],[155.031,6.162],[157.566,6.162],[157.566,0.426]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[143.859,4.315],[143.859,2.122],[148.285,2.122],[148.285,0.253],[150.992,0.253],[150.992,2.123],[155.375,2.123],[155.375,4.314]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.74,0],[0,-2.042],[2.739,-0.011],[0,2.138]],"o":[[0,-2.041],[2.75,0],[0,2.138],[-2.74,-0.01],[0,0]],"v":[[144.934,8.461],[149.639,4.959],[154.322,8.461],[149.639,12.006],[144.934,8.461]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[147.146,19.761],[147.146,13.081],[160.295,13.081],[160.295,19.761]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.279,-0.01],[0,0.988],[1.246,-0.01],[-0.021,-0.924]],"o":[[-0.021,0.988],[1.246,-0.01],[0,-0.924],[-1.279,-0.01],[0,0]],"v":[[147.576,8.461],[149.639,9.986],[151.701,8.461],[149.639,7.021],[147.576,8.461]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[149.896,17.571],[157.609,17.571],[157.609,15.228],[149.896,15.228]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[172.799,2.037],[172.799,11.426],[163.41,11.426],[163.41,2.037]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[165.666,19.633],[165.666,13.295],[168.395,13.295],[168.395,17.441],[179.051,17.441],[179.051,19.633]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[166.117,9.277],[170.092,9.277],[170.092,4.23],[166.117,4.23]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[175.592,14.691],[175.592,0.426],[178.342,0.426],[178.342,6.055],[180.984,6.055],[180.984,8.31],[178.342,8.31],[178.342,14.69]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-1.58,-1.075],[0,1.45],[0,0],[0,0],[0,0],[-2.61,-0.806],[0,0],[0.677,1.514],[1.751,-0.687],[0.633,1.504],[1.783,-0.633],[0,0],[-0.01,1.901],[0,0],[0,0]],"o":[[0,1.568],[1.622,-1.15],[0,0],[0,0],[0,0],[-0.022,2.04],[0,0],[-1.869,-0.633],[-0.645,1.514],[-1.837,-0.666],[-0.699,1.45],[0,0],[2.567,-0.88],[0,0],[0,0],[0,0]],"v":[[194.025,12.973],[196.271,17.248],[198.602,12.973],[198.602,12.307],[201.309,12.307],[201.309,12.973],[204.982,17.699],[203.65,19.697],[199.88,16.357],[196.346,19.869],[192.726,16.432],[189.041,19.697],[187.688,17.699],[191.361,12.973],[191.361,12.307],[194.025,12.307]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-3.05,0],[-0.011,-2.772],[3.04,0.01],[0,2.717]],"o":[[0,-2.772],[3.04,0],[-0.011,2.717],[-3.05,0.01],[0,0]],"v":[[187.215,6.141],[192.564,1.436],[197.914,6.141],[192.564,10.803],[187.215,6.141]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.568,0.011],[-0.011,1.471],[1.526,0],[-0.021,-1.515]],"o":[[-0.021,1.471],[1.526,0.011],[-0.011,-1.515],[-1.568,0],[0,0]],"v":[[189.9,6.141],[192.564,8.525],[195.207,6.141],[192.564,3.734],[189.9,6.141]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[200.535,11.491],[200.535,0.446],[203.285,0.446],[203.285,11.49]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[221.354,0.425],[221.354,7.687],[224.232,7.687],[224.232,9.921],[221.354,9.921],[221.354,20.02],[218.604,20.02],[218.604,0.425]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.6,0.451],[0,0],[3.449,0.011]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[2.836,-0.022],[0,0],[-3.04,0.516],[0,0]],"v":[[206.701,15.271],[206.701,2.23],[215.875,2.23],[215.875,4.443],[209.43,4.443],[209.43,13.016],[217.207,12.393],[217.508,14.691],[208.355,15.271]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[235.039,2.015],[235.039,3.497],[238.691,3.497],[238.691,0.448],[241.42,0.448],[241.42,14.67],[238.691,14.67],[238.691,9.879],[235.039,9.879],[235.039,11.533],[225.758,11.533],[225.758,2.016]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[228.4,19.633],[228.4,13.316],[231.172,13.316],[231.172,17.441],[241.828,17.441],[241.828,19.633]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[228.486,9.406],[232.354,9.406],[232.354,4.186],[228.486,4.186]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[235.039,7.709],[238.691,7.709],[238.691,5.711],[235.039,5.711]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[78.117,32.426],[78.117,39.924],[80.889,39.924],[80.889,42.18],[78.117,42.18],[78.117,51.934],[75.367,51.934],[75.367,32.426]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.515,4.361],[0,0],[0,0],[0,0],[6.574,-3.233]],"o":[[4.63,-2.321],[0,0],[0,0],[0,0],[-0.022,5.844],[0,0]],"v":[[62.477,46.456],[70.114,36.658],[63.594,36.658],[63.594,34.424],[72.897,34.424],[64.023,48.56]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[97.561,37.324],[97.561,39.516],[83.961,39.516],[83.961,32.726],[86.689,32.726],[86.689,37.324]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[81.705,43.426],[81.705,41.19],[99.58,41.19],[99.58,43.425]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-4.276,0.01],[-0.021,-2.31],[4.243,0],[0,2.33]],"o":[[0,-2.31],[4.243,0.01],[-0.021,2.331],[-4.276,0],[0,0]],"v":[[83.746,48.281],[90.6,44.651],[97.41,48.281],[90.6,51.912],[83.746,48.282]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.706,-0.011],[-0.011,1.021],[2.653,0.022],[-0.012,-1.042]],"o":[[-0.01,1.02],[2.654,-0.01],[-0.01,-1.042],[-2.707,0.022],[0,0]],"v":[[86.539,48.282],[90.599,49.829],[94.66,48.282],[90.6,46.778],[86.54,48.282]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[110.151,35.413],[110.151,37.583],[100.698,37.583],[100.698,35.413],[104.093,35.413],[104.093,32.963],[106.8,32.963],[106.8,35.413]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.492,0.01],[-0.011,-2.717],[2.503,0],[0,2.729]],"o":[[0,-2.717],[2.503,0.01],[-0.011,2.729],[-2.492,0],[0,0]],"v":[[101.149,43.104],[105.468,38.464],[109.765,43.104],[105.468,47.767],[101.149,43.104]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-1.139,0],[-0.01,1.494],[1.095,0],[0,-1.471]],"o":[[0,1.494],[1.095,0],[-0.01,-1.471],[-1.139,0],[0,0]],"v":[[103.556,43.104],[105.468,45.446],[107.358,43.104],[105.468,40.741],[103.556,43.104]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[110.882,51.14],[110.882,32.812],[113.439,32.812],[113.439,40.375],[115.028,40.375],[115.028,32.425],[117.628,32.425],[117.628,51.977],[115.028,51.977],[115.028,42.567],[113.439,42.567],[113.439,51.139]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,1.718],[-4.253,0.011],[-0.011,-3.169],[1.472,-0.914],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[-1.515,-0.914],[0,-3.17],[4.233,0.01],[-0.011,1.686],[0,0],[0,0]],"v":[[137.63,47.444],[137.63,49.7],[119.733,49.7],[119.733,47.444],[123.73,47.444],[123.73,42.654],[121.302,38.636],[128.649,33.372],[136.019,38.636],[133.655,42.6],[133.655,47.444]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-2.803,0],[-0.011,1.912],[2.761,-0.011],[0,-1.966]],"o":[[0,1.912],[2.761,0],[-0.011,-1.966],[-2.803,-0.01],[0,0]],"v":[[124.009,38.636],[128.649,41.729],[133.312,38.636],[128.649,35.542],[124.009,38.636]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (57)","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0.785,0],[0.687,0.129]],"o":[[0,0],[0,0],[-0.698,0.14],[-0.785,0],[0,0]],"v":[[126.437,47.444],[130.884,47.444],[130.884,43.642],[128.649,43.857],[126.437,43.652]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.133,0.133,0.141]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]}]}],"ddd":0,"fr":30,"h":280,"ip":0,"layers":[{"ddd":0,"ind":4,"ty":0,"nm":"Frame 117127572ㄹ5","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[70,10.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[90,113.36]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"h":21,"refId":"el-640","w":140},{"ddd":0,"ind":8,"ty":0,"nm":"공유하고 싶은 경험만 있다면 누구나 가능해요","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[121,26]},"o":{"a":0,"k":100},"p":{"a":0,"k":[141,52.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"h":52,"refId":"el-622","w":242},{"ddd":0,"ind":9,"ty":4,"nm":"star1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[206.501,213.369]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":82.8,"s":[360],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 3 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 (2) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (2)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[4.194,-4.412],[0.372,-1.015],[1.28,0.628],[1.205,-0.001],[0,-4.366],[-0.518,-1.051],[0.256,-0.615],[0.729,-0.245],[-4.567,-4.026],[-1.055,-0.332],[-0.269,-0.608],[0.323,-0.697],[-5.777,0.001],[-1.043,0.483],[-0.608,-0.269],[-0.23,-0.732],[-4.119,4.482],[-0.347,1.117],[-0.605,0.271],[-0.696,-0.318],[-2.232,1.33],[2.234,3.751],[-0.246,0.562],[-0.65,0.152],[4.162,4.441],[1.255,0.414],[0.261,0.597],[-0.31,0.679],[6.059,-0.574],[1.006,-0.599],[0.534,0.209],[0.185,0.601]],"o":[[-1.724,-5.838],[-0.745,0.783],[-0.491,1.341],[-1.083,-0.529],[-4.366,0],[0,1.254],[0.34,0.69],[-0.257,0.614],[-5.77,1.943],[0.83,0.731],[0.732,0.229],[0.269,0.608],[-2.431,5.24],[1.149,0.001],[0.696,-0.324],[0.608,0.269],[1.822,5.808],[0.791,-0.861],[0.226,-0.73],[0.605,-0.271],[2.362,1.084],[3.752,-2.233],[-0.307,-0.531],[0.216,-0.508],[5.927,-1.384],[-0.904,-0.964],[-0.708,-0.234],[-0.26,-0.596],[2.532,-5.534],[-1.166,0.11],[-0.586,0.349],[-0.588,-0.224],[0,0]],"v":[[213.848,190.669],[200.534,187.46],[198.841,190.186],[195.42,191.559],[191.943,190.756],[184.038,198.661],[184.847,202.15],[184.882,204.222],[183.386,205.656],[180.68,219.085],[183.539,220.697],[185.061,222.095],[185.072,224.163],[192.245,235.396],[195.573,234.664],[197.64,234.674],[199.039,236.196],[212.407,239.18],[214.136,236.176],[215.524,234.654],[217.584,234.633],[224.922,234.239],[227.671,223.403],[227.573,221.664],[228.893,220.531],[232.864,207.426],[229.575,205.325],[228.101,203.948],[228.094,201.932],[220.159,190.772],[216.861,191.849],[215.072,191.977],[213.848,190.669]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (2)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.559,0.333],[-0.093,-6.854],[0.549,-1.2],[-0.795,-0.262],[5.117,-4.561],[0.488,-0.291],[0.889,-0.21],[-0.307,-0.515],[4.227,-2.515],[2.661,1.22],[0.254,-0.82],[4.651,5.041],[0.394,1.254],[0.781,-0.363],[-0.607,6.829],[-0.434,0.935],[0.822,0.258],[-5.053,4.638],[-1.179,0.397],[0.381,0.775],[-6.595,-0.002],[-1.182,-0.58],[-0.286,0.782],[-4.395,-5.261],[-0.242,-0.406],[-0.207,-0.697]],"o":[[0.184,0.623],[5.89,-3.508],[0.018,1.32],[-0.348,0.762],[6.509,2.151],[-0.424,0.378],[-0.786,0.467],[-0.583,0.136],[2.516,4.226],[-2.514,1.498],[-0.78,-0.357],[-2.04,6.549],[-0.891,-0.966],[-0.257,-0.822],[-6.218,2.889],[0.091,-1.027],[0.363,-0.781],[-6.543,-2.057],[0.917,-0.841],[0.819,-0.275],[-2.911,-5.918],[1.406,0],[0.748,0.367],[2.358,-6.437],[0.303,0.363],[0.389,0.653],[0,0]],"v":[[214.807,190.385],[216.35,190.99],[229.811,198.52],[229.004,202.347],[229.889,204.375],[233.02,219.478],[231.648,220.483],[229.121,221.505],[228.531,222.891],[225.433,235.098],[217.168,235.543],[215.091,236.473],[200.036,239.866],[198.084,236.495],[195.994,235.571],[183.371,226.705],[184.165,223.741],[183.24,221.651],[179.888,206.587],[183.067,204.708],[183.95,202.591],[191.943,189.756],[195.86,190.661],[197.902,189.842],[213.097,187.196],[213.916,188.352],[214.807,190.385]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[181.06333210881155,229.40161895755392]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0.17]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[206.50000143633156,187.198288879985]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[206.501,213.368]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,-0.001]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 4 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0.184,0.623],[0.38,0.638],[3.349,-5.981],[0.163,-0.444],[0.748,0.367],[1.358,-0.001],[-2.911,-5.918],[0.819,-0.275],[-5.147,-4.534],[-1.187,-0.373],[0.363,-0.781],[-6.829,0.607],[-0.935,0.434],[-0.257,-0.822],[-4.64,5.05],[-0.391,1.257],[-0.78,-0.357],[-2.514,1.498],[2.516,4.226],[-0.583,0.136],[-0.786,0.467],[5.981,3.349],[0.539,0.178],[-0.348,0.762],[6.825,-0.646],[1.134,-0.675]],"o":[[-0.559,0.333],[-0.212,-0.712],[-3.505,-5.891],[-0.231,0.413],[-0.286,0.782],[-1.22,-0.596],[-6.595,-0.002],[0.381,0.775],[-6.5,2.191],[0.934,0.822],[0.822,0.258],[-2.889,6.217],[1.027,-0.091],[0.781,-0.363],[2.054,6.543],[0.891,-0.969],[0.254,-0.82],[2.661,1.22],[4.227,-2.515],[-0.307,-0.515],[0.889,-0.21],[5.891,-3.505],[-0.496,-0.278],[-0.795,-0.262],[2.853,-6.233],[-1.314,0.124],[0,0]],"v":[[216.35,190.99],[214.807,190.385],[213.916,188.352],[198.493,188.555],[197.902,189.842],[195.86,190.661],[191.943,189.756],[183.95,202.591],[183.067,204.708],[180.023,219.837],[183.24,221.651],[184.165,223.741],[193.03,236.365],[195.994,235.571],[198.084,236.495],[213.145,239.854],[215.091,236.473],[217.168,235.543],[225.433,235.098],[228.531,222.891],[229.121,221.505],[231.648,220.483],[231.445,205.06],[229.889,204.375],[229.004,202.347],[220.068,189.775],[216.35,190.99]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.435,0.42,1]},"r":1,"o":{"a":0,"k":92}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[206.5,213.37]},"o":{"a":0,"k":100},"p":{"a":0,"k":[-0.001,0.001]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":14,"ty":4,"nm":"Layer 5","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[165.37,189.037]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":12.3,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":37.5,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[139.406,215.216],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":38.4,"s":[164.367,187.038],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-0.583],[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0]],"o":[[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0],[0,0],[0,-0.583],[0,0]],"v":[[187.793,164.328],[250.98,164.328],[252.036,165.383],[252.036,165.383],[250.98,166.439],[187.793,166.439],[186.737,165.383],[186.737,165.383],[187.793,164.328]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[245.67433684226214,165.3093311347346]},"g":{"p":2,"k":{"a":0,"k":[0,0.933,0.933,1,1,0.882,0.878,1,0,1,1,0]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[186.736998597057,165.38400256454094]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[186.737,164.328]},"o":{"a":0,"k":100},"p":{"a":0,"k":[186.737,164.328]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":16,"ty":4,"nm":"Group 5","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":10.8,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":21.6,"s":[50],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[4.861,243.541]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 6 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-0.409],[0,0],[0.409,0],[0,0],[0,0.409],[0,0],[-0.409,0]],"o":[[0,0],[0.409,0],[0,0],[0,0.409],[0,0],[-0.409,0],[0,0],[0,-0.409],[0,0]],"v":[[26.735,203.461],[71.081,203.461],[71.822,204.202],[71.822,204.202],[71.081,204.943],[26.735,204.943],[25.994,204.202],[25.994,204.202],[26.735,203.461]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[104.30932593088706,196.79933671622064]},"g":{"p":2,"k":{"a":0,"k":[0,0.933,0.933,1,1,0.576,0.569,1,0,1,1,0.45]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[25.993990751443846,204.20199599946645]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[25.994,203.461]},"o":{"a":0,"k":100},"p":{"a":0,"k":[25.994,203.461]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[10.998,220.802]},"o":{"a":0,"k":100},"p":{"a":0,"k":[-2.758,3.264]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 15 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.969,0],[0,0.969],[-0.969,0],[0,-0.969]],"o":[[0,0.969],[-0.969,0],[0,-0.969],[0.969,0],[0,0]],"v":[[31.51,197.755],[29.755,199.51],[28,197.755],[29.755,196],[31.51,197.755]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[29.755,197.755]},"o":{"a":0,"k":100},"p":{"a":0,"k":[15.999,-19.783]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":21,"ty":4,"nm":"circle","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[311.5,212.5]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":48,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":60.9,"s":[50],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[311.5,212.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.381,0],[0,1.381],[-1.381,0],[0,-1.381]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0],[0,0]],"v":[[314,212.5],[311.5,215],[309,212.5],[311.5,210],[314,212.5]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":23,"ty":4,"nm":"white","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"white","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[420,32.5],[268.5,184],[117,32.5],[268.5,-119],[420,32.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[268.5,175.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[268.5,32.5]}}]},{"ddd":0,"ind":24,"ty":4,"nm":"line","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[268.5,84.037]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":10.2,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":33.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[256.5,101.037],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":33.6,"s":[268.5,84.037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-0.583],[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0]],"o":[[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0],[0,0],[0,-0.583],[0,0]],"v":[[294.793,236.328],[357.98,236.328],[359.036,237.383],[359.036,237.383],[357.98,238.439],[294.793,238.439],[293.737,237.383],[293.737,237.383],[294.793,236.328]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[359.1203238096947,237.46733608097176]},"g":{"p":2,"k":{"a":0,"k":[0,0.933,0.933,1,1,0.576,0.569,1,0,1,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[293.73699889722417,237.38400274205353]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[293.737,236.328]},"o":{"a":0,"k":100},"p":{"a":0,"k":[293.737,236.328]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":26,"ty":4,"nm":"circle","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[300.499,226.5]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":36.9,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":53.7,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[300.499,226.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.381,0],[0,1.381],[-1.381,0],[0,-1.381]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0],[0,0]],"v":[[302.999,226.5],[300.499,229],[297.999,226.5],[300.499,224],[302.999,226.5]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":28,"ty":4,"nm":"lili","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[107.737,257.328]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":12,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":27.3,"s":[80],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[107.737,257.328]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"lili","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-0.583],[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0]],"o":[[0,0],[0.583,0],[0,0],[0,0.583],[0,0],[-0.583,0],[0,0],[0,-0.583],[0,0]],"v":[[108.793,257.328],[171.98,257.328],[173.036,258.384],[173.036,258.384],[171.98,259.439],[108.793,259.439],[107.737,258.384],[107.737,258.384],[108.793,257.328]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[173.12034009939043,258.46733608229556]},"g":{"p":2,"k":{"a":0,"k":[0,0.933,0.933,1,1,0.576,0.569,1,0,1,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":12,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":27.3,"s":[75],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"s":{"a":0,"k":[107.73699950629775,258.3840027429502]}}]},{"ddd":0,"ind":29,"ty":4,"nm":"circir","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":28.8,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":39,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"circir","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.105,0],[0,1.105],[-1.105,0],[0,-1.105]],"o":[[0,1.105],[-1.105,0],[0,-1.105],[1.105,0],[0,0]],"v":[[121,241],[119,243],[117,241],[119,239],[121,241]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}}]},{"ddd":0,"ind":30,"ty":4,"nm":"white1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[108,32.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[108,32.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[202,32.5],[50.5,184],[-101,32.5],[50.5,-119],[202,32.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[50.5,175.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[50.5,32.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[317,32.5],[165.5,184],[14,32.5],[165.5,-119],[317,32.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[165.5,175.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[165.5,32.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":33,"ty":4,"nm":"star3","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[103.4,185.401]},"o":{"a":0,"k":100},"p":{"a":0,"k":[103.4,185.401]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":106.8,"s":[360],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0],[-0.776,-1.197],[0,0],[0,0],[0.297,-1.395],[0,0],[0,0],[1.196,-0.776],[0,0],[0,0],[1.394,0.297],[0,0],[0,0],[0.776,1.197],[0,0],[0,0],[-0.297,1.395],[0,0],[0,0],[-1.197,0.776],[0,0],[0,0],[-1.394,-0.297]],"o":[[0,0],[0,0],[-0.186,-1.414],[0,0],[0,0],[0.868,-1.131],[0,0],[0,0],[1.413,-0.187],[0,0],[0,0],[1.131,0.868],[0,0],[0,0],[0.186,1.413],[0,0],[0,0],[-0.868,1.131],[0,0],[0,0],[-1.414,0.187],[0,0],[0,0],[-1.131,-0.868],[0,0]],"v":[[97.092,182.054],[99.945,182.662],[99.564,179.77],[102.013,178.867],[103.601,181.314],[105.376,179],[107.746,180.093],[107.138,182.946],[110.031,182.565],[110.934,185.014],[108.486,186.602],[110.801,188.377],[109.708,190.747],[106.855,190.139],[107.236,193.032],[104.786,193.934],[103.199,191.487],[101.423,193.801],[99.053,192.708],[99.661,189.856],[96.769,190.236],[95.866,187.787],[98.313,186.199],[96,184.424],[97.093,182.054]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,-1]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":35,"ty":4,"nm":"star2","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[368.792,200.792]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":43.8,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[368.792,200.792]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":96,"s":[360],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0],[-1.483,-2.286],[0,0],[0,0],[0.568,-2.665],[0,0],[0,0],[2.287,-1.483],[0,0],[0,0],[2.665,0.568],[0,0],[0,0],[1.483,2.286],[0,0],[0,0],[-0.568,2.665],[0,0],[0,0],[-2.287,1.483],[0,0],[0,0],[-2.666,-0.568]],"o":[[0,0],[0,0],[-0.356,-2.702],[0,0],[0,0],[1.659,-2.162],[0,0],[0,0],[2.702,-0.356],[0,0],[0,0],[2.162,1.659],[0,0],[0,0],[0.356,2.702],[0,0],[0,0],[-1.659,2.162],[0,0],[0,0],[-2.702,0.356],[0,0],[0,0],[-2.162,-1.659],[0,0]],"v":[[356.734,192.483],[362.187,193.645],[361.459,188.116],[366.141,186.39],[369.176,191.068],[372.57,186.644],[377.1,188.734],[375.939,194.187],[381.467,193.459],[383.193,198.141],[378.515,201.176],[382.939,204.57],[380.85,209.1],[375.396,207.939],[376.124,213.467],[371.442,215.194],[368.407,210.515],[365.013,214.939],[360.483,212.85],[361.645,207.396],[356.116,208.124],[354.39,203.443],[359.068,200.407],[354.644,197.013],[356.734,192.483]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.886,0.882,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":37,"ty":4,"nm":"circircir","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[194.499,150.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[194.499,150.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"cicicici Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"cicicici","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.381,0],[0,1.381],[-1.381,0],[0,-1.381]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0],[0,0]],"v":[[196.999,150.5],[194.499,153],[191.999,150.5],[194.499,148],[196.999,150.5]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":41.4,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":55.2,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":39,"ty":4,"nm":"white","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[94.5,23.5]},"o":{"a":0,"k":100},"p":{"a":0,"k":[94.5,23.5]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[246,23.5],[94.5,175],[-57,23.5],[94.5,-128],[246,23.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[94.5,166.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[94.5,23.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":41,"ty":4,"nm":"circle1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[350,159]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":37.5,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":72.3,"s":[75],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":0,"k":[350,159]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.209,0],[0,2.209],[-2.209,0],[0,-2.209]],"o":[[0,2.209],[-2.209,0],[0,-2.209],[2.209,0],[0,0]],"v":[[354,159],[350,163],[346,159],[350,155],[354,159]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":97.2,"s":[50],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":43,"ty":4,"nm":"linecircle","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[273.543,244.543]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[262.543,257.543],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":16.5,"s":[273.543,244.543],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 25 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[35.8,0],[0,35.8],[-35.8,0],[0,-35.8]],"o":[[0,35.8],[-35.8,0],[0,-35.8],[35.8,0],[0,0]],"v":[[338.365,244.543],[273.543,309.365],[208.721,244.543],[273.543,179.721],[338.365,244.543]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[273.6263325902639,309.4483226228316]},"g":{"p":2,"k":{"a":0,"k":[0.5,1,1,1,1,1,1,1,0.5,0.14,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":18},"r":1,"s":{"a":0,"k":[273.5429992577774,179.72099304373438]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[273.543,244.543]},"o":{"a":0,"k":100},"p":{"a":0,"k":[273.543,244.543]},"r":{"a":0,"k":24},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[273.543,244.543]},"o":{"a":0,"k":100},"p":{"a":0,"k":[273.543,244.543]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[34.696,0],[0,34.696],[-34.696,0],[0,-34.696]],"o":[[0,34.696],[-34.696,0],[0,-34.696],[34.696,0],[0,0]],"v":[[336.365,244.543],[273.543,307.365],[210.721,244.543],[273.543,181.721],[336.365,244.543]]}}},{"ty":"gs","hd":false,"bm":0,"o":{"a":0,"k":100},"e":{"a":1,"k":[{"t":0,"s":[271.5133262594674,289.2793410688357],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":120,"s":[271.5133262594674,289.2793410688357],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"g":{"p":2,"k":{"a":1,"k":[{"t":0,"s":[0,1,1,1,1,1,1,1,0,1,1,0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":120,"s":[0,1,1,1,0.81,1,1,1,0,1,0.81,0],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":1,"k":[{"t":0,"s":[273.5429995378976,179.72099289405037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":120,"s":[273.5429995378976,179.72099289405037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"lc":1,"lj":1,"ml":4,"w":{"a":0,"k":4}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[273.543,244.543]},"o":{"a":0,"k":100},"p":{"a":0,"k":[273.543,244.543]},"r":{"a":0,"k":24},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":47,"ty":4,"nm":"bar3","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[137.596,322.886]},"o":{"a":1,"k":[{"t":0,"s":[50],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":18.9,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[115.596,346.886],"i":{"x":0.88,"y":0.77},"o":{"x":0.5,"y":0},"ti":[0,0],"to":[0,0]},{"t":18.9,"s":[137.596,322.886],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-25.256],[0,0],[25.256,0],[0,0],[0,25.256],[0,0],[-25.256,0]],"o":[[0,0],[25.256,0],[0,0],[0,25.256],[0,0],[-25.256,0],[0,0],[0,-25.256],[0,0]],"v":[[363.107,178.201],[722.809,178.201],[768.539,223.931],[768.539,229.797],[722.809,275.527],[363.107,275.527],[317.377,229.797],[317.377,223.931],[363.107,178.201]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[768.6223207839564,226.9473335769283]},"g":{"p":3,"k":{"a":0,"k":[0,0.914,0.898,1,0,0.922,0.91,1,1,1,1,1,0,1,0,1,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":20},"r":1,"s":{"a":0,"k":[317.37701657338135,226.8640002407687]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[317.377,178.201]},"o":{"a":0,"k":100},"p":{"a":0,"k":[317.377,178.201]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":49,"ty":4,"nm":"star0","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[299.354,133.138]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":120,"s":[360],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 26 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 (2) Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1 (2)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0.334,0.729],[4.821,-2.21],[0.973,-1.98],[1.921,1.213],[1.455,0.155],[0.567,-5.273],[-0.503,-1.38],[0.496,-0.904],[1.209,-0.267],[0.442,-4.1],[-3.748,-1.632],[-0.314,-0.981],[0.638,-1.059],[0.148,-1.388],[-5.273,-0.566],[-1.321,0.451],[-0.891,-0.515],[-0.241,-1.211],[-5.555,4.882],[-0.564,1.301],[-0.977,0.317],[-1.058,-0.628],[-2.869,1.318],[2.21,4.821],[-0.442,0.789],[-1.119,0.139],[2.709,5.905],[2.107,0.952],[0.304,0.968],[-0.612,1.032],[1.317,2.866],[4.821,-2.21],[0.822,0.428],[0.204,1.115]],"o":[[-0.145,-0.788],[-2.211,-4.82],[-2.007,0.916],[-1.005,2.041],[-1.239,-0.78],[-5.273,-0.566],[-0.158,1.46],[0.426,1.164],[-0.497,0.904],[-4.026,0.892],[-0.46,4.275],[1.132,0.493],[0.314,0.981],[-0.718,1.197],[-0.567,5.273],[1.388,0.153],[1.17,-0.398],[0.892,0.515],[1.45,7.252],[1.065,-0.936],[0.487,-1.129],[0.977,-0.318],[2.712,1.617],[4.82,-2.21],[-0.472,-1.027],[0.441,-0.79],[6.448,-0.795],[-0.959,-2.104],[-1.094,-0.497],[-0.304,-0.967],[1.613,-2.711],[-2.21,-4.821],[-1.033,0.474],[-0.82,-0.429],[0,0]],"v":[[311.293,104.893],[310.572,102.609],[297.841,97.882],[293.232,102.361],[287.612,103.945],[283.518,102.524],[272.944,111.046],[273.468,115.363],[273.182,118.627],[270.584,120.622],[263.107,128.975],[268.817,138.807],[270.98,141.257],[270.638,144.509],[269.323,148.432],[277.844,159.005],[281.957,158.553],[285.207,158.911],[287.142,161.545],[302.904,166.878],[305.378,163.48],[307.812,161.315],[311.055,161.638],[319.969,162.115],[324.696,149.384],[324.835,146.488],[327.226,144.852],[334.78,131.317],[330.024,126.577],[327.929,124.162],[328.266,120.985],[328.739,112.077],[316.008,107.35],[313.06,107.251],[311.293,104.893]]}}},{"ty":"sh","hd":false,"nm":"Path 1 (2)","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-0.77,0.353],[-2.671,-5.824],[1.948,-3.275],[-0.993,-0.45],[-1.161,-2.542],[5.825,-2.671],[1.181,-0.147],[-0.326,-0.709],[5.825,-2.671],[3.276,1.951],[0.444,-1.026],[5.179,0.556],[0.964,4.842],[1.062,-0.362],[1.735,0.186],[-0.685,6.371],[-0.845,1.402],[1.029,0.447],[-0.555,5.168],[-4.733,1.044],[0.387,1.057],[-0.191,1.765],[-6.371,-0.684],[-1.451,-0.916],[-0.48,0.974],[-2.426,1.107],[-2.671,-5.825],[-0.17,-0.931]],"o":[[0.153,0.834],[5.825,-2.67],[1.591,3.463],[-0.556,0.938],[2.545,1.152],[2.671,5.824],[-1.082,0.497],[-0.775,0.096],[2.67,5.825],[-3.465,1.591],[-0.961,-0.571],[-1.963,4.542],[-5.168,-0.556],[-0.219,-1.1],[-1.55,0.527],[-6.371,-0.685],[0.187,-1.735],[0.579,-0.961],[-4.526,-1.971],[0.547,-5.086],[1.099,-0.243],[-0.608,-1.668],[0.684,-6.371],[1.821,0.195],[0.917,0.58],[1.176,-2.393],[5.824,-2.67],[0.412,0.9],[0,0]],"v":[[313.26,104.533],[315.175,105.532],[330.557,111.243],[329.986,122.005],[330.85,124.755],[336.598,130.484],[330.887,145.866],[327.472,146.837],[326.514,148.551],[320.802,163.933],[310.034,163.358],[307.213,164.274],[295.322,171.202],[285.181,161.935],[282.602,160.447],[277.63,160.994],[267.334,148.219],[268.925,143.477],[268.018,140.641],[261.118,128.762],[270.153,118.669],[271.59,116.05],[270.956,110.832],[283.731,100.536],[288.68,102.254],[291.438,101.477],[297.008,96.064],[312.39,101.776],[313.26,104.533]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[248.58333866400585,144.64146192540215]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0.17]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[332.50000474232445,82.5581306565912]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[299.354,133.138]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 27 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0.153,0.834],[0.403,0.88],[5.824,-2.67],[1.176,-2.393],[0.917,0.58],[1.759,0.186],[0.684,-6.371],[-0.608,-1.668],[1.099,-0.243],[0.547,-5.086],[-4.526,-1.971],[0.579,-0.961],[0.179,-1.678],[-6.371,-0.685],[-1.55,0.527],[-0.219,-1.1],[-5.168,-0.556],[-1.963,4.542],[-0.961,-0.571],[-3.465,1.591],[2.67,5.825],[-0.775,0.096],[-1.082,0.497],[2.671,5.824],[2.545,1.152],[-0.556,0.938],[1.591,3.463],[5.825,-2.67]],"o":[[-0.77,0.353],[-0.175,-0.951],[-2.671,-5.825],[-2.426,1.107],[-0.48,0.974],[-1.496,-0.944],[-6.371,-0.685],[-0.191,1.765],[0.387,1.057],[-4.733,1.044],[-0.555,5.168],[1.029,0.447],[-0.869,1.446],[-0.685,6.371],[1.735,0.186],[1.062,-0.362],[0.964,4.842],[5.179,0.556],[0.444,-1.026],[3.276,1.951],[5.825,-2.671],[-0.326,-0.709],[1.181,-0.147],[5.825,-2.671],[-1.161,-2.542],[-0.993,-0.45],[1.948,-3.275],[-2.671,-5.824],[0,0]],"v":[[315.175,105.532],[313.26,104.533],[312.39,101.776],[297.008,96.064],[291.438,101.477],[288.68,102.254],[283.731,100.536],[270.956,110.832],[271.59,116.05],[270.153,118.669],[261.118,128.762],[268.018,140.641],[268.925,143.477],[267.334,148.219],[277.63,160.994],[282.602,160.447],[285.181,161.935],[295.322,171.202],[307.213,164.274],[310.034,163.358],[320.802,163.933],[326.514,148.551],[327.472,146.837],[330.887,145.866],[336.598,130.484],[330.85,124.755],[329.986,122.005],[330.557,111.243],[315.175,105.532]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.643,0.631,1]},"r":1,"o":{"a":0,"k":42}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[299.354,133.138]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":54,"ty":4,"nm":"bar2","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[30],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":15.9,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[87.976,222.83],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":15.9,"s":[104.663,211.615],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 30 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-11.04],[0,0],[11.04,0],[0,0],[0,11.04],[0,0],[-11.04,0]],"o":[[0,0],[11.04,0],[0,0],[0,11.04],[0,0],[-11.04,0],[0,0],[0,-11.04],[0,0]],"v":[[177.692,177.882],[256.902,177.882],[276.892,197.872],[276.892,197.872],[256.902,217.862],[177.692,217.862],[157.702,197.872],[157.702,197.872],[177.692,177.882]]}}},{"ty":"gs","hd":false,"bm":0,"o":{"a":0,"k":100},"e":{"a":0,"k":[200.8973279481403,188.34734147744402]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0.12]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[153.93499708017174,179.23800686232664]},"lc":1,"lj":1,"ml":4,"w":{"a":0,"k":1.332}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[157.702,177.882]},"o":{"a":0,"k":100},"p":{"a":0,"k":[157.702,177.882]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[104.663,211.616]},"o":{"a":0,"k":100},"p":{"a":0,"k":[-0.001,0.001]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 31 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-11.408],[0,0],[11.408,0],[0,0],[0,11.408],[0,0],[-11.408,0]],"o":[[0,0],[11.408,0],[0,0],[0,11.408],[0,0],[-11.408,0],[0,0],[0,-11.408],[0,0]],"v":[[179.295,177.783],[258.504,177.783],[279.16,198.439],[279.16,198.439],[258.504,219.095],[179.295,219.095],[158.639,198.439],[158.639,198.439],[179.295,177.783]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":1,"k":[{"t":0,"s":[279.2433341828642,198.52232893687037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":31.2,"s":[279.2433341828642,198.52232893687037],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"g":{"p":2,"k":{"a":1,"k":[{"t":0,"s":[0,0.475,0.376,1,1,1,1,1,0,1,1,1],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":31.2,"s":[0,0.184,0.039,1,1,1,1,1,0,1,1,1],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":20},"r":1,"s":{"a":1,"k":[{"t":0,"s":[158.63900898776984,198.43899559940522],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":31.2,"s":[158.63900898776984,198.43899559940522],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[158.639,177.783]},"o":{"a":0,"k":100},"p":{"a":0,"k":[158.639,177.783]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[104.663,211.615]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":59,"ty":4,"nm":"bar1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":5.1,"s":[0],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23}},{"t":29.1,"s":[75],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"p":{"a":1,"k":[{"t":0,"s":[-2.662,300.473],"i":{"x":0.5,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":29.1,"s":[49.3,247.455],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Layer 32 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-9.682],[0,0],[9.683,0],[0,0],[0,9.682],[0,0],[-9.683,0]],"o":[[0,0],[9.683,0],[0,0],[0,9.682],[0,0],[-9.683,0],[0,0],[0,-9.682],[0,0]],"v":[[113.349,217.87],[182.817,217.87],[200.349,235.401],[200.349,235.401],[182.817,252.933],[113.349,252.933],[95.817,235.401],[95.817,235.401],[113.349,217.87]]}}},{"ty":"gs","hd":false,"bm":0,"o":{"a":0,"k":100},"e":{"a":0,"k":[133.71033056182884,227.05833948393797]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0.12]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[92.51299989133324,219.05900606962715]},"lc":1,"lj":1,"ml":4,"w":{"a":0,"k":1.168}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[95.817,217.87]},"o":{"a":0,"k":100},"p":{"a":0,"k":[95.817,217.87]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[49.3,247.455]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0.001]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Layer 33 Group","bm":0,"it":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,-10.005],[0,0],[10.005,0],[0,0],[0,10.005],[0,0],[-10.005,0]],"o":[[0,0],[10.005,0],[0,0],[0,10.005],[0,0],[-10.005,0],[0,0],[0,-10.005],[0,0]],"v":[[114.754,217.783],[184.222,217.783],[202.338,235.898],[202.338,235.898],[184.222,254.014],[114.754,254.014],[96.638,235.898],[96.638,235.898],[114.754,217.783]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[202.42133706372954,235.98233658775376]},"g":{"p":2,"k":{"a":0,"k":[0,0.475,0.376,1,1,1,1,1,0,1,1,1]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":20},"r":1,"s":{"a":0,"k":[96.63800171186502,235.89900325304652]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[96.638,217.783]},"o":{"a":0,"k":100},"p":{"a":0,"k":[96.638,217.783]},"r":{"a":0,"k":129},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[49.3,247.455]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":64,"ty":4,"nm":"background","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[245.5,98]},"o":{"a":0,"k":100},"p":{"a":0,"k":[245.5,98]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0,0],[375,0],[375,315],[0,315]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":1,"k":[{"t":0,"s":[187.58334451030575,315.0833132138756],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":51.9,"s":[187.58334451030575,315.0833132138756],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"g":{"p":2,"k":{"a":1,"k":[{"t":0,"s":[0,1,1,1,1,0.329,0.318,1,0,0.52,1,1],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":51.9,"s":[0,1,1,1,1,0.329,0.318,1,0,0.52,1,1],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":1,"k":[{"t":0,"s":[187.50001117882678,-2.086162520509305e-9],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":51.9,"s":[187.50001117882678,-2.086162520509305e-9],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[491,37.5],[339.5,189],[188,37.5],[339.5,-114],[491,37.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[339.5,180.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[339.5,37.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[83.671,0],[0,83.671],[-83.671,0],[0,-83.671]],"o":[[0,83.671],[-83.671,0],[0,-83.671],[83.671,0],[0,0]],"v":[[468,32.5],[316.5,184],[165,32.5],[316.5,-119],[468,32.5]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":0,"k":[316.5,175.33557625758897]},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,1,1,1,0,1,1,0]}},"t":2,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":0,"k":100},"r":1,"s":{"a":0,"k":[316.5,32.5]}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0},{"ty":"gr","hd":false,"nm":"Path 1 Group","bm":0,"it":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0,0],[375,0],[375,280],[0,280]]}}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[0.973,0.976,0.988]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]},{"ddd":0,"ind":69,"ty":4,"nm":"Screen","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[187.5,140]},"o":{"a":0,"k":100},"p":{"a":0,"k":[250,250]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Screen Group","bm":0,"it":[{"ty":"rc","hd":false,"nm":"Screen","d":1,"p":{"a":0,"k":[187.5,140]},"r":{"a":0,"k":0},"s":{"a":0,"k":[375,280]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]}],"meta":{"g":"@phase-software/lottie-exporter 0.7.0"},"nm":"","op":120,"v":"5.6.0","w":375} \ No newline at end of file diff --git a/src/assets/lotties/index.ts b/src/assets/lotties/index.ts index b7c7317e..54270f62 100644 --- a/src/assets/lotties/index.ts +++ b/src/assets/lotties/index.ts @@ -1,3 +1,5 @@ +import homeBanner1 from './home-banner1.json'; +import homeBanner2 from './home-banner2.json'; import mainBanner from './main_banner.json'; -export { mainBanner }; +export { mainBanner, homeBanner1, homeBanner2 }; diff --git a/src/assets/svg/IcCheckActive.tsx b/src/assets/svg/IcCheckActive.tsx index 5970b116..28987b53 100644 --- a/src/assets/svg/IcCheckActive.tsx +++ b/src/assets/svg/IcCheckActive.tsx @@ -4,7 +4,7 @@ const SvgIcCheckActive = (props: SVGProps) => ( diff --git a/src/assets/svg/IcCheckDefault.tsx b/src/assets/svg/IcCheckDefault.tsx index 4a5b7528..169eafbb 100644 --- a/src/assets/svg/IcCheckDefault.tsx +++ b/src/assets/svg/IcCheckDefault.tsx @@ -4,7 +4,7 @@ const SvgIcCheckDefault = (props: SVGProps) => ( diff --git a/src/assets/svg/IcComment.tsx b/src/assets/svg/IcComment.tsx new file mode 100644 index 00000000..7bf35aea --- /dev/null +++ b/src/assets/svg/IcComment.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; +const SvgIcComment = (props: SVGProps) => ( + + + + + + + + + + + +); +export default SvgIcComment; diff --git a/src/assets/svg/IcCommentListEmpty.tsx b/src/assets/svg/IcCommentListEmpty.tsx new file mode 100644 index 00000000..20aa7f9d --- /dev/null +++ b/src/assets/svg/IcCommentListEmpty.tsx @@ -0,0 +1,176 @@ +import type { SVGProps } from 'react'; +const SvgIcCommentListEmpty = (props: SVGProps) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); +export default SvgIcCommentListEmpty; diff --git a/src/assets/svg/IcCopyPlus.tsx b/src/assets/svg/IcCopyPlus.tsx index 02ac8620..ed1ef001 100644 --- a/src/assets/svg/IcCopyPlus.tsx +++ b/src/assets/svg/IcCopyPlus.tsx @@ -2,14 +2,14 @@ import type { SVGProps } from 'react'; const SvgIcCopyPlus = (props: SVGProps) => ( ) => ( + + + + + + + + + + + +); +export default SvgIcDelete16; diff --git a/src/assets/svg/IcDelete20.tsx b/src/assets/svg/IcDelete20.tsx new file mode 100644 index 00000000..84adac2e --- /dev/null +++ b/src/assets/svg/IcDelete20.tsx @@ -0,0 +1,14 @@ +import type { SVGProps } from 'react'; +const SvgIcDelete20 = (props: SVGProps) => ( + + + + +); +export default SvgIcDelete20; diff --git a/src/assets/svg/IcDropdownRight.tsx b/src/assets/svg/IcDropdownRight.tsx index 6cf482c1..7ecc74c5 100644 --- a/src/assets/svg/IcDropdownRight.tsx +++ b/src/assets/svg/IcDropdownRight.tsx @@ -2,7 +2,7 @@ import type { SVGProps } from 'react'; const SvgIcDropdownRight = (props: SVGProps) => ( ) => ( + + + +); +export default SvgIcLock; diff --git a/src/assets/svg/IcParkMore.tsx b/src/assets/svg/IcParkMore.tsx new file mode 100644 index 00000000..5aeb8edf --- /dev/null +++ b/src/assets/svg/IcParkMore.tsx @@ -0,0 +1,10 @@ +import type { SVGProps } from 'react'; +const SvgIcParkMore = (props: SVGProps) => ( + + + +); +export default SvgIcParkMore; diff --git a/src/assets/svg/IcSend.tsx b/src/assets/svg/IcSend.tsx new file mode 100644 index 00000000..46f3c0ff --- /dev/null +++ b/src/assets/svg/IcSend.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from 'react'; +const SvgIcSend = (props: SVGProps) => ( + + + + + + + + + + +); +export default SvgIcSend; diff --git a/src/assets/svg/IcSpickerMark.tsx b/src/assets/svg/IcSpickerMark.tsx new file mode 100644 index 00000000..826bd71a --- /dev/null +++ b/src/assets/svg/IcSpickerMark.tsx @@ -0,0 +1,16 @@ +import type { SVGProps } from 'react'; +const SvgIcSpickerMark = (props: SVGProps) => ( + + + + +); +export default SvgIcSpickerMark; diff --git a/src/assets/svg/index.ts b/src/assets/svg/index.ts index e2b1eb77..ac02064c 100644 --- a/src/assets/svg/index.ts +++ b/src/assets/svg/index.ts @@ -11,9 +11,13 @@ export { default as IcCheckDefault } from './IcCheckDefault'; export { default as IcClassPerson } from './IcClassPerson'; export { default as IcClipboardCopy } from './IcClipboardCopy'; export { default as IcClose } from './IcClose'; +export { default as IcComment } from './IcComment'; +export { default as IcCommentListEmpty } from './IcCommentListEmpty'; export { default as IcCopyPlus } from './IcCopyPlus'; export { default as IcDate } from './IcDate'; export { default as IcDefaultUserimg } from './IcDefaultUserimg'; +export { default as IcDelete16 } from './IcDelete16'; +export { default as IcDelete20 } from './IcDelete20'; export { default as IcDeletePhoto } from './IcDeletePhoto'; export { default as IcDropdownDown } from './IcDropdownDown'; export { default as IcDropdownPlatformDown } from './IcDropdownPlatformDown'; @@ -46,6 +50,7 @@ export { default as IcLanguageSmall } from './IcLanguageSmall'; export { default as IcLifestyleActive } from './IcLifestyleActive'; export { default as IcLifestyleBlack } from './IcLifestyleBlack'; export { default as IcLifestyleSmall } from './IcLifestyleSmall'; +export { default as IcLock } from './IcLock'; export { default as IcLogo } from './IcLogo'; export { default as IcMindActive } from './IcMindActive'; export { default as IcMindBlack } from './IcMindBlack'; @@ -60,11 +65,14 @@ export { default as IcNjobSmall } from './IcNjobSmall'; export { default as IcNumberLabel } from './IcNumberLabel'; export { default as IcOffline } from './IcOffline'; export { default as IcOneline } from './IcOneline'; +export { default as IcParkMore } from './IcParkMore'; export { default as IcPerson } from './IcPerson'; export { default as IcProductivityActive } from './IcProductivityActive'; export { default as IcProductivityBlack } from './IcProductivityBlack'; export { default as IcProductivitySmall } from './IcProductivitySmall'; +export { default as IcSend } from './IcSend'; export { default as IcShare } from './IcShare'; +export { default as IcSpickerMark } from './IcSpickerMark'; export { default as IcStartupActive } from './IcStartupActive'; export { default as IcStartupBlack } from './IcStartupBlack'; export { default as IcStartupSmall } from './IcStartupSmall'; diff --git a/src/components/common/AbsoluteModal/AbsoluteModal.style.ts b/src/components/common/AbsoluteModal/AbsoluteModal.style.ts index a6a01e59..3e2f643d 100644 --- a/src/components/common/AbsoluteModal/AbsoluteModal.style.ts +++ b/src/components/common/AbsoluteModal/AbsoluteModal.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const backdropStyle = css` @@ -24,5 +25,5 @@ export const modalContentStyle = (theme: Theme) => css` border-radius: 10px; background-color: ${theme.color.white}; - box-shadow: 0px 0px 60px 0px rgba(0, 0, 0, 0.20); + box-shadow: 0px 0px 60px 0px rgba(0, 0, 0, 0.2); `; diff --git a/src/components/common/AbsoluteModal/AbsoluteModal.tsx b/src/components/common/AbsoluteModal/AbsoluteModal.tsx index 92ea6006..5a72bd12 100644 --- a/src/components/common/AbsoluteModal/AbsoluteModal.tsx +++ b/src/components/common/AbsoluteModal/AbsoluteModal.tsx @@ -1,5 +1,6 @@ import { PropsWithChildren } from 'react'; import { createPortal } from 'react-dom'; + import { backdropStyle, modalContentStyle } from './AbsoluteModal.style'; interface ModalProps { diff --git a/src/components/common/Carousel/Carousel.style.ts b/src/components/common/Carousel/Carousel.style.ts deleted file mode 100644 index 1492dd61..00000000 --- a/src/components/common/Carousel/Carousel.style.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { css, Theme } from '@emotion/react'; - -export const swiperStyle = (theme: Theme) => css` - width: 100%; - height: 100%; - .swiper-pagination-bullet-active { - background: ${theme.color.purple1}; - } -`; - -export const imageStyle = css` - width: 100%; - aspect-ratio: 375 / 211; - - object-fit: cover; -`; diff --git a/src/components/common/Carousel/Carousel.tsx b/src/components/common/Carousel/Carousel.tsx deleted file mode 100644 index 87e9dfdc..00000000 --- a/src/components/common/Carousel/Carousel.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Swiper, SwiperSlide } from 'swiper/react'; -import { Pagination } from 'swiper/modules'; - -import 'swiper/css'; -import 'swiper/css/pagination'; -import { imageStyle, swiperStyle } from './Carousel.style'; - -interface CarouselProps { - imageList: string[]; -} - -const Carousel = ({ imageList }: CarouselProps) => { - return ( - - {imageList.map((image, index) => { - return ( - // TODO: 추후 이미지 id를 key로 사용하도록 수정 - - {`Carousel - - ); - })} - - ); -}; - -export default Carousel; diff --git a/src/components/common/CategorySelectBox/CategorySelectBox.style.ts b/src/components/common/CategorySelectBox/CategorySelectBox.style.ts index ad27ee7f..7b62d2dd 100644 --- a/src/components/common/CategorySelectBox/CategorySelectBox.style.ts +++ b/src/components/common/CategorySelectBox/CategorySelectBox.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const ulStyle = css` diff --git a/src/components/common/CategorySelectBox/CategorySelectBox.tsx b/src/components/common/CategorySelectBox/CategorySelectBox.tsx index 9ab2f80d..27caf526 100644 --- a/src/components/common/CategorySelectBox/CategorySelectBox.tsx +++ b/src/components/common/CategorySelectBox/CategorySelectBox.tsx @@ -1,4 +1,5 @@ import { CATEGORY_ICON } from '@constants'; + import { imgStyle, labelStyle, liStyle, ulStyle } from './CategorySelectBox.style'; const categoryIcons = [ diff --git a/src/components/common/CheckLabel/CheckLabel.style.ts b/src/components/common/CheckLabel/CheckLabel.style.ts new file mode 100644 index 00000000..976de8c0 --- /dev/null +++ b/src/components/common/CheckLabel/CheckLabel.style.ts @@ -0,0 +1,26 @@ +import { Theme, css } from '@emotion/react'; + +import { flexGenerator } from '@styles/generator'; + +export const inputStyle = css` + display: none; +`; + +export const checkLabelWrapper = css` + ${flexGenerator()}; + width: fit-content; + margin-top: 1rem; + gap: 0.4rem; + + cursor: pointer; +`; + +export const iconWrapperStyle = css` + width: 2.4rem; + height: 2.4rem; +`; + +export const textStyle = (theme: Theme) => css` + ${theme.font['body01-r-15']}; + color: ${theme.color.midgray1}; +`; diff --git a/src/components/common/CheckLabel/CheckLabel.tsx b/src/components/common/CheckLabel/CheckLabel.tsx new file mode 100644 index 00000000..66376f3e --- /dev/null +++ b/src/components/common/CheckLabel/CheckLabel.tsx @@ -0,0 +1,23 @@ +import { LabelHTMLAttributes } from 'react'; + +import { IcCheckActive, IcCheckDefault } from '@svg'; + +import { checkLabelWrapper, iconWrapperStyle, inputStyle, textStyle } from './CheckLabel.style'; +interface CheckLabelProps extends LabelHTMLAttributes { + isChecked: boolean; + text: string; +} + +const CheckLabel = ({ isChecked, text, onClick }: CheckLabelProps) => { + return ( + <> + + + + ); +}; + +export default CheckLabel; diff --git a/src/components/common/CountPeople/CountPeople.style.ts b/src/components/common/CountPeople/CountPeople.style.ts index fb0ca3f3..2f3394d2 100644 --- a/src/components/common/CountPeople/CountPeople.style.ts +++ b/src/components/common/CountPeople/CountPeople.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const containerStyle = (theme: Theme) => css` @@ -8,7 +9,6 @@ export const containerStyle = (theme: Theme) => css` ${theme.font['head02-b-20']} ${theme.color.blackgray} - background-color: pink; `; export const buttonWrapperStyle = css` @@ -24,32 +24,34 @@ export const iconStyle = css` height: 4.8rem; `; -export const plusAndMinusIconStyle = css` - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - pointer-events: none; /* 클릭 이벤트가 아래 요소에 전달되도록 설정 */ -`; +export const minusStyle = (people: number) => (theme: Theme) => css` + circle { + stroke: ${people <= 1 ? theme.color.lightgray1 : theme.color.purple1}; + } + path { + fill: ${people <= 1 ? theme.color.lightgray1 : theme.color.purple1}; + } -export const minusStyle = (people: number) => (theme: Theme) => - css` + :active { circle { - stroke: ${people <= 1 ? theme.color.lightgray1 : theme.color.purple1}; - } - path { - fill: ${people <= 1 ? theme.color.lightgray1 : theme.color.purple1}; + fill: ${theme.color.purple6}; } - `; -export const plusStyle = (people: number) => (theme: Theme) => - css` + } +`; +export const plusStyle = (people: number) => (theme: Theme) => css` + circle { + stroke: ${people >= 15 ? theme.color.lightgray1 : theme.color.purple1}; + } + path { + fill: ${people >= 15 ? theme.color.lightgray1 : theme.color.purple1}; + } + + :active { circle { - stroke: ${people >= 15 ? theme.color.lightgray1 : theme.color.purple1}; - } - path { - fill: ${people >= 15 ? theme.color.lightgray1 : theme.color.purple1}; + fill: ${theme.color.purple6}; } - `; + } +`; export const disabledStyle = css` pointer-events: none; diff --git a/src/components/common/CountPeople/CountPeople.tsx b/src/components/common/CountPeople/CountPeople.tsx index f63a2da3..01a01e1e 100644 --- a/src/components/common/CountPeople/CountPeople.tsx +++ b/src/components/common/CountPeople/CountPeople.tsx @@ -1,4 +1,5 @@ import { IcBtnMinus, IcBtnPlus } from '@svg'; + import { buttonWrapperStyle, containerStyle, diff --git a/src/components/common/DateSelect/DateSelect.style.ts b/src/components/common/DateSelect/DateSelect.style.ts index fd9c6377..efb1cf39 100644 --- a/src/components/common/DateSelect/DateSelect.style.ts +++ b/src/components/common/DateSelect/DateSelect.style.ts @@ -1,4 +1,5 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const customInputContainer = css` @@ -39,13 +40,17 @@ export const customInputStyle = (hasValue: boolean) => (theme: Theme) => css` } `; -export const iconStyle = css` +export const iconStyle = (theme: Theme) => css` width: 2.4rem; height: 2.4rem; position: absolute; top: 1.95rem; right: 1.7rem; + path { + fill: ${theme.color.midgray1}; + } + cursor: pointer; `; diff --git a/src/components/common/DateSelect/DateSelect.tsx b/src/components/common/DateSelect/DateSelect.tsx index 4819da7b..95aff290 100644 --- a/src/components/common/DateSelect/DateSelect.tsx +++ b/src/components/common/DateSelect/DateSelect.tsx @@ -1,8 +1,11 @@ +import { ko } from 'date-fns/locale'; +import dayjs from 'dayjs'; import React, { InputHTMLAttributes } from 'react'; import DatePicker from 'react-datepicker'; -import dayjs from 'dayjs'; -import { ko } from 'date-fns/locale'; + import 'react-datepicker/dist/react-datepicker.css'; +import { IcDropdownPlatformDown } from '@svg'; + import { dataPickerWrapper, customInputContainer, @@ -10,7 +13,6 @@ import { customInputStyle, iconStyle, } from './DateSelect.style'; -import { IcDropdownPlatformDown } from '@svg'; interface CustomInputProps extends InputHTMLAttributes { value?: string; @@ -28,7 +30,13 @@ const CustomInput = React.forwardRef(
- +
); } diff --git a/src/components/common/ErrorBoundary/ErrorBoundary.tsx b/src/components/common/ErrorBoundary/ErrorBoundary.tsx new file mode 100644 index 00000000..e99b555b --- /dev/null +++ b/src/components/common/ErrorBoundary/ErrorBoundary.tsx @@ -0,0 +1,72 @@ +import { Component, ComponentType, createElement, ErrorInfo, ReactNode } from 'react'; + +type ErrorBoundaryState = { + hasError: boolean; + error: Error | null; +}; + +type FallbackProps = { + error: Error | null; + resetErrorBoundary: () => void; +}; + +type ErrorBoundaryProps = { + fallback: ComponentType; + onReset?: () => void; + children: ReactNode; +}; + +export default class ErrorBoundary extends Component { + constructor(props: ErrorBoundaryProps) { + super(props); + + this.state = { + hasError: false, // 오류가 발생했는지 여부를 state 상태로 저장합니다. + error: null, // 발생한 오류의 정보를 state 상태로 저장합니다. + }; + } + + static getDerivedStateFromError(error: Error): ErrorBoundaryState { + // 다음 렌더링에서 폴백 UI가 보이도록 상태를 업데이트 합니다. + return { + hasError: true, + error, + }; + } + + resetErrorBoundary(): void { + this.props.onReset?.(); + + // 에러 상태를 기본으로 초기화합니다. + this.setState({ + hasError: false, + error: null, + }); + } + + /* componentDidCatch 메소드는 오류 정보와 상세 정보를 파라미터로 얻을 수 있습니다. + 주로 오류를 로깅해야 할때 해당 메소드에 접근해서 로깅할 수 있습니다. + */ + componentDidCatch(error: Error, errorInfo: ErrorInfo): void { + console.error('ErrorBoundary caught an error', error, errorInfo); + } + + render() { + const { state, props } = this; + + const { hasError, error } = state; + + const { fallback, children } = props; + + const fallbackProps: FallbackProps = { + error, + resetErrorBoundary: this.resetErrorBoundary.bind(this), + }; + + // fallback 컴포넌트 측에서 오류 정보를 props로 받을 수 있도록 설정 + const fallbackComponent = createElement(fallback, fallbackProps); + + // 오류 발생 여부를 체크하여, 오류가 발생했을때 조건부 렌더링 처리를 해줍니다. + return hasError ? fallbackComponent : children; + } +} diff --git a/src/components/common/Footer/Footer.style.ts b/src/components/common/Footer/Footer.style.ts index d65684b2..af0339a7 100644 --- a/src/components/common/Footer/Footer.style.ts +++ b/src/components/common/Footer/Footer.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const footerContainer = (theme: Theme) => css` @@ -9,7 +10,7 @@ export const footerContainer = (theme: Theme) => css` margin-top: auto; bottom: 0; - background: ${theme.color.background}; + background: ${theme.color.bg_white0}; `; export const footerWrapper = css` diff --git a/src/components/common/Footer/Footer.tsx b/src/components/common/Footer/Footer.tsx index a0730968..6f648bab 100644 --- a/src/components/common/Footer/Footer.tsx +++ b/src/components/common/Footer/Footer.tsx @@ -1,4 +1,5 @@ import { Logo } from '@svg'; + import { contactTextStyle, contactWrapper, diff --git a/src/components/common/IconText/IconText.style.ts b/src/components/common/IconText/IconText.style.ts index 637df8be..2205f8f7 100644 --- a/src/components/common/IconText/IconText.style.ts +++ b/src/components/common/IconText/IconText.style.ts @@ -1,4 +1,5 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const IconTextContainer = css` @@ -14,5 +15,6 @@ export const iconWrapper = css` export const textStyle = (theme: Theme) => css` ${flexGenerator('row', 'flex-start', 'center')}; - ${theme.font['body02-r-14']}; + ${theme.font['subhead06-m-14']}; + color: ${theme.color.darkgray}; `; diff --git a/src/components/common/IconText/IconText.tsx b/src/components/common/IconText/IconText.tsx index f02f4aba..e88840e2 100644 --- a/src/components/common/IconText/IconText.tsx +++ b/src/components/common/IconText/IconText.tsx @@ -1,4 +1,5 @@ import { ReactNode } from 'react'; + import { IconTextContainer, iconWrapper, textStyle } from './IconText.style'; interface IconTextProps { diff --git a/src/components/common/Image/Image.tsx b/src/components/common/Image/Image.tsx index d09e5ae4..1bfd9e0f 100644 --- a/src/components/common/Image/Image.tsx +++ b/src/components/common/Image/Image.tsx @@ -1,6 +1,7 @@ +import { SerializedStyles, Theme } from '@emotion/react'; import { HTMLAttributes, ReactNode } from 'react'; + import { imageStyle, imageVariant, imageWrapper, labelStyle } from './Image.style'; -import { SerializedStyles, Theme } from '@emotion/react'; interface ImageProps extends HTMLAttributes { src: string; diff --git a/src/components/common/ImageSelect/ImageSelect.style.ts b/src/components/common/ImageSelect/ImageSelect.style.ts index 8098d329..b18c8a72 100644 --- a/src/components/common/ImageSelect/ImageSelect.style.ts +++ b/src/components/common/ImageSelect/ImageSelect.style.ts @@ -1,5 +1,5 @@ -import { Theme } from '@emotion/react'; -import { css } from '@emotion/react'; +import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const thumbnailStyle = (theme: Theme) => css` @@ -75,4 +75,4 @@ export const deleteImageIconStyle = css` export const svgStyle = css` width: 100%; height: 100%; -`; \ No newline at end of file +`; diff --git a/src/components/common/ImageSelect/ImageSelect.tsx b/src/components/common/ImageSelect/ImageSelect.tsx index b161bea4..246f4dde 100644 --- a/src/components/common/ImageSelect/ImageSelect.tsx +++ b/src/components/common/ImageSelect/ImageSelect.tsx @@ -1,4 +1,7 @@ import { InputHTMLAttributes, useRef, useState, SetStateAction, Dispatch } from 'react'; + +import { IcCameraAdd, IcDeletePhoto } from '@svg'; + import { imageSelectWrapper, inputStyle, @@ -10,7 +13,6 @@ import { deleteImageIconStyle, svgStyle, } from './ImageSelect.style'; -import { IcCameraAdd, IcDeletePhoto } from '@svg'; interface ImageSelectProps extends InputHTMLAttributes { onFileSelect: Dispatch>; @@ -18,7 +20,11 @@ interface ImageSelectProps extends InputHTMLAttributes { maxImageLength: number; } -const ImageSelect = ({ onFileSelect, isMultiple = false, maxImageLength = 1 }: ImageSelectProps) => { +const ImageSelect = ({ + onFileSelect, + isMultiple = false, + maxImageLength = 1, +}: ImageSelectProps) => { const [previewURLs, setPreviewURLs] = useState([]); const inputRef = useRef(null); diff --git a/src/components/common/Label/Label.style.ts b/src/components/common/Label/Label.style.ts index 87348efb..093f3b4d 100644 --- a/src/components/common/Label/Label.style.ts +++ b/src/components/common/Label/Label.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const labelStyle = css` @@ -32,7 +33,7 @@ export const labelVariant = { `, count: (theme: Theme) => css` height: 3.4rem; - background-color: ${theme.color.purple6}; + background-color: ${theme.color.bg_white1}; color: ${theme.color.purple1}; ${theme.font['body03-r-12']}; `, diff --git a/src/components/common/Modal/Modal.style.ts b/src/components/common/Modal/Modal.style.ts index 5be57f63..51d67b00 100644 --- a/src/components/common/Modal/Modal.style.ts +++ b/src/components/common/Modal/Modal.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const backdropStyle = css` diff --git a/src/components/common/Modal/Modal.tsx b/src/components/common/Modal/Modal.tsx index d156426a..89c65172 100644 --- a/src/components/common/Modal/Modal.tsx +++ b/src/components/common/Modal/Modal.tsx @@ -1,5 +1,6 @@ import { PropsWithChildren } from 'react'; import { createPortal } from 'react-dom'; + import { backdropStyle, modalContentStyle } from './Modal.style'; interface ModalProps { diff --git a/src/components/common/NavigateBox/NavigateBox.style.ts b/src/components/common/NavigateBox/NavigateBox.style.ts index f0a9ce4c..15f15d4e 100644 --- a/src/components/common/NavigateBox/NavigateBox.style.ts +++ b/src/components/common/NavigateBox/NavigateBox.style.ts @@ -1,5 +1,5 @@ -import { Theme } from '@emotion/react'; -import { css } from '@emotion/react'; +import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const wrapperStyle = css` diff --git a/src/components/common/NavigateBox/NavigateBox.tsx b/src/components/common/NavigateBox/NavigateBox.tsx index 24455f51..074b4a11 100644 --- a/src/components/common/NavigateBox/NavigateBox.tsx +++ b/src/components/common/NavigateBox/NavigateBox.tsx @@ -1,6 +1,8 @@ -import { IcNext } from '@svg'; import { HTMLAttributes } from 'react'; import { useNavigate } from 'react-router-dom'; + +import { IcNext } from '@svg'; + import { childrenStyle, iconStyle, wrapperStyle } from './NavigateBox.style'; export interface NavigateBoxProps extends HTMLAttributes { diff --git a/src/components/common/Notice/Notice.style.ts b/src/components/common/Notice/Notice.style.ts index 6ae9e2a9..8db2676f 100644 --- a/src/components/common/Notice/Notice.style.ts +++ b/src/components/common/Notice/Notice.style.ts @@ -1,4 +1,5 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const noticeStyle = css` diff --git a/src/components/common/Notice/Notice.tsx b/src/components/common/Notice/Notice.tsx index 6d77e6f4..9bb00b3e 100644 --- a/src/components/common/Notice/Notice.tsx +++ b/src/components/common/Notice/Notice.tsx @@ -1,4 +1,5 @@ import { HTMLAttributes } from 'react'; + import { NumberLabel } from '@components'; import { noticeStyle, textStyle } from 'src/components/common/Notice/Notice.style'; diff --git a/src/components/common/NumberLabel/NumberLabel.style.ts b/src/components/common/NumberLabel/NumberLabel.style.ts index a1c336b8..2dc42d78 100644 --- a/src/components/common/NumberLabel/NumberLabel.style.ts +++ b/src/components/common/NumberLabel/NumberLabel.style.ts @@ -3,10 +3,6 @@ import { css, Theme } from '@emotion/react'; export const wrapperStyle = css` position: relative; display: inline-block; -`; - -export const iconStyle = css` - display: block; width: 4.4rem; height: 4.4rem; `; diff --git a/src/components/common/NumberLabel/NumberLabel.tsx b/src/components/common/NumberLabel/NumberLabel.tsx index f2fb86ca..98151f59 100644 --- a/src/components/common/NumberLabel/NumberLabel.tsx +++ b/src/components/common/NumberLabel/NumberLabel.tsx @@ -1,15 +1,10 @@ -import { IcNumberLabel } from '@svg'; import { PropsWithChildren } from 'react'; -import { - wrapperStyle, - iconStyle, - textStyle, -} from 'src/components/common/NumberLabel/NumberLabel.style'; + +import { wrapperStyle, textStyle } from './NumberLabel.style'; const NumberLabel = ({ children, ...props }: PropsWithChildren) => { return (
- {children}
); diff --git a/src/components/common/ProgressBar/ProgressBar.style.ts b/src/components/common/ProgressBar/ProgressBar.style.ts index d897f85e..cf987441 100644 --- a/src/components/common/ProgressBar/ProgressBar.style.ts +++ b/src/components/common/ProgressBar/ProgressBar.style.ts @@ -9,9 +9,8 @@ export const progressBarContainer = (theme: Theme) => css` background-color: ${theme.color.lightgray1}; `; -export const progressBarStyle = (progress: number) => (theme: Theme) => - css` - width: ${progress}%; - height: 100%; - background-color: ${theme.color.purple1}; - `; +export const progressBarStyle = (progress: number) => (theme: Theme) => css` + width: ${progress}%; + height: 100%; + background-color: ${theme.color.purple1}; +`; diff --git a/src/components/common/QuestionInput/QuestionInput.style.ts b/src/components/common/QuestionInput/QuestionInput.style.ts index 50cd321f..01d70f8c 100644 --- a/src/components/common/QuestionInput/QuestionInput.style.ts +++ b/src/components/common/QuestionInput/QuestionInput.style.ts @@ -1,15 +1,23 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; +export const questionInputContainer = css` + ${flexGenerator('column', 'center', 'flex-start')} + width: 100%; + min-width: 33.6rem; + gap: 0.4rem; +`; + export const questionInputStyle = (theme: Theme) => css` ${flexGenerator('row', 'flex-start', 'center')} width: 100%; - min-width: 33.6rem; gap: 1rem; + position: relative; padding: 1rem; - border: none; + border: 1px solid ${theme.color.lightgray1}; border-radius: 10px; - background-color: ${theme.color.background}; + background-color: ${theme.color.bg_white0}; color: ${theme.color.blackgray}; ${theme.font['head04-b-16']}; @@ -21,7 +29,7 @@ export const questionInputStyle = (theme: Theme) => css` export const inputStyle = (theme: Theme) => css` width: 100%; border: none; - background-color: ${theme.color.background}; + background-color: ${theme.color.bg_white0}; color: ${theme.color.blackgray}; ${theme.font['head04-b-16']}; @@ -41,7 +49,16 @@ export const iconStyle = css` height: 4.4rem; `; +export const deleteButtonStyle = css` + position: absolute; + right: 1.4rem; + width: 2rem; + height: 2rem; +`; + export const textLengthStyle = (theme: Theme) => css` + ${flexGenerator('row', 'end')} + width: 100%; color: ${theme.color.midgray1}; ${theme.font['body02-r-14']} `; diff --git a/src/components/common/QuestionInput/QuestionInput.tsx b/src/components/common/QuestionInput/QuestionInput.tsx index be0c6d40..938ba9e4 100644 --- a/src/components/common/QuestionInput/QuestionInput.tsx +++ b/src/components/common/QuestionInput/QuestionInput.tsx @@ -1,12 +1,17 @@ -import { InputHTMLAttributes } from 'react'; +import { InputHTMLAttributes, useState } from 'react'; + import { NumberLabel } from '@components'; +import { IcDelete20 } from '@svg'; import { questionInputStyle, inputStyle, iconStyle, textLengthStyle, + questionInputContainer, } from 'src/components/common/QuestionInput/QuestionInput.style'; +import { deleteButtonStyle } from '../inputs/Input/Input.style'; + export interface QuestionInputProps extends InputHTMLAttributes { numberLabel: string; value?: string; @@ -21,23 +26,38 @@ const QuestionInput = ({ value, onChange, }: QuestionInputProps) => { + const [isFocused, setIsFocused] = useState(false); const handleQuestionInputChange = (e: React.ChangeEvent) => { if (e.target.value.length < maxLength + 1) { onChange(e); } }; + const handleInputDelete = (e: React.MouseEvent) => { + e.preventDefault(); + onChange({ target: { value: '' } } as React.ChangeEvent); + }; + return ( -
-
- {numberLabel} +
+
+
+ {numberLabel} +
+ setIsFocused(true)} + onBlur={() => setIsFocused(false)} + placeholder={placeholder} + /> + {isFocused && value && value.length > 0 && ( +
+ +
+ )}
- {value ? `${value.length}/${maxLength}` : `0/${maxLength}`}
); diff --git a/src/components/common/QuestionText/QuestionText.style.ts b/src/components/common/QuestionText/QuestionText.style.ts index 73001546..9e5a5efc 100644 --- a/src/components/common/QuestionText/QuestionText.style.ts +++ b/src/components/common/QuestionText/QuestionText.style.ts @@ -1,18 +1,19 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const questionStyle = (theme: Theme) => css` ${flexGenerator('row', 'flex-start', 'center')} - gap: 1rem; + gap: 0.5rem; padding: 1.5rem 1rem; width: 100%; - background-color: ${theme.color.background}; + background-color: ${theme.color.bg_white1}; border-radius: 10px; `; export const textStyle = (theme: Theme) => css` - color: ${theme.color.blackgray}; - ${theme.font['head04-b-16']} + color: ${theme.color.black}; + ${theme.font['subhead02-sb-16']} word-break: break-word; `; @@ -20,4 +21,3 @@ export const textStyle = (theme: Theme) => css` export const preventDragStyle = css` user-select: none; `; - diff --git a/src/components/common/QuestionText/QuestionText.tsx b/src/components/common/QuestionText/QuestionText.tsx index 2e7ded89..45c35839 100644 --- a/src/components/common/QuestionText/QuestionText.tsx +++ b/src/components/common/QuestionText/QuestionText.tsx @@ -1,5 +1,7 @@ import { HTMLAttributes } from 'react'; + import { NumberLabel } from '@components'; + import { preventDragStyle, questionStyle, textStyle } from './QuestionText.style'; export interface QuestionTextProps extends HTMLAttributes { diff --git a/src/components/common/Review/Review.style.ts b/src/components/common/Review/Review.style.ts new file mode 100644 index 00000000..72fbf1e1 --- /dev/null +++ b/src/components/common/Review/Review.style.ts @@ -0,0 +1,71 @@ +import { Theme, css } from '@emotion/react'; + +import { flexGenerator } from '@styles/generator'; + +export const reviewLayoutStyle = (theme: Theme) => css` + ${flexGenerator('column', 'center', 'flex-start')} + gap: 2rem; + width: 100%; + padding: 2rem; + + border-radius: 10px; + border: 1px solid ${theme.color.lightgray0}; + background-color: ${theme.color.white}; +`; + +export const reviewContentContainer = css` + ${flexGenerator('column', 'center', 'flex-start')} + gap: 1rem; + width: 100%; +`; + +export const reviewContent = (theme: Theme) => css` + color: ${theme.color.midgray2}; + ${theme.font['body02-r-14']} + word-break: break-word; +`; + +export const tagsContainer = css` + display: flex; + flex-wrap: wrap; + gap: 0.6rem 0.4rem; + width: 100%; +`; + +export const imgAndTitleContainer = css` + ${flexGenerator('column')} + gap: 1rem; + width: 100%; +`; + +export const reviewImgSection = (theme: Theme) => css` + width: 100%; + height: 21rem; + background-color: ${theme.color.lightgray1}; + border-radius: 10px; +`; + +export const moimTitleWrapper = (theme: Theme) => css` + ${flexGenerator('row', 'space-between', 'center')} + gap: 4.8rem; + width: 100%; + padding: 1rem 0.6rem 1rem 1rem; + + border-radius: 5px; + background-color: ${theme.color.bg_white1}; + + color: ${theme.color.darkgray}; + ${theme.font['subhead05-sb-14']} + + cursor: pointer; +`; + +export const iconStyle = css` + width: 2.4rem; + height: 2.4rem; +`; + +export const timeTextStyle = (theme: Theme) => css` + color: ${theme.color.midgray1}; + ${theme.font['body03-r-12']} +`; diff --git a/src/components/common/Review/Review.tsx b/src/components/common/Review/Review.tsx new file mode 100644 index 00000000..2d80df24 --- /dev/null +++ b/src/components/common/Review/Review.tsx @@ -0,0 +1,86 @@ +import { useNavigate } from 'react-router-dom'; + +import { IcNext } from '@svg'; +import { formatCreatedDate } from '@utils'; + +import { + iconStyle, + imgAndTitleContainer, + moimTitleWrapper, + reviewContent, + reviewContentContainer, + reviewImgSection, + reviewLayoutStyle, + tagsContainer, + timeTextStyle, +} from './Review.style'; +import ReviewTag from '../ReviewTag/ReviewTag'; +import SimpleUserProfile from '../SimpleUserProfile/SimpleUserProfile'; + +import { components } from '@schema'; + +type ReviewListGetByMoimResponse = components['schemas']['ReviewListGetByMoimResponse']; +type ReviewListGetByHostResponse = components['schemas']['ReviewListGetByHostResponse']; + +interface ReviewProps { + reviewData: ReviewListGetByMoimResponse | ReviewListGetByHostResponse; +} + +const Review = ({ reviewData }: ReviewProps) => { + const { + tagList, + content, + guestNickname, + reviewImageUrl, + guestImageUrl, + date, + moimId, + moimTitle, + } = reviewData as { + moimId?: string; + moimTitle?: string; + tagList: string[] | undefined; + content: string; + guestNickname: string; + reviewImageUrl: string; + guestImageUrl: string; + date: string; + }; + const navigate = useNavigate(); + + const handleTitleClick = () => { + navigate(`/class/${moimId}`); + }; + + return ( +
+ +
+

{content}

+
+ {tagList && + tagList + .filter((tag: string) => tag !== 'null') + .map((tag: string, i: number) => {tag})} +
+
+
+
+ {reviewImageUrl && 리뷰 이미지} +
+ {/* 클래스 뷰, 스픽커 소개뷰에서 모두 사용하기 위해 api에서 moimId 유무에 따라 보여주기 위함 */} + {moimTitle !== undefined && ( +
+ {moimTitle} + + + +
+ )} +
+ {formatCreatedDate(date ?? '')} +
+ ); +}; + +export default Review; diff --git a/src/components/common/ReviewTag/ReviewTag.style.ts b/src/components/common/ReviewTag/ReviewTag.style.ts new file mode 100644 index 00000000..88f2217e --- /dev/null +++ b/src/components/common/ReviewTag/ReviewTag.style.ts @@ -0,0 +1,10 @@ +import { Theme, css } from '@emotion/react'; + +export const reviewTagContainer = (theme: Theme) => css` + padding: 0.5rem; + border-radius: 5px; + background-color: ${theme.color.bg_white0}; + color: ${theme.color.midgray2}; + ${theme.font['body03-r-12']} + white-space: nowrap; +`; diff --git a/src/components/common/ReviewTag/ReviewTag.tsx b/src/components/common/ReviewTag/ReviewTag.tsx new file mode 100644 index 00000000..2b7446ca --- /dev/null +++ b/src/components/common/ReviewTag/ReviewTag.tsx @@ -0,0 +1,9 @@ +import { PropsWithChildren } from 'react'; + +import { reviewTagContainer } from './ReviewTag.style'; + +const ReviewTag = ({ children }: PropsWithChildren) => { + return
{children}
; +}; + +export default ReviewTag; diff --git a/src/components/common/SimpleUserProfile/SimpleUserProfile.style.ts b/src/components/common/SimpleUserProfile/SimpleUserProfile.style.ts index 748ba3f5..7b26074a 100644 --- a/src/components/common/SimpleUserProfile/SimpleUserProfile.style.ts +++ b/src/components/common/SimpleUserProfile/SimpleUserProfile.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const profileWrapperStyle = css` @@ -11,7 +12,7 @@ export const profileWrapperSizeStyle = { gap: 2rem; `, large: css` - gap: 1rem; + gap: 1.2rem; `, medium: css` gap: 1rem; diff --git a/src/components/common/SimpleUserProfile/SimpleUserProfile.tsx b/src/components/common/SimpleUserProfile/SimpleUserProfile.tsx index facc1b1d..22f18530 100644 --- a/src/components/common/SimpleUserProfile/SimpleUserProfile.tsx +++ b/src/components/common/SimpleUserProfile/SimpleUserProfile.tsx @@ -1,4 +1,7 @@ import React from 'react'; + +import { IcDefaultUserimg } from '@svg'; + import { imgSizeStyle, imgStyle, @@ -7,7 +10,6 @@ import { usernameSizeStyle, usernameStyle, } from './SimpleUserProfile.style'; -import { IcDefaultUserimg } from '@svg'; export interface SimpleUserProfileProps extends React.HTMLAttributes { size: 'small' | 'medium' | 'large' | 'xlarge'; diff --git a/src/components/common/TagSelectBox/TagSelectBox.style.ts b/src/components/common/TagSelectBox/TagSelectBox.style.ts new file mode 100644 index 00000000..9d6049bc --- /dev/null +++ b/src/components/common/TagSelectBox/TagSelectBox.style.ts @@ -0,0 +1,27 @@ +import { Theme, css } from '@emotion/react'; + +export const tagWrapper = css` + display: flex; + flex-wrap: wrap; + gap: 1rem 0.6rem; + width: 100%; +`; + +export const buttonStyle = (theme: Theme) => css` + padding: 0.5rem; + + border-radius: 5px; + border: 1px solid ${theme.color.purple1}; + ${theme.font['body03-r-12']} + + cursor: pointer; +`; + +export const selectedStyle = (theme: Theme) => css` + color: ${theme.color.white}; + background-color: ${theme.color.purple1}; +`; +export const unSelectedStyle = (theme: Theme) => css` + color: ${theme.color.purple1}; + background-color: ${theme.color.white}; +`; diff --git a/src/components/common/TagSelectBox/TagSelectBox.tsx b/src/components/common/TagSelectBox/TagSelectBox.tsx new file mode 100644 index 00000000..a665b355 --- /dev/null +++ b/src/components/common/TagSelectBox/TagSelectBox.tsx @@ -0,0 +1,54 @@ +import { useAtom } from 'jotai'; + +import { useToast } from '@hooks'; +import { hostTagsAtom, moimTagsAtom } from 'src/stores/tagList'; + +import { buttonStyle, selectedStyle, tagWrapper, unSelectedStyle } from './TagSelectBox.style'; +import Toast from '../Toast/Toast'; + +interface TagSelectBoxProps { + tagList?: string[]; + maxSelection: number; + tagType: 'moim' | 'host'; +} + +const TagSelectBox = ({ tagList, maxSelection, tagType }: TagSelectBoxProps) => { + const { showToast, isToastVisible } = useToast(); + const [selectedTagList, setSelectedTagList] = useAtom( + tagType === 'moim' ? moimTagsAtom : hostTagsAtom + ); + + const handleTagClick = (tag: string) => { + if (selectedTagList.includes(tag)) { + setSelectedTagList(selectedTagList.filter((selectedTag) => selectedTag !== tag)); + } else { + if (selectedTagList.length < maxSelection) { + setSelectedTagList([...selectedTagList, tag]); + } else { + showToast(); + } + } + }; + return ( + <> +
+ {tagList && + tagList.map((tag) => ( + + ))} +
+ + {tagType === 'moim' + ? '클래스 태그는 최대 3개까지 선택할 수 있어요.' + : '스픽커 태그는 최대 3개까지 선택할 수 있어요.'} + + + ); +}; + +export default TagSelectBox; diff --git a/src/components/common/TextArea/TextArea.style.ts b/src/components/common/TextArea/TextArea.style.ts index 7ad94c95..5da26d4b 100644 --- a/src/components/common/TextArea/TextArea.style.ts +++ b/src/components/common/TextArea/TextArea.style.ts @@ -1,23 +1,23 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const textAreaContainerStyle = css` ${flexGenerator('column', 'center', 'flex-start')} - gap: 0.5rem; + gap: 0.3rem; width: 100%; `; -export const textAreaWrapperStyle = (isError: boolean, isFocused: boolean) => (theme: Theme) => - css` - ${flexGenerator('column', 'space-between', 'flex-end')} - width: 100%; - min-width: 33.5rem; - padding: 1.2rem 1.3rem 1rem 1rem; +export const textAreaWrapperStyle = (isError: boolean, isFocused: boolean) => (theme: Theme) => css` + ${flexGenerator('column', 'space-between', 'flex-end')} + width: 100%; + min-width: 33.5rem; + padding: 1.2rem 1.3rem 1rem 1rem; - border: 1px solid ${isError && isFocused ? theme.color.error : theme.color.lightgray1}; - border-radius: 10px; - background-color: ${theme.color.white}; - `; + border: 1px solid ${isError && isFocused ? theme.color.error : theme.color.lightgray1}; + border-radius: 10px; + background-color: ${theme.color.white}; +`; export const textAreaWrapperSize = { small: css` @@ -29,33 +29,35 @@ export const textAreaWrapperSize = { `, }; -export const textAreaStyle = (theme: Theme) => - css` - border: none; - width: 100%; - height: 100%; - resize: none; - - color: ${theme.color.darkgray}; - background-color: ${theme.color.white}; - ${theme.font['body01-r-15']}; - - &::placeholder { - color: ${theme.color.midgray1}; - } - - &:focus { - outline: none; - } - `; - -export const textLengthStyle = (isError: boolean, isFocused: boolean) => (theme: Theme) => - css` - right: 1.5rem; - bottom: 1.2rem; - color: ${isError && isFocused ? theme.color.error : theme.color.midgray1}; - ${theme.font['body02-r-14']} - `; +export const textAreaStyle = (theme: Theme) => css` + border: none; + width: 100%; + height: 100%; + resize: none; + + color: ${theme.color.blackgray}; + background-color: ${theme.color.white}; + ${theme.font['body01-r-15']}; + + &::placeholder { + color: ${theme.color.midgray1}; + ${theme.font['body06-m-15']} + } + + &:focus { + outline: none; + } +`; + +export const errorAndLengthWrapper = (hasError: boolean) => css` + ${flexGenerator('row', `${hasError ? 'space-between' : 'flex-end'}`, 'center')} + width: 100%; +`; + +export const textLengthStyle = (isError: boolean, isFocused: boolean) => (theme: Theme) => css` + color: ${isError && isFocused ? theme.color.error : theme.color.midgray1}; + ${theme.font['body02-r-14']} +`; export const errorMessageStyle = (theme: Theme) => css` color: ${theme.color.error}; diff --git a/src/components/common/TextArea/TextArea.tsx b/src/components/common/TextArea/TextArea.tsx index f3614b62..8193ce8f 100644 --- a/src/components/common/TextArea/TextArea.tsx +++ b/src/components/common/TextArea/TextArea.tsx @@ -7,7 +7,8 @@ import { textAreaWrapperStyle, textAreaWrapperSize, textAreaContainerStyle, -} from 'src/components/common/TextArea/TextArea.style'; + errorAndLengthWrapper, +} from './TextArea.style'; export interface TextAreaProps extends TextareaHTMLAttributes { value: string; @@ -43,7 +44,7 @@ const TextArea = ({ const textLengthErrorMessage = `* 글자 수 ${maxLength}자 이하로 입력해주세요.`; const isError = maxLengthError || !isValid; - + const hasError = maxLengthError || (isFocused && !isValid); return (
@@ -55,14 +56,16 @@ const TextArea = ({ onFocus={() => setIsFocused(true)} onBlur={() => setIsFocused(false)} /> +
+
+ {maxLengthError && {textLengthErrorMessage}} + + {isFocused && !isValid && {errorMessage}} + {value.length}/{maxLength}
- - {maxLengthError && {textLengthErrorMessage}} - - {isFocused && !isValid && {errorMessage}}
); }; diff --git a/src/components/common/TimeSelect/TimeSelect.style.ts b/src/components/common/TimeSelect/TimeSelect.style.ts index 91d1550f..3f7f1952 100644 --- a/src/components/common/TimeSelect/TimeSelect.style.ts +++ b/src/components/common/TimeSelect/TimeSelect.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const timeSelectContainer = css` @@ -15,19 +16,18 @@ export const timeSelectWrapper = (theme: Theme) => css` border-radius: 10px; `; -export const selectStyle = (hasValue: boolean) => (theme: Theme) => - css` - width: 13rem; - border: none; - border-radius: 4px; - color: ${hasValue ? theme.color.blackgray : theme.color.midgray1}; - ${theme.font['body01-r-15']}; +export const selectStyle = (hasValue: boolean) => (theme: Theme) => css` + width: 13rem; + border: none; + border-radius: 4px; + color: ${hasValue ? theme.color.blackgray : theme.color.midgray1}; + ${theme.font['body01-r-15']}; - cursor: pointer; + cursor: pointer; - appearance: none; - -webkit-appearance: none; - `; + appearance: none; + -webkit-appearance: none; +`; export const textStyle = (theme: Theme) => css` color: ${theme.color.midgray1}; @@ -48,12 +48,11 @@ export const labelWrapper = css` position: relative; `; -export const svgStyle = (hasValue: boolean) => (theme: Theme) => - css` - path { - fill: ${hasValue ? theme.color.blackgray : theme.color.midgray1}; - } +export const svgStyle = (hasValue: boolean) => (theme: Theme) => css` + path { + fill: ${hasValue ? theme.color.blackgray : theme.color.midgray1}; + } - width: 2.4rem; - height: 2.4rem; - `; + width: 2.4rem; + height: 2.4rem; +`; diff --git a/src/components/common/TimeSelect/TimeSelect.tsx b/src/components/common/TimeSelect/TimeSelect.tsx index d281b6a2..3e58ed13 100644 --- a/src/components/common/TimeSelect/TimeSelect.tsx +++ b/src/components/common/TimeSelect/TimeSelect.tsx @@ -1,4 +1,7 @@ import React, { useRef } from 'react'; + +import { IcDropdownPlatformDown } from '@svg'; + import { timeSelectWrapper, selectStyle, @@ -8,7 +11,6 @@ import { labelWrapper, svgStyle, } from './TimeSelect.style'; -import { IcDropdownPlatformDown } from '@svg'; interface TimeselectProps { startTime: number | null; diff --git a/src/components/common/Toast/Toast.style.ts b/src/components/common/Toast/Toast.style.ts index 4c8f9a9a..077792cc 100644 --- a/src/components/common/Toast/Toast.style.ts +++ b/src/components/common/Toast/Toast.style.ts @@ -1,29 +1,29 @@ import { css, keyframes, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; -export const toastWrapperStyle = (isVisible: boolean, toastBottom: number) => (theme: Theme) => - css` - ${flexGenerator()}; - gap: 0.4rem; - min-width: 33.5rem; - width: calc(100dvw - 4rem); - height: 4.5rem; - padding: 0.8rem; +export const toastWrapperStyle = (isVisible: boolean, toastBottom: number) => (theme: Theme) => css` + ${flexGenerator()}; + gap: 0.4rem; + min-width: 33.5rem; + width: calc(100dvw - 4rem); + height: 4.5rem; + padding: 0.8rem; - position: fixed; - left: 50%; - bottom: ${toastBottom}rem; - transform: translateX(-50%); - background-color: ${theme.color.midgray2}; - border-radius: 10px; - display: ${isVisible ? 'flex' : 'none'}; - animation: ${isVisible && toastShow} 2s forwards; - z-index: 10; + position: fixed; + left: 50%; + bottom: ${toastBottom}rem; + transform: translateX(-50%); + background-color: ${theme.color.midgray2}; + border-radius: 10px; + display: ${isVisible ? 'flex' : 'none'}; + animation: ${isVisible && toastShow} 2s forwards; + z-index: 10; - @media screen and (min-width: 430px) { - width: 39rem; - } - `; + @media screen and (min-width: 430px) { + width: 39rem; + } +`; const toastShow = keyframes` 0% { diff --git a/src/components/common/Toast/Toast.tsx b/src/components/common/Toast/Toast.tsx index f66f754c..8cd6426d 100644 --- a/src/components/common/Toast/Toast.tsx +++ b/src/components/common/Toast/Toast.tsx @@ -1,6 +1,7 @@ -import { IcExclamation } from '@svg'; import { HTMLAttributes } from 'react'; import { createPortal } from 'react-dom'; + +import { IcExclamation } from '@svg'; import { toastIconStyle, toastMessageStyle, diff --git a/src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion.style.ts b/src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion.style.ts index c4f53506..1710016a 100644 --- a/src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion.style.ts +++ b/src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion.style.ts @@ -1,4 +1,5 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const applicantAccordionLayout = css` @@ -57,10 +58,14 @@ export const applyDateStyle = (theme: Theme) => css` `; /* 아코디언 아이콘 및 버튼 */ -export const accodionStyle = (isAccordionOpen: boolean) => css` +export const accodionStyle = (isAccordionOpen: boolean) => (theme: Theme) => css` width: 4.8rem; height: 4.8rem; transform: ${isAccordionOpen ? 'rotateX(180deg)' : 'rotateX(0deg)'}; + + path { + stroke: ${theme.color.midgray1}; + } `; export const accodionButtonStyle = css` diff --git a/src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion.tsx b/src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion.tsx index 7e6185c2..cf13632b 100644 --- a/src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion.tsx +++ b/src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion.tsx @@ -1,5 +1,10 @@ import { useState, useEffect } from 'react'; + +import { useFetchSubmitRequest } from '@apis/domains/moimSubmission/useFetchSubmitRequest'; + +import { Image, QuestionText } from '@components'; import { IcApplicantArrcodionDown, IcCheckActive, IcCheckDefault } from '@svg'; + import { applicantAccordionLayout, applicantLayoutStyle, @@ -17,8 +22,7 @@ import { accdionContentStyle, answerStyle, } from './ApplicantAccordion.style'; -import { Image, QuestionText } from '@components'; -import { useFetchSubmitRequest } from '@apis/domains/moimSubmission/useFetchSubmitRequest'; + import { components } from '@schema'; interface ApplicantAccordionProps { diff --git a/src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList.style.ts b/src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList.style.ts index 515f3ab3..317b9aac 100644 --- a/src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList.style.ts +++ b/src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList.style.ts @@ -1,4 +1,5 @@ import { css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const applicantAccordionListLayout = css` diff --git a/src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList.tsx b/src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList.tsx index 0cd2870d..cf6165ad 100644 --- a/src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList.tsx +++ b/src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList.tsx @@ -1,7 +1,8 @@ import { ApplicantAccordion } from '@components'; + import { applicantAccordionListLayout } from './ApplicantAccordionList.style'; -import { components } from '@schema'; +import { components } from '@schema'; interface ApplicantAccordionListProps { moimId: number; diff --git a/src/components/common/applicantAccordions/mergeApplicantData.ts b/src/components/common/applicantAccordions/mergeApplicantData.ts index a8527cdb..ab9044dd 100644 --- a/src/components/common/applicantAccordions/mergeApplicantData.ts +++ b/src/components/common/applicantAccordions/mergeApplicantData.ts @@ -1,4 +1,3 @@ - // import { APPLICANT_DATA } from '../../../constants/mocks/applicant'; // // 통합된 데이터 타입 정의 (TypeScript) // interface ApplicantData { diff --git a/src/components/common/buttons/Button/Button.style.ts b/src/components/common/buttons/Button/Button.style.ts index 67934acf..3d024a99 100644 --- a/src/components/common/buttons/Button/Button.style.ts +++ b/src/components/common/buttons/Button/Button.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const buttonStyle = css` @@ -56,14 +57,14 @@ export const buttonSize = { `, stroke: (theme: Theme) => css` width: 100%; - height: 5.4rem; - padding: 1.7rem 1rem; + height: 6rem; + padding: 1.4rem 1rem; - border: 1px solid ${theme.color.lightgray2}; + border: 1px solid ${theme.color.purple1}; border-radius: 10px; - ${theme.font['body02-r-14']} - color: ${theme.color.midgray2}; + ${theme.font['head04-b-16']} + color: ${theme.color.purple1}; background-color: transparent; `, round: (theme: Theme) => css` @@ -78,6 +79,30 @@ export const buttonSize = { color: ${theme.color.purple3}; background-color: transparent; `, + smallStroke: (theme: Theme) => css` + width: 100%; + height: 5rem; + padding: 1.4rem 1rem; + + border: 1px solid ${theme.color.purple1}; + border-radius: 10px; + + ${theme.font['head04-b-16']} + color: ${theme.color.purple1}; + background-color: ${theme.color.white}; + `, + xSmallStroke: (theme: Theme) => css` + width: 100%; + height: 4.6rem; + padding: 0.8rem; + + border: 1px solid ${theme.color.purple1}; + border-radius: 5px; + + ${theme.font['subhead05-sb-14']} + color: ${theme.color.purple1}; + background-color: ${theme.color.white}; + `, }; export const disabledStyle = (theme: Theme) => css` diff --git a/src/components/common/buttons/Button/Button.tsx b/src/components/common/buttons/Button/Button.tsx index 4a41004e..bd6ac899 100644 --- a/src/components/common/buttons/Button/Button.tsx +++ b/src/components/common/buttons/Button/Button.tsx @@ -1,9 +1,18 @@ +import { SerializedStyles, Theme } from '@emotion/react'; import { ButtonHTMLAttributes } from 'react'; + import { buttonSize, buttonStyle, disabledStyle } from './Button.style'; -import { SerializedStyles, Theme } from '@emotion/react'; export interface ButtonProps extends ButtonHTMLAttributes { - variant: 'large' | 'medium' | 'small' | 'xSmall' | 'stroke' | 'round'; + variant: + | 'large' + | 'medium' + | 'small' + | 'xSmall' + | 'stroke' + | 'round' + | 'smallStroke' + | 'xSmallStroke'; disabled?: boolean; customStyle?: ((theme: Theme) => SerializedStyles) | SerializedStyles; } diff --git a/src/components/common/buttons/CategoryButton/CategoryButton.style.ts b/src/components/common/buttons/CategoryButton/CategoryButton.style.ts index 0f20f63e..376e5008 100644 --- a/src/components/common/buttons/CategoryButton/CategoryButton.style.ts +++ b/src/components/common/buttons/CategoryButton/CategoryButton.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const categoryButtonContainer = css` @@ -7,45 +8,42 @@ export const categoryButtonContainer = css` gap: 0.5rem; `; -export const categoryButtonWrapper = (isSelected: boolean) => (theme: Theme) => - css` - ${flexGenerator('column')}; +export const categoryButtonWrapper = (isSelected: boolean) => (theme: Theme) => css` + ${flexGenerator('column')}; - height: 5.7rem; - align-self: stretch; + height: 5.7rem; + align-self: stretch; - border-radius: 10px; - background: ${isSelected ? theme.color.purple5 : theme.color.background}; - border: ${isSelected ? `1px solid ${theme.color.purple2}` : 'none'}; + border-radius: 10px; + background: ${isSelected ? theme.color.purple5 : theme.color.bg_white0}; + border: ${isSelected ? `1px solid ${theme.color.purple2}` : 'none'}; - color: ${theme.color.lightgray2}; + color: ${theme.color.lightgray2}; - cursor: pointer; - `; + cursor: pointer; +`; -export const categoryButtonStyle = (isSelected: boolean) => (theme: Theme) => - css` - border: none; - background: none; - cursor: pointer; +export const categoryButtonStyle = (isSelected: boolean) => (theme: Theme) => css` + border: none; + background: none; + cursor: pointer; - & span { - fill: ${isSelected ? theme.color.purple2 : theme.color.darkgray}; /* SVG 색상 변경 */ - } - `; - -export const iconWrapper = (isSelected: boolean) => (theme: Theme) => - css` - ${flexGenerator()} - width: 3.6rem; - height: 3.6rem; - - & svg { - path { - stroke: ${isSelected ? theme.color.purple2 : ''}; - } + & span { + fill: ${isSelected ? theme.color.purple2 : theme.color.darkgray}; /* SVG 색상 변경 */ + } +`; + +export const iconWrapper = (isSelected: boolean) => (theme: Theme) => css` + ${flexGenerator()} + width: 3.6rem; + height: 3.6rem; + + & svg { + path { + stroke: ${isSelected ? theme.color.purple2 : ''}; } - `; + } +`; export const textStyle = (theme: Theme) => css` color: ${theme.color.lightgray2}; diff --git a/src/components/common/buttons/CategoryButton/CategoryButton.tsx b/src/components/common/buttons/CategoryButton/CategoryButton.tsx index c89cef7f..fe2b1fd4 100644 --- a/src/components/common/buttons/CategoryButton/CategoryButton.tsx +++ b/src/components/common/buttons/CategoryButton/CategoryButton.tsx @@ -1,4 +1,5 @@ import { ButtonHTMLAttributes } from 'react'; + import { categoryButtonWrapper, categoryButtonStyle, diff --git a/src/components/common/buttons/ClipboardCopyButton/ClipboardCopyButton.style.ts b/src/components/common/buttons/ClipboardCopyButton/ClipboardCopyButton.style.ts index 87b14b1d..bc657409 100644 --- a/src/components/common/buttons/ClipboardCopyButton/ClipboardCopyButton.style.ts +++ b/src/components/common/buttons/ClipboardCopyButton/ClipboardCopyButton.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const buttonWrapperStyle = (theme: Theme) => css` diff --git a/src/components/common/buttons/ClipboardCopyButton/ClipboardCopyButton.tsx b/src/components/common/buttons/ClipboardCopyButton/ClipboardCopyButton.tsx index 630aeca7..6965c98a 100644 --- a/src/components/common/buttons/ClipboardCopyButton/ClipboardCopyButton.tsx +++ b/src/components/common/buttons/ClipboardCopyButton/ClipboardCopyButton.tsx @@ -1,8 +1,10 @@ +import { useState } from 'react'; + import { IcClipboardCopy } from '@svg'; -import { accountNumberStyle, buttonWrapperStyle, iconStyle } from './ClipboardCopyButton.style'; import useToast from 'src/hooks/useToast'; + +import { accountNumberStyle, buttonWrapperStyle, iconStyle } from './ClipboardCopyButton.style'; import Toast from '../../Toast/Toast'; -import { useState } from 'react'; const ClipboardCopyButton = () => { const { showToast, isToastVisible } = useToast(); diff --git a/src/components/common/buttons/IconButton/IconButton.style.ts b/src/components/common/buttons/IconButton/IconButton.style.ts index dbe02e0b..4e7cde8d 100644 --- a/src/components/common/buttons/IconButton/IconButton.style.ts +++ b/src/components/common/buttons/IconButton/IconButton.style.ts @@ -1,4 +1,5 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const buttonStyle = (theme: Theme) => css` @@ -8,12 +9,11 @@ export const buttonStyle = (theme: Theme) => css` padding: 0.8rem 1rem; ${theme.font['subhead05-sb-14']}; - background-color: ${theme.color.white}; - color: ${theme.color.purple1}; + background-color: ${theme.color.purple1}; + color: ${theme.color.white}; - border: 1px solid ${theme.color.purple1}; + border: none; border-radius: 10px; - box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.1); cursor: pointer; `; diff --git a/src/components/common/buttons/IconButton/IconButton.tsx b/src/components/common/buttons/IconButton/IconButton.tsx index 5708660b..ec7c7d17 100644 --- a/src/components/common/buttons/IconButton/IconButton.tsx +++ b/src/components/common/buttons/IconButton/IconButton.tsx @@ -1,4 +1,5 @@ import { ButtonHTMLAttributes } from 'react'; + import { buttonStyle, iconWrapperStyle } from './IconButton.style'; interface IconButtonProps extends ButtonHTMLAttributes { diff --git a/src/components/common/buttons/InterestCategoryButton/InterestCategoryButton.style.ts b/src/components/common/buttons/InterestCategoryButton/InterestCategoryButton.style.ts index 38d2c2ee..6e9f393f 100644 --- a/src/components/common/buttons/InterestCategoryButton/InterestCategoryButton.style.ts +++ b/src/components/common/buttons/InterestCategoryButton/InterestCategoryButton.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const InterestCategoryButtonStyle = css` diff --git a/src/components/common/buttons/InterestCategoryButton/InterestCategoryButton.tsx b/src/components/common/buttons/InterestCategoryButton/InterestCategoryButton.tsx index 07a02924..7fd00b3a 100644 --- a/src/components/common/buttons/InterestCategoryButton/InterestCategoryButton.tsx +++ b/src/components/common/buttons/InterestCategoryButton/InterestCategoryButton.tsx @@ -1,9 +1,10 @@ +import { ButtonHTMLAttributes } from 'react'; + import { InterestCategoryButtonStyle, InterestCategoryButtonVariant, iconWrapperStyle, } from './InterestCategoryButton.style'; -import { ButtonHTMLAttributes } from 'react'; interface InterestCategoryButtonProps extends ButtonHTMLAttributes { variant?: 'default'; icon: React.ReactNode; diff --git a/src/components/common/buttons/PayButton/PayButton.style.ts b/src/components/common/buttons/PayButton/PayButton.style.ts index 47d837ea..bec5bc58 100644 --- a/src/components/common/buttons/PayButton/PayButton.style.ts +++ b/src/components/common/buttons/PayButton/PayButton.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const payButtonStyle = (theme: Theme) => css` @@ -8,7 +9,7 @@ export const payButtonStyle = (theme: Theme) => css` padding: 1.8rem 1rem; gap: 0.5rem; - border: 1px solid ${theme.color.lightgray2}; + border: 1px solid ${theme.color.lightgray1}; outline: none; border-radius: 10px; background-color: ${theme.color.white}; diff --git a/src/components/common/buttons/PayButton/PayButton.tsx b/src/components/common/buttons/PayButton/PayButton.tsx index 129f719d..65b11436 100644 --- a/src/components/common/buttons/PayButton/PayButton.tsx +++ b/src/components/common/buttons/PayButton/PayButton.tsx @@ -1,9 +1,11 @@ -import { IcKakaoPay, IcTossPay } from '@svg'; import { ButtonHTMLAttributes } from 'react'; -import { payButtonStyle, paySpanStyle } from './PayButton.style'; -import { getDeviceType } from 'src/utils/getDeviceType'; -import Toast from 'src/components/common/Toast/Toast'; + import { useToast } from '@hooks'; +import { IcKakaoPay, IcTossPay } from '@svg'; +import Toast from 'src/components/common/Toast/Toast'; +import { getDeviceType } from 'src/utils/getDeviceType'; + +import { payButtonStyle, paySpanStyle } from './PayButton.style'; export interface PayButtonProps extends ButtonHTMLAttributes { variant: 'toss' | 'kakao'; diff --git a/src/components/common/buttons/SelectButton/SelectButton.style.ts b/src/components/common/buttons/SelectButton/SelectButton.style.ts index 1bb95d41..b5f2039e 100644 --- a/src/components/common/buttons/SelectButton/SelectButton.style.ts +++ b/src/components/common/buttons/SelectButton/SelectButton.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const selectButtonContainer = css` diff --git a/src/components/common/buttons/ShareButton/ShareButton.style.ts b/src/components/common/buttons/ShareButton/ShareButton.style.ts index b30fce47..454c5c7b 100644 --- a/src/components/common/buttons/ShareButton/ShareButton.style.ts +++ b/src/components/common/buttons/ShareButton/ShareButton.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const buttonStyle = (theme: Theme) => css` diff --git a/src/components/common/buttons/ShareButton/ShareButton.tsx b/src/components/common/buttons/ShareButton/ShareButton.tsx index c1cf27e6..7bc75cf0 100644 --- a/src/components/common/buttons/ShareButton/ShareButton.tsx +++ b/src/components/common/buttons/ShareButton/ShareButton.tsx @@ -1,5 +1,7 @@ -import { IcShare } from '@svg'; import { ButtonHTMLAttributes } from 'react'; + +import { IcShare } from '@svg'; + import { buttonStyle, iconStyle } from './ShareButton.style'; export interface ShareButtonProps extends ButtonHTMLAttributes { diff --git a/src/components/common/buttons/SocialLoginButton/SocialLoginButton.style.ts b/src/components/common/buttons/SocialLoginButton/SocialLoginButton.style.ts index 89f115a0..091d82e8 100644 --- a/src/components/common/buttons/SocialLoginButton/SocialLoginButton.style.ts +++ b/src/components/common/buttons/SocialLoginButton/SocialLoginButton.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const buttonStyle = (theme: Theme) => css` diff --git a/src/components/common/buttons/SocialLoginButton/SocialLoginButton.tsx b/src/components/common/buttons/SocialLoginButton/SocialLoginButton.tsx index a93bed85..2d98ac7b 100644 --- a/src/components/common/buttons/SocialLoginButton/SocialLoginButton.tsx +++ b/src/components/common/buttons/SocialLoginButton/SocialLoginButton.tsx @@ -1,4 +1,5 @@ import React, { ButtonHTMLAttributes } from 'react'; + import { buttonStyle, iconWrapperStyle, kakaoStyle } from './SocialLoginButton.style'; export interface SocialLoginButtonProps extends ButtonHTMLAttributes { diff --git a/src/components/common/headers/Header/Header.style.ts b/src/components/common/headers/Header/Header.style.ts index 8feaa9ac..06202ff0 100644 --- a/src/components/common/headers/Header/Header.style.ts +++ b/src/components/common/headers/Header/Header.style.ts @@ -1,22 +1,22 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; -export const headerContainer = (isLine: boolean) => (theme: Theme) => - css` - position: fixed; - top: 0; - z-index: 2; - ${flexGenerator('row', 'space-between', 'center')}; - width: 100%; - max-width: 43rem; - height: 6rem; - padding: 0 2rem; - gap: 1rem; - - border-bottom: ${isLine ? `0.1rem solid ${theme.color.lightgray1}` : 'none'}; - - background-color: ${theme.color.white}; - `; +export const headerContainer = (isLine: boolean) => (theme: Theme) => css` + position: fixed; + top: 0; + z-index: 2; + ${flexGenerator('row', 'space-between', 'center')}; + width: 100%; + max-width: 43rem; + height: 6rem; + padding: 0 2rem; + gap: 1rem; + + border-bottom: ${isLine ? `0.1rem solid ${theme.color.lightgray1}` : 'none'}; + + background-color: ${theme.color.white}; +`; export const headerTitle = (theme: Theme) => css` ${flexGenerator('row', 'flex-start', 'center')} diff --git a/src/components/common/headers/Header/Header.tsx b/src/components/common/headers/Header/Header.tsx index c5ff49ba..108ee781 100644 --- a/src/components/common/headers/Header/Header.tsx +++ b/src/components/common/headers/Header/Header.tsx @@ -1,4 +1,6 @@ +import { useEasyNavigate } from '@hooks'; import { IcHome } from '@svg'; + import { centerWrapper, headerContainer, @@ -7,7 +9,6 @@ import { leftWrapper, rightWrapper, } from './Header.style'; -import { useEasyNavigate } from '@hooks'; interface HeaderProps { title: string; diff --git a/src/components/common/headers/LogoHeader/LogoHeader.style.ts b/src/components/common/headers/LogoHeader/LogoHeader.style.ts index 3adee2e1..ec78d4b3 100644 --- a/src/components/common/headers/LogoHeader/LogoHeader.style.ts +++ b/src/components/common/headers/LogoHeader/LogoHeader.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const logoHeaderWrapper = (theme: Theme) => css` diff --git a/src/components/common/headers/LogoHeader/LogoHeader.tsx b/src/components/common/headers/LogoHeader/LogoHeader.tsx index 66e8cbf7..9156d365 100644 --- a/src/components/common/headers/LogoHeader/LogoHeader.tsx +++ b/src/components/common/headers/LogoHeader/LogoHeader.tsx @@ -1,6 +1,7 @@ +import { useEasyNavigate } from '@hooks'; import { IcLogo, IcMypage } from '@svg'; + import { logoHeaderWrapper, iconStyle, logoWrapper } from './LogoHeader.style'; -import { useEasyNavigate } from '@hooks'; interface LogoHeaderProps { isIcon?: boolean; diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 9b1e7576..db705896 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -1,38 +1,40 @@ -import IconButton from './buttons/IconButton/IconButton'; -import SocialLoginButton from './buttons/SocialLoginButton/SocialLoginButton'; -import PayButton from './buttons/PayButton/PayButton'; -import Header from './headers/Header/Header'; -import NumberLabel from 'src/components/common/NumberLabel/NumberLabel'; -import ProgressBar from './ProgressBar/ProgressBar'; -import NavigateBox from './NavigateBox/NavigateBox'; +import ApplicantAccordion from 'src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion'; +import ApplicantAccordionList from 'src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList'; +import LogoHeader from 'src/components/common/headers/LogoHeader/LogoHeader'; +import Image from 'src/components/common/Image/Image'; +import ImageSelect from 'src/components/common/ImageSelect/ImageSelect'; +import Input from 'src/components/common/inputs/Input/Input'; import Notice from 'src/components/common/Notice/Notice'; -import QuestionText from 'src/components/common/QuestionText/QuestionText'; +import NumberLabel from 'src/components/common/NumberLabel/NumberLabel'; import QuestionInput from 'src/components/common/QuestionInput/QuestionInput'; -import SelectButton from './buttons/SelectButton/SelectButton'; -import Label from './Label/Label'; -import CategoryButton from './buttons/CategoryButton/CategoryButton'; -import InterestCategoryButton from './buttons/InterestCategoryButton/InterestCategoryButton'; -import ShareButton from './buttons/ShareButton/ShareButton'; -import Input from 'src/components/common/inputs/Input/Input'; +import QuestionText from 'src/components/common/QuestionText/QuestionText'; +import SimpleUserProfile from 'src/components/common/SimpleUserProfile/SimpleUserProfile'; import TextArea from 'src/components/common/TextArea/TextArea'; +import TimeSelect from 'src/components/common/TimeSelect/TimeSelect'; import Toast from 'src/components/common/Toast/Toast'; + +import Button from './buttons/Button/Button'; +import CategoryButton from './buttons/CategoryButton/CategoryButton'; import ClipboardCopyButton from './buttons/ClipboardCopyButton/ClipboardCopyButton'; -import Modal from './Modal/Modal'; +import IconButton from './buttons/IconButton/IconButton'; +import InterestCategoryButton from './buttons/InterestCategoryButton/InterestCategoryButton'; +import PayButton from './buttons/PayButton/PayButton'; +import SelectButton from './buttons/SelectButton/SelectButton'; +import ShareButton from './buttons/ShareButton/ShareButton'; +import SocialLoginButton from './buttons/SocialLoginButton/SocialLoginButton'; +import CategorySelectBox from './CategorySelectBox/CategorySelectBox'; +import CheckLabel from './CheckLabel/CheckLabel'; +import CountPeople from './CountPeople/CountPeople'; import DateSelect from './DateSelect/DateSelect'; +import ErrorBoundary from './ErrorBoundary/ErrorBoundary'; +import Header from './headers/Header/Header'; +import IconText from './IconText/IconText'; +import Label from './Label/Label'; +import Modal from './Modal/Modal'; +import NavigateBox from './NavigateBox/NavigateBox'; +import ProgressBar from './ProgressBar/ProgressBar'; import FilterSelect from './select/FilterSelect/FilterSelect'; -import CountPeople from './CountPeople/CountPeople'; -import Button from './buttons/Button/Button'; import Select from './select/Select/Select'; -import Carousel from './Carousel/Carousel'; -import ApplicantAccordion from 'src/components/common/applicantAccordions/ApplicantAccordion/ApplicantAccordion'; -import ApplicantAccordionList from 'src/components/common/applicantAccordions/ApplicantAccoridonList/ApplicantAccordionList'; -import Image from 'src/components/common/Image/Image'; -import LogoHeader from 'src/components/common/headers/LogoHeader/LogoHeader'; -import TimeSelect from 'src/components/common/TimeSelect/TimeSelect'; -import ImageSelect from 'src/components/common/ImageSelect/ImageSelect'; -import SimpleUserProfile from 'src/components/common/SimpleUserProfile/SimpleUserProfile'; -import IconText from './IconText/IconText'; -import CategorySelectBox from './CategorySelectBox/CategorySelectBox'; import { Spinner } from './Spinner/Spinner'; export { @@ -61,7 +63,6 @@ export { CategoryButton, InterestCategoryButton, ShareButton, - Carousel, ApplicantAccordion, ApplicantAccordionList, Image, @@ -72,4 +73,6 @@ export { IconText, CategorySelectBox, Spinner, + ErrorBoundary, + CheckLabel, }; diff --git a/src/components/common/inputs/AccountNumberInput/AccountNumberInput.tsx b/src/components/common/inputs/AccountNumberInput/AccountNumberInput.tsx index ac17e6cc..18c99e4f 100644 --- a/src/components/common/inputs/AccountNumberInput/AccountNumberInput.tsx +++ b/src/components/common/inputs/AccountNumberInput/AccountNumberInput.tsx @@ -1,4 +1,5 @@ import React from 'react'; + import Input from '../Input/Input'; interface AccountNumberInputProps { diff --git a/src/components/common/inputs/Input/Input.style.ts b/src/components/common/inputs/Input/Input.style.ts index b2e8e683..be55ebc4 100644 --- a/src/components/common/inputs/Input/Input.style.ts +++ b/src/components/common/inputs/Input/Input.style.ts @@ -1,52 +1,71 @@ import { css, Theme } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const inputContainerStyle = css` + ${flexGenerator('column', 'center', 'flex-start')} + gap: 0.3rem; + width: 100%; +`; + +export const labelAndInputWrapper = css` ${flexGenerator('column', 'center', 'flex-start')} gap: 0.8rem; width: 100%; + min-width: 33.5rem; `; export const inputLabelStyle = (theme: Theme) => css` - ${theme.font['subhead03-m-16']} + color: ${theme.color.midgray2}; + ${theme.font['subhead05-sb-14']} padding: 0 0.5rem; `; export const inputWrapperStyle = css` ${flexGenerator('row', 'flex-start', 'center')} + width: 100%; position: relative; +`; + +export const inputStyle = (isError: boolean, isFocused: boolean) => (theme: Theme) => css` width: 100%; + height: 5.2rem; + padding: 1.5rem; + padding-right: 6rem; + border: 1px solid ${isError && isFocused ? theme.color.error : theme.color.lightgray1}; + border-radius: 10px; + + color: ${theme.color.blackgray}; + background-color: ${theme.color.white}; + ${theme.font['body01-r-15']} + + &::placeholder { + color: ${theme.color.midgray1}; + ${theme.font['body06-m-15']} + } + + &:focus { + outline: none; + } +`; + +export const deleteButtonStyle = css` + position: absolute; + right: 1.5rem; + width: 2rem; + height: 2rem; + cursor: pointer; `; -export const inputStyle = (isError: boolean, isFocused: boolean) => (theme: Theme) => - css` - width: 100%; - height: 5.2rem; - padding: 1.5rem; - padding-right: 6rem; - border: 1px solid ${isError && isFocused ? theme.color.error : theme.color.lightgray1}; - border-radius: 10px; - - color: ${theme.color.darkgray}; - background-color: ${theme.color.white}; - ${theme.font['body01-r-15']} - - &::placeholder { - color: ${theme.color.midgray1}; - } - - &:focus { - outline: none; - } - `; - -export const textLengthStyle = (isError: boolean, isFocused: boolean) => (theme: Theme) => - css` - position: absolute; - right: 1.5rem; - color: ${isError && isFocused ? theme.color.error : theme.color.midgray1}; - ${theme.font['body02-r-14']} - `; +export const errorAndLengthWrapper = (hasError: boolean) => css` + ${flexGenerator('row', `${hasError ? 'space-between' : 'flex-end'}`, 'center')} + width: 100%; +`; + +export const textLengthStyle = (isError: boolean, isFocused: boolean) => (theme: Theme) => css` + color: ${isError && isFocused ? theme.color.error : theme.color.midgray1}; + ${theme.font['body02-r-14']} +`; export const errorMessageStyle = (theme: Theme) => css` color: ${theme.color.error}; diff --git a/src/components/common/inputs/Input/Input.tsx b/src/components/common/inputs/Input/Input.tsx index c11f8063..c97bc45a 100644 --- a/src/components/common/inputs/Input/Input.tsx +++ b/src/components/common/inputs/Input/Input.tsx @@ -1,4 +1,7 @@ -import { InputHTMLAttributes, forwardRef, useState } from 'react'; +import React, { InputHTMLAttributes, forwardRef, useState } from 'react'; + +import { IcDelete20 } from '@svg'; + import { inputContainerStyle, inputLabelStyle, @@ -6,7 +9,10 @@ import { inputStyle, textLengthStyle, errorMessageStyle, -} from 'src/components/common/inputs/Input/Input.style'; + errorAndLengthWrapper, + deleteButtonStyle, + labelAndInputWrapper, +} from './Input.style'; export interface InputProps extends InputHTMLAttributes { value: string; @@ -48,6 +54,12 @@ const Input = forwardRef( } }; + const handleInputDelete = (e: React.MouseEvent) => { + e.preventDefault(); + onChange({ target: { value: '' } } as React.ChangeEvent); + setMaxLengthError(false); + }; + // TODO: constants 파일에 분리하기! // 글자 수 에러 메시지 const textLengthErrorMessage = `* 글자 수 ${maxLength} 이하로 입력해주세요.`; @@ -61,31 +73,39 @@ const Input = forwardRef( } const isError = maxLengthError || !isValid; + const hasError = maxLengthError || (isFocused && !isValid); return (
- {inputLabel && {inputLabel}} -
- setIsFocused(true)} - onBlur={() => setIsFocused(false)} - /> - {isCountValue ? ( +
+ {inputLabel && {inputLabel}} +
+ setIsFocused(true)} + onBlur={() => setIsFocused(false)} + /> + {isFocused && value.length > 0 && ( +
+ +
+ )} +
+
+
+ {isFocused && displayErrorMessage && ( + {displayErrorMessage} + )} + {isCountValue && ( {value.length}/{maxLength} - ) : ( - '' )}
- {isFocused && displayErrorMessage && ( - {displayErrorMessage} - )}
); } diff --git a/src/components/common/select/FilterSelect/FilterSelect.style.ts b/src/components/common/select/FilterSelect/FilterSelect.style.ts index c2993792..837eb009 100644 --- a/src/components/common/select/FilterSelect/FilterSelect.style.ts +++ b/src/components/common/select/FilterSelect/FilterSelect.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const selectContainer = (theme: Theme) => css` @@ -16,9 +17,13 @@ export const selectContainer = (theme: Theme) => css` background: ${theme.color.white}; `; -export const iconStyle = css` +export const iconStyle = (theme: Theme) => css` width: 2.4rem; height: 2.4rem; + + path { + stroke: ${theme.color.midgray1}; + } `; export const sortList = (theme: Theme) => css` diff --git a/src/components/common/select/FilterSelect/FilterSelect.tsx b/src/components/common/select/FilterSelect/FilterSelect.tsx index b84203c3..3812626f 100644 --- a/src/components/common/select/FilterSelect/FilterSelect.tsx +++ b/src/components/common/select/FilterSelect/FilterSelect.tsx @@ -1,4 +1,7 @@ import { useState } from 'react'; + +import { IcDropdownDown, IcDropdownUp } from '@svg'; + import { iconStyle, selectContainer, @@ -6,7 +9,6 @@ import { sortList, selectedOptionStyle, } from './FilterSelect.style'; -import { IcDropdownDown, IcDropdownUp } from '@svg'; interface SelectProps { options: string[]; diff --git a/src/components/common/select/Select/Select.style.ts b/src/components/common/select/Select/Select.style.ts index 5ff079b4..a049a153 100644 --- a/src/components/common/select/Select/Select.style.ts +++ b/src/components/common/select/Select/Select.style.ts @@ -1,4 +1,5 @@ import { Theme, css } from '@emotion/react'; + import { flexGenerator } from '@styles/generator'; export const selectContainer = (theme: Theme) => css` @@ -16,9 +17,13 @@ export const selectContainer = (theme: Theme) => css` background: ${theme.color.white}; `; -export const iconStyle = css` +export const iconStyle = (theme: Theme) => css` width: 2.4rem; height: 2.4rem; + + path { + fill: ${theme.color.midgray1}; + } `; export const sortList = (theme: Theme) => css` @@ -45,7 +50,7 @@ export const sortItem = (theme: Theme) => css` cursor: pointer; color: ${theme.color.darkgray}; - ${theme.font['body01-r-15']}; + ${theme.font['body06-m-15']}; &:hover { background-color: ${theme.color.lightgray1}; @@ -54,10 +59,10 @@ export const sortItem = (theme: Theme) => css` export const placeholderStyle = (theme: Theme) => css` color: ${theme.color.midgray1}; - ${theme.font['body01-r-15']}; + ${theme.font['body06-m-15']}; `; export const selectedOptionStyle = (theme: Theme) => css` color: ${theme.color.darkgray}; - ${theme.font['body01-r-15']}; + ${theme.font['body06-m-15']}; `; diff --git a/src/components/common/select/Select/Select.tsx b/src/components/common/select/Select/Select.tsx index 892022ef..908024d2 100644 --- a/src/components/common/select/Select/Select.tsx +++ b/src/components/common/select/Select/Select.tsx @@ -1,4 +1,7 @@ import { useState } from 'react'; + +import { IcDropdownPlatformDown, IcDropdownPlatformUp } from '@svg'; + import { iconStyle, placeholderStyle, @@ -7,7 +10,6 @@ import { sortItem, sortList, } from './Select.style'; -import { IcDropdownPlatformDown, IcDropdownPlatformUp } from '@svg'; interface SelectProps { placeholder?: string; @@ -24,7 +26,7 @@ const Select = ({ placeholder, options, value, onChange }: SelectProps) => { }; const handleOptionClick = (option: string) => { - onChange(option) + onChange(option); setIsOpen(false); }; @@ -32,7 +34,9 @@ const Select = ({ placeholder, options, value, onChange }: SelectProps) => { return (
- {value ? value : placeholder} + + {value ? value : placeholder} + {isOpen ? : } {isOpen && (
    diff --git a/src/constants/category.tsx b/src/constants/category.tsx index fbe653eb..a43c0fb2 100644 --- a/src/constants/category.tsx +++ b/src/constants/category.tsx @@ -1,3 +1,5 @@ +import { ReactNode } from 'react'; + import { IcEmploymentSmall, IcHealthSmall, @@ -10,7 +12,6 @@ import { IcProductivitySmall, IcStartupSmall, } from '@svg'; -import { ReactNode } from 'react'; interface CategoryIcon { [key: string]: { diff --git a/src/constants/images/graphics.ts b/src/constants/images/graphics.ts index c824e304..aa880777 100644 --- a/src/constants/images/graphics.ts +++ b/src/constants/images/graphics.ts @@ -8,4 +8,5 @@ export const HostMyPageImage = '/image/graphics/image_host_mypage.png'; export const HostApplyFinishImage = '/image/graphics/image_hostapply_finish.png'; export const LoginImage = '/image/graphics/image_login.png'; export const NoticeImage = '/image/graphics/image_notice.png'; -export const ReviewImage = '/image/graphics/image_review.png'; +export const ReviewFinishImage = '/image/graphics/image_review_finish.png'; +export const ReviewEmptyImage = '/image/graphics/image_review_empty.png'; diff --git a/src/constants/images/index.ts b/src/constants/images/index.ts index 4032cebc..0ad86d30 100644 --- a/src/constants/images/index.ts +++ b/src/constants/images/index.ts @@ -1,3 +1,6 @@ export const CheckModalImage = '/image/icons/image_check_modal.png'; export const GuestProfileImage = '/image/profile/image_guest_profile.png'; export const HostProfileImage = '/image/profile/image_host_profile.png'; +export const PicksightBanner = '/image/banners/picksight-banner.png'; +export const PicksightMain = '/image/banners/picksight-main.png'; +export const PicksightImage = '/image/banners/picksight-image.png'; diff --git a/src/constants/index.ts b/src/constants/index.ts index 439eb572..96050dde 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1,6 +1,6 @@ -import routePath from './routePath'; -import * as graphicImage from './images/graphics'; -import * as images from './images'; import { CATEGORY_ICON, CATEGORY_NAME, CATEGORY_SMALL_ICON } from './category'; +import * as images from './images'; +import * as graphicImage from './images/graphics'; +import routePath from './routePath'; export { routePath, graphicImage, images, CATEGORY_ICON, CATEGORY_NAME, CATEGORY_SMALL_ICON }; diff --git a/src/constants/mocks/HostMyClassCardData.ts b/src/constants/mocks/HostMyClassCardData.ts index 5bdb38ec..8674126a 100644 --- a/src/constants/mocks/HostMyClassCardData.ts +++ b/src/constants/mocks/HostMyClassCardData.ts @@ -1,27 +1,27 @@ -import { components } from '@schema'; +// import { components } from '@schema'; -type MoimListByHostGetResponse = components['schemas']['MoimListByHostGetResponse']; +// type MoimListByHostGetResponse = components['schemas']['MoimListByHostGetResponse']; -export const hostMyClassCardData: MoimListByHostGetResponse[] = [ - { - moimId: 1, - title: '부산10년 토박이 달아오르구마', - approvedGuest: 1, - maxGuest: 8, - moimImage: 'https://placehold.co/300', - }, - { - moimId: 2, - title: '부산10년 토박이 달아오르구마와 함께하는 사투리 모임', - approvedGuest: 8, - maxGuest: 10, - moimImage: 'https://placehold.co/300', - }, - { - moimId: 3, - title: '부산10년 토박이 달아오르구마와 함께하는 사투리 모임', - approvedGuest: 12, - maxGuest: 15, - moimImage: 'https://placehold.co/300', - }, -]; +// export const hostMyClassCardData: MoimListByHostGetResponse[] = [ +// { +// moimId: 1, +// title: '부산10년 토박이 달아오르구마', +// approvedGuest: 1, +// maxGuest: 8, +// moimImage: 'https://placehold.co/300', +// }, +// { +// moimId: 2, +// title: '부산10년 토박이 달아오르구마와 함께하는 사투리 모임', +// approvedGuest: 8, +// maxGuest: 10, +// moimImage: 'https://placehold.co/300', +// }, +// { +// moimId: 3, +// title: '부산10년 토박이 달아오르구마와 함께하는 사투리 모임', +// approvedGuest: 12, +// maxGuest: 15, +// moimImage: 'https://placehold.co/300', +// }, +// ]; diff --git a/src/constants/mocks/classApplyQuestionData.ts b/src/constants/mocks/classApplyQuestionData.ts index 9313d732..9b81e7b6 100644 --- a/src/constants/mocks/classApplyQuestionData.ts +++ b/src/constants/mocks/classApplyQuestionData.ts @@ -1,7 +1,7 @@ export const classApplyQuestionData = { - data: { - "question1": "저의 클래스에 참여하신적이 있으신가요?", - "question2": "비슷한 클래스에 참여하신적이 있나요?", - "question3": "비슷한 클래스에 참여하신적이 있나요?" - } -} \ No newline at end of file + data: { + question1: '저의 클래스에 참여하신적이 있으신가요?', + question2: '비슷한 클래스에 참여하신적이 있나요?', + question3: '비슷한 클래스에 참여하신적이 있나요?', + }, +}; diff --git a/src/constants/mocks/hostInfoCardData.ts b/src/constants/mocks/hostInfoCardData.ts index 336e8d4d..1ef31f5a 100644 --- a/src/constants/mocks/hostInfoCardData.ts +++ b/src/constants/mocks/hostInfoCardData.ts @@ -5,6 +5,6 @@ export const HOST_INFO_DATA = { hostCategories: { category1: 'investment', category2: 'investment', - category3: null + category3: null, }, }; diff --git a/src/constants/routePath.ts b/src/constants/routePath.ts index cc9faca9..e9a9f704 100644 --- a/src/constants/routePath.ts +++ b/src/constants/routePath.ts @@ -7,18 +7,20 @@ const homePages = { HOME: '/', }; -const categoriesPages = { - CATEGORY: '/categories', +const articlePages = { + ARTICLE_PICKSIGHT: '/article/picksight', +}; + +const classListPages = { + CLASS_LIST: '/class-list', }; const classPages = { CLASS_DETAIL: '/class/:moimId', CLASS_NOTICE_POST: '/class/:moimId/notice/post', CLASS_POST: '/class/post/:step', - CLASS_APPLY_RULE: '/class/:moimId/apply/rule', - CLASS_APPLY_QUESTION: '/class/:moimId/apply/question', - CLASS_APPLY_DEPOSIT: '/class/:moimId/apply/deposit', - CLASS_APPLY_COMPLETE: '/class/:moimId/apply/complete', + CLASS_APPLY: '/class/:moimId/apply', + CLASS_NOTICE_DETAIL: '/class/:moimId/notice/:noticeId', }; const myPagePages = { @@ -27,12 +29,14 @@ const myPagePages = { }; const guestPages = { - GUEST_MY_CLASS: '/guest/myclass', + GUEST_MY_CLASS: '/mypage/guest/myclass', + GUEST_MY_CLASS_REVIEW_WRITE: '/mypage/guest/myclass/:moimId/review/write', + GUEST_MY_CLASS_REVIEW_COMPLETE: '/mypage/guest/myclass/:moimId/review/complete', }; const hostPages = { - HOST_MY_CLASS: '/host/myclass', - HOST_MY_CLASS_MANAGE: '/host/myclass/manage/:moimId', + HOST_MY_CLASS: '/mypage/host/myclass', + HOST_MY_CLASS_MANAGE: '/mypage/host/myclass/manage/:moimId', HOST_APPLY: '/host/apply/:step', }; @@ -47,12 +51,13 @@ const errorPages = { const adminPages = { ADMIN: '/pickple-admin', -} +}; export default { ...authPages, ...homePages, - ...categoriesPages, + ...articlePages, + ...classListPages, ...classPages, ...myPagePages, ...guestPages, diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 0f6a0ce3..1f708c12 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,6 +1,8 @@ +import useClickOutside from './useClickOutside'; +import useClipboard from './useCopyClip'; import useEasyNavigate from './useEasyNavigate'; import useToast from './useToast'; import useWindowSize from './useWindowSize'; -import useClipboard from './useCopyClip'; +import wrapRoutes from './useWrapRoutes'; -export { useEasyNavigate, useToast, useWindowSize, useClipboard }; +export { useEasyNavigate, useToast, useWindowSize, useClipboard, wrapRoutes, useClickOutside }; diff --git a/src/hooks/useClickOutside.ts b/src/hooks/useClickOutside.ts new file mode 100644 index 00000000..34299fe5 --- /dev/null +++ b/src/hooks/useClickOutside.ts @@ -0,0 +1,22 @@ +import { useEffect, useRef } from 'react'; + +const useClickOutside = (onClickOutside: () => void) => { + const ref = useRef(null); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (ref.current && !ref.current.contains(event.target as Node)) { + onClickOutside(); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [onClickOutside]); + + return ref; +}; + +export default useClickOutside; diff --git a/src/hooks/useEasyNavigate.ts b/src/hooks/useEasyNavigate.ts index f507ef0c..f7f9d5fa 100644 --- a/src/hooks/useEasyNavigate.ts +++ b/src/hooks/useEasyNavigate.ts @@ -1,4 +1,5 @@ import { useNavigate } from 'react-router-dom'; + import { routePath } from '@constants'; const useEasyNavigate = () => { @@ -12,8 +13,8 @@ const useEasyNavigate = () => { navigate(routePath.HOME); }; - const goCategories = () => { - navigate(routePath.CATEGORY); + const goClassList = () => { + navigate(routePath.CLASS_LIST); }; const goHostMyPage = () => { @@ -27,7 +28,7 @@ const useEasyNavigate = () => { return { goBack, goHome, - goCategories, + goClassList, goHostMyPage, goGuestMyPage, }; diff --git a/src/hooks/useWrapRoutes.tsx b/src/hooks/useWrapRoutes.tsx new file mode 100644 index 00000000..1928fd12 --- /dev/null +++ b/src/hooks/useWrapRoutes.tsx @@ -0,0 +1,33 @@ +import { QueryErrorResetBoundary } from '@tanstack/react-query'; +import { ReactNode, Suspense } from 'react'; + +import { ErrorBoundary, Spinner } from '@components'; +import { Error } from '@pages/error'; + +interface wrapRoutesWithErrorBoundaryProps { + element: ReactNode; +} + +const wrapRoutes = (routes: wrapRoutesWithErrorBoundaryProps[]) => { + return routes.map((route) => { + return { + ...route, + element: ( + + {({ reset }) => ( + { + console.error('Caught by ErrorBoundary:', error); + return ; + }}> + }>{route.element} + + )} + + ), + }; + }); +}; + +export default wrapRoutes; diff --git a/src/main.tsx b/src/main.tsx index 5a0654ac..23145733 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,6 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; + import App from './App.tsx'; ReactDOM.createRoot(document.getElementById('root')!).render( diff --git a/src/pages/admin/components/HostSubmitter/HostSubmitter.style.ts b/src/pages/admin/components/HostSubmitter/HostSubmitter.style.ts new file mode 100644 index 00000000..4be4a788 --- /dev/null +++ b/src/pages/admin/components/HostSubmitter/HostSubmitter.style.ts @@ -0,0 +1,47 @@ +import { css, Theme } from '@emotion/react'; + +import { flexGenerator } from '@styles/generator'; + +export const tableLayoutStyle = css` + ${flexGenerator('column', 'flex-start', 'flex-start')} + gap: 1rem; + flex-wrap: wrap; + padding: 3rem 2rem; +`; + +export const tableContainerStyle = css` + border-collapse: collapse; + width: 100%; +`; + +export const tableStyle = css` + border-collapse: collapse; + table-layout: fixed; + width: 100%; +`; + +export const titleStyle = (theme: Theme) => css` + ${theme.font['subhead01-sb-18']} +`; + +export const trStyle = (theme: Theme) => css` + & > th { + background-color: #f2f2f2; + padding: 0.5rem; + text-align: center; + vertical-align: middle; + word-break: keep-all; + border: 1px solid ${theme.color.lightgray1}; + ${theme.font['subhead05-sb-14']} + + max-width: 10rem; + } + + & > td { + padding: 0.5rem; + text-align: center; + border: 1px solid ${theme.color.lightgray0}; + word-break: break-all; + ${theme.font['subhead06-m-14']} + } +`; diff --git a/src/pages/admin/components/HostSubmitter/HostSubmitter.tsx b/src/pages/admin/components/HostSubmitter/HostSubmitter.tsx new file mode 100644 index 00000000..1c80bef0 --- /dev/null +++ b/src/pages/admin/components/HostSubmitter/HostSubmitter.tsx @@ -0,0 +1,80 @@ +import { useFetchHostSubmitterList } from '@apis/domains/submitter/useFetchHostSubmitterList'; +import { usePatchHostSubmitter } from '@apis/domains/submitter/usePatchHostSubmitter'; + +import { + tableContainerStyle, + tableLayoutStyle, + tableStyle, + titleStyle, + trStyle, +} from '@pages/admin/components/HostSubmitter/HostSubmitter.style'; + +const SUBMITTER_STATUS = { + approve: '승인 완료', + pending: '승인 대기', +}; + +const HostSubmitter = () => { + const { data: hostSubmitterList } = useFetchHostSubmitterList() || []; + const { mutate } = usePatchHostSubmitter(); + + const handleButtonClick = (submitterId: number) => { + mutate({ submitterId }); + }; + + return ( +
    +

    PICKPLE 스픽커 승인

    +
    + + + + + + + + + + + + + + + + + + + {hostSubmitterList?.map((item, index) => ( + + + + + + + + + + + + + + + ))} + +
    신청 순서게스트 ID닉네임[1] 호스트 소개[2] 모임 목표[3] 호스트 설명 링크[4] 호스트 닉네임[5] 키워드 [6] 모임 계획[7] 이메일 상태 승인여부
    {item.submitterId}{item.guestId}{item.guestNickname}{item.intro}{item.goal} + + {item.link} + + {item.nickname}{item.userKeyword}{item.plan}{item.email}{SUBMITTER_STATUS[item.submitterState as keyof typeof SUBMITTER_STATUS]} + {item.submitterState === 'approve' ? ( +
    승인
    + ) : ( + + )} +
    +
    +
    + ); +}; + +export default HostSubmitter; diff --git a/src/pages/admin/components/MoimSubmitter/MoimSubmitter.style.ts b/src/pages/admin/components/MoimSubmitter/MoimSubmitter.style.ts new file mode 100644 index 00000000..448464e4 --- /dev/null +++ b/src/pages/admin/components/MoimSubmitter/MoimSubmitter.style.ts @@ -0,0 +1,45 @@ +import { css, Theme } from '@emotion/react'; + +import { flexGenerator } from '@styles/generator'; + +export const tableLayoutStyle = css` + ${flexGenerator('column', 'flex-start', 'flex-start')} + gap: 1rem; + flex-wrap: wrap; + padding: 3rem 2rem; +`; + +export const tableContainerStyle = css` + border-collapse: collapse; + width: 100%; +`; + +export const tableStyle = css` + border-collapse: collapse; + table-layout: fixed; + width: 100%; +`; + +export const titleStyle = (theme: Theme) => css` + ${theme.font['subhead01-sb-18']} +`; + +export const thStyle = (theme: Theme) => css` + background-color: #f2f2f2; + padding: 0.5rem; + text-align: center; + vertical-align: middle; + word-break: keep-all; + border: 1px solid ${theme.color.lightgray1}; + ${theme.font['subhead05-sb-14']} + + max-width: 10rem; +`; + +export const tdStyle = (theme: Theme) => css` + padding: 0.5rem; + text-align: center; + border: 1px solid ${theme.color.lightgray0}; + word-break: break-all; + ${theme.font['subhead06-m-14']} +`; diff --git a/src/pages/admin/components/MoimSubmitter/MoimSubmitter.tsx b/src/pages/admin/components/MoimSubmitter/MoimSubmitter.tsx new file mode 100644 index 00000000..8e4742d5 --- /dev/null +++ b/src/pages/admin/components/MoimSubmitter/MoimSubmitter.tsx @@ -0,0 +1,109 @@ +import { useEffect } from 'react'; + +import { useFetchMoimSubmitterList } from '@apis/domains/submitter/useFetchMoimSubmitter'; +import { usePatchMoimSubmitter } from '@apis/domains/submitter/usePatchMoimSubmitter'; + +import { + tableContainerStyle, + tableLayoutStyle, + tableStyle, + tdStyle, + thStyle, + titleStyle, +} from '@pages/admin/components/MoimSubmitter/MoimSubmitter.style'; + +const MOIM_SUBMITTER_STATUS = { + pendingPayment: '입금 대기', + pendingApproval: '승인 대기', +}; + +const MoimSubmitter = () => { + const { data: moimSubmitterList, refetch } = useFetchMoimSubmitterList() || []; + const { mutate } = usePatchMoimSubmitter(); + + useEffect(() => { + refetch(); + }, [moimSubmitterList, refetch]); + + if (moimSubmitterList === null || moimSubmitterList === undefined) { + return null; + } + + const handleButtonClick = (moimSubmissionId: number) => { + mutate( + { moimSubmissionId }, + { + onSuccess: () => { + refetch(); + }, + } + ); + }; + return ( +
    +

    PICKPLE 참가자 입금 확인

    +
    + + + + + + + + + + + + + + + + + + + + + + + {moimSubmitterList.map((item, index) => ( + + + + + + + + + + + + + + + + + + + ))} + +
    신청 순서신청 일시참가자 ID닉네임카카오 닉네임클래스 ID클래스명스픽커명[1] 질문[1] 답변 [2] 질문[2] 답변 [3] 질문[3] 답변상태승인여부
    {item.moimSubmissionId}{item.date}{item.guestId}{item.guestNickname}{item.kakaoNickname}{item.moimId}{item.moimTitle}{item.hostNickname}{item.questionList?.question1}{item.answerList?.answer1}{item.questionList?.question2}{item.answerList?.answer2}{item.questionList?.question3}{item.answerList?.answer3} + { + MOIM_SUBMITTER_STATUS[ + item.moimSubmissionState as keyof typeof MOIM_SUBMITTER_STATUS + ] + } + + {item.moimSubmissionState === 'pendingApproval' ? ( +
    확인
    + ) : ( + + )} +
    +
    +
    + ); +}; + +export default MoimSubmitter; diff --git a/src/pages/admin/page/AdminPage/AdminPage.style.ts b/src/pages/admin/page/AdminPage/AdminPage.style.ts new file mode 100644 index 00000000..36f8a3e1 --- /dev/null +++ b/src/pages/admin/page/AdminPage/AdminPage.style.ts @@ -0,0 +1,52 @@ +import { css, Theme } from '@emotion/react'; + +import { flexGenerator } from '@styles/generator'; + +export const adminLayoutStyle = (theme: Theme) => css` + ${flexGenerator('row', 'flex-start', 'flex-start')} + position: absolute; + right: 0; + top: 0; + width: 100vw; + height: 100vh; + background-color: ${theme.color.white}; +`; + +export const tapLayoutStyle = (theme: Theme) => css` + ${flexGenerator('column', 'flex-start', 'flex-start')} + min-width: 20rem; + height: 100%; + background-color: ${theme.color.lightgray0}; +`; + +export const tabTextStyle = (theme: Theme) => css` + ${theme.font['subhead06-m-14']} + padding: 2rem; +`; + +export const tabButtonStyle = (theme: Theme) => css` + width: 100%; + height: 5rem; + background-color: ${theme.color.lightgray0}; + border: 1px solid ${theme.color.black}; + + :active { + background-color: ${theme.color.lightgray1}; + } +`; + +export const inputLayoutStyle = (theme: Theme) => css` + ${flexGenerator('column', 'center', 'center')} + gap: 1rem; + height: 50%; + ${theme.font['subhead05-sb-14']} +`; + +export const titleStyle = (theme: Theme) => css` + ${theme.font['body01-r-15']} +`; + +export const inputStyle = css` + width: 30rem; + height: 4rem; +`; diff --git a/src/pages/admin/page/AdminPage/AdminPage.tsx b/src/pages/admin/page/AdminPage/AdminPage.tsx new file mode 100644 index 00000000..d5b89f1d --- /dev/null +++ b/src/pages/admin/page/AdminPage/AdminPage.tsx @@ -0,0 +1,61 @@ +import { useState } from 'react'; + +import HostSubmitter from '@pages/admin/components/HostSubmitter/HostSubmitter'; +import MoimSubmitter from '@pages/admin/components/MoimSubmitter/MoimSubmitter'; +import { + adminLayoutStyle, + inputLayoutStyle, + inputStyle, + tabButtonStyle, + tabTextStyle, + tapLayoutStyle, + titleStyle, +} from '@pages/admin/page/AdminPage/AdminPage.style'; + +const AdminPage = () => { + const [password, setPassword] = useState(''); + const [isHostSubmitterPage, setIsHostSubmitterPage] = useState(true); + const isVerified = password === import.meta.env.VITE_ADMIN_PASSWORD; + + console.log('isVerified', isVerified); + const handleInputChange = (event: React.ChangeEvent) => { + setPassword(event.target.value); + }; + + const handleButtonClick = (page: string) => { + if (page === 'hostSubmitter') { + setIsHostSubmitterPage(true); + } + + if (page === 'moimSubmitter') { + setIsHostSubmitterPage(false); + } + }; + + return ( +
    + {isVerified ? ( +
    +
    +

    PICKPLE

    + + +
    + + {isHostSubmitterPage ? : } +
    + ) : ( +
    + 관리자 비밀번호를 입력하세요 + +
    + )} +
    + ); +}; + +export default AdminPage; diff --git a/src/pages/admin/page/HostSubmitter/HostSubmitter.style.ts b/src/pages/admin/page/HostSubmitter/HostSubmitter.style.ts deleted file mode 100644 index 6a04eb9e..00000000 --- a/src/pages/admin/page/HostSubmitter/HostSubmitter.style.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { css, Theme } from '@emotion/react'; -import { flexGenerator } from '@styles/generator'; - -export const adminLayoutStyle = (theme: Theme) =>css` - position: absolute; - right: 0; - top: 0; - width: 100vw; - height: 100vh; - background-color: ${theme.color.white}; -` - -export const tableLayoutStyle = css` - ${flexGenerator('column', 'flex-start', 'flex-start')} - gap: 1rem; - flex-wrap: wrap; - padding: 3rem 2rem; -`; - -export const inputLayoutStyle = (theme: Theme) => css` -${flexGenerator('column', 'center', 'center')} -gap: 1rem; -height: 50%; -${theme.font['subhead05-sb-14']} -` - -export const commonContainerStyle = css` -${flexGenerator('column', 'center', 'center')} -` - -export const tableContainerStyle = css` - border-collapse: collapse; - width: 100%; -`; - -export const tableStyle = css` - border-collapse: collapse; - table-layout: fixed; - width: 100%; -`; - -export const titleStyle = (theme: Theme) => css` - ${theme.font['body01-r-15']} -`; - -export const thStyle = (theme: Theme) => css` - background-color: #f2f2f2; - padding: 0.5rem; - text-align: center; - vertical-align: middle; - border: 1px solid ${theme.color.lightgray1}; - ${theme.font['subhead02-sb-16']} - - max-width: 10rem; -`; - -export const thLargeStyle = (theme: Theme) => css` - background-color: #f2f2f2; - padding: 0.5rem; - text-align: center; - vertical-align: middle; - border: 1px solid #ddd; - ${theme.font['subhead02-sb-16']} - - width: 20rem; -`; - -export const tdStyle = (theme: Theme) => css` - padding: 0.5rem; - text-align: center; - border: 1px solid #ddd; - ${theme.font['subhead03-m-16']} - -`; - -export const inputStyle = css` -width: 30rem; -height: 4rem; -` \ No newline at end of file diff --git a/src/pages/admin/page/HostSubmitter/HostSubmitter.tsx b/src/pages/admin/page/HostSubmitter/HostSubmitter.tsx deleted file mode 100644 index 4195e38e..00000000 --- a/src/pages/admin/page/HostSubmitter/HostSubmitter.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import { useFetchHostSubmitterList } from '@apis/domains/submitter/useFetchHostSubmitterList'; -import { usePatchHostSubmitter } from '@apis/domains/submitter/usePatchHostSubmitter'; -import { CATEGORY_NAME } from '@constants'; -import { - adminLayoutStyle, - inputLayoutStyle, - inputStyle, - tableContainerStyle, - tableLayoutStyle, - tableStyle, - tdStyle, -thStyle -} from '@pages/admin/page/HostSubmitter/HostSubmitter.style'; -import { titleStyle } from '@pages/auth/page/Login/Login.style'; -import { useEffect, useState } from 'react'; - -const SUBMITTER_STATUS = { - approve: '승인 완료', - pending: '승인 대기', -}; - -const HostSubmitter = () => { - const { data: hostSubmitterList, refetch } = useFetchHostSubmitterList() || []; - const { mutate } = usePatchHostSubmitter(); - const [isVerified, setIsVerified] = useState(false); - const [password, setPassword] = useState(''); - - useEffect(() => { - refetch(); - }, [hostSubmitterList, refetch]); - - if (hostSubmitterList === null || hostSubmitterList === undefined) { - return null; - } - - const handleInputChange = (event: React.ChangeEvent) => { - setPassword(event.target.value); - - if (event.target.value === import.meta.env.VITE_ADMIN_PASSWORD) { - setIsVerified(true); - } - }; - - const handleButtonClick = (submitterId: number) => { - mutate( - { submitterId }, - { - onSuccess: () => { - refetch(); - }, - } - ); - }; - - return ( -
    - {isVerified ? ( -
    -

    PickPle 호스트 승인

    -
    - - - - - - - - - - - - - - - - - - - {hostSubmitterList.map((item, index) => ( - - - - - - - - - - - - - - - ))} - -
    신청 순서게스트 ID닉네임[1] 호스트 소개[2] 모임 목표[3] 호스트 설명 링크[4] 호스트 닉네임[5] 카테고리 [6] 모임 계획[7] 이메일 상태 승인여부
    {item.submitterId}{item.guestId}{item.guestNickname}{item.intro}{item.goal} - - {item.link} - - {item.nickname} - {Object.values(item.categoryList || {}) - .map((value) => CATEGORY_NAME[value]) - .join(', ')} - {item.plan}{item.email} - {SUBMITTER_STATUS[item.submitterState as keyof typeof SUBMITTER_STATUS]} - - {item.submitterState === 'approve' ? ( -
    승인
    - ) : ( - - )} -
    -
    -
    - ) : ( -
    - 관리자 비밀번호를 입력하세요 - -
    - )} -
    - ); -}; - -export default HostSubmitter; diff --git a/src/pages/article/components/ArticleParagraph/ArticleParagraph.style.ts b/src/pages/article/components/ArticleParagraph/ArticleParagraph.style.ts new file mode 100644 index 00000000..dae2738e --- /dev/null +++ b/src/pages/article/components/ArticleParagraph/ArticleParagraph.style.ts @@ -0,0 +1,20 @@ +import { Theme, css } from '@emotion/react'; + +import { flexGenerator } from '@styles/generator'; + +export const articleContainer = css` + ${flexGenerator('column', 'flex-start', 'flex-start')}; + gap: 1rem; + padding-top: 3.8rem; +`; + +export const articleTitle = (theme: Theme) => css` + color: ${theme.color.blackgray}; + ${theme.font['subhead01-sb-18']} +`; + +export const articleCotent = (theme: Theme) => css` + color: ${theme.color.midgray2}; + ${theme.font['body07-r-15']} + white-space: pre-wrap; +`; diff --git a/src/pages/article/components/ArticleParagraph/ArticleParagraph.tsx b/src/pages/article/components/ArticleParagraph/ArticleParagraph.tsx new file mode 100644 index 00000000..a08b063c --- /dev/null +++ b/src/pages/article/components/ArticleParagraph/ArticleParagraph.tsx @@ -0,0 +1,17 @@ +import { articleContainer, articleCotent, articleTitle } from './ArticleParagraph.style'; + +interface ArticleParagraphProps { + title: string; + content: string; +} + +const ArticleParagraph = ({ title, content }: ArticleParagraphProps) => { + return ( +
    +

    {title}

    +

    {content}

    +
    + ); +}; + +export default ArticleParagraph; diff --git a/src/pages/categories/hooks/.keep b/src/pages/article/hooks/.keep similarity index 100% rename from src/pages/categories/hooks/.keep rename to src/pages/article/hooks/.keep diff --git a/src/pages/article/page/Picksight/Picksight.style.ts b/src/pages/article/page/Picksight/Picksight.style.ts new file mode 100644 index 00000000..21691a45 --- /dev/null +++ b/src/pages/article/page/Picksight/Picksight.style.ts @@ -0,0 +1,48 @@ +import { Theme, css } from '@emotion/react'; + +import { flexGenerator } from '@styles/generator'; + +export const articleMain = css` + min-height: 100dvh; + padding-top: 6rem; + margin-bottom: 5.4rem; +`; + +export const articleHeader = (theme: Theme) => css` + ${flexGenerator('column')}; + border-top: 1px solid ${theme.color.lightgray1}; + padding: 3.8rem; +`; + +export const articleH2 = (theme: Theme) => css` + ${theme.font['subhead02-sb-16']} + color: ${theme.color.blackgray}; +`; +export const articleH1 = (theme: Theme) => css` + ${theme.font['head01-b-22']} + font-size: 2.6rem; + color: ${theme.color.blackgray}; +`; + +export const articleSubtitle = (theme: Theme) => css` + margin: 6rem 2rem 2rem; + ${theme.font['subhead01-sb-18']} +`; + +export const articleStrong = (theme: Theme) => css` + color: ${theme.color.purple1}; +`; + +export const buttonIcon = (theme: Theme) => css` + width: 2.4rem; + height: 2.4rem; + path { + stroke: ${theme.color.purple1}; + } +`; + +export const paragraphStyle = css` + ${flexGenerator('column', 'flex-start', 'flex-start')}; + gap: 2rem; + padding: 0 2rem; +`; diff --git a/src/pages/article/page/Picksight/Picksight.tsx b/src/pages/article/page/Picksight/Picksight.tsx new file mode 100644 index 00000000..a35c43a3 --- /dev/null +++ b/src/pages/article/page/Picksight/Picksight.tsx @@ -0,0 +1,77 @@ +import { useNavigate } from 'react-router-dom'; + +import { Button, Header, Image } from '@components'; +import ArticleParagraph from '@pages/article/components/ArticleParagraph/ArticleParagraph'; +import { IcDropdownRight } from '@svg'; +import Footer from 'src/components/common/Footer/Footer'; +import { PicksightImage, PicksightMain } from 'src/constants/images'; + +import { + articleH1, + articleH2, + articleHeader, + articleMain, + articleStrong, + articleSubtitle, + buttonIcon, + paragraphStyle, +} from './Picksight.style'; + +const Picksight = () => { + const navigate = useNavigate(); + + const handleSpickerApplyClick = () => { + navigate('/mypage/host'); + }; + const handleClassApplyClick = () => { + navigate('/class-list'); + }; + return ( + <> +
    +
    +
    +

    1호 스픽커가 알려주는

    +

    픽플 사용설명서

    +
    + + +
    + +
    +

    + 픽플에는 스픽커와 + 참가자가 있어요. +

    + + +
    + + +
    +
    + + +
    +
    +