Commit d87f28c1 authored by Sachin Kodagoda's avatar Sachin Kodagoda

main stream updated

parent 9242e32b
No preview for this file type
// .babelrc
{
"presets": ["next/babel"],
"plugins": []
}
node_modules
__generated__
next.config.js
{
"root": true,
"env": {
"browser": true,
"es6": true,
"node": true,
"jest": true
},
"parser": "@typescript-eslint/parser",
"parserOptions": {
"tsconfigRootDir": ".",
"project": "./tsconfig.json", // for sepecial path to work
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 12,
"sourceType": "module"
},
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"extends": [
"next",
"next/core-web-vitals",
"airbnb",
"eslint:recommended",
"plugin:import/recommended",
"plugin:import/typescript",
"plugin:react/recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended",
"prettier"
],
"plugins": ["react", "prettier", "@typescript-eslint", "react-hooks", "sort-destructure-keys", "json"],
"rules": {
"no-console": "warn",
"react/react-in-jsx-scope": "off", // next js handles it
"no-use-before-define": "off", // Because of Hoisting
// JSON - [FACEPALM] had to list all props to simulate 'recommended'
// as overriding doesn't work :(
// More info - https://www.npmjs.com/package/eslint-plugin-json
"json/undefined": "error",
"json/enum-value-mismatch": "error",
"json/unexpected-end-of-comment": "error",
"json/unexpected-end-of-string": "error",
"json/unexpected-end-of-number": "error",
"json/invalid-unicode": "error",
"json/invalid-escape-character": "error",
"json/invalid-character": "error",
"json/property-expected": "error",
"json/comma-expected": "error",
"json/colon-expected": "error",
"json/value-expected": "error",
"json/comma-or-close-backet-expected": "error",
"json/comma-or-close-brace-expected": "error",
"json/trailing-comma": 1,
"json/duplicate-key": "error",
"json/comment-not-permitted": "error",
"json/schema-resolve-error": "error",
"json/unknown": 1,
"import/no-extraneous-dependencies": [
"error",
{ "devDependencies": false, "optionalDependencies": false, "peerDependencies": false }
],
// So that .ts and .tsx should not be in imports
"import/extensions": [
"error",
{
"json": "always",
"ts": "never",
"tsx": "never",
"css": "always"
}
],
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
// So that Type Definitions which have /// don't throw an error
"spaced-comment": ["error", "always", { "markers": ["/"] }],
// So that typescript files can't have JSX
"react/jsx-filename-extension": [1, { "extensions": [".tsx"] }],
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "interface",
"format": ["PascalCase"],
"custom": {
"regex": "^I[A-Z][a-zA-Z0-9]+$",
"match": true
}
},
{
"selector": "typeAlias",
"format": ["PascalCase"],
"custom": {
"regex": "^T[A-Z][a-zA-Z0-9]+$",
"match": true
}
}
],
"import/prefer-default-export": "off",
"sort-destructure-keys/sort-destructure-keys": 2,
"sort-keys": [0, "asc", { "natural": true, "minKeys": 3 }], // For later
"react/require-default-props": 0,
"@typescript-eslint/no-use-before-define": 0,
"@typescript-eslint/camelcase": 0, // Turn this on later, airbnb hadn't updated this yet
"camelcase": [0, { "properties": "always" }],
// Disable base rule as it can report incorrect errors https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-shadow.md#how-to-use
"no-shadow": "off",
"@typescript-eslint/no-shadow": ["error"],
"@next/next/no-img-element": "off"
},
"settings": {
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"]
},
"import/resolver": {
"typescript": {
"alwaysTryTypes": true,
"project": "./tsconfig.json"
}
}
}
}
name: ci
on:
push:
branches:
- main
- master
pull_request:
branches:
- main
- master
jobs:
ci:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
node: [15]
steps:
- name: Checkout
uses: actions/checkout@master
- name: Setup node env
uses: actions/setup-node@v2.1.2
with:
node-version: ${{ matrix.node }}
- name: Cache node_modules
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install dependencies
run: yarn
- name: Run code style check
run: yarn da:all
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# yarn lint
yarn da:all
node_modules
__generated__
.next
{
"arrowParens": "avoid",
"jsxBracketSameLine": true,
"jsxSingleQuote": true,
"printWidth": 120,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5"
}
{
"recommendations": [
"blanu.vscode-styled-jsx",
"coenraads.bracket-pair-colorizer-2",
"dbaeumer.vscode-eslint",
"dzannotti.vscode-babel-coloring",
"jpoissonnier.vscode-styled-components",
"qcz.text-power-tools"
],
"unwantedRecommendations": [
"esbenp.prettier-vscode",
"ms-vscode.vscode-typescript-tslint-plugin"
]
}
{
"search.exclude": {
"**/.dev_assets/**": true,
"**/.git/**": true,
"**/.github/**": true,
"**/.next/**": true,
"**/.vscode/**": true,
"**/build/**": true,
"**/node_modules/**": true
},
"files.watcherExclude": {
"**/.dev_assets/**": true,
"**/.git/**": true,
"**/.github/**": true,
"**/.next/**": true,
"**/.vscode/**": true,
"**/build/**": true,
"**/node_modules/**": true
},
"cSpell.words": [
"Abinaya",
"Kumarasinghe",
"Thilina",
"handpose",
"tfjs"
]
}
TensorFlow.js
1. https://www.youtube.com/watch?v=CM92pIh1Unw
2. https://www.youtube.com/watch?v=3MqJzMvHE3E
https://www.tensorflow.org/js/guide/nodejs
https://levelup.gitconnected.com/build-ad-dog-classifier-with-react-and-tensorflow-js-in-minutes-f08e98608a65
https://experiments.withgoogle.com/collection/ai
https://teachablemachine.withgoogle.com/
https://www.npmjs.com/package/ml5
https://p5js.org/
## Main objective
- creating a web tool which is capable of doing video & audio conferencing while adding new features to traditional teaching methods
## Main Research questions
- How to make E-learning more interactive efficient and powerful
## Individual research quesiton
- What can be added to get students attractions
- How can we force students to use Q&A systems
- How to track students attention
- Keep un neccessary students out from sessions
## Individual objectives
- Using 3D visualization methods in teaching
- Advance Q and A
- Tracking students attention
- High security features
## Other necessary Information
# Running the project
## Getting Started
First, run the development server:
......@@ -31,3 +7,5 @@ npm run dev
# or
yarn dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
/// <reference types="next" />
/// <reference types="next/types/global" />
/// <reference types="next/image-types/global" />
const path = require('path');
module.exports = {
env: {
appName: 'com',
dev_url: 'http://localhost:3000',
host_url: 'https://noon-interview.vercel.app',
hosting: false,
FIREBASE_PROJECT_ID: "noon-4a6cf",
FIREBASE_CLIENT_EMAIL: "firebase-adminsdk-au73o@noon-4a6cf.iam.gserviceaccount.com",
FIREBASE_PRIVATE_KEY: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMly3SvQ3pgobE\naZDDFfjfcoYTsTmfpP8MDFJRw4MHYL45ejg8YeB8joBiHn0xgfkd0Tza6+Cse4gl\nos2vA2PJZ9zg10W64b5CecAlvB6yoNj2T8Vc6S+uRqEfx+4Ab6KQ4DyV79za2AUD\nmLML9j/swYojP92TzcxFkIs3e1x0IaB3L7HqhDaCotVICNs+HHLghOHFmOHPTZVt\nST0wFxbiAxG/IhGVFk6JybEc9fpy2bWL9125jW2Q81TYTDZNHS2oLBiY0yhVuUtQ\nSdiVsPYTrgygDRjC59+QI0uKrMhIvYZ3ZogDgntHFOk1mA29g9LdRDWD7i1oMylo\n7nMEdS71AgMBAAECggEAOkYZZDw7OTbXghx7gkXA5IxvSi6htio+B0V/MRDaQoC4\nzhBU8kYCthe0073RdQeLWIXfqo+jKB3rkqTDp0T06EowLM7Eas2f7rlVFKp3p/OO\nuOHR2nwE+8PcYvwEe5VQnalxOFfg9WiwTOzymsaiQKKD4TRwvYfR1kKslLoLhHwI\nglL/wPopWGPb2PAoc/Yh/Ai3mriMxMLN2V5r/CIoZjggbYIEobnkNONQ2I2z4bd1\nJ6363VRgBp6ZmhC4VnaXNuqZfOKfwQmi1rzcdTMn5DhZySeWVmJ6cExkHvkMz6Ji\nEfP2tA9ssfZKaghywLT5cYmr33OQdV+1OtYXBhgfxQKBgQD8ixKxOzcGXxr893Sj\nsLYwIMGpYAXCl5OVNr+XdjXwh3o3q1PQvidheHyTKR/jxUKcQgI1KksVcREX5oLW\nmFVtFApcloAVZv8zoNTCRywXA8toxQJcsqinTmzNwjYbn68ICgJtkqZLc6Ph45h7\nDoNWC3/hwGLcsTD1JloBQ8QtQwKBgQDPZBOmDItgdaJBRWbmg7ISnEnXn973tAlX\nhyioJVc77zOHJ1CMaE8FcMHsUrrcORy667L+k6FyPHSJUpNuVieFlmywl6Q2Dw8t\nFn69OC8kw+8CklMxX65jYG9EwU1wdcbzpntr/3h9NX9CNDacQP3aN/1ivOaOWLxr\nN+7x+fkTZwKBgBSgo2k4hfkOQZ0R9UP9hhQOSOM1xaKsUNCqRSHw9Nzto+zyIIl3\nTq4mcj5u6HzpOtSai6WeC733m0bRfDRdAvVC4snHPTUCUav84gPwXkiO9clb9iJu\nMVphDIAN8e91ro1AjAw5Iz4cdvFXbrf2aoHXtJ1S4oBWNMKBXG6oA1kTAoGASHAx\nOL+K8z9DVD8UiRGY4k06sZkCvUxiMvNfrROV27ZaLiv6Q4CvkTvoUE45PHCqa1Om\naqtQKeGZ5tkz68cl+NAo2Kmuzr8F0v7Xd+om9VWGp0RK0KUV+VoWo1JNZSmOO058\nL6XFBR7pe0tXg85jnJQP6iwG79NoxJ591IE2kaMCgYEAzOw4Bfhctj5ipWfB/May\nFsiihBsDKA2Qo74XOrxpjtJJ9t1mjLuPeyZgPP6CIqIIrPDUktwnsw2AGc2S9ovu\npKtkn4E5vd9W1mGx91uUuY9OUIjjDVV+ToH4gELXhhAlz9a6pevv1Fx5ULNuszLo\n9t95t+XCkuqRyytTbDLYY6w=\n-----END PRIVATE KEY-----\n",
APP_NAME: 'Davinci',
API_KEY: 'AIzaSyBCC6ZG9rLWUyEWsMvKbISBJj61zKY8sS8',
AUTH_DOMAIN: 'davinci-33f41.firebaseapp.com',
PROJECT_ID: 'davinci-33f41',
STORAGE_BUCKET: 'davinci-33f41.appspot.com',
MESSAGING_SENDER_ID: '543136869191',
APP_ID: '1:543136869191:web:8e80d6b3618c9d08997a62',
MEASUREMENT_ID: 'G-SCD4TJGBHV',
},
i18n: {
locales: ['en','jp','sin'],
defaultLocale: 'en'
locales: ['en', 'de'],
defaultLocale: 'en',
},
reactStrictMode: true,
}
sassOptions: {
includePaths: [path.join(__dirname, './src/common/styles')],
},
images: {
domains: ['google.com'],
},
// webpack: (config, { isServer }) => {
// if (isServer) {
// require("scripts/generate-sitemap");
// }
// return config;
// },
};
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -5,31 +5,51 @@
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
"start": "next start",
"lint": "next lint",
"da:all": "tsc && yarn da:lint && yarn da:check",
"da:lint": "eslint '**/*.{js,jsx,ts,tsx}'",
"da:check": "prettier --check '**/*.{js,jsx,ts,tsx}'",
"da:fix": "prettier --write '**/*.{js,jsx,ts,tsx}'",
"prepare": "husky install"
},
"dependencies": {
"@tensorflow-models/handpose": "^0.0.7",
"@tensorflow/tfjs": "^3.2.0",
"@tensorflow/tfjs-backend-webgl": "3.3.0",
"@tensorflow/tfjs-converter": "3.3.0",
"@tensorflow/tfjs-core": "3.3.0",
"@tensorflow/tfjs": "^3.7.0",
"@tensorflow/tfjs-backend-webgl": "3.7.0",
"@tensorflow/tfjs-converter": "3.7.0",
"@tensorflow/tfjs-core": "3.7.0",
"fingerpose": "^0.0.2",
"next": "10.0.7",
"react": "17.0.1",
"react-dom": "17.0.1",
"react-webcam": "^5.2.3",
"styled-components": "^5.2.1"
"firebase": "^8.6.8",
"next": "^11.0.1",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-firebase-hooks": "^3.0.4",
"react-select": "^4.3.1",
"react-webcam": "^5.2.4",
"sass": "^1.35.1",
"three": "^0.129.0"
},
"devDependencies": {
"@types/node": "^14.14.31",
"@types/react": "^17.0.2",
"@types/styled-components": "^5.1.7",
"babel-plugin-styled-components": "^1.12.0",
"prettier": "^2.2.1",
"tslib": "2.1.0",
"typescript": "^4.2.2"
},
"resolutions": {
"styled-components": "^5"
"@types/react": "^17.0.11",
"@types/react-select": "^4.0.16",
"@types/three": "^0.129.1",
"@typescript-eslint/eslint-plugin": "^4.28.0",
"@typescript-eslint/parser": "^4.28.0",
"eslint": "^7.29.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-next": "^11.0.1",
"eslint-config-prettier": "^8.3.0",
"eslint-import-resolver-typescript": "^2.4.0",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-json": "^3.0.0",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-sort-destructure-keys": "^1.3.5",
"husky": "^6.0.0",
"prettier": "^2.3.2",
"typescript": "^4.3.4"
}
}
No preview for this file type
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<polygon points="357.871,391.592 287.48,381.364 256,317.577 224.52,381.364 154.129,391.592 205.064,441.242 193.04,511.349
256,478.249 318.96,511.349 306.936,441.242 "/>
</g>
</g>
<g>
<g>
<polygon points="512,346.347 451.058,337.491 423.805,282.269 396.55,337.491 335.608,346.347 379.706,389.332 369.296,450.028
423.805,421.372 478.313,450.028 467.902,389.332 "/>
</g>
</g>
<g>
<g>
<polygon points="176.392,346.347 115.45,337.491 88.195,282.269 60.942,337.491 0,346.347 44.098,389.332 33.688,450.028
88.195,421.372 142.704,450.028 132.294,389.332 "/>
</g>
</g>
<g>
<g>
<path d="M308.507,182.256c8.547-11.146,13.643-25.07,13.643-40.17c0-36.476-29.675-66.15-66.15-66.15s-66.15,29.674-66.15,66.15
c0,15.1,5.096,29.024,13.644,40.17c-26.469,9.845-45.379,35.362-45.379,65.219v59.184h195.771v-59.184
C353.886,217.619,334.976,192.102,308.507,182.256z"/>
</g>
</g>
<g>
<g>
<rect x="240.839" y="0.651" width="30.321" height="50.019"/>
</g>
</g>
<g>
<g>
<rect x="158.511" y="34.748" transform="matrix(0.7071 -0.7071 0.7071 0.7071 8.6121 140.3069)" width="30.321" height="50.019"/>
</g>
</g>
<g>
<g>
<rect x="114.562" y="126.923" width="50.019" height="30.321"/>
</g>
</g>
<g>
<g>
<rect x="347.416" y="126.923" width="50.019" height="30.321"/>
</g>
</g>
<g>
<g>
<rect x="313.313" y="44.603" transform="matrix(0.7071 -0.7071 0.7071 0.7071 56.8332 256.7344)" width="50.019" height="30.321"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 498.88 314.38"><defs><style>.cls-1{fill:none;}.cls-2{fill:#d6d8e5;}.cls-3{clip-path:url(#clip-path);}.cls-4{fill:#653ab8;}.cls-5{fill:#4b2b89;}.cls-6{fill:#6c3ec5;}.cls-7{fill:#7945dc;}.cls-8{fill:#512e94;}.cls-9{fill:#492a85;}.cls-10{fill:#ffcea9;}.cls-11{fill:#2b2a30;}.cls-12{fill:#bf4b4b;}.cls-13{fill:#e26d6d;}.cls-14{fill:#f4f4f4;}.cls-15{fill:#3a2c6d;}.cls-16{fill:#bfbfbf;}.cls-17{fill:#e5e5e5;}.cls-18{fill:#ededed;}</style><clipPath id="clip-path" transform="translate(-1.12 -99.36)"><rect class="cls-1" width="500" height="500"/></clipPath></defs><title>Error_404_SVG</title><g id="Слой_2" data-name="Слой 2"><g id="Слой_1-2" data-name="Слой 1"><polygon class="cls-2" points="201.49 26.54 191.02 19.12 157.91 0 24.63 11.33 0.11 25.58 0 63.26 3.49 65.28 3.49 65.32 6.98 67.31 6.98 67.35 10.47 69.33 10.47 69.37 14.02 71.35 27.3 79.02 27.2 114.82 59.24 133.32 69.71 137.35 99.36 120.63 108.04 125.64 118.51 129.89 142.15 116.56 142.2 96.47 201.39 63.1 201.49 26.54"/><polygon class="cls-2" points="322.01 183.02 297.49 197.27 297.38 234.95 300.87 236.97 300.87 237.01 304.36 239 304.36 239.05 307.85 241.02 307.85 241.06 311.4 243.05 324.68 250.71 324.58 286.51 356.63 305.01 367.1 309.04 396.75 292.32 405.42 297.33 415.89 301.58 439.53 288.25 439.59 268.16 498.77 234.79 498.88 198.23 488.41 190.81 455.29 171.69 322.01 183.02"/><g class="cls-3"><path class="cls-2" d="M304.29,288.78l0,0,.51-.3,3.1-1.86,1.19-.75c.76-.47,1.51-.94,2.24-1.41l1.29-.84c.67-.43,1.32-.87,2-1.3l1.27-.87c.62-.42,1.23-.85,1.83-1.27l1.19-.85,1.75-1.29,1.08-.81,1.78-1.4.85-.68c.85-.69,1.67-1.37,2.45-2.06l1-.83c.37-.33.71-.66,1.06-1l.49-.46c.68-.64,1.32-1.28,1.93-1.92.14-.14.27-.29.4-.43.47-.51.93-1,1.36-1.52.17-.19.34-.39.5-.59l.42-.49c.35-.43.68-.85,1-1.28l.14-.19c.49-.66.95-1.32,1.37-2h0c.24-.38.48-.76.7-1.14.1-.17.18-.35.28-.52s.31-.57.45-.86.38-.77.56-1.15.25-.56.36-.84.12-.27.17-.4c.18-.45.33-.89.48-1.34q.29-.93.48-1.86c0-.07.05-.15.07-.23s0-.23.05-.35c.06-.29.1-.58.14-.86s.06-.43.08-.65.05-.58.07-.87,0-.27,0-.41,0-.31,0-.47l.1-36.56c0,.29,0,.58,0,.88l0,.3a18.73,18.73,0,0,0-3.26-11.74q-5.1-7.86-19.38-15.87c-1.48-.82-3-1.59-4.45-2.34-1.16-.64-2.32-1.26-3.49-1.85s-2.32-1.27-3.49-1.87A97.85,97.85,0,0,0,279.77,171a91,91,0,0,0-29-1.66,121.51,121.51,0,0,0-30.26,7.15A215.11,215.11,0,0,0,188,192.21q-16.94,9.84-26.85,18.79t-12.5,17.44a19.2,19.2,0,0,0-.84,6c0-.13,0-.27,0-.41l-.11,37.69a20.13,20.13,0,0,0,3.56,11.16Q156.56,291,170.5,299c1.18.68,2.36,1.34,3.54,2l1.16.59c.79.41,1.59.82,2.39,1.21.46.23.93.43,1.4.65.71.34,1.43.68,2.14,1,.51.23,1,.43,1.52.64.68.28,1.35.58,2,.84l.14.06c.24.1.48.17.72.27,1,.39,2,.77,3.06,1.12l1.36.45,2.59.81.72.22,1.19.32.95.25c1.05.27,2.11.53,3.16.76l.88.18c.75.16,1.49.3,2.24.43l.47.09q1.43.25,2.85.45l.17,0,.47.08q1.42.26,2.85.45l.17,0,.47.09,2.85.45a1,1,0,0,1,.17,0l.47.08c1,.17,1.92.32,2.89.45l.34,0,.79.1c.82.1,1.64.19,2.47.27l.94.09.67.06c.76.07,1.53.11,2.29.16h.23c.88.05,1.76.08,2.64.1h3.91l1,0h.55c.66,0,1.32-.06,2-.1l.88,0c1.08-.07,2.16-.15,3.24-.26l.25,0q1.91-.19,3.84-.45l1.29-.2c.86-.13,1.72-.25,2.58-.4l.32-.05,1.42-.27,2-.39,1.78-.4c.67-.15,1.35-.29,2-.46l1.8-.45,2-.53,1.83-.52,2-.61.56-.16,1.8-.59,1.16-.37c1.2-.41,2.41-.82,3.61-1.27A219.82,219.82,0,0,0,300.37,291q2-1.14,3.92-2.26m36.09-73.17h0c0,.21-.05.43-.08.64s-.09.58-.14.87c0,0,0,.06,0,.09a15.27,15.27,0,0,0,.24-1.61m-.34,2.1h0a18.23,18.23,0,0,1-.49,1.86,18.23,18.23,0,0,0,.49-1.86M149.8,242.43c-.11-.22-.19-.44-.28-.66.16.38.33.76.53,1.13-.09-.16-.18-.31-.25-.47" transform="translate(-1.12 -99.36)"/><polygon class="cls-4" points="126.61 19.43 126.5 57.11 48.31 63.77 48.42 26.09 126.61 19.43"/><polygon class="cls-5" points="58.26 59.15 58.15 96.83 0 63.26 0.11 25.58 58.26 59.15"/><polygon class="cls-6" points="191.02 19.12 190.92 56.8 113.83 101.6 113.94 63.91 191.02 19.12"/><polygon class="cls-5" points="108.14 87.95 108.04 125.64 90.19 115.33 90.3 77.65 108.14 87.95"/><polygon class="cls-6" points="131.78 74.22 131.68 111.9 108.04 125.64 108.14 87.95 131.78 74.22"/><polygon class="cls-5" points="59.35 95.64 59.24 133.32 27.2 114.82 27.3 77.14 59.35 95.64"/><polygon class="cls-6" points="90.3 77.65 90.19 115.33 59.24 133.32 59.35 95.64 90.3 77.65"/><path class="cls-7" d="M115.06,163.28l17.84,10.3-23.63,13.74L91.42,177,60.47,195l-32-18.5,31-18L1.23,124.94l24.52-14.25L159,99.36l33.12,19.12Zm-32-18.5,44.71-26-78.19,6.66L83,144.78" transform="translate(-1.12 -99.36)"/><path class="cls-8" d="M283.05,196c-.47-.27-.95-.52-1.43-.76l-.44-.2c-.36-.17-.72-.33-1.09-.48l-.27-.12-.16-.05c-.65-.25-1.32-.48-2-.68l-.15-.05-.28-.07c-.43-.12-.87-.23-1.32-.32l-.28-.07-.14,0q-.76-.15-1.56-.27h0c-.52-.08-1-.13-1.59-.18h-.11l-.39,0-1.17-.07H268.2q-1.05,0-2.13.15h-.14l-.58.07-.88.1-.79.12-.9.14-.25.05-.28,0c-.86.16-1.72.34-2.61.56-.63.15-1.29.32-2,.51l-.65.2-1.42.42-.3.1-.33.11c-1,.32-2,.66-3.05,1.05l-.2.08c-1,.38-2.09.8-3.18,1.24l-.5.2c-1.1.46-2.24,1-3.4,1.46l-.69.31c-1.18.53-2.38,1.09-3.62,1.68l-.51.25q-1.83.88-3.75,1.86l-.39.19c-1.32.68-2.69,1.4-4.08,2.14l-.8.43q-2.06,1.09-4.21,2.3l-.76.43c-1.52.85-3.05,1.72-4.63,2.64l-2.8,1.65-.87.52-1.53.92-.22.13c-1.05.64-2.08,1.27-3.07,1.89l-.57.36-2.33,1.48-.9.59L207,220.27l-.83.56c-.74.49-1.44,1-2.13,1.47l-.33.23c-.78.55-1.52,1.09-2.24,1.62l-.6.46-1.48,1.13-.65.52-1.33,1.09-.5.42c-.56.48-1.1,1-1.61,1.42l0,0c-.38.36-.74.7-1.09,1.05l-.27.27-.75.78-.33.37-.58.66-.3.37-.2.24q-.26.32-.48.63c-.19.26-.36.51-.53.77l-.17.28-.28.47h0c-.14.26-.28.52-.4.78l-.1.22c-.08.19-.16.37-.23.55l0,0,0,.08a9.27,9.27,0,0,0-.36,1.26h0a6.89,6.89,0,0,0-.13,1.09s0,.07,0,.1a1.09,1.09,0,0,0,0,.18l-.1,37.68c0-.09,0-.19,0-.28a8.3,8.3,0,0,1,.13-1.09h0a7.89,7.89,0,0,1,.37-1.27.93.93,0,0,1,0-.13l.23-.54c0-.07.06-.15.1-.23.12-.26.26-.52.41-.78s.2-.35.31-.52.09-.16.15-.24c.16-.25.34-.51.52-.77s.44-.58.68-.87c.1-.13.2-.25.31-.37s.37-.44.57-.66l.33-.37.76-.78.26-.27q.54-.54,1.14-1.08c.5-.47,1-.94,1.61-1.43l.5-.42c.42-.36.86-.72,1.33-1.09l.64-.51c.48-.38,1-.76,1.48-1.14l.6-.45c.72-.54,1.46-1.08,2.24-1.63L204,260c.68-.48,1.38-1,2.11-1.46l.83-.56,1.88-1.25.9-.58,2.34-1.49.56-.36c1-.62,2-1.25,3.08-1.89l1.71-1,.91-.55,2.8-1.64q2.35-1.36,4.62-2.63l.76-.44c1.44-.8,2.84-1.57,4.22-2.3l.8-.43c1.39-.74,2.75-1.46,4.08-2.14L236,241q1.92-1,3.75-1.86l.51-.25q1.86-.88,3.63-1.68l.68-.31c1.17-.51,2.3-1,3.4-1.46l.5-.2c1.09-.44,2.16-.86,3.18-1.24l.21-.08c1.05-.38,2.06-.73,3.05-1l.62-.2c.48-.16.95-.3,1.42-.43l.66-.2c.67-.18,1.33-.36,2-.51.88-.22,1.75-.39,2.6-.55l.54-.1.89-.15.79-.12.88-.1.72-.08c.73-.07,1.44-.12,2.14-.15H270l.58,0q.6,0,1.17.06l.5,0c.54,0,1.07.1,1.6.18h0c.52.08,1,.17,1.55.27l.43.1c.44.1.88.2,1.31.32l.44.12c.68.2,1.34.43,2,.68l.43.17q.54.22,1.08.48c.15.07.3.13.44.21q.74.34,1.44.75,6,3.47,6,7.9l.1-37.68q0-4.44-6-7.9" transform="translate(-1.12 -99.36)"/><path class="cls-9" d="M330,210.05q0,.45-.06.9c0,.22-.05.44-.08.66s-.09.6-.14.9l-.12.59a19.31,19.31,0,0,1-.49,1.92c-.18.59-.41,1.19-.64,1.79-.12.29-.24.57-.37.86s-.36.8-.55,1.19l-.46.89a35.31,35.31,0,0,1-2.34,3.75l-.14.2c-.44.6-.92,1.21-1.41,1.82l-.5.61c-.44.52-.89,1-1.36,1.56l-.4.45c-.62.66-1.26,1.32-1.93,2l-.49.47c-.65.63-1.31,1.25-2,1.88s-1.61,1.41-2.45,2.12l-.85.69c-.59.48-1.18,1-1.79,1.45l-1.07.83-1.75,1.33-1.2.88-1.83,1.32-1.26.89-2,1.34-1.28.86-2.25,1.46c-.39.26-.78.51-1.19.76-1,.64-2.05,1.29-3.1,1.93l-.5.31q-1.94,1.17-4,2.36a218.84,218.84,0,0,1-32.56,15.73c-1.21.45-2.41.88-3.61,1.3l-1.16.39-2.36.77-2.05.62-1.82.54-2,.55c-.61.15-1.21.32-1.81.46s-1.35.33-2,.48-1.19.28-1.78.4-1.35.27-2,.41L235,273l-2.6.42-1.28.19c-1.28.18-2.56.34-3.84.47s-2.32.21-3.48.29l-.89,0c-.84.05-1.68.09-2.52.11l-1,0c-.8,0-1.6,0-2.4,0h-1c-1.06,0-2.12,0-3.18-.11h-.23c-1-.06-2-.14-3-.22l-.95-.1c-.82-.08-1.64-.17-2.46-.28l-.79-.1c-1.08-.15-2.16-.31-3.24-.5l-.45-.09c-1.05-.19-2.09-.39-3.13-.61s-2.11-.49-3.17-.76l-.94-.25-1.91-.55c-.86-.25-1.73-.52-2.59-.8l-1.36-.45c-1-.36-2.05-.73-3.07-1.13-.28-.11-.57-.2-.86-.32-.67-.26-1.34-.56-2-.84l-1.52-.64c-.71-.31-1.42-.65-2.13-1l-1.42-.66c-.79-.39-1.58-.8-2.38-1.21l-1.16-.6c-1.18-.62-2.36-1.28-3.55-2q-13.93-8.06-19.24-16.17a23.14,23.14,0,0,1-1.56-2.75,19,19,0,0,1-2-8.42l-.11,37.69a20.13,20.13,0,0,0,3.56,11.16Q156.56,291,170.5,299c1.18.68,2.36,1.34,3.54,2l1.16.59c.79.41,1.59.82,2.39,1.21.46.23.93.43,1.4.65.71.34,1.43.68,2.14,1l1.52.64c.68.28,1.35.58,2,.84l.14.06c.24.1.48.17.72.26,1,.4,2,.78,3.06,1.13l1.36.45c.87.28,1.73.55,2.59.8l.72.23,1.19.32.95.25c1.05.27,2.11.53,3.16.76l.88.18c.75.16,1.49.3,2.24.43l.47.09c1,.17,1.92.32,2.89.46l.34,0,.79.1c.82.11,1.64.2,2.47.29l.94.09.67.06c.76.07,1.53.11,2.29.16h.23c.88.05,1.76.09,2.64.11h1.52c.79,0,1.59,0,2.39,0l1,0h.55c.66,0,1.32-.06,2-.1l.88,0c1.08-.07,2.16-.16,3.24-.26l.25,0c1.27-.13,2.55-.29,3.83-.46l1.3-.21c.86-.13,1.71-.26,2.58-.41l.32-.05,1.42-.28c.68-.14,1.35-.26,2-.41s1.18-.26,1.78-.4l2-.47,1.8-.47,2-.55c.61-.17,1.22-.36,1.82-.54s1.37-.4,2-.62l.56-.17,1.8-.6,1.16-.39c1.2-.42,2.4-.85,3.61-1.3a218.92,218.92,0,0,0,32.57-15.73q2-1.17,3.92-2.33l.05,0,.51-.31,3.1-1.92,1.19-.77,2.24-1.45,1.29-.87c.67-.45,1.32-.89,2-1.34l1.28-.89c.62-.44,1.23-.88,1.82-1.32.41-.29.81-.58,1.2-.88.6-.44,1.17-.88,1.75-1.33l1.08-.83c.61-.48,1.19-1,1.78-1.44l.85-.7c.85-.71,1.67-1.42,2.45-2.12l.95-.86c.37-.34.71-.68,1.06-1l.49-.47c.68-.66,1.32-1.32,1.93-2l.4-.45c.47-.52.93-1,1.36-1.56l.5-.61c.14-.17.29-.34.42-.51.35-.44.67-.87,1-1.31l.14-.2c.49-.68.95-1.36,1.37-2h0c.24-.39.48-.78.7-1.17.1-.19.18-.36.28-.54s.31-.59.45-.88.38-.8.55-1.2.26-.57.37-.86.12-.27.17-.41c.18-.46.33-.92.47-1.38.2-.64.36-1.28.49-1.91a2.1,2.1,0,0,0,.06-.24c0-.12,0-.24.06-.36.06-.3.1-.6.14-.9s.06-.44.08-.66.05-.6.07-.9c0-.14,0-.28,0-.42s0-.32,0-.49l.1-37.68c0,.3,0,.61,0,.91" transform="translate(-1.12 -99.36)"/><path class="cls-7" d="M316.48,232.47q-10,8.94-26.48,18.53a218.84,218.84,0,0,1-32.56,15.73,120.11,120.11,0,0,1-30.14,7.33,90.78,90.78,0,0,1-28.62-1.56,97.53,97.53,0,0,1-28.08-11.15q-13.93-8.06-19.24-16.17t-2.7-16.74q2.59-8.5,12.5-17.44T188,192.21a215.11,215.11,0,0,1,32.51-15.76,121.51,121.51,0,0,1,30.26-7.15,91,91,0,0,1,29,1.66,98,98,0,0,1,27.53,10.95q14.29,8.25,19.39,16.35A19.37,19.37,0,0,1,329.08,215q-2.61,8.5-12.6,17.45m-98,16.81q14.08-3.47,38.25-17.51,24.35-14.15,30.14-22.19T283.05,196q-9.48-5.48-23.41-2.12t-38.43,17.6q-24,13.94-29.92,22.12t3.57,13.65q9.51,5.49,23.6,2" transform="translate(-1.12 -99.36)"/><polygon class="cls-4" points="423.99 191.12 423.88 228.8 345.7 235.47 345.81 197.79 423.99 191.12"/><polygon class="cls-5" points="355.64 230.84 355.53 268.53 297.39 234.96 297.5 197.28 355.64 230.84"/><polygon class="cls-6" points="488.41 190.81 488.3 228.5 411.21 273.29 411.32 235.61 488.41 190.81"/><polygon class="cls-5" points="405.53 259.65 405.42 297.33 387.58 287.03 387.68 249.35 405.53 259.65"/><polygon class="cls-6" points="429.17 245.91 429.06 283.59 405.42 297.33 405.53 259.65 429.17 245.91"/><polygon class="cls-5" points="356.73 267.33 356.63 305.01 324.58 286.51 324.69 248.83 356.73 267.33"/><polygon class="cls-6" points="387.68 249.35 387.58 287.03 356.62 305.01 356.73 267.33 387.68 249.35"/><path class="cls-7" d="M412.45,335l17.84,10.31L406.65,359l-17.84-10.3-30.95,18-32.05-18.5,30.95-18-58.14-33.57,24.52-14.25,133.28-11.33,33.11,19.12Zm-32.05-18.5,44.72-26-78.18,6.66,33.46,19.32" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M368.28,326.87a53.44,53.44,0,0,0,7.66,10.43c.83,1,7.2-1.47,5.86-2.16s-5.5-6.5-7.59-10.37a131.81,131.81,0,0,1-4.46-14.17c-1.31-4.74-2.44-11.71-3.4-15s-2.92-4.51-4.88-5c-2.29-.53-3.77.1-3.36,2.87.74,4.88,4.54,23.79,10.17,33.36" transform="translate(-1.12 -99.36)"/><path class="cls-11" d="M364.63,401c2,1.61,4.88.14,5,.29a90.17,90.17,0,0,0,7.29,6.07c1.23,1,3.15,2.26,2.81,4.13-.63,3.32-6,2.3-8,1.28s-3.65-2.7-5.55-3.89c-1.36-.84-2.69-1.27-2.91-3-.12-1,.94-4.93,1.3-4.89" transform="translate(-1.12 -99.36)"/><path class="cls-12" d="M363.36,405.18c.26,1.64,1.58,2.09,2.93,2.93,1.93,1.2,3.63,2.93,5.64,3.95s6.49,1.88,7.8-.5c-.71,3.21-6,2.2-7.94,1.19s-3.65-2.7-5.55-3.89c-1.36-.84-2.69-1.28-2.9-3a2.77,2.77,0,0,1,0-.69" transform="translate(-1.12 -99.36)"/><path class="cls-11" d="M384.66,389.44c2,1.61,5.44-.15,5.58,0a75.42,75.42,0,0,0,6.51,5.88c1.24,1,3.16,2.27,2.81,4.13-.62,3.33-5.95,2.3-8,1.28s-3.66-2.7-5.56-3.88c-1.36-.85-2.69-1.28-2.9-3-.13-1,1.17-4.45,1.52-4.41" transform="translate(-1.12 -99.36)"/><path class="cls-12" d="M383.2,393.4c.26,1.64,1.58,2.09,2.92,2.93,1.94,1.2,3.64,2.93,5.65,3.95s6.49,1.87,7.8-.5c-.71,3.21-5.95,2.2-7.94,1.19s-3.65-2.71-5.55-3.89c-1.36-.84-2.7-1.28-2.91-3a2.85,2.85,0,0,1,0-.69" transform="translate(-1.12 -99.36)"/><path class="cls-13" d="M338.21,337.66C336,351.34,342.1,356.44,350,359.35c5.66,2.09,13.79,5.31,13.79,5.31s-.11,3-.17,9.74c-.06,5.93.72,27.59.72,27.59s3.28,1.7,6.05-.07c0,0,3.19-16.59,3.86-24.07.92-10.15,2.48-16.79,2-19-.46-1.92-11.55-7.38-15.07-10.3l23.24,7.79a41.34,41.34,0,0,0-.68,7.64c.22,8.06.66,25.49.66,25.49s3.19,2.3,5.91,0c0,0,5.85-34.51,5.14-39.08-.68-4.33-21.16-13.19-24.76-16.24A5.75,5.75,0,0,0,366.1,333Z" transform="translate(-1.12 -99.36)"/><path class="cls-14" d="M393.94,343.36l-15.62-9a.9.9,0,0,0-.9,0L350,350.16l16.06,9.27Z" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M365.37,356.12l-1.19.68c-.1.06-.09.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.08-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M367.05,355.14l-1.19.69c-.1.06-.08.16,0,.22l1.14.66a.4.4,0,0,0,.37,0l1.19-.69c.1,0,.09-.15,0-.21l-1.14-.66a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M368.76,354.16l-1.19.69c-.1,0-.09.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.08-.15,0-.22l-1.13-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M370.42,353.2l-1.19.69c-.1.05-.08.15,0,.21l1.14.66a.44.44,0,0,0,.37,0l1.19-.69c.1-.06.09-.16,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M372.11,352.23l-1.19.68c-.1.06-.09.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.08-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M373.79,351.25l-1.19.69c-.1.06-.08.15,0,.22l1.14.65a.38.38,0,0,0,.37,0l1.19-.69c.1-.05.09-.15,0-.22l-1.14-.65a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M375.48,350.28l-1.19.69c-.1,0-.09.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.08-.15,0-.22l-1.13-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M377.16,349.31,376,350c-.09.06-.08.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.09-.06.08-.16,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M378.85,348.33l-1.19.69c-.1.06-.09.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.69c.1-.05.08-.15,0-.21l-1.13-.66a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M380.53,347.36l-1.19.69c-.09.05-.08.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.19-.69c.09-.05.08-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M382.22,346.39l-1.19.68c-.1.06-.09.16,0,.22l1.14.66a.46.46,0,0,0,.38,0l1.19-.69c.1-.06.08-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M383.9,345.41l-1.19.69c-.09.06-.08.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.09-.06.08-.16,0-.22l-1.14-.66a.46.46,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M385.59,344.44l-1.19.69c-.1.06-.09.15,0,.22l1.14.65a.4.4,0,0,0,.38,0l1.19-.69c.1-.05.08-.15,0-.22l-1.13-.65a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M388.08,343l-2,1.16c-.1,0-.08.15,0,.22l1.14.65a.41.41,0,0,0,.37,0l2-1.16c.09-.05.08-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M366.23,353.73l-1.19.69c-.09.05-.08.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.19-.69c.09-.06.08-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M367.92,352.76l-1.19.68c-.1.06-.08.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.09-.16,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M369.61,351.78l-1.19.69c-.1,0-.09.15,0,.22l1.13.65a.4.4,0,0,0,.38,0l1.19-.69c.1-.05.09-.15,0-.22L370,351.8a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M371.3,350.81l-1.19.68c-.1.06-.09.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.08-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M373,349.84l-1.19.69c-.1.05-.08.15,0,.22l1.13.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M374.66,348.87l-1.19.68c-.1.06-.08.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.09-.16,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M376.35,347.89l-1.19.69c-.1.05-.09.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.19-.69c.1,0,.08-.15,0-.22l-1.13-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M378,346.92l-1.19.68c-.1.06-.09.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.08-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M379.72,345.94l-1.19.69c-.09.06-.08.15,0,.22l1.14.65a.4.4,0,0,0,.38,0l1.19-.69c.09-.05.08-.15,0-.22L380.1,346a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M381.41,345l-1.19.68c-.1.06-.08.16,0,.22l1.14.66a.4.4,0,0,0,.37,0l1.19-.68c.1-.06.09-.16,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M383.1,344l-1.19.69c-.1.06-.09.15,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.69c.1-.05.09-.15,0-.22l-1.13-.65a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M384.79,343l-1.19.69c-.1.05-.09.15,0,.21l1.13.66a.46.46,0,0,0,.38,0l1.19-.69c.1-.06.09-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M364.55,354.71l-2,1.15c-.09.06-.08.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l2-1.15c.09-.06.08-.16,0-.22l-1.14-.66a.4.4,0,0,0-.37,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M388,342.94l-1.19.69a.43.43,0,0,1-.35,0l-1.2-.7a.1.1,0,0,1,0-.2l.09-.06c.09-.05.09-.13,0-.19l-1.27-.73a.1.1,0,0,1,0-.2l.76-.44a.39.39,0,0,1,.35,0l1.19.69.24.14.18.1.18.1,1,.59c.1.06.1.15,0,.21" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M358.84,352.34l-1.19.69c-.1.05-.08.15,0,.22l1.13.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M360.52,351.37l-1.19.69c-.1.05-.08.15,0,.22l1.13.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.05.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M362.2,350.4l-1.19.69c-.1.05-.08.15,0,.22l1.14.65a.41.41,0,0,0,.37,0l1.19-.69c.1-.05.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M376.51,342.14l-1.19.69c-.1.05-.08.15,0,.21l1.13.66a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M378.19,341.17l-1.19.69c-.1.05-.08.15,0,.21l1.13.66a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.09-.16,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M379.87,340.2l-1.19.69c-.1.05-.08.15,0,.22l1.13.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M381.55,339.23l-1.19.69c-.1.05-.08.15,0,.21l1.13.66a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.09-.16,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M364.31,349.18l-1.62.94c-.1.05-.08.15,0,.22l1.13.65a.43.43,0,0,0,.38,0l1.63-.94c.09-.06.08-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M374.83,343.11l-1.62.94c-.1.05-.09.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.62-.94c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M372.72,344.33l-7.92,4.57c-.09.05-.08.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l7.91-4.57c.1-.06.08-.15,0-.22l-1.13-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M365.06,352.52l-1.19.69c-.1.06-.09.15,0,.22l1.13.65a.4.4,0,0,0,.38,0l1.19-.69c.1-.05.09-.15,0-.22l-1.13-.65a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M366.74,351.55l-1.19.69c-.09.05-.08.15,0,.22l1.14.65a.41.41,0,0,0,.37,0l1.19-.69c.1-.05.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M368.42,350.58l-1.18.69c-.1.05-.09.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.19-.69c.09-.06.08-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M370.11,349.61l-1.19.68c-.1.06-.09.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.09-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M371.79,348.64l-1.19.68c-.1.06-.08.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.09-.16,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M373.47,347.66l-1.19.69c-.09.06-.08.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.09-.06.08-.16,0-.22l-1.14-.66a.46.46,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M375.16,346.69l-1.19.69c-.1.06-.09.15,0,.22l1.13.65a.4.4,0,0,0,.38,0l1.19-.69c.1-.05.09-.15,0-.22l-1.13-.65a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M376.84,345.72l-1.19.69c-.1,0-.08.15,0,.22l1.13.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M378.52,344.75l-1.19.69c-.09.05-.08.15,0,.21l1.14.66a.43.43,0,0,0,.38,0l1.19-.69c.09-.06.08-.15,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M380.21,343.78l-1.19.68c-.1.06-.09.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.08-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M381.89,342.8l-1.19.69c-.1.06-.08.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.09-.16,0-.22l-1.14-.66a.46.46,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M383.57,341.83l-1.19.69c-.09.06-.08.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.69c.09-.05.08-.15,0-.21l-1.14-.66a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M363.38,353.5l-2.47,1.42c-.09.05-.08.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l2.46-1.42c.09-.06.08-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M362.59,352.06l-1.19.69c-.1.06-.09.15,0,.22l1.13.65a.4.4,0,0,0,.38,0l1.19-.69c.1-.05.09-.15,0-.22l-1.13-.65a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M364.27,351.09l-1.19.69c-.09.05-.08.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.18-.69c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M366,350.12l-1.19.69c-.1.05-.09.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.08-.15,0-.22l-1.13-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M367.64,349.15l-1.19.68c-.1.06-.09.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.09-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M369.32,348.18l-1.19.68c-.1.06-.08.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.09-.16,0-.22l-1.14-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M371,347.2l-1.19.69c-.09.06-.08.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.19-.68c.09-.06.08-.16,0-.22l-1.14-.66a.46.46,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M372.69,346.23l-1.19.69c-.1.06-.09.15,0,.22l1.14.65a.4.4,0,0,0,.38,0l1.19-.69c.1-.05.08-.15,0-.22l-1.13-.65a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M374.37,345.26l-1.19.69c-.1.05-.08.15,0,.22l1.13.65a.43.43,0,0,0,.38,0l1.19-.69c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M376.05,344.29l-1.19.69c-.09,0-.08.15,0,.22l1.14.65a.43.43,0,0,0,.38,0l1.18-.69c.1-.06.09-.15,0-.22l-1.14-.65a.4.4,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M377.74,343.32l-1.19.68c-.1.06-.09.16,0,.22l1.14.66a.46.46,0,0,0,.38,0l1.19-.69c.1-.06.08-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M379.42,342.35l-1.19.68c-.1.06-.09.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l1.19-.68c.1-.06.09-.16,0-.22l-1.13-.66a.42.42,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M383.18,340.17l-3.27,1.89c-.1.06-.08.16,0,.22l1.13.66a.42.42,0,0,0,.38,0l3.28-1.89c.09-.05.08-.15,0-.22l-1.14-.65a.43.43,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M360.91,353l-1.63.94c-.09.06-.08.16,0,.22l1.14.66a.42.42,0,0,0,.38,0l1.62-.94c.1-.05.08-.15,0-.21l-1.13-.66a.46.46,0,0,0-.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M389.78,344l-23.9,13.8c-.1.05-.09.15,0,.22l.57.32a.43.43,0,0,0,.38,0l23.9-13.8c.1-.06.08-.16,0-.22l-.57-.33a.4.4,0,0,0-.37,0" transform="translate(-1.12 -99.36)"/><polygon class="cls-16" points="360.69 245.23 360.84 245.32 364.97 247.7 372.31 243.46 372.46 243.38 368.18 240.9 360.69 245.23"/><polygon class="cls-17" points="360.84 245.32 364.97 247.7 372.31 243.46 368.18 241.08 360.84 245.32"/><path class="cls-17" d="M350,350.16v.36a1.52,1.52,0,0,0,.75,1.31l14.56,8.4a1.43,1.43,0,0,0,.75.2,1.49,1.49,0,0,0,.76-.2L393.18,345a1.51,1.51,0,0,0,.76-1.31v-.36l-27.85,16.07Z" transform="translate(-1.12 -99.36)"/><path class="cls-14" d="M366.52,359.66a1.81,1.81,0,0,0,1.54-.12l26.22-15.14a1.82,1.82,0,0,0,.87-1.25L398,326c0-.1,0-.2,0-.29a1.77,1.77,0,0,0-.53-1.27L370.26,340.2a1.35,1.35,0,0,0-.64.93Z" transform="translate(-1.12 -99.36)"/><path class="cls-17" d="M366.09,359.43l.18.11.25.12,3.1-18.53a1.35,1.35,0,0,1,.64-.93l27.25-15.73a1.65,1.65,0,0,0-.36-.28L369.84,340a1.31,1.31,0,0,0-.64.92Z" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M346.3,286.17s.33,6.51.19,7.09-3,2.48-3.82,3.17,4.5,5.94,7.1,7.13,10.8-1.94,11-6-1.41-7.42-2.67-7.6-11.75-3.81-11.75-3.81" transform="translate(-1.12 -99.36)"/><path class="cls-14" d="M345.57,294.38s4.73,7.05,11.32,7.71c2.08-2,2.27-9.35-.61-11.68,0,0,2.65-2.13,4.46-1.72a9.36,9.36,0,0,1,4.07,5.2A42.53,42.53,0,0,1,367.14,309c-.11,6.91,0,24.38,0,24.38s-1,6.68-6.95,10a21.49,21.49,0,0,1-15.65,2.16c-3.34-.78-4.58-2.65-5.73-5.08.3-4.84,2.21-14.81,1.41-20.91s-2.1-10.63-2.43-15.56.65-4.83,3.12-6.58a39.58,39.58,0,0,1,4.66-3" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M353.15,350.52a34.77,34.77,0,0,0-3.7-2.12,7.71,7.71,0,0,1-3.17-1.92c-1.16-1.13-3.06-5.43-4.41-9.61a43.17,43.17,0,0,1-1.6-14.55c.58-5.87,2.69-14.09,3.23-17.47s-.56-4.72-2.13-6c-1.84-1.46-4.39-.81-5.75,3.92a91.79,91.79,0,0,0-3,20.06,45.81,45.81,0,0,0,2.3,14.82,53.35,53.35,0,0,0,5.65,11.65c.65,1.09.86,2.06,1.85,4.29a15.1,15.1,0,0,0,4.33,5.76c1.65,1.19,2.44,1.35,2.83,1.12s.38-.81-.31-1.44a12.29,12.29,0,0,1-3-3.31s1.44,1.45,2.39,2.25a12.54,12.54,0,0,0,2.77,1.76c1,.42,2.31-.4,1.63-1.05s-1.39-1-2.78-2.17a12.19,12.19,0,0,1-2-2.13,23.21,23.21,0,0,0,3.07,2,5.2,5.2,0,0,0,2.8.76c.52,0,1.14-.74.18-1.43a18.6,18.6,0,0,1-3.67-2.5c-1.06-1.06-1.66-2-1.36-2s.88.65,2.12,1,2.57,0,2.73-.65.11-.55-1.05-1.13" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M361,276.46h0c-.78-5.06-4.42-8.89-9.63-8.6a10.05,10.05,0,0,0-9.49,10.6,10,10,0,0,0,4.38,7.7,10.78,10.78,0,0,0,.8,2.22c1.85,2.15,7.43,3.49,9,3.26,2.06-.3,3.17-1.16,4.15-3.41,1.73-4,1.19-9.27.76-11.77" transform="translate(-1.12 -99.36)"/><path class="cls-11" d="M346.3,286.16h0l.48-4.41s-3.61-9.33,4.91-7.54c5.62,1.19,7,1.7,8.74-2.07s-4.32-7.17-11.49-6.23a9.91,9.91,0,0,0-8.86,10c.19,2.78.93,8.39,6.22,10.2" transform="translate(-1.12 -99.36)"/><path class="cls-18" d="M331.72,311.49s4.65,4.62,10.15,3.29c.78-.53,2.67-11.34,2.67-11.34s0-6-4.59-5.83-8.23,13.88-8.23,13.88" transform="translate(-1.12 -99.36)"/><path class="cls-18" d="M366.82,302.52s2.43-.12,3.43-1.53c-.18-2.42-3.28-11.61-9.51-12.3a11.56,11.56,0,0,1,3.89,4.7,60.09,60.09,0,0,1,2.19,9.13" transform="translate(-1.12 -99.36)"/><path class="cls-11" d="M63.88,103.33c1.23-2,10.6-3.27,13.69,4.67,1.17,3,1,10.72,2,15.56s3.28,7.58,4.11,11.51-.52,10.5-10,11.67-16.74-2.16-19-5.18-2.28-9.42,0-12.87,4.09-6.24,4-10.73Z" transform="translate(-1.12 -99.36)"/><path class="cls-11" d="M70.07,102s-7.06-2-11.34,1.79a10.47,10.47,0,0,0-3,10.46c.57,2.23,1.71,5.27,3.48,5.44S70.07,102,70.07,102" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M72.77,121.22s-.46,7.87-.32,8.44,3.09,1.14,3.92,1.83-4.28,8.67-6.88,9.85-10.64-1.83-11.2-5.83c-.51-3.69,2.31-6.55,3.39-7.55a16,16,0,0,1,2.22,0l.23-3.82c3.52-1.12,8.64-2.87,8.64-2.87" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M49.62,163.22a41.56,41.56,0,0,1-7.85,8.16,40.79,40.79,0,0,0-2.68,3.09,11.87,11.87,0,0,1-5.26,3.5c-1.78.46-2.53.34-2.83,0s-.16-.85.62-1.15A9.86,9.86,0,0,0,35.07,175s-1.66.76-2.7,1.13a10.62,10.62,0,0,1-2.91.57c-1,0-2-1.14-1.23-1.47s1.48-.36,3-.93a9.65,9.65,0,0,0,2.28-1.17,19.47,19.47,0,0,1-3.24.67,5,5,0,0,1-2.71-.31c-.46-.2-.86-1,.17-1.31a15.34,15.34,0,0,0,3.91-.9c1.2-.55,2-1.12,1.69-1.24s-1,.26-2.16.17-2.33-.85-2.32-1.5.26-.29,1.44-.39,2.12-.64,3.81-.64a11.92,11.92,0,0,0,3.75-.45c1.28-.38,4.16-3.83,6.37-7a46,46,0,0,0,5.64-11.42c1.33-4.36,2.91-12.52,4-15.35s3.07-4.13,4.92-4.19c2.17-.07,3.1,2.79,2.52,5.26-1,4.33-5.84,21-11.72,28.72" transform="translate(-1.12 -99.36)"/><path class="cls-14" d="M73.85,130.43c2.21.34,4.74,1.52,5.09,2.73.4,1.42,1.28,8.07-.64,13.14s-4.08,14.2-5.18,16.39c0,0-8.76,1.56-16.48-3.22,0,0-.46-8.81-.49-11.71-7.12-6.22-1-13.87,5-19.83a13.12,13.12,0,0,1,2.17,0s-5.38,6.36-1.64,10c8-2.43,9.61-6,12.17-7.46" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M58.07,111.46h0c.79-5,4.44-8.87,9.66-8.57a10,10,0,0,1,5,18.33,10.16,10.16,0,0,1-.8,2.21c-1.86,2.15-6.76,3.51-8.38,3.53-1.4,0-2.61-1.29-3.92-3.46-2.73-4.53-2-9.54-1.6-12" transform="translate(-1.12 -99.36)"/><path class="cls-11" d="M69.34,103c3.66.72,6.67,1.75,7.66,5.34.68,2.48,1.57,7.19.72,9.18l-.52,1.43-4.43,2.29s-2.07-1.73-1.42-6.78a3.67,3.67,0,0,0-.63-1.91,5.75,5.75,0,0,1-.61-1.52,5.7,5.7,0,0,0-2.87-3.11c-3.3-1.85-8.13-.25-8.8.41A9.63,9.63,0,0,1,69.34,103" transform="translate(-1.12 -99.36)"/><path class="cls-11" d="M49.2,224c-1.85,1.51-4.73.47-4.87.61-1.88,1.88-4.69,3.53-6.78,5.17-1.15.91-2.95,2.13-2.62,3.87.58,3.12,5.57,2.16,7.46,1.21s3.42-2.54,5.2-3.65c1.27-.79,2.52-1.19,2.72-2.8.12-1-.78-4.44-1.11-4.41" transform="translate(-1.12 -99.36)"/><path class="cls-12" d="M50.29,227.78c-.25,1.54-1.48,2-2.74,2.75-1.82,1.12-3.41,2.75-5.29,3.7S36.17,236,35,233.76c.66,3,5.57,2.06,7.44,1.12s3.42-2.54,5.2-3.65c1.27-.79,2.52-1.19,2.72-2.8a3,3,0,0,0,0-.65" transform="translate(-1.12 -99.36)"/><path class="cls-11" d="M40.18,219c-1.69,1.38-4.25.61-4.38.74-1.72,1.73-4.28,3.21-6.2,4.72-1.05.83-2.7,1.94-2.4,3.54.53,2.86,5.1,2,6.83,1.11s3.13-2.33,4.77-3.34c1.16-.72,2.31-1.1,2.49-2.57.11-.89-.81-4.23-1.11-4.2" transform="translate(-1.12 -99.36)"/><path class="cls-12" d="M41.27,222.57c-.23,1.4-1.36,1.79-2.51,2.51-1.66,1-3.12,2.52-4.85,3.39s-5.57,1.61-6.69-.43c.61,2.75,5.1,1.89,6.81,1s3.13-2.32,4.77-3.33c1.16-.73,2.31-1.1,2.49-2.57a2.46,2.46,0,0,0,0-.59" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M65.82,164.63a27.49,27.49,0,0,1-14.75-2.13c.08,1.56.16,3,.16,3-6,4.24-18,11.38-18.83,16.31.78,15.57,3.15,37.81,3.82,38.13,1.89.9,3.21.75,4.09-.14,0,0,3.79-13.19,2.69-32.55,0,0,21-9.3,22.37-14.38.79-2.93.63-3.3.57-6.33,0-.63-.06-1.25-.12-1.87" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M72.79,162.61c-4.16,1.94-8,2.18-12.68,1.7.06,2.08.3,6,.3,6-6,4.24-18,11.38-18.84,16.31.79,15.57,2.24,38.12,2.93,38.4a5,5,0,0,0,5-.58s3.79-13,2.69-32.38c0-.36,18-9.22,20.28-11.57,2.45-2.51,2.73-5.82,2.67-9.14-.06-3.12-1-5.69-2.33-8.74" transform="translate(-1.12 -99.36)"/><path class="cls-13" d="M77.2,165.91s6.66,11.79-4.44,17.85c-11.7,6.39-18.84,7.89-18.84,7.89l-1.75.41s.83,4.28,0,12.25c0,0-8.35,2.92-19-6.46l-3.53-11.36-.42-3A6.31,6.31,0,0,1,31,177.75c2.55-2.31,10.65-8.24,15.69-11.64s9.06-6.64,9.06-6.64l.88-.82s6,4.75,16.89,3.16a17.55,17.55,0,0,1,3.71,4.1" transform="translate(-1.12 -99.36)"/><path class="cls-10" d="M70.6,183.4c1-.69,1.68-1.68,3.22-2.54a12.72,12.72,0,0,0,3.24-2.31c1-1,2.53-5.3,3.32-9.48A41.35,41.35,0,0,0,80.14,155a97.93,97.93,0,0,0-5.57-16.18c-1.48-3.13-.65-5,.7-6.42,1.59-1.63,3.25-1.59,5.13,2.78s4.89,12.63,5.85,19a42,42,0,0,1-.19,14.34,52.73,52.73,0,0,1-3.82,12c-.49,1.13-.57,2.08-1.24,4.34a14.58,14.58,0,0,1-3.45,6c-1.44,1.34-2.17,1.6-2.57,1.42s-.47-.73.12-1.42a11.84,11.84,0,0,0,2.42-3.53s-1.21,1.57-2,2.45a11.51,11.51,0,0,1-2.43,2c-.88.53-2.27-.09-1.69-.8s1.21-1.1,2.39-2.42a11.71,11.71,0,0,0,1.62-2.28,21.86,21.86,0,0,1-2.7,2.28,5,5,0,0,1-2.59,1.07c-.49,0-1.17-.57-.34-1.35A18.41,18.41,0,0,0,73,185.59c.88-1.14,1.35-2.06,1.06-2.05s-.76.72-1.9,1.25-2.46.35-2.69-.28.12-.41,1.16-1.11" transform="translate(-1.12 -99.36)"/><path class="cls-18" d="M83.31,141.06s-4,3.58-8.53,2.85L73,136.41s-1.19-4,2.2-5.46,6.61,2.44,8.07,10.11" transform="translate(-1.12 -99.36)"/><path class="cls-18" d="M61.15,127.93s-4.37-1.33-9,8.35l1.73,1.05s4.57-6.91,7.28-9.4" transform="translate(-1.12 -99.36)"/><path class="cls-14" d="M31,169.68l15.57-9a.89.89,0,0,1,.89,0l27.3,15.76-16,9.25Z" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M59.14,182.15l1.19.69c.1,0,.08.15,0,.22l-1.14.65a.41.41,0,0,1-.37,0L57.6,183c-.1-.06-.09-.15,0-.22l1.14-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M57.45,181.18l1.19.69c.1,0,.09.15,0,.21l-1.14.66a.46.46,0,0,1-.38,0l-1.19-.69c-.1-.06-.08-.16,0-.22l1.13-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M55.75,180.19l1.19.69c.09.06.08.15,0,.22l-1.14.66a.4.4,0,0,1-.37,0l-1.19-.69c-.1-.05-.09-.15,0-.21l1.14-.66a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M54.08,179.23l1.19.69c.1.06.09.15,0,.22l-1.13.65a.4.4,0,0,1-.38,0l-1.19-.69c-.1-.05-.09-.15,0-.22l1.13-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M52.4,178.26l1.19.69c.09.05.08.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0l-1.19-.69c-.09-.06-.08-.15,0-.22l1.14-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M50.71,177.29l1.19.68c.1.06.09.16,0,.22l-1.13.66a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.09-.16,0-.22l1.13-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M49,176.31l1.19.69c.09.06.08.15,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.69c-.09,0-.08-.15,0-.21l1.14-.66a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M47.34,175.34l1.19.69c.1.05.09.15,0,.22l-1.13.65a.43.43,0,0,1-.38,0l-1.19-.69c-.1-.06-.09-.15,0-.22l1.13-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M45.66,174.37l1.19.68c.09.06.08.16,0,.22l-1.14.66a.46.46,0,0,1-.38,0l-1.19-.69c-.09-.06-.08-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M44,173.39l1.19.69c.1.06.09.16,0,.22L44,175a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.09-.16,0-.22l1.13-.66a.46.46,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M42.29,172.42l1.19.69c.09.06.08.15,0,.22l-1.14.65a.4.4,0,0,1-.38,0l-1.19-.69c-.09-.05-.08-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M40.6,171.45l1.19.69c.1.05.09.15,0,.22l-1.13.65a.43.43,0,0,1-.38,0l-1.19-.69c-.1-.06-.09-.15,0-.22l1.13-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M38.92,170.48l1.19.68c.09.06.08.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.09-.06-.08-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M36.42,169l2,1.15c.1.06.09.16,0,.22l-1.13.66a.42.42,0,0,1-.38,0l-2-1.15c-.1-.06-.09-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M58.27,179.76l1.19.69c.1.06.09.16,0,.22l-1.13.66a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.09-.16,0-.22l1.13-.66a.46.46,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M56.58,178.79l1.19.69c.1.05.09.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0L55,179.68c-.1-.06-.08-.15,0-.22l1.13-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M54.9,177.82l1.18.68c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.09-.06-.08-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M53.21,176.84l1.19.69c.09.05.08.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0l-1.19-.69c-.09,0-.08-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M51.53,175.87l1.19.69c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0L50,176.76c-.1,0-.08-.15,0-.21l1.13-.66a.46.46,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M49.84,174.9l1.19.69c.1,0,.09.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0l-1.19-.69c-.09-.06-.08-.15,0-.22l1.14-.65a.38.38,0,0,1,.37,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M48.16,173.93l1.19.68c.09.06.08.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.09-.06-.08-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M46.47,173l1.19.69c.1.05.08.15,0,.22l-1.13.65a.43.43,0,0,1-.38,0l-1.19-.69c-.1-.06-.09-.15,0-.22l1.14-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M44.78,172l1.19.68c.1.06.09.16,0,.22l-1.13.66a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.09-.16,0-.22L44.4,172a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M43.09,171l1.19.69c.1.06.09.15,0,.22l-1.14.65a.4.4,0,0,1-.38,0l-1.19-.69c-.1,0-.08-.15,0-.22l1.13-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M41.4,170l1.19.68c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.09-.06-.08-.16,0-.22L41,170a.4.4,0,0,1,.37,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M39.72,169.05l1.19.69c.09.06.08.15,0,.22l-1.14.65a.4.4,0,0,1-.38,0l-1.19-.69c-.09-.05-.08-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M60,180.74l2,1.16c.1,0,.09.15,0,.21l-1.13.66a.46.46,0,0,1-.38,0l-2-1.16c-.1-.06-.09-.15,0-.22l1.14-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M36.5,169l1.19.69a.36.36,0,0,0,.35,0l1.2-.69c.1-.06.1-.15,0-.21l-.1,0a.1.1,0,0,1,0-.19l1.27-.73c.1-.06.1-.15,0-.21l-.75-.44a.41.41,0,0,0-.36,0l-1.18.68-.25.14-.18.11-.17.1-1,.59c-.1.06-.1.15,0,.2" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M65.66,178.38l1.19.68c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.08-.16,0-.22l1.13-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M64,177.41l1.19.68c.1.06.09.16,0,.22L64,179a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.08-.16,0-.22l1.13-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M62.3,176.44l1.19.68c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.08-.16,0-.22l1.13-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M48,168.17l1.19.69c.1.06.09.15,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.69c-.1-.05-.08-.15,0-.22l1.13-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M46.31,167.2l1.19.69c.1.06.09.15,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.69c-.1-.05-.08-.15,0-.21l1.13-.66a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M44.63,166.23l1.19.69c.1.06.09.15,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.69c-.1-.05-.08-.15,0-.22l1.13-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M43,165.26l1.19.69c.1.06.09.15,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.69c-.1-.05-.08-.15,0-.22l1.13-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M60.19,175.21l1.62.94c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.62-.94c-.1,0-.09-.15,0-.21l1.14-.66a.46.46,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M49.67,169.14l1.63.94c.09.06.08.15,0,.22l-1.14.66a.42.42,0,0,1-.38,0L48.13,170c-.1-.05-.08-.15,0-.22l1.13-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M51.79,170.36l7.91,4.57c.1.06.09.16,0,.22l-1.13.66a.42.42,0,0,1-.38,0l-7.91-4.57c-.1-.05-.09-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M59.45,178.56l1.19.68c.09.06.08.16,0,.22l-1.14.66a.46.46,0,0,1-.38,0l-1.19-.69c-.09-.06-.08-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M57.76,177.59l1.19.68c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.08-.16,0-.22l1.13-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M56.08,176.61l1.19.69c.1.06.08.15,0,.22l-1.13.66a.42.42,0,0,1-.38,0l-1.19-.69c-.1-.05-.09-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M54.4,175.64l1.19.69c.09.06.08.15,0,.22l-1.14.65a.4.4,0,0,1-.38,0l-1.19-.69c-.09-.05-.08-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M52.71,174.67l1.19.69c.1,0,.09.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0l-1.19-.69c-.1-.06-.08-.15,0-.22l1.13-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M51,173.7l1.19.69c.1.05.08.15,0,.21l-1.13.66a.46.46,0,0,1-.38,0l-1.19-.69c-.1-.06-.09-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M49.35,172.73l1.19.68c.09.06.08.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.09-.06-.08-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M47.66,171.75l1.19.69c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.69c-.1,0-.08-.15,0-.21l1.13-.66a.46.46,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M46,170.78l1.19.69c.1.06.09.15,0,.22l-1.13.65a.4.4,0,0,1-.38,0l-1.19-.69c-.1,0-.09-.15,0-.22l1.13-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M44.3,169.81l1.19.69c.09.05.08.15,0,.22l-1.14.65a.4.4,0,0,1-.38,0l-1.19-.69c-.09,0-.08-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M42.61,168.84l1.19.69c.1.05.09.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0l-1.19-.69c-.1-.06-.08-.15,0-.22l1.13-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M40.93,167.87l1.19.68c.1.06.09.16,0,.22l-1.13.66a.42.42,0,0,1-.38,0l-1.19-.68c-.1-.06-.09-.16,0-.22l1.13-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M61.13,179.53,63.59,181c.1.06.09.15,0,.22l-1.13.65a.4.4,0,0,1-.38,0l-2.46-1.42c-.1-.06-.09-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M61.91,178.1l1.19.68c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0L60.37,179c-.09-.06-.08-.16,0-.22l1.14-.66a.4.4,0,0,1,.37,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M60.23,177.13l1.19.68c.1.06.09.16,0,.22l-1.13.66a.42.42,0,0,1-.38,0L58.69,178c-.1-.06-.09-.16,0-.22l1.13-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M58.55,176.15l1.19.69c.1.06.08.15,0,.22l-1.13.66a.42.42,0,0,1-.38,0L57,177c-.1,0-.09-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M56.87,175.18l1.19.69c.09,0,.08.15,0,.22l-1.14.65a.4.4,0,0,1-.38,0l-1.19-.69c-.09,0-.08-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M55.18,174.21l1.19.69c.1,0,.09.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0l-1.19-.69c-.1-.06-.08-.15,0-.22l1.13-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M53.5,173.24l1.19.69c.1,0,.08.15,0,.21l-1.13.66a.46.46,0,0,1-.38,0L52,174.13c-.1-.06-.09-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M51.82,172.27,53,173c.09.06.08.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.09-.06-.08-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M50.13,171.3l1.19.68c.1.06.09.16,0,.22l-1.14.66a.42.42,0,0,1-.38,0l-1.19-.68c-.09-.06-.08-.16,0-.22l1.14-.66a.4.4,0,0,1,.37,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M48.45,170.32l1.19.69c.1.06.09.15,0,.22l-1.13.66a.42.42,0,0,1-.38,0l-1.19-.69c-.1-.05-.09-.15,0-.22l1.13-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M46.77,169.35,48,170c.1.06.08.15,0,.22l-1.13.65a.4.4,0,0,1-.38,0l-1.19-.69c-.1-.05-.09-.15,0-.22l1.14-.65a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M45.09,168.38l1.19.69c.09.05.08.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0l-1.19-.69c-.09-.06-.08-.15,0-.22l1.14-.65a.4.4,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M41.32,166.21l3.27,1.89c.1.05.09.15,0,.22l-1.14.65a.43.43,0,0,1-.38,0l-3.27-1.89c-.1-.06-.09-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M63.6,179.07l1.62.94c.1.05.09.15,0,.21l-1.13.66a.46.46,0,0,1-.38,0L62.06,180c-.1-.06-.09-.16,0-.22l1.14-.66a.42.42,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><path class="cls-15" d="M34.73,170l23.9,13.8c.1.06.09.15,0,.22l-.57.33a.4.4,0,0,1-.37,0l-23.91-13.8c-.09,0-.08-.15,0-.22l.57-.32a.43.43,0,0,1,.38,0" transform="translate(-1.12 -99.36)"/><polygon class="cls-16" points="61.88 71.55 61.73 71.64 57.61 74.02 50.29 69.79 50.14 69.71 54.41 67.24 61.88 71.55"/><polygon class="cls-17" points="61.72 71.64 57.61 74.02 50.29 69.79 54.41 67.42 61.72 71.64"/><path class="cls-17" d="M74.74,176.46v.37a1.5,1.5,0,0,1-.75,1.3l-14.5,8.37a1.53,1.53,0,0,1-1.51,0L31.74,171.35a1.49,1.49,0,0,1-.75-1.3v-.37l27.74,16Z" transform="translate(-1.12 -99.36)"/><path class="cls-17" d="M58.73,185.71v1a1.58,1.58,0,0,1-.75-.19L31.74,171.35a1.5,1.5,0,0,1-.76-1.3v-.37Z" transform="translate(-1.12 -99.36)"/><path class="cls-14" d="M58.31,185.93a1.79,1.79,0,0,1-1.53-.12L30.65,170.72a1.8,1.8,0,0,1-.87-1.24l-2.86-17.06a1.46,1.46,0,0,1,0-.29,1.8,1.8,0,0,1,.52-1.27l27.16,15.68a1.35,1.35,0,0,1,.64.92Z" transform="translate(-1.12 -99.36)"/><path class="cls-17" d="M58.73,185.71l-.18.1-.24.12-3.09-18.47a1.35,1.35,0,0,0-.64-.92L27.42,150.86a1.88,1.88,0,0,1,.36-.27L55,166.3a1.31,1.31,0,0,1,.64.92Z" transform="translate(-1.12 -99.36)"/></g></g></g></svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#FBBB00;" d="M113.47,309.408L95.648,375.94l-65.139,1.378C11.042,341.211,0,299.9,0,256
c0-42.451,10.324-82.483,28.624-117.732h0.014l57.992,10.632l25.404,57.644c-5.317,15.501-8.215,32.141-8.215,49.456
C103.821,274.792,107.225,292.797,113.47,309.408z"/>
<path style="fill:#518EF8;" d="M507.527,208.176C510.467,223.662,512,239.655,512,256c0,18.328-1.927,36.206-5.598,53.451
c-12.462,58.683-45.025,109.925-90.134,146.187l-0.014-0.014l-73.044-3.727l-10.338-64.535
c29.932-17.554,53.324-45.025,65.646-77.911h-136.89V208.176h138.887L507.527,208.176L507.527,208.176z"/>
<path style="fill:#28B446;" d="M416.253,455.624l0.014,0.014C372.396,490.901,316.666,512,256,512
c-97.491,0-182.252-54.491-225.491-134.681l82.961-67.91c21.619,57.698,77.278,98.771,142.53,98.771
c28.047,0,54.323-7.582,76.87-20.818L416.253,455.624z"/>
<path style="fill:#F14336;" d="M419.404,58.936l-82.933,67.896c-23.335-14.586-50.919-23.012-80.471-23.012
c-66.729,0-123.429,42.957-143.965,102.724l-83.397-68.276h-0.014C71.23,56.123,157.06,0,256,0
C318.115,0,375.068,22.126,419.404,58.936z"/>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<svg height="512pt" viewBox="0 -64 512.01547 512" width="512pt" xmlns="http://www.w3.org/2000/svg"><path d="m503.457031 144.890625h-90.214843c-.84375 0-1.679688.035156-2.507813.074219-.8125.042968-2.015625.113281-2.363281.011718l-104.175782-28.425781 42.4375-42.4375c4.988282-4.992187 9.980469-9.984375 14.972657-14.976562 3.492187-3.488281 7.03125-6.925781 10.472656-10.46875 4.207031-4.328125 8.515625-7.945313 10.792969-13.765625 1.035156-2.636719 1.640625-5.433594 1.765625-8.257813.992187-22.871093-27.398438-35.542969-43.613281-19.328125l-93.796876 93.796875-41.386718-11.1875c-30.386719-8.6875-62.695313-3.34375-88.679688 14.636719l-41.972656 29.054688c-21.839844 15.121093-34.230469 40.976562-32.34375 67.472656.042969.574218.144531 1.144531.300781 1.699218l18.257813 64.9375c1.300781 4.617188 3.75 8.765626 6.921875 12.28125l-14.992188 15-25.234375 25.234376c-.621094.621093-1.152344 1.339843-1.550781 2.132812l-25.601563 49.742188c-1.699218 3.292968-1.066406 7.3125 1.554688 9.941406 1.636719 1.636718 3.820312 2.5 6.039062 2.5 1.324219 0 2.664063-.308594 3.902344-.949219l49.730469-25.597656c.75-.386719 1.441406-.890625 2.046875-1.46875l27.070312-26.335938c.664063-.648437 1.109376-1.449219 1.527344-2.25 0 0 32.628906-32.632812 32.851563-32.554687 6.554687 2.320312 13.519531 3.523437 20.4375 2.363281 6.902343-1.152344 13.550781-3.191406 20.609375-3.492187 27.699218-1.140626 54.6875.316406 80.210937 4.386718 15.019531 2.40625 34.449219 6.171875 51.585938 14.027344l2.378906 1.09375c9.867187 4.546875 20.0625 9.257812 32.417969 10.410156 2.375.222656 4.753906.332032 7.152344.332032 8.082031 0 16.308593-1.253907 24.535156-3.746094 15.171875-4.589844 30.027344-13.15625 42.988281-24.777344 4.257813-3.839844 9.285156-6.042969 13.808594-6.042969h81.6875c4.710937 0 8.535156-3.824219 8.535156-8.535156v-128c-.027344-4.710937-3.847656-8.53125-8.558594-8.53125zm-338.21875 77.285156c-.417969.019531-.835937.035157-1.246093.050781-2.875.113282-5.683594.273438-8.429688.5625-2.398438.257813-4.710938.609376-6.9375 1.058594l167.832031-167.832031 12.066407 12.066406-153.984376 153.984375c-.316406 0-.582031.007813-.894531.007813-2.9375-.007813-5.734375.023437-8.40625.101562zm42.546875-9.214843 12.332032 8.40625c-2.21875.261718-4.96875.503906-8.363282.691406l-1.511718.082031c-3.824219.242187-7.832032.230469-11.84375.214844zm-92.46875-6.9375c1.078125-8.378907 6.582032-16.382813 12.820313-18.46875.125-.039063.246093-.082032.363281-.132813l18.03125-6.972656c5.691406-1.914063 11.828125-1.085938 16.761719 2.210937l1.414062.960938-46.199219 46.199218zm-30.734375 106-12.792969-11.347657 38.792969-38.792969c-.179687.851563-.324219 1.671876-.476562 2.5-.703125 3.832032-1.1875 7.6875-1.476563 11.570313-.273437 3.558594-.929687 7.277344 1.109375 10.480469.058594.085937.074219.195312.136719.28125zm0 0"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 462.522 462.522" style="enable-background:new 0 0 462.522 462.522;" xml:space="preserve">
<path d="M432.958,222.262c-1.452-0.305-2.823-0.592-4.042-0.909c-13.821-3.594-20.129-5.564-24.793-14.569l-17.667-35.768
c-5.678-10.961-20.339-19.879-32.682-19.879h-31.453v-41.303c0-7.416-6.034-13.45-13.452-13.45l-219.07,0.22
c-7.218,0-12.661,5.736-12.661,13.343v12.208H21.018C9.429,122.156,0,131.584,0,143.174s9.429,21.018,21.018,21.018h56.119v20.145
H40.394c-11.589,0-21.018,9.429-21.018,21.018s9.429,21.018,21.018,21.018h36.743v20.145H59.77
c-11.589,0-21.018,9.429-21.018,21.018s9.429,21.018,21.018,21.018h17.367v21.07c0,7.416,6.034,13.45,13.45,13.45h22.788
c3.549,24.323,24.542,43.064,49.837,43.064c25.297,0,46.291-18.741,49.841-43.064h92.224c0.479,0,0.97-0.032,1.46-0.064
c3.522,24.354,24.528,43.128,49.845,43.128c25.297,0,46.291-18.741,49.841-43.064h32.732c12.885,0,23.368-10.482,23.368-23.366
v-39.648C462.522,228.465,444.73,224.732,432.958,222.262z M356.582,297.46c10.1,0,18.317,8.214,18.317,18.311
s-8.217,18.311-18.317,18.311c-10.096,0-18.31-8.214-18.31-18.311S346.486,297.46,356.582,297.46z M322.321,219.414v-48.77h24.036
c9.238,0,20.634,6.932,24.864,15.094l15.721,31.829c0.333,0.644,0.679,1.258,1.038,1.846H322.321z M181.529,315.77
c0,10.096-8.217,18.311-18.317,18.311c-10.096,0-18.309-8.214-18.309-18.311s8.213-18.311,18.309-18.311
C173.312,297.46,181.529,305.674,181.529,315.77z"/>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="80.13px" height="80.13px" viewBox="0 0 80.13 80.13" style="enable-background:new 0 0 80.13 80.13;" xml:space="preserve">
<g>
<path d="M48.355,17.922c3.705,2.323,6.303,6.254,6.776,10.817c1.511,0.706,3.188,1.112,4.966,1.112
c6.491,0,11.752-5.261,11.752-11.751c0-6.491-5.261-11.752-11.752-11.752C53.668,6.35,48.453,11.517,48.355,17.922z M40.656,41.984
c6.491,0,11.752-5.262,11.752-11.752s-5.262-11.751-11.752-11.751c-6.49,0-11.754,5.262-11.754,11.752S34.166,41.984,40.656,41.984
z M45.641,42.785h-9.972c-8.297,0-15.047,6.751-15.047,15.048v12.195l0.031,0.191l0.84,0.263
c7.918,2.474,14.797,3.299,20.459,3.299c11.059,0,17.469-3.153,17.864-3.354l0.785-0.397h0.084V57.833
C60.688,49.536,53.938,42.785,45.641,42.785z M65.084,30.653h-9.895c-0.107,3.959-1.797,7.524-4.47,10.088
c7.375,2.193,12.771,9.032,12.771,17.11v3.758c9.77-0.358,15.4-3.127,15.771-3.313l0.785-0.398h0.084V45.699
C80.13,37.403,73.38,30.653,65.084,30.653z M20.035,29.853c2.299,0,4.438-0.671,6.25-1.814c0.576-3.757,2.59-7.04,5.467-9.276
c0.012-0.22,0.033-0.438,0.033-0.66c0-6.491-5.262-11.752-11.75-11.752c-6.492,0-11.752,5.261-11.752,11.752
C8.283,24.591,13.543,29.853,20.035,29.853z M30.589,40.741c-2.66-2.551-4.344-6.097-4.467-10.032
c-0.367-0.027-0.73-0.056-1.104-0.056h-9.971C6.75,30.653,0,37.403,0,45.699v12.197l0.031,0.188l0.84,0.265
c6.352,1.983,12.021,2.897,16.945,3.185v-3.683C17.818,49.773,23.212,42.936,30.589,40.741z"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 500 472.76"><defs><style>.cls-1{fill:#b1b4c4;}.cls-2{fill:#e4e7f2;}.cls-3,.cls-6{fill:#d6d8e5;}.cls-4{fill:#1e212d;}.cls-12,.cls-14,.cls-5{opacity:0.5;}.cls-5{fill:url(#Безымянный_градиент_15);}.cls-6{opacity:0.4;}.cls-7{fill:#2b303f;}.cls-8{fill:#c3c6d1;}.cls-9{fill:#616e84;}.cls-10{fill:#757b89;}.cls-11{fill:#20232d;}.cls-12{fill:url(#Безымянный_градиент_15-2);}.cls-13{fill:#fff;}.cls-13,.cls-16{opacity:0.1;}.cls-14{fill:url(#Безымянный_градиент_15-3);}.cls-15{fill:#696f7c;}.cls-17,.cls-19{opacity:0.3;}.cls-17{fill:url(#Безымянный_градиент_22);}.cls-18{fill:#1f232d;}.cls-19{fill:url(#Безымянный_градиент_22-2);}</style><linearGradient id="Безымянный_градиент_15" x1="-215" y1="2299.93" x2="-215" y2="2147.32" gradientTransform="matrix(0.87, 0.5, 0, 1.15, 512.04, -2300.54)" gradientUnits="userSpaceOnUse"><stop offset="0.21" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#fff" stop-opacity="0.2"/></linearGradient><linearGradient id="Безымянный_градиент_15-2" x1="-1791.86" y1="3243.88" x2="-1791.86" y2="3142.82" gradientTransform="matrix(0.87, 0.5, -1, 0.58, 5169.48, -526.54)" xlink:href="#Безымянный_градиент_15"/><linearGradient id="Безымянный_градиент_15-3" x1="-2254.45" y1="3015.77" x2="-2232.13" y2="2996.44" gradientTransform="matrix(0.87, 0.5, -1, 0.58, 5012.82, -405.11)" xlink:href="#Безымянный_градиент_15"/><linearGradient id="Безымянный_градиент_22" x1="122.71" y1="393.74" x2="122.71" y2="426.76" gradientUnits="userSpaceOnUse"><stop offset="0.01" stop-color="#fff"/><stop offset="0.88" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="Безымянный_градиент_22-2" x1="77.82" y1="368.52" x2="77.82" y2="401.22" xlink:href="#Безымянный_градиент_22"/></defs><title>workspace</title><g id="Слой_2" data-name="Слой 2"><g id="Слой_1-2" data-name="Слой 1"><g id="Laptop"><path class="cls-1" d="M442.56,324.42,214.36,192.67c-3.2-1.85-5.79-6.8-5.79-11.07V5.08c0-4.27,2.59-6.23,5.79-4.38l228.2,131.75c3.2,1.85,5.8,6.8,5.8,11.07V320C448.36,324.31,445.76,326.27,442.56,324.42Z"/><polygon class="cls-1" points="443.74 326.24 446.27 324.79 445.17 317.29 443.74 326.24"/><path class="cls-1" d="M208.16,1.78,210.65.35l3.57,2s-3.81.58-3.9.55S208.16,1.78,208.16,1.78Z"/><path class="cls-2" d="M440.47,325.63,212.27,193.88c-3.2-1.85-5.8-6.81-5.8-11.07V6.29c0-4.27,2.6-6.23,5.8-4.39l228.2,131.76c3.2,1.84,5.8,6.8,5.8,11.07V321.25C446.27,325.52,443.67,327.48,440.47,325.63Z"/><path class="cls-3" d="M440.07,325.86,211.87,194.11c-3.2-1.85-5.8-6.81-5.8-11.07V6.51c0-4.26,2.6-6.22,5.8-4.38l228.2,131.76c3.2,1.84,5.79,6.8,5.79,11.07V321.48C445.86,325.75,443.27,327.71,440.07,325.86Z"/><path class="cls-4" d="M442.73,315.13,209,180.17l.12-172.95c0-1.77,1.24-2.49,2.78-1.6l228.2,131.75a6.16,6.16,0,0,1,2.78,4.81Z"/><path class="cls-5" d="M442.66,315.13,208.9,180.18l.12-173c0-1.77,1.25-2.49,2.78-1.6L440,137.38a6.12,6.12,0,0,1,2.78,4.81Z"/><path class="cls-6" d="M268,428.44,39.75,296.68c-3.2-1.84-2.8-5.07.9-7.21l152.87-88.26c3.7-2.13,9.29-2.36,12.49-.51l228.2,131.75c3.2,1.85,2.8,5.07-.9,7.21L280.44,427.92C276.75,430.05,271.15,430.28,268,428.44Z"/><path class="cls-1" d="M272.94,425.44,44.74,293.69c-3.2-1.85-2.8-5.07.9-7.21l152.87-88.26c3.69-2.13,9.28-2.36,12.48-.52L439.2,329.46c3.2,1.84,2.8,5.07-.9,7.21L285.43,424.93C281.73,427.06,276.14,427.29,272.94,425.44Z"/><polygon class="cls-1" points="42.58 290.71 42.58 286.41 47.41 288.43 42.58 290.71"/><polygon class="cls-1" points="441.36 332.67 441.36 328.47 437.78 329.7 440.15 333.18 441.36 332.67"/><path class="cls-2" d="M272.94,421.82,44.74,290.07c-3.2-1.85-2.8-5.08.9-7.21L198.51,194.6c3.69-2.14,9.28-2.37,12.48-.52L439.2,325.83c3.2,1.85,2.8,5.08-.9,7.21L285.43,421.3C281.73,423.44,276.14,423.67,272.94,421.82Z"/><path class="cls-3" d="M272.94,421.26,44.74,289.51c-3.2-1.85-2.8-5.08.9-7.21L198.51,194c3.69-2.14,9.28-2.37,12.48-.52L439.2,325.27c3.2,1.85,2.8,5.08-.9,7.21L285.43,420.74C281.73,422.88,276.14,423.11,272.94,421.26Z"/><path class="cls-7" d="M194.27,223.81l-10.62-6.14c-.87-.5-.76-1.37.24-1.95L194,209.87a3.75,3.75,0,0,1,3.38-.14L208,215.86c.86.5.76,1.38-.25,2l-10.13,5.85A3.77,3.77,0,0,1,194.27,223.81Z"/><path class="cls-7" d="M209.31,232.49l-10.62-6.13c-.87-.5-.76-1.38.24-2l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.77,3.77,0,0,1,209.31,232.49Z"/><path class="cls-7" d="M224.53,241.28l-10.63-6.14c-.86-.5-.76-1.37.25-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.62,6.13c.87.5.76,1.38-.24,1.95l-10.14,5.86A3.78,3.78,0,0,1,224.53,241.28Z"/><path class="cls-7" d="M239.4,249.86l-10.63-6.13c-.86-.5-.76-1.38.25-1.95l10.13-5.86a3.77,3.77,0,0,1,3.39-.14l10.62,6.14c.87.5.76,1.37-.24,2l-10.14,5.85A3.75,3.75,0,0,1,239.4,249.86Z"/><path class="cls-7" d="M254.44,258.55l-10.63-6.14c-.86-.5-.75-1.37.25-1.95l10.14-5.85a3.72,3.72,0,0,1,3.38-.14l10.62,6.13c.87.5.76,1.37-.24,2l-10.14,5.86A3.78,3.78,0,0,1,254.44,258.55Z"/><path class="cls-7" d="M269.48,267.23l-10.62-6.13c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.5.75,1.38-.25,2l-10.14,5.85A3.75,3.75,0,0,1,269.48,267.23Z"/><path class="cls-7" d="M284.52,275.92l-10.62-6.14c-.87-.5-.76-1.37.24-1.95L284.28,262a3.78,3.78,0,0,1,3.38-.14L298.29,268c.86.5.76,1.37-.25,1.95l-10.14,5.85A3.75,3.75,0,0,1,284.52,275.92Z"/><path class="cls-7" d="M299.56,284.6l-10.62-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.87.5.76,1.38-.24,2L303,284.46A3.77,3.77,0,0,1,299.56,284.6Z"/><path class="cls-7" d="M314.61,293.28,304,287.15c-.87-.5-.76-1.38.24-1.95l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.87.5.76,1.37-.24,2L318,293.14A3.75,3.75,0,0,1,314.61,293.28Z"/><path class="cls-7" d="M329.65,302,319,295.83c-.86-.5-.76-1.37.25-1.95L329.4,288a3.77,3.77,0,0,1,3.39-.14L343.41,294c.87.5.76,1.38-.24,2L333,301.83A3.75,3.75,0,0,1,329.65,302Z"/><path class="cls-7" d="M344.69,310.65l-10.63-6.13c-.86-.5-.75-1.38.25-1.95l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.62,6.14c.87.5.76,1.37-.24,2l-10.14,5.85A3.75,3.75,0,0,1,344.69,310.65Z"/><path class="cls-7" d="M359.73,319.34l-10.62-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.72,3.72,0,0,1,3.38-.14l10.62,6.13c.87.5.76,1.37-.24,1.95l-10.14,5.86A3.78,3.78,0,0,1,359.73,319.34Z"/><path class="cls-7" d="M374.77,328l-10.62-6.13c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.5.75,1.38-.25,2l-10.14,5.85A3.75,3.75,0,0,1,374.77,328Z"/><path class="cls-7" d="M397.06,340.89l-17.87-10.32c-.87-.5-.76-1.37.24-1.95l10.14-5.86a3.78,3.78,0,0,1,3.38-.14l17.87,10.32c.87.5.76,1.38-.24,1.95l-10.14,5.86A3.75,3.75,0,0,1,397.06,340.89Z"/><path class="cls-7" d="M202,245.11,191.38,239c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.77,3.77,0,0,1,3.39-.14l10.62,6.13c.87.5.76,1.38-.24,2L205.39,245A3.75,3.75,0,0,1,202,245.11Z"/><path class="cls-7" d="M217.07,253.81l-10.62-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.5.76,1.38-.25,1.95l-10.13,5.86A3.77,3.77,0,0,1,217.07,253.81Z"/><path class="cls-7" d="M232.14,262.51l-10.62-6.14c-.87-.5-.76-1.37.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.5.75,1.38-.25,1.95l-10.14,5.86A3.78,3.78,0,0,1,232.14,262.51Z"/><path class="cls-7" d="M247.21,271.21l-10.63-6.14c-.86-.5-.75-1.37.25-1.95L247,257.27a3.72,3.72,0,0,1,3.38-.14L261,263.26c.87.5.76,1.37-.24,1.95l-10.14,5.86A3.78,3.78,0,0,1,247.21,271.21Z"/><path class="cls-7" d="M262.16,279.84l-10.63-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.86a3.78,3.78,0,0,1,3.38-.14l10.63,6.14c.87.5.76,1.37-.24,1.95l-10.14,5.86A3.78,3.78,0,0,1,262.16,279.84Z"/><path class="cls-7" d="M277.22,288.54,266.6,282.4c-.87-.5-.76-1.37.24-1.95L277,274.59a3.78,3.78,0,0,1,3.38-.14L291,280.59c.86.5.76,1.37-.25,2l-10.13,5.85A3.77,3.77,0,0,1,277.22,288.54Z"/><path class="cls-7" d="M292.29,297.23l-10.62-6.13c-.87-.5-.76-1.37.24-2l10.14-5.86a3.78,3.78,0,0,1,3.38-.14l10.62,6.14c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.75,3.75,0,0,1,292.29,297.23Z"/><path class="cls-7" d="M307.36,305.93l-10.63-6.13c-.86-.5-.76-1.38.25-1.95L307.11,292a3.77,3.77,0,0,1,3.39-.14L321.12,298c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.75,3.75,0,0,1,307.36,305.93Z"/><path class="cls-7" d="M322.43,314.63,311.8,308.5c-.87-.5-.76-1.38.24-1.95l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.75,3.75,0,0,1,322.43,314.63Z"/><path class="cls-7" d="M337.49,323.33l-10.62-6.13c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.86.5.76,1.37-.25,1.95l-10.13,5.85A3.77,3.77,0,0,1,337.49,323.33Z"/><path class="cls-7" d="M352.56,332l-10.62-6.13c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.62,6.13c.87.51.76,1.38-.24,2l-10.14,5.85A3.75,3.75,0,0,1,352.56,332Z"/><path class="cls-7" d="M367.63,340.73,357,334.6c-.86-.5-.76-1.38.25-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.62,6.13c.87.5.76,1.38-.24,2L371,340.59A3.75,3.75,0,0,1,367.63,340.73Z"/><path class="cls-7" d="M186.94,236.41l-17.87-10.32c-.87-.5-.76-1.37.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l17.87,10.31c.87.5.76,1.38-.24,2l-10.14,5.85A3.75,3.75,0,0,1,186.94,236.41Z"/><path class="cls-7" d="M396.33,341.45l-10.62-6.14a3.46,3.46,0,0,0-3.15,0l-10.72,6.19a1,1,0,0,0,0,1.82l.84.48a.89.89,0,0,1,0,1.68L361.33,352c-.87.51-.88,1.32,0,1.82l6.76,3.91a3.5,3.5,0,0,0,3.15,0l10.6-6.12,2.19-1.26,1.58-.92,1.59-.91,9.13-5.27C397.19,342.76,397.2,342,396.33,341.45Z"/><path class="cls-7" d="M136,257.51l-10.63-6.13c-.86-.5-.76-1.38.24-1.95l10.14-5.86a3.77,3.77,0,0,1,3.39-.14l10.62,6.14c.87.5.76,1.37-.24,2l-10.14,5.85A3.75,3.75,0,0,1,136,257.51Z"/><path class="cls-7" d="M151,266.17,140.39,260c-.87-.5-.76-1.38.24-2l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.87.5.76,1.37-.24,1.95L154.4,266A3.75,3.75,0,0,1,151,266.17Z"/><path class="cls-7" d="M166,274.83l-10.62-6.13c-.87-.5-.76-1.38.24-1.95l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.77,3.77,0,0,1,166,274.83Z"/><path class="cls-7" d="M293.75,348.58l-10.63-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.87.5.76,1.38-.24,1.95l-10.14,5.86A3.75,3.75,0,0,1,293.75,348.58Z"/><path class="cls-7" d="M308.74,357.24l-10.62-6.14c-.87-.5-.76-1.37.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.87.5.76,1.38-.24,1.95l-10.14,5.86A3.77,3.77,0,0,1,308.74,357.24Z"/><path class="cls-7" d="M323.74,365.9l-10.62-6.14c-.87-.5-.76-1.37.24-1.95L323.5,352a3.75,3.75,0,0,1,3.38-.14L337.51,358c.86.5.76,1.38-.25,1.95l-10.13,5.86A3.8,3.8,0,0,1,323.74,365.9Z"/><path class="cls-7" d="M338.74,374.56l-10.62-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.72,3.72,0,0,1,3.38-.14l10.63,6.13c.86.5.75,1.37-.25,1.95l-10.14,5.86A3.78,3.78,0,0,1,338.74,374.56Z"/><path class="cls-7" d="M184.88,285.72l-14.49-8.36c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l14.49,8.37c.87.5.76,1.37-.24,2l-10.14,5.85A3.75,3.75,0,0,1,184.88,285.72Z"/><path class="cls-7" d="M278.75,339.92l-14.49-8.37c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14L292.51,332c.87.5.76,1.38-.24,1.95l-10.14,5.86A3.75,3.75,0,0,1,278.75,339.92Z"/><path class="cls-7" d="M259.88,329l-70.63-40.78c-.87-.5-.76-1.38.24-1.95l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l70.64,40.78c.87.5.76,1.38-.24,1.95l-10.14,5.86A3.77,3.77,0,0,1,259.88,329Z"/><path class="cls-7" d="M191.52,255.89l-10.63-6.14c-.86-.5-.75-1.37.25-1.95L191.28,242a3.75,3.75,0,0,1,3.38-.14l10.62,6.13c.87.5.76,1.38-.24,1.95l-10.14,5.86A3.75,3.75,0,0,1,191.52,255.89Z"/><path class="cls-7" d="M206.54,264.56l-10.62-6.13c-.87-.5-.76-1.38.24-1.95l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.77,3.77,0,0,1,206.54,264.56Z"/><path class="cls-7" d="M221.57,273.24l-10.63-6.14c-.86-.5-.75-1.37.25-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.62,6.13c.87.5.76,1.38-.24,1.95L225,273.1A3.75,3.75,0,0,1,221.57,273.24Z"/><path class="cls-7" d="M236.59,281.91,226,275.78c-.87-.5-.76-1.38.24-1.95L236.35,268a3.75,3.75,0,0,1,3.38-.14L250.36,274c.86.5.76,1.37-.24,1.95L240,281.77A3.77,3.77,0,0,1,236.59,281.91Z"/><path class="cls-7" d="M251.62,290.59,241,284.45c-.86-.5-.75-1.37.25-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.62,6.13c.87.5.76,1.37-.24,1.95L255,290.45A3.78,3.78,0,0,1,251.62,290.59Z"/><path class="cls-7" d="M266.64,299.26,256,293.13c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.51.76,1.38-.25,2L270,299.12A3.77,3.77,0,0,1,266.64,299.26Z"/><path class="cls-7" d="M281.67,307.94,271,301.8c-.86-.5-.76-1.37.25-1.95L281.43,294a3.75,3.75,0,0,1,3.38-.15L295.43,300c.87.5.76,1.37-.24,1.95l-10.14,5.86A3.78,3.78,0,0,1,281.67,307.94Z"/><path class="cls-7" d="M296.69,316.61l-10.62-6.13c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.5.76,1.38-.25,2l-10.13,5.85A3.77,3.77,0,0,1,296.69,316.61Z"/><path class="cls-7" d="M311.72,325.29l-10.63-6.14c-.86-.5-.76-1.37.25-1.95l10.13-5.86a3.8,3.8,0,0,1,3.39-.14l10.62,6.14c.87.5.76,1.37-.24,2l-10.14,5.85A3.75,3.75,0,0,1,311.72,325.29Z"/><path class="cls-7" d="M326.74,334l-10.62-6.13c-.87-.51-.76-1.38.24-2L326.5,320a3.75,3.75,0,0,1,3.38-.14L340.51,326c.86.5.75,1.38-.25,2l-10.14,5.85A3.75,3.75,0,0,1,326.74,334Z"/><path class="cls-7" d="M341.77,342.63l-10.63-6.13c-.86-.5-.76-1.37.24-1.95l10.14-5.86a3.8,3.8,0,0,1,3.39-.14l10.62,6.14c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.75,3.75,0,0,1,341.77,342.63Z"/><path class="cls-7" d="M356.79,351.31l-10.62-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.5.75,1.38-.25,1.95l-10.14,5.86A3.75,3.75,0,0,1,356.79,351.31Z"/><path class="cls-7" d="M176.49,247.21l-22-12.68c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l22,12.69c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.77,3.77,0,0,1,176.49,247.21Z"/><path class="cls-7" d="M169.48,260l-10.62-6.13c-.87-.51-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.5.75,1.38-.25,2l-10.14,5.85A3.75,3.75,0,0,1,169.48,260Z"/><path class="cls-7" d="M184.5,268.67l-10.62-6.13c-.87-.5-.76-1.38.24-2l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.87.5.76,1.37-.24,1.95l-10.14,5.85A3.77,3.77,0,0,1,184.5,268.67Z"/><path class="cls-7" d="M199.53,277.35l-10.63-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.77,3.77,0,0,1,3.39-.15l10.62,6.14c.87.5.76,1.37-.24,2l-10.14,5.86A3.78,3.78,0,0,1,199.53,277.35Z"/><path class="cls-7" d="M214.55,286l-10.63-6.14c-.86-.5-.75-1.37.25-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.62,6.13c.87.5.76,1.38-.24,2l-10.14,5.85A3.75,3.75,0,0,1,214.55,286Z"/><path class="cls-7" d="M229.57,294.69,219,288.56c-.87-.5-.76-1.38.24-1.95l10.14-5.86a3.75,3.75,0,0,1,3.38-.14l10.63,6.14c.86.5.75,1.37-.25,1.95L233,294.55A3.75,3.75,0,0,1,229.57,294.69Z"/><path class="cls-7" d="M244.59,303.37,234,297.23c-.87-.5-.76-1.37.24-2l10.14-5.86a3.78,3.78,0,0,1,3.38-.14l10.63,6.14c.86.5.76,1.37-.25,1.95L248,303.23A3.8,3.8,0,0,1,244.59,303.37Z"/><path class="cls-7" d="M259.62,312,249,305.9c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.87.5.76,1.38-.24,2L263,311.9A3.75,3.75,0,0,1,259.62,312Z"/><path class="cls-7" d="M274.64,320.71,264,314.58c-.86-.5-.76-1.38.25-2l10.13-5.85a3.77,3.77,0,0,1,3.39-.14l10.62,6.13c.87.51.76,1.38-.24,2L278,320.57A3.75,3.75,0,0,1,274.64,320.71Z"/><path class="cls-7" d="M289.66,329.38,279,323.25c-.87-.5-.76-1.37.24-1.95l10.14-5.86a3.78,3.78,0,0,1,3.38-.14l10.62,6.14c.87.5.76,1.37-.24,1.95L293,329.24A3.72,3.72,0,0,1,289.66,329.38Z"/><path class="cls-7" d="M304.68,338.06l-10.62-6.14c-.87-.5-.76-1.37.24-1.95l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.86.5.75,1.38-.25,1.95l-10.14,5.86A3.75,3.75,0,0,1,304.68,338.06Z"/><path class="cls-7" d="M319.7,346.73l-10.62-6.13c-.87-.5-.76-1.38.24-2l10.14-5.85a3.75,3.75,0,0,1,3.38-.14l10.63,6.13c.87.5.76,1.38-.24,2l-10.14,5.85A3.77,3.77,0,0,1,319.7,346.73Z"/><path class="cls-7" d="M353.32,366.14,324.1,349.27c-.87-.5-.76-1.38.24-1.95l10.14-5.86a3.8,3.8,0,0,1,3.39-.14l29.22,16.87c.86.5.75,1.38-.25,2L356.7,366A3.75,3.75,0,0,1,353.32,366.14Z"/><path class="cls-7" d="M154.46,251.33,140,243c-.87-.5-.76-1.37.24-2l10.14-5.85a3.77,3.77,0,0,1,3.39-.15l14.48,8.37c.87.5.76,1.37-.24,2l-10.14,5.86A3.78,3.78,0,0,1,154.46,251.33Z"/><path class="cls-7" d="M412.15,332.17,198.8,209c-.87-.5-.76-1.38.24-2l5.07-2.92a3.75,3.75,0,0,1,3.38-.14L420.84,327.16c.87.5.76,1.37-.24,1.95L415.53,332A3.75,3.75,0,0,1,412.15,332.17Z"/><path class="cls-1" d="M280,346.18a3.18,3.18,0,0,1-1.47,1.53l-58.71,33.9a7.22,7.22,0,0,1-6.51.26L113,324a2.21,2.21,0,0,1-1-1.06c-.37-.89.14-1.93,1.47-2.7l58.71-33.9a7.25,7.25,0,0,1,6.51-.27L279,344A1.77,1.77,0,0,1,280,346.18Z"/><path class="cls-8" d="M280,346.18a3.18,3.18,0,0,1-1.47,1.53l-58.71,33.9a7.22,7.22,0,0,1-6.51.26L113,324a2.21,2.21,0,0,1-1-1.06,3.27,3.27,0,0,1,1.47-1.53l58.71-33.89a7.25,7.25,0,0,1,6.51-.27L279,345.13A2.22,2.22,0,0,1,280,346.18Z"/><path class="cls-7" d="M428.39,322.83,215,199.65a3.75,3.75,0,0,1-1.57-3v-2.5c0-1.16.7-1.69,1.57-1.19L428.39,316.14a3.75,3.75,0,0,1,1.57,3v2.51C430,322.8,429.26,323.33,428.39,322.83Z"/></g><g id="Mobile"><path class="cls-6" d="M383.74,471.47l-39.37-22.73c-3.33-1.93-2.91-5.29.94-7.51l95.08-54.9c3.85-2.22,9.68-2.46,13-.54l39.36,22.73c3.34,1.92,2.92,5.29-.93,7.51l-95.09,54.9C392.89,473.15,387.07,473.39,383.74,471.47Z"/><path class="cls-1" d="M388.72,468.47l-39.36-22.72c-3.33-1.93-2.92-5.29.93-7.51l95.09-54.9c3.85-2.22,9.67-2.46,13-.54l39.36,22.73c3.33,1.92,2.92,5.28-.93,7.51l-95.09,54.89C397.88,470.16,392.06,470.4,388.72,468.47Z"/><polygon class="cls-1" points="347.11 442.44 347.11 438.81 351.36 440.42 347.11 442.44"/><polygon class="cls-1" points="500 408.67 500 405.18 496.62 407.36 500 408.67"/><path class="cls-9" d="M388.72,465.41l-39.36-22.73c-3.33-1.92-2.92-5.29.93-7.51l95.09-54.9c3.85-2.22,9.67-2.46,13-.54l39.36,22.73c3.33,1.92,2.92,5.29-.93,7.51l-95.09,54.9C397.88,467.09,392.06,467.33,388.72,465.41Z"/><ellipse class="cls-10" cx="353.75" cy="446.7" rx="0.42" ry="0.73" transform="translate(-175.96 236.73) rotate(-30)"/><ellipse class="cls-10" cx="355.64" cy="447.8" rx="0.42" ry="0.73" transform="translate(-176.26 237.83) rotate(-30)"/><ellipse class="cls-10" cx="357.54" cy="448.89" rx="0.42" ry="0.73" transform="translate(-176.55 238.92) rotate(-30)"/><ellipse class="cls-10" cx="359.43" cy="449.98" rx="0.42" ry="0.73" transform="translate(-176.84 240.02) rotate(-30)"/><ellipse class="cls-10" cx="375.7" cy="459.38" rx="0.42" ry="0.73" transform="matrix(0.87, -0.5, 0.5, 0.87, -179.36, 249.41)"/><ellipse class="cls-10" cx="377.6" cy="460.47" rx="0.42" ry="0.73" transform="translate(-179.65 250.5) rotate(-30)"/><ellipse class="cls-10" cx="379.49" cy="461.56" rx="0.42" ry="0.73" transform="translate(-179.95 251.6) rotate(-30)"/><ellipse class="cls-10" cx="381.38" cy="462.66" rx="0.42" ry="0.73" transform="translate(-180.24 252.69) rotate(-30)"/><path class="cls-10" d="M370.17,457,365,454a1.45,1.45,0,0,1-.59-1.14h0c0-.44.27-.64.59-.45l5.21,3a1.43,1.43,0,0,1,.6,1.14h0C370.77,457,370.5,457.17,370.17,457Z"/><path class="cls-10" d="M488.09,417.29l-4.84,2.8c-.31.18-.56,0-.56-.42h0a1.33,1.33,0,0,1,.56-1.06l4.84-2.8c.3-.17.55,0,.55.42h0A1.33,1.33,0,0,1,488.09,417.29Z"/><path class="cls-10" d="M480.67,421.57l-4.84,2.8c-.31.18-.55,0-.55-.42h0a1.32,1.32,0,0,1,.55-1.06l4.84-2.8c.31-.17.56,0,.56.42h0A1.31,1.31,0,0,1,480.67,421.57Z"/><path class="cls-11" d="M388.72,464.85l-39.36-22.73c-3.33-1.92-2.92-5.28.93-7.51l95.09-54.89c3.85-2.23,9.67-2.47,13-.54l39.36,22.72c3.33,1.93,2.92,5.29-.93,7.51l-95.09,54.9C397.88,466.53,392.06,466.77,388.72,464.85Z"/><path class="cls-7" d="M493.52,402.81l-15.36-8.87,0,0a7.27,7.27,0,0,1-6.58,0c-1.81-1-1.81-2.75,0-3.8l0,0-15.37-8.87a9.32,9.32,0,0,0-8.45,0l-92.6,53.46c-2.34,1.35-2.34,3.54,0,4.88l37.31,21.54a9.32,9.32,0,0,0,8.45,0l92.6-53.46C495.86,406.34,495.86,404.16,493.52,402.81Z"/><path class="cls-12" d="M493.52,402.81l-15.36-8.87,0,0a7.27,7.27,0,0,1-6.58,0c-1.81-1-1.81-2.75,0-3.8l0,0-15.37-8.87a9.32,9.32,0,0,0-8.45,0l-92.6,53.46c-2.34,1.35-2.34,3.54,0,4.88l37.31,21.54a9.32,9.32,0,0,0,8.45,0l92.6-53.46C495.86,406.34,495.86,404.16,493.52,402.81Z"/><ellipse class="cls-7" cx="473.82" cy="392.64" rx="1.76" ry="1.02"/><path class="cls-13" d="M473.3,392.94c-.29-.16-.29-.43,0-.6a1.14,1.14,0,0,1,1.05,0,.32.32,0,0,1,0,.6A1.14,1.14,0,0,1,473.3,392.94Z"/></g><g id="Watch"><path class="cls-1" d="M56.05,222.93l-10.72-6.19c-3.33-1.92-2.91-5.29.94-7.51l12.62-7.29c3.85-2.22,9.67-2.46,13-.54l10.72,6.19c3.34,1.93,2.92,5.29-.93,7.51l-12.62,7.29C65.21,224.61,59.38,224.85,56.05,222.93Z"/><path class="cls-1" d="M84.86,210.56c0-.09,0-3.52,0-3.52L81.22,209Z"/><polygon class="cls-1" points="116.73 186.09 116.73 184.57 114.31 185.33 116.73 186.09"/><path class="cls-6" d="M58.29,223.81a12.41,12.41,0,0,1-1.74-.62l-7.36-6,1.92-1.85-7-.9a3.32,3.32,0,0,1-1.36,2.67L3.31,238.38c-3.73,2.15-4.67,6.15-.93,8.31h0c3.32,2.32,9.05,2.13,12.79,0L56.22,225l.08,0c1.36-.78,4.54-.72,4.54-.72A16.27,16.27,0,0,1,58.29,223.81Zm-17.85,2.46a.7.7,0,0,1,0,1.32,2.5,2.5,0,0,1-2.29,0,.69.69,0,0,1,0-1.32A2.5,2.5,0,0,1,40.44,226.27Zm-3.64,2.1a.7.7,0,0,1,0,1.32,2.5,2.5,0,0,1-2.29,0,.69.69,0,0,1,0-1.32A2.5,2.5,0,0,1,36.8,228.37Zm-3.64,2.1a.7.7,0,0,1,0,1.32,2.52,2.52,0,0,1-2.3,0,.7.7,0,0,1,0-1.32A2.58,2.58,0,0,1,33.16,230.47Zm-3.64,2.1a.7.7,0,0,1,0,1.33,2.58,2.58,0,0,1-2.3,0,.7.7,0,0,1,0-1.33A2.58,2.58,0,0,1,29.52,232.57Zm-3.64,2.1a.7.7,0,0,1,0,1.33,2.58,2.58,0,0,1-2.3,0,.7.7,0,0,1,0-1.33A2.58,2.58,0,0,1,25.88,234.67Zm-9.46,5.59c-.69-.32-.79-.91-.22-1.31a2.5,2.5,0,0,1,2.28-.13c.69.33.79.92.22,1.32A2.53,2.53,0,0,1,16.42,240.26Zm3.64-2.1c-.69-.33-.79-.92-.22-1.32a2.5,2.5,0,0,1,2.28-.12c.69.32.79.91.22,1.31A2.5,2.5,0,0,1,20.06,238.16Z"/><path class="cls-1" d="M59.46,218.47l-3.21,1.1-7-4,1.92-1.85-7-.9a3.31,3.31,0,0,1-1.36,2.67L4.16,237.81c-3.73,2.16-3.73,5.65,0,7.81h0a15,15,0,0,0,13.52,0l38.62-22.3.09,0c1.36-.78,4.62-.78,4.62-.78Zm-18.93,6.16a.7.7,0,0,1,0,1.32,2.52,2.52,0,0,1-2.3,0,.7.7,0,0,1,0-1.32A2.52,2.52,0,0,1,40.53,224.63Zm-3.64,2.1a.7.7,0,0,1,0,1.32,2.52,2.52,0,0,1-2.3,0,.7.7,0,0,1,0-1.32A2.52,2.52,0,0,1,36.89,226.73Zm-3.65,2.1a.7.7,0,0,1,0,1.33,2.58,2.58,0,0,1-2.3,0,.7.7,0,0,1,0-1.33A2.56,2.56,0,0,1,33.24,228.83Zm-3.64,2.1a.7.7,0,0,1,0,1.33,2.56,2.56,0,0,1-2.29,0,.7.7,0,0,1,0-1.33A2.56,2.56,0,0,1,29.6,230.93ZM26,233c.64.36.64,1,0,1.32a2.5,2.5,0,0,1-2.29,0,.7.7,0,0,1,0-1.32A2.5,2.5,0,0,1,26,233Zm-9.45,5.58c-.7-.32-.8-.91-.23-1.31a2.52,2.52,0,0,1,2.29-.13c.69.33.79.92.22,1.32A2.5,2.5,0,0,1,16.51,238.62Zm3.64-2.1c-.7-.33-.8-.92-.23-1.32a2.55,2.55,0,0,1,2.29-.12c.69.32.79.91.22,1.31A2.5,2.5,0,0,1,20.15,236.52Z"/><path class="cls-3" d="M59.46,217.07l-3.21,1.11-7-4,1.92-1.86-7.84-.9s.86,1.89-.5,2.68L4.16,236.42c-3.73,2.15-3.73,5.65,0,7.8h0a14.91,14.91,0,0,0,13.52,0L56.3,221.93l.09,0c1.36-.79,4.62-1,4.62-1Zm-18.93,6.16a.7.7,0,0,1,0,1.33,2.58,2.58,0,0,1-2.3,0,.7.7,0,0,1,0-1.33A2.58,2.58,0,0,1,40.53,223.23Zm-3.64,2.11a.7.7,0,0,1,0,1.32,2.52,2.52,0,0,1-2.3,0,.7.7,0,0,1,0-1.32A2.52,2.52,0,0,1,36.89,225.34Zm-3.65,2.1a.7.7,0,0,1,0,1.32,2.52,2.52,0,0,1-2.3,0,.7.7,0,0,1,0-1.32A2.5,2.5,0,0,1,33.24,227.44Zm-3.64,2.1a.69.69,0,0,1,0,1.32,2.5,2.5,0,0,1-2.29,0,.7.7,0,0,1,0-1.32A2.5,2.5,0,0,1,29.6,229.54ZM26,231.64A.7.7,0,0,1,26,233a2.56,2.56,0,0,1-2.29,0,.7.7,0,0,1,0-1.33A2.56,2.56,0,0,1,26,231.64Zm-9.45,5.59c-.7-.33-.8-.92-.23-1.32a2.55,2.55,0,0,1,2.29-.13c.69.33.79.92.22,1.32A2.5,2.5,0,0,1,16.51,237.23Zm3.64-2.1c-.7-.33-.8-.92-.23-1.32a2.52,2.52,0,0,1,2.29-.13c.69.33.79.92.22,1.32A2.5,2.5,0,0,1,20.15,235.13Z"/><path class="cls-6" d="M87.3,207.14a.18.18,0,0,0,.07,0l27.36-17.56a37.9,37.9,0,0,0-.8-5.29h0a15,15,0,0,0-13.53,0L73.78,199.62c-1.36.78-4.63.78-4.63.78l1.56,4,3.21-1.11,7,4,3.94.62v1.71A9.07,9.07,0,0,1,87.3,207.14Zm16.09-13-6.61-3.82a.76.76,0,0,1,0-1.44,2.82,2.82,0,0,1,2.5,0l6.6,3.81a.77.77,0,0,1,0,1.45A2.8,2.8,0,0,1,103.39,194.15Z"/><path class="cls-1" d="M87.31,205.43a.18.18,0,0,0,.07-.05l26.55-15.32c3.73-2.16,3.73-5.65,0-7.81h0a14.94,14.94,0,0,0-13.53,0L73.78,197.62c-1.36.78-4.63.79-4.63.79l1.56,4,3.21-1.11,7,4L79,207.2l5.86.76A9.07,9.07,0,0,1,87.31,205.43Zm16.08-13.28-6.61-3.81a.76.76,0,0,1,0-1.44,2.75,2.75,0,0,1,2.5,0l6.6,3.81a.76.76,0,0,1,0,1.44A2.73,2.73,0,0,1,103.39,192.15Z"/><path class="cls-3" d="M87.31,204l.07,0,26.55-15.33c3.73-2.15,3.73-5.65,0-7.8h0a14.94,14.94,0,0,0-13.53,0L73.78,196.23c-1.36.78-4.63.78-4.63.78l1.56,4,3.21-1.11,7,4L79,205.81l5.68.59A11.9,11.9,0,0,1,87.31,204Zm16.08-13.28L96.78,187a.76.76,0,0,1,0-1.44,2.75,2.75,0,0,1,2.5,0l6.6,3.81a.76.76,0,0,1,0,1.44A2.8,2.8,0,0,1,103.39,190.76Z"/><path class="cls-11" d="M56.05,219.58l-10.72-6.19c-3.33-1.92-2.91-5.28.94-7.51l12.62-7.28c3.85-2.23,9.67-2.47,13-.54l10.72,6.19c3.34,1.92,2.92,5.28-.93,7.51L69.06,219C65.21,221.27,59.38,221.51,56.05,219.58Z"/><path class="cls-7" d="M47.08,206.53,60,199.07c3.24-1.87,8.13-2.07,10.93-.45l10.72,6.18c2.8,1.62,2.45,4.45-.79,6.31l-12.92,7.46c-3.23,1.87-8.12,2.07-10.92.46L46.3,212.84C43.5,211.22,43.85,208.39,47.08,206.53Z"/><path class="cls-14" d="M47.08,206.53,60,199.07c3.24-1.87,8.13-2.07,10.93-.45l10.72,6.18c2.8,1.62,2.45,4.45-.79,6.31l-12.92,7.46c-3.23,1.87-8.12,2.07-10.92.46L46.3,212.84C43.5,211.22,43.85,208.39,47.08,206.53Z"/><ellipse class="cls-15" cx="80.67" cy="213.94" rx="2.58" ry="1.49" transform="translate(-144.94 176.83) rotate(-60)"/><polygon class="cls-15" points="81.86 211.66 82.8 212.19 81.67 212.91 81.86 211.66"/><polygon class="cls-15" points="80.36 216.73 79.33 216.15 80.57 215.48 80.36 216.73"/><ellipse class="cls-10" cx="81.57" cy="214.46" rx="2.58" ry="1.49" transform="translate(-144.94 177.86) rotate(-60)"/></g><g id="Glasses"><path class="cls-6" d="M144.22,429.68l-14-13.07a32,32,0,0,0-6.31-6.84,32.9,32.9,0,0,0-3.39-2.46l-18.17-12.09-19.79-8.73A33.69,33.69,0,0,0,78.8,385a34.79,34.79,0,0,0-9-1.7L51,377.13c-1.06-.06-.49,1.94.12,2.74l1.8.74c2.31.88.38.56,2.73,2.22l10.86,2.77c6.88-.63,13.71,2,19.65,5.2l14.33,7.2,13.85,8.31a32.59,32.59,0,0,1,13.79,14.85l7.3,5.88c2.26,2.13,1,1.19,4.32,1.72l1.87,1.59C142.81,430.54,144.85,430.61,144.22,429.68Z"/><path class="cls-16" d="M104.83,402a13.52,13.52,0,0,1,4.4-4.23c3.66-2.57,8.54-2,8.54-2a27,27,0,0,1,10.1,3.11l.32.17,4.82,2.7q1.94,1.08,3.72,2.33c.8.55,1.57,1.12,2.31,1.72,3.46,2.76,2.46,8.22-.61,12.53a39.77,39.77,0,0,1-5.86,6.66,14.9,14.9,0,0,1-14.17,3.1,34.71,34.71,0,0,1-6.5-2.85,32.54,32.54,0,0,1-5.4-3.84c-4.46-3.94-5.22-9.35-3.32-15.44A17.4,17.4,0,0,1,104.83,402Zm-41.6-25.15c2.74-4.16,7.36-7.33,11.3-6,.86.28,1.71.59,2.54.93,1.27.51,2.51,1.09,3.72,1.72l4.58,2.4.29.16a22.08,22.08,0,0,1,7.32,6.3s2.75,3.5,1.85,7.53a12.1,12.1,0,0,1-2.22,5.38,19.14,19.14,0,0,1-3.17,3.09c-5.1,4.22-10.66,6-16.28,4.19A31,31,0,0,1,67.34,400a29.13,29.13,0,0,1-5.24-3.78,11,11,0,0,1-2.68-12.07A36.9,36.9,0,0,1,63.23,376.84Z"/><path class="cls-7" d="M58,382.92l10.82-1a35.08,35.08,0,0,1,19.71,3.91L148,415.75l3.47-4.84L84.89,381.53a34.78,34.78,0,0,0-12.75-3.2L51,377.13a1.23,1.23,0,0,0-1.16,1.9l.56.73A8.51,8.51,0,0,0,58,382.92Z"/><path class="cls-7" d="M134.91,426.09l-4.47-9.89a32.56,32.56,0,0,0-13.78-14.85L62.32,368.76l3.05-4.64,57.47,38.24a33.13,33.13,0,0,1,9.71,9.29l12.33,18a1.31,1.31,0,0,1-1.48,1.91l-1.1-.17A9.6,9.6,0,0,1,134.91,426.09Z"/><path class="cls-17" d="M118.76,393.81a27,27,0,0,1,10.11,3.1l.31.17,4.83,2.71a41.52,41.52,0,0,1,3.72,2.33c.79.55,1.56,1.12,2.31,1.72,3.46,2.76,2.45,8.22-.62,12.53a40.19,40.19,0,0,1-5.85,6.66,14.88,14.88,0,0,1-14.17,3.09,34.67,34.67,0,0,1-6.5-2.84,32.71,32.71,0,0,1-5.4-3.84c-4.46-3.94-5.22-9.36-3.32-15.45a17.52,17.52,0,0,1,1.65-4,13.61,13.61,0,0,1,4.39-4.24C113.89,393.19,118.76,393.81,118.76,393.81Z"/><path class="cls-7" d="M63.74,362.85,61.11,367a1.38,1.38,0,0,0,.23,1.79A2.72,2.72,0,0,1,62,372l-4.34,9.08a13.15,13.15,0,0,0,2.9,15.6h0a33.7,33.7,0,0,0,12.31,7.09h0a20,20,0,0,0,20.18-5l4.06-4.09a5.25,5.25,0,0,0,1.53-3.3,3.5,3.5,0,0,1,5.06-2.66l1,.52,1,.58a3,3,0,0,1-.34,5.27,5.64,5.64,0,0,0-2.6,2.73L100.5,403a16.34,16.34,0,0,0,4.27,19h0A37.33,37.33,0,0,0,118,429.5h0A17.7,17.7,0,0,0,136.1,425l7.58-8a3.88,3.88,0,0,1,3.92-1,1.92,1.92,0,0,0,2.08-.63l3.09-4.22a2.14,2.14,0,0,0-.05-2.71s-5-5.62-16.47-11.83L131.41,394a31.25,31.25,0,0,0-12-3.75l-3.72-.38a3.32,3.32,0,0,1-2.44-1.4,3.9,3.9,0,0,0-1.42-1.28l-4.13-2.24-4.11-2.23a4.62,4.62,0,0,0-1.91-.53,3.27,3.27,0,0,1-2.47-1.25l-2-2.71a25.83,25.83,0,0,0-8.8-7.44l-4.59-2.39c-11.08-6-17.57-6.71-17.57-6.71A2.59,2.59,0,0,0,63.74,362.85ZM105.83,400a13.61,13.61,0,0,1,4.39-4.24c3.67-2.57,8.54-1.95,8.54-1.95a27,27,0,0,1,10.11,3.1l.31.17,4.83,2.71a41.52,41.52,0,0,1,3.72,2.33c.79.55,1.56,1.12,2.31,1.72,3.46,2.76,2.45,8.22-.62,12.53a40.19,40.19,0,0,1-5.85,6.66,14.88,14.88,0,0,1-14.17,3.09,34.67,34.67,0,0,1-6.5-2.84,32.71,32.71,0,0,1-5.4-3.84c-4.46-3.94-5.22-9.36-3.32-15.45A17.52,17.52,0,0,1,105.83,400Zm-41.6-25.16c2.74-4.16,7.35-7.33,11.3-6,.86.29,1.7.6,2.54.94a39.13,39.13,0,0,1,3.72,1.72l4.57,2.39.3.16A22.32,22.32,0,0,1,94,380.33s2.74,3.5,1.84,7.53a11.89,11.89,0,0,1-2.21,5.37,19.26,19.26,0,0,1-3.18,3.1c-5.1,4.22-10.65,6-16.27,4.18A30.92,30.92,0,0,1,68.34,398a29.18,29.18,0,0,1-5.24-3.79,11,11,0,0,1-2.68-12.06A37.21,37.21,0,0,1,64.23,374.84Z"/><path class="cls-18" d="M90,397c-5.09,4.21-10.64,6-16.26,4.17a30.29,30.29,0,0,1-5.82-2.55,29.46,29.46,0,0,1-5.23-3.79A11,11,0,0,1,60,382.73a37.32,37.32,0,0,1,3.8-7.26l.08-.11a37.23,37.23,0,0,0-3.47,6.75,11,11,0,0,0,2.68,12.06A29.18,29.18,0,0,0,68.34,398a30.92,30.92,0,0,0,5.82,2.55c5.62,1.81,11.17,0,16.27-4.18a19.48,19.48,0,0,0,3.14-3.05c-.12.19-.24.38-.39.59A19.18,19.18,0,0,1,90,397Z"/><path class="cls-18" d="M133.11,423.67A14.88,14.88,0,0,1,119,426.76a34.62,34.62,0,0,1-6.49-2.85,32.13,32.13,0,0,1-5.4-3.84c-4.46-3.94-5.22-9.36-3.32-15.44a17.16,17.16,0,0,1,1.65-4c.14-.22.28-.4.41-.59a17.21,17.21,0,0,0-1.62,3.94c-1.9,6.09-1.14,11.51,3.32,15.45a32.71,32.71,0,0,0,5.4,3.84,34.67,34.67,0,0,0,6.5,2.84A14.88,14.88,0,0,0,133.57,423,40.59,40.59,0,0,0,139,416.9a.83.83,0,0,1-.08.12A39.61,39.61,0,0,1,133.11,423.67Z"/><path class="cls-19" d="M94,380.33A22.32,22.32,0,0,0,86.66,374l-.3-.16-4.57-2.39a39.13,39.13,0,0,0-3.72-1.72c-.84-.34-1.68-.65-2.54-.94-4-1.3-8.56,1.87-11.3,6a37.21,37.21,0,0,0-3.81,7.27,11,11,0,0,0,2.68,12.06A29.18,29.18,0,0,0,68.34,398a30.92,30.92,0,0,0,5.82,2.55c5.62,1.81,11.17,0,16.27-4.18a19.26,19.26,0,0,0,3.18-3.1,11.89,11.89,0,0,0,2.21-5.37C96.72,383.83,94,380.33,94,380.33Z"/></g></g></g></svg>
\ No newline at end of file
<svg width="283" height="64" viewBox="0 0 283 64" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/>
</svg>
\ No newline at end of file
import { IFigurePackageObj, IPaperPackageObj, TCurrency, TPaperSize } from '@ts/common';
import React, { useEffect, useState } from 'react';
type TProps = {
children: JSX.Element;
};
interface IContext {
totalPrice: number;
figureCount: number;
currency: TCurrency;
paperSize: TPaperSize;
setTotalPrice: React.Dispatch<React.SetStateAction<number>>;
setFigureCount: React.Dispatch<React.SetStateAction<number>>;
setCurrency: React.Dispatch<React.SetStateAction<TCurrency>>;
setPaperSize: React.Dispatch<React.SetStateAction<TPaperSize>>;
figurePackageObj: IFigurePackageObj;
paperPackageObj: IPaperPackageObj;
}
const initContext: IContext = {
totalPrice: 79,
figureCount: 1,
currency: 'euro',
paperSize: 'A4',
setTotalPrice: () => null,
setFigureCount: () => null,
setCurrency: () => null,
setPaperSize: () => null,
figurePackageObj: {
figure1: {
prev: 109,
now: 79,
imgUrl: '/images/sample1.jpeg',
},
figure2: {
prev: 139,
now: 109,
imgUrl: '/images/sample2.jpeg',
},
figure3: {
prev: 149,
now: 139,
imgUrl: '/images/sample3.jpeg',
},
figure4: {
prev: 199,
now: 169,
imgUrl: '/images/sample4.jpeg',
},
figure5: {
prev: 229,
now: 199,
imgUrl: '/images/sample5.jpeg',
},
figure6: {
prev: 259,
now: 229,
imgUrl: '/images/sample6.jpeg',
},
},
paperPackageObj: {
paperA4: {
prev: 259,
now: 229,
imgUrl: '/images/sample6.jpeg',
},
},
};
export const CartContext = React.createContext<IContext>(initContext);
export const CartContextProvider = ({ children }: TProps): React.ReactElement => {
const [totalPrice, setTotalPrice] = useState(initContext.totalPrice);
const [currency, setCurrency] = useState(initContext.currency);
const [figureCount, setFigureCount] = useState(initContext.figureCount);
const [paperSize, setPaperSize] = useState(initContext.paperSize);
const [figurePackageObj] = useState(initContext.figurePackageObj);
const [paperPackageObj] = useState(initContext.paperPackageObj);
useEffect(() => {
const figurePrice = figurePackageObj[`figure${figureCount}`]?.now;
const paperPrice = 30;
setTotalPrice(figurePrice + paperPrice);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [figureCount]);
const contextValue = {
totalPrice,
figureCount,
currency,
paperSize,
setTotalPrice,
setFigureCount,
setCurrency,
setPaperSize,
figurePackageObj,
paperPackageObj,
};
return <CartContext.Provider value={contextValue}>{children}</CartContext.Provider>;
};
import { auth, firestore, googleAuthProvider } from '@lib/firebase';
import { useRouter } from 'next/router';
import React, { useCallback, useEffect, useState } from 'react';
type TProps = {
children: JSX.Element;
};
export type TBasicData = null | string;
export type TUser = {
displayName: TBasicData;
email: TBasicData;
photoURL: TBasicData;
type: TBasicData;
uid: TBasicData;
};
const initialUserData = {
displayName: null,
email: null,
photoURL: null,
type: null,
uid: null,
};
interface IContext {
isLogged: boolean;
loading: boolean;
userData: TUser;
signOut: () => void;
signIn: () => void;
adminRoute: () => void;
}
const initContext: IContext = {
isLogged: false,
loading: true,
userData: initialUserData,
signOut: () => null,
signIn: () => null,
adminRoute: () => null,
};
export const UserContext = React.createContext<IContext>(initContext);
export const UserContextProvider = ({ children }: TProps): React.ReactElement => {
const [userData, setUserData] = useState(initContext.userData);
const [loading, setLoading] = useState(initContext.loading);
const [isLogged, setIsLogged] = useState(initContext.isLogged);
const router = useRouter();
const signInWithGoogle = async () => {
await auth.signInWithPopup(googleAuthProvider);
};
const signOut = () => {
auth.signOut();
setIsLogged(false);
router.push('/login');
};
const signIn = () => {
setLoading(true);
signInWithGoogle();
};
const adminRoute = useCallback(async () => {
if (isLogged) {
if (userData.type === 'admin') {
router.push(
{
pathname: '/admin/[uid]/panel',
query: {
order: userData.uid,
},
},
`/admin/${userData.uid}/panel`
);
} else if (userData.type === 'editor') {
router.push('/editor');
} else if (userData.type === 'artist') {
router.push('/artist');
} else {
router.push('/');
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [isLogged, userData]);
useEffect(() => {
let referenceSubscription: () => void;
const authStateSubscription = auth.onAuthStateChanged(user => {
if (!user) {
setLoading(false);
return;
}
try {
if (user) {
const ref = firestore.collection('users').doc(user.uid);
referenceSubscription = ref.onSnapshot(doc => {
if (!doc) {
setLoading(false);
return;
}
setUserData({
displayName: doc.data()?.userName || user.displayName,
email: user.email,
photoURL: doc.data()?.photoURL || user.photoURL,
type: doc.data()?.type,
uid: user.uid,
});
setIsLogged(true);
setLoading(false);
});
} else {
setUserData(initialUserData);
setLoading(false);
}
} catch (error) {
// eslint-disable-next-line no-console
console.log('subscription_error: =-->', error);
setLoading(false);
}
});
// turn off realtime subscription
return () => {
referenceSubscription();
authStateSubscription();
};
}, []);
const contextValue = {
loading,
isLogged,
userData,
signOut,
signIn,
adminRoute,
};
return <UserContext.Provider value={contextValue}>{children}</UserContext.Provider>;
};
import { useEffect, useState } from 'react';
const useDebounce = (value: string | number | boolean, delay = 250): string | number | boolean => {
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
return () => {
clearTimeout(handler);
};
}, [value, delay]);
return debouncedValue;
};
export default useDebounce;
/* eslint-disable import/no-duplicates */
// import firebase from 'firebase/app';
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import 'firebase/storage';
const firebaseConfig = {
apiKey: process.env.API_KEY, // for auth
authDomain: process.env.AUTH_DOMAIN, // for auth
projectId: process.env.PROJECT_ID, // for auth
storageBucket: process.env.STORAGE_BUCKET,
messagingSenderId: process.env.MESSAGING_SENDER_ID,
appId: process.env.APP_ID,
measurementId: process.env.MEASUREMENT_ID,
};
// if a Firebase instance doesn't exist, create one
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}
// Auth exports
export const auth = firebase.auth();
export const googleAuthProvider = new firebase.auth.GoogleAuthProvider();
// Firestore exports
export const firestore = firebase.firestore();
export const { serverTimestamp } = firebase.firestore.FieldValue;
export const { fromMillis } = firebase.firestore.Timestamp;
export const { increment } = firebase.firestore.FieldValue;
// Storage exports
export const storage = firebase.storage();
export const { STATE_CHANGED } = firebase.storage.TaskEvent;
// --- Breakpoints
const maxMobile = 576; // (for phones)
const minTablet = 576; // (for tablet)
const minTabletLC = 769; // (landscape of tablet)
const minDesktopSM = 992; // (for small Laptop)
const minDesktopLG = 1201; // (for large laptop)
const min4K = 1441; // (for 4k)
export const breakpoints = {
maxMobile: `only screen and (max-width: ${maxMobile}px)`,
minTablet: `only screen and (min-width: ${minTablet}px)`,
minTabletLC: `only screen and (min-width: ${minTabletLC}px)`,
minDesktopSM: `only screen and (min-width: ${minDesktopSM}px)`,
minDesktopLG: `only screen and (min-width: ${minDesktopLG}px)`,
min4K: `only screen and (min-width: ${min4K}px)`,
};
export const clearfix = `
&:after,
&:before{
content: "";
display: table;
}
&:after {
clear: both;
}
`;
export const noSelect = `
-webkit-touch-callout: none;
user-select: none;
`;
export const noCallout = `
-webkit-touch-callout: none;
`;
export const noAction = `
touch-action: none;
`;
export const imgNoClick = `
position: relative;
`;
export const imgNoClickCover = `
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
height: 100%;
width: 100%;
`;
export const focusRingIssue = `
outline: -webkit-focus-ring-color auto 5px;
`;
export const tapHighlightIssue = `
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
`;
export const breakWords = `
word-wrap: break-word;
`;
export const wrapWords = `
overflow-wrap: break-word;
word-wrap: break-word;
hyphens: auto;
`;
import { TMenuItem } from '@ts/common';
type TProps = { type: TMenuItem };
export const MenuIcons = ({ type }: TProps): JSX.Element | null => {
if (type === 'artists') {
return (
<svg width='30' height='30' viewBox='0 0 30 30' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path d='M15 0C6.71664 0 0 6.71664 0 15C0 23.2834 6.71664 30 15 30C16.3834 30 17.5 28.8834 17.5 27.5C17.5 26.85 17.2584 26.2666 16.85 25.825C16.4584 25.3834 16.225 24.8084 16.225 24.1666C16.225 22.7833 17.3416 21.6666 18.725 21.6666H21.6666C26.2666 21.6666 30 17.9333 30 13.3333C30 5.96664 23.2834 0 15 0ZM5.83336 15C4.45 15 3.33336 13.8834 3.33336 12.5C3.33336 11.1166 4.45 10 5.83336 10C7.21672 10 8.33336 11.1166 8.33336 12.5C8.33336 13.8834 7.21664 15 5.83336 15ZM10.8334 8.33336C9.45 8.33336 8.33336 7.21672 8.33336 5.83336C8.33336 4.45 9.45 3.33336 10.8334 3.33336C12.2167 3.33336 13.3334 4.45 13.3334 5.83336C13.3334 7.21672 12.2166 8.33336 10.8334 8.33336ZM19.1666 8.33336C17.7833 8.33336 16.6666 7.21672 16.6666 5.83336C16.6666 4.45 17.7833 3.33336 19.1666 3.33336C20.55 3.33336 21.6666 4.45 21.6666 5.83336C21.6666 7.21672 20.55 8.33336 19.1666 8.33336ZM24.1666 15C22.7833 15 21.6666 13.8834 21.6666 12.5C21.6666 11.1166 22.7833 10 24.1666 10C25.55 10 26.6666 11.1166 26.6666 12.5C26.6666 13.8834 25.55 15 24.1666 15Z' />
</svg>
);
}
if (type === 'editors') {
return (
<svg width='30' height='30' viewBox='0 0 30 30' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path d='M9.18891 9.41117C9.29309 9.89041 9.45284 10.2006 9.63921 10.394C10.0826 13.4801 12.8527 16.1101 15.0775 16.0001C17.9078 15.8612 19.9139 12.811 20.3642 10.394C20.5506 10.2018 20.73 9.79086 20.8377 9.30815C20.9581 8.75366 21.0877 7.91788 20.7543 7.47569C20.7347 7.45254 20.6073 7.33562 20.5853 7.31594C20.9037 6.16761 21.6029 4.11869 19.8619 2.27697C18.9184 1.27913 17.608 0.777894 16.4238 0.382C12.9279 -0.786004 10.4599 0.85198 9.32087 3.57578C9.23868 3.7691 8.70735 4.99267 9.35097 7.31594C9.28846 7.35761 9.23174 7.41086 9.18428 7.47569C8.84973 7.91673 9.06736 8.85669 9.18891 9.41117Z' />
<path d='M27.2692 26.3837C27.172 24.2595 27.0516 20.8933 25.196 18.1394C25.196 18.1394 24.667 17.4182 23.4122 16.939C23.4122 16.939 20.6872 16.109 19.4324 15.2118L18.8594 15.6043L18.9231 19.3294L15.4827 28.5137C15.4075 28.7151 15.2153 28.8482 15.0011 28.8482C14.787 28.8482 14.5948 28.7151 14.5196 28.5137L11.0804 19.3294C11.0804 19.3294 11.1441 15.6158 11.1429 15.6043C11.151 15.6355 10.5688 15.2118 10.5688 15.2118C9.31624 16.109 6.59013 16.939 6.59013 16.939C5.33531 17.4182 4.80629 18.1394 4.80629 18.1394C2.95184 20.8933 2.82913 24.2595 2.7319 26.3837C2.66476 27.8515 2.97267 28.3991 3.35931 28.5553C8.15866 30.4816 21.8402 30.4816 26.6407 28.5553C27.0296 28.4002 27.3352 27.8515 27.2692 26.3837Z' />
<path d='M15.1239 17.1867L14.9687 17.1901C14.4687 17.1901 13.964 17.0929 13.4685 16.9216L14.8321 19.0087L13.6086 20.1895L14.868 27.8376C14.8784 27.9036 14.9352 27.9511 15.0023 27.9511C15.0683 27.9511 15.125 27.9036 15.1366 27.8376L16.396 20.1895L15.1713 19.0087L16.5153 16.9528C16.0765 17.0813 15.6124 17.167 15.1239 17.1867Z' />
</svg>
);
}
if (type === 'customers') {
return (
<svg width='30' height='30' viewBox='0 0 30 30' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path d='M28.0072 13.7129H27.2132C26.7618 7.36799 21.4564 2.34375 15 2.34375C8.54355 2.34375 3.23824 7.36799 2.78689 13.7129H1.99283C0.893965 13.7129 0 14.6069 0 15.7058V22.1211C0 23.2199 0.893965 24.1139 1.99283 24.1139H1.99857C3.38531 24.1139 4.51354 22.9857 4.51354 21.5989V14.5907C4.51354 8.80693 9.21773 4.10156 15 4.10156C20.7823 4.10156 25.4865 8.80693 25.4865 14.5907V20.0709H25.474C23.9487 20.0709 22.7078 21.312 22.7078 22.8375C22.7078 24.5254 21.3351 25.8984 19.6478 25.8984H18.0946C17.7076 24.4762 16.4048 23.4274 14.8617 23.4274H13.9029C12.737 23.4274 11.7885 24.3759 11.7885 25.5418C11.7885 26.7077 12.737 27.6562 13.9029 27.6562H19.6478C22.3044 27.6562 24.4656 25.4946 24.4656 22.8375C24.4656 22.2813 24.918 21.8288 25.474 21.8288H25.4969C25.6134 23.1082 26.6921 24.1139 28.0014 24.1139H28.0072C29.106 24.1139 30 23.2199 30 22.1211V15.7058C30 14.6069 29.106 13.7129 28.0072 13.7129Z' />
<path d='M14.3709 18.9823C14.3709 18.4969 13.9773 18.1034 13.4919 18.1034H10.0783C9.9704 18.1034 9.88263 18.0155 9.88263 17.9074C9.88263 17.0469 10.5825 16.3467 11.4427 16.3467C13.0573 16.3467 14.3709 15.0329 14.3709 13.4181C14.3709 11.8034 13.0574 10.4896 11.4427 10.4896H9.00372C8.51833 10.4896 8.12482 10.8831 8.12482 11.3685C8.12482 11.8539 8.51833 12.2474 9.00372 12.2474H11.4427C12.088 12.2474 12.613 12.7726 12.613 13.4181C12.613 14.0637 12.088 14.5889 11.4427 14.5889C9.61321 14.5889 8.12482 16.0775 8.12482 17.9074C8.12482 18.9848 9.00115 19.8612 10.0783 19.8612H13.4919C13.9773 19.8612 14.3709 19.4677 14.3709 18.9823Z' />
<path d='M16.5081 10.4896C16.0227 10.4896 15.6292 10.8831 15.6292 11.3685V13.6943C15.6292 14.9955 16.6876 16.0542 17.9888 16.0542H20.1174V18.9823C20.1174 19.4677 20.5109 19.8612 20.9963 19.8612C21.4817 19.8612 21.8752 19.4677 21.8752 18.9823V11.3685C21.8752 10.8831 21.4817 10.4896 20.9963 10.4896C20.5109 10.4896 20.1174 10.8831 20.1174 11.3685V14.2965H17.9888C17.657 14.2965 17.387 14.0263 17.387 13.6944V11.3685C17.387 10.8831 16.9934 10.4896 16.5081 10.4896Z' />
</svg>
);
}
if (type === 'analytics') {
return (
<svg width='30' height='30' viewBox='0 0 30 30' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path d='M29.1751 16.2053H18.7779C18.3235 16.2053 17.9531 16.5757 17.9531 17.03C17.9531 17.2614 18.0514 17.4699 18.2048 17.6202L25.526 24.9415C25.6764 25.1035 25.8936 25.2049 26.131 25.2049C26.4174 25.2049 26.6691 25.0602 26.8167 24.8403C28.6166 22.7509 29.7742 20.0973 29.9826 17.1775C29.9942 17.1283 29.9999 17.0792 29.9999 17.0299C30 16.5757 29.6324 16.2053 29.1751 16.2053Z' />
<path d='M15.638 1.25882C15.1836 1.2616 14.8162 1.62922 14.8162 2.08353V13.6384C14.8162 14.0957 15.1836 14.4661 15.638 14.4661H27.1958C27.6502 14.4661 28.0205 14.0957 28.0205 13.6384C27.6124 6.98861 22.2907 1.66691 15.638 1.25882Z' />
<path d='M21.9899 24.2673L13.4649 15.7423C13.3202 15.5947 13.2334 15.3892 13.2334 15.1664L13.2304 3.12529C13.2304 2.67099 12.863 2.30345 12.4086 2.30345C5.48375 2.72599 0 8.47875 0 15.5079C0 22.8147 5.9237 28.7412 13.2304 28.7412C16.564 28.7412 19.6083 27.5085 21.9349 25.474C22.1144 25.3235 22.2272 25.0979 22.2272 24.8461C22.2272 24.6232 22.1374 24.4177 21.9899 24.2673Z' />
</svg>
);
}
if (type === 'settings') {
return (
<svg width='30' height='30' viewBox='0 0 30 30' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path d='M26.5772 13.9051C26.4888 12.8057 26.2468 11.7362 25.8544 10.7112L28.558 8.5459L24.1647 3.06024L21.4775 5.21209C20.5498 4.58713 19.5465 4.10455 18.4823 3.77186V0.357246H11.4539V3.79412C10.3411 4.15026 9.29678 4.67092 8.33508 5.34856L5.61979 3.2383L1.3067 8.78778L4.07004 10.9349C3.70107 11.9623 3.48141 13.0306 3.41408 14.1258L0 14.9429L1.63529 21.778L4.03723 21.2034C5.22041 20.0202 6.28857 18.952 7.69313 17.5475C5.82627 12.4808 9.57932 7.06465 15.005 7.06465C19.3069 7.06465 22.7947 10.5525 22.7947 14.8544C22.7947 20.1677 17.581 23.9194 12.5538 22.25C12.1523 22.6515 7.99207 26.8118 7.34578 27.458L11.9804 29.6427L13.522 26.3722C14.5868 26.5092 15.6492 26.4981 16.6935 26.3458L18.2726 29.573L24.5858 26.484L23.0109 23.2651C23.7911 22.523 24.4599 21.6825 25.0063 20.7554L28.4649 21.5297L30 14.6711L26.5772 13.9051Z' />
<path d='M19.9974 12.8355L19.5042 11.5951L16.5365 14.5622L15.2034 13.2291L18.1712 10.262L16.9307 9.76822C12.0752 7.83691 7.58631 13.149 10.1343 17.5908C3.57967 24.1454 9.18129 18.5444 1.30664 26.419L3.60316 28.7156C8.17764 24.1411 3.7343 28.5851 12.5128 19.8065C16.994 21.9797 21.8459 17.4793 19.9974 12.8355Z' />
</svg>
);
}
return null;
};
export const ZoomIn = (): JSX.Element => {
return (
<svg width='30' height='30' viewBox='0 0 30 30' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path d='M25.2641 22.9632L17.2812 14.9803L25.3145 6.94706L27.6931 9.32566L30 0L20.5715 2.20418L23.0333 4.66596L15 12.6991L6.96682 4.66596L9.4286 2.20418L0 0L2.30702 9.32566L4.68562 6.94706L12.7188 14.9803L4.73602 22.9632L2.30702 20.5342L0 29.8599L9.4286 27.6558L7.01723 25.2444L15 17.2615L22.9829 25.2444L20.5715 27.6558L30 29.8599L27.6931 20.5342L25.2641 22.9632Z' />
</svg>
);
};
export const ZoomOut = (): JSX.Element => {
return (
<svg width='30' height='30' viewBox='0 0 30 30' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path d='M25.2037 7.12702L30.0001 2.3307L27.7388 0.069458L22.9425 4.86577L20.5847 2.50809L18.298 11.7521L27.6439 9.56725L25.2037 7.12702Z' />
<path d='M7.05756 4.86577L2.26125 0.069458L0 2.3307L4.79631 7.12702L2.35598 9.56725L11.7022 11.7521L9.41534 2.50809L7.05756 4.86577Z' />
<path d='M27.6439 20.4327L18.298 18.248L20.5847 27.492L22.9425 25.1342L27.7388 29.9305L30.0001 27.6693L25.2037 22.873L27.6439 20.4327Z' />
<path d='M4.79631 22.873L0 27.6693L2.26125 29.9305L7.05756 25.1342L9.41534 27.492L11.7022 18.248L2.35598 20.4327L4.79631 22.873Z' />
</svg>
);
};
export const Log = (): JSX.Element => {
return (
<svg width='30' height='30' viewBox='0 0 30 30' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path d='M29.9037 13.2722C29.8399 13.1197 29.7487 12.981 29.6325 12.8647L25.8837 9.11596C25.395 8.62846 24.605 8.62846 24.1162 9.11596C23.6275 9.60469 23.6275 10.3959 24.1162 10.8834L25.7325 12.4997H18.7499C18.0587 12.4997 17.4999 13.0597 17.4999 13.7497C17.4999 14.4397 18.0587 14.9997 18.7499 14.9997H25.7324L24.1162 16.6159C23.6274 17.1046 23.6274 17.8959 24.1162 18.3834C24.3599 18.6284 24.6799 18.7497 24.9999 18.7497C25.32 18.7497 25.64 18.6284 25.8837 18.3834L29.6325 14.6346C29.7487 14.5196 29.8399 14.3808 29.9037 14.2271C30.0299 13.9222 30.0299 13.5772 29.9037 13.2722Z' />
<path d='M21.25 17.5C20.5587 17.5 20 18.06 20 18.75V25H15V4.99998C15 4.44873 14.6375 3.96123 14.1087 3.8025L9.76746 2.50002H20V8.75004C20 9.44004 20.5587 10 21.25 10C21.9412 10 22.4999 9.44004 22.4999 8.75004V1.25004C22.4999 0.55998 21.9412 0 21.25 0H1.24998C1.20498 0 1.16496 0.01875 1.12125 0.0237305C1.06248 0.03 1.00875 0.0399609 0.9525 0.0537305C0.82125 0.0874805 0.70248 0.13875 0.59127 0.208711C0.563789 0.22623 0.530039 0.227461 0.503789 0.247441C0.493711 0.255 0.489961 0.26877 0.479941 0.27627C0.343711 0.38373 0.22998 0.51498 0.14748 0.67125C0.129961 0.705 0.126211 0.74127 0.1125 0.77625C0.0724805 0.87123 0.0287695 0.96375 0.0137695 1.06875C0.0075 1.10625 0.01875 1.14123 0.0175195 1.1775C0.0162891 1.20252 0 1.22502 0 1.24998V26.25C0 26.8462 0.42123 27.3588 1.005 27.475L13.505 29.975C13.5862 29.9926 13.6687 30.0001 13.75 30.0001C14.0362 30.0001 14.3174 29.9013 14.5424 29.7163C14.8312 29.4788 14.9999 29.125 14.9999 28.75V27.5H21.25C21.9412 27.5 22.4999 26.9401 22.4999 26.2501V18.75C22.4999 18.06 21.9412 17.5 21.25 17.5Z' />
</svg>
);
};
export const DavinciLogo = (): JSX.Element => {
return (
<svg
width='121'
height='17'
viewBox='0 0 121 17'
fill='none'
xmlns='http://www.w3.org/2000/svg'
className='davinci_logo'>
<path
d='M0.04599 16V0.379992H5.23799C6.88066 0.379992 8.25199 0.731992 9.35199 1.43599C10.452 2.12533 11.2733 3.06399 11.816 4.25199C12.3733 5.42533 12.652 6.73066 12.652 8.16799C12.652 9.75199 12.344 11.1307 11.728 12.304C11.1267 13.4773 10.2687 14.3867 9.15399 15.032C8.05399 15.6773 6.74866 16 5.23799 16H0.04599ZM11.53 8.16799C11.53 6.86266 11.2807 5.70399 10.782 4.69199C10.298 3.66533 9.58666 2.85866 8.64799 2.27199C7.70932 1.68533 6.57266 1.39199 5.23799 1.39199H1.16799V14.988H5.23799C6.60199 14.988 7.75332 14.6873 8.69199 14.086C9.63066 13.4847 10.3347 12.6707 10.804 11.644C11.288 10.6173 11.53 9.45866 11.53 8.16799Z'
fill='black'
/>
<path
d='M26.457 0.379992H27.425L34.025 16H32.837L30.659 10.852H23.201L21.023 16H19.813L26.457 0.379992ZM30.351 9.92799L26.941 1.74399L23.465 9.92799H30.351Z'
fill='black'
/>
ß
<path
d='M40.9381 0.379992L46.8781 14.592L52.8181 0.379992H54.0061L47.4282 16H46.3501L39.7501 0.379992H40.9381Z'
fill='black'
/>
<path d='M62.7778 16V0.379992H63.8998V16H62.7778Z' fill='black' />
<path
d='M75.5005 2.46999V16H74.3785V0.379992H75.3025L86.1925 14.13V0.379992H87.3145V16H86.2145L75.5005 2.46999Z'
fill='black'
/>
<path
d='M96.6961 8.07999C96.6961 7.14133 96.8574 6.20999 97.1801 5.28599C97.5174 4.36199 98.0015 3.52599 98.6321 2.77799C99.2628 2.02999 100.033 1.42866 100.942 0.973993C101.866 0.519326 102.915 0.291992 104.088 0.291992C105.481 0.291992 106.669 0.614659 107.652 1.25999C108.635 1.89066 109.368 2.70466 109.852 3.70199L108.928 4.22999C108.561 3.51133 108.107 2.93933 107.564 2.51399C107.036 2.08866 106.464 1.78799 105.848 1.61199C105.232 1.42133 104.616 1.32599 104 1.32599C103.017 1.32599 102.137 1.52399 101.36 1.91999C100.597 2.31599 99.9521 2.84399 99.4241 3.50399C98.8961 4.16399 98.4928 4.89733 98.2141 5.70399C97.9501 6.51066 97.8181 7.32466 97.8181 8.14599C97.8181 9.06999 97.9794 9.94999 98.3021 10.786C98.6248 11.6073 99.0648 12.348 99.6221 13.008C100.194 13.6533 100.854 14.1667 101.602 14.548C102.365 14.9147 103.186 15.098 104.066 15.098C104.697 15.098 105.335 14.9953 105.98 14.79C106.64 14.57 107.256 14.24 107.828 13.8C108.4 13.3453 108.862 12.7587 109.214 12.04L110.182 12.502C109.83 13.2793 109.317 13.9393 108.642 14.482C107.982 15.0247 107.241 15.4353 106.42 15.714C105.599 15.9927 104.785 16.132 103.978 16.132C102.922 16.132 101.947 15.9047 101.052 15.45C100.157 14.9807 99.3875 14.3647 98.7421 13.602C98.0968 12.8247 97.5908 11.9593 97.2241 11.006C96.8721 10.038 96.6961 9.06266 96.6961 8.07999Z'
fill='black'
/>
<path d='M119.344 16V0.379992H120.466V16H119.344Z' fill='black' />
</svg>
);
};
import { Ttranslations } from "../types/localize"
import { TTranslations } from '@ts/localize';
export const en : Ttranslations = {
login: "help"
}
const en: TTranslations = {
howItWorks: 'how it works',
gallery: 'gallery',
prices: 'prices',
shipping: 'shipping',
numberOfPeople: 'number of people / animals',
quantity: 'quantity',
size: 'size',
upload: 'upload',
shippingCart: 'shopping cart',
personsAnimals: 'persons / animals',
expressDeliveryIn: 'express delivery in',
just7Days: 'just 7 days',
expressDeliveryDays: '7 Days express delivery',
handmade: '100% handmade',
satisfactionGuarantee: '100% satisfaction guarantee',
};
export default en;
import { TTranslations } from '@ts/localize';
const de: TTranslations = {
howItWorks: 'so funktioniert es',
gallery: 'galerie',
prices: 'preise',
shipping: 'versand',
numberOfPeople: 'anzahl menschen / tiere',
quantity: 'anzahl',
size: 'gröss',
upload: 'upload',
shippingCart: 'warenkorb',
personsAnimals: 'personen / tiere',
expressDeliveryIn: 'expresslieferung in',
just7Days: 'nur 7 Tagen',
expressDeliveryDays: '7 Tage Expressversand',
handmade: '100% handgemacht',
satisfactionGuarantee: '100% Zufriedenheitsgarantie',
};
export default de;
import { Ttranslations } from "../types/localize"
export const jp : Ttranslations = {
login: "助けて"
}
import { Ttranslations } from "../types/localize"
export const sin : Ttranslations = {
login: "උදව්"
}
export type TTab = 'quantity' | 'size' | 'upload' | 'cart';
export type TInputValue = string | number | null;
export type TCurrency = 'dollar' | 'euro';
export type TPaperSize = 'A4' | 'A3' | 'A2' | 'A1';
export type TPaper = {
prev: number;
now: number;
imgUrl: string;
};
export type TFigure = {
prev: number;
now: number;
imgUrl: string;
};
export interface IFigurePackageObj {
[key: string]: TFigure;
}
export interface IPaperPackageObj {
[key: string]: TPaper;
}
export type TMenuItem = 'artists' | 'editors' | 'customers' | 'analytics' | 'settings';
export type TMenuItemArr = {
name: TMenuItem;
icon: string;
}[];
type TNumberArr = [number, number, number, number];
type TLandmarks = [number, number, number];
export type THand = [
annotations: {
indexFinger: TNumberArr[];
middleFinger: TNumberArr[];
palmBase: TNumberArr[];
pinky: TNumberArr[];
ringFinger: TNumberArr[];
thumb: TNumberArr[];
},
boundingBox: {
bottomRight: [number, number];
topLeft: [number, number];
},
handInViewConfidence: number,
landmarks: TLandmarks
];
// This will receive an object with target field that is of type HTMLInputElement
export interface IHtmlSelectedElement {
target: HTMLSelectElement;
}
export interface IHtmlInputElement {
target: HTMLInputElement;
}
export interface IHTMLVideoElement {
target: HTMLVideoElement;
}
export interface IHTMLCanvasElement {
target: HTMLCanvasElement;
}
export type TLocale = 'en' | 'de';
export type TTranslations = {
howItWorks: string;
gallery: string;
prices: string;
shipping: string;
numberOfPeople: string;
quantity: string;
size: string;
upload: string;
shippingCart: string;
personsAnimals: string;
expressDeliveryIn: string;
just7Days: string;
expressDeliveryDays: string;
handmade: string;
satisfactionGuarantee: string;
};
export type Tlocale = 'en' | 'sin' | 'jp';
export type Ttranslations = {
login : string
};
import styles from '@components_style/Button.module.sass';
import React from 'react';
type TProps = { text: string; onClickHandler: () => void; isDisabled: boolean; type: 'normal' | 'submit' };
const Button = ({ isDisabled, onClickHandler, text, type = 'normal' }: TProps): JSX.Element => {
return (
<>
{type === 'normal' && (
<button
className={`${styles.container} ${isDisabled ? styles.disabled : ''}`}
onClick={() => {
if (!isDisabled) {
onClickHandler();
}
}}
type='button'>
{text}
</button>
)}
{type === 'submit' && (
<input
type='submit'
className={`${styles.submitBtn} ${isDisabled ? styles.disabled : ''}`}
onClick={e => {
e.preventDefault();
if (!isDisabled) {
onClickHandler();
}
}}
value={text}
/>
)}
</>
);
};
export default Button;
import styles from '@components_style/Cross.module.sass';
import React from 'react';
type TProps = {
menuOpened: boolean;
clickHandler: React.Dispatch<React.SetStateAction<boolean>>;
};
const Cross = ({ clickHandler, menuOpened }: TProps): JSX.Element => {
return (
<button
className={`${styles.container} ${menuOpened ? styles.open : ''}`}
type='button'
onClick={() => clickHandler(state => !state)}>
<span />
<span />
<span />
<span />
</button>
);
};
export default Cross;
import styles from '@components_style/EllipsisAnimator.module.sass';
import React from 'react';
type TProps = { text?: string };
const EllipsisAnimator = ({ text = 'Checking' }: TProps): JSX.Element => {
return <div className={styles.container}>{text}</div>;
};
export default EllipsisAnimator;
import styles from '@components_style/Input.module.sass';
import { IHtmlInputElement } from '@ts/interfaces';
import React from 'react';
type TProp = {
placeholder: string;
label: string;
errorMsg?: string;
onChange: (val: string) => void;
value: string;
type: 'text' | 'password' | 'hidden';
required?: boolean;
autoComplete?: 'new-password' | 'current-password' | 'username' | 'off' | 'on';
};
const Input = ({
autoComplete = 'on',
errorMsg,
label,
onChange,
placeholder = '',
required = false,
type,
value,
}: TProp): JSX.Element => {
if (type === 'hidden') {
return <input type='hidden' />;
}
return (
<div className={styles.container}>
{label && (
<label htmlFor={placeholder} className={styles.labelElement}>
{label}
</label>
)}
<div className={styles.inputElementCtr}>
<input
className={`${styles.inputElement} ${errorMsg ? styles.error : ''}`}
type={type}
placeholder={placeholder}
aria-describedby={placeholder}
onChange={(e: IHtmlInputElement) => onChange(e.target.value)}
value={value}
required={required}
autoComplete={autoComplete}
/>
{value && <div className={styles.cross} onClick={() => onChange('')} aria-hidden='true' />}
</div>
{errorMsg && <div className={`${styles.errorMsg} ${errorMsg ? styles.error : ''}`}>{errorMsg}</div>}
</div>
);
};
export default Input;
import styles from '@components_style/LetterImg.module.sass';
import { fistCapitalLetter } from '@util/normalize';
import React from 'react';
import { colors } from 'styles/baseStyles';
type TProps = {
text: string;
size?: string;
color?: string;
background?: string;
fontSize?: string;
};
const LetterImg = ({
background = colors.grayLight,
color = colors.black,
size = '50px',
fontSize = '1.5rem',
text,
}: TProps): JSX.Element => {
return (
<div
className={styles.container}
style={{ fontSize, background, color, width: size, height: size, lineHeight: size }}>
{fistCapitalLetter(text)}
</div>
);
};
export default LetterImg;
import styles from '@components_style/Loader.module.sass';
import React from 'react';
type TProps = { show: boolean };
const Loader = ({ show }: TProps): JSX.Element => {
const ctrClass = `${styles.container} ${show ? styles.show : ''}`;
return <div className={ctrClass} />;
};
export default Loader;
import { TInputValue } from '@ts/common';
import React, { useRef } from 'react';
import Select, { OptionTypeBase } from 'react-select';
import { colors } from 'styles/baseStyles';
type TProp = {
placeholder?: string;
isDisabled?: boolean;
onChange: (selected: OptionTypeBase) => void;
options: OptionTypeBase[];
selectedValue: TInputValue;
};
const SelectBox = ({ isDisabled = false, onChange, options, placeholder = '', selectedValue }: TProp): JSX.Element => {
const ref = useRef();
return (
<Select
isDisabled={isDisabled}
placeholder={placeholder}
isSearchable={false}
styles={{
control: styles => {
return {
...styles,
border: 'none',
boxShadow: 'none',
width: 'auto',
display: 'flex',
cursor: 'pointer',
background: 'transparent',
};
},
indicatorSeparator: styles => ({
...styles,
display: 'none',
}),
valueContainer: styles => ({
...styles,
display: 'flex',
justifyContent: 'center',
position: 'static',
alignItems: 'center',
lineHeight: 'auto',
width: '20px',
padding: '0',
margin: '0',
marginRight: '4px',
flex: 'none',
}),
singleValue: styles => ({
...styles,
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
margin: '0',
padding: '0',
color: `${colors.white}`,
fontWeight: 'normal',
}),
dropdownIndicator: (styles, state) => ({
...styles,
transition: 'all .2s ease',
padding: '0',
margin: '0',
transform: state.selectProps.menuIsOpen ? 'rotate(180deg)' : 'rotate(0deg)',
color: `${colors.grayDark}`,
':hover': {
...styles[':hover'],
color: `${colors.grayDark}`,
},
}),
menuList: styles => ({
...styles,
margin: '0',
padding: '0',
}),
menu: styles => ({
...styles,
marginTop: '2px',
padding: '0',
}),
option: (styles, state) => {
return {
...styles,
backgroundColor: 'transparent',
color: state.isDisabled ? '#ebecf0' : `${colors.black}`,
pointerEvents: state.isDisabled ? 'none' : 'auto',
textAlign: 'center',
cursor: 'pointer',
':hover': {
...styles[':hover'],
background: `${colors.black}`,
color: `${colors.white}`,
borderRadius: '0',
},
':active': {
...styles[':active'],
background: `${colors.black}`,
borderRadius: '0',
},
':first-of-type:hover': {
...styles[':hover'],
borderRadius: '3px 3px 0 0',
},
':first-of-type:active': {
...styles[':active'],
borderRadius: '3px 3px 0 0',
},
':last-of-type:hover': {
...styles[':hover'],
borderRadius: '0 0 3px 3px',
},
':last-of-type:active': {
...styles[':active'],
borderRadius: '0 0 3px 3px',
},
};
},
}}
value={options.find(option => `${option.value}` === `${selectedValue}`) || options[0]}
onChange={val => onChange(val)}
options={options}
id={`${ref}`}
instanceId={`${ref}`}
inputId={`${ref}`}
/>
);
};
export default SelectBox;
import { UserContext } from '@ctx/UserContext';
import React, { useContext } from 'react';
import ErrorPages from 'src/common/ui/layouts/ErrorPages';
import WaitingPage from 'src/common/ui/layouts/WaitingPage';
type TProps = {
children: React.ReactElement;
fallback?: React.ReactElement;
};
const AuthCheck = ({ children, fallback = <ErrorPages /> }: TProps): JSX.Element => {
const { isLogged, loading } = useContext(UserContext);
if (loading) return <WaitingPage />;
return isLogged ? children : fallback;
};
export default AuthCheck;
import Button from '@components/Button';
import workspace from '@images/workspace.svg';
import styles from '@layouts_style/ErrorPages.module.sass';
import Image from 'next/image';
import { useRouter } from 'next/router';
import React from 'react';
const ErrorPages = (): JSX.Element => {
const router = useRouter();
return (
<div className={styles.container}>
<div className={styles.imageCover}>
<Image src={workspace} alt='workspace' layout='intrinsic' />
</div>
<div className={styles.message}>This page could not be found.</div>
<div className={styles.btnCtr}>
<Button
type='normal'
isDisabled={false}
text='GO HOME'
onClickHandler={() => {
router.push('/');
}}
/>
</div>
</div>
);
};
export default ErrorPages;
import LetterImg from '@components/LetterImg';
import { UserContext } from '@ctx/UserContext';
import styles from '@layouts_style/LeftMenu.module.sass';
import { Log, MenuIcons, ZoomIn } from '@svg/Common';
import { TMenuItem } from '@ts/common';
import React, { useContext, useState } from 'react';
import ErrorPages from 'src/common/ui/layouts/ErrorPages';
import { colors } from 'styles/baseStyles';
const menuHeight = 60;
const LeftMenu = (): JSX.Element | null => {
const { signOut, userData } = useContext(UserContext);
const menuItemsArr: TMenuItem[] = ['analytics', 'artists', 'editors', 'customers', 'settings'];
const [selectedIndex, setSelectedIndex] = useState(0);
const [smallMenu, setSmallMenu] = useState(true);
const top = `${menuHeight * selectedIndex}px`;
const { isLogged } = useContext(UserContext);
if (isLogged === false) {
return <ErrorPages />;
}
return (
<div className={styles.container} style={{ width: smallMenu ? '70px' : '200px' }}>
<div className={styles.profileCover} style={{ paddingBottom: smallMenu ? '0' : '16px' }}>
{userData.photoURL ? (
<img src={userData.photoURL} alt='user' style={{ width: smallMenu ? '56px' : '80px' }} />
) : (
<LetterImg
text={userData.photoURL || ''}
size={smallMenu ? '56px' : '80px'}
fontSize='3rem'
background={colors.grayDark}
/>
)}
</div>
{!smallMenu && <div className={styles.profileName}>{userData.displayName}</div>}
{!smallMenu && userData.type && <div className={styles.type}>({userData.type})</div>}
<div className={styles.separator} />
<div className={styles.menuCover}>
<span className={styles.backgroundSelection} style={{ top }} />
{menuItemsArr.map((item, i) => {
return (
<button
type='button'
className={`${styles.menuItem} ${selectedIndex === i ? styles.active : ''}`}
onClick={() => setSelectedIndex(i)}
key={`menu-${i + 1}`}>
<MenuIcons type={item} />
{!smallMenu && item}
</button>
);
})}
<span className={styles.topArrow} style={{ top }} />
</div>
<div className={styles.bottomContainer}>
<div className={styles.separator} />
<button type='button' className={styles.logoutCtr} onClick={() => signOut()}>
{smallMenu ? <Log /> : <div className={styles.logoutText}>Log out</div>}
</button>
<div className={styles.separator} />
<button type='button' className={styles.zoomCtr} onClick={() => setSmallMenu(val => !val)}>
{smallMenu ? <ZoomIn /> : <div className={styles.zoomOutText}>Small Menu</div>}
</button>
</div>
</div>
);
};
export default LeftMenu;
import Cross from '@components/Cross';
import SelectBox from '@components/SelectBox';
import styles from '@layouts_style/NavBar.module.sass';
import { DavinciLogo } from '@svg/Logo';
import { TInputValue } from '@ts/common';
import { Translations } from '@util/localize';
import { useRouter } from 'next/router';
import { useState } from 'react';
const NavBar = (): JSX.Element => {
const t = Translations();
const router = useRouter();
const { asPath, locale, pathname } = router;
const [menuOpened, setMenuOpened] = useState(false);
const ToggleLanguage = (val: TInputValue) => {
switch (val) {
case 'en':
router.push(pathname, asPath, { locale: 'en' });
break;
case 'de':
router.push(pathname, asPath, { locale: 'de' });
break;
default:
break;
}
};
return (
<div className={styles.container}>
<div className={styles.middleContainer}>
<div className={styles.title}>
<DavinciLogo />
</div>
<div className={styles.menu}>
<div className={styles.menuItem}>{t.howItWorks}</div>
<div className={styles.menuItem}>{t.gallery}</div>
<div className={styles.menuItem}>{t.prices}</div>
<div className={styles.menuItem}>{t.shipping}</div>
<div className={styles.langBar}>
<SelectBox
options={[
{ label: 'EN', value: 'en' },
{ label: 'DE', value: 'de' },
]}
onChange={selected => {
ToggleLanguage(selected.value || null);
}}
selectedValue={locale || 'en'}
placeholder=''
/>
</div>
</div>
<Cross menuOpened={menuOpened} clickHandler={setMenuOpened} />
</div>
</div>
);
};
export default NavBar;
import { CartContext } from '@ctx/CartContext';
import styles from '@layouts_style/Quantity.module.sass';
import { Translations } from '@util/localize';
import { normalizedCurrency } from '@util/normalize';
import React, { useContext } from 'react';
const Quantity = (): JSX.Element => {
const t = Translations();
const { currency, figureCount, figurePackageObj, setFigureCount, totalPrice } = useContext(CartContext);
const selectedPackage = figurePackageObj[`figure${figureCount}`];
return (
<div className={styles.container}>
<div className={styles.leftContainer}>
<img src={selectedPackage?.imgUrl} alt='sample_1' className={styles.sample} />
</div>
<div className={styles.rightContainer}>
<div>
<div className={styles.topic}>{t.numberOfPeople}</div>
<div className={styles.figureCount}>
<button
className={`${styles.figureCountItem} ${figureCount === 1 ? styles.selected : ''}`}
type='button'
onClick={() => {
setFigureCount(1);
}}>
1
</button>
<button
className={`${styles.figureCountItem} ${figureCount === 2 ? styles.selected : ''}`}
type='button'
onClick={() => {
setFigureCount(2);
}}>
2
</button>
<button
className={`${styles.figureCountItem} ${figureCount === 3 ? styles.selected : ''}`}
type='button'
onClick={() => {
setFigureCount(3);
}}>
3
</button>
<button
className={`${styles.figureCountItem} ${figureCount === 4 ? styles.selected : ''}`}
type='button'
onClick={() => {
setFigureCount(4);
}}>
4
</button>
<button
className={`${styles.figureCountItem} ${figureCount === 5 ? styles.selected : ''}`}
type='button'
onClick={() => {
setFigureCount(5);
}}>
5
</button>
<button
className={`${styles.figureCountItem} ${figureCount === 6 ? styles.selected : ''}`}
type='button'
onClick={() => {
setFigureCount(6);
}}>
6
</button>
</div>
</div>
<div>
<div className={styles.priceTable}>
<div className={styles.priceDesc}>
{figureCount} {t.personsAnimals}
</div>
<div className={styles.price}>
<div className={styles.previousPrice}>{normalizedCurrency(selectedPackage?.prev, currency)}</div>
<div className={styles.nowPrice}>{normalizedCurrency(selectedPackage?.now, currency)}</div>
</div>
</div>
<div className={styles.totalPriceCover}>
<span className={styles.totalPrice}>{normalizedCurrency(totalPrice, currency)}</span>
</div>
<div className={styles.expressDelivery}>
<div className={styles.blink} />
<span className='delivery_in'>{t.expressDeliveryIn}</span>
&nbsp;
<span className='delivery_days'>{t.just7Days}</span>
</div>
<div className={styles.controlBtn}>
<div className={styles.backBtn}>Back</div>
<div className={styles.nextBtn}>Next</div>
</div>
</div>
</div>
</div>
);
};
export default Quantity;
import EllipsisAnimator from '@components/EllipsisAnimator';
import styles from '@layouts_style/WaitingPage.module.sass';
import React from 'react';
const WaitingPage = (): JSX.Element => {
return (
<div className={styles.container}>
<div className={styles.ellipsisCtr}>
<EllipsisAnimator text='Checking' />
</div>
</div>
);
};
export default WaitingPage;
import en from '@translations/english';
import de from '@translations/german';
import { TTranslations } from '@ts/localize';
import { useRouter } from 'next/router';
export const Translations = (): TTranslations => {
const router = useRouter();
switch (router.locale) {
case 'en':
return en;
case 'de': // German
return de;
default:
return en;
}
};
export { en as english, de as german };
export const normalizedCurrency = (value: number, type = 'euro'): string => {
if (type === 'euro') {
return `${value},00 €`;
}
return `${value},00 $`;
};
export const addCurrency = (value: number, type = 'euro'): string => {
if (type === 'euro') {
return `${value} €`;
}
return `${value} $`;
};
export const intoString = (value: string | number): string => `${value}`;
export const userNameValidator = (userName: string): string => {
if (userName.trim().length === 0) {
return '';
}
if (/\W+/g.test(userName)) {
return 'Has invalid characters';
}
if (userName.length < 6) {
return 'Length should be above 6';
}
if (userName.length > 15) {
return `Maximum only 15 character, now(${userName.length})`;
}
return '';
};
export const passwordValidator = (password: string): string => {
if (password.trim().length === 0) {
return '';
}
if (password.length > 0 && password.length < 8) {
return 'Need at least 8 characters';
}
if (!/(?=.*?[A-Z])/g.test(password)) {
return 'Need at least one uppercase letter';
}
if (!/(?=.*?[a-z])/g.test(password)) {
return 'Need at least one lowercase letter';
}
if (!/(?=.*?[0-9])/g.test(password)) {
return 'Need at least one number';
}
if (!/(?=.*?[#?!@$%^&*-])/g.test(password)) {
return 'Need at least one special character';
}
if (password.length > 15) {
return `Maximum only 15 character, now(${password.length})`;
}
return '';
};
export const isEmpty = (val: string): boolean => val.trim().length === 0;
export const userNameValidatorBoolean = (userName: string): boolean => {
if (userName.trim().length === 0) {
return false;
}
if (/\W+/g.test(userName)) {
return false;
}
if (userName.length < 6) {
return false;
}
if (userName.length > 15) {
return false;
}
return true;
};
export const fistCapitalLetter = (val: string): string => (val.length > 0 ? val.charAt(0).toUpperCase() : 'A');
import { AnnotatedPrediction } from '@tensorflow-models/handpose';
type TFingerJoints = {
thumb: number[];
indexFinger: number[];
middleFinger: number[];
ringFinger: number[];
pinky: number[];
};
// Points for finger
const fingerJoints: TFingerJoints = {
thumb: [0, 1, 2, 3, 4],
indexFinger: [0, 5, 6, 7, 8],
middleFinger: [0, 9, 10, 11, 12],
ringFinger: [0, 13, 14, 15, 16],
pinky: [0, 17, 18, 19, 20],
};
// Infinity Gauntlet Style
const style = {
0: { color: 'yellow', size: 15 },
1: { color: 'gold', size: 6 },
2: { color: 'green', size: 10 }, // green
3: { color: 'gold', size: 6 },
4: { color: 'gold', size: 6 },
5: { color: 'purple', size: 10 }, // purple
6: { color: 'gold', size: 6 },
7: { color: 'gold', size: 6 },
8: { color: 'gold', size: 6 },
9: { color: 'blue', size: 10 }, // blue
10: { color: 'gold', size: 6 },
11: { color: 'gold', size: 6 },
12: { color: 'gold', size: 6 },
13: { color: 'red', size: 10 }, // red
14: { color: 'gold', size: 6 },
15: { color: 'gold', size: 6 },
16: { color: 'gold', size: 6 },
17: { color: 'orange', size: 10 }, // orange
18: { color: 'gold', size: 6 },
19: { color: 'gold', size: 6 },
20: { color: 'gold', size: 6 },
};
export const drawHand = (predictions: AnnotatedPrediction[], ctx: CanvasRenderingContext2D): void => {
if (predictions.length > 0) {
// predictions.forEach((prediction: AnnotatedPrediction) => {
// const { landmarks } = prediction;
// for (let j = 0; j < Object.keys(fingerJoints).length; j += 1) {
// const finger = Object.keys(fingerJoints)[j];
// for (let k = 0; k < fingerJoints[finger].length - 1; k += 1) {
// const firstJointIndex = fingerJoints[finger][k];
// const secondJointIndex = fingerJoints[finger][k + 1];
// ctx.beginPath();
// ctx.moveTo(landmarks[firstJointIndex][0], landmarks[firstJointIndex][1]);
// ctx.lineTo(landmarks[secondJointIndex][0], landmarks[secondJointIndex][1]);
// ctx.strokeStyle = 'plum';
// ctx.lineWidth = 4;
// ctx.stroke();
// }
// }
// for (let i = 0; i < landmarks.length; i += 1) {
// const x = landmarks[i][0];
// const y = landmarks[i][1];
// ctx.beginPath();
// ctx.arc(x, y, style[i].size, 0, 3 * Math.PI);
// ctx.fillStyle = style[i].color;
// ctx.fill();
// }
// });
if (predictions.length > 0) {
const predicted = predictions[0].landmarks;
if (predicted.length > 0) {
const xMidSum = predicted[0][0] + predicted[5][0] + predicted[17][0];
const yMidSum = predicted[0][1] + predicted[5][1] + predicted[17][1];
ctx.beginPath();
ctx.arc(parseFloat((xMidSum / 3).toFixed(4)), parseFloat((yMidSum / 3).toFixed(4)), 10, 0, 3 * Math.PI);
ctx.fillStyle = 'red';
ctx.fill();
}
}
}
};
import { useRouter } from "next/router";
import { Tlocale, Ttranslations } from "../types/localize";
import { en } from "../translations/english"
import { jp } from "../translations/japanese"
import { sin } from "../translations/sinhala"
export const selectedLocale = (): Ttranslations => {
const router = useRouter();
switch (router.locale) {
case "en":
return en;
case "jp":
return jp;
case "sin":
return sin;
default:
return en;
}
};
export const toggleLanguage = (locale: Tlocale) => {
const router = useRouter();
switch (locale) {
case "en":
router.push("/", "/", { locale: "en" });
break;
case "sin":
router.push("/", "/", { locale: "sin" });
break;
case "jp":
router.push("/", "/", { locale: "jp" });
break;
default:
break;
}
};
export {en as english, jp as japanese, sin as sinhala}
type TFingerJoints = {
thumb: number[];
indexFinger: number[];
middleFinger: number[];
ringFinger: number[];
pinky: number[];
};
// Points for finger
const fingerJoints: TFingerJoints = {
thumb: [0, 1, 2, 3, 4],
indexFinger: [0, 5, 6, 7, 8],
middleFinger: [0, 9, 10, 11, 12],
ringFinger: [0, 13, 14, 15, 16],
pinky: [0, 17, 18, 19, 20],
};
// Infinity Gauntlet Style
const style = {
0: { color: "yellow", size: 15 },
1: { color: "gold", size: 6 },
2: { color: "green", size: 10 },
3: { color: "gold", size: 6 },
4: { color: "gold", size: 6 },
5: { color: "purple", size: 10 },
6: { color: "gold", size: 6 },
7: { color: "gold", size: 6 },
8: { color: "gold", size: 6 },
9: { color: "blue", size: 10 },
10: { color: "gold", size: 6 },
11: { color: "gold", size: 6 },
12: { color: "gold", size: 6 },
13: { color: "red", size: 10 },
14: { color: "gold", size: 6 },
15: { color: "gold", size: 6 },
16: { color: "gold", size: 6 },
17: { color: "orange", size: 10 },
18: { color: "gold", size: 6 },
19: { color: "gold", size: 6 },
20: { color: "gold", size: 6 },
};
// Drawing function
export const drawHand = (predictions: any, ctx: any) => {
// Check if we have predictions
if (predictions.length > 0) {
// Loop through each prediction
predictions.forEach((prediction: any) => {
// Grab landmarks
const landmarks = prediction.landmarks;
// Loop through fingers
for (let j = 0; j < Object.keys(fingerJoints).length; j++) {
let finger = Object.keys(fingerJoints)[j];
// Loop through pairs of joints
for (let k = 0; k < fingerJoints[finger].length - 1; k++) {
// Get pairs of joints
const firstJointIndex = fingerJoints[finger][k];
const secondJointIndex = fingerJoints[finger][k + 1];
// Draw path
ctx.beginPath();
ctx.moveTo(
landmarks[firstJointIndex][0],
landmarks[firstJointIndex][1]
);
ctx.lineTo(
landmarks[secondJointIndex][0],
landmarks[secondJointIndex][1]
);
ctx.strokeStyle = "plum";
ctx.lineWidth = 4;
ctx.stroke();
}
}
// Loop through landmarks and draw em
for (let i = 0; i < landmarks.length; i++) {
// Get x point
const x = landmarks[i][0];
// Get y point
const y = landmarks[i][1];
// Start drawing
ctx.beginPath();
ctx.arc(x, y, style[i]["size"], 0, 3 * Math.PI);
// Set line color
ctx.fillStyle = style[i]["color"];
ctx.fill();
}
});
}
};
import Button from '@components/Button';
import styles from '@pages_style/404.module.sass';
import Image from 'next/image';
import { useRouter } from 'next/router';
import React from 'react';
import error from '../../public/images/error_404.svg';
const ErrorPage404 = (): JSX.Element => {
const router = useRouter();
return (
<div className={styles.container}>
<div className={styles.imageCover}>
<Image src={error} alt='workspace' layout='intrinsic' />
</div>
<div className={styles.message}>This page could not be found.</div>
<div className={styles.btnCtr}>
<Button
type='normal'
isDisabled={false}
text='GO HOME'
onClickHandler={() => {
router.push('/');
}}
/>
</div>
</div>
);
};
export default ErrorPage404;
import "../styles/common/normalize.css";
import "../styles/common/global.css";
import { AppProps } from "next/app";
import Head from "next/head";
import { CartContextProvider } from '@ctx/CartContext';
import { UserContextProvider } from '@ctx/UserContext';
import '@styles/globals.sass';
import type { AppProps } from 'next/app';
import Head from 'next/head';
import React from 'react';
function MyApp({ Component, pageProps }: AppProps): React.ReactElement {
const MyApp = ({ Component, pageProps }: AppProps): React.ReactElement => {
return (
<>
<Head>
<meta charSet="UTF-8" />
<title>{process.env.appName}</title>
<meta charSet='UTF-8' />
<title>{process.env.APP_NAME}</title>
<meta
name="viewport"
content="width=device-width, maximum-scale=1.0, initial-scale=1.0, user-scalable=no, shrink-to-fit=no"
/>
<meta name="author" content="SLIIT" />
<meta name="keywords" content="audio video conferencing" />
<meta name="description" content="4th year research" />
<meta name="theme-color" content="#000" />
<meta name="apple-mobile-web-app-status-bar-style" content="#000" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
/>
<link
href="https://fonts.googleapis.com/css2?family=Abel&display=swap"
rel="stylesheet"
/>
<link
href="https://fonts.googleapis.com/css2?family=Galada&display=swap"
rel="stylesheet"
/>
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link
href="https://fonts.googleapis.com/css2?family=Quicksand:wght@400;600&display=swap"
rel="stylesheet"
/>
<link
href="https://fonts.googleapis.com/css?family=Arima+Madurai&display=swap"
rel="stylesheet"
/>
<link
href="https://fonts.googleapis.com/css?family=Montserrat:600&display=swap"
rel="stylesheet"
name='viewport'
content='width=device-width, maximum-scale=1.0, initial-scale=1.0, user-scalable=no, shrink-to-fit=no'
/>
<meta name='author' content='Duminda Kodagoda' />
<meta name='keywords' content='Davinci Arts' />
<meta name='description' content='Art for everyone' />
<meta name='theme-color' content='#000' />
<meta name='apple-mobile-web-app-status-bar-style' content='#000' />
</Head>
<UserContextProvider>
<CartContextProvider>
{/* eslint-disable-next-line react/jsx-props-no-spreading */}
<Component {...pageProps} />
</CartContextProvider>
</UserContextProvider>
</>
);
}
};
export default MyApp;
// pages/_document.js
import { ServerStyleSheet } from "styled-components";
import Document, { DocumentContext } from "next/document";
export default class MyDocument extends Document {
static async getInitialProps(ctx: DocumentContext) {
const sheet = new ServerStyleSheet();
const originalRenderPage = ctx.renderPage;
try {
ctx.renderPage = () =>
originalRenderPage({
enhanceApp: (App) => (props) =>
sheet.collectStyles(<App {...props} />),
});
const initialProps = await Document.getInitialProps(ctx);
return {
...initialProps,
styles: (
<>
{initialProps.styles}
{sheet.getStyleElement()}
</>
),
};
} finally {
sheet.seal();
}
}
}
import React from 'react';
import AuthCheck from 'src/common/ui/layouts/AuthCheck';
import LeftMenu from 'src/common/ui/layouts/LeftMenu';
const AdminPanel = (): JSX.Element => {
return (
<AuthCheck>
<>
<LeftMenu />
</>
</AuthCheck>
);
};
export default AdminPanel;
export default async (req, res) => {
try {
res.status(200).json({
success: true,
type: "success",
message: "successfully added",
});
} catch (error) {
res.status(400).json({
success: false,
type: "error",
message: "internal error",
});
}
};
import React from "react";
import styled from "styled-components";
const Auth = (): JSX.Element => {
return <Container>This is auth page</Container>;
};
const Container = styled.div`
width: 100%;
height: 100vh;
background: #fff;
`;
export default Auth;
import styles from '@pages_style/design.module.sass';
import { TTab } from '@ts/common';
import { Translations } from '@util/localize';
import React, { useState } from 'react';
import Quantity from 'src/common/ui/layouts/Quantity';
const Design = (): JSX.Element => {
const [selectedTab, setSelectedTab] = useState<TTab>('quantity');
const t = Translations();
const getTabBody = () => {
switch (selectedTab) {
case 'cart':
return <Quantity />;
case 'quantity':
return <Quantity />;
case 'size':
return <Quantity />;
case 'upload':
return <Quantity />;
default:
return <Quantity />;
}
};
return (
<div className={styles.container}>
<div className={styles.tabHeader}>
<button
type='button'
className={`${styles.tabHeaderItem} ${selectedTab === 'quantity' ? styles.active : ''}`}
onClick={() => {
setSelectedTab('quantity');
}}>
{t.quantity}
</button>
<button
type='button'
className={`${styles.tabHeaderItem} ${selectedTab === 'size' ? styles.active : ''}`}
onClick={() => {
setSelectedTab('size');
}}>
{t.size}
</button>
<button
type='button'
className={`${styles.tabHeaderItem} ${selectedTab === 'upload' ? styles.active : ''}`}
onClick={() => {
setSelectedTab('upload');
}}>
{t.upload}
</button>
<button
type='button'
className={`${styles.tabHeaderItem} ${selectedTab === 'cart' ? styles.active : ''}`}
onClick={() => {
setSelectedTab('cart');
}}>
{t.shippingCart}
</button>
</div>
<div className={styles.tabBody}>
{getTabBody()}
<div className={styles.deliveryDesc}>
<div className={styles.deliveryDescItem}>
<img className={styles.deliveryDescIcon} src='/images/truck.svg' alt='truck' />
{t.expressDeliveryDays}
</div>
<div className={styles.deliveryDescItem}>
<img className={styles.deliveryDescIcon} src='/images/hand-writing.svg' alt='hand-writing' />
{t.handmade}
</div>
<div className={styles.deliveryDescItem}>
<img className={styles.deliveryDescIcon} src='/images/customer.svg' alt='customer' />
{t.satisfactionGuarantee}
</div>
</div>
</div>
</div>
);
};
export default Design;
import { useEffect, useRef, useState } from "react";
import styled from "styled-components";
import * as tf from "@tensorflow/tfjs";
import * as handpose from "@tensorflow-models/handpose";
import Webcam from "react-webcam";
import { drawHand } from "../components/utilities";
import "@tensorflow/tfjs-backend-webgl";
import styles from '@pages_style/index.module.sass';
import * as handpose from '@tensorflow-models/handpose';
import '@tensorflow/tfjs-backend-webgl';
import { drawHand } from '@util/utilities';
import React, { useEffect, useRef, useState } from 'react';
import Webcam from 'react-webcam';
import * as THREE from 'three';
const Body = (): JSX.Element => {
const Index = (): JSX.Element => {
const [threeMenuOn, setThreeMenuOn] = useState(false);
const [settingsMenuOn, setSettingsMenuOn] = useState(false);
const webcamRef = useRef<Webcam | null>(null);
......@@ -19,371 +19,209 @@ const Body = (): JSX.Element => {
const [showLeftBar, setShowLeftBar] = useState(true);
const [showRightBar, setShowRightBar] = useState(true);
const threeMenuIcon = threeMenuOn ? "3dActive" : "3d";
const settingsMenuIcon = settingsMenuOn ? "settingsActive" : "settings";
const threeMenuIcon = threeMenuOn ? '3dActive' : '3d';
const settingsMenuIcon = settingsMenuOn ? 'settingsActive' : 'settings';
const videoIcon = videoOn ? "videoCameraActive" : "videoCamera";
const streamingIcon = streaming ? "streamingActive" : "streaming";
const microphoneIcon = microphoneOn ? "microphoneActive" : "microphone";
const videoIcon = videoOn ? 'videoCameraActive' : 'videoCamera';
const streamingIcon = streaming ? 'streamingActive' : 'streaming';
const microphoneIcon = microphoneOn ? 'microphoneActive' : 'microphone';
const usersIcon = showLeftBar ? "groupActive" : "group";
const messageIcon = showRightBar ? "messageActive" : "message";
const usersIcon = showLeftBar ? 'groupActive' : 'group';
const messageIcon = showRightBar ? 'messageActive' : 'message';
const [page, setPages] = useState({});
const [cube, setCube] = useState([{ name: 'initCube' }]);
const [count, setCount] = useState(1);
const messageArray = [
{
message: "Hi",
time: "",
message: 'Hi',
time: '',
},
{
message: "Test",
time: "",
message: 'Test',
time: '',
},
];
const runHandpose = async () => {
const net = await handpose.load();
console.log("Handpose model loaded.");
// Loop and detect hands
setInterval(() => {
detect(net);
}, 10);
};
const detect = async (net: any) => {
const detect = async (net: handpose.HandPose) => {
const videoReference = webcamRef?.current?.video as HTMLVideoElement;
const canvasReference = canvasRef?.current as HTMLCanvasElement;
if (
typeof webcamRef.current !== "undefined" &&
typeof webcamRef.current !== 'undefined' &&
webcamRef.current !== null &&
videoReference.readyState === 4 &&
net
) {
//Get video properties
const videoWidth = videoReference.videoWidth;
const videoHeight = videoReference.videoHeight;
//Set video width
// Get video properties
const { videoWidth } = videoReference;
const { videoHeight } = videoReference;
// Set video width
videoReference.width = videoWidth;
videoReference.height = videoHeight;
//Set canvas height
// Set canvas height
canvasReference.width = videoWidth;
canvasReference.height = videoHeight;
// Make Detections
const hand = await net.estimateHands(videoReference);
// Draw mesh
const ctx = canvasReference.getContext("2d");
const ctx = canvasReference.getContext('2d');
if (ctx) {
drawHand(hand, ctx);
}
}
};
useEffect(() => {
runHandpose();
// Scene, camera, and renderer
const scene = new THREE.Scene();
scene.background = new THREE.Color(0xffffff);
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
setPages({ scene, camera, renderer });
camera.position.z = 60;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<Container showLeftBar={showLeftBar} streaming={streaming}>
<div className="videoContainer">
<div className="videoContainerInner">
<div className={styles.container}>
<div className={styles.videoContainer}>
<div className={styles.videoContainerInner}>
{showLeftBar && (
<div className="videoMenuLeft">
<div className="videoItem">D.G.Kodagoda</div>
<div className="videoItem">Y.Abinaya</div>
<div className="videoItem">Y.R.Kodagoda</div>
<div className="videoItem">S.Kodagoda</div>
<div className="videoItem">I.Kumarasinghe</div>
<div className="videoItem">Thilina</div>
<div className="videoItem">User1</div>
<div className="videoItem">User2</div>
<div className="videoItem">User3</div>
<div className="videoItem">User4</div>
<div className="videoItem">User5</div>
<div className="videoItem">User6</div>
<div className={styles.videoMenuLeft}>
<div className={styles.videoItem}>D.G.Kodagoda</div>
<div className={styles.videoItem}>Y.Abinaya</div>
<div className={styles.videoItem}>Y.R.Kodagoda</div>
<div className={styles.videoItem}>S.Kodagoda</div>
<div className={styles.videoItem}>I.Kumarasinghe</div>
<div className={styles.videoItem}>Thilina</div>
<div className={styles.videoItem}>User1</div>
<div className={styles.videoItem}>User2</div>
<div className={styles.videoItem}>User3</div>
<div className={styles.videoItem}>User4</div>
<div className={styles.videoItem}>User5</div>
<div className={styles.videoItem}>User6</div>
</div>
)}
<div className="videoMenuMiddle">
<div className={styles.videoMenuMiddle} style={{ marginLeft: showLeftBar ? '20px' : '0px' }}>
{videoOn ? (
<>
<Webcam ref={webcamRef} className="videoObject" />
<canvas ref={canvasRef} className="canvasObject" />
<Webcam ref={webcamRef} className={styles.videoObject} />
<canvas ref={canvasRef} className={styles.canvasObject} />
</>
) : (
<div className="videoPlaceholder">
<div className="userName">Duminda Kodagoda</div>
<div className="userMessage">Your video is off!</div>
<div className={styles.videoPlaceholder}>
<div className={styles.userName}>Duminda Kodagoda</div>
<div className={styles.userMessage}>Your video is off!</div>
</div>
)}
</div>
{showRightBar && (
<div className="videoMenuRight">
<div className="chatItemCover">
<div className={styles.videoMenuRight}>
<div className={styles.chatItemCover}>
{messageArray.map((item, index) => (
<div className="chatItem" key={`chatItem-${index + 1}`}>
<div key={`chatItem-${index + 1}`} className={styles.chatItem}>
{item.message}
</div>
))}
</div>
<div className="chatInput">
<input type="text" className="chatInputItem" />
<div className={styles.chatInput}>
<input type='text' className={styles.chatInputItem} />
</div>
</div>
)}
</div>
</div>
<div className="bottomBar">
<div className="left">
<span
className="hoverIconCover"
<div className={styles.bottomBar}>
<div className={styles.left}>
<img
src={`/images/${threeMenuIcon}.svg`}
alt=''
className={styles.leftIcons}
onMouseEnter={() => {
setThreeMenuOn(true);
}}
onMouseLeave={() => {
setThreeMenuOn(false);
}}
>
<img
src={`/images/${threeMenuIcon}.svg`}
alt=""
className="iconBottomBar"
/>
</span>
<span className="hoverIconCover">
<img
src={`/images/${settingsMenuIcon}.svg`}
alt=""
className="iconBottomBar"
alt=''
className={styles.leftIcons}
onMouseEnter={() => {
setSettingsMenuOn(true);
}}
onMouseLeave={() => {
setSettingsMenuOn(false);
}}
aria-hidden='true'
/>
</span>
</div>
<div className="middle">
<div className={styles.middle}>
<img
src={`/images/${videoIcon}.svg`}
alt=""
className="iconBottomBar"
alt=''
className={styles.middleIcons}
onClick={() => {
const tempState = videoOn;
setVideoOn(!tempState);
}}
aria-hidden='true'
/>
<img
src={`/images/${streamingIcon}.svg`}
alt=""
className="iconBottomBar"
alt=''
className={styles.middleIcons}
onClick={() => {
setStreaming(!streaming);
}}
aria-hidden='true'
/>
<img
src={`/images/${microphoneIcon}.svg`}
alt=""
className="iconBottomBar"
alt=''
className={styles.middleIcons}
onClick={() => {
setMicrophoneOn(!microphoneOn);
}}
aria-hidden='true'
/>
</div>
<div className="right">
<div className={styles.right}>
<img
src={`/images/${usersIcon}.svg`}
alt=""
className="iconBottomBar"
alt=''
className={styles.rightIcons}
onClick={() => {
setShowLeftBar(!showLeftBar);
}}
aria-hidden='true'
/>
<img
src={`/images/${messageIcon}.svg`}
alt=""
className="iconBottomBar"
alt=''
className={styles.rightIcons}
onClick={() => {
setShowRightBar(!showRightBar);
}}
aria-hidden='true'
/>
</div>
</div>
</Container>
</div>
);
};
const bottomBarHeight = 60;
type TContainerProps = { showLeftBar: boolean; streaming: boolean };
const Container = styled.div<TContainerProps>`
background: #000;
.videoContainer {
height: calc(100vh - ${bottomBarHeight}px);
padding: 20px;
.videoContainerInner {
width: 100%;
height: 100%;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
}
.videoMenuLeft {
flex-grow: 0;
flex-shrink: 0;
width: 200px;
height: 100%;
border-radius: 10px;
display: flex;
flex-direction: column;
overflow-y: scroll;
&::-webkit-scrollbar {
display: none;
}
& {
-ms-overflow-style: none;
scrollbar-width: none;
}
.videoItem {
flex-shrink: 0;
flex-grow: 0;
width: 100%;
height: 200px;
color: #fff;
background: #333;
border-radius: 10px;
margin-bottom: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
font-weight: 900;
}
}
.videoMenuMiddle {
flex-grow: 1;
height: 100%;
width: 100%;
margin: 0 20px;
${({ showLeftBar }): string =>
showLeftBar ? `margin-left: 20px` : `margin-left: 0`};
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
border-radius: 10px;
position: relative;
.videoObject {
width: 100% !important;
height: auto !important;
transform: scaleX(-1);
}
.videoPlaceholder {
background: #444;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: #fff;
font-size: 3rem;
}
.canvasObject {
position: absolute;
width: 100%;
height: 100%;
transform: scaleX(-1);
}
}
.videoMenuRight {
flex-grow: 0;
flex-shrink: 0;
background: #333;
width: 300px;
height: 100%;
border-radius: 10px;
display: flex;
justify-content: space-between;
flex-direction: column;
.chatItemCover {
flex-grow: 1;
font-size: 18px;
display: flex;
align-items: flex-start;
justify-content: flex-start;
flex-direction: column;
padding: 15px 15px 0px;
.chatItem {
display: inline-block;
margin-bottom: 15px;
border-radius: 10px 20px 20px 0px;
color: #fff;
background: #666;
padding: 0.5em 1em;
font-weight: 900;
}
}
.chatInput {
flex-grow: 0;
flex-shrink: 0;
border-top: 10px solid #000 !important;
.chatInputItem {
opacity: 1;
border: none;
outline: none;
width: 100%;
padding: 0.8em;
background: #444 !important;
background-image: none !important;
border-radius: 0 0 10px 10px;
font-size: 18px;
color: #fff;
font-weight: 900;
}
}
}
}
.bottomBar {
width: 100%;
height: ${bottomBarHeight}px;
background: #333;
display: flex;
align-items: center;
justify-content: center;
padding: 0 20px;
.iconBottomBar {
cursor: pointer;
height: 40px;
width: auto;
margin: 0 10px;
}
.left {
flex-grow: 1;
.hoverIconCover {
display: inline-block;
margin: 0 10px;
}
.iconBottomBar {
margin: 0;
}
}
.middle {
display: flex;
align-items: center;
justify-content: center;
background: #000;
padding: 10px 20px;
border-radius: 10px;
.iconBottomBar {
height: 30px;
}
}
.right {
flex-grow: 1;
display: flex;
align-items: center;
justify-content: flex-end;
}
}
`;
export default Body;
export default Index;
import Link from "next/link";
import React from "react";
import styled from "styled-components";
import Loader from '@components/Loader';
import { UserContext } from '@ctx/UserContext';
import styles from '@pages_style/login.module.sass';
import Image from 'next/image';
import React, { useContext, useEffect } from 'react';
import google from '../../public/images/google.svg';
import workspace from '../../public/images/workspace.svg';
const Login = (): JSX.Element => {
const { adminRoute, loading, signIn } = useContext(UserContext);
useEffect(() => {
adminRoute();
}, [adminRoute]);
return (
<Container>
<form action="" className="form">
<input
type="text"
placeholder="Input your name"
className="input_username"
/>
<Link href="/auth">
<input type="submit" value="Submit" />
</Link>
</form>
</Container>
<div className={styles.container}>
<div className={styles.imageCover}>
<Image src={workspace} alt='workspace' layout='intrinsic' />
</div>
<div className={styles.welcome}>
Welcome to <b>DAVINCI</b>
</div>
<button
onClick={() => {
signIn();
}}
className={styles.loginBtn}
type='button'>
<div className={styles.googleIconCover}>
<Image src={google} alt='googleImg' />
</div>
Login
</button>
<Loader show={loading} />
</div>
);
};
const Container = styled.div`
width: 100%;
height: 100vh;
background: #fff;
display: flex;
align-items: center;
justify-content: center;
.form {
background: #f1f1f1;
border: 1px solid #ccc;
width: 50%;
height: 50%;
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
}
.input_username {
margin-bottom: 16px;
}
`;
export default Login;
import Button from '@components/Button';
import Input from '@components/Input';
import { UserContext } from '@ctx/UserContext';
import useDebounce from '@hooks/useDebounce';
import { firestore } from '@lib/firebase';
import styles from '@pages_style/register.module.sass';
import { isEmpty, passwordValidator, userNameValidator, userNameValidatorBoolean } from '@util/normalize';
import React, { useCallback, useContext, useEffect, useState } from 'react';
import { colors } from 'styles/baseStyles';
type TAvailability = 'checking' | 'available' | 'already_taken' | 'error' | 'initial';
const Register = (): JSX.Element | null => {
const [displayName, setDisplayName] = useState('');
const debouncedDisplayName = useDebounce(displayName, 250) as string;
const [displayNameError, setDisplayNameError] = useState('');
const [password, setPassword] = useState('');
const [passwordError, setPasswordError] = useState('');
const [userNameAvailability, setUserNameAvailability] = useState<TAvailability>('checking');
const isInValid = isEmpty(displayName) || isEmpty(password) || !isEmpty(displayNameError) || !isEmpty(passwordError);
useEffect(() => {
setDisplayNameError(userNameValidator(displayName));
setPasswordError(passwordValidator(password));
}, [displayName, password]);
const { isLogged, userData } = useContext(UserContext);
const checkUsername = useCallback(async () => {
if (userNameValidatorBoolean(debouncedDisplayName)) {
try {
setUserNameAvailability('checking');
const ref = firestore.doc(`usernames/${debouncedDisplayName}`);
const { exists } = await ref.get();
if (!exists) {
setUserNameAvailability('available');
} else {
setUserNameAvailability('already_taken');
}
} catch (error) {
setUserNameAvailability('error');
}
} else {
setUserNameAvailability('initial');
}
}, [debouncedDisplayName]);
useEffect(() => {
checkUsername();
}, [checkUsername]);
useEffect(() => {
if (userData.displayName) {
setDisplayName(userData.displayName);
}
}, [userData]);
let availability = '';
let availability_color = colors.red;
if (userNameAvailability === 'already_taken') {
availability = `${debouncedDisplayName} is already taken!`;
availability_color = colors.red;
} else if (userNameAvailability === 'available') {
availability = `${debouncedDisplayName} is available`;
availability_color = colors.greenDark;
} else if (userNameAvailability === 'checking') {
availability = 'checking...';
availability_color = colors.black;
} else if (userNameAvailability === 'error') {
availability = 'System error type agin!';
availability_color = colors.red;
} else {
availability = '';
availability_color = colors.black;
}
if (!isLogged) return null;
return (
<div className={styles.container}>
<form className={styles.containerInner}>
<Input
placeholder='User Name'
label='User name :'
errorMsg={displayNameError}
value={displayName}
onChange={val => setDisplayName(val)}
type='text'
autoComplete='username'
required
/>
<Input
placeholder='User Name'
label=''
errorMsg=''
value={displayName}
onChange={val => setDisplayName(val)}
type='hidden'
autoComplete='username'
required
/>
<Input
placeholder='Password'
label='Password :'
errorMsg={passwordError}
value={password}
onChange={val => setPassword(val)}
type='password'
autoComplete='new-password'
required
/>
<Button
type='submit'
text='Register'
isDisabled={isInValid}
onClickHandler={() => {
if (!isInValid) {
// eslint-disable-next-line no-console
console.log('test=-->');
}
}}
/>
<div style={{ color: availability_color }}>{availability}</div>
</form>
</div>
);
};
export default Register;
*,
*::after,
*::before {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
box-sizing: border-box;
}
html,
body {
font-family: "Abel", sans-serif;
font-size: 16px;
line-height: 1.6;
margin: 0;
padding: 0;
background-color: #000;
color: #000;
width: 100%;
height: 100%;
-webkit-touch-callout: none;
user-select: none;
}
html {
overflow-x: hidden;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: 100%;
font-weight: 400;
}
h1 {
font-size: 36px;
}
h2 {
font-size: 30px;
}
h3 {
font-size: 24px;
}
h4 {
font-size: 20px;
}
h5 {
font-size: 18px;
}
h6 {
font-size: 16px;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Segoe UI", Arial, sans-serif;
font-weight: 400;
margin: 10px 0;
}
hr {
border: 0;
border-top: 1px solid #eee;
margin: 20px 0;
}
a {
color: inherit;
text-decoration: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}
em {
font-style: italic;
}
p {
margin: 0 0 20px 0;
font-weight: 400;
font-size: 15px;
}
i {
line-height: 0;
text-align: center;
vertical-align: middle;
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
background-color: #000;
}
::-webkit-scrollbar {
width: 8px;
background-color: #000;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
background-color: #ccc;
background-clip: content-box;
}
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}
@import './common/_util'
.container
display: flex
align-items: center
justify-content: center
flex-direction: column
gap: 16px
width: 100vw
height: 100vh
.imageCover
width: calc(100% - 32px)
height: auto
display: flex
align-items: center
justify-content: center
+minDesktopSM
width: 400px
.message
font-size: 1.5rem
padding: 1em 0.5em
margin-top: 1em
text-align: center
font-weight: 600
.btnCtr
width: 200px
+minDesktopSM
width: 300px
// --- Breakpoints
export const maxMobile = 576; // (for phones)
export const minTablet = 576; // (for tablet)
export const minTabletLC = 769; // (landscape of tablet)
export const minDesktopSM = 992; // (for small Laptop)
export const minDesktopLG = 1201; // (for large laptop)
export const min4K = 1441; // (for 4k)
export const colors = {
activeText: '#08090a',
backgroundColor: '#eef0f1',
disabledText: '#d3d3d3',
navbarBackground: '#fff',
black: '#08090a',
blue: '#20639b',
blueDark: '#173f5f',
goldenBrown: '#996515',
gray: '#dad8db',
grayDark: '#b5bdc4',
grayLight: '#f7f7f7',
green: '#88d840',
greenDark: '#247209',
greenLight: '#67b826',
orange: '#f77f00',
red: '#e10600',
redDark: '#800500',
royalGold: '#f5bd02',
white: '#fff',
yellow: '#fcbf49',
};
html
line-height: 1.15
-webkit-text-size-adjust: 100%
body
margin: 0
main
display: block
h1
font-size: 2em
margin: 0.67em 0
hr
box-sizing: content-box
height: 0
overflow: visible
pre
font-family: monospace, monospace
font-size: 1em
a
background-color: transparent
abbr[title]
border-bottom: none
text-decoration: underline
text-decoration: underline dotted
b,
strong
font-weight: bolder
code,
kbd,
samp
font-family: monospace, monospace
font-size: 1em
small
font-size: 80%
sub,
sup
font-size: 75%
line-height: 0
position: relative
vertical-align: baseline
sub
bottom: -0.25em
sup
top: -0.5em
img
border-style: none
button,
input,
optgroup,
select,
textarea
font-family: inherit
font-size: 100%
line-height: 1.15
margin: 0
button,
input
overflow: visible
button,
select
text-transform: none
button,
[type='button'],
[type='reset'],
[type='submit']
-webkit-appearance: button
button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner
border-style: none
padding: 0
button:-moz-focusring,
[type='button']:-moz-focusring,
[type='reset']:-moz-focusring,
[type='submit']:-moz-focusring
outline: 1px dotted ButtonText
fieldset
padding: 0.35em 0.75em 0.625em
legend
box-sizing: border-box
color: inherit
display: table
max-width: 100%
padding: 0
white-space: normal
progress
vertical-align: baseline
textarea
overflow: auto
[type='checkbox'],
[type='radio']
box-sizing: border-box
padding: 0
[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button
height: auto
[type='search']
-webkit-appearance: textfield
outline-offset: -2px
[type='search']::-webkit-search-decoration
-webkit-appearance: none
::-webkit-file-upload-button
-webkit-appearance: button
font: inherit
details
display: block
summary
display: list-item
template
display: none
[hidden]
display: none
// Variables -->......................................
$activeText: #08090a
$backgroundColor: #eef0f1
$bg: #eef0f1
$black: #08090a
$black1: #000
$black2: #333
$black3: #444
$black4: #666
$blue: #20639b
$blue_dark: #3b49df
$dark_blue: #173f5f
$dark_gray: #b5bdc4
$dark_green: #247209
$dark_red: #800500
$disabledText: #d3d3d3
$goldenBrown: #996515
$gray: #dad8db
$gray: #b5bdc4
$green: #88d840
$green: #3bdf72
$light_gray: #f7f7f7
$light_green: #67b826
$navbarBackground: #fff
$orange: #f77f00
$red: #e10600
$red: #df3b3b
$royalGold: #f5bd02
$text: #08090a
$white: #fff
$yellow: #fcbf49
$maxMobile: 576 // (for phones)
$minTablet: 576 // (for tablet)
$minTabletLC: 769 // (landscape of tablet)
$minDesktopSM: 992 // (for small Laptop)
$minDesktopLG: 1201 // (for large laptop)
$min4K: 1441 // (for 4k)
$barHeight: 4
$barWidth: $barHeight * 7
$marginTwo: $barHeight * 2
$marginFour: $barHeight * 4
$marginFive: $barHeight * 5
$menuHeight: 60
// Mixins -->......................................
=maxMobile
@media only screen and (max-width: $maxMobile + px)
@content
=minTablet
@media only screen and (min-width: $minTablet + px)
@content
=minTabletLC
@media only screen and (min-width: $minTabletLC + px)
@content
=minDesktopSM
@media only screen and (min-width: $minDesktopSM + px)
@content
=minDesktopLG
@media only screen and (min-width: $minDesktopLG + px)
@content
=min4K
@media only screen and (min-width: $min4K + px)
@content
=keyframes($name)
@-webkit-keyframes #{$name}
@content
@-moz-keyframes #{$name}
@content
@-ms-keyframes #{$name}
@content
@keyframes #{$name}
@content
// COMMON CLASSES -----------------------------------
=clearfix
&:after,
&:before
content: ""
display: table
&:after
clear: both
=flex_center_vertically($height)
display: flex
justify-content: center
flex-direction: column
height: $height
=text_center($line-height)
text-align: center
line-height: $line-height
=absolute_center
position: absolute
top: 50%
left: 50%
transform: translate(-50%, -50%)
=flex_center
display: flex
justify-content: center
align-items: center
=hidden
display: none
=show
display: block
=noSelect
-webkit-touch-callout: none
user-select: none
=noCallout
-webkit-touch-callout: none
=noAction
touch-action: none
=imgNoClick
position: relative
=imgNoClickCover
position: absolute
top: 0
bottom: 0
left: 0
right: 0
height: 100%
width: 100%
=focus_ring_issue
outline: -webkit-focus-ring-color auto 5px
// write this for &:focus
=tap_highlight_issue
-webkit-tap-highlight-color: rgba(0, 0, 0, 0)
-webkit-tap-highlight-color: transparent
=break_words
word-wrap: break-word
=wrap_words
overflow-wrap: break-word
word-wrap: break-word
hyphens: auto
=reset_button
appearance: none
border: none
background: none
@import './common/_util'
.container
display: flex
align-items: center
justify-content: center
flex-wrap: wrap
max-width: $minDesktopLG + px
padding: 0 16px
margin: auto
.tabHeader
display: flex
align-items: center
justify-content: center
column-gap: 32px
row-gap: 8px
width: 100%
flex-wrap: wrap
margin: 32px 0 16px
.tabHeaderItem
cursor: pointer
text-transform: uppercase
color: $disabledText
.active
color: $activeText
.tabBody
width: 100%
.deliveryDesc
margin-top: 0
display: none
+minDesktopSM
margin-top: 60px
display: flex
align-items: center
justify-content: center
gap: 40px
flex-wrap: wrap
.deliveryDescItem
display: flex
align-items: center
justify-content: center
gap: 10px
flex-wrap: wrap
border-bottom: 2px dotted $black
color: $black
width: 300px
height: 60px
.deliveryDescIcon
width: 40px
height: 40px
@import './common/_util'
@import './common/_normalize'
*,
*::after,
*::before
+tap_highlight_issue
box-sizing: border-box
html,
body
font-family: sans-serif
font-size: 16px
line-height: 1.6
margin: 0
padding: 0
background-color: $white
color: $black
width: 100%
height: 100%
-webkit-touch-callout: none
user-select: none
html
overflow-x: hidden
body
-webkit-font-smoothing: antialiased
-webkit-text-size-adjust: 100%
font-weight: 400
h1
font-size: 36px
h2
font-size: 30px
h3
font-size: 24px
h4
font-size: 20px
h5
font-size: 18px
h6
font-size: 16px
h1,
h2,
h3,
h4,
h5,
h6
font-family: 'Segoe UI', Arial, sans-serif
font-weight: bold
margin: 10px 0
hr
border: 0
border-top: 1px solid $gray
margin: 20px 0
a
color: inherit
text-decoration: none
table
border-collapse: collapse
border-spacing: 0
td,
th
padding: 0
p
margin: 0 0 20px 0
font-weight: 400
font-size: 15px
::-webkit-scrollbar-track
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3)
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3)
background-color: $black
::-webkit-scrollbar
width: 8px
background-color: $black
::-webkit-scrollbar-thumb
border-radius: 10px
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3)
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3)
background-color: $gray
background-clip: content-box
input[type='hidden']
margin: 0 !important
line-height: 0 !important
padding: 0 !important
width: 0 !important
height: 0 !important
button
+reset_button
@import './common/_util'
.container
background: $black1
.videoContainer
height: calc(100vh - 60px)
padding: 20px
.videoContainerInner
width: 100%
height: 100%
border-radius: 10px
display: flex
align-items: center
justify-content: center
.videoMenuLeft
flex-grow: 0
flex-shrink: 0
width: 200px
height: 100%
border-radius: 10px
display: flex
flex-direction: column
overflow-y: scroll
&::-webkit-scrollbar
display: none
-ms-overflow-style: none
scrollbar-width: none
.videoItem
flex-shrink: 0
flex-grow: 0
width: 100%
height: 200px
color: $white
background: $black2
border-radius: 10px
margin-bottom: 10px
display: flex
align-items: center
justify-content: center
font-size: 20px
font-weight: 900
.videoMenuMiddle
flex-grow: 1
height: 100%
width: 100%
margin: 0 20px
overflow: hidden
display: flex
align-items: center
justify-content: center
border-radius: 10px
position: relative
.videoObject
width: 100% !important
height: auto !important
transform: scaleX(-1)
.videoPlaceholder
background: $black3
width: 100%
height: 100%
display: flex
align-items: center
justify-content: center
flex-direction: column
color: $white
font-size: 3rem
.canvasObject
position: absolute
width: 100%
height: 100%
transform: scaleX(-1)
.videoMenuRight
flex-grow: 0
flex-shrink: 0
background: $black2
width: 300px
height: 100%
border-radius: 10px
display: flex
justify-content: space-between
flex-direction: column
.chatItemCover
flex-grow: 1
font-size: 18px
display: flex
align-items: flex-start
justify-content: flex-start
flex-direction: column
padding: 15px 15px 0px
.chatItem
display: inline-block
margin-bottom: 15px
border-radius: 10px 20px 20px 0px
color: $white
background: $black4
padding: 0.5em 1em
font-weight: 900
.chatInput
flex-grow: 0
flex-shrink: 0
border-top: 10px solid $black !important
.chatInputItem
opacity: 1
border: none
outline: none
width: 100%
padding: 0.8em
background: $black3!important
background-image: none !important
border-radius: 0 0 10px 10px
font-size: 18px
color: $white
font-weight: 900
.bottomBar
width: 100%
height: 60px
background: $black2
display: flex
align-items: center
justify-content: center
padding: 0 20px
.iconBottomBar
cursor: pointer
height: 40px
width: auto
.left
flex-grow: 1
display: flex
align-items: center
justify-content: flex-start
column-gap: 20px
.leftIcons
cursor: pointer
height: 30px
width: auto
.middle
display: flex
align-items: center
justify-content: center
background: $black1
padding: 10px 20px
border-radius: 10px
column-gap: 20px
.middleIcons
height: 30px
width: auto
cursor: pointer
.right
flex-grow: 1
display: flex
align-items: center
justify-content: flex-end
column-gap: 20px
.rightIcons
cursor: pointer
height: 30px
width: auto
@import './common/_util'
.loaderCover
height: 50px
.container
display: flex
align-items: center
justify-content: center
flex-direction: column
width: 100vw
height: 100vh
.loginBtn
color: $black
cursor: pointer
border: 1px solid $black
display: flex
align-items: center
justify-content: center
width: 200px
height: 60px
border-radius: 50px
font-size: 1.5rem
font-weight: 600
background: $white
margin-bottom: 1rem
.googleIconCover
width: 40px
height: 40px
margin-right: 8px
position: relative
.welcome
font-size: 1.5rem
margin-bottom: 1rem
+minDesktopSM
font-size: 2rem
.imageCover
width: calc(100% - 32px)
height: auto
display: flex
align-items: center
justify-content: center
margin-bottom: 1rem
+minDesktopSM
width: 400px
@import './common/_util'
.container
display: flex
align-items: center
justify-content: center
width: 100vw
height: 100vh
.containerInner
display: flex
align-items: center
justify-content: center
flex: 0 1 auto
width: 250px
flex-direction: column
gap: 16px
@import '../../common/_util'
.container
background: $black
color: $white
height: 40px
width: 100%
display: flex
align-items: center
justify-content: center
border-radius: 4px
margin-top: 16px
cursor: pointer
.disabled
background: $gray
cursor: not-allowed
.submitBtn
appearance: none
outline: none
border: none
background: $black
color: $white
height: 40px
width: 100%
display: flex
align-items: center
justify-content: center
border-radius: 4px
margin-top: 16px
cursor: pointer
.disabled
background: $gray
cursor: not-allowed
@import '../../common/_util'
.container
width: $barWidth +px
height: $marginFive + px
position: relative
margin: 50px 0
transform: rotate(0deg)
transition: 0.5s ease-in-out
cursor: pointer
+minDesktopSM
display: none
& > span
display: block
position: absolute
height: $barHeight + px
width: 100%
background: $black
border-radius: $barHeight + px
opacity: 1
left: 0
transform: rotate(0deg)
transition: 0.25s ease-in-out
& span:nth-child(1)
top: 0px
& span:nth-child(2),
& span:nth-child(3)
top: $marginTwo + px
& span:nth-child(4)
top: $marginFour + px
&.open span:nth-child(1)
top: $marginTwo + px
width: 0%
left: 50%
&.open span:nth-child(2)
transform: rotate(45deg)
&.open span:nth-child(3)
transform: rotate(-45deg)
&.open span:nth-child(4)
top: $marginTwo + px
width: 0%
left: 50%
@import '../../common/_util'
@keyframes ellipsis
0%
content: ''
25%
content: '.'
50%
content: '..'
75%
content: '...'
100%
content: ''
.container
&::after
display: inline-block
animation: ellipsis steps(1, end) 1s infinite
content: ''
@import '../../common/_util'
.container
width: 100%
font-weight: normal
position: relative
.inputElementCtr
position: relative
.labelElement
display: inline-block
margin-bottom: 8px
font-weight: bold
.errorMsg
display: none
margin-top: 8px
font-size: 0.8571rem
color: $red
.error
display: block
.cross
position: absolute
top: 50%
right: 0px
width: 30px
height: 40px
transform: translateY(-50%)
user-select: none
cursor: pointer
&::before,
&::after
position: absolute
left: 50%
top: 50%
content: ''
height: 16px
width: 1px
background-color: $black
&::before
transform: translate(-50%, -50%) rotate(45deg)
&::after
transform: translate(-50%, -50%) rotate(-45deg)
.inputElement
display: block
width: 100%
padding: 0.375rem 0.75rem
padding-right: 30px
font-size: 1rem
font-weight: 400
line-height: 1.5
height: 40px
color: $black
background-color: $white
background-clip: padding-box
border: 1px solid $dark_gray
appearance: none
border-radius: 3px
transition: border-color 0.15s ease-in-out
outline: none
caret-color: $blue
display: block
line-height: 38px
&:focus
border-color: $dark_gray
&, .error
border: 1px solid $red
&:focus
border-color: $red
@import '../../common/_util'
.container
border-radius: 50%
display: flex
align-items: center
justify-content: center
@import '../../common/_util'
@keyframes spin
0%
transform: rotate(0deg)
100%
transform: rotate(360deg)
.container
border: 10px solid $gray
border-top: 10px solid $black
border-radius: 50%
width: 50px
height: 50px
animation: spin 0.5s linear infinite
opacity: 0
.show
opacity: 1
@import '../../common/_util'
.container
display: flex
align-items: center
justify-content: center
flex-direction: column
gap: 16px
width: 100vw
height: 100vh
.imageCover
width: calc(100% - 32px)
height: auto
display: flex
align-items: center
justify-content: center
+minDesktopSM
width: 400px
.message
font-size: 1.5rem
padding: 1em 0.5em
margin-top: 1em
text-align: center
font-weight: 600
.btnCtr
width: 200px
+minDesktopSM
width: 300px
@import '../../common/_util'
.container
height: 100vh
background: $black
color: $white
display: flex
justify-content: flex-start
flex-direction: column
.profileImg
height: auto
border-radius: 50%
border: 2px solid $gray
.profileCover
display: flex
align-items: center
justify-content: center
padding: 16px 0
.profileName
display: flex
align-items: center
justify-content: center
.type
display: flex
align-items: center
justify-content: center
text-transform: uppercase
font-weight: 900
.separator
height: 2px
background: $dark_gray
border-radius: 4px
width: 80%
margin: 16px auto
.menuCover
display: flex
align-items: center
justify-content: center
flex-direction: column
position: relative
.topArrow
content: ''
position: absolute
right: -1px
height: 0
width: 0
border: 30px solid transparent
border-right: 10px solid $white
pointer-events: none
transition: top 0.2s ease-in-out
transform-origin: top right
.backgroundSelection
content: ''
position: absolute
right: 0
height: $menuHeight + px
width: 100%
background: $royalGold
pointer-events: none
transition: top 0.2s ease-in-out
transform-origin: top right
.menuItem
text-transform: uppercase
cursor: pointer
width: 100%
height: $menuHeight + px
display: flex
align-items: center
justify-content: flex-start
padding: 0 20px
color: $white
pointer-events: auto
position: relative
z-index: 1
font-weight: 400
gap: 8px
> svg
flex: none
.active
color: $black
font-weight: 600
.bottomContainer
display: flex
align-items: center
justify-content: flex-end
flex-direction: column
flex-grow: 1
padding: 16px 0
.zoomCtr
text-transform: uppercase
display: flex
align-items: center
justify-content: center
gap: 8px
color: $white
> svg
cursor: pointer
.logoutText
font-weight: 600px
text-transform: uppercase
.zoomOutText
font-weight: 600px
text-transform: uppercase
cursor: pointer
.logoutCtr
color: $white
cursor: pointer
@import '../../common/_util'
.container
height: 60px
width: 100%
background: $navbarBackground
display: flex
align-items: center
justify-content: center
.middleContainer
display: flex
align-items: center
justify-content: space-between
flex: 0 1 ($minDesktopLG + px)
padding: 0 16px
.title
.davinci_logo
height: 20px
width: auto
.menu
display: none
+minDesktopSM
display: flex
align-items: center
justify-content: center
gap: 16px
.menuItem
text-transform: uppercase
.langBar
padding: 0 20px
border-radius: 50px
background: $black
@import '../../common/_util'
.container
display: flex
align-items: stretch
justify-content: center
flex-wrap: wrap
.sample
max-width: 500px
height: auto
display: block
+maxMobile
width: calc(100vw - 32px)
.leftContainer
flex-basis: 100%
display: flex
align-items: center
justify-content: center
+minDesktopSM
flex-basis: 50%
justify-content: flex-end
.rightContainer
flex-basis: 100%
padding: 32px 0
max-width: 500px
display: flex
justify-content: space-between
flex-direction: column
+minDesktopSM
flex-basis: 50%
padding: 0 32px
.topic
text-transform: uppercase
align-self: center
text-align: center
font-size: 1rem
font-weight: 500
position: relative
padding-bottom: 8px
margin-bottom: 32px
&::after
content: ''
position: absolute
left: 50%
bottom: 2px
transform: translate(-50%, -50%)
width: 50%
height: 2px
background: $goldenBrown
border-radius: 6px
+minDesktopSM
font-size: 1.6rem
.figureCount
display: grid
grid-template-columns: repeat(3, 1fr)
gap: 16px
margin: 16px 0
.figureCountItem
padding: 8px
border-radius: 4px
text-align: center
font-weight: 600
cursor: pointer
background: $gray
color: $black
.selected
background: $black
color: $white
.priceTable
border-top: 1px solid $goldenBrown
display: grid
grid-template-columns: repeat(2, auto)
.priceDesc
padding: 16px 0
.price
display: flex
align-items: center
justify-content: flex-end
gap: 8px
.previousPrice
text-decoration: line-through
font-size: 0.8rem
.nowPrice
color: $red
font-weight: 600
.totalPriceCover
border-top: 1px solid $goldenBrown
display: flex
align-items: center
justify-content: flex-end
.totalPrice
border-bottom: 2px solid $goldenBrown
position: relative
padding-bottom: 2px
color: $red
font-weight: 900
margin-bottom: 16px
&::after
content: ''
position: absolute
left: 50%
bottom: 1px
transform: translate(-50%, -50%)
width: 100%
height: 2px
background: $goldenBrown
border-radius: 6px
.controlBtn
width: 100%
display: flex
align-items: center
justify-content: center
flex-wrap: wrap-reverse
margin: 16px 0
gap: 16px
.expressDelivery
display: flex
align-items: center
justify-content: center
.delivery_in
text-transform: capitalize
.delivery_days
color: $green
font-weight: 700
.blink
width: 10px
height: 10px
background: $green
border-radius: 100%
margin-right: 10px
.backBtn
border: 1px solid $goldenBrown
width: 200px
height: 50px
display: flex
align-items: center
justify-content: center
border-radius: 50px
font-weight: 600
color: $goldenBrown
background: $white
text-transform: uppercase
.nextBtn
border: 1px solid $goldenBrown
width: 200px
height: 50px
display: flex
align-items: center
justify-content: center
border-radius: 50px
font-weight: 600
color: $white
background: $goldenBrown
text-transform: uppercase
@import '../../common/_util'
.container
font-size: 1.5rem
font-weight: 600
display: flex
align-items: center
justify-content: center
width: 100vw
height: 100vh
.ellipsisCtr
width: 150px
{
"compilerOptions": {
"baseUrl": ".",
"allowJs": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"importHelpers": true,
"isolatedModules": true,
"jsx": "preserve",
"lib": ["dom", "es7"],
"lib": ["dom", "dom.iterable", "esnext"],
"module": "esnext",
"moduleResolution": "node",
"noEmit": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"plugins": [
{
"name": "@typescript-eslint"
}
],
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"suppressImplicitAnyIndexErrors": true,
"target": "es5"
"target": "es5",
"allowSyntheticDefaultImports": true, // me
"importHelpers": true, // me
"noImplicitAny": true, // me
"noImplicitReturns": true, // me
"noImplicitThis": true, // me
"noUnusedLocals": true, // me
"suppressImplicitAnyIndexErrors": true, // me
"baseUrl": ".", //me
"paths": {
"@components_style/*": ["styles/ui/components/*"],
"@components/*": ["src/common/ui/components/*"],
"@ctx/*": ["src/common/ctx/*"],
"@data/*": ["src/common/data/*"],
"@hooks/*": ["src/common/hooks/*"],
"@images/*": ["public/images/*"],
"@layouts_style/*": ["styles/ui/layouts/*"],
"@layouts/*": ["src/common/ui/layouts/*"],
"@lib/*": ["src/common/lib/*"],
"@pages_style/*": ["styles/*"],
"@styles/*": ["styles/*"],
"@svg/*": ["src/common/svg/*"],
"@translations/*": ["src/common/translations/*"],
"@ts/*": ["src/common/ts/*"],
"@util/*": ["src/common/util/*"],
"@public/*": ["public/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
"exclude": ["node_modules", ".github", ".vscode"],
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]
}
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment