Initial Commit
35
.gitignore
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# next.js
|
||||
/.next/
|
||||
/out/
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# local env files
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
1
.husky/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
_
|
||||
4
.husky/pre-commit
Executable file
@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
yarn lint-staged
|
||||
9
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"bradlc.vscode-tailwindcss",
|
||||
"heybourn.headwind",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"esbenp.prettier-vscode",
|
||||
"stylelint.vscode-stylelint"
|
||||
]
|
||||
}
|
||||
21
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": true,
|
||||
"source.fixAll.stylelint": true
|
||||
},
|
||||
"stylelint.validate": ["css", "scss"],
|
||||
"css.validate": false,
|
||||
"less.validate": false,
|
||||
"scss.validate": false,
|
||||
"[css]": {
|
||||
"editor.formatOnSave": false
|
||||
},
|
||||
"[scss]": {
|
||||
"editor.formatOnSave": false
|
||||
},
|
||||
"[less]": {
|
||||
"editor.formatOnSave": false
|
||||
}
|
||||
}
|
||||
33
README.md
Normal file
@ -0,0 +1,33 @@
|
||||
# Laconic
|
||||
|
||||
Repository for `Laconic`'s website.
|
||||
|
||||
## Featured Aspects of the Stack
|
||||
|
||||
- [TypeScript](https://www.typescriptlang.org/)
|
||||
- [Next.js](https://nextjs.org/)
|
||||
- [GSAP](https://greensock.com/gsap/)
|
||||
|
||||
## Get Started
|
||||
|
||||
1. Install yarn:
|
||||
|
||||
```
|
||||
npm install -g yarn
|
||||
```
|
||||
|
||||
2. Install the dependencies with:
|
||||
|
||||
```
|
||||
yarn
|
||||
```
|
||||
|
||||
3. Start developing and watch for code changes:
|
||||
|
||||
```
|
||||
yarn dev
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
If you find you need to make extra config to make this work more seamlessly, feel free to submit a PR suggesting your changes. Our focus is to get you up and running with the least steps and burden as possible.
|
||||
5
next-env.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
/// <reference types="next" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
|
||||
// NOTE: This file should not be edited
|
||||
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
||||
5
next-sitemap.js
Normal file
@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
siteUrl: 'https://laconic.com/',
|
||||
generateRobotsTxt: true,
|
||||
exclude: []
|
||||
}
|
||||
13
next.config.js
Normal file
@ -0,0 +1,13 @@
|
||||
const withPlugins = require('next-compose-plugins')
|
||||
const withBundleAnalyzer = require('@next/bundle-analyzer')
|
||||
|
||||
module.exports = withPlugins(
|
||||
[withBundleAnalyzer({ enabled: process.env.ANALYZE === 'true' })],
|
||||
{
|
||||
reactStrictMode: false,
|
||||
swcMinify: true,
|
||||
images: {
|
||||
formats: ['image/avif', 'image/webp']
|
||||
}
|
||||
}
|
||||
)
|
||||
250
package.json
Normal file
@ -0,0 +1,250 @@
|
||||
{
|
||||
"name": "laconic",
|
||||
"version": "1.0.0",
|
||||
"description": "Laconic Website",
|
||||
"repository": "https://github.com/LaconicNetwork/laconic.com",
|
||||
"author": "basement.studio",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"prepare": "husky install",
|
||||
"dev": "next",
|
||||
"build": "next build && next export",
|
||||
"build:analyze": "cross-env ANALYZE=true yarn build",
|
||||
"postbuild": "next-sitemap",
|
||||
"start": "next start",
|
||||
"lint": "eslint . --ext .ts,.tsx,.js,.jsx && stylelint '**/*.{css,scss}'",
|
||||
"tsc": "tsc --pretty --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@juggle/resize-observer": "^3.3.1",
|
||||
"@radix-ui/react-polymorphic": "^0.0.14",
|
||||
"clsx": "^1.1.1",
|
||||
"gsap": "https://basement.studio/gsap/bonus-0.0.12.tgz",
|
||||
"keen-slider": "^6.6.5",
|
||||
"locomotive-scroll": "^4.1.4",
|
||||
"next": "^12.1.1",
|
||||
"next-real-viewport": "^0.7.0",
|
||||
"next-seo": "^5.2.0",
|
||||
"react": "^18.0.0-rc.0",
|
||||
"react-device-detect": "^2.1.2",
|
||||
"react-dom": "^18.0.0-rc.0",
|
||||
"react-fast-marquee": "^1.3.1",
|
||||
"react-hook-form": "^7.28.1",
|
||||
"react-merge-refs": "^1.1.0",
|
||||
"react-use-measure": "^2.1.1",
|
||||
"sharp": "0.30.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/bundle-analyzer": "^12.1.1",
|
||||
"@types/css-font-loading-module": "0.0.7",
|
||||
"@types/mousetrap": "^1.6.9",
|
||||
"@types/node": "^17.0.23",
|
||||
"@types/react": "^17.0.43",
|
||||
"@types/react-dom": "^17.0.14",
|
||||
"@typescript-eslint/eslint-plugin": "^5.16.0",
|
||||
"@typescript-eslint/parser": "^5.16.0",
|
||||
"autoprefixer": "10.4.4",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-config-next": "^12.1.1",
|
||||
"eslint-config-prettier": "8.5.0",
|
||||
"eslint-import-resolver-typescript": "^2.5.0",
|
||||
"eslint-plugin-import": "^2.25.4",
|
||||
"eslint-plugin-jsx-a11y": "^6.5.1",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"eslint-plugin-react": "7.29.4",
|
||||
"eslint-plugin-react-hooks": "^4.3.0",
|
||||
"eslint-plugin-simple-import-sort": "^7.0.0",
|
||||
"husky": "^7.0.4",
|
||||
"lint-staged": "12.3.7",
|
||||
"next-compose-plugins": "^2.2.1",
|
||||
"next-sitemap": "^2.5.14",
|
||||
"next-transpile-modules": "^9.0.0",
|
||||
"prettier": "^2.6.1",
|
||||
"sass": "1.49.9",
|
||||
"stylelint": "^14.6.1",
|
||||
"stylelint-config-prettier": "^9.0.3",
|
||||
"stylelint-config-standard": "^25.0.0",
|
||||
"stylelint-config-standard-scss": "^3.0.0",
|
||||
"stylelint-prettier": "^2.0.0",
|
||||
"typescript": "^4.6.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": "14.x",
|
||||
"yarn": "1.x"
|
||||
},
|
||||
"browserslist": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not ie <= 11",
|
||||
"not op_mini all"
|
||||
],
|
||||
"prettier": {
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"arrowParens": "always",
|
||||
"tabWidth": 2,
|
||||
"printWidth": 80,
|
||||
"trailingComma": "none"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"plugins": [
|
||||
"react",
|
||||
"react-hooks",
|
||||
"simple-import-sort",
|
||||
"@typescript-eslint"
|
||||
],
|
||||
"ignorePatterns": [
|
||||
"src/lib/lambo-jump/*"
|
||||
],
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:import/recommended",
|
||||
"plugin:import/typescript",
|
||||
"plugin:react/recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"prettier",
|
||||
"plugin:prettier/recommended"
|
||||
],
|
||||
"env": {
|
||||
"es6": true,
|
||||
"browser": true,
|
||||
"node": true
|
||||
},
|
||||
"rules": {
|
||||
"react/react-in-jsx-scope": 0,
|
||||
"react/display-name": 0,
|
||||
"react/prop-types": 0,
|
||||
"@typescript-eslint/explicit-function-return-type": 0,
|
||||
"@typescript-eslint/explicit-member-accessibility": 0,
|
||||
"@typescript-eslint/indent": 0,
|
||||
"@typescript-eslint/member-delimiter-style": 0,
|
||||
"@typescript-eslint/no-explicit-any": 0,
|
||||
"@typescript-eslint/no-var-requires": 0,
|
||||
"@typescript-eslint/no-use-before-define": 0,
|
||||
"@typescript-eslint/ban-ts-comment": 0,
|
||||
"simple-import-sort/imports": "error",
|
||||
"simple-import-sort/exports": "error",
|
||||
"react-hooks/exhaustive-deps": "warn",
|
||||
"react/no-unescaped-entities": 0,
|
||||
"curly": [
|
||||
"error",
|
||||
"multi-line"
|
||||
],
|
||||
"react/jsx-no-target-blank": [
|
||||
2,
|
||||
{
|
||||
"allowReferrer": true
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/no-unused-vars": [
|
||||
2,
|
||||
{
|
||||
"argsIgnorePattern": "^_"
|
||||
}
|
||||
],
|
||||
"no-console": [
|
||||
1,
|
||||
{
|
||||
"allow": [
|
||||
"warn",
|
||||
"error"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prettier/prettier": [
|
||||
"warn"
|
||||
],
|
||||
"@typescript-eslint/explicit-module-boundary-types": "off"
|
||||
},
|
||||
"settings": {
|
||||
"import/parsers": {
|
||||
"@typescript-eslint/parser": [
|
||||
".ts",
|
||||
".tsx"
|
||||
]
|
||||
},
|
||||
"import/resolver": {
|
||||
"typescript": {
|
||||
"alwaysTryTypes": true,
|
||||
"project": "."
|
||||
}
|
||||
},
|
||||
"react": {
|
||||
"version": "detect"
|
||||
}
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"ignoreFiles": [
|
||||
"**/*.{ts,tsx,js,jsx}"
|
||||
],
|
||||
"extends": [
|
||||
"stylelint-config-standard",
|
||||
"stylelint-config-standard-scss",
|
||||
"stylelint-prettier/recommended"
|
||||
],
|
||||
"plugins": [
|
||||
"stylelint-prettier"
|
||||
],
|
||||
"rules": {
|
||||
"scss/at-rule-no-unknown": [
|
||||
true,
|
||||
{
|
||||
"ignoreAtRules": [
|
||||
"tailwind",
|
||||
"layer",
|
||||
"apply",
|
||||
"variants",
|
||||
"responsive",
|
||||
"screen",
|
||||
"include",
|
||||
"for",
|
||||
"mixin",
|
||||
"if",
|
||||
"else",
|
||||
"warn",
|
||||
"return",
|
||||
"function",
|
||||
"use",
|
||||
"each"
|
||||
]
|
||||
}
|
||||
],
|
||||
"selector-pseudo-class-no-unknown": [
|
||||
true,
|
||||
{
|
||||
"ignorePseudoClasses": [
|
||||
"global"
|
||||
]
|
||||
}
|
||||
],
|
||||
"property-no-unknown": [
|
||||
true,
|
||||
{
|
||||
"ignoreProperties": [
|
||||
"font-named-instance"
|
||||
]
|
||||
}
|
||||
],
|
||||
"declaration-block-trailing-semicolon": null,
|
||||
"no-descending-specificity": null,
|
||||
"number-leading-zero": null,
|
||||
"length-zero-no-unit": null,
|
||||
"alpha-value-notation": null,
|
||||
"selector-id-pattern": null,
|
||||
"selector-class-pattern": null,
|
||||
"property-no-vendor-prefix": null,
|
||||
"value-no-vendor-prefix": null,
|
||||
"function-no-unknown": null,
|
||||
"scss/no-global-function-names": null,
|
||||
"scss/at-extend-no-missing-placeholder": null
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.@(ts|tsx|css|scss)": [
|
||||
"yarn lint --fix"
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
public/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
public/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
public/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
9
public/browserconfig.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#000000</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
BIN
public/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 332 B |
BIN
public/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 423 B |
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
public/fonts/arthemys/ArthemysDisplay-Regular.woff
Normal file
BIN
public/fonts/arthemys/ArthemysDisplay-Regular.woff2
Normal file
BIN
public/fonts/dm-mono/DMMono-Regular.woff
Normal file
BIN
public/fonts/dm-mono/DMMono-Regular.woff2
Normal file
BIN
public/fonts/tt-hoves/TTHoves-Italic.woff
Normal file
BIN
public/fonts/tt-hoves/TTHoves-Italic.woff2
Normal file
BIN
public/fonts/tt-hoves/TTHoves-Medium.woff
Normal file
BIN
public/fonts/tt-hoves/TTHoves-Medium.woff2
Normal file
BIN
public/fonts/tt-hoves/TTHoves-MediumItalic.woff
Normal file
BIN
public/fonts/tt-hoves/TTHoves-MediumItalic.woff2
Normal file
BIN
public/fonts/tt-hoves/TTHoves-Regular.woff
Normal file
BIN
public/fonts/tt-hoves/TTHoves-Regular.woff2
Normal file
BIN
public/images/about/jimmy-cash.jpg
Normal file
|
After Width: | Height: | Size: 1012 KiB |
BIN
public/images/cash-mobile.png
Normal file
|
After Width: | Height: | Size: 286 KiB |
BIN
public/images/cash-transition.png
Normal file
|
After Width: | Height: | Size: 708 KiB |
BIN
public/images/cash.png
Normal file
|
After Width: | Height: | Size: 3.4 MiB |
1
public/images/cursor/default-active.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="28" height="42" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.65967 34.9953v2.338H0V0h4.66667c-.00234.779333-.00467 1.55867-.007 2.338l.01166-.01167H2.359V35.0047h2.31233l-.01166-.0094ZM21.0069 39.6621c-.0023.7793-.0046 1.5587-.007 2.338h-4.6666c.0023-.7793.0046-1.5587.007-2.338l-.0117.0117c1.5587-.0047 3.1173-.0094 4.6783-.0117ZM28 25.6666c-.7793.0023-1.5587.0047-2.338.007.0047-.7817.007-1.5633.0117-2.345l-.0117.0117c.7793-.0024 1.5587-.0047 2.338-.007v2.3333Z" fill="#000"/><path d="M4.65967 2.33784H6.993v2.33333l.01167-.01166H4.67133V2.32617l-.01166.01167ZM6.99304 4.67133h2.33334v2.33334l.01166-.01167H7.00471V4.65967l-.01167.01166ZM9.32629 7.00483h2.33331v2.33333l.0117-.01166H9.33796V6.99316l-.01167.01167Z" fill="#000"/><path d="M11.6597 9.33784h2.3333v2.33336l.0117-.0117h-2.3334V9.32617l-.0116.01167ZM13.993 11.6713h2.3334v2.3334l.0116-.0117h-2.3333v-2.3333l-.0117.0116ZM16.3263 14.0048h2.3333v2.3334l.0117-.0117H16.338v-2.3333l-.0117.0116Z" fill="#000"/><path d="M18.6597 16.3378h2.3333v2.3334l.0117-.0117h-2.3334v-2.3333l-.0116.0116ZM20.993 18.6713h2.3334v2.3334l.0116-.0117h-2.3333v-2.3333l-.0117.0116ZM23.3263 21.0048h2.3333v2.3334l.0117-.0117H23.338v-2.3333l-.0117.0116ZM14.0047 34.9928h-2.3334v-4.6666l-.0116.0116h2.3333v4.6667l.0117-.0117ZM16.3404 39.6618H14.007v-4.6667l-.0116.0117h2.3333v4.6667l.0117-.0117Z" fill="#000"/><path d="M11.6736 30.3285H9.32861l.01167.0117v-2.3124h2.32162v2.3124l.0117-.0117Z" fill="#000"/><path d="M9.32869 30.3262v2.3333H6.99536l.01167.0117v-2.3334h2.33333l-.01167-.0116ZM6.99532 32.6597v2.3333H4.66199l.01166.0117v-2.3334h2.33333l-.01166-.0116Z" fill="#000"/><path d="M7.00468 32.6712H4.67134v2.3333H2.35901V2.32617h2.31233v2.33334h2.33334v2.33333h2.33333v2.33333h2.33329v2.33333h2.3334v2.3333h2.3333v2.3334h2.3333v2.3333h2.3334v2.3333h2.3333v2.3334h2.3333c-.0046.7816-.007 1.5633-.0116 2.345l.0116-.0117H16.359v4.6783h2.3123l-.0116-.0116v4.6783h2.345l-.0117-.0117v4.6784l.0117-.0117c-1.5587.0047-3.1197.007-4.6784.0117v-4.6667H13.993v-4.6667h-2.3333v-2.3123H9.33801v2.3123H7.00468v2.3334Z" fill="#fff"/><path d="M18.6713 30.338H16.359v-4.6783h9.3123v2.324h-7v2.3543Z" fill="#000"/><path d="M21.0047 35.0045h-2.345v-4.6783h2.345v4.6783Z" fill="#000"/><path d="M20.9954 39.6715v-4.6783h2.3123v4.6783h-2.3123Z" fill="#000"/></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
1
public/images/cursor/default.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="28" height="45" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.66667 0c-.00234.779333-.00468 1.55867-.00701 2.338l.01168-.01167H2.36367V34.9767h2.31232v-2.331h2.34035v-2.3264h2.32632V28.021H11.683v2.3193h2.3263v4.6737h2.3404v4.6247h4.6596V34.993l-.0116.0117h2.317v7.0046h-2.31v2.324H16.338v-2.3426h-2.3403V37.317h-2.3404v-4.6247H9.317v2.3217H6.99067v2.3403H4.65033v2.3124H0V0h4.66667Z" fill="#000"/><path d="M28 27.9998h-2.324v2.3264h-4.683v4.6783l.0117-.0117H18.648v-4.6736h-2.2936v-4.6667h9.3146v-2.3263l-.0116.0116c.7793-.0023 1.5586-.0046 2.338-.007C28 24.8895 28 26.4435 28 27.9998ZM4.65967 2.33784H6.993v2.33333l.01168-.01166H4.67135V2.32617l-.01168.01167ZM6.99304 4.67133h2.33334v2.33334l.01167-.01167H7.00472V4.65967l-.01168.01166ZM9.32629 7.00483h2.33331v2.33333l.0117-.01166H9.33797V6.99316l-.01168.01167Z" fill="#000"/><path d="M11.6597 9.33784h2.3333v2.33336l.0117-.0117h-2.3334V9.32617l-.0116.01167ZM13.993 11.6713h2.3334v2.3334l.0117-.0117h-2.3334v-2.3333l-.0117.0116ZM16.3263 14.0048h2.3333v2.3334l.0117-.0117H16.338v-2.3333l-.0117.0116Z" fill="#000"/><path d="M18.6597 16.3378h2.3333v2.3334l.0117-.0117h-2.3334v-2.3333l-.0116.0116ZM20.993 18.6713h2.3334v2.3334l.0117-.0117h-2.3334v-2.3333l-.0117.0116ZM23.3263 21.0048h2.3333v2.3334l.0117-.0117H23.338v-2.3333l-.0117.0116Z" fill="#000"/><path d="M23.338 20.9953v2.3333h2.3333v2.3263h-9.3146v4.6667h2.2936v4.6737h2.3567v4.6457h-4.6597v-4.6247H14.007v-4.6737h-2.3263v-2.3193H9.34034v2.2983H7.014v2.3263H4.67367v2.3311H2.36133V2.32861H4.669v2.33334h2.33333v2.33333h2.33333v2.33333H11.669v2.33329h2.3333v2.3334h2.3334v2.3333h2.3333v2.3333h2.3333v2.3334h2.3357Z" fill="#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
1
public/images/cursor/pointer-active.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="35" height="52" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.99768 28.0023h2.33567V0H14c.0023.779333.0047 1.55867.007 2.338h-2.3147v4.634h2.303V2.32867h2.3357V9.338l.007-.007c-.14.01167-.2823.03033-.4223.03033-1.2577.00234-2.513.00234-3.7707.00234h-.4643V30.338H7.00701v-2.3403l-.00933.0046Z" fill="#000"/><path d="M2.33567 34.9975c-.77934 0-1.556337.0023-2.33567.0023V18.6665h4.67367v2.338H2.359v4.634h2.303v-4.6433h2.33567v7.0093l.007-.007c-1.38134.0117-2.765.021-4.14634.0327h-.497v.4643c0 2.0183 0 4.0343-.00233 6.0527 0 .154-.021.308-.03033.462l.007-.0117ZM28.0093 48.9977c-.0023.7794-.007 1.5564-.0093 2.3357H11.6667c0-.7793.0023-1.5563.0023-2.3357l-.007.007c.1283-.0116.2567-.0303.385-.0303 5.1917-.0023 10.3857-.0023 15.5773 0 .1284 0 .2567.014.385.0233ZM35 39.6668c-.7793.0023-1.5563.007-2.3356.0093-.0094-.1027-.0234-.2053-.0234-.308-.0023-4.4543-.0023-8.9063 0-13.3607 0-.1143.021-.231.0304-.3453l-.007.007c.7793 0 1.5563-.0023 2.3356-.0023v14ZM16.331 9.33561h2.3193v6.98129h2.3473v2.352l.007-.007H18.69v7.0047h-2.366c-.007-.1517-.0164-.28-.0164-.406V9.71361c0-.12833.021-.25666.0304-.385l-.007.007Z" fill="#000"/><path d="M20.9977 18.6691h4.6667v2.3333l.007-.007h-2.3147v4.6714H20.972v-.4434c0-2.0463 0-4.0926.0024-6.139 0-.14.021-.2823.0303-.4223l-.007.007Z" fill="#000"/><path d="M25.6643 21.0021h4.6667v2.3334l.007-.007h-2.3147v4.6713h-2.3846v-.4434c0-2.0463 0-4.0926.0023-6.139 0-.14.021-.2823.0303-.4223l-.007.007Z" fill="#000"/><path d="M30.3311 23.3356h2.3333v2.3333l.007-.007h-2.3333v-2.3333l-.007.007ZM7.00232 41.9977H4.66899v-4.6666l-.007.007h2.366c0 .7396.00466 1.4466 0 2.156-.007.8376-.021 1.6753-.03033 2.5106-.00234 0 .00466-.007.00466-.007Z" fill="#000"/><path d="M9.33569 46.6642H7.00236v-4.6666l-.007.007h2.366c0 .7396.00467 1.4466 0 2.156-.007.8376-.021 1.6753-.03033 2.5106-.00233 0 .00466-.007.00466-.007ZM4.66895 37.3309H2.33561v-2.3333l-.007.007h2.33334v2.3333l.007-.007Z" fill="#000"/><path d="M11.6689 48.9979H9.33561v-2.3333l-.007.007h2.33329v2.3333l.007-.007Z" fill="#000"/><path d="M11.662 49.0045v-2.3333H9.32864c.01167-.8377.02567-1.6754.03033-2.5107.00467-.707 0-1.4163 0-2.156h-2.366c.01167-.8377.02567-1.6753.03034-2.5107.00466-.707 0-1.4163 0-2.156h-2.366v-2.3333H2.32397c.01167-.154.03034-.308.03034-.462.00233-2.0183.00233-4.0343.00233-6.0527v-.4643h.497c1.38133-.0117 2.765-.021 4.14633-.0327v2.3404h4.67363V9.35884h.4644c1.2576 0 2.513 0 3.7706-.00234.14 0 .2824-.02099.4224-.03033-.0117.12834-.0304.25667-.0304.385-.0023 5.18233-.0023 10.36463 0 15.54703 0 .126.0094.2543.0164.406h2.366v-7.0047h2.3146c-.0116.14-.0303.2823-.0303.4223-.0023 2.0464-.0023 4.0927-.0023 6.139v.4434h2.3846v-4.6714h2.3147c-.0117.14-.0303.2824-.0303.4224-.0024 2.0463-.0024 4.0926-.0024 6.139v.4433h2.3847v-4.6713h2.3147v2.3333h2.3333c-.0117.1143-.0303.231-.0303.3453-.0024 4.4544-.0024 8.9064 0 13.3607 0 .1027.0163.2053.0233.308l.0093-.014h-2.3683c0 .8937-.0023 1.7453 0 2.597.0047 1.4723.014 2.9423.0233 4.4147l.0117-.0117h-2.345v2.345l.014-.0093c-.1283-.0094-.2567-.0234-.385-.0234-5.1917-.0023-10.3857-.0023-15.5773 0-.1214.0024-.2497.021-.378.0327Z" fill="#00ACD2"/><path d="M13.9954 2.32617v4.64334h-2.303v-4.634h2.3146c0 .00233-.0116-.00934-.0116-.00934ZM4.66201 20.9932v4.6433h-2.303v-4.634h2.31467c0 .0023-.01167-.0093-.01167-.0093Z" fill="#fff"/><path d="M30.3287 46.6738c-.007-1.4724-.0163-2.9424-.0233-4.4147-.0024-.8517 0-1.701 0-2.597h2.3683v7.0117h-2.345Z" fill="#000"/><path d="M27.9954 49.0071v-2.345h2.345v2.345h-2.345Z" fill="#000"/></svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
1
public/images/cursor/pointer.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="35" height="54" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M32.6643 25.6688c.7794 0 1.5564-.0023 2.3357-.0023v16.3333h-2.3497v7.021h-2.331v2.3194H28v2.3263H11.6667v-2.3427H9.32867v-2.338h-2.338v-4.6573h-2.338v-4.6713h-2.324v-2.324H0V18.6665h4.67367v2.338H2.359v4.634h2.303v-4.6433h2.33567v7.0093l.007-.007c-.14.0117-.28234.0303-.42234.0303-1.25766.0024-2.51533.0024-3.77066.0024H2.394v6.9556h2.30767v2.3334H7.049v4.6666h2.31933v4.6667h2.34737v2.289h16.275v-2.31h2.3333v-7.014h2.3193v-.5063c0-4.3167 0-8.6334.0024-12.9477 0-.168.021-.3337.0303-.5017l-.0117.007Z" fill="#000"/><path d="M6.99768 28.0023h2.33567V0H14c.0023.779333.0047 1.55867.007 2.338h-2.3147v4.634h2.303V2.32867h2.3357V9.338l.007-.007c-.14.01167-.2823.03033-.4223.03033-1.2577.00234-2.513.00234-3.7707.00234h-.4643V30.338H7.00701v-2.3403l-.00933.0046Z" fill="#000"/><path d="M16.331 9.33561h2.3193v6.98129h2.3473v2.352l.007-.007H18.69v7.0047h-2.366c-.007-.1517-.0164-.28-.0164-.406V9.71361c0-.12833.021-.25666.0303-.385l-.0069.007Z" fill="#000"/><path d="M20.9977 18.6691h4.6667v2.3333l.007-.007h-2.3147v4.6714H20.972v-.4434c0-2.0463 0-4.0926.0024-6.139 0-.14.021-.2823.0303-.4223l-.007.007Z" fill="#000"/><path d="M25.6643 21.0021h4.6667v2.3334l.007-.007h-2.3147v4.6713h-2.3846v-.4434c0-2.0463 0-4.0926.0023-6.139 0-.14.021-.2823.0303-.4223l-.007.007Z" fill="#000"/><path d="M30.3311 23.3356h2.3333v2.3333l.007-.007h-2.3333v-2.3333l-.007.007Z" fill="#000"/><path d="M30.338 23.3287v2.3334h2.3333c-.0117.168-.0304.3336-.0304.5016-.0023 4.3167-.0023 8.6334-.0023 12.9477v.5063h-2.3193v7.014H27.986v2.31H11.7109v-2.289H9.36362v-4.6666H7.04428v-4.6667H4.69695v-2.3333H2.38928v-6.9557h.41767c1.25767 0 2.51533 0 3.77067-.0023.14 0 .28233-.021.42233-.0304v2.3404h4.67365V9.36372h.4643c1.2577 0 2.513 0 3.7707-.00233.14 0 .2823-.021.4223-.03034-.0116.12834-.0303.25667-.0303.385-.0023 5.18235-.0023 10.36465 0 15.54705 0 .126.0093.2543.0163.406h2.366v-7.0047h2.3147c-.0117.14-.0303.2823-.0303.4223-.0024 2.0464-.0024 4.0927-.0024 6.139v.4434h2.3847v-4.6714h2.3147c-.0117.14-.0304.2824-.0304.4224-.0023 2.0463-.0023 4.0926-.0023 6.139v.4433h2.3847v-4.6713c.8073-.0024 1.5633-.0024 2.3217-.0024Z" fill="#00ACD2"/><path d="M4.66201 20.9932v4.6433h-2.303v-4.634h2.31467c0 .0023-.01167-.0093-.01167-.0093ZM13.9954 2.32617v4.64334h-2.303v-4.634h2.3146c0 .00233-.0116-.00934-.0116-.00934Z" fill="#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/images/faces/jimmy.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
1
public/images/footer/footer.svg
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
public/images/gifs/cash-2.gif
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
public/images/gifs/cash-3.gif
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
public/images/gifs/cash.gif
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
public/images/gifs/lambo-jump.gif
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
public/images/home/lambo-jump-poster.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
244
public/images/home/lambo-jump-title.svg
Normal file
@ -0,0 +1,244 @@
|
||||
<svg width="706" height="109" viewBox="0 0 706 109" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M54.8529 108.73V81.4903H36.693V8.85059H9.45312V108.73H54.8529Z" fill="black"/>
|
||||
<path d="M57.5947 8.85059V108.73H84.8345V72.4103H93.9145V108.73H121.154V8.85059H57.5947ZM93.9145 45.1704H84.8345V36.0905H93.9145V45.1704Z" fill="black"/>
|
||||
<path d="M123.861 8.85059V108.73H151.101V36.0905H160.18V108.73H187.42V36.0905H196.5V108.73H223.74V8.85059H123.861Z" fill="black"/>
|
||||
<path d="M226.5 8.85059V108.73H290.059V63.3303H280.979V54.2504H290.059V8.85059H226.5ZM262.819 81.4903H253.74V72.4103H262.819V81.4903ZM253.74 45.1704V36.0905H262.819V45.1704H253.74Z" fill="black"/>
|
||||
<path d="M292.766 8.85059V108.73H356.325V8.85059H292.766ZM329.085 81.4903H320.005V36.0905H329.085V81.4903Z" fill="black"/>
|
||||
<path d="M443.493 8.85059V81.4903H434.413V45.1704H407.173V108.73H470.733V8.85059H443.493Z" fill="black"/>
|
||||
<path d="M509.759 8.85059V81.4903H500.679V8.85059H473.439V108.73H536.999V8.85059H509.759Z" fill="black"/>
|
||||
<path d="M539.705 8.85059V108.73H566.945V36.0905H576.025V108.73H603.265V36.0905H612.345V108.73H639.585V8.85059H539.705Z" fill="black"/>
|
||||
<path d="M642.344 8.85059V108.73H669.584V90.5702H705.904V8.85059H642.344ZM678.664 63.3303H669.584V36.0905H678.664V63.3303Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.693 81.4903V8.85059H9.45312V108.73H54.8529V81.4903H36.693ZM51.5273 84.8158H33.3674V12.1762H12.7787V105.405H51.5273V84.8158ZM123.861 8.85059V108.73H151.101V36.0905H160.18V108.73H187.42V36.0905H196.5V108.73H223.74V8.85059H123.861ZM127.186 12.1762H220.415V105.405H199.826V32.7649H184.095V105.405H163.506V32.7649H147.775V105.405H127.186V12.1762ZM226.5 8.85059V108.73H290.059V63.3303H280.979V54.2504H290.059V8.85059H226.5ZM229.825 12.1762H286.734V50.9248H277.654V66.6559H286.734V105.405H229.825V12.1762ZM292.766 8.85059V108.73H356.325V8.85059H292.766ZM296.091 12.1762H353V105.405H296.091V12.1762ZM57.5947 108.73H84.8345V72.4103H93.9145V108.73H121.154V8.85059H57.5947V108.73ZM60.9202 12.1762V105.405H81.5089V69.0847H97.2401V105.405H117.829V12.1762H60.9202ZM97.2401 48.496H81.5089V32.7649H97.2401V48.496ZM266.145 84.8158H250.414V69.0847H266.145V84.8158ZM250.414 48.496V32.7649H266.145V48.496H250.414ZM332.411 84.8158H316.68V32.7649H332.411V84.8158ZM473.439 8.85059V108.73H536.999V8.85059H509.759V81.4903H500.679V8.85059H473.439ZM476.765 12.1762H497.353V84.8158H513.085V12.1762H533.673V105.405H476.765V12.1762ZM539.705 8.85059V108.73H566.945V36.0905H576.025V108.73H603.265V36.0905H612.345V108.73H639.585V8.85059H539.705ZM543.031 12.1762H636.259V105.405H615.67V32.7649H599.939V105.405H579.35V32.7649H563.619V105.405H543.031V12.1762ZM642.344 8.85059V108.73H669.584V90.5702H705.904V8.85059H642.344ZM645.67 12.1762H702.578V87.2446H666.258V105.405H645.67V12.1762ZM446.819 84.8158H431.087V48.496H410.499V105.405H467.407V12.1762H446.819V84.8158ZM470.733 8.85059V108.73H407.173V45.1704H434.413V81.4903H443.493V8.85059H470.733ZM681.99 66.6559H666.258V32.7649H681.99V66.6559ZM84.8345 45.1704V36.0905H93.9145V45.1704H84.8345ZM253.74 81.4903V72.4103H262.819V81.4903H253.74ZM253.74 36.0905H262.819V45.1704H253.74V36.0905ZM329.085 81.4903V36.0905H320.005V81.4903H329.085ZM678.664 63.3303V36.0905H669.584V63.3303H678.664Z" fill="black"/>
|
||||
<path d="M0.634766 0.0327148H27.8746L36.6929 8.851H9.45305L0.634766 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.634766 0.0327148L9.45305 8.851H36.6929L27.8746 0.0327148H0.634766ZM8.66343 3.3583L10.8305 5.52541H28.6643L26.4971 3.3583H8.66343Z" fill="black"/>
|
||||
<path d="M0.634766 99.9123V0.0327148L9.45305 8.851V108.731L0.634766 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.96035 98.5348L6.12746 100.702V10.2285L3.96035 8.06138V98.5348ZM0.634766 0.0327148V99.9123L9.45305 108.731V8.851L0.634766 0.0327148Z" fill="black"/>
|
||||
<path d="M27.874 0.0327148V72.6724L36.6923 81.4907V8.85099L27.874 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M31.1996 71.2949L33.3667 73.462V10.2285L31.1996 8.06138V71.2949ZM27.874 72.6724L36.6923 81.4907V8.85099L27.874 0.0327148V72.6724Z" fill="black"/>
|
||||
<path d="M48.7769 0.0327148H112.337L121.155 8.851H57.5951L48.7769 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.7769 0.0327148L57.5951 8.851H121.155L112.337 0.0327148H48.7769ZM56.8055 3.3583L58.9726 5.52541H113.126L110.959 3.3583H56.8055Z" fill="black"/>
|
||||
<path d="M48.7769 99.9123V0.0327148L57.5951 8.851V108.731L48.7769 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M52.1024 98.5348L54.2696 100.702V10.2285L52.1024 8.06138V98.5348ZM48.7769 0.0327148V99.9123L57.5951 108.731V8.851L48.7769 0.0327148Z" fill="black"/>
|
||||
<path d="M76.0161 27.2725V36.3524L84.8344 45.1707V36.0907L76.0161 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M76.0161 36.3524V27.2725L84.8344 36.0907V45.1707L76.0161 36.3524Z" fill="black"/>
|
||||
<path d="M85.0961 27.2725H76.0161L84.8344 36.0907H93.9144L85.0961 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M76.0161 27.2725L84.8344 36.0907H93.9144L85.0961 27.2725H76.0161Z" fill="black"/>
|
||||
<path d="M27.874 72.6724H46.0339L54.8522 81.4906H36.6923L27.874 72.6724Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27.874 72.6724L36.6923 81.4906H54.8522L46.0339 72.6724H27.874ZM35.9027 75.9979L38.0698 78.1651H46.8236L44.6564 75.9979H35.9027Z" fill="black"/>
|
||||
<path d="M76.0161 36.3525H85.0961L93.9144 45.1708H84.8344L76.0161 36.3525Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M76.0161 36.3525L84.8344 45.1708H93.9144L85.0961 36.3525H76.0161Z" fill="black"/>
|
||||
<path d="M85.0957 36.3524V27.2725L93.914 36.0907V45.1707L85.0957 36.3524Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M85.0957 27.2725L93.914 36.0907V45.1707L85.0957 36.3524V27.2725Z" fill="black"/>
|
||||
<path d="M46.0346 99.9121H0.634766L9.45304 108.73H54.8528L46.0346 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.634766 99.9121L9.45304 108.73H54.8528L46.0346 99.9121H0.634766ZM8.66343 103.238L10.8305 105.405H46.8242L44.6571 103.238H8.66343Z" fill="black"/>
|
||||
<path d="M46.0342 72.6724V99.9122L54.8525 108.731V81.4906L46.0342 72.6724Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M49.3598 98.5347L51.5269 100.702V82.8681L49.3598 80.701V98.5347ZM46.0342 99.9122L54.8525 108.731V81.4906L46.0342 72.6724V99.9122Z" fill="black"/>
|
||||
<path d="M85.0961 63.5918H76.0161L84.8344 72.4101H93.9144L85.0961 63.5918Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M76.0161 63.5918L84.8344 72.4101H93.9144L85.0961 63.5918H76.0161Z" fill="black"/>
|
||||
<path d="M76.0161 63.5918V99.9116L84.8344 108.73V72.4101L76.0161 63.5918Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M79.3417 98.5341L81.5088 100.701V73.7876L79.3417 71.6205V98.5341ZM76.0161 99.9116L84.8344 108.73V72.4101L76.0161 63.5918V99.9116Z" fill="black"/>
|
||||
<path d="M76.0167 99.9121H48.7769L57.5951 108.73H84.835L76.0167 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.7769 99.9121L57.5951 108.73H84.835L76.0167 99.9121H48.7769ZM56.8055 103.238L58.9726 105.405H76.8063L74.6392 103.238H56.8055Z" fill="black"/>
|
||||
<path d="M112.335 0.0327148V99.9123L121.153 108.731V8.851L112.335 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M115.661 98.5348L117.828 100.702V10.2285L115.661 8.06138V98.5348ZM112.335 99.9123L121.153 108.731V8.851L112.335 0.0327148V99.9123Z" fill="black"/>
|
||||
<path d="M115.043 99.9123V0.0327148L123.862 8.851V108.731L115.043 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M118.369 98.5348L120.536 100.702V10.2285L118.369 8.06138V98.5348ZM115.043 0.0327148V99.9123L123.862 108.731V8.851L115.043 0.0327148Z" fill="black"/>
|
||||
<path d="M115.043 0.0327148H214.923L223.741 8.851H123.862L115.043 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M115.043 0.0327148L123.862 8.851H223.741L214.923 0.0327148H115.043ZM123.072 3.3583L125.239 5.52541H215.713L213.546 3.3583H123.072Z" fill="black"/>
|
||||
<path d="M85.0957 99.9116V63.5918L93.914 72.4101V108.73L85.0957 99.9116Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M88.4213 98.5341L90.5884 100.701V73.7876L88.4213 71.6205V98.5341ZM85.0957 63.5918V99.9116L93.914 108.73V72.4101L85.0957 63.5918Z" fill="black"/>
|
||||
<path d="M151.363 27.2725H142.283L151.101 36.0907H160.181L151.363 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M142.283 27.2725L151.101 36.0907H160.181L151.363 27.2725H142.283Z" fill="black"/>
|
||||
<path d="M112.336 99.9121H85.0957L93.914 108.73H121.154L112.336 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M85.0957 99.9121L93.914 108.73H121.154L112.336 99.9121H85.0957ZM93.1244 103.238L95.2915 105.405H113.125L110.958 103.238H93.1244Z" fill="black"/>
|
||||
<path d="M142.283 27.2725V99.9121L151.101 108.73V36.0907L142.283 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M145.608 98.5346L147.775 100.702V37.4682L145.608 35.3011V98.5346ZM142.283 99.9121L151.101 108.73V36.0907L142.283 27.2725V99.9121Z" fill="black"/>
|
||||
<path d="M187.682 27.2725H178.602L187.42 36.0907H196.5L187.682 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M178.602 27.2725L187.42 36.0907H196.5L187.682 27.2725H178.602Z" fill="black"/>
|
||||
<path d="M151.361 99.9121V27.2725L160.18 36.0907V108.73L151.361 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M154.687 98.5346L156.854 100.702V37.4682L154.687 35.3011V98.5346ZM151.361 27.2725V99.9121L160.18 108.73V36.0907L151.361 27.2725Z" fill="black"/>
|
||||
<path d="M142.283 99.9121H115.043L123.862 108.73H151.102L142.283 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M115.043 99.9121L123.862 108.73H151.102L142.283 99.9121H115.043ZM123.072 103.238L125.239 105.405H143.073L140.906 103.238H123.072Z" fill="black"/>
|
||||
<path d="M178.602 27.2725V99.9121L187.42 108.73V36.0907L178.602 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M181.927 98.5346L184.094 100.702V37.4682L181.927 35.3011V98.5346ZM178.602 99.9121L187.42 108.73V36.0907L178.602 27.2725V99.9121Z" fill="black"/>
|
||||
<path d="M217.681 0.0327148H281.241L290.059 8.851H226.499L217.681 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M217.681 0.0327148L226.499 8.851H290.059L281.241 0.0327148H217.681ZM225.71 3.3583L227.877 5.52541H282.031L279.863 3.3583H225.71Z" fill="black"/>
|
||||
<path d="M187.682 99.9121V27.2725L196.5 36.0907V108.73L187.682 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M191.008 98.5346L193.175 100.702V37.4682L191.008 35.3011V98.5346ZM187.682 27.2725V99.9121L196.5 108.73V36.0907L187.682 27.2725Z" fill="black"/>
|
||||
<path d="M178.601 99.9121H151.361L160.18 108.73H187.419L178.601 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M151.361 99.9121L160.18 108.73H187.419L178.601 99.9121H151.361ZM159.39 103.238L161.557 105.405H179.391L177.224 103.238H159.39Z" fill="black"/>
|
||||
<path d="M214.922 0.0327148V99.9123L223.741 108.731V8.851L214.922 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M218.248 98.5348L220.415 100.702V10.2285L218.248 8.06138V98.5348ZM214.922 99.9123L223.741 108.731V8.851L214.922 0.0327148V99.9123Z" fill="black"/>
|
||||
<path d="M217.681 99.9123V0.0327148L226.499 8.851V108.731L217.681 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M221.007 98.5348L223.174 100.702V10.2285L221.007 8.06138V98.5348ZM217.681 0.0327148V99.9123L226.499 108.731V8.851L217.681 0.0327148Z" fill="black"/>
|
||||
<path d="M244.921 27.2725V36.3524L253.74 45.1707V36.0907L244.921 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M244.921 36.3524V27.2725L253.74 36.0907V45.1707L244.921 36.3524Z" fill="black"/>
|
||||
<path d="M254.001 27.2725H244.921L253.74 36.0907H262.82L254.001 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M244.921 27.2725L253.74 36.0907H262.82L254.001 27.2725H244.921Z" fill="black"/>
|
||||
<path d="M244.921 36.3525H254.001L262.82 45.1708H253.74L244.921 36.3525Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M244.921 36.3525L253.74 45.1708H262.82L254.001 36.3525H244.921Z" fill="black"/>
|
||||
<path d="M254.001 36.3524V27.2725L262.819 36.0907V45.1707L254.001 36.3524Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M254.001 27.2725L262.819 36.0907V45.1707L254.001 36.3524V27.2725Z" fill="black"/>
|
||||
<path d="M214.922 99.9121H187.682L196.5 108.73H223.74L214.922 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M187.682 99.9121L196.5 108.73H223.74L214.922 99.9121H187.682ZM195.711 103.238L197.878 105.405H215.712L213.545 103.238H195.711Z" fill="black"/>
|
||||
<path d="M281.242 0.0327148V45.4325L290.06 54.2508V8.85099L281.242 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M284.568 44.055L286.735 46.2221V10.2285L284.568 8.06138V44.055ZM281.242 45.4325L290.06 54.2508V8.85099L281.242 0.0327148V45.4325Z" fill="black"/>
|
||||
<path d="M244.921 63.5918V72.6718L253.74 81.49V72.4101L244.921 63.5918Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M244.921 72.6718V63.5918L253.74 72.4101V81.49L244.921 72.6718Z" fill="black"/>
|
||||
<path d="M254.001 63.5918H244.921L253.74 72.4101H262.82L254.001 63.5918Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M244.921 63.5918L253.74 72.4101H262.82L254.001 63.5918H244.921Z" fill="black"/>
|
||||
<path d="M283.948 0.0327148H347.507L356.326 8.851H292.766L283.948 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M283.948 0.0327148L292.766 8.851H356.326L347.507 0.0327148H283.948ZM291.976 3.3583L294.144 5.52541H348.297L346.13 3.3583H291.976Z" fill="black"/>
|
||||
<path d="M244.921 72.6724H254.001L262.82 81.4906H253.74L244.921 72.6724Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M244.921 72.6724L253.74 81.4906H262.82L254.001 72.6724H244.921Z" fill="black"/>
|
||||
<path d="M254.001 72.6718V63.5918L262.819 72.4101V81.49L254.001 72.6718Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M254.001 63.5918L262.819 72.4101V81.49L254.001 72.6718V63.5918Z" fill="black"/>
|
||||
<path d="M272.161 45.4331V54.5131L280.979 63.3313V54.2514L272.161 45.4331Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M272.161 54.5131V45.4331L280.979 54.2514V63.3313L272.161 54.5131Z" fill="black"/>
|
||||
<path d="M281.241 45.4331H272.161L280.979 54.2514H290.059L281.241 45.4331Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M272.161 45.4331L280.979 54.2514H290.059L281.241 45.4331H272.161Z" fill="black"/>
|
||||
<path d="M272.161 54.5127H281.241L290.059 63.331H280.979L272.161 54.5127Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M272.161 54.5127L280.979 63.331H290.059L281.241 54.5127H272.161Z" fill="black"/>
|
||||
<path d="M283.948 99.9123V0.0327148L292.766 8.851V108.731L283.948 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M287.273 98.5348L289.44 100.702V10.2285L287.273 8.06138V98.5348ZM283.948 0.0327148V99.9123L292.766 108.731V8.851L283.948 0.0327148Z" fill="black"/>
|
||||
<path d="M320.267 27.2725H311.187L320.005 36.0907H329.085L320.267 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M311.187 27.2725L320.005 36.0907H329.085L320.267 27.2725H311.187Z" fill="black"/>
|
||||
<path d="M281.241 99.9121H217.681L226.499 108.73H290.059L281.241 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M217.681 99.9121L226.499 108.73H290.059L281.241 99.9121H217.681ZM225.71 103.238L227.877 105.405H282.031L279.863 103.238H225.71Z" fill="black"/>
|
||||
<path d="M281.242 54.5127V99.9125L290.06 108.731V63.331L281.242 54.5127Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M284.568 98.535L286.735 100.702V64.7085L284.568 62.5414V98.535ZM281.242 99.9125L290.06 108.731V63.331L281.242 54.5127V99.9125Z" fill="black"/>
|
||||
<path d="M311.187 27.2725V72.6723L320.005 81.4905V36.0907L311.187 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M314.513 71.2948L316.68 73.4619V37.4682L314.513 35.3011V71.2948ZM311.187 72.6723L320.005 81.4905V36.0907L311.187 27.2725V72.6723Z" fill="black"/>
|
||||
<path d="M320.268 72.6723V27.2725L329.086 36.0907V81.4905L320.268 72.6723Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M323.593 71.2948L325.76 73.4619V37.4682L323.593 35.3011V71.2948ZM320.268 27.2725V72.6723L329.086 81.4905V36.0907L320.268 27.2725Z" fill="black"/>
|
||||
<path d="M311.187 72.6724H320.267L329.085 81.4906H320.005L311.187 72.6724Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M311.187 72.6724L320.005 81.4906H329.085L320.267 72.6724H311.187Z" fill="black"/>
|
||||
<path d="M347.507 0.0327148V99.9123L356.325 108.731V8.851L347.507 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M350.832 98.5348L353 100.702V10.2285L350.832 8.06138V98.5348ZM347.507 99.9123L356.325 108.731V8.851L347.507 0.0327148V99.9123Z" fill="black"/>
|
||||
<path d="M347.507 99.9121H283.948L292.766 108.73H356.326L347.507 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M283.948 99.9121L292.766 108.73H356.326L347.507 99.9121H283.948ZM291.976 103.238L294.144 105.405H348.297L346.13 103.238H291.976Z" fill="black"/>
|
||||
<path d="M398.354 36.3525H425.594L434.412 45.1708H407.172L398.354 36.3525Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M398.354 36.3525L407.172 45.1708H434.412L425.594 36.3525H398.354ZM406.383 39.6781L408.55 41.8452H426.383L424.216 39.6781H406.383Z" fill="black"/>
|
||||
<path d="M434.675 0.0327148H461.915L470.733 8.851H443.493L434.675 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M434.675 0.0327148L443.493 8.851H470.733L461.915 0.0327148H434.675ZM442.703 3.3583L444.871 5.52541H462.704L460.537 3.3583H442.703Z" fill="black"/>
|
||||
<path d="M398.354 99.9123V36.3525L407.172 45.1708V108.731L398.354 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M401.68 98.5348L403.847 100.702V46.5483L401.68 44.3812V98.5348ZM398.354 36.3525V99.9123L407.172 108.731V45.1708L398.354 36.3525Z" fill="black"/>
|
||||
<path d="M434.675 72.6724V0.0327148L443.493 8.85099V81.4907L434.675 72.6724Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M438 71.2949L440.168 73.462V10.2285L438 8.06138V71.2949ZM434.675 0.0327148V72.6724L443.493 81.4907V8.85099L434.675 0.0327148Z" fill="black"/>
|
||||
<path d="M464.621 0.0327148H491.86L500.679 8.851H473.439L464.621 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M464.621 0.0327148L473.439 8.851H500.679L491.86 0.0327148H464.621ZM472.649 3.3583L474.816 5.52541H492.65L490.483 3.3583H472.649Z" fill="black"/>
|
||||
<path d="M425.595 36.3525V72.6724L434.413 81.4907V45.1708L425.595 36.3525Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M428.92 71.2949L431.087 73.462V46.5483L428.92 44.3812V71.2949ZM425.595 72.6724L434.413 81.4907V45.1708L425.595 36.3525V72.6724Z" fill="black"/>
|
||||
<path d="M425.595 72.6724H434.675L443.493 81.4906H434.413L425.595 72.6724Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M425.595 72.6724L434.413 81.4906H443.493L434.675 72.6724H425.595Z" fill="black"/>
|
||||
<path d="M461.914 0.0327148V99.9123L470.732 108.731V8.851L461.914 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M465.24 98.5348L467.407 100.702V10.2285L465.24 8.06138V98.5348ZM461.914 99.9123L470.732 108.731V8.851L461.914 0.0327148V99.9123Z" fill="black"/>
|
||||
<path d="M464.621 99.9123V0.0327148L473.439 8.851V108.731L464.621 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M467.946 98.5348L470.113 100.702V10.2285L467.946 8.06138V98.5348ZM464.621 0.0327148V99.9123L473.439 108.731V8.851L464.621 0.0327148Z" fill="black"/>
|
||||
<path d="M500.941 0.0327148H528.181L537 8.851H509.76L500.941 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M500.941 0.0327148L509.76 8.851H537L528.181 0.0327148H500.941ZM508.97 3.3583L511.137 5.52541H528.971L526.804 3.3583H508.97Z" fill="black"/>
|
||||
<path d="M491.86 0.0327148V72.6724L500.678 81.4907V8.85099L491.86 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M495.185 71.2949L497.353 73.462V10.2285L495.185 8.06138V71.2949ZM491.86 72.6724L500.678 81.4907V8.85099L491.86 0.0327148V72.6724Z" fill="black"/>
|
||||
<path d="M461.914 99.9121H398.354L407.172 108.73H470.732L461.914 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M398.354 99.9121L407.172 108.73H470.732L461.914 99.9121H398.354ZM406.383 103.238L408.55 105.405H462.703L460.536 103.238H406.383Z" fill="black"/>
|
||||
<path d="M500.941 72.6724V0.0327148L509.76 8.85099V81.4907L500.941 72.6724Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M504.267 71.2949L506.434 73.462V10.2285L504.267 8.06138V71.2949ZM500.941 0.0327148V72.6724L509.76 81.4907V8.85099L500.941 0.0327148Z" fill="black"/>
|
||||
<path d="M491.86 72.6724H500.94L509.758 81.4906H500.678L491.86 72.6724Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M491.86 72.6724L500.678 81.4906H509.758L500.94 72.6724H491.86Z" fill="black"/>
|
||||
<path d="M528.181 0.0327148V99.9123L536.999 108.731V8.851L528.181 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M531.506 98.5348L533.673 100.702V10.2285L531.506 8.06138V98.5348ZM528.181 99.9123L536.999 108.731V8.851L528.181 0.0327148V99.9123Z" fill="black"/>
|
||||
<path d="M530.886 0.0327148H630.766L639.584 8.851H539.705L530.886 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M530.886 0.0327148L539.705 8.851H639.584L630.766 0.0327148H530.886ZM538.915 3.3583L541.082 5.52541H631.555L629.388 3.3583H538.915Z" fill="black"/>
|
||||
<path d="M530.886 99.9123V0.0327148L539.705 8.851V108.731L530.886 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M534.212 98.5348L536.379 100.702V10.2285L534.212 8.06138V98.5348ZM530.886 0.0327148V99.9123L539.705 108.731V8.851L530.886 0.0327148Z" fill="black"/>
|
||||
<path d="M567.206 27.2725H558.126L566.945 36.0907H576.025L567.206 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M558.126 27.2725L566.945 36.0907H576.025L567.206 27.2725H558.126Z" fill="black"/>
|
||||
<path d="M528.18 99.9121H464.621L473.439 108.73H536.999L528.18 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M464.621 99.9121L473.439 108.73H536.999L528.18 99.9121H464.621ZM472.649 103.238L474.816 105.405H528.97L526.803 103.238H472.649Z" fill="black"/>
|
||||
<path d="M558.126 27.2725V99.9121L566.945 108.73V36.0907L558.126 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M561.452 98.5346L563.619 100.702V37.4682L561.452 35.3011V98.5346ZM558.126 99.9121L566.945 108.73V36.0907L558.126 27.2725V99.9121Z" fill="black"/>
|
||||
<path d="M603.527 27.2725H594.447L603.266 36.0907H612.345L603.527 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M594.447 27.2725L603.266 36.0907H612.345L603.527 27.2725H594.447Z" fill="black"/>
|
||||
<path d="M567.207 99.9121V27.2725L576.025 36.0907V108.73L567.207 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M570.533 98.5346L572.7 100.702V37.4682L570.533 35.3011V98.5346ZM567.207 27.2725V99.9121L576.025 108.73V36.0907L567.207 27.2725Z" fill="black"/>
|
||||
<path d="M558.126 99.9121H530.886L539.705 108.73H566.944L558.126 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M530.886 99.9121L539.705 108.73H566.944L558.126 99.9121H530.886ZM538.915 103.238L541.082 105.405H558.916L556.749 103.238H538.915Z" fill="black"/>
|
||||
<path d="M594.447 27.2725V99.9121L603.266 108.73V36.0907L594.447 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M597.773 98.5346L599.94 100.702V37.4682L597.773 35.3011V98.5346ZM594.447 99.9121L603.266 108.73V36.0907L594.447 27.2725V99.9121Z" fill="black"/>
|
||||
<path d="M633.525 0.0327148H697.085L705.903 8.851H642.343L633.525 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M633.525 0.0327148L642.343 8.851H705.903L697.085 0.0327148H633.525ZM641.554 3.3583L643.721 5.52541H697.874L695.707 3.3583H641.554Z" fill="black"/>
|
||||
<path d="M603.526 99.9121V27.2725L612.344 36.0907V108.73L603.526 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M606.851 98.5346L609.019 100.702V37.4682L606.851 35.3011V98.5346ZM603.526 27.2725V99.9121L612.344 108.73V36.0907L603.526 27.2725Z" fill="black"/>
|
||||
<path d="M630.766 0.0327148V99.9123L639.584 108.731V8.851L630.766 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M634.092 98.5348L636.259 100.702V10.2285L634.092 8.06138V98.5348ZM630.766 99.9123L639.584 108.731V8.851L630.766 0.0327148V99.9123Z" fill="black"/>
|
||||
<path d="M594.447 99.9121H567.207L576.025 108.73H603.265L594.447 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M567.207 99.9121L576.025 108.73H603.265L594.447 99.9121H567.207ZM575.236 103.238L577.403 105.405H595.237L593.069 103.238H575.236Z" fill="black"/>
|
||||
<path d="M633.525 99.9123V0.0327148L642.343 8.851V108.731L633.525 99.9123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M636.85 98.5348L639.018 100.702V10.2285L636.85 8.06138V98.5348ZM633.525 0.0327148V99.9123L642.343 108.731V8.851L633.525 0.0327148Z" fill="black"/>
|
||||
<path d="M669.845 27.2725H660.765L669.583 36.0907H678.663L669.845 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M660.765 27.2725L669.583 36.0907H678.663L669.845 27.2725H660.765Z" fill="black"/>
|
||||
<path d="M660.765 27.2725V54.5123L669.583 63.3306V36.0907L660.765 27.2725Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M664.091 53.1348L666.258 55.3019V37.4682L664.091 35.3011V53.1348ZM660.765 54.5123L669.583 63.3306V36.0907L660.765 27.2725V54.5123Z" fill="black"/>
|
||||
<path d="M669.846 54.5123V27.2725L678.664 36.0907V63.3306L669.846 54.5123Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M673.171 53.1348L675.338 55.3019V37.4682L673.171 35.3011V53.1348ZM669.846 27.2725V54.5123L678.664 63.3306V36.0907L669.846 27.2725Z" fill="black"/>
|
||||
<path d="M630.766 99.9121H603.526L612.344 108.73H639.584L630.766 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M603.526 99.9121L612.344 108.73H639.584L630.766 99.9121H603.526ZM611.555 103.238L613.722 105.405H631.555L629.388 103.238H611.555Z" fill="black"/>
|
||||
<path d="M660.765 54.5127H669.845L678.663 63.331H669.583L660.765 54.5127Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M660.765 54.5127L669.583 63.331H678.663L669.845 54.5127H660.765Z" fill="black"/>
|
||||
<path d="M697.085 0.0327148V81.7523L705.903 90.5706V8.85099L697.085 0.0327148Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M700.411 80.3748L702.578 82.542V10.2285L700.411 8.06138V80.3748ZM697.085 81.7523L705.903 90.5706V8.85099L697.085 0.0327148V81.7523Z" fill="black"/>
|
||||
<path d="M660.765 99.9121H633.525L642.343 108.73H669.583L660.765 99.9121Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M633.525 99.9121L642.343 108.73H669.583L660.765 99.9121H633.525ZM641.554 103.238L643.721 105.405H661.554L659.387 103.238H641.554Z" fill="black"/>
|
||||
<path d="M660.765 81.7524V99.9124L669.583 108.731V90.5707L660.765 81.7524Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M664.091 98.5349L666.258 100.702V91.9482L664.091 89.7811V98.5349ZM660.765 99.9124L669.583 108.731V90.5707L660.765 81.7524V99.9124Z" fill="black"/>
|
||||
<path d="M697.085 81.7524H660.765L669.583 90.5707H705.903L697.085 81.7524Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M660.765 81.7524L669.583 90.5707H705.903L697.085 81.7524H660.765ZM668.794 85.078L670.961 87.2451H697.875L695.707 85.078H668.794Z" fill="black"/>
|
||||
<path d="M46.0351 100V72.7603H27.8751V0.120605H0.635254V100H46.0351Z" fill="url(#paint0_linear_1640_3386)"/>
|
||||
<path d="M48.7768 0.120605V100H76.0166V63.6803H85.0966V100H112.336V0.120605H48.7768ZM85.0966 36.4404H76.0166V27.3605H85.0966V36.4404Z" fill="url(#paint1_linear_1640_3386)"/>
|
||||
<path d="M115.043 0.120605V100H142.283V27.3605H151.363V100H178.602V27.3605H187.682V100H214.922V0.120605H115.043Z" fill="url(#paint2_linear_1640_3386)"/>
|
||||
<path d="M217.682 0.120605V100H281.241V54.6004H272.161V45.5204H281.241V0.120605H217.682ZM254.002 72.7603H244.922V63.6803H254.002V72.7603ZM244.922 36.4404V27.3605H254.002V36.4404H244.922Z" fill="url(#paint3_linear_1640_3386)"/>
|
||||
<path d="M283.948 0.120605V100H347.507V0.120605H283.948ZM320.268 72.7603H311.188V27.3605H320.268V72.7603Z" fill="url(#paint4_linear_1640_3386)"/>
|
||||
<path d="M434.675 0.120605V72.7603H425.595V36.4404H398.355V100H461.915V0.120605H434.675Z" fill="url(#paint5_linear_1640_3386)"/>
|
||||
<path d="M500.941 0.120605V72.7603H491.861V0.120605H464.621V100H528.181V0.120605H500.941Z" fill="url(#paint6_linear_1640_3386)"/>
|
||||
<path d="M530.887 0.120605V100H558.127V27.3605H567.207V100H594.447V27.3605H603.527V100H630.767V0.120605H530.887Z" fill="url(#paint7_linear_1640_3386)"/>
|
||||
<path d="M633.526 0.120605V100H660.766V81.8402H697.086V0.120605H633.526ZM669.846 54.6004H660.766V27.3605H669.846V54.6004Z" fill="url(#paint8_linear_1640_3386)"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27.8751 72.7603V0.120605H0.635254V100H46.0351V72.7603H27.8751ZM42.0351 76.7603H23.8751V4.12061H4.63525V96.0002H42.0351V76.7603ZM115.043 0.120605V100H142.283V27.3605H151.363V100H178.602V27.3605H187.682V100H214.922V0.120605H115.043ZM119.043 4.12061H210.922V96.0002H191.682V23.3605H174.602V96.0002H155.363V23.3605H138.283V96.0002H119.043V4.12061ZM217.682 0.120605V100H281.241V54.6004H272.161V45.5204H281.241V0.120605H217.682ZM221.682 4.12061H277.241V41.5204H268.161V58.6004H277.241V96.0002H221.682V4.12061ZM283.948 100H347.507V0.120605H283.948V100ZM287.948 4.12061V96.0002H343.507V4.12061H287.948ZM112.336 100V0.120605H48.7768V100H76.0166V63.6803H85.0966V100H112.336ZM108.336 96.0002H89.0966V59.6803H72.0166V96.0002H52.7768V4.12061H108.336V96.0002ZM89.0966 40.4404H72.0166V23.3605H89.0966V40.4404ZM258.002 76.7603H240.922V59.6803H258.002V76.7603ZM240.922 40.4404V23.3605H258.002V40.4404H240.922ZM324.268 76.7603H307.188V23.3605H324.268V76.7603ZM464.621 0.120605V100H528.181V0.120605H500.941V72.7603H491.861V0.120605H464.621ZM468.621 4.12061H487.861V76.7603H504.941V4.12061H524.181V96.0002H468.621V4.12061ZM530.887 0.120605V100H558.127V27.3605H567.207V100H594.447V27.3605H603.527V100H630.767V0.120605H530.887ZM534.887 4.12061H626.767V96.0002H607.527V23.3605H590.447V96.0002H571.207V23.3605H554.127V96.0002H534.887V4.12061ZM633.526 0.120605V100H660.766V81.8402H697.086V0.120605H633.526ZM637.526 4.12061H693.086V77.8402H656.766V96.0002H637.526V4.12061ZM461.915 100V0.120605H434.675V72.7603H425.595V36.4404H398.355V100H461.915ZM457.915 96.0002H402.355V40.4404H421.595V76.7603H438.675V4.12061H457.915V96.0002ZM673.846 58.6004H656.766V23.3605H673.846V58.6004ZM85.0966 36.4404V27.3605H76.0166V36.4404H85.0966ZM254.002 72.7603V63.6803H244.922V72.7603H254.002ZM244.922 36.4404H254.002V27.3605H244.922V36.4404ZM320.268 72.7603V27.3605H311.188V72.7603H320.268ZM669.846 54.6004V27.3605H660.766V54.6004H669.846Z" fill="black"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint7_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_1640_3386" x1="348.861" y1="0.120605" x2="348.861" y2="100" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#FF9CDD"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 32 KiB |
BIN
public/images/home/pine.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
public/images/home/placeholder-product-images/1.png
Normal file
|
After Width: | Height: | Size: 271 KiB |
BIN
public/images/home/placeholder-product-images/2.png
Normal file
|
After Width: | Height: | Size: 570 KiB |
BIN
public/images/home/placeholder-product-images/3.png
Normal file
|
After Width: | Height: | Size: 223 KiB |
BIN
public/images/home/placeholder-product-images/4.png
Normal file
|
After Width: | Height: | Size: 499 KiB |
BIN
public/images/home/slider/slider-1.png
Normal file
|
After Width: | Height: | Size: 483 KiB |
BIN
public/images/home/slider/slider-2.png
Normal file
|
After Width: | Height: | Size: 280 KiB |
BIN
public/images/home/slider/slider-3.png
Normal file
|
After Width: | Height: | Size: 402 KiB |
BIN
public/images/icons/gift.png
Normal file
|
After Width: | Height: | Size: 464 B |
BIN
public/images/logo.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
public/images/logos/logo-mrbeast.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
public/images/noise-2.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
public/images/noise.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
public/images/price-badge/left.png
Normal file
|
After Width: | Height: | Size: 985 B |
BIN
public/images/price-badge/middle.png
Normal file
|
After Width: | Height: | Size: 93 B |
BIN
public/images/price-badge/right.png
Normal file
|
After Width: | Height: | Size: 1015 B |
BIN
public/images/product-detail/main-image-bg.jpg
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
public/images/product-detail/placeholder-1.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
public/images/product-detail/placeholder-2.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
public/images/product-detail/placeholder-3.png
Normal file
|
After Width: | Height: | Size: 202 KiB |
41
public/manifest.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "Shop MrBeast x Shrek",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-icon-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image/png",
|
||||
"density": "0.75"
|
||||
},
|
||||
{
|
||||
"src": "/android-icon-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image/png",
|
||||
"density": "1.0"
|
||||
},
|
||||
{
|
||||
"src": "/android-icon-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image/png",
|
||||
"density": "1.5"
|
||||
},
|
||||
{
|
||||
"src": "/android-icon-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image/png",
|
||||
"density": "2.0"
|
||||
},
|
||||
{
|
||||
"src": "/android-icon-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image/png",
|
||||
"density": "3.0"
|
||||
},
|
||||
{
|
||||
"src": "/android-icon-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"density": "4.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
public/mstile-144x144.png
Normal file
|
After Width: | Height: | Size: 972 B |
BIN
public/mstile-150x150.png
Normal file
|
After Width: | Height: | Size: 931 B |
BIN
public/mstile-310x150.png
Normal file
|
After Width: | Height: | Size: 967 B |
BIN
public/mstile-310x310.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
public/mstile-70x70.png
Normal file
|
After Width: | Height: | Size: 776 B |
BIN
public/og.jpeg
Normal file
|
After Width: | Height: | Size: 147 KiB |
9
public/robots.txt
Normal file
@ -0,0 +1,9 @@
|
||||
# *
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
# Host
|
||||
Host: https://laconic.com/
|
||||
|
||||
# Sitemaps
|
||||
Sitemap: https://laconic.com/sitemap.xml
|
||||
22
public/safari-pinned-tab.svg
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.14, written by Peter Selinger 2001-2017
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M0 3500 l0 -3500 3500 0 3500 0 0 3500 0 3500 -3500 0 -3500 0 0
|
||||
-3500z m2865 2104 c11 -131 -1 -524 -20 -639 -98 -612 -345 -1108 -780 -1565
|
||||
-133 -140 -209 -273 -251 -439 -63 -246 -29 -495 97 -716 55 -97 188 -239 279
|
||||
-300 289 -192 647 -216 954 -64 101 50 158 92 281 208 469 439 1009 694 1625
|
||||
766 129 16 461 21 575 9 l65 -7 0 -774 0 -774 -1572 4 -1573 3 -100 23 c-580
|
||||
131 -981 534 -1108 1111 -21 94 -21 114 -24 1668 l-4 1572 775 0 774 0 7 -86z
|
||||
m1945 60 c408 -83 734 -391 841 -794 101 -383 -19 -799 -309 -1072 -133 -125
|
||||
-299 -217 -479 -265 -86 -23 -119 -26 -263 -27 -139 0 -179 3 -253 22 -488
|
||||
123 -817 518 -844 1013 -37 706 612 1264 1307 1123z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
public/site.webmanifest
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "Laconic",
|
||||
"short_name": "Laconic",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
||||
BIN
public/videos/hero-grid.mp4
Normal file
5
src/components/common/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# `common` dir
|
||||
|
||||
- Common components (maybe reused across the whole app)
|
||||
- Not primitives
|
||||
- Examples: `/media-card.tsx`, `/sidenav.tsx`, `/fade-in-box.tsx`, etc...
|
||||
@ -0,0 +1,8 @@
|
||||
.transition {
|
||||
position: fixed;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: 20;
|
||||
pointer-events: none;
|
||||
user-select: none;
|
||||
}
|
||||
59
src/components/common/cash-transition/index.tsx
Normal file
@ -0,0 +1,59 @@
|
||||
import Image from 'next/image'
|
||||
import * as React from 'react'
|
||||
|
||||
import { DURATION, gsap } from '~/lib/gsap'
|
||||
import { usePageTransition } from '~/lib/gsap/page-transitions'
|
||||
|
||||
import cashSrc from '../../../../public/images/cash-transition.png'
|
||||
import s from './cash-transition.module.scss'
|
||||
|
||||
export const CashTransition = React.memo(() => {
|
||||
const { getTransitionSpace } = usePageTransition()
|
||||
const cashRef = React.useRef<HTMLDivElement>(null)
|
||||
|
||||
React.useEffect(() => {
|
||||
getTransitionSpace(async () => {
|
||||
const tl = gsap.timeline({
|
||||
onComplete: () => {
|
||||
gsap.to(cashRef.current, {
|
||||
top: '100%',
|
||||
duration: DURATION * 2,
|
||||
ease: 'power4.inOut'
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
const vw = window.innerWidth / 100
|
||||
const vh = window.innerHeight / 100
|
||||
|
||||
const newTop = -1 * Math.max(vw * 12, vh * 20)
|
||||
|
||||
tl.to(cashRef.current, {
|
||||
top: newTop,
|
||||
duration: DURATION * 2.5,
|
||||
ease: 'power4.inOut'
|
||||
})
|
||||
await tl
|
||||
})
|
||||
}, [getTransitionSpace])
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={cashRef}
|
||||
className={s['transition']}
|
||||
style={{
|
||||
width: 'max(100vw, 100vh)',
|
||||
height: 'calc(120vh + max(12vh, 12vw))'
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
src={cashSrc}
|
||||
alt="cash"
|
||||
objectFit="cover"
|
||||
layout="fill"
|
||||
objectPosition="top"
|
||||
loading="eager"
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
14
src/components/common/cursor/cursor.module.scss
Normal file
@ -0,0 +1,14 @@
|
||||
.cursor {
|
||||
display: flex;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 50;
|
||||
max-width: 35px;
|
||||
pointer-events: none;
|
||||
user-select: none;
|
||||
|
||||
> span {
|
||||
position: relative;
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
156
src/components/common/cursor/index.tsx
Normal file
@ -0,0 +1,156 @@
|
||||
import gsap from 'gsap'
|
||||
import Head from 'next/head'
|
||||
import * as React from 'react'
|
||||
|
||||
import { useDeviceDetect } from '~/hooks/use-device-detect'
|
||||
|
||||
import defaultSrc from '../../../../public/images/cursor/default.svg'
|
||||
import defaultActiveSrc from '../../../../public/images/cursor/default-active.svg'
|
||||
import pointerSrc from '../../../../public/images/cursor/pointer.svg'
|
||||
import pointerActiveSrc from '../../../../public/images/cursor/pointer-active.svg'
|
||||
import s from './cursor.module.scss'
|
||||
|
||||
type CursorType = 'pointer' | 'default' | undefined
|
||||
|
||||
const CursorContext = React.createContext<
|
||||
{ setType: React.Dispatch<React.SetStateAction<CursorType>> } | undefined
|
||||
>(undefined)
|
||||
|
||||
const Cursor = ({ children }: { children?: React.ReactNode }) => {
|
||||
const cursorRef = React.useRef<HTMLDivElement>(null)
|
||||
const [type, setType] = React.useState<CursorType>()
|
||||
const { isMobile } = useDeviceDetect()
|
||||
|
||||
React.useEffect(() => {
|
||||
if (!cursorRef.current) return
|
||||
gsap.set(cursorRef.current, { xPercent: -50, yPercent: -50 })
|
||||
|
||||
const pos = { x: window.innerWidth / 2, y: window.innerHeight / 2 }
|
||||
const mouse = { x: pos.x, y: pos.y }
|
||||
const speed = 0.2
|
||||
|
||||
const xSet = gsap.quickSetter(cursorRef.current, 'x', 'px')
|
||||
const ySet = gsap.quickSetter(cursorRef.current, 'y', 'px')
|
||||
|
||||
function handleMouseMove(e: MouseEvent) {
|
||||
mouse.x = e.x
|
||||
mouse.y = e.y
|
||||
if (e.target instanceof HTMLElement || e.target instanceof SVGElement) {
|
||||
if (e.target.dataset.cursor) {
|
||||
setType(e.target.dataset.cursor as any)
|
||||
return
|
||||
}
|
||||
if (e.target.closest('button') || e.target.closest('a')) {
|
||||
setType('pointer')
|
||||
return
|
||||
} else if (
|
||||
e.target.closest('p') ||
|
||||
e.target.closest('span') ||
|
||||
e.target.closest('h1') ||
|
||||
e.target.closest('h2') ||
|
||||
e.target.closest('h3') ||
|
||||
e.target.closest('h4') ||
|
||||
e.target.closest('h5') ||
|
||||
e.target.closest('h5') ||
|
||||
e.target.closest('input') ||
|
||||
e.target.closest('textarea')
|
||||
) {
|
||||
setType('default') // this would be for text, if we'd have any text cursor
|
||||
return
|
||||
}
|
||||
}
|
||||
setType(undefined)
|
||||
}
|
||||
|
||||
function handleTick() {
|
||||
const dt = 1.0 - Math.pow(0.6 - speed, gsap.ticker.deltaRatio())
|
||||
|
||||
pos.x += (mouse.x - pos.x) * dt
|
||||
pos.y += (mouse.y - pos.y) * dt
|
||||
xSet(pos.x)
|
||||
ySet(pos.y)
|
||||
}
|
||||
|
||||
window.addEventListener('mousemove', handleMouseMove, { passive: true })
|
||||
gsap.ticker.add(handleTick)
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('mousemove', handleMouseMove)
|
||||
gsap.ticker.remove(handleTick)
|
||||
}
|
||||
}, [isMobile])
|
||||
|
||||
return (
|
||||
<>
|
||||
{isMobile === false && <CursorFollower ref={cursorRef} type={type} />}
|
||||
<CursorContext.Provider value={{ setType }}>
|
||||
{children}
|
||||
</CursorContext.Provider>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
const CursorFollower = React.forwardRef<HTMLDivElement, { type: CursorType }>(
|
||||
({ type }, ref) => {
|
||||
const { src, adjustments } = React.useMemo(() => {
|
||||
switch (type) {
|
||||
case 'pointer':
|
||||
return {
|
||||
src: pointerSrc,
|
||||
adjustments: { x: '4px', y: '22px' }
|
||||
}
|
||||
default:
|
||||
return {
|
||||
src: defaultSrc,
|
||||
adjustments: { x: '10px', y: '17px' }
|
||||
}
|
||||
}
|
||||
}, [type])
|
||||
|
||||
React.useEffect(() => {
|
||||
document.documentElement.classList.add('has-custom-cursor')
|
||||
|
||||
return () => {
|
||||
document.documentElement.classList.remove('has-custom-cursor')
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<div ref={ref} className={s['cursor']}>
|
||||
<Head>
|
||||
{/* preload images */}
|
||||
{[defaultSrc, defaultActiveSrc, pointerSrc, pointerActiveSrc].map(
|
||||
(src) => {
|
||||
return (
|
||||
<link key={src.src} rel="preload" href={src.src} as="image" />
|
||||
)
|
||||
}
|
||||
)}
|
||||
</Head>
|
||||
<span
|
||||
style={{
|
||||
transform: `translate(${adjustments.x}, ${adjustments.y})`
|
||||
}}
|
||||
>
|
||||
<img
|
||||
src={src.src}
|
||||
alt={`cursor-${type}`}
|
||||
width={src.width}
|
||||
height={src.height}
|
||||
loading="eager"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
export const useCursor = () => {
|
||||
const context = React.useContext(CursorContext)
|
||||
if (context === undefined) {
|
||||
throw new Error('useCursor must be used within a CursorProvider')
|
||||
}
|
||||
return context
|
||||
}
|
||||
|
||||
export default Cursor
|
||||
94
src/components/common/fade-in-box/index.tsx
Normal file
@ -0,0 +1,94 @@
|
||||
import { forwardRef, useEffect, useRef, useState } from 'react'
|
||||
import mergeRefs from 'react-merge-refs'
|
||||
|
||||
import { useAnimationContext } from '~/context/animation'
|
||||
import { useIsomorphicLayoutEffect } from '~/hooks/use-isomorphic-layout-effect'
|
||||
import { DURATION, gsap } from '~/lib/gsap'
|
||||
|
||||
type FadeInBoxProps = {
|
||||
children: React.ReactNode
|
||||
className?: string
|
||||
id?: string
|
||||
style?: React.CSSProperties
|
||||
onFadeInCompleteTimeline?: GSAPTimeline
|
||||
}
|
||||
|
||||
export const FadeInBox = forwardRef<HTMLDivElement, FadeInBoxProps>(
|
||||
({ children, className, id, style, onFadeInCompleteTimeline }, ref) => {
|
||||
const innerRef = useRef<HTMLDivElement>(null)
|
||||
const { shouldAnimate } = useAnimationContext()
|
||||
const [inView, setInView] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
const elementToObserve = innerRef.current
|
||||
if (!elementToObserve) return
|
||||
const handleObserve: IntersectionObserverCallback = ([element]) => {
|
||||
if (element) {
|
||||
setInView((p) => {
|
||||
// trigger once
|
||||
if (p === true) return true
|
||||
else return element.isIntersecting
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const observer = new IntersectionObserver(handleObserve, {
|
||||
threshold: 0.14
|
||||
})
|
||||
|
||||
observer.observe(elementToObserve)
|
||||
|
||||
return () => {
|
||||
observer.disconnect()
|
||||
}
|
||||
}, [])
|
||||
|
||||
useIsomorphicLayoutEffect(() => {
|
||||
if (!shouldAnimate || !inView) {
|
||||
return
|
||||
}
|
||||
if (!innerRef.current) return
|
||||
|
||||
const tl = gsap.timeline({
|
||||
paused: true,
|
||||
smoothChildTiming: true,
|
||||
defaults: { ease: 'slow', overwrite: true },
|
||||
onComplete: () => {
|
||||
if (
|
||||
onFadeInCompleteTimeline &&
|
||||
typeof onFadeInCompleteTimeline !== 'undefined'
|
||||
) {
|
||||
onFadeInCompleteTimeline.play()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
tl.to(innerRef.current, {
|
||||
autoAlpha: 1,
|
||||
scale: 1,
|
||||
duration: DURATION
|
||||
})
|
||||
|
||||
tl.play()
|
||||
|
||||
return () => {
|
||||
tl.kill()
|
||||
}
|
||||
}, [inView, shouldAnimate, onFadeInCompleteTimeline])
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={mergeRefs([innerRef, ref])}
|
||||
className={className}
|
||||
id={id}
|
||||
style={{
|
||||
opacity: shouldAnimate ? 0 : undefined,
|
||||
transform: shouldAnimate ? 'scale(0.9)' : undefined,
|
||||
...style
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
)
|
||||
117
src/components/common/footer/footer.module.scss
Normal file
@ -0,0 +1,117 @@
|
||||
@import '~/css/helpers';
|
||||
|
||||
.footer {
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: tovw(56px, 'default', 48px);
|
||||
border-bottom: tovw(1px, 'default', 1px) solid var(--color-grey-light);
|
||||
|
||||
nav {
|
||||
display: flex;
|
||||
gap: tovw(88px, 'default', 64px);
|
||||
@media screen and (max-width: 1024px) {
|
||||
display: grid;
|
||||
column-gap: tovw(97px, 'tablet', 97px);
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: auto;
|
||||
row-gap: tovw(44px, 'tablet', 44px);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1024px) {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
|
||||
> li {
|
||||
line-height: 1.35;
|
||||
|
||||
&:first-of-type {
|
||||
line-height: 1;
|
||||
margin-bottom: tovw(12px, 'default', 10px);
|
||||
|
||||
a {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.logo {
|
||||
margin-right: tovw(88px, 'default', 64px);
|
||||
@media screen and (max-width: 1024px) {
|
||||
margin-right: 0;
|
||||
margin-bottom: tovw(56px, 'tablet', 56px);
|
||||
}
|
||||
|
||||
svg {
|
||||
width: tovw(305px, 'default', 120px);
|
||||
@media screen and (max-width: 1024px) {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.connect__links {
|
||||
> div {
|
||||
display: grid;
|
||||
align-content: flex-start;
|
||||
gap: tovw(16px, 'default', 16px);
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: auto;
|
||||
|
||||
li {
|
||||
width: tovw(24px, 'default', 24px);
|
||||
height: tovw(24px, 'default', 24px);
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 800px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.sub__footer {
|
||||
margin-top: tovw(18px, 'default', 18px);
|
||||
margin-bottom: tovw(44px, 'default', 36px);
|
||||
|
||||
a,
|
||||
p {
|
||||
font-size: tovw(18px, 'default', 14px);
|
||||
line-height: 1;
|
||||
margin: 0;
|
||||
color: var(--color-grey-light);
|
||||
}
|
||||
|
||||
ul {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
@media screen and (max-width: 800px) {
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
li:last-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
div {
|
||||
display: flex;
|
||||
gap: tovw(37px, 'default', 24px);
|
||||
@media screen and (max-width: 800px) {
|
||||
margin-bottom: tovw(32px, 'tablet', 32px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
51
src/components/common/footer/footer.tsx
Normal file
@ -0,0 +1,51 @@
|
||||
import {
|
||||
Facebook,
|
||||
Instagram,
|
||||
Linkedin,
|
||||
Reddit,
|
||||
Telegram,
|
||||
Twitter
|
||||
} from '~/components/icons/socials'
|
||||
|
||||
export const DevelopersLinks = [
|
||||
{ href: '/developers', title: 'Developers' },
|
||||
{ href: '/github', title: 'Github' },
|
||||
{ href: '/roadmap', title: 'Roadmap' },
|
||||
{ href: '/chat', title: 'Chat' },
|
||||
{ href: '/forum', title: 'Forum' }
|
||||
]
|
||||
|
||||
export const ProductsLinks = [
|
||||
{ href: '/products', title: 'Products' },
|
||||
{ href: '/SDK', title: 'SDK' },
|
||||
{ href: '/watchers', title: 'Watchers' },
|
||||
{ href: '/network', title: 'Network' },
|
||||
{ href: '/wallet', title: 'Wallet' },
|
||||
{ href: '/token', title: 'Token' }
|
||||
]
|
||||
|
||||
export const AboutLinks = [
|
||||
{ href: '/about', title: 'About' },
|
||||
{ href: '/faq', title: 'FAQ' },
|
||||
{ href: '/team', title: 'Team' },
|
||||
{ href: '/partners', title: 'Partners' },
|
||||
{ href: '/newsroom', title: 'Newstoom' },
|
||||
{ href: '/careers', title: 'Careers' },
|
||||
{ href: '/contact', title: 'Contact' }
|
||||
]
|
||||
|
||||
export const CommunityLinks = [
|
||||
{ href: '/community', title: 'Community' },
|
||||
{ href: '/validators', title: 'Validators' },
|
||||
{ href: '/testnet', title: 'Testnet' },
|
||||
{ href: '/insiders', title: 'Insiders' }
|
||||
]
|
||||
|
||||
export const ConnectLinks = [
|
||||
{ href: '/community', title: 'Twitter', logo: <Twitter /> },
|
||||
{ href: '/validators', title: 'Telegram', logo: <Telegram /> },
|
||||
{ href: '/testnet', title: 'Reddit', logo: <Reddit /> },
|
||||
{ href: '/insiders', title: 'Linkedin', logo: <Linkedin /> },
|
||||
{ href: '/insiders', title: 'Facebook', logo: <Facebook /> },
|
||||
{ href: '/insiders', title: 'Instagram', logo: <Instagram /> }
|
||||
]
|
||||
112
src/components/common/footer/index.tsx
Normal file
@ -0,0 +1,112 @@
|
||||
import { LogoFooter } from '~/components/icons/logo'
|
||||
import { Container } from '~/components/layout/container'
|
||||
import Link from '~/components/primitives/link'
|
||||
|
||||
import {
|
||||
AboutLinks,
|
||||
CommunityLinks,
|
||||
ConnectLinks,
|
||||
DevelopersLinks,
|
||||
ProductsLinks
|
||||
} from './footer'
|
||||
import s from './footer.module.scss'
|
||||
|
||||
export const Footer = () => {
|
||||
return (
|
||||
<footer className={s.footer}>
|
||||
<Container className={s['container']}>
|
||||
<div className={s['logo']}>
|
||||
<Link variant="unstyled" href="/">
|
||||
<LogoFooter />
|
||||
</Link>
|
||||
</div>
|
||||
<nav>
|
||||
<ul>
|
||||
{DevelopersLinks.map((link) => {
|
||||
return (
|
||||
<li key={link.title}>
|
||||
<Link href={link.href} variant="nav">
|
||||
{link.title}
|
||||
</Link>
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
</ul>
|
||||
<ul>
|
||||
{ProductsLinks.map((link) => {
|
||||
return (
|
||||
<li key={link.title}>
|
||||
<Link href={link.href} variant="nav">
|
||||
{link.title}
|
||||
</Link>
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
</ul>
|
||||
<ul>
|
||||
{AboutLinks.map((link) => {
|
||||
return (
|
||||
<li key={link.title}>
|
||||
<Link href={link.href} variant="nav">
|
||||
{link.title}
|
||||
</Link>
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
</ul>
|
||||
<ul>
|
||||
{CommunityLinks.map((link) => {
|
||||
return (
|
||||
<li key={link.title}>
|
||||
<Link href={link.href} variant="nav">
|
||||
{link.title}
|
||||
</Link>
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
</ul>
|
||||
<ul className={s['connect__links']}>
|
||||
<li>
|
||||
<Link href="/connect" variant="nav">
|
||||
Connect
|
||||
</Link>
|
||||
</li>
|
||||
<div>
|
||||
{ConnectLinks.map((link) => {
|
||||
return (
|
||||
<li key={link.title}>
|
||||
<Link href={link.href} variant="unstyled">
|
||||
<span className="sr-only">{link.title}</span>
|
||||
{link.logo && link.logo}
|
||||
</Link>
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</ul>
|
||||
</nav>
|
||||
</Container>
|
||||
<Container>
|
||||
<nav className={s['sub__footer']}>
|
||||
<ul>
|
||||
<div>
|
||||
<li>
|
||||
<Link href="/privacy-policy" variant="nav">
|
||||
Privacy Policy
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/terms-of-use" variant="nav">
|
||||
Terms of Use
|
||||
</Link>
|
||||
</li>
|
||||
</div>
|
||||
<li>
|
||||
<p>Laconic, The Source of Proof</p>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</Container>
|
||||
</footer>
|
||||
)
|
||||
}
|
||||
34
src/components/common/header/header.module.scss
Normal file
@ -0,0 +1,34 @@
|
||||
@import '~/css/helpers';
|
||||
|
||||
.header {
|
||||
position: fixed;
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
padding: tovw(14px, 'default', 14px) var(--main-padding-side);
|
||||
background: rgb(4 4 4 / 0.01);
|
||||
backdrop-filter: blur(20px);
|
||||
|
||||
nav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
svg {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
display: flex;
|
||||
margin: 0 0 0 tovw(122px, 'default', 90px);
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
gap: tovw(32px, 'default', 20px);
|
||||
}
|
||||
|
||||
.burger {
|
||||
width: tovw(22px, 'default', 22px);
|
||||
}
|
||||
}
|
||||
8
src/components/common/header/header.ts
Normal file
@ -0,0 +1,8 @@
|
||||
export const defaultHeaderLinks = [
|
||||
{ href: '/', title: 'Home' },
|
||||
{ href: '/developers', title: 'Developers' },
|
||||
{ href: '/products', title: 'Products' },
|
||||
{ href: '/community', title: 'Community' },
|
||||
{ href: '/about', title: 'About' },
|
||||
{ href: '/blog', title: 'Blog' }
|
||||
]
|
||||
38
src/components/common/header/index.tsx
Normal file
@ -0,0 +1,38 @@
|
||||
import clsx from 'clsx'
|
||||
import NextLink from 'next/link'
|
||||
|
||||
import Burger from '~/components/icons/burguer'
|
||||
import { Logo } from '~/components/icons/logo'
|
||||
import { Button } from '~/components/primitives/button'
|
||||
import Link from '~/components/primitives/link'
|
||||
|
||||
import { defaultHeaderLinks } from './header'
|
||||
import s from './header.module.scss'
|
||||
|
||||
export const Header = () => {
|
||||
return (
|
||||
<header className={s.header}>
|
||||
<nav>
|
||||
<NextLink href="/">
|
||||
<a>
|
||||
<Logo />
|
||||
</a>
|
||||
</NextLink>
|
||||
<ul className="hide-on-mobile">
|
||||
{defaultHeaderLinks.length > 0 &&
|
||||
defaultHeaderLinks.map((link, index) => (
|
||||
<li key={index}>
|
||||
<Link href={link.href} variant="nav">
|
||||
{link.title}
|
||||
</Link>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</nav>
|
||||
<Button size="small" className="hide-on-mobile">
|
||||
Get Started
|
||||
</Button>
|
||||
<Burger className={clsx(s['burger'], 'hide-on-desktop')} />
|
||||
</header>
|
||||
)
|
||||
}
|
||||
96
src/components/common/meta.tsx
Normal file
@ -0,0 +1,96 @@
|
||||
import { useRouter } from 'next/dist/client/router'
|
||||
import NextHead from 'next/head'
|
||||
import { NextSeo, NextSeoProps } from 'next-seo'
|
||||
import * as React from 'react'
|
||||
|
||||
import { defaultMeta, siteOrigin } from '~/lib/constants'
|
||||
|
||||
type BasicMeta = {
|
||||
colorScheme?: 'dark' | 'light'
|
||||
description?: string
|
||||
noIndex?: boolean
|
||||
ogImage?: string
|
||||
prefetch?: { href: string; as: string }[]
|
||||
preload?: { href: string; as: string }[]
|
||||
themeColor?: string
|
||||
title?: string
|
||||
}
|
||||
|
||||
export type MetaProps = BasicMeta & { rawNextSeoProps?: NextSeoProps }
|
||||
|
||||
export const Meta = (props: MetaProps) => {
|
||||
const router = useRouter()
|
||||
|
||||
const nextSeoProps: NextSeoProps = React.useMemo(() => {
|
||||
return {
|
||||
title: props.title ?? defaultMeta.title,
|
||||
description: props.description ?? defaultMeta.description,
|
||||
canonical: `${siteOrigin}${router.pathname}`,
|
||||
openGraph: {
|
||||
images: [
|
||||
{
|
||||
url: props.ogImage ?? defaultMeta.ogImage,
|
||||
alt: props.title ?? defaultMeta.title,
|
||||
width: 1200,
|
||||
height: 630,
|
||||
type: 'image/jpeg'
|
||||
}
|
||||
]
|
||||
},
|
||||
twitter: {
|
||||
cardType: 'summary_large_image',
|
||||
handle: defaultMeta.twitter.handle,
|
||||
site: defaultMeta.twitter.site
|
||||
},
|
||||
noindex: props.noIndex,
|
||||
...props.rawNextSeoProps
|
||||
}
|
||||
}, [props, router.pathname])
|
||||
|
||||
return (
|
||||
<>
|
||||
<NextSeo {...nextSeoProps} />
|
||||
<NextHead>
|
||||
<meta charSet="utf-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="minimum-scale=1, initial-scale=1, width=device-width"
|
||||
/>
|
||||
<meta name="theme-color" content={props.themeColor ?? '#FFB1E4'} />
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="180x180"
|
||||
href="/apple-touch-icon.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="32x32"
|
||||
href="/favicon-32x32.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="16x16"
|
||||
href="/favicon-16x16.png"
|
||||
/>
|
||||
<link rel="manifest" href="/site.webmanifest" />
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#000000" />
|
||||
<meta name="msapplication-TileColor" content="#000000" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
{props.preload?.map(({ href, as }) => (
|
||||
<link key={href} rel="preload" href={href} as={as} />
|
||||
))}
|
||||
{props.prefetch?.map(({ href, as }) => (
|
||||
<link key={href} rel="prefetch" href={href} as={as} />
|
||||
))}
|
||||
</NextHead>
|
||||
|
||||
<style jsx global>{`
|
||||
html {
|
||||
color-scheme: ${props.colorScheme ?? 'light'};
|
||||
}
|
||||
`}</style>
|
||||
</>
|
||||
)
|
||||
}
|
||||
44
src/components/common/noise/index.tsx
Normal file
@ -0,0 +1,44 @@
|
||||
import clsx from 'clsx'
|
||||
|
||||
import { useDeviceDetect } from '~/hooks/use-device-detect'
|
||||
|
||||
import s from './noise.module.css'
|
||||
|
||||
export const Noise = ({
|
||||
softLight = true,
|
||||
colorBurn = true,
|
||||
ignoreDevice = false,
|
||||
absolute = false
|
||||
}) => {
|
||||
const { isSafari, isMobile, loaded } = useDeviceDetect()
|
||||
|
||||
if (!loaded) return null
|
||||
return (
|
||||
<>
|
||||
{(ignoreDevice || (!isSafari && !isMobile)) && (
|
||||
<>
|
||||
{softLight && (
|
||||
<div
|
||||
className={clsx(
|
||||
s.noise,
|
||||
'noise',
|
||||
absolute ? 'absolute' : 'fixed'
|
||||
)}
|
||||
aria-hidden
|
||||
/>
|
||||
)}
|
||||
{colorBurn && (
|
||||
<div
|
||||
className={clsx(
|
||||
s.noise2,
|
||||
'noise',
|
||||
absolute ? 'absolute' : 'fixed'
|
||||
)}
|
||||
aria-hidden
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
77
src/components/common/noise/noise.module.css
Normal file
@ -0,0 +1,77 @@
|
||||
.noise {
|
||||
background-color: white;
|
||||
background-image: url('/images/noise.png');
|
||||
background-repeat: repeat;
|
||||
background-size: auto;
|
||||
z-index: 500;
|
||||
width: 300%;
|
||||
height: 300%;
|
||||
left: -100%;
|
||||
top: -100%;
|
||||
pointer-events: none;
|
||||
mix-blend-mode: soft-light;
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
.noise2 {
|
||||
background-color: white;
|
||||
background-image: url('/images/noise-2.png');
|
||||
background-repeat: repeat;
|
||||
background-size: auto;
|
||||
z-index: 500;
|
||||
width: 300%;
|
||||
height: 300%;
|
||||
left: -100%;
|
||||
top: -100%;
|
||||
pointer-events: none;
|
||||
mix-blend-mode: color-burn;
|
||||
opacity: 0.8;
|
||||
will-change: transform;
|
||||
animation: grain 16s steps(10) infinite;
|
||||
}
|
||||
|
||||
@keyframes grain {
|
||||
0% {
|
||||
transform: translate(20%, -15%);
|
||||
}
|
||||
|
||||
10% {
|
||||
transform: translate(-20%, -15%);
|
||||
}
|
||||
|
||||
20% {
|
||||
transform: translate(20%, -5%);
|
||||
}
|
||||
|
||||
30% {
|
||||
transform: translate(-20%, -5%);
|
||||
}
|
||||
|
||||
40% {
|
||||
transform: translate(20%, 5%);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translate(-20%, 5%);
|
||||
}
|
||||
|
||||
60% {
|
||||
transform: translate(20%, 15%);
|
||||
}
|
||||
|
||||
70% {
|
||||
transform: translate(-20%, 15%);
|
||||
}
|
||||
|
||||
80% {
|
||||
transform: translate(20%, 5%);
|
||||
}
|
||||
|
||||
90% {
|
||||
transform: translate(-20%, 5%);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translate(20%, -5%);
|
||||
}
|
||||
}
|
||||
59
src/components/icons/arrow.tsx
Normal file
@ -0,0 +1,59 @@
|
||||
const Arrow = ({ className, fill }: { className?: string; fill?: string }) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
viewBox="0 0 23 23"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M3.758 23H23V3.758l-2.523-.01.01 14.935L1.804 0 0 1.804l18.683 18.683-14.936-.01L3.758 23Z"
|
||||
fill={fill || 'var(--color-white)'}
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const ArrowDotted = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
fill="none"
|
||||
viewBox="0 0 42 14"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path d="m1 35 6 6 6-6" stroke={fill || '#fff'} />
|
||||
<path d="M7 41V0" stroke={fill || '#fff'} strokeDasharray="2 2" />
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const ArrowLink = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
fill="none"
|
||||
viewBox="0 0 11 11"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M1.455 10.557.427 9.53l7.648-7.662H2.167L2.181.443h8.347v8.36H9.091l.013-5.907-7.649 7.661Z"
|
||||
fill={fill || 'var(--color-white)'}
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export { Arrow, ArrowDotted, ArrowLink }
|
||||
18
src/components/icons/burguer.tsx
Normal file
@ -0,0 +1,18 @@
|
||||
const Burger = ({ className, fill }: { className?: string; fill?: string }) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
viewBox="0 0 22 11"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
stroke={fill || '#fff'}
|
||||
style={{ mixBlendMode: 'difference' }}
|
||||
d="M0 .5h22M0 5.5h22M0 10.5h22"
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export default Burger
|
||||
72
src/components/icons/logo.tsx
Normal file
@ -0,0 +1,72 @@
|
||||
const Isotype = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
width="94"
|
||||
height="95"
|
||||
viewBox="0 0 94 95"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M15.86 49.967C26.8 38.911 33.57 23.643 33.568 6.785A60.4 60.4 0 0 0 33.198 0L0 .003l.001 64.465c-.003 7.814 2.945 15.631 8.842 21.59 5.897 5.96 13.637 8.942 21.37 8.938l-.002.002L94 95l-.002-33.556a60.653 60.653 0 0 0-6.714-.373c-16.676.002-31.784 6.845-42.724 17.9-7.96 7.844-20.724 7.845-28.586-.1-7.858-7.941-7.86-20.845-.114-28.904ZM87.114 6.976c-9.168-9.265-24.063-9.269-33.234 0-9.171 9.268-9.168 24.321 0 33.586 9.173 9.27 24.063 9.269 33.234 0 9.171-9.268 9.173-24.316 0-33.586Z"
|
||||
fill={fill || 'var(--color-white)'}
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const Logo = ({ className, fill }: { className?: string; fill?: string }) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
width="133"
|
||||
height="24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M37.761 22.302h9.246v-2.704h-6.155v-17.9h-3.09v20.604ZM59.314 1.697h-5.126l-5.357 20.605h3.194l1.34-5.151h6.618l1.34 5.151h3.348L59.314 1.697Zm-5.306 12.878 2.679-10.663h.103l2.575 10.663h-5.357ZM74.337 9.682h3.606c0-5.873-1.88-8.397-6.259-8.397-4.61 0-6.593 3.194-6.593 10.689 0 7.52 1.983 10.74 6.593 10.74 4.379 0 6.259-2.447 6.285-8.139h-3.606c-.026 4.456-.567 5.563-2.679 5.563-2.42 0-3.013-1.622-2.987-8.164 0-6.516.592-8.14 2.987-8.113 2.112 0 2.653 1.159 2.653 5.82ZM86.689 1.285c4.687.026 6.696 3.245 6.696 10.715 0 7.469-2.009 10.688-6.696 10.714-4.714.026-6.723-3.194-6.723-10.714 0-7.521 2.01-10.74 6.723-10.715ZM83.572 12c0 6.516.618 8.139 3.117 8.139 2.472 0 3.09-1.623 3.09-8.14 0-6.541-.618-8.164-3.09-8.138-2.499.026-3.117 1.648-3.117 8.139ZM99.317 22.276l-3.09.026V1.697h5.434l5.074 16.793h.052V1.697h3.09v20.605h-5.099l-5.409-18.08h-.052v18.054ZM116.615 1.697h-3.091v20.605h3.091V1.697ZM128.652 9.682h3.606c0-5.873-1.881-8.397-6.259-8.397-4.61 0-6.594 3.194-6.594 10.689 0 7.52 1.984 10.74 6.594 10.74 4.378 0 6.259-2.447 6.284-8.139h-3.605c-.026 4.456-.567 5.563-2.679 5.563-2.421 0-3.014-1.622-2.988-8.164 0-6.516.593-8.14 2.988-8.113 2.112 0 2.653 1.159 2.653 5.82Z"
|
||||
fill={fill || 'var(--color-white)'}
|
||||
/>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M4.05 12.623A15.378 15.378 0 0 0 8.57 1.714C8.573 1.136 8.54.564 8.477 0H0v16.287c0 1.974.752 3.949 2.258 5.454A7.69 7.69 0 0 0 7.714 24L24 24v-8.477a15.636 15.636 0 0 0-1.715-.095c-4.258 0-8.115 1.73-10.908 4.523-2.032 1.981-5.291 1.982-7.299-.026-2.006-2.006-2.007-5.266-.029-7.302Zm18.192-10.86a6.004 6.004 0 0 0-8.485 0 6.003 6.003 0 0 0 0 8.484 6.003 6.003 0 0 0 8.485 0 6.002 6.002 0 0 0 0-8.485Z"
|
||||
fill={fill || 'var(--color-white)'}
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const LogoFooter = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
fill="none"
|
||||
viewBox="0 0 305 70"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M0 68.656h29.794v-8.834H9.96V1.35H0v67.306ZM69.388 1.35H52.873L35.61 68.656H45.9l4.316-16.826h21.33l4.315 16.826H86.65L69.388 1.35ZM52.292 43.416l8.631-34.83h.332l8.3 34.83H52.291ZM118.076 27.427h11.619C129.695 8.245 123.636 0 109.528 0 94.672 0 88.282 10.432 88.282 34.915c0 24.567 6.39 35.084 21.246 35.084 14.108 0 20.167-7.993 20.25-26.586h-11.619c-.083 14.555-1.826 18.173-8.631 18.173-7.802 0-9.71-5.3-9.627-26.67 0-21.286 1.908-26.587 9.627-26.503 6.805 0 8.548 3.786 8.548 19.014ZM158.069 0c15.105.085 21.578 10.601 21.578 35s-6.473 34.915-21.578 35c-15.188.084-21.661-10.433-21.661-35s6.473-35.084 21.661-35Zm-10.042 35c0 21.286 1.992 26.586 10.042 26.586 7.967 0 9.959-5.3 9.959-26.586 0-21.37-1.992-26.67-9.959-26.586-8.05.084-10.042 5.384-10.042 26.586ZM198.74 68.572l-9.959.084V1.35h17.511l16.35 54.855h.166V1.35h9.959v67.306h-16.432L198.906 9.595h-.166v58.977ZM254.391 1.35h-9.959v67.306h9.959V1.35ZM293.298 27.427h11.619C304.917 8.245 298.859 0 284.75 0c-14.856 0-21.246 10.432-21.246 34.915 0 24.567 6.39 35.084 21.246 35.084 14.109 0 20.167-7.993 20.25-26.586h-11.619c-.083 14.555-1.826 18.173-8.631 18.173-7.801 0-9.71-5.3-9.627-26.67 0-21.286 1.909-26.587 9.627-26.503 6.805 0 8.548 3.786 8.548 19.014Z"
|
||||
fill={fill || 'var(--color-white)'}
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export { Isotype, Logo, LogoFooter }
|
||||
228
src/components/icons/socials.tsx
Normal file
@ -0,0 +1,228 @@
|
||||
const Telegram = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
clipRule="evenodd"
|
||||
d="M24 12c0 6.6274-5.3726 12-12 12-6.62742 0-12-5.3726-12-12C0 5.37258 5.37258 0 12 0c6.6274 0 12 5.37258 12 12ZM12.43 8.85893c-1.1672.48547-3.49986 1.49027-6.99811 3.01437-.56806.2259-.86563.4469-.89272.663-.04578.3652.41154.509 1.0343.7048.08471.0267.17248.0543.26247.0835.6127.1992 1.43689.4322 1.86535.4414.38865.0084.82244-.1518 1.30135-.4807 3.26856-2.2063 4.95576-3.32149 5.06166-3.34553.0747-.01696.1783-.03829.2485.02408.0701.06235.0632.18045.0558.21215-.0453.1931-1.8405 1.8621-2.7695 2.7258-.2896.2692-.495.4602-.537.5038-.0941.0977-.19.1902-.2821.279-.5692.5487-.99609.9602.0236 1.6322.49.3229.8822.5899 1.2733.8563.4273.291.8534.5812 1.4047.9426.1405.092.2746.1877.4053.2808.4972.3545.9438.6729 1.4957.6221.3206-.0295.6519-.331.8201-1.2302.3975-2.1253 1.1789-6.7299 1.3595-8.62743.0158-.16624-.0041-.379-.02-.4724-.016-.09339-.0494-.22646-.1708-.32497-.1438-.11666-.3658-.14126-.465-.13952-.4514.00795-1.1438.24874-4.4764 1.63485Z"
|
||||
fill="url(#telegram)"
|
||||
fillRule="evenodd"
|
||||
/>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="telegram"
|
||||
x1="12"
|
||||
y1="0"
|
||||
x2="12"
|
||||
y2="24"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stopColor={fill || 'var(--color-white)'} />
|
||||
<stop offset="1" stopColor="#DEDEDE" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const Twitter = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M7.55016 21.3548c9.05434 0 14.00814-7.4471 14.00814-13.9033 0-.20936-.0047-.42337-.0141-.63273.9637-.69168 1.7953-1.54843 2.4558-2.52999-.8975.39631-1.8504.65515-2.8261.76765 1.0274-.61122 1.7966-1.57142 2.1652-2.7026-.9665.56851-2.0235.96954-3.1257 1.18591-.7426-.78315-1.7244-1.30169-2.7937-1.47544-1.0693-.17376-2.1665.00695-3.122.51417-.9554.50722-1.7159 1.31271-2.1639 2.29194-.4479.97922-.5584 2.07764-.3143 3.12543-1.95701-.09747-3.87156-.60206-5.61952-1.48104-1.74795-.87898-3.29029-2.11274-4.52701-3.62129-.62857 1.07562-.820913 2.34843-.53794 3.55975C1.418 7.66457 2.15506 8.7235 3.19641 9.41483c-.78178-.02463-1.54643-.23354-2.230785-.60947v.06048c-.0007 1.12879.392475 2.22296 1.112685 3.09656.72021.8736 1.72301 1.4727 2.83794 1.6955-.72419.1966-1.48427.2253-2.22141.0837.31461.9708.92673 1.8198 1.75093 2.4287.8242.6088 1.81935.9471 2.84657.9676-1.74392 1.3596-3.89817 2.0971-6.11578 2.0936C.783287 19.2309.390399 19.2069 0 19.1598c2.25286 1.4345 4.87353 2.1964 7.55016 2.195Z"
|
||||
fill="url(#twitter)"
|
||||
/>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="twitter"
|
||||
x1="12"
|
||||
y1="2"
|
||||
x2="12"
|
||||
y2="21.3548"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stopColor={fill || 'var(--color-white)'} />
|
||||
<stop offset="1" stopColor="#DEDEDE" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const Reddit = ({ className, fill }: { className?: string; fill?: string }) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M24 12c0 6.6274-5.3726 12-12 12-6.62742 0-12-5.3726-12-12C0 5.37258 5.37258 0 12 0c6.6274 0 12 5.37258 12 12Zm-5.7544-1.7544C19.214 10.2456 20 11.0316 20 12c0 .7158-.4351 1.3333-1.0105 1.614.0281.1684.0421.3369.0421.5193 0 2.6947-3.1298 4.8702-7.0035 4.8702-3.87371 0-7.00353-2.1755-7.00353-4.8702 0-.1824.01403-.3649.0421-.5333-.61754-.2807-1.03859-.8842-1.03859-1.6 0-.9684.78596-1.7544 1.75438-1.7544.46316 0 .89825.1965 1.20702.4912 1.20702-.88419 2.87719-1.43156 4.74382-1.4877l.8843-4.18246c.028-.08421.0701-.15438.1403-.19649.0702-.0421.1544-.05614.2386-.0421l2.9053.61754c.1965-.42105.6175-.70175 1.1087-.70175.6878 0 1.2492.5614 1.2492 1.24912s-.5614 1.24912-1.2492 1.24912c-.6736 0-1.221-.53333-1.2491-1.19298l-2.5965-.54737-.8 3.74737c1.8246.07018 3.4807.63158 4.6737 1.4877.3088-.3088.7298-.4912 1.207-.4912ZM9.24913 12c-.68772 0-1.24912.5614-1.24912 1.2491 0 .6877.5614 1.2491 1.24912 1.2491s1.24917-.5614 1.24917-1.2491c0-.6877-.56145-1.2491-1.24917-1.2491Zm2.76487 5.4596c.4772 0 2.1053-.0561 2.9614-.9123.1264-.1263.1264-.3228.0281-.4631-.1263-.1263-.3368-.1263-.4631 0-.5474.5333-1.6843.7298-2.5123.7298-.8281 0-1.979-.1965-2.5123-.7298-.12632-.1263-.33685-.1263-.46316 0-.12632.1263-.12632.3368 0 .4631.8421.8422 2.48416.9123 2.96136.9123Zm1.4878-4.2105c0 .6877.5614 1.2491 1.2491 1.2491.6877 0 1.2491-.5614 1.2491-1.2491C16 12.5614 15.4386 12 14.7509 12c-.6877 0-1.2491.5614-1.2491 1.2491Z"
|
||||
fill="url(#reddit)"
|
||||
/>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="reddit"
|
||||
x1="12"
|
||||
y1="0"
|
||||
x2="12"
|
||||
y2="24"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stopColor={fill || 'var(--color-white)'} />
|
||||
<stop offset="1" stopColor="#DEDEDE" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const Linkedin = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M3e-7 2.00509C3e-7 1.47331.21125.963308.587278.58728.963305.211253 1.47331.00000267 2.00509.00000267H21.9927c.2636-.00043042.5246.05112313.7682.15170933.2436.100586.4649.248229.6514.434476.1864.186247.3343.40744.4352.650912.1008.24348.1526.50446.1525.76799V21.9927c.0003.2636-.0514.5247-.1521.7683-.1007.2436-.2485.4649-.4348.6513-.1863.1865-.4076.3343-.6511.4352-.2436.1008-.5046.1526-.7682.1525H2.00509c-.2634 0-.52423-.0519-.76757-.1527-.243336-.1009-.464424-.2487-.650628-.435-.186204-.1863-.333875-.4074-.434576-.6508-.1007015-.2434-.15245901-.5043-.1523157-.7677V2.00509ZM9.49964 9.15055h3.24986v1.63195C13.2185 9.84437 14.4185 9 16.2218 9c3.4571 0 4.2764 1.8687 4.2764 5.2975v6.3512h-3.4986v-5.5702c0-1.9527-.4691-3.0545-1.6603-3.0545-1.6528 0-2.34 1.188-2.34 3.0545v5.5702H9.49964V9.15055Zm-6 11.34875h3.49963V9H3.49964v11.4993ZM7.5 5.24946c.0066.29964-.04672.59758-.15683.87634s-.27479.53271-.48437.74696c-.20959.21426-.45986.38449-.73612.5007-.27627.11622-.57296.17609-.87268.17609s-.59641-.05987-.87268-.17609c-.27626-.11621-.52653-.28644-.73612-.5007-.20958-.21425-.37426-.4682-.48437-.74696C3.04672 5.84704 2.9934 5.5491 3 5.24946c.01295-.58816.25569-1.14787.67624-1.55925.42054-.41139.98546-.64175 1.57376-.64175s1.15322.23036 1.57376.64175c.42055.41138.66329.97109.67624 1.55925Z"
|
||||
fill={fill || 'var(--color-white)'}
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const Facebook = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M24 12c0-6.62742-5.3726-12-12-12C5.37258 0 0 5.37258 0 12c0 5.9895 4.3882 10.954 10.125 11.8542v-8.3855H7.07812V12H10.125V9.35625c0-3.0075 1.7916-4.66875 4.5326-4.66875 1.3125 0 2.6862.23437 2.6862.23437V7.875h-1.5132c-1.4906 0-1.9556.92508-1.9556 1.875V12h3.3281l-.532 3.4687H13.875v8.3855C19.6118 22.954 24 17.9895 24 12Z"
|
||||
fill="url(#facebook)"
|
||||
/>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="facebook"
|
||||
x1="12"
|
||||
y1="0"
|
||||
x2="12"
|
||||
y2="23.8542"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stopColor={fill || 'var(--color-white)'} />
|
||||
<stop offset="1" stopColor="#DEDEDE" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
const Instagram = ({
|
||||
className,
|
||||
fill
|
||||
}: {
|
||||
className?: string
|
||||
fill?: string
|
||||
}) => {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M12 2.16094c3.2063 0 3.5859.01406 4.8469.07031 1.1719.05156 1.8047.24844 2.2265.4125.5579.21563.961.47813 1.3782.89531.4218.42188.6797.82032.8953 1.37813.164.42187.3609 1.05937.4125 2.22656.0562 1.26562.0703 1.64531.0703 4.84685 0 3.2063-.0141 3.586-.0703 4.8469-.0516 1.1719-.2485 1.8047-.4125 2.2266-.2156.5578-.4782.9609-.8953 1.3781-.4219.4219-.8203.6797-1.3782.8953-.4218.1641-1.0593.3609-2.2265.4125-1.2656.0562-1.6453.0703-4.8469.0703-3.20625 0-3.58594-.0141-4.84687-.0703-1.17188-.0516-1.80469-.2484-2.22657-.4125-.55781-.2156-.96093-.4781-1.37812-.8953-.42188-.4219-.67969-.8203-.89531-1.3781-.16407-.4219-.36094-1.0594-.4125-2.2266-.05625-1.2656-.07032-1.6453-.07032-4.8469 0-3.20622.01407-3.58591.07032-4.84685.05156-1.17188.24843-1.80469.4125-2.22656.21562-.55781.47812-.96094.89531-1.37813.42187-.42187.82031-.67968 1.37812-.89531.42188-.16406 1.05938-.36094 2.22657-.4125C8.41406 2.175 8.79375 2.16094 12 2.16094ZM12 0C8.74219 0 8.33438.0140625 7.05469.0703125 5.77969.126563 4.90313.332812 4.14375.628125 3.35156.9375 2.68125 1.34531 2.01563 2.01562 1.34531 2.68125.9375 3.35156.628125 4.13906.332812 4.90313.126563 5.775.0703125 7.05.0140625 8.33437 0 8.74219 0 12c0 3.2578.0140625 3.6656.0703125 4.9453.0562505 1.275.2624995 2.1516.5578125 2.911.309375.7921.717185 1.4625 1.387505 2.1281.66562.6656 1.33593 1.0781 2.12343 1.3828.76407.2953 1.63594.5015 2.91094.5578 1.27969.0562 1.6875.0703 4.9453.0703 3.2578 0 3.6656-.0141 4.9453-.0703 1.275-.0563 2.1516-.2625 2.911-.5578.7875-.3047 1.4578-.7172 2.1234-1.3828.6656-.6656 1.0781-1.336 1.3828-2.1235.2953-.764.5016-1.6359.5578-2.9109.0563-1.2797.0703-1.6875.0703-4.9453 0-3.25782-.014-3.66564-.0703-4.94532-.0562-1.275-.2625-2.15157-.5578-2.91094-.2953-.79688-.7031-1.46719-1.3734-2.13282C21.3188 1.35 20.6484.9375 19.8609.632812 19.0969.3375 18.225.13125 16.95.075 15.6656.0140625 15.2578 0 12 0Z"
|
||||
fill="url(#instagram-a)"
|
||||
/>
|
||||
<path
|
||||
d="M12 5.83594c-3.40312 0-6.16406 2.76094-6.16406 6.16406 0 3.4031 2.76094 6.1641 6.16406 6.1641 3.4031 0 6.1641-2.761 6.1641-6.1641 0-3.40312-2.761-6.16406-6.1641-6.16406Zm0 10.16246c-2.20781 0-3.99844-1.7906-3.99844-3.9984 0-2.20781 1.79063-3.99844 3.99844-3.99844 2.2078 0 3.9984 1.79063 3.9984 3.99844 0 2.2078-1.7906 3.9984-3.9984 3.9984Z"
|
||||
fill="url(#instagram-b)"
|
||||
/>
|
||||
<path
|
||||
d="M19.8469 5.59238c0 .79688-.6469 1.43907-1.4391 1.43907-.7969 0-1.439-.64688-1.439-1.43907 0-.79687.6468-1.43906 1.439-1.43906s1.4391.64688 1.4391 1.43906Z"
|
||||
fill="url(#instagram-c)"
|
||||
/>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="instagram-a"
|
||||
x1="11.993"
|
||||
y1="0"
|
||||
x2="11.993"
|
||||
y2="23.9953"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stopColor={fill || 'var(--color-white)'} />
|
||||
<stop offset="1" stopColor="#DEDEDE" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="instagram-b"
|
||||
x1="12"
|
||||
y1="5.83594"
|
||||
x2="12"
|
||||
y2="18.1641"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stopColor={fill || 'var(--color-white)'} />
|
||||
<stop offset="1" stopColor="#DEDEDE" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="instagram-c"
|
||||
x1="18.4078"
|
||||
y1="4.15332"
|
||||
x2="18.4078"
|
||||
y2="7.03145"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stopColor={fill || 'var(--color-white)'} />
|
||||
<stop offset="1" stopColor="#DEDEDE" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export { Facebook, Instagram, Linkedin, Reddit, Telegram, Twitter }
|
||||
28
src/components/layout/aspect-box/aspect-box.module.css
Normal file
@ -0,0 +1,28 @@
|
||||
.aspect-box {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@supports (aspect-ratio: var(--raw-ratio)) {
|
||||
.aspect-box {
|
||||
aspect-ratio: var(--raw-ratio);
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
@supports not (aspect-ratio: var(--raw-ratio)) {
|
||||
.aspect-box::before {
|
||||
content: '';
|
||||
width: 1px;
|
||||
margin-left: -1px;
|
||||
float: left;
|
||||
height: 0;
|
||||
padding-top: var(--ratio);
|
||||
}
|
||||
|
||||
.aspect-box::after {
|
||||
/* to clear float */
|
||||
content: '';
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
26
src/components/layout/aspect-box/index.tsx
Normal file
@ -0,0 +1,26 @@
|
||||
import clsx from 'clsx'
|
||||
import * as React from 'react'
|
||||
|
||||
import s from './aspect-box.module.css'
|
||||
|
||||
export const AspectBox = ({
|
||||
ratio,
|
||||
children,
|
||||
className,
|
||||
style,
|
||||
...rest
|
||||
}: { ratio: number } & JSX.IntrinsicElements['div']) => {
|
||||
return (
|
||||
<div
|
||||
{...rest}
|
||||
className={clsx(s['aspect-box'], className)}
|
||||
style={{
|
||||
...style,
|
||||
['--ratio' as string]: `${100 / ratio}%`,
|
||||
['--raw-ratio' as string]: ratio
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
12
src/components/layout/container/container.module.scss
Normal file
@ -0,0 +1,12 @@
|
||||
@import '~/css/helpers';
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
max-width: tovw(1296px, 'default', 320px);
|
||||
margin: 0 auto;
|
||||
|
||||
@media screen and (max-width: 800px) {
|
||||
max-width: 100%;
|
||||
padding: 0 tovw(27px, 'tablet', 27px);
|
||||
}
|
||||
}
|
||||
15
src/components/layout/container/index.tsx
Normal file
@ -0,0 +1,15 @@
|
||||
import clsx from 'clsx'
|
||||
import * as React from 'react'
|
||||
|
||||
import s from './container.module.scss'
|
||||
|
||||
export const Container = React.forwardRef<
|
||||
HTMLDivElement,
|
||||
JSX.IntrinsicElements['div']
|
||||
>(({ className, ...props }, ref) => {
|
||||
return (
|
||||
<div {...props} className={clsx(s['container'], className)} ref={ref} />
|
||||
)
|
||||
})
|
||||
|
||||
export type ContainerProps = React.ComponentProps<typeof Container>
|
||||
34
src/components/layout/page.tsx
Normal file
@ -0,0 +1,34 @@
|
||||
import * as React from 'react'
|
||||
|
||||
import { Footer } from '~/components/common/footer'
|
||||
import { Header } from '~/components/common/header'
|
||||
import { LocomotiveScrollProvider } from '~/lib/locomotive-scroll/provider'
|
||||
|
||||
type Props = {
|
||||
children?: React.ReactNode
|
||||
extras?: React.ReactNode
|
||||
locomotiveScroll?: boolean
|
||||
}
|
||||
|
||||
const ContentMemo = React.memo(({ children, extras }: Props) => {
|
||||
return (
|
||||
<>
|
||||
{extras}
|
||||
<Header />
|
||||
<main>{children}</main>
|
||||
<Footer />
|
||||
</>
|
||||
)
|
||||
})
|
||||
|
||||
export const PageLayout = (props: Props) => {
|
||||
if (props.locomotiveScroll) {
|
||||
return (
|
||||
<LocomotiveScrollProvider>
|
||||
<ContentMemo {...props} />
|
||||
</LocomotiveScrollProvider>
|
||||
)
|
||||
} else {
|
||||
return <ContentMemo {...props} />
|
||||
}
|
||||
}
|
||||