This commit is contained in:
krokodilka 2023-03-09 17:27:45 +03:00
commit fe404abb70
37 changed files with 51908 additions and 0 deletions

24
.gitignore vendored Normal file

@ -0,0 +1,24 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/.idea
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

31
.gitlab-ci.yml Normal file

@ -0,0 +1,31 @@
include:
- project: "devops/pena-continuous-integration"
file: "/templates/docker/build-template.gitlab-ci.yml"
- project: "devops/pena-continuous-integration"
file: "/templates/docker/clean-template.gitlab-ci.yml"
- project: "devops/pena-continuous-integration"
file: "/templates/docker/deploy-template.gitlab-ci.yml"
stages:
- clean
- build
- deploy
clear-old-images:
extends: .clean_template
variables:
STAGING_BRANCH: "main"
PRODUCTION_BRANCH: "main"
build-app:
extends: .build_template
variables:
DOCKER_BUILD_PATH: "./Dockerfile"
STAGING_BRANCH: "main"
PRODUCTION_BRANCH: "main"
deploy-to-staging:
extends: .deploy_template
variables:
DEPLOY_TO: "staging"
BRANCH: "main"

17
Dockerfile Normal file

@ -0,0 +1,17 @@
FROM node:19.1-alpine as build
RUN apk update && rm -rf /var/cache/apk/*
WORKDIR /usr/app
COPY package.json .
COPY tsconfig.json .
RUN yarn install --ignore-scripts --non-interactive --frozen-lockfile && yarn cache clean
COPY . .
RUN ls
RUN yarn build
FROM nginx:latest as result
WORKDIR /usr/share/nginx/html
COPY --from=build /usr/app/build/ /usr/share/nginx/html
COPY admin.conf /etc/nginx/conf.d/default.conf

1
README.md Normal file

@ -0,0 +1 @@
# pena_hub_admin_front

12
admin.conf Normal file

@ -0,0 +1,12 @@
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
root /usr/share/nginx/html;
}

17
craco.config.js Normal file

@ -0,0 +1,17 @@
const CracoAlias = require("craco-alias");
module.exports = {
plugins: [
{
plugin: CracoAlias,
options: {
source: "tsconfig",
// baseUrl SHOULD be specified
// plugin does not take it from tsconfig
baseUrl: "./src",
// tsConfigPath should point to the file where "baseUrl" and "paths" are specified
tsConfigPath: "./tsconfig.extend.json"
}
}
]
};

@ -0,0 +1,11 @@
services:
admin:
container_name: admin_front
restart: unless-stopped
image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
networks:
- penahub_frontend
hostname: hub
networks:
penahub_frontend:
external: true

37953
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

66
package.json Normal file

@ -0,0 +1,66 @@
{
"name": "adminka",
"version": "0.1.0",
"private": true,
"dependencies": {
"@date-io/dayjs": "^2.15.0",
"@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.4",
"@material-ui/pickers": "^3.3.10",
"@mui/icons-material": "^5.10.3",
"@mui/material": "^5.10.5",
"@mui/styled-engine-sc": "^5.10.3",
"@mui/x-data-grid": "^5.17.4",
"@mui/x-data-grid-generator": "^5.17.5",
"@mui/x-data-grid-premium": "^5.17.5",
"@mui/x-date-pickers": "^5.0.3",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.5.2",
"@types/node": "^16.11.56",
"@types/react": "^18.0.18",
"@types/react-dom": "^18.0.6",
"craco": "^0.0.3",
"@types/react-router-dom": "^5.3.3",
"dayjs": "^1.11.5",
"moment": "^2.29.4",
"numeral": "^2.0.6",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-numeral": "^1.1.1",
"react-router-dom": "^6.3.0",
"react-scripts": "^5.0.1",
"styled-components": "^5.3.5",
"typescript": "^4.8.2",
"web-vitals": "^2.1.4",
"zustand": "^4.1.1"
},
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "craco test",
"eject": "craco eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"craco-alias": "^3.0.1"
}
}

4
public/fonts.css Normal file

@ -0,0 +1,4 @@
@font-face {
font-family: "GilroyRegular";
src: local("GilroyRegular"), url(fonts/GilroyRegular.woff) format("woff");
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

44
public/index.html Normal file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<link rel="stylesheet" href="fonts.css" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

25
public/manifest.json Normal file

@ -0,0 +1,25 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

27
src/index.tsx Normal file

@ -0,0 +1,27 @@
import * as React from "react";
import { createRoot } from 'react-dom/client';
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Main from "./pages/main/main";
import Create from "./pages/create/create";
import Short from "./pages/short/short";
import Chart from "./pages/chart/chart";
import Stats from "./pages/stats/stats";
import {CssBaseline} from "@mui/material";
const container = document.getElementById('root');
const root = createRoot(container!);
root.render(
<React.StrictMode>
<CssBaseline/>
<BrowserRouter>
<Routes>
<Route path="/" element={ <Main /> } />
<Route path="/create" element={ <Create /> } />
<Route path="/short" element={ <Short/> } />
<Route path="/chart" element={ <Chart/> } />
<Route path="/stats" element={ <Stats/> } />
</Routes>
</BrowserRouter>
</React.StrictMode>
);

@ -0,0 +1,32 @@
import { Button } from "@mui/material";
interface Props {
color?: string;
children?: string;
}
export default function EmailTextButton({ color = "white", children }: Props) {
return (
<Button
variant="text"
sx={{
color,
textTransform: "none",
textDecoration: "underline",
textUnderlineOffset: "7px",
fontSize: "16px",
lineHeight: "20px",
gap: "12px",
py: 0,
}}
>
<svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="2.25" y="4.5" width="22.5" height="18" rx="5.625" stroke={color} strokeWidth="1.5" />
<path d="M6.75 10.125L12.15 14.175C12.95 14.775 14.05 14.775 14.85 14.175L20.25 10.125" stroke={color} strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
</svg>
{children}
</Button>
);
}

@ -0,0 +1,63 @@
import { ReactNode } from "react";
import { Typography, Box, SxProps, Theme } from "@mui/material";
interface Props {
icon: ReactNode;
headerText: string;
headerHeight?: string;
text?: string;
textColor: string;
headerColor: string;
backgroundColor: string;
sx?: SxProps<Theme>;
sxHeader?: SxProps<Theme>;
bottomText?: string;
bottomTextSx?: SxProps<Theme>;
}
export default function IconTextCard({
icon,
headerText,
headerHeight = "56px",
text,
textColor,
backgroundColor,
sx,
sxHeader,
headerColor,
bottomText,
bottomTextSx,
}: Props) {
return (
<Box sx={{
borderRadius: "12px",
backgroundColor,
p: "20px",
display: "flex",
flexDirection: "column",
...sx,
}}>
{icon}
<Typography variant="h4" sx={{
mt: "14px",
mb: "10px",
minHeight: headerHeight,
color: headerColor,
...sxHeader
}}>{headerText}</Typography>
<Typography variant="t1" sx={{ color: textColor, flexGrow: 1 }}>{text}</Typography>
{bottomText &&
<Typography sx={{
mt: "32px",
fontWeight: 500,
fontSize: "16px",
lineHeight: "20px",
color: "#7E2AEA",
...bottomTextSx,
}}>{bottomText}</Typography>
}
</Box>
);
}

@ -0,0 +1,38 @@
import { Typography, Box, SxProps, Theme } from "@mui/material";
interface Props {
indexText: string;
headerText: string;
text: string;
sx?: SxProps<Theme>;
}
export default function IndexTextCard({ indexText, headerText, text, sx }: Props) {
return (
<Box sx={{
backgroundColor: "#252734",
borderRadius: "12px",
p: "20px",
display: "flex",
maxWidth: "500px",
minWidth: "390px",
boxShadow: `
0px 100px 309px rgba(37, 39, 52, 0.24),
0px 41.7776px 129.093px rgba(37, 39, 52, 0.172525),
0px 22.3363px 69.0192px rgba(37, 39, 52, 0.143066),
0px 12.5216px 38.6916px rgba(37, 39, 52, 0.12),
0px 6.6501px 20.5488px rgba(37, 39, 52, 0.0969343),
0px 2.76726px 8.55082px rgba(37, 39, 52, 0.0674749)
`,
...sx,
}}>
<Box flex="1 1 0">
<Typography variant="h4" color="#7E2AEA">{indexText}</Typography>
<Typography variant="h4" color="white" maxWidth="190px">{headerText}</Typography>
</Box>
<Typography variant="t1" color="white" flex="1 1 0">{text}</Typography>
</Box>
);
}

@ -0,0 +1,48 @@
import Box from "@mui/material/Box";
import { SxProps, Theme, Typography } from "@mui/material";
import * as React from "react";
interface Props {
icon: string,
title: string,
text?: string,
sxbox?: SxProps<Theme>,
sxtext?: SxProps<Theme>,
sxtitle?: SxProps<Theme>,
colortitle?: string,
colortext?: string
}
export default function MiniIconCard (props: Props) {
return (
<>
<Box
sx={{
padding: '20px 20px',
background: '#ffffff',
minHeight: '147px',
maxWidth: '360px',
borderRadius: '8px',
...props.sxbox
}}
>
<img src={props.icon}/>
<Typography color={props.colortitle}
sx={{
fontSize: '24px',
fontWeight: 500,
lineHeight: '28px',
...props.sxtitle
}}
>
{props.title}</Typography>
<Typography color={props.colortext}
sx={{...props.sxtext}}
>
{props.text}
{/*{props.text !== undefined ? <Typography/>:null}*/}
</Typography>
</Box>
</>
);
}

24
src/kitUI/NumberIcon.tsx Normal file

@ -0,0 +1,24 @@
import { Box, SxProps, Theme, Typography } from "@mui/material";
export default function NumberIcon({ number, color, sx }: {
number: string;
color: string;
sx?: SxProps<Theme>;
}) {
return (
<Box sx={{
height: "36px",
width: "36px",
borderRadius: "6px",
display: "flex",
justifyContent: "center",
alignItems: "center",
backgroundColor: "white",
...sx,
}}>
<Typography variant="h4" sx={{ color }}>{number}</Typography>
</Box>
);
}

97
src/kitUI/footer.tsx Normal file

@ -0,0 +1,97 @@
import * as React from 'react';
import Box from "@mui/material/Box";
import Button from "@mui/material/Button";
import Logotip from '@kitUI/img/logo_pena_links_light';
import SectionStyled from './section';
import {styled, useTheme} from "@mui/material/styles";
const BoxMenu = styled('div')(({ theme }) => ({
[theme.breakpoints.down('xs')]: {
width: '100%',
},
}));
export default function () {
const theme = useTheme();
return(
<SectionStyled tag={'footer'} bg={'#252734'} mwidth={'1200px'}
sxsect={{
justifyContent: 'space-around',
position:"relative",
zIndex:theme.zIndex.content,
}}
sxcont={{
display: 'flex',
alignItems: 'start',
flexDirection: 'column',
minHeight: '433px',
padding: '100px 10px',
boxSizing: 'border-box',
}}>
<Box
sx={{
display: 'flex',
alignItems: 'start',
width: "100%",
maxWidth: '693px',
flexWrap: 'wrap',
paddingTop: "20px",
justifyContent: theme.breakpoints.down('sm') ? 'center' : "space-between"
}}
>
<Box
sx={{
width: '124px',
height: '48px',
backgroundSize: 'contain',
}}
>
<Logotip/>
</Box>
<Box
sx={{
display: 'flex',
width: '457px',
justifyContent: "space-between",
flexWrap: 'wrap',
}}
>
<BoxMenu
sx={{
display: 'flex',
flexDirection: 'column',
'button':{color: '#F2F3F7', textTransform: 'none'},
}}
>
<Button variant="text">Меню 1</Button>
<Button variant="text">Меню 1</Button>
<Button variant="text">Меню 1</Button>
</BoxMenu>
<BoxMenu
sx={{
display: 'flex',
flexDirection: 'column',
'button':{color: '#F2F3F7', textTransform: 'none'},
}}
>
<Button variant="text">Меню 1</Button>
<Button variant="text">Меню 1</Button>
<Button variant="text">Меню 1</Button>
</BoxMenu>
<BoxMenu
sx={{
display: 'flex',
flexDirection: 'column',
'button':{color: '#F2F3F7', textTransform: 'none'},
}}
>
<Button variant="text">Меню 1</Button>
<Button variant="text">Меню 1</Button>
<Button variant="text">Меню 1</Button>
</BoxMenu>
</Box>
</Box>
</SectionStyled>
)
}

89
src/kitUI/header.tsx Normal file

@ -0,0 +1,89 @@
import * as React from "react";
import {Link} from "react-router-dom";
import Box from '@mui/material/Box';
import Button from '@mui/material/Button';
import SectionStyled from "@kitUI/section";
import { useLocation } from 'react-router-dom';
import {useTheme} from "@mui/material/styles";
import LogoLight from "@kitUI/img/logo_pena_links_light";
import LogoDark from "@kitUI/img/logo_pena_links_dark";
import {SxProps, Theme} from "@mui/material";
const buttonMenu: {path: string; title: string} [] =[
{path: '/', title:'Мои ссылки'},
{path: '/create', title:'Создание ссылки'},
{path: '/short', title:'Статистика '},
{path: '/chart', title:'Пиксель'}
]
interface Props {
theme?: "dark" | "light"
buttons?: { path: string; title: string; }[]
lightLogo?: boolean
sxsect?: SxProps<Theme>
}
const height = "80px"
export default function Navbar({ theme = "light", buttons = buttonMenu, lightLogo = false, sxsect }: Props) {
const themeMUI = useTheme();
const location = useLocation()
return (
<>
<SectionStyled tag={'header'} bg={theme === "dark" ? '#252734' : '#F2F3F7'} mwidth={'1200px'}
sxsect={{
minHeight: height,
position: "fixed",
zIndex: themeMUI.zIndex.header,
borderBottom: "1px solid #E3E3E3",
...sxsect
}}
sxcont={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
}}>
<Box>
{lightLogo ? <LogoLight/> : theme === "dark" ? <LogoLight/> : <LogoDark/>}
</Box>
<Box
sx={{
display: 'flex',
gap: "14px",
ml: "32px",
flexWrap: 'wrap'
}}
>
{buttons.map((element, index) => (
<Link key={index} to={element.path} style={{textDecoration: 'none'}}>
<Button
variant="text"
sx={{
color: location.pathname === element.path ?
'#7E2AEA'
:
theme === "dark" ? 'white' : 'black',
textTransform: 'none',
fontWeight: 500,
fontSize: "16px",
lineHeight: "20px",
}}>{element.title}</Button>
</Link>
))}
</Box>
<Button variant="outlined"
sx={{
color: theme === "dark" ? 'white' : "black",
border: theme === "dark" ? '1px solid white' : '1px solid black',
ml: "auto",
textTransform: 'none',
fontWeight: '400',
fontSize: '18px',
lineHeight: '24px',
borderRadius: '8px',
padding: '8px 17px',
}}
>Связаться с нами</Button>
</SectionStyled>
<Box height={height}/>
</>
);
}

@ -0,0 +1,317 @@
import { CSSProperties } from "react"; interface Props {style?:CSSProperties}
export default ({ style }:Props) => (
<svg width="578" height="401" viewBox="0 0 578 401" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ ...style }}>
<g filter="url(#filter0_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M525.412 105.828L138.543 106.977L138.543 108.126L525.412 109.275C525.412 109.275 528.062 109.275 528.062 107.552C528.062 105.828 525.412 105.828 525.412 105.828Z" fill="url(#paint0_linear_522_454)"/>
</g>
<g filter="url(#filter1_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 532.766 110.765)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 532.766 110.765)" fill="url(#paint1_radial_522_454)"/>
</g>
<g filter="url(#filter2_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M566.068 325.789L293.786 327.102L293.786 328.416L566.068 329.729C566.068 329.729 567.933 329.729 567.933 327.759C567.933 325.789 566.068 325.789 566.068 325.789Z" fill="url(#paint2_linear_522_454)"/>
</g>
<g filter="url(#filter3_f_522_454)">
<circle cx="3.71952" cy="3.71952" r="3.71952" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 572.997 331.534)" fill="#9B4FFD"/>
<circle cx="3.71952" cy="3.71952" r="3.71952" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 572.997 331.534)" fill="url(#paint3_radial_522_454)"/>
</g>
<g opacity="0.4">
<g filter="url(#filter4_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M397.089 32.566L64.5546 33.7048L64.5546 34.8436L397.089 35.9824C397.089 35.9824 399.366 35.9824 399.366 34.2742C399.366 32.566 397.089 32.566 397.089 32.566Z" fill="url(#paint4_linear_522_454)"/>
</g>
<g filter="url(#filter5_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 403.921 37.6934)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 403.921 37.6934)" fill="url(#paint5_radial_522_454)"/>
</g>
</g>
<g opacity="0.4">
<g filter="url(#filter6_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M344.073 352.292L136.944 353.441L136.944 354.59L344.073 355.739C344.073 355.739 345.492 355.739 345.492 354.016C345.492 352.292 344.073 352.292 344.073 352.292Z" fill="url(#paint6_linear_522_454)"/>
</g>
<g filter="url(#filter7_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 349.634 357.405)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 349.634 357.405)" fill="url(#paint7_radial_522_454)"/>
</g>
</g>
<g opacity="0.15">
<g filter="url(#filter8_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M239.975 173.047L59.3788 174.196L59.3788 175.345L239.975 176.494C239.975 176.494 241.212 176.494 241.212 174.771C241.212 173.047 239.975 173.047 239.975 173.047Z" fill="url(#paint8_linear_522_454)"/>
</g>
<g filter="url(#filter9_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 245.353 178.156)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 245.353 178.156)" fill="url(#paint9_radial_522_454)"/>
</g>
</g>
<g opacity="0.15">
<g filter="url(#filter10_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M502.819 148.914L322.223 150.063L322.223 151.212L502.819 152.361C502.819 152.361 504.056 152.361 504.056 150.638C504.056 148.914 502.819 148.914 502.819 148.914Z" fill="url(#paint10_linear_522_454)"/>
</g>
<g filter="url(#filter11_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 508.197 154.023)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 508.197 154.023)" fill="url(#paint11_radial_522_454)"/>
</g>
</g>
<g opacity="0.15">
<g filter="url(#filter12_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M183.1 6.72384L2.50398 7.87285L2.50398 9.02187L183.1 10.1709C183.1 10.1709 184.337 10.1709 184.337 8.44737C184.337 6.72384 183.1 6.72384 183.1 6.72384Z" fill="url(#paint12_linear_522_454)"/>
</g>
<g filter="url(#filter13_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 188.479 11.833)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 188.479 11.833)" fill="url(#paint13_radial_522_454)"/>
</g>
</g>
<g opacity="0.15">
<g filter="url(#filter14_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M519.25 390.892L338.654 392.041L338.654 393.19L519.25 394.339C519.25 394.339 520.487 394.339 520.487 392.615C520.487 390.892 519.25 390.892 519.25 390.892Z" fill="url(#paint14_linear_522_454)"/>
</g>
<g filter="url(#filter15_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 524.629 396.001)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 524.629 396.001)" fill="url(#paint15_radial_522_454)"/>
</g>
</g>
<g opacity="0.4">
<g filter="url(#filter16_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M458.276 258.344L125.742 259.483L125.742 260.622L458.276 261.761C458.276 261.761 460.554 261.761 460.554 260.053C460.554 258.344 458.276 258.344 458.276 258.344Z" fill="url(#paint16_linear_522_454)"/>
</g>
<g filter="url(#filter17_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 465.108 263.472)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 465.108 263.472)" fill="url(#paint17_radial_522_454)"/>
</g>
</g>
<g opacity="0.4">
<g filter="url(#filter18_f_522_454)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M397.186 198.64L64.652 199.779L64.652 200.918L397.186 202.057C397.186 202.057 399.464 202.057 399.464 200.348C399.464 198.64 397.186 198.64 397.186 198.64Z" fill="url(#paint18_linear_522_454)"/>
</g>
<g filter="url(#filter19_f_522_454)">
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 404.018 203.768)" fill="#9B4FFD"/>
<circle cx="3.41645" cy="3.41645" r="3.41645" transform="matrix(4.37114e-08 -1 -1 -4.37114e-08 404.018 203.768)" fill="url(#paint19_radial_522_454)"/>
</g>
</g>
<g opacity="0.8">
<path d="M190.931 117C190.849 117 190.746 116.968 190.623 116.904C190.499 116.839 190.397 116.786 190.315 116.743L179.894 109.316C179.586 109.102 179.36 108.888 179.216 108.673C179.072 108.459 179 108.202 179 107.902V107.098C179 106.798 179.072 106.541 179.216 106.327C179.36 106.112 179.586 105.898 179.894 105.684L190.315 98.2572C190.397 98.2143 190.499 98.1607 190.623 98.0964C190.746 98.0321 190.849 98 190.931 98C191.096 98 191.239 98.0643 191.363 98.1929C191.486 98.3001 191.548 98.4501 191.548 98.643V101.086C191.548 101.386 191.476 101.622 191.332 101.794C191.188 101.965 191.003 102.115 190.777 102.244L183.285 107.484L190.777 112.756C191.003 112.906 191.188 113.067 191.332 113.239C191.476 113.389 191.548 113.614 191.548 113.914V116.357C191.548 116.55 191.486 116.711 191.363 116.839C191.239 116.946 191.096 117 190.931 117Z" fill="white"/>
<path d="M203.383 117C203.301 117 203.198 116.968 203.075 116.904C202.952 116.839 202.849 116.786 202.767 116.743L192.346 109.316C192.038 109.102 191.812 108.888 191.668 108.673C191.524 108.459 191.452 108.202 191.452 107.902V107.098C191.452 106.798 191.524 106.541 191.668 106.327C191.812 106.112 192.038 105.898 192.346 105.684L202.767 98.2572C202.849 98.2143 202.952 98.1607 203.075 98.0964C203.198 98.0321 203.301 98 203.383 98C203.548 98 203.692 98.0643 203.815 98.1929C203.938 98.3001 204 98.4501 204 98.643V101.086C204 101.386 203.928 101.622 203.784 101.794C203.64 101.965 203.455 102.115 203.229 102.244L195.738 107.484L203.229 112.756C203.455 112.906 203.64 113.067 203.784 113.239C203.928 113.389 204 113.614 204 113.914V116.357C204 116.55 203.938 116.711 203.815 116.839C203.692 116.946 203.548 117 203.383 117Z" fill="white"/>
</g>
<g opacity="0.8">
<path d="M499.237 347.12C499.413 347.12 499.632 347.055 499.896 346.923C500.16 346.792 500.379 346.683 500.555 346.595L522.825 331.438C523.484 331 523.967 330.563 524.275 330.126C524.582 329.688 524.736 329.163 524.736 328.551V326.91C524.736 326.298 524.582 325.773 524.275 325.336C523.967 324.898 523.484 324.461 522.825 324.023L500.555 308.866C500.379 308.778 500.16 308.669 499.896 308.538C499.632 308.406 499.413 308.341 499.237 308.341C498.886 308.341 498.578 308.472 498.315 308.735C498.051 308.953 497.919 309.259 497.919 309.653V314.64C497.919 315.252 498.073 315.734 498.381 316.084C498.688 316.434 499.083 316.74 499.567 317.002L515.578 327.698L499.567 338.459C499.083 338.765 498.688 339.093 498.381 339.443C498.073 339.749 497.919 340.209 497.919 340.821V345.808C497.919 346.202 498.051 346.53 498.315 346.792C498.578 347.011 498.886 347.12 499.237 347.12Z" fill="white"/>
<path d="M472.624 347.12C472.8 347.12 473.02 347.055 473.283 346.923C473.547 346.792 473.766 346.683 473.942 346.595L496.212 331.438C496.871 331 497.355 330.563 497.662 330.126C497.969 329.688 498.123 329.163 498.123 328.551V326.91C498.123 326.298 497.969 325.773 497.662 325.336C497.355 324.898 496.871 324.461 496.212 324.023L473.942 308.866C473.766 308.778 473.547 308.669 473.283 308.538C473.02 308.406 472.8 308.341 472.624 308.341C472.273 308.341 471.965 308.472 471.702 308.735C471.438 308.953 471.307 309.259 471.307 309.653V314.64C471.307 315.252 471.46 315.734 471.768 316.084C472.075 316.434 472.471 316.74 472.954 317.002L488.965 327.698L472.954 338.459C472.471 338.765 472.075 339.093 471.768 339.443C471.46 339.749 471.307 340.209 471.307 340.821V345.808C471.307 346.202 471.438 346.53 471.702 346.792C471.965 347.011 472.273 347.12 472.624 347.12Z" fill="white"/>
</g>
<path d="M390.565 73.635C401.539 62.6611 416.903 57.7229 431.169 58.2716C445.435 58.8202 455.86 61.0168 466.834 70.3446C477.808 79.6725 486.587 92.8412 487.684 108.205C488.443 118.83 488.153 129.981 483 141.112C480.702 146.075 477.438 151.034 472.87 155.941C458.055 171.853 430.62 197.642 421.292 206.97C411.964 216.298 396.601 221.236 382.884 221.236C369.166 221.236 353.254 216.298 341.183 203.678C337.368 199.863 336.692 195.107 337.392 191.004C338.001 187.435 339.651 184.359 341.183 182.827C344.475 179.535 351.059 175.146 360.935 180.084C364.776 181.73 368.068 188.863 377.396 189.96C386.724 191.058 394.954 189.412 400.441 184.473C405.928 179.535 444.337 140.578 449.824 135.091C452.647 132.268 455.179 128.138 456.45 123C457.649 118.151 457.724 112.404 455.86 106.01C452.019 92.8412 437.204 88.4516 430.62 88.4516C424.035 88.4516 416.902 91.7438 411.964 96.1333C408.013 99.645 389.102 118.447 380.14 127.409C373.556 124.847 356.437 120.492 340.634 123.566L344 120.2L390.565 73.635Z" fill="#7E2AEA"/>
<path d="M390.565 73.635C401.539 62.6611 416.903 57.7229 431.169 58.2716C445.435 58.8202 455.86 61.0168 466.834 70.3446C477.808 79.6725 486.587 92.8412 487.684 108.205C488.443 118.83 488.153 129.981 483 141.112C480.702 146.075 477.438 151.034 472.87 155.941C458.055 171.853 430.62 197.642 421.292 206.97C411.964 216.298 396.601 221.236 382.884 221.236C369.166 221.236 353.254 216.298 341.183 203.678C337.368 199.863 336.692 195.107 337.392 191.004C338.001 187.435 339.651 184.359 341.183 182.827C344.475 179.535 351.059 175.146 360.935 180.084C364.776 181.73 368.068 188.863 377.396 189.96C386.724 191.058 394.954 189.412 400.441 184.473C405.928 179.535 444.337 140.578 449.824 135.091C452.647 132.268 455.179 128.138 456.45 123C457.649 118.151 457.724 112.404 455.86 106.01C452.019 92.8412 437.204 88.4516 430.62 88.4516C424.035 88.4516 416.902 91.7438 411.964 96.1333C408.013 99.645 389.102 118.447 380.14 127.409C373.556 124.847 356.437 120.492 340.634 123.566L344 120.2L390.565 73.635Z" fill="url(#paint20_linear_522_454)" fill-opacity="0.2"/>
<path d="M421.292 206.969C430.62 197.642 458.055 171.853 472.87 155.941C477.438 151.034 480.702 146.074 483 141.111C477.847 152.242 427.5 198.69 418.5 205.5C407.5 213.822 399.767 216.236 382.884 217.5C366 218.763 335.09 204.5 337.392 191.004C336.692 195.107 337.368 199.863 341.183 203.677C353.254 216.297 369.166 221.236 382.884 221.236C396.601 221.236 411.964 216.297 421.292 206.969Z" fill="url(#paint21_linear_522_454)"/>
<path d="M455.86 106.009C452.019 92.8408 437.204 88.4512 430.62 88.4512C424.035 88.4512 416.902 91.7434 411.964 96.133C408.013 99.6446 389.102 118.447 380.14 127.409C373.556 124.847 356.437 120.492 340.634 123.566L344 120.2C356.4 117.507 372.833 120.944 379.5 123C388.333 114.166 406.8 95.7996 410 92.9996C414 89.4996 421.739 84.4996 430.62 84.9996C439.5 85.4996 464.4 91.4996 456.45 123C457.649 118.15 457.724 112.403 455.86 106.009Z" fill="url(#paint22_linear_522_454)"/>
<path d="M396.363 231.663L346.432 281.594C335.458 292.568 320.095 297.507 305.829 296.958C296.327 296.592 288.529 295.496 281.138 292.048C277.432 290.32 273.828 288 270.163 284.885C259.189 275.557 250.41 262.388 249.313 247.025C248.216 231.661 249.313 215.2 264.128 199.288C278.942 183.376 306.377 157.587 315.705 148.26C325.033 138.932 340.396 133.994 354.114 133.994C367.831 133.994 383.743 138.932 395.815 151.552C402.948 158.685 399.107 169.11 395.815 172.402C393.942 174.275 391.004 176.503 387.001 177.167C383.967 177.67 380.321 177.275 376.062 175.146C372.221 173.5 368.929 166.367 359.601 165.269C350.273 164.172 342.043 165.818 336.556 170.756C331.069 175.694 292.66 214.652 287.173 220.139C281.686 225.626 277.297 236.051 281.138 249.22C282.133 252.633 283.866 255.456 286.001 257.766C292.105 264.369 301.5 266.778 306.378 266.778C312.962 266.778 320.095 263.486 325.033 259.096C328.984 255.584 347.896 236.783 356.858 227.821C362.564 230.041 376.184 233.608 390.001 232.518C392.127 232.351 394.257 232.073 396.363 231.663Z" fill="#7E2AEA"/>
<path d="M396.363 231.663L346.432 281.594C335.458 292.568 320.095 297.507 305.829 296.958C296.327 296.592 288.529 295.496 281.138 292.048C277.432 290.32 273.828 288 270.163 284.885C259.189 275.557 250.41 262.388 249.313 247.025C248.216 231.661 249.313 215.2 264.128 199.288C278.942 183.376 306.377 157.587 315.705 148.26C325.033 138.932 340.396 133.994 354.114 133.994C367.831 133.994 383.743 138.932 395.815 151.552C402.948 158.685 399.107 169.11 395.815 172.402C393.942 174.275 391.004 176.503 387.001 177.167C383.967 177.67 380.321 177.275 376.062 175.146C372.221 173.5 368.929 166.367 359.601 165.269C350.273 164.172 342.043 165.818 336.556 170.756C331.069 175.694 292.66 214.652 287.173 220.139C281.686 225.626 277.297 236.051 281.138 249.22C282.133 252.633 283.866 255.456 286.001 257.766C292.105 264.369 301.5 266.778 306.378 266.778C312.962 266.778 320.095 263.486 325.033 259.096C328.984 255.584 347.896 236.783 356.858 227.821C362.564 230.041 376.184 233.608 390.001 232.518C392.127 232.351 394.257 232.073 396.363 231.663Z" fill="url(#paint23_linear_522_454)" fill-opacity="0.2"/>
<path d="M346.432 281.595L396.363 231.664C394.257 232.074 392.127 232.352 390.001 232.519C378.501 242.539 346.001 278.5 333.501 286C321.001 293.5 294.501 298.283 281.138 292.049C288.529 295.497 296.327 296.593 305.828 296.959C320.095 297.508 335.458 292.569 346.432 281.595Z" fill="#AD76F3"/>
<path d="M346.432 281.595L396.363 231.664C394.257 232.074 392.127 232.352 390.001 232.519C378.501 242.539 346.001 278.5 333.501 286C321.001 293.5 294.501 298.283 281.138 292.049C288.529 295.497 296.327 296.593 305.828 296.959C320.095 297.508 335.458 292.569 346.432 281.595Z" fill="url(#paint24_linear_522_454)"/>
<path d="M359.601 165.27C368.929 166.368 372.221 173.501 376.062 175.147C380.321 177.276 383.967 177.671 387.001 177.168C382.5 177.221 378.061 173.243 376.062 170.5C373.246 166.636 369.001 162.5 360.501 161C352.001 159.5 341.501 161 334.001 167.5C326.501 174 290.501 211.5 285.001 217C279.501 222.5 267.501 240.534 286.001 257.767C283.866 255.457 282.133 252.634 281.138 249.221C277.297 236.052 281.686 225.627 287.173 220.14C292.66 214.653 331.069 175.695 336.556 170.757C342.043 165.819 350.273 164.173 359.601 165.27Z" fill="#AD76F3"/>
<path d="M359.601 165.27C368.929 166.368 372.221 173.501 376.062 175.147C380.321 177.276 383.967 177.671 387.001 177.168C382.5 177.221 378.061 173.243 376.062 170.5C373.246 166.636 369.001 162.5 360.501 161C352.001 159.5 341.501 161 334.001 167.5C326.501 174 290.501 211.5 285.001 217C279.501 222.5 267.501 240.534 286.001 257.767C283.866 255.457 282.133 252.634 281.138 249.221C277.297 236.052 281.686 225.627 287.173 220.14C292.66 214.653 331.069 175.695 336.556 170.757C342.043 165.819 350.273 164.173 359.601 165.27Z" fill="url(#paint25_linear_522_454)"/>
<path d="M313.794 8.67746L301.874 20.5973C305.646 19.8634 309.733 20.9031 311.305 21.5146C313.444 19.3752 317.959 14.8867 318.902 14.0484C320.081 13.0005 321.784 12.2145 323.356 12.2145C324.928 12.2145 328.464 13.2624 329.381 16.4061C330.298 19.5498 329.25 22.0386 327.94 23.3485C326.63 24.6583 317.461 33.9585 316.151 35.1373C314.842 36.3162 312.877 36.7092 310.65 36.4472C308.423 36.1852 307.637 34.4824 306.72 34.0894C304.363 32.9106 302.791 33.9585 302.005 34.7444C301.219 35.5303 300.302 38.0191 302.005 39.7219C304.887 42.7346 308.685 43.9135 311.96 43.9135C315.235 43.9135 318.902 42.7346 321.129 40.5078C323.356 38.281 329.905 32.1246 333.442 28.326C336.979 24.5274 337.241 20.5977 336.979 16.9301C336.717 13.2624 334.621 10.1187 332.001 7.89196C329.381 5.66517 326.893 5.1408 323.487 5.00981C320.081 4.87882 316.414 6.05771 313.794 8.67746Z" fill="#532A92"/>
<path d="M303.259 58.3225L315.179 46.4027C311.407 47.1366 307.32 46.0969 305.748 45.4854C303.609 47.6248 299.094 52.1133 298.151 52.9516C296.972 53.9995 295.269 54.7855 293.697 54.7855C292.126 54.7855 288.589 53.7376 287.672 50.5939C286.755 47.4502 287.803 44.9614 289.113 43.6515C290.423 42.3417 299.592 33.0415 300.902 31.8627C302.212 30.6838 304.176 30.2908 306.403 30.5528C308.63 30.8148 309.416 32.5176 310.333 32.9106C312.691 34.0894 314.262 33.0415 315.048 32.2556C315.834 31.4697 316.751 28.9809 315.048 27.2781C312.167 24.2654 308.368 23.0865 305.093 23.0865C301.819 23.0865 298.151 24.2654 295.924 26.4922C293.697 28.719 287.148 34.8754 283.611 38.674C280.075 42.4726 279.813 46.4023 280.075 50.0699C280.337 53.7376 282.432 56.8813 285.052 59.108C287.672 61.3348 290.161 61.8592 293.566 61.9902C296.972 62.1212 300.64 60.9423 303.259 58.3225Z" fill="#532A92"/>
<defs>
<filter id="filter0_f_522_454" x="136.475" y="103.76" width="393.655" height="7.58375" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter1_f_522_454" x="521.797" y="99.7952" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter2_f_522_454" x="291.718" y="323.721" width="278.283" height="8.07691" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter3_f_522_454" x="561.422" y="319.958" width="15.7121" height="15.7124" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter4_f_522_454" x="62.4864" y="30.4982" width="338.948" height="7.5525" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter5_f_522_454" x="392.952" y="26.7239" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter6_f_522_454" x="134.876" y="350.224" width="212.684" height="7.58375" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter7_f_522_454" x="338.664" y="346.436" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter8_f_522_454" x="57.3105" y="170.979" width="185.969" height="7.58375" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter9_f_522_454" x="234.384" y="167.187" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter10_f_522_454" x="320.154" y="146.846" width="185.969" height="7.58375" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter11_f_522_454" x="497.228" y="143.054" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter12_f_522_454" x="0.435726" y="4.65539" width="185.969" height="7.58375" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter13_f_522_454" x="177.509" y="0.863517" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter14_f_522_454" x="336.586" y="388.823" width="185.969" height="7.58375" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter15_f_522_454" x="513.659" y="385.031" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter16_f_522_454" x="123.674" y="256.276" width="338.948" height="7.5525" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter17_f_522_454" x="454.139" y="252.502" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter18_f_522_454" x="62.5838" y="196.572" width="338.948" height="7.5525" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="1.03412" result="effect1_foregroundBlur_522_454"/>
</filter>
<filter id="filter19_f_522_454" x="393.049" y="192.798" width="15.1059" height="15.106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="2.06824" result="effect1_foregroundBlur_522_454"/>
</filter>
<linearGradient id="paint0_linear_522_454" x1="680.425" y1="105.828" x2="45.8014" y2="107.356" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.880958" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint1_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint2_linear_522_454" x1="675.167" y1="325.789" x2="228.512" y2="326.451" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint3_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.71952 3.71952) rotate(90) scale(2.47968)">
<stop stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint4_linear_522_454" x1="530.33" y1="32.566" x2="-15.1626" y2="33.7048" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint5_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint6_linear_522_454" x1="427.067" y1="352.292" x2="87.2891" y2="352.73" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint7_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint8_linear_522_454" x1="312.337" y1="173.047" x2="16.0843" y2="173.38" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint9_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint10_linear_522_454" x1="575.181" y1="148.914" x2="278.928" y2="149.247" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint11_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint12_linear_522_454" x1="255.462" y1="6.72384" x2="-40.7905" y2="7.05674" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint13_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint14_linear_522_454" x1="591.612" y1="390.892" x2="295.359" y2="391.225" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint15_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint16_linear_522_454" x1="591.518" y1="258.344" x2="46.0249" y2="259.483" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint17_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint18_linear_522_454" x1="530.428" y1="198.64" x2="-15.0652" y2="199.779" gradientUnits="userSpaceOnUse">
<stop stop-color="#9B4FFD"/>
<stop offset="0.763891" stop-color="#333647"/>
</linearGradient>
<radialGradient id="paint19_radial_522_454" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.41645 3.41645) rotate(90) scale(2.27763)">
<stop offset="0.614184" stop-color="#333647"/>
<stop offset="1" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint20_linear_522_454" x1="494" y1="97.5" x2="395.5" y2="156.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#7E2AEA" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint21_linear_522_454" x1="454.5" y1="91" x2="397.5" y2="209.5" gradientUnits="userSpaceOnUse">
<stop stop-color="#AD76F3"/>
<stop offset="1" stop-color="#572399"/>
</linearGradient>
<linearGradient id="paint22_linear_522_454" x1="454.5" y1="91" x2="397.5" y2="209.5" gradientUnits="userSpaceOnUse">
<stop stop-color="#AD76F3"/>
<stop offset="1" stop-color="#572399"/>
</linearGradient>
<linearGradient id="paint23_linear_522_454" x1="410.001" y1="141.499" x2="319.501" y2="179.499" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#7E2AEA" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint24_linear_522_454" x1="299.578" y1="290.953" x2="363.264" y2="181.968" gradientUnits="userSpaceOnUse">
<stop stop-color="#AD76F3"/>
<stop offset="1" stop-color="#572399"/>
</linearGradient>
<linearGradient id="paint25_linear_522_454" x1="299.578" y1="290.953" x2="363.264" y2="181.968" gradientUnits="userSpaceOnUse">
<stop stop-color="#AD76F3"/>
<stop offset="1" stop-color="#572399"/>
</linearGradient>
</defs>
</svg>
)

@ -0,0 +1,20 @@
import { CSSProperties } from "react"; interface Props {style?:CSSProperties}
export default ({ style }:Props) => (
<svg width="124" height="48" viewBox="0 0 124 48" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ ...style }}>
<g clip-path="url(#clip0_512_1797)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.9007 2.29269C12.8443 1.70698 9.3559 7.13845 6.11113 11.0646C3.26354 14.5102 1.14327 18.402 0.896996 22.8672C0.634979 27.6177 1.49672 32.5651 4.73312 36.0493C8.06676 39.6381 13.0604 41.9057 17.9007 41.1726C22.3392 40.5003 24.3031 35.6263 27.6075 32.5846C31.1955 29.2819 37.8801 27.7458 37.7874 22.8672C37.6945 17.9811 30.6396 17.0247 27.245 13.5127C23.7288 9.87488 22.9237 2.87452 17.9007 2.29269Z" fill="#7E2AEA"/>
<ellipse cx="30.481" cy="39.3174" rx="2.79008" ry="2.79008" fill="#7E2AEA"/>
<circle cx="27.6911" cy="8.36074" r="1.06289" fill="#7E2AEA"/>
<path d="M44.6921 21.725C44.3822 18.712 42.9647 15.9213 40.7143 13.894C38.464 11.8666 35.541 10.7469 32.5121 10.752C32.0821 10.7522 31.6523 10.7747 31.2246 10.8194C28.213 11.1356 25.4251 12.5558 23.3987 14.8061C21.3722 17.0563 20.2508 19.9773 20.2507 23.0055V23.0055V40.5105H25.5022V33.0709C27.5555 34.4993 29.9977 35.2631 32.499 35.259C32.929 35.2589 33.3588 35.2364 33.7865 35.1916C35.3869 35.0234 36.9384 34.5417 38.3526 33.7738C39.7668 33.006 41.0159 31.9671 42.0286 30.7166C43.0413 29.466 43.7977 28.0282 44.2547 26.4852C44.7117 24.9423 44.8604 23.3245 44.6921 21.7241V21.725ZM37.9474 27.4141C37.3706 28.1307 36.6573 28.7258 35.8488 29.1648C35.0404 29.6038 34.1529 29.878 33.2377 29.9716C32.9923 29.9971 32.7457 30.01 32.499 30.0101C30.9108 30.0087 29.3703 29.4673 28.1303 28.475C26.8903 27.4826 26.0245 26.0982 25.6751 24.5489C25.3256 22.9996 25.5132 21.3776 26.2071 19.949C26.9009 18.5204 28.0599 17.3701 29.4936 16.687C30.9274 16.0038 32.5508 15.8284 34.0974 16.1895C35.644 16.5506 37.0219 17.4267 38.005 18.6741C38.988 19.9215 39.5178 21.466 39.5073 23.0542C39.4969 24.6424 38.9468 26.1798 37.9474 27.4141Z" fill="#151515"/>
<path d="M58.3941 10.7529C57.9641 10.7531 57.5344 10.7756 57.1066 10.8203C53.9861 11.149 51.1105 12.6622 49.0726 15.0482C47.0347 17.4341 45.9897 20.511 46.1531 23.6445C46.3165 26.7781 47.6758 29.7296 49.9508 31.8906C52.2258 34.0517 55.2432 35.2577 58.381 35.26C58.8111 35.2598 59.2408 35.2373 59.6685 35.1926C61.9185 34.9531 64.0587 34.0972 65.8533 32.7192C67.648 31.3412 69.0275 29.4945 69.8398 27.3827H63.854L63.8295 27.4133C63.0627 28.3611 62.0619 29.0922 60.9259 29.5344C59.7899 29.9766 58.5581 30.1146 57.3524 29.9347C56.1467 29.7547 55.0089 29.2632 54.0515 28.5086C53.0941 27.754 52.3503 26.7625 51.8937 25.6322H70.3615C70.7503 23.8431 70.7339 21.9897 70.3136 20.2078C69.8932 18.4259 69.0795 16.7606 67.932 15.3339C66.7846 13.9073 65.3325 12.7554 63.6821 11.9628C62.0318 11.1701 60.225 10.7567 58.3941 10.7529V10.7529ZM51.8937 20.3807C52.3717 19.204 53.1601 18.1791 54.1748 17.4152C55.1895 16.6512 56.3924 16.177 57.6554 16.043C57.9008 16.0175 58.1474 16.0046 58.3941 16.0044C59.789 16.0021 61.1525 16.4178 62.3089 17.1978C63.4652 17.9779 64.3613 19.0865 64.8815 20.3807H51.8937Z" fill="#151515"/>
<path d="M83.3337 10.7529C81.3266 10.7498 79.3576 11.3017 77.6446 12.3477V10.7529H72.3931V35.26H77.6446V21.6936C77.6446 20.1847 78.244 18.7377 79.3109 17.6708C80.3778 16.6038 81.8249 16.0045 83.3337 16.0045C84.8426 16.0045 86.2896 16.6038 87.3565 17.6708C88.4235 18.7377 89.0228 20.1847 89.0228 21.6936V35.26H94.2744V21.6936C94.2744 18.792 93.1217 16.0092 91.0699 13.9574C89.0182 11.9056 86.2354 10.7529 83.3337 10.7529Z" fill="#151515"/>
<path d="M120.535 24.5723V10.753H115.283V12.9411C113.23 11.512 110.788 10.7482 108.286 10.753C107.856 10.7531 107.426 10.7756 106.999 10.8203C103.878 11.149 101.003 12.6622 98.9647 15.0482C96.9268 17.4341 95.8818 20.511 96.0452 23.6446C96.2086 26.7781 97.5679 29.7296 99.8429 31.8907C102.118 34.0517 105.135 35.2577 108.273 35.26C108.703 35.2598 109.133 35.2373 109.561 35.1926C112.613 34.8802 115.434 33.4262 117.46 31.1218C119.034 33.2274 121.313 34.6963 123.881 35.26V29.7547C122.884 29.3034 122.039 28.5746 121.445 27.6556C120.852 26.7366 120.536 25.6662 120.535 24.5723ZM113.722 27.4134C113.145 28.1298 112.431 28.7247 111.623 29.1637C110.814 29.6027 109.927 29.8771 109.012 29.9709C108.766 29.9963 108.52 30.0092 108.273 30.0094C106.479 30.0093 104.753 29.3205 103.452 28.0851C102.151 26.8497 101.374 25.162 101.281 23.3702C101.188 21.5784 101.786 19.8193 102.952 18.4559C104.119 17.0925 105.764 16.2287 107.548 16.043C107.794 16.0175 108.04 16.0046 108.286 16.0045C109.608 16.0056 110.903 16.3809 112.021 17.0871C113.138 17.7933 114.033 18.8015 114.602 19.9949C115.17 21.1884 115.389 22.5185 115.234 23.8313C115.078 25.1441 114.554 26.386 113.722 27.4134Z" fill="#151515"/>
<path d="M95.2967 45.8799V37.9343H96.8197V45.8799H95.2967ZM98.3861 39.3435V37.9343H99.9091V39.3435H98.3861ZM98.3861 45.8799V40.1239H99.9091V45.8799H98.3861ZM106.711 45.8799H105.188V42.9423C105.188 42.3208 105.156 41.9197 105.091 41.7391C105.025 41.5548 104.919 41.4121 104.771 41.3109C104.626 41.2097 104.451 41.1591 104.245 41.1591C103.981 41.1591 103.745 41.2314 103.535 41.3759C103.325 41.5205 103.181 41.712 103.101 41.9504C103.026 42.1889 102.988 42.6297 102.988 43.2729V45.8799H101.465V40.1239H102.879V40.9694C103.381 40.319 104.014 39.9938 104.776 39.9938C105.112 39.9938 105.419 40.0553 105.698 40.1781C105.976 40.2974 106.185 40.4509 106.326 40.6388C106.471 40.8267 106.57 41.0399 106.624 41.2784C106.682 41.5168 106.711 41.8583 106.711 42.3027V45.8799ZM108.207 45.8799V37.9343H109.73V42.151L111.513 40.1239H113.388L111.421 42.2269L113.529 45.8799H111.887L110.44 43.2946L109.73 44.0371V45.8799H108.207ZM113.903 44.2376L115.432 44.0046C115.497 44.3009 115.629 44.5267 115.827 44.6821C116.026 44.8338 116.304 44.9097 116.662 44.9097C117.056 44.9097 117.352 44.8375 117.551 44.6929C117.685 44.5917 117.751 44.4562 117.751 44.2864C117.751 44.1708 117.715 44.075 117.643 43.9992C117.567 43.9269 117.397 43.8601 117.134 43.7986C115.905 43.5276 115.126 43.2801 114.798 43.0561C114.342 42.7454 114.115 42.3136 114.115 41.7607C114.115 41.2621 114.312 40.843 114.705 40.5033C115.099 40.1637 115.71 39.9938 116.537 39.9938C117.325 39.9938 117.91 40.1221 118.293 40.3787C118.676 40.6352 118.94 41.0146 119.085 41.5168L117.648 41.7824C117.587 41.5584 117.47 41.3868 117.296 41.2675C117.126 41.1483 116.882 41.0887 116.565 41.0887C116.163 41.0887 115.876 41.1447 115.703 41.2567C115.587 41.3362 115.529 41.4392 115.529 41.5656C115.529 41.674 115.58 41.7662 115.681 41.842C115.818 41.9432 116.292 42.0859 117.101 42.2702C117.914 42.4545 118.481 42.6803 118.803 42.9477C119.121 43.2187 119.28 43.5963 119.28 44.0805C119.28 44.608 119.059 45.0615 118.619 45.4409C118.178 45.8203 117.526 46.01 116.662 46.01C115.878 46.01 115.256 45.851 114.798 45.533C114.342 45.215 114.044 44.7833 113.903 44.2376Z" fill="#151515"/>
</g>
<defs>
<clipPath id="clip0_512_1797">
<rect width="124" height="48" fill="white"/>
</clipPath>
</defs>
</svg>
)

@ -0,0 +1,20 @@
import { CSSProperties } from "react"; interface Props {style?:CSSProperties}
export default ({ style }:Props) => (
<svg width="150" height="58" viewBox="0 0 150 58" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ ...style }}>
<g clip-path="url(#clip0_522_519)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.6318 2.77152C15.522 2.06379 11.3068 8.62681 7.38602 13.3709C3.94519 17.5343 1.38319 22.2369 1.08561 27.6324C0.769009 33.3726 1.81028 39.3507 5.72092 43.5607C9.74908 47.8972 15.7831 50.6373 21.6318 49.7514C26.9949 48.9391 29.368 43.0496 33.3608 39.3743C37.6963 35.3835 45.7735 33.5274 45.6615 27.6324C45.5493 21.7283 37.0246 20.5726 32.9228 16.329C28.6741 11.9333 27.7012 3.47456 21.6318 2.77152Z" fill="#7E2AEA"/>
<ellipse cx="36.8326" cy="47.51" rx="3.37135" ry="3.37135" fill="#7E2AEA"/>
<circle cx="33.4603" cy="10.0998" r="1.28432" fill="#7E2AEA"/>
<path d="M54.0021 26.2513C53.6276 22.6105 51.9148 19.2385 49.1956 16.7888C46.4764 14.339 42.9445 12.9861 39.2846 12.9922C38.765 12.9924 38.2457 13.0196 37.7289 13.0736C34.0898 13.4558 30.7211 15.1718 28.2725 17.8909C25.8239 20.61 24.4689 24.1395 24.4688 27.7985V27.7985V48.9505H30.8143V39.9609C33.2953 41.6869 36.2464 42.6098 39.2687 42.6049C39.7884 42.6047 40.3077 42.5775 40.8245 42.5235C42.7582 42.3202 44.6331 41.7381 46.3419 40.8103C48.0507 39.8825 49.56 38.6272 50.7837 37.1161C52.0073 35.605 52.9214 33.8676 53.4736 32.0033C54.0258 30.1389 54.2054 28.184 54.0021 26.2502V26.2513ZM45.8523 33.1257C45.1552 33.9915 44.2933 34.7105 43.3164 35.241C42.3396 35.7715 41.2672 36.1028 40.1614 36.216C39.8648 36.2467 39.5669 36.2623 39.2687 36.2625C37.3497 36.2607 35.4882 35.6066 33.9899 34.4075C32.4916 33.2084 31.4454 31.5355 31.0232 29.6635C30.6009 27.7914 30.8276 25.8315 31.666 24.1052C32.5044 22.379 33.9048 20.9891 35.6373 20.1636C37.3697 19.3382 39.3313 19.1262 41.2002 19.5625C43.069 19.9988 44.7339 21.0575 45.9218 22.5648C47.1096 24.0721 47.7498 25.9384 47.7371 27.8574C47.7245 29.7764 47.0599 31.6342 45.8523 33.1257Z" fill="white"/>
<path d="M70.5601 12.9922C70.0405 12.9924 69.5212 13.0196 69.0044 13.0736C65.2337 13.4707 61.7591 15.2992 59.2966 18.1823C56.8341 21.0653 55.5715 24.7831 55.7689 28.5695C55.9663 32.3559 57.6088 35.9223 60.3578 38.5336C63.1068 41.1449 66.7528 42.6021 70.5443 42.6049C71.0639 42.6047 71.5832 42.5775 72.1 42.5234C74.8187 42.234 77.4048 41.1998 79.5733 39.5347C81.7419 37.8696 83.4087 35.6383 84.3903 33.0865H77.1574L77.1278 33.1235C76.2014 34.2687 74.992 35.1521 73.6193 35.6865C72.2466 36.2208 70.7583 36.3875 69.3014 36.1701C67.8445 35.9527 66.4697 35.3587 65.3128 34.4469C64.1559 33.5351 63.2572 32.3371 62.7054 30.9713H85.0207C85.4905 28.8095 85.4707 26.57 84.9628 24.4168C84.4548 22.2637 83.4716 20.2514 82.0851 18.5276C80.6986 16.8037 78.944 15.4119 76.9498 14.4541C74.9556 13.4963 72.7724 12.9968 70.5601 12.9922V12.9922ZM62.7054 24.6257C63.283 23.2039 64.2357 21.9654 65.4617 21.0424C66.6878 20.1193 68.1414 19.5463 69.6675 19.3843C69.9641 19.3535 70.262 19.338 70.5601 19.3378C72.2456 19.3349 73.8932 19.8372 75.2904 20.7798C76.6877 21.7223 77.7704 23.0619 78.399 24.6257H62.7054Z" fill="white"/>
<path d="M100.694 12.9922C98.2684 12.9884 95.8892 13.6552 93.8193 14.9191V12.9922H87.4737V42.6049H93.8193V26.2122C93.8193 24.389 94.5436 22.6404 95.8328 21.3512C97.122 20.062 98.8705 19.3378 100.694 19.3378C102.517 19.3378 104.265 20.062 105.555 21.3512C106.844 22.6404 107.568 24.389 107.568 26.2122V42.6049H113.914V26.2122C113.914 22.706 112.521 19.3435 110.042 16.8642C107.562 14.385 104.2 12.9922 100.694 12.9922Z" fill="white"/>
<path d="M145.646 29.6906V12.9922H139.301V15.6362C136.82 13.9094 133.869 12.9865 130.846 12.9922C130.327 12.9924 129.807 13.0196 129.291 13.0736C125.52 13.4708 122.045 15.2993 119.583 18.1823C117.12 21.0653 115.858 24.7832 116.055 28.5696C116.253 32.356 117.895 35.9223 120.644 38.5336C123.393 41.1449 127.039 42.6021 130.83 42.6049C131.35 42.6047 131.869 42.5775 132.386 42.5235C136.074 42.146 139.483 40.3891 141.931 37.6046C143.833 40.1489 146.587 41.9238 149.69 42.6049V35.9526C148.485 35.4073 147.464 34.5268 146.747 33.4163C146.03 32.3058 145.648 31.0124 145.646 29.6906ZM137.414 33.1236C136.717 33.9893 135.855 34.7081 134.878 35.2386C133.901 35.769 132.829 36.1005 131.723 36.2138C131.427 36.2446 131.129 36.2602 130.83 36.2604C128.663 36.2603 126.577 35.428 125.005 33.9352C123.433 32.4424 122.494 30.4031 122.381 28.238C122.269 26.073 122.992 23.9474 124.401 22.2999C125.811 20.6525 127.798 19.6088 129.955 19.3843C130.251 19.3535 130.549 19.338 130.846 19.3378C132.444 19.3391 134.008 19.7927 135.359 20.646C136.709 21.4993 137.79 22.7175 138.477 24.1596C139.164 25.6018 139.429 27.2089 139.241 28.7952C139.053 30.3816 138.419 31.8822 137.414 33.1236Z" fill="white"/>
<path d="M115.15 55.5195V45.9186H116.991V55.5195H115.15ZM118.883 47.6213V45.9186H120.723V47.6213H118.883ZM118.883 55.5195V48.5644H120.723V55.5195H118.883ZM128.943 55.5195H127.102V51.9699C127.102 51.219 127.063 50.7343 126.984 50.516C126.906 50.2934 126.777 50.1209 126.598 49.9987C126.423 49.8764 126.212 49.8153 125.963 49.8153C125.644 49.8153 125.358 49.9026 125.105 50.0773C124.852 50.2519 124.677 50.4833 124.581 50.7715C124.489 51.0596 124.443 51.5923 124.443 52.3694V55.5195H122.603V48.5644H124.312V49.5861C124.919 48.8002 125.683 48.4072 126.605 48.4072C127.011 48.4072 127.382 48.4815 127.718 48.6299C128.054 48.774 128.307 48.9595 128.478 49.1866C128.652 49.4136 128.772 49.6712 128.838 49.9594C128.908 50.2475 128.943 50.6601 128.943 51.1971V55.5195ZM130.75 55.5195V45.9186H132.59V51.0138L134.745 48.5644H137.011L134.634 51.1055L137.181 55.5195H135.197L133.448 52.3956L132.59 53.2928V55.5195H130.75ZM137.633 53.5352L139.48 53.2536C139.559 53.6116 139.718 53.8844 139.958 54.0722C140.198 54.2556 140.534 54.3472 140.967 54.3472C141.443 54.3472 141.801 54.2599 142.041 54.0853C142.202 53.963 142.283 53.7993 142.283 53.5941C142.283 53.4544 142.239 53.3387 142.152 53.247C142.06 53.1597 141.855 53.0789 141.536 53.0047C140.052 52.6772 139.111 52.3782 138.714 52.1075C138.164 51.732 137.889 51.2102 137.889 50.5422C137.889 49.9397 138.127 49.4333 138.602 49.0229C139.078 48.6124 139.816 48.4072 140.816 48.4072C141.768 48.4072 142.475 48.5622 142.938 48.8722C143.401 49.1822 143.719 49.6406 143.894 50.2475L142.159 50.5684C142.084 50.2977 141.942 50.0903 141.733 49.9463C141.528 49.8022 141.233 49.7302 140.849 49.7302C140.364 49.7302 140.017 49.7978 139.807 49.9332C139.668 50.0292 139.598 50.1537 139.598 50.3065C139.598 50.4375 139.659 50.5488 139.781 50.6405C139.947 50.7627 140.519 50.9352 141.497 51.1578C142.479 51.3805 143.165 51.6534 143.554 51.9765C143.938 52.3039 144.13 52.7602 144.13 53.3452C144.13 53.9827 143.864 54.5306 143.331 54.9891C142.798 55.4475 142.01 55.6767 140.967 55.6767C140.019 55.6767 139.268 55.4846 138.714 55.1004C138.164 54.7162 137.803 54.1944 137.633 53.5352Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_522_519">
<rect width="149.833" height="58" fill="white"/>
</clipPath>
</defs>
</svg>
)

128
src/kitUI/mobileHeader.tsx Normal file

@ -0,0 +1,128 @@
import * as React from 'react';
import Button from '@mui/material/Button';
import Dialog from '@mui/material/Dialog';
import ListItem from '@mui/material/ListItem';
import List from '@mui/material/List';
import AppBar from '@mui/material/AppBar';
import Toolbar from '@mui/material/Toolbar';
import IconButton from '@mui/material/IconButton';
import CloseIcon from '@mui/icons-material/Close';
import Slide from '@mui/material/Slide';
import { TransitionProps } from '@mui/material/transitions';
import MenuIcon from '@mui/icons-material/Menu';
import Box from "@mui/material/Box";
import SectionStyled from './section';
import {Link} from "react-router-dom";
import { useLocation } from 'react-router-dom';
import LogoLight from "@kitUI/img/logo_pena_links_light";
import LogoDark from "@kitUI/img/logo_pena_links_dark";
const buttonMenu: {path: string; title: string} [] =[
{path: '/', title:'Процесс'},
{path: '/devops', title:'Преимущества'},
{path: '/mobileapps', title:'Клиенты и партнёры'},
{path: '/landings', title:'Проекты'},
{path: '/cloudnative', title:'Контакты'},
{path: '/design', title:'Меню 6'},
{path: '/corporatesites', title:'Меню 7'},
{path: '/crmsystems', title: 'Меню 8'}
]
interface Props {
theme?: "dark" | "light",}
const Transition = React.forwardRef(function Transition(
props: TransitionProps & {
children: React.ReactElement;
},
ref: React.Ref<unknown>,
) {
return <Slide direction="up" ref={ref} {...props} />;
});
export default function FullScreenDialog({theme = "dark"}: Props) {
const location = useLocation()
const [open, setOpen] = React.useState(false);
const handleClickOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
return (
<SectionStyled tag={'header'} bg={theme === "dark" ? '#252734' : '#F2F3F7'} mwidth={'1160px'}
sxsect={{
minHeight: '80px',
}}
sxcont={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
'svg': {color: theme === 'dark' ? '#ffffff' : '#000000',}
}}>
<Box>
{theme === "dark" ? <LogoLight/> : <LogoDark/>}
</Box>
<Button variant="text" onClick={handleClickOpen}>
<MenuIcon fontSize='large'/>
</Button>
<Dialog
fullScreen
open={open}
onClose={handleClose}
TransitionComponent={Transition}
>
<AppBar sx={{ position: 'relative', background: theme === "dark" ? '#252734' : '#F2F3F7', boxShadow: 'none',}}>
<Toolbar sx={{display: 'flex', justifyContent: 'space-between', 'svg': {color: theme === 'dark' ? '#ffffff' : '#000000',}}}>
<Box>
{theme === "dark" ? <LogoLight/> : <LogoDark/>}
</Box>
<IconButton
edge="start"
color="inherit"
onClick={handleClose}
aria-label="close"
>
<CloseIcon fontSize='large'/>
</IconButton>
</Toolbar>
</AppBar>
<List sx={{background: theme === "dark" ? '#252734' : '#F2F3F7', height: '100vh'}}>
<ListItem sx={{flexDirection: "column", }}>
{buttonMenu.map((element, index) => (
<Link key={index} to={element.path} style={{textDecoration: 'none'}}>
<Button
variant="text"
sx={{
color: location.pathname === element.path ?
'#7E2AEA'
:
theme === "dark" ? 'white' : 'black',
textTransform: 'none',
}}>{element.title}</Button>
</Link>
))}
<Button variant="outlined"
sx={{
color: theme === "dark" ? 'white' : "black",
border: theme === "dark" ? '1px solid white' : '1px solid black',
mt: "120px",
textTransform: 'none',
fontWeight: '400',
fontSize: '18px',
lineHeight: '24px',
borderRadius: '8px',
padding: '8px 17px',
}}
>Связаться с нами</Button>
</ListItem>
</List>
</Dialog>
</SectionStyled>
);
}

45
src/kitUI/section.tsx Normal file

@ -0,0 +1,45 @@
import * as React from "react";
import Box from '@mui/material/Box';
import { SxProps, Theme } from "@mui/material";
import { useTheme } from '@mui/material/styles';
interface Props {
sxsect?: SxProps<Theme>,
mwidth: string,
tag: React.ElementType,
bg: string,
children: React.ReactNode,
sxcont?: SxProps<Theme>,
}
export default function Section (props: Props) {
const theme = useTheme();
return (
<Box
component={props.tag}
backgroundColor={props.bg}
sx={{
width: '100%',
fontFamily: 'Rubik',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
...props.sxsect
}}
>
<Box
maxWidth={props.mwidth}
sx={{
width: '100%',
padding: '0 20px',
[theme.breakpoints.down('md')]: {
padding: '0 16px',
},
...props.sxcont
}}
>
{props.children}
</Box>
</Box>
);
}

@ -0,0 +1,8 @@
import * as React from "react"
export default function () {
return (
<>
</>
)
}

@ -0,0 +1,8 @@
import * as React from "react"
export default function () {
return (
<>
</>
)
}

31
src/pages/main/main.tsx Normal file

@ -0,0 +1,31 @@
import * as React from "react"
import Header from "@kitUI/header"
import SectionStyled from "@kitUI/section";
export default function () {
return (
<>
<SectionStyled
tag="section"
bg="rgb(37,39,48)"
mwidth="100%"
sxsect={{
height: "760px",
background: "linear-gradient(342deg, rgba(37,39,48,1) 0%, rgba(51,54,64,1) 100%)"
}}
sxcont={{
}}
>
<Header
lightLogo={true}
sxsect={{
background: "inherit",
top: 0,
borderBottom: "1px solid #434654"
}}
/>
</SectionStyled>
</>
)
}

@ -0,0 +1,8 @@
import * as React from "react"
export default function () {
return (
<>
</>
)
}

@ -0,0 +1,8 @@
import * as React from "react"
export default function () {
return (
<>
</>
)
}

127
src/theme.ts Normal file

@ -0,0 +1,127 @@
import {createTheme} from "@mui/material";
declare module '@mui/material/Button' {
interface ButtonPropsVariantOverrides {
template: true;
}
}
declare module '@mui/material/styles/zIndex.d' {
interface ZIndex {
bubbles: number,
content: number,
header: number,
}
}
declare module '@mui/material/Typography' {
interface TypographyPropsVariantOverrides {
t1: true;
}
}
const theme = createTheme({
breakpoints: {
values: {
xs: 460,
sm: 600,
md: 680,
lg: 900,
xl: 1000,
}
},
typography: {
fontFamily: 'Rubik',
},
components: {
MuiButton: {
variants: [
{
props: {
variant: "template"
},
style: {
background: '#7E2AEA',
border: '1px solid #7E2AEA',
borderRadius: '8px',
padding: '15px 56px',
textTransform: 'none',
color: '#ffffff',
fontWeight: 400,
fontSize: '18px',
lineHeight: '24px'
},
},
],
},
MuiTypography: {
variants: [
{
props: {
variant: 'h1'
},
style: {
color: '#000000',
fontWeight: 500,
fontSize: '70px',
lineHeight: '100%',
},
},
{
props: {
variant: 'h3'
},
style: {
color: '#000000',
fontWeight: 500,
fontSize: '36px',
lineHeight: '43px',
},
},
{
props: {
variant: 'h4'
},
style: {
color: '#000000',
fontWeight: 500,
fontSize: "24px",
lineHeight: "28px",
},
},
{
props: {
variant: 't1'
},
style: {
display: "block",
fontWeight: 400,
fontSize: "18px",
lineHeight: "21.33px",
},
},
],
},
},
zIndex: {
bubbles: 0,
content: 1,
header: 10,
}
})
theme.typography.h1 = {
[theme.breakpoints.down('md')]: {
fontSize: "42px",
lineHeight: "50px",
}
}
theme.typography.h3 = {
[theme.breakpoints.down('md')]: {
fontSize: "24px",
lineHeight: "28px",
}
}
export default theme

11
tsconfig.extend.json Normal file

@ -0,0 +1,11 @@
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@theme": ["./theme.ts"],
"@root/*": ["./*"],
"@kitUI/*": ["./kitUI/*"],
"@stores/*": ["./stores/*"]
}
}
}

27
tsconfig.json Normal file

@ -0,0 +1,27 @@
{
"extends": "./tsconfig.extend.json",
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}

12527
yarn.lock Normal file

File diff suppressed because it is too large Load Diff