szafran98 commited on
Commit
8a1f4e2
·
0 Parent(s):

initial commit

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .editorconfig +9 -0
  2. .gitattributes +1 -0
  3. .gitignore +30 -0
  4. .prettierrc.json +6 -0
  5. .vscode/extensions.json +3 -0
  6. README.md +14 -0
  7. env.d.ts +9 -0
  8. eslint.config.ts +22 -0
  9. index.html +16 -0
  10. package-lock.json +0 -0
  11. package.json +36 -0
  12. public/favicon.ico +0 -0
  13. src/App.vue +11 -0
  14. src/assets/_colors.scss +121 -0
  15. src/assets/_reset.scss +85 -0
  16. src/assets/_variables.scss +36 -0
  17. src/assets/_variables_override.scss +6 -0
  18. src/assets/base.scss +35 -0
  19. src/assets/img/placeholder-loading.jpg +0 -0
  20. src/assets/img/wrong-format.webp +0 -0
  21. src/assets/main.scss +43 -0
  22. src/assets/mixins/_box.scss +12 -0
  23. src/assets/mixins/_buttons.scss +967 -0
  24. src/assets/mixins/_checkbox.scss +104 -0
  25. src/assets/mixins/_form_group.scss +33 -0
  26. src/assets/mixins/_gradient_line.scss +58 -0
  27. src/assets/mixins/_grid_system.scss +16 -0
  28. src/assets/mixins/_index.scss +20 -0
  29. src/assets/mixins/_input.scss +80 -0
  30. src/assets/mixins/_label.scss +11 -0
  31. src/assets/mixins/_links.scss +301 -0
  32. src/assets/mixins/_markdown_content.scss +116 -0
  33. src/assets/mixins/_post.scss +241 -0
  34. src/assets/mixins/_radio.scss +71 -0
  35. src/assets/mixins/_scrollbars.scss +25 -0
  36. src/assets/mixins/_statuses.scss +103 -0
  37. src/assets/mixins/_table.scss +82 -0
  38. src/assets/mixins/_tags.scss +91 -0
  39. src/assets/mixins/_textarea.scss +38 -0
  40. src/assets/mixins/_toggle_switch.scss +73 -0
  41. src/assets/mixins/_typography.scss +172 -0
  42. src/assets/mixins/_verification_input.scss +44 -0
  43. src/assets/svg/alert.svg +3 -0
  44. src/assets/svg/arrow.svg +3 -0
  45. src/assets/svg/big-article-darkener.svg +12 -0
  46. src/assets/svg/categories/duplicates.svg +3 -0
  47. src/assets/svg/categories/people.svg +3 -0
  48. src/assets/svg/categories/related.svg +3 -0
  49. src/assets/svg/categories/similar.svg +3 -0
  50. src/assets/svg/check-off.svg +3 -0
.editorconfig ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ [*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
2
+ charset = utf-8
3
+ indent_size = 4
4
+ indent_style = space
5
+ insert_final_newline = true
6
+ trim_trailing_whitespace = true
7
+
8
+ end_of_line = lf
9
+ max_line_length = 100
.gitattributes ADDED
@@ -0,0 +1 @@
 
 
1
+ * text=auto eol=lf
.gitignore ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ .DS_Store
12
+ dist
13
+ dist-ssr
14
+ coverage
15
+ *.local
16
+
17
+ /cypress/videos/
18
+ /cypress/screenshots/
19
+
20
+ # Editor directories and files
21
+ .vscode/*
22
+ !.vscode/extensions.json
23
+ .idea
24
+ *.suo
25
+ *.ntvs*
26
+ *.njsproj
27
+ *.sln
28
+ *.sw?
29
+
30
+ *.tsbuildinfo
.prettierrc.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "$schema": "https://json.schemastore.org/prettierrc",
3
+ "semi": false,
4
+ "singleQuote": true,
5
+ "printWidth": 100
6
+ }
.vscode/extensions.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "recommendations": ["Vue.volar"]
3
+ }
README.md ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Lenso Face Search
3
+ emoji: 👁
4
+ colorFrom: yellow
5
+ colorTo: red
6
+ sdk: static
7
+ pinned: false
8
+ license: mit
9
+ short_description: test
10
+ app_build_command: npm run build
11
+ app_file: dist/index.html
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
env.d.ts ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ /// <reference types="vite/client" />
2
+
3
+ export {}
4
+
5
+ declare module '*.vue' {
6
+ import type {DefineComponent} from 'vue'
7
+ const component: DefineComponent<object, object, any>
8
+ export default component
9
+ }
eslint.config.ts ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { globalIgnores } from 'eslint/config'
2
+ import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
3
+ import pluginVue from 'eslint-plugin-vue'
4
+ import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'
5
+
6
+ // To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
7
+ // import { configureVueProject } from '@vue/eslint-config-typescript'
8
+ // configureVueProject({ scriptLangs: ['ts', 'tsx'] })
9
+ // More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup
10
+
11
+ export default defineConfigWithVueTs(
12
+ {
13
+ name: 'app/files-to-lint',
14
+ files: ['**/*.{ts,mts,tsx,vue}'],
15
+ },
16
+
17
+ globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']),
18
+
19
+ pluginVue.configs['flat/essential'],
20
+ vueTsConfigs.recommended,
21
+ skipFormatting,
22
+ )
index.html ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <link rel="icon" href="/favicon.ico">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Vite App</title>
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,400..800;1,300..800&display=swap" rel="stylesheet">
11
+ </head>
12
+ <body>
13
+ <div id="app"></div>
14
+ <script type="module" src="/src/main.ts"></script>
15
+ </body>
16
+ </html>
package-lock.json ADDED
The diff for this file is too large to render. See raw diff
 
package.json ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "huggingface",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview",
10
+ "lint": "eslint . --fix",
11
+ "format": "prettier --write src/"
12
+ },
13
+ "dependencies": {
14
+ "axios": "^1.7.9",
15
+ "crypto-js": "^4.2.0",
16
+ "vue": "^3.5.13"
17
+ },
18
+ "devDependencies": {
19
+ "@tsconfig/node22": "^22.0.1",
20
+ "@types/node": "^22.14.0",
21
+ "@vitejs/plugin-vue": "^5.2.3",
22
+ "@vue/tsconfig": "^0.7.0",
23
+ "sass": "^1.89.1",
24
+ "typescript": "~5.8.0",
25
+ "vite": "^6.2.4",
26
+ "vite-plugin-svg-icons": "^2.0.1",
27
+ "vite-plugin-vue-devtools": "^7.7.2",
28
+ "@vue/eslint-config-prettier": "^10.2.0",
29
+ "@vue/eslint-config-typescript": "^14.5.0",
30
+ "vue-tsc": "^2.2.8",
31
+ "eslint": "^9.22.0",
32
+ "eslint-plugin-vue": "~10.0.0",
33
+ "jiti": "^2.4.2",
34
+ "prettier": "3.5.3"
35
+ }
36
+ }
public/favicon.ico ADDED
src/App.vue ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script setup>
2
+ import PluginMain from "@/components/PluginMain.vue";
3
+ </script>
4
+
5
+ <template>
6
+ <PluginMain utm-medium="huggingface" utm-campaign="huggingface" />
7
+ </template>
8
+
9
+ <style scoped>
10
+
11
+ </style>
src/assets/_colors.scss ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ $primary-900: #140EA8;
2
+ $primary-800: #1F28C0;
3
+ $primary-700: #2A34CB;
4
+ $primary-600: #343FD7;
5
+ $primary-500: #3948E2;
6
+ $primary-400: #5A66E9;
7
+ $primary-300: #7983ED;
8
+ $primary-200: #A1A6F3;
9
+ $primary-100: #C8C9F8;
10
+ $primary-50: #E9EAFD;
11
+ $primary-25: #F4F5FE;
12
+
13
+ $secondary-900: #4315BF;
14
+ $secondary-800: #5A22CD;
15
+ $secondary-700: #682BD4;
16
+ $secondary-600: #7633DD;
17
+ $secondary-500: #8139E3;
18
+ $secondary-400: #955AE9;
19
+ $secondary-300: #AA7AEE;
20
+ $secondary-200: #C2A2F2;
21
+ $secondary-100: #DAC7F6;
22
+ $secondary-50: #F2E9FB;
23
+ $secondary-25: #F8F7FF;
24
+
25
+ $analogous-900: #004094;
26
+ $analogous-800: #005DB2;
27
+ $analogous-700: #006EC4;
28
+ $analogous-600: #027FD5;
29
+ $analogous-500: #008DE3;
30
+ $analogous-400: #319CE6;
31
+ $analogous-300: #5AADE9;
32
+ $analogous-200: #89C5EF;
33
+ $analogous-100: #B7DBF6;
34
+ $analogous-50: #E1F0FB;
35
+
36
+ $complementary-900: #D67419;
37
+ $complementary-800: #DD992C;
38
+ $complementary-700: #E1B033;
39
+ $complementary-600: #E4C63A;
40
+ $complementary-500: #E5D842;
41
+ $complementary-400: #E9DD5A;
42
+ $complementary-300: #ECE375;
43
+ $complementary-200: #F1EA9B;
44
+ $complementary-100: #F7F3C2;
45
+ $complementary-50: #FBFAE6;
46
+
47
+ $main-1000: #1C1E25;
48
+ $main-900: #312758;
49
+ $main-800: #3E386B;
50
+ $main-700: #464178;
51
+ $main-600: #4F4B84;
52
+ $main-500: #56538D;
53
+ $main-400: #6C6C9C;
54
+ $main-300: #8586AD;
55
+ $main-200: #A5A8C5;
56
+ $main-100: #C8CADD;
57
+ $main-50: #E9EAF1;
58
+ $main-25: #F6F6F9;
59
+ $main-00: #FFFFFF;
60
+
61
+ $success-900: #007235;
62
+ $success-800: #03934C;
63
+ $success-700: #00A559;
64
+ $success-600: #00B968;
65
+ $success-500: #00C974;
66
+ $success-400: #00D388;
67
+ $success-300: #01DE9B;
68
+ $success-200: #5AE9B7;
69
+ $success-100: #A7F2D3;
70
+ $success-50: #DCFAEE;
71
+
72
+ $error-900: #B80110;
73
+ $error-800: #C8001D;
74
+ $error-700: #D50023;
75
+ $error-600: #E70229;
76
+ $error-500: #F50129;
77
+ $error-400: #F31F45;
78
+ $error-300: #E95A6A;
79
+ $error-200: #E95A6A;
80
+ $error-100: #FFC4CF;
81
+ $error-50: #FFE8ED;
82
+
83
+ // categories
84
+
85
+ $category-tab-click: #333333;
86
+
87
+ $people-100: #FEEDEE;
88
+ $people-500: #FAA6A9;
89
+ $people-900: #F44C52;
90
+ $people-click: #AB3539;
91
+ $people-hover: #C33D42;
92
+
93
+ $places-100: #E6F3E9;
94
+ $places-500: #80C492;
95
+ $places-900: #008924;
96
+ $places-click: #006019;
97
+ $places-hover: #006E1D;
98
+
99
+ $duplicates-100: #EBF6FF;
100
+ $duplicates-500: #9AD2FF;
101
+ $duplicates-900: #35A4FF;
102
+ $duplicates-click: #2573B3;
103
+ $duplicates-hover: #2A83CC;
104
+
105
+ $related-100: #F9F7ED;
106
+ $related-500: #D7BB6D;
107
+ $related-900: #CAA144;
108
+ $related-click: #A16F2D;
109
+ $related-hover: #BB8D37;
110
+
111
+ $similar-100: #F3EBFC;
112
+ $similar-500: #C193ED;
113
+ $similar-900: #9650D4;
114
+ $similar-click: #6A3297;
115
+ $similar-hover: #7D38B8;
116
+
117
+ $all-100: #FBF1E8;
118
+ $all-500: #EBBA8C;
119
+ $all-900: #D67419;
120
+ $all-click: #965112;
121
+ $all-hover: #AB5D14;
src/assets/_reset.scss ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* http://meyerweb.com/eric/tools/css/reset/
2
+ v2.0 | 20110126
3
+ License: none (public domain)
4
+ */
5
+
6
+ html, body, div, span, applet, object, iframe,
7
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
8
+ a, abbr, acronym, address, big, cite, code,
9
+ del, dfn, em, img, ins, kbd, q, s, samp,
10
+ small, strike, strong, sub, sup, tt, var,
11
+ b, u, i, center,
12
+ dl, dt, dd, ol, ul, li,
13
+ fieldset, form, label, legend,
14
+ table, caption, tbody, tfoot, thead, tr, th, td,
15
+ article, aside, canvas, details, embed,
16
+ figure, figcaption, footer, header, hgroup,
17
+ menu, nav, output, ruby, section, summary,
18
+ time, mark, audio, video {
19
+ margin: 0;
20
+ padding: 0;
21
+ border: 0;
22
+ font-size: 100%;
23
+ vertical-align: baseline;
24
+ }
25
+
26
+ /* HTML5 display-role reset for older browsers */
27
+ article, aside, details, figcaption, figure,
28
+ footer, header, hgroup, menu, nav, section {
29
+ display: block;
30
+ }
31
+
32
+ body {
33
+ line-height: 1;
34
+ -webkit-font-smoothing: antialiased;
35
+ }
36
+
37
+ ol, ul {
38
+ list-style: none;
39
+ }
40
+
41
+ blockquote, q {
42
+ quotes: none;
43
+ }
44
+
45
+ blockquote:before, blockquote:after,
46
+ q:before, q:after {
47
+ content: '';
48
+ content: none;
49
+ }
50
+
51
+ table {
52
+ border-collapse: collapse;
53
+ border-spacing: 0;
54
+ }
55
+
56
+ /*
57
+ Remove built-in form typography styles
58
+ */
59
+ input, button, textarea, select {
60
+ font: inherit;
61
+ }
62
+
63
+ /*
64
+ Media defaults
65
+ */
66
+ img, iframe, picture, video, canvas, svg {
67
+ display: block;
68
+ max-width: 100%;
69
+ }
70
+
71
+ /*
72
+ Avoid text overflows
73
+ */
74
+ p, h1, h2, h3, h4, h5, h6 {
75
+ overflow-wrap: break-word;
76
+ }
77
+
78
+ /*
79
+ Use a more-intuitive box-sizing model
80
+ */
81
+ *,
82
+ *::before,
83
+ *::after {
84
+ box-sizing: border-box;
85
+ }
src/assets/_variables.scss ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "@/assets/_colors.scss";
2
+
3
+ // Font family
4
+ $bold-font: Noto Sans;
5
+ $semibold-font: Noto Sans;
6
+ $medium-font: Noto Sans;
7
+ $regular-font: Noto Sans;
8
+
9
+ // Font weights
10
+ $bold-font-weight: 700;
11
+ $semibold-font-weight: 600;
12
+ $medium-font-weight: 500;
13
+ $regular-font-weight: 400;
14
+
15
+ $header-height: 48px;
16
+ $panel-did-you-know-section-width: 495px;
17
+ $panel-nav-sidebar-width: 220px;
18
+ $panel-header-height: 48px;
19
+
20
+ $container-max-width: 1440px;
21
+
22
+ //media queries breakpoints
23
+ $desktop-2900-breakpoint: 2900px;
24
+ $desktop-1920-breakpoint: 1920px;
25
+ $desktop-1560-breakpoint: 1560px;
26
+ $desktop-1440-breakpoint: 1440px;
27
+ $desktop-1420-breakpoint: 1420px;
28
+ $tablet-1280-breakpoint: 1280px;
29
+ $tablet-1200-breakpoint: 1200px;
30
+ $tablet-1024-breakpoint: 1024px;
31
+ $tablet-973-breakpoint: 973px;
32
+ $mobile-768-breakpoint: 768px;
33
+ $mobile-650-breakpoint: 650px;
34
+ $mobile-480-breakpoint: 480px;
35
+ $mobile-450-breakpoint: 450px;
36
+ $mobile-320-breakpoint: 320px;
src/assets/_variables_override.scss ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ @import '@/assets/variables';
2
+
3
+ $bold-font: Noto Sans;
4
+ $semibold-font: Noto Sans;
5
+ $medium-font: Noto Sans;
6
+ $regular-font: Noto Sans;
src/assets/base.scss ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ *,
3
+ *::before,
4
+ *::after {
5
+ box-sizing: border-box;
6
+ margin: 0;
7
+ font-weight: normal;
8
+ }
9
+
10
+ body {
11
+ min-height: 100vh;
12
+ color: var(--color-text);
13
+ background: var(--color-background);
14
+ transition:
15
+ color 0.5s,
16
+ background-color 0.5s;
17
+ line-height: 1.6;
18
+ font-family:
19
+ Inter,
20
+ -apple-system,
21
+ BlinkMacSystemFont,
22
+ 'Segoe UI',
23
+ Roboto,
24
+ Oxygen,
25
+ Ubuntu,
26
+ Cantarell,
27
+ 'Fira Sans',
28
+ 'Droid Sans',
29
+ 'Helvetica Neue',
30
+ sans-serif;
31
+ font-size: 15px;
32
+ text-rendering: optimizeLegibility;
33
+ -webkit-font-smoothing: antialiased;
34
+ -moz-osx-font-smoothing: grayscale;
35
+ }
src/assets/img/placeholder-loading.jpg ADDED
src/assets/img/wrong-format.webp ADDED
src/assets/main.scss ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //@import './base.scss';
2
+ @import "./reset.scss";
3
+ //@import "@/sass/variables";
4
+ @import "./mixins/index";
5
+ @import './variables_override';
6
+
7
+ :root {
8
+ --header-menu-links-color: #{$main-100};
9
+ --header-menu-links-hover-color: #{$main-100};
10
+ --lang-switch-color: #{$main-00};
11
+ --mobile-menu-icon-color: #{$main-00};
12
+ --panel-header-height: #{$panel-header-height};
13
+ --panel-nav-sidebar-width: #{$panel-nav-sidebar-width};
14
+ --markdown-content-text-color: #{$main-500};
15
+ --markdown-content-strong-text-color: #{$main-1000};
16
+ }
17
+
18
+ .plugin-container {
19
+ font: 500 16px/24px Noto Sans;
20
+ color: #312758
21
+ }
22
+
23
+ * {
24
+ -webkit-tap-highlight-color: transparent
25
+ }
26
+
27
+ a {
28
+ text-decoration: none;
29
+ }
30
+
31
+ .lenso-captcha {
32
+ display: none;
33
+ }
34
+
35
+ html, body, #app {
36
+ min-height: 100dvh;
37
+ }
38
+
39
+ html, body, #app, .outer-container {
40
+ @media (max-width: $tablet-1280-breakpoint) {
41
+ min-height: 100dvh;
42
+ }
43
+ }
src/assets/mixins/_box.scss ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin box() {
2
+
3
+ }
4
+
5
+ @mixin contact-us-box {
6
+ border-radius: 4px;
7
+ border: 1px solid rgba(200, 201, 248, 0.20);
8
+ background-color: rgba(255, 255, 255, 0.92);
9
+ box-shadow: 0px 2px 8px 0px rgba(89, 99, 168, 0.16);
10
+ backdrop-filter: blur(6px);
11
+ padding: 12px;
12
+ }
src/assets/mixins/_buttons.scss ADDED
@@ -0,0 +1,967 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import './../variables';
2
+
3
+ @mixin button-has-gradient(
4
+ $background-color,
5
+ $background-color-hover,
6
+ $background-color-active,
7
+ $background-color-blocked
8
+ ) {
9
+ border-width: 1px;
10
+ border-style: solid;
11
+ border-color: transparent;
12
+
13
+ background: linear-gradient($background-color, $background-color)
14
+ padding-box,
15
+ linear-gradient(to left, #d8d8d8 20%, #c8c9f8 60%, #a1a6f3 8%)
16
+ border-box;
17
+
18
+ &:hover {
19
+ background: linear-gradient(
20
+ $background-color-hover,
21
+ $background-color-hover
22
+ )
23
+ padding-box,
24
+ linear-gradient(to left, #d8d8d8 20%, #c8c9f8 60%, #a1a6f3 8%)
25
+ border-box;
26
+ }
27
+ }
28
+
29
+ @mixin button-with-icon(
30
+ $icon-color,
31
+ $icon-color-hover,
32
+ $icon-color-active,
33
+ $icon-color-blocked
34
+ ) {
35
+ > svg {
36
+ color: $icon-color;
37
+ flex-shrink: 0;
38
+ transition: color 0.3s ease-in-out;
39
+ width: 16px;
40
+ height: 16px;
41
+ }
42
+
43
+ &[disabled] > svg,
44
+ &.disabled > svg {
45
+ color: $icon-color-blocked;
46
+ }
47
+
48
+ &:active > svg {
49
+ color: $icon-color-active !important;
50
+ }
51
+
52
+ &:hover > svg {
53
+ color: $icon-color-hover;
54
+ }
55
+ }
56
+
57
+ @mixin button-with-text(
58
+ $text-color,
59
+ $text-color-hover,
60
+ $text-color-active,
61
+ $text-color-blocked
62
+ ) {
63
+ color: $text-color;
64
+
65
+ > span {
66
+ display: block;
67
+ @include semibold-16-24;
68
+ }
69
+
70
+ &:hover {
71
+ color: $text-color-hover;
72
+ }
73
+
74
+ &:active {
75
+ color: $text-color-active;
76
+ }
77
+
78
+ &[disabled],
79
+ &.disabled {
80
+ color: $text-color-blocked;
81
+ }
82
+ }
83
+
84
+ @mixin button(
85
+ $border-color: '',
86
+ $bg-color,
87
+ $border-color-hover: '',
88
+ $bg-color-hover,
89
+ $border-color-active: '',
90
+ $bg-color-active,
91
+ $border-color-blocked: '',
92
+ $bg-color-blocked
93
+ ) {
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: center;
97
+ column-gap: 12px;
98
+
99
+ @if $border-color != '' {
100
+ border-width: 1px;
101
+ border-style: solid;
102
+ border-color: $border-color;
103
+ } @else {
104
+ border: none;
105
+ outline: none;
106
+ }
107
+
108
+ padding: 12px 24px;
109
+ @if $bg-color != '' {
110
+ background-color: $bg-color;
111
+ }
112
+ border-radius: 4px;
113
+ transition: all 0.3s ease-in-out;
114
+ cursor: pointer;
115
+ width: 100%;
116
+
117
+ > .button-loader {
118
+ flex-shrink: 0;
119
+ }
120
+
121
+ &:is(:disabled, :disabled:hover, :disabled:active, :disabled:hover:active) {
122
+ border-color: $border-color-blocked;
123
+ @if $bg-color-blocked != '' {
124
+ background-color: $bg-color-blocked;
125
+ }
126
+ pointer-events: none;
127
+ }
128
+
129
+ @media (min-width: $mobile-768-breakpoint) {
130
+ &:is(:hover) {
131
+ @if $border-color-hover != '' {
132
+ border-color: $border-color-hover;
133
+ }
134
+
135
+ @if $bg-color-hover != '' {
136
+ background-color: $bg-color-hover;
137
+ }
138
+ }
139
+
140
+ &:is(:hover:active) {
141
+ @if $border-color-active != '' {
142
+ border-color: $border-color-active;
143
+ }
144
+
145
+ @if $bg-color-active != '' {
146
+ background-color: $bg-color-active;
147
+ }
148
+ }
149
+ }
150
+ }
151
+
152
+ @mixin button-editor() {
153
+ @include tertiary-medium-icon-only;
154
+
155
+ &:disabled {
156
+ background-color: transparent !important;
157
+ border-color: $main-100 !important;
158
+ }
159
+ }
160
+
161
+ @mixin button-tertiary(
162
+ $has-icon: false,
163
+ $has-text: false,
164
+ $has-icon-only: false,
165
+ $size-medium: false
166
+ ) {
167
+ $background-color: $primary-25;
168
+ $background-color-hover: $primary-50;
169
+ $background-color-active: $primary-25;
170
+ $background-color-blocked: $main-00;
171
+
172
+ $border-color: $primary-100;
173
+ $border-color-hover: $primary-500;
174
+ $border-color-active: $primary-700;
175
+ $border-color-blocked: $main-00;
176
+ @include button(
177
+ $border-color,
178
+ $background-color,
179
+ $border-color-hover,
180
+ $background-color-hover,
181
+ $border-color-active,
182
+ $background-color-active,
183
+ $border-color-blocked,
184
+ $background-color-blocked
185
+ );
186
+
187
+ @if $has-icon-only {
188
+ width: fit-content;
189
+
190
+ @if $size-medium {
191
+ padding: 8px;
192
+ } @else {
193
+ padding: 12px;
194
+ }
195
+
196
+ $icon-color: $primary-400;
197
+ $icon-color-hover: $primary-400;
198
+ $icon-color-active: $primary-400;
199
+ $icon-color-blocked: $main-100;
200
+ @include button-with-icon(
201
+ $icon-color,
202
+ $icon-color-hover,
203
+ $icon-color-active,
204
+ $icon-color-blocked
205
+ );
206
+ } @else {
207
+ @if $has-text {
208
+ $text-color: $primary-400;
209
+ $text-color-hover: $primary-400;
210
+ $text-color-blocked: $main-100;
211
+ $text-color-active: $main-00;
212
+ @include button-with-text(
213
+ $text-color,
214
+ $text-color-hover,
215
+ $text-color-active,
216
+ $text-color-blocked
217
+ );
218
+
219
+ > span {
220
+ @if $size-medium {
221
+ @include semibold-14-16;
222
+ } @else {
223
+ @include semibold-16-16;
224
+ }
225
+ }
226
+ }
227
+
228
+ @if $has-icon {
229
+ $icon-color: $primary-400;
230
+ $icon-color-hover: $primary-400;
231
+ $icon-color-active: $primary-400;
232
+ $icon-color-blocked: $main-100;
233
+ @include button-with-icon(
234
+ $icon-color,
235
+ $icon-color-hover,
236
+ $icon-color-active,
237
+ $icon-color-blocked
238
+ );
239
+ }
240
+
241
+ @if $size-medium {
242
+ padding: 8px 12px;
243
+ column-gap: 8px;
244
+ }
245
+ }
246
+
247
+ @if ($has-icon-only or $has-icon) {
248
+ > svg {
249
+ color: $primary-400;
250
+
251
+ @if $size-medium == false {
252
+ width: 24px;
253
+ height: 24px;
254
+ } @else {
255
+ width: 16px;
256
+ height: 16px;
257
+ }
258
+ }
259
+ }
260
+ }
261
+
262
+ @mixin button-secondary(
263
+ $has-icon: false,
264
+ $has-text: false,
265
+ $has-icon-only: false,
266
+ $size-medium: false
267
+ ) {
268
+ $background-color: $main-00;
269
+ $background-color-hover: $primary-25;
270
+ $background-color-active: $main-100;
271
+ $background-color-blocked: $main-00;
272
+
273
+ box-shadow: 0px 2px 8px 0px rgba(89, 99, 168, 0.16);
274
+
275
+ $border-color: rgba(200, 201, 248, 0.2);
276
+ $border-color-hover: rgba(200, 201, 248, 0.2);
277
+ $border-color-active: rgba(200, 201, 248, 0.2);
278
+ $border-color-blocked: rgba(200, 201, 248, 0.2);
279
+ @include button(
280
+ $border-color,
281
+ $background-color,
282
+ $border-color-hover,
283
+ $background-color-hover,
284
+ $border-color-active,
285
+ $background-color-active,
286
+ $border-color-blocked,
287
+ $background-color-blocked
288
+ );
289
+
290
+ @if $has-icon-only {
291
+ padding: 12px;
292
+ width: fit-content;
293
+
294
+ @if $size-medium {
295
+ padding: 8px;
296
+ } @else {
297
+ padding: 12px;
298
+ }
299
+
300
+ $icon-color: $primary-400;
301
+ $icon-color-hover: $primary-400;
302
+ $icon-color-active: $primary-400;
303
+ $icon-color-blocked: $main-100;
304
+ @include button-with-icon(
305
+ $icon-color,
306
+ $icon-color-hover,
307
+ $icon-color-active,
308
+ $icon-color-blocked
309
+ );
310
+ } @else {
311
+ @if $has-text {
312
+ $text-color: $primary-400;
313
+ $text-color-hover: $primary-400;
314
+ $text-color-blocked: $main-100;
315
+ $text-color-active: $primary-400;
316
+ @include button-with-text(
317
+ $text-color,
318
+ $text-color-hover,
319
+ $text-color-active,
320
+ $text-color-blocked
321
+ );
322
+
323
+ @if $size-medium {
324
+ > span {
325
+ @include semibold-14-16;
326
+ }
327
+ }
328
+ }
329
+
330
+ @if $has-icon {
331
+ $icon-color: $primary-400;
332
+ $icon-color-hover: $primary-400;
333
+ $icon-color-active: $primary-400;
334
+ $icon-color-blocked: $main-100;
335
+ @include button-with-icon(
336
+ $icon-color,
337
+ $icon-color-hover,
338
+ $icon-color-active,
339
+ $icon-color-blocked
340
+ );
341
+ }
342
+
343
+ @if $size-medium {
344
+ padding: 8px 12px;
345
+ column-gap: 8px;
346
+ }
347
+ }
348
+
349
+ @if ($has-icon-only or $has-icon) {
350
+ > svg {
351
+ color: $primary-400;
352
+
353
+ @if $size-medium == false {
354
+ width: 24px;
355
+ height: 24px;
356
+ } @else {
357
+ width: 16px;
358
+ height: 16px;
359
+ }
360
+ }
361
+ }
362
+ }
363
+
364
+ @mixin button-primary(
365
+ $has-icon: false,
366
+ $has-text: false,
367
+ $has-icon-only: false,
368
+ $size-medium: false
369
+ ) {
370
+ $background-color: $primary-400;
371
+ $background-color-hover: $primary-500;
372
+ $background-color-active: $primary-700;
373
+ $background-color-blocked: $main-100;
374
+
375
+ box-shadow: 0px 2px 8px 0px rgba(89, 99, 168, 0.16);
376
+ @include button(
377
+ '',
378
+ $background-color,
379
+ '',
380
+ $background-color-hover,
381
+ '',
382
+ $background-color-active,
383
+ '',
384
+ $background-color-blocked
385
+ );
386
+
387
+ @if $has-icon-only {
388
+ padding: 12px;
389
+ width: fit-content;
390
+
391
+ @if $size-medium {
392
+ padding: 8px;
393
+ } @else {
394
+ padding: 12px;
395
+ }
396
+
397
+ $icon-color: $main-00;
398
+ $icon-color-hover: $main-00;
399
+ $icon-color-active: $main-00;
400
+ $icon-color-blocked: $main-100;
401
+ @include button-with-icon(
402
+ $icon-color,
403
+ $icon-color-hover,
404
+ $icon-color-active,
405
+ $icon-color-blocked
406
+ );
407
+ } @else {
408
+ @if $has-text {
409
+ $text-color: $main-00;
410
+ $text-color-hover: $main-00;
411
+ $text-color-blocked: $main-50;
412
+ $text-color-active: $main-00;
413
+ @include button-with-text(
414
+ $text-color,
415
+ $text-color-hover,
416
+ $text-color-active,
417
+ $text-color-blocked
418
+ );
419
+
420
+ @if $size-medium {
421
+ > span {
422
+ @include semibold-14-16;
423
+ }
424
+ }
425
+ }
426
+
427
+ @if $has-icon {
428
+ $icon-color: $main-00;
429
+ $icon-color-hover: $main-00;
430
+ $icon-color-active: $main-00;
431
+ $icon-color-blocked: $main-100;
432
+ @include button-with-icon(
433
+ $icon-color,
434
+ $icon-color-hover,
435
+ $icon-color-active,
436
+ $icon-color-blocked
437
+ );
438
+ }
439
+
440
+ @if $size-medium {
441
+ padding: 8px 12px;
442
+ column-gap: 8px;
443
+ }
444
+ }
445
+
446
+ @if ($has-icon-only or $has-icon) {
447
+ > svg {
448
+ color: $main-00;
449
+
450
+ @if $size-medium == false {
451
+ width: 24px;
452
+ height: 24px;
453
+ } @else {
454
+ width: 16px;
455
+ height: 16px;
456
+ }
457
+ }
458
+ }
459
+ }
460
+
461
+ @mixin button-social {
462
+ $background-color: $main-00;
463
+ $background-color-hover: $primary-25;
464
+ $background-color-active: $main-100;
465
+ $background-color-blocked: $main-00;
466
+
467
+ @include button(
468
+ '',
469
+ $background-color,
470
+ '',
471
+ $background-color-hover,
472
+ '',
473
+ $background-color-active,
474
+ '',
475
+ $background-color-blocked
476
+ );
477
+
478
+ $text-color: $main-500;
479
+ $text-color-hover: $main-500;
480
+ $text-color-blocked: $main-100;
481
+ $text-color-active: $main-500;
482
+ @include button-with-text(
483
+ $text-color,
484
+ $text-color-hover,
485
+ $text-color-active,
486
+ $text-color-blocked
487
+ );
488
+
489
+ $icon-color: $primary-400;
490
+ $icon-color-hover: $primary-400;
491
+ $icon-color-active: $primary-400;
492
+ $icon-color-blocked: $main-100;
493
+ @include button-with-icon(
494
+ $icon-color,
495
+ $icon-color-hover,
496
+ $icon-color-active,
497
+ $icon-color-blocked
498
+ );
499
+
500
+ box-shadow: 0px 2px 8px 0px rgba(89, 99, 168, 0.16);
501
+ }
502
+
503
+ @mixin button-grey {
504
+ $background-color: $main-300;
505
+ $background-color-hover: $main-400;
506
+ $background-color-active: $main-500;
507
+ $background-color-blocked: $main-100;
508
+ @include button(
509
+ '',
510
+ $background-color,
511
+ '',
512
+ $background-color-hover,
513
+ '',
514
+ $background-color-active,
515
+ '',
516
+ $background-color-blocked
517
+ );
518
+
519
+ $text-color: $main-00;
520
+ $text-color-hover: $main-00;
521
+ $text-color-blocked: $main-50;
522
+ $text-color-active: $main-00;
523
+ @include button-with-text(
524
+ $text-color,
525
+ $text-color-hover,
526
+ $text-color-active,
527
+ $text-color-blocked
528
+ );
529
+ }
530
+
531
+ @mixin button-grey-black-text {
532
+ $background-color: $main-50;
533
+ $background-color-hover: $main-200;
534
+ $background-color-active: $main-300;
535
+ $background-color-blocked: $main-00;
536
+ @include button(
537
+ '',
538
+ $background-color,
539
+ '',
540
+ $background-color-hover,
541
+ '',
542
+ $background-color-active,
543
+ '',
544
+ $background-color-blocked
545
+ );
546
+
547
+ $text-color: $main-900;
548
+ $text-color-hover: $main-00;
549
+ $text-color-blocked: $main-50;
550
+ $text-color-active: $main-00;
551
+ @include button-with-text(
552
+ $text-color,
553
+ $text-color-hover,
554
+ $text-color-active,
555
+ $text-color-blocked
556
+ );
557
+ }
558
+
559
+ @mixin button-orange {
560
+ $background-color: $complementary-900;
561
+ $background-color-hover: $complementary-800;
562
+ $background-color-active: $complementary-700;
563
+ $background-color-blocked: $main-100;
564
+
565
+ $text-color: $main-00;
566
+ $text-color-hover: $main-00;
567
+ $text-color-active: $main-00;
568
+ $text-color-blocked: $main-00;
569
+ @include button(
570
+ '',
571
+ $background-color,
572
+ '',
573
+ $background-color-hover,
574
+ '',
575
+ $background-color-active,
576
+ '',
577
+ $background-color-blocked
578
+ );
579
+ @include button-with-text(
580
+ $text-color,
581
+ $text-color-hover,
582
+ $text-color-active,
583
+ $text-color-blocked
584
+ );
585
+ }
586
+
587
+ @mixin button-blue {
588
+ $background-color: $analogous-900;
589
+ $background-color-hover: $analogous-800;
590
+ $background-color-active: $analogous-700;
591
+ $background-color-blocked: $main-100;
592
+
593
+ $text-color: $main-00;
594
+ $text-color-hover: $main-00;
595
+ $text-color-active: $main-00;
596
+ $text-color-blocked: $main-00;
597
+ @include button(
598
+ '',
599
+ $background-color,
600
+ '',
601
+ $background-color-hover,
602
+ '',
603
+ $background-color-active,
604
+ '',
605
+ $background-color-blocked
606
+ );
607
+ @include button-with-text(
608
+ $text-color,
609
+ $text-color-hover,
610
+ $text-color-active,
611
+ $text-color-blocked
612
+ );
613
+ }
614
+
615
+ @mixin button-green {
616
+ $background-color: $success-900;
617
+ $background-color-hover: $success-800;
618
+ $background-color-active: $success-700;
619
+ $background-color-blocked: $main-100;
620
+
621
+ $text-color: $main-00;
622
+ $text-color-hover: $main-00;
623
+ $text-color-active: $main-00;
624
+ $text-color-blocked: $main-00;
625
+ @include button(
626
+ '',
627
+ $background-color,
628
+ '',
629
+ $background-color-hover,
630
+ '',
631
+ $background-color-active,
632
+ '',
633
+ $background-color-blocked
634
+ );
635
+ @include button-with-text(
636
+ $text-color,
637
+ $text-color-hover,
638
+ $text-color-active,
639
+ $text-color-blocked
640
+ );
641
+ }
642
+
643
+ @mixin button-red {
644
+ $background-color: $error-900;
645
+ $background-color-hover: $error-800;
646
+ $background-color-active: $error-700;
647
+ $background-color-blocked: $main-100;
648
+
649
+ $text-color: $main-00;
650
+ $text-color-hover: $main-00;
651
+ $text-color-active: $main-00;
652
+ $text-color-blocked: $main-00;
653
+
654
+ @include button(
655
+ '',
656
+ $background-color,
657
+ '',
658
+ $background-color-hover,
659
+ '',
660
+ $background-color-active,
661
+ '',
662
+ $background-color-blocked
663
+ );
664
+ @include button-with-text(
665
+ $text-color,
666
+ $text-color-hover,
667
+ $text-color-active,
668
+ $text-color-blocked
669
+ );
670
+ }
671
+
672
+ @mixin button-debug {
673
+ font-size: 12px;
674
+ line-height: 12px;
675
+ font-weight: 500;
676
+ border-radius: 6px;
677
+ padding: 4px;
678
+ border: 1px solid rgba(200, 201, 248, 0.2);
679
+ backdrop-filter: blur(4px);
680
+ cursor: pointer;
681
+ background-color: $main-1000;
682
+ color: $main-00;
683
+ }
684
+
685
+ /*
686
+ BUTTONS WITH ICON ONLY
687
+ */
688
+
689
+ @mixin button-account {
690
+ @include primary-medium-with-icon;
691
+ padding: 4px 8px;
692
+ column-gap: 4px;
693
+ width: fit-content;
694
+
695
+ > span {
696
+ @include semibold-14-16;
697
+ }
698
+
699
+ > svg {
700
+ width: 16px;
701
+ height: 16px;
702
+ }
703
+ }
704
+
705
+ @mixin button-upload {
706
+ $background-color: $primary-25;
707
+ $background-color-hover: $primary-25;
708
+ $background-color-active: $primary-25;
709
+ $background-color-blocked: $main-00;
710
+
711
+ $border-color: $primary-400;
712
+ $border-color-active: $primary-400;
713
+ $border-color-hover: $primary-400;
714
+ $border-color-blocked: $main-100;
715
+ @include button(
716
+ $border-color,
717
+ $background-color,
718
+ $border-color-hover,
719
+ $background-color-hover,
720
+ $border-color-active,
721
+ $background-color-active,
722
+ $border-color-blocked,
723
+ $background-color-blocked
724
+ );
725
+
726
+ $text-color: $primary-400;
727
+ $text-color-hover: $primary-400;
728
+ $text-color-active: $primary-400;
729
+ $text-color-blocked: $primary-400;
730
+ @include button-with-text(
731
+ $text-color,
732
+ $text-color-hover,
733
+ $text-color-active,
734
+ $text-color-blocked
735
+ );
736
+
737
+ $icon-color: $primary-400;
738
+ $icon-color-hover: $primary-400;
739
+ $icon-color-active: $primary-400;
740
+ $icon-color-blocked: $main-100;
741
+ @include button-with-icon(
742
+ $icon-color,
743
+ $icon-color-hover,
744
+ $icon-color-active,
745
+ $icon-color-blocked
746
+ );
747
+
748
+ border-width: 2px;
749
+ border-style: dashed;
750
+ padding: 2px 8px;
751
+ column-gap: 4px;
752
+
753
+ > span {
754
+ @include semibold-14-16;
755
+ }
756
+
757
+ > svg {
758
+ width: 16px;
759
+ height: 16px;
760
+ }
761
+
762
+ > .button-loader {
763
+ width: 12px;
764
+ height: 12px;
765
+ border-width: 1px;
766
+ }
767
+ }
768
+
769
+ @mixin button-upload-orange {
770
+ @include button-upload;
771
+ color: $complementary-900;
772
+ background-color: $complementary-50;
773
+ border: none;
774
+ width: max-content;
775
+ padding: 4px 8px;
776
+ background: linear-gradient(90deg, $complementary-900 50%, transparent 50%),
777
+ linear-gradient(90deg, $complementary-900 50%, transparent 50%),
778
+ linear-gradient(0deg, $complementary-900 50%, transparent 50%),
779
+ linear-gradient(0deg, $complementary-900 50%, transparent 50%);
780
+
781
+ background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
782
+ background-size: 18px 2px, 18px 2px, 2px 18px, 2px 18px;
783
+ background-position: 0px 0px, 20px 22px, 0px 115px, 117px 25px;
784
+ animation: borderMove 6s linear infinite;
785
+ animation-play-state: running;
786
+
787
+ svg {
788
+ color: $complementary-900;
789
+ }
790
+
791
+ &:hover,
792
+ &:active,
793
+ &:focus {
794
+ border-color: $complementary-800;
795
+ color: $complementary-900 !important;
796
+ background-color: $complementary-50 !important;
797
+ outline: $complementary-50;
798
+ animation-play-state: paused;
799
+
800
+ svg {
801
+ color: $complementary-900 !important;
802
+ }
803
+ }
804
+
805
+ @keyframes borderMove {
806
+ 0% {
807
+ background-position: 0 0, 100% 100%, 0 100%, 100% 0;
808
+ }
809
+ 100% {
810
+ background-position: 100% 0, 0 100%, 0 0, 100% 100%;
811
+ }
812
+ }
813
+ }
814
+
815
+ /*
816
+ PRIMARY BUTTONS
817
+ */
818
+
819
+ @mixin primary-simple {
820
+ @include button-primary($has-text: true);
821
+ }
822
+
823
+ @mixin primary-with-icon {
824
+ @include button-primary($has-icon: true, $has-text: true);
825
+ }
826
+
827
+ @mixin primary-icon-only {
828
+ @include button-primary($has-icon-only: true);
829
+ }
830
+
831
+ @mixin primary-medium-simple {
832
+ @include button-primary($has-text: true, $size-medium: true);
833
+ }
834
+
835
+ @mixin primary-medium-with-icon {
836
+ @include button-primary(
837
+ $has-icon: true,
838
+ $has-text: true,
839
+ $size-medium: true
840
+ );
841
+ }
842
+
843
+ @mixin primary-medium-icon-only {
844
+ @include button-primary($has-icon-only: true, $size-medium: true);
845
+ }
846
+
847
+ /*
848
+ SECONDARY
849
+ */
850
+
851
+ @mixin secondary-simple {
852
+ @include button-secondary($has-text: true);
853
+ }
854
+
855
+ @mixin secondary-with-icon {
856
+ @include button-secondary($has-icon: true, $has-text: true);
857
+ }
858
+
859
+ @mixin secondary-icon-only {
860
+ @include button-secondary($has-icon-only: true);
861
+ }
862
+
863
+ @mixin secondary-medium-simple {
864
+ @include button-secondary($has-text: true, $size-medium: true);
865
+ }
866
+
867
+ @mixin secondary-medium-with-icon {
868
+ @include button-secondary(
869
+ $has-icon: true,
870
+ $has-text: true,
871
+ $size-medium: true
872
+ );
873
+ }
874
+
875
+ @mixin secondary-medium-icon-only {
876
+ @include button-secondary($has-icon-only: true, $size-medium: true);
877
+ }
878
+
879
+ /*
880
+ TERTIARY BUTTONS
881
+ */
882
+
883
+ @mixin tertiary-simple {
884
+ @include button-tertiary($has-text: true);
885
+ }
886
+
887
+ @mixin tertiary-with-icon {
888
+ @include button-tertiary($has-icon: true, $has-text: true);
889
+ }
890
+
891
+ @mixin tertiary-icon-only {
892
+ @include button-tertiary($has-icon-only: true);
893
+ }
894
+
895
+ @mixin tertiary-medium-simple {
896
+ @include button-tertiary($has-text: true, $size-medium: true);
897
+ }
898
+
899
+ @mixin tertiary-medium-with-icon {
900
+ @include button-tertiary(
901
+ $has-icon: true,
902
+ $has-text: true,
903
+ $size-medium: true
904
+ );
905
+ }
906
+
907
+ @mixin tertiary-medium-icon-only {
908
+ @include button-tertiary($has-icon-only: true, $size-medium: true);
909
+ }
910
+
911
+ @mixin button-large {
912
+ padding: 12px 24px;
913
+
914
+ > span {
915
+ @include semibold-16-24;
916
+ }
917
+ }
918
+
919
+ @mixin button-medium {
920
+ padding: 8px 12px;
921
+ column-gap: 8px;
922
+
923
+ > span {
924
+ @include semibold-14-16;
925
+ }
926
+ }
927
+
928
+ @mixin button-small {
929
+ padding: 4px 8px;
930
+ column-gap: 4px;
931
+
932
+ > span {
933
+ @include semibold-14-16;
934
+ }
935
+ }
936
+
937
+ @mixin button-link {
938
+ border: none;
939
+ background: none;
940
+ padding: 0;
941
+ text-decoration: underline;
942
+ cursor: pointer;
943
+ }
944
+
945
+ @mixin has-lock-icon($from-button: false, $from-show-more-card: false) {
946
+ @if $from-button {
947
+ background-image: url('@/img/locked-in-button.webp');
948
+ padding: 8px 36px 8px 12px;
949
+ background-size: 32px 29px;
950
+ }
951
+
952
+ @if $from-show-more-card {
953
+ background-image: url('@/img/locked-in-show-more-card.webp');
954
+ background-size: 32px 32px;
955
+ }
956
+
957
+ background-repeat: no-repeat;
958
+ background-position: top right;
959
+ }
960
+
961
+ @mixin has-lock-icon-white() {
962
+ background-image: url('@/img/locked-alerts.webp');
963
+ background-size: 32px 32px;
964
+
965
+ background-repeat: no-repeat;
966
+ background-position: top right;
967
+ }
src/assets/mixins/_checkbox.scss ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin checkbox {
2
+ > input[type='checkbox'] {
3
+ padding: 0;
4
+ height: initial;
5
+ width: initial;
6
+ margin-bottom: 0;
7
+ display: none;
8
+ cursor: pointer;
9
+
10
+ &:checked + label:after {
11
+ content: '';
12
+ display: block;
13
+ position: absolute;
14
+ background-image: url('@/assets/svg/check-on.svg');
15
+ background-repeat: no-repeat;
16
+ background-size: contain;
17
+ width: 24px;
18
+ height: 24px;
19
+ }
20
+ }
21
+ > label {
22
+ @include medium-14-20;
23
+ position: relative;
24
+ cursor: pointer;
25
+ display: flex;
26
+ column-gap: 12px;
27
+ align-items: center;
28
+ color: $main-500;
29
+ width: fit-content;
30
+
31
+ &::before {
32
+ content:'';
33
+ flex-shrink: 0;
34
+ background-image: url('@/assets/svg/check-off.svg');
35
+ background-repeat: no-repeat;
36
+ background-size: contain;
37
+ width: 24px;
38
+ height: 24px;
39
+ border-radius: 6px;
40
+ cursor: pointer;
41
+ transition: all .3s ease-in-out;
42
+ }
43
+
44
+ &:hover:before {
45
+ background-color: #F4F5FE;
46
+ }
47
+ }
48
+
49
+ &.disabled > label {
50
+ color: $main-300;
51
+ pointer-events: none;
52
+
53
+ &::before {
54
+ border-color: $main-50;
55
+ background-color: $main-00;
56
+ }
57
+ }
58
+ }
59
+
60
+ @mixin checkbox-collections {
61
+ @include checkbox;
62
+ //remove spacing before there is no text with checkbox
63
+ > label {
64
+ padding: 3px;
65
+ border-radius: 6px;
66
+ border: 1px solid rgba(200, 201, 248, 0.20);
67
+ background-color: rgba(253, 253, 254, 0.80);
68
+ backdrop-filter: blur(4px);
69
+ column-gap: unset;
70
+
71
+ &:hover {
72
+ border: 1px solid $primary-400;
73
+ background-color: $primary-25;
74
+ }
75
+
76
+ &:active {
77
+ border: 1px solid $primary-400;
78
+ background-color: $primary-25;
79
+ }
80
+ }
81
+
82
+ position: absolute;
83
+ display: flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ left: 4px;
87
+ top: 4px;
88
+ }
89
+
90
+ @mixin checkbox-has-error {
91
+ > label {
92
+ color: $error-900;
93
+
94
+ > span,
95
+ > span > a {
96
+ color: $error-900;
97
+ }
98
+
99
+ &::before{
100
+ border-color: $error-900;
101
+ background-color: $error-50;
102
+ }
103
+ }
104
+ }
src/assets/mixins/_form_group.scss ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin form-group {
2
+ position: relative;
3
+ display: block;
4
+ width: 100%;
5
+ }
6
+
7
+ @mixin form-group-has-error {
8
+ > label {
9
+ @include label-has-error;
10
+ }
11
+
12
+ &.checkbox {
13
+ @include checkbox-has-error;
14
+ }
15
+
16
+ > input {
17
+ @include input-has-error;
18
+ }
19
+
20
+ > textarea {
21
+ @include textarea-has-error;
22
+ }
23
+
24
+ > .radio {
25
+ @include radio-has-error;
26
+ }
27
+
28
+ > .error-message > p {
29
+ @include medium-12-12;
30
+ margin-top: 8px;
31
+ color: $error-800;
32
+ }
33
+ }
src/assets/mixins/_gradient_line.scss ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin gradient-image {
2
+ position: absolute;
3
+ background-repeat: no-repeat;
4
+ background-position: center;
5
+ background-size: cover;
6
+ }
7
+
8
+ @mixin gradient-line-horizontal {
9
+ @include gradient-image;
10
+ background-image: url('@/assets/svg/gradient-line-horizontal.svg');
11
+ }
12
+
13
+ @mixin gradient-line-vertical {
14
+ @include gradient-image;
15
+ background-image: url('@/assets/svg/gradient-line-vertical.svg');
16
+ }
17
+
18
+ @mixin gradient-line($top: false, $bottom: false, $left: false, $right: false) {
19
+ @if $top or $left {
20
+ &::after {
21
+ content: "";
22
+
23
+ @if $top {
24
+ @include gradient-line-horizontal();
25
+ top: 0;
26
+ width: 100%;
27
+ height: 1px;
28
+ }
29
+
30
+ @if $left {
31
+ @include gradient-line-vertical();
32
+ left: 0;
33
+ width: 1px;
34
+ }
35
+
36
+ @if $left or $right{
37
+ height: 1px;
38
+ }
39
+ }
40
+ } @else if $bottom or $right {
41
+ &::before {
42
+ content: "";
43
+
44
+ @if $bottom {
45
+ @include gradient-line-horizontal();
46
+ width: 100%;
47
+ height: 1px;
48
+ bottom: 0;
49
+ }
50
+
51
+ @if $right {
52
+ @include gradient-line-vertical();
53
+ right: 0;
54
+ width: 1px;
55
+ }
56
+ }
57
+ }
58
+ }
src/assets/mixins/_grid_system.scss ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin grid-system {
2
+ display: block;
3
+ padding-block: 60px;
4
+ padding-inline: 12px;
5
+ max-width: $container-max-width;
6
+ margin-inline: auto;
7
+
8
+ @media (min-width: $mobile-768-breakpoint) {
9
+ display: grid;
10
+ grid-template-columns: repeat(12, 1fr);
11
+ grid-auto-flow: column;
12
+ padding-block: 120px;
13
+ padding-inline: 20px;
14
+ gap: 20px;
15
+ }
16
+ }
src/assets/mixins/_index.scss ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "./buttons";
2
+ @import "./checkbox";
3
+ @import "./form_group";
4
+ @import "./input";
5
+ @import "./label";
6
+ @import "./links";
7
+ @import "./radio";
8
+ @import "./tags";
9
+ @import "./textarea";
10
+ @import "./typography";
11
+ @import "./table";
12
+ @import "./toggle_switch";
13
+ @import "./grid_system";
14
+ @import "./box";
15
+ @import "./verification_input";
16
+ @import "./post";
17
+ @import "./markdown_content";
18
+ @import "./scrollbars";
19
+ @import "./gradient_line";
20
+ @import "./statuses";
src/assets/mixins/_input.scss ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin input {
2
+ @include medium-16-24;
3
+ border: 1px solid $main-50;
4
+ border-radius: 6px;
5
+ padding: 12px 16px;
6
+ transition: all .3s ease-in-out;
7
+ background-color: $main-00;
8
+ outline: none;
9
+ width: 100%;
10
+
11
+ &:is(:hover) {
12
+ border-color: $primary-200;
13
+ background-color: $primary-25;
14
+ }
15
+
16
+ &:is(:active, :focus) {
17
+ border-color: $primary-400;
18
+ background-color: $primary-25;
19
+ }
20
+
21
+ &[readonly] {
22
+ cursor: not-allowed;
23
+ }
24
+
25
+ &.align-left {
26
+ background-position: center left 16px;
27
+ padding-left: 52px;
28
+ }
29
+
30
+ &.search-field {
31
+ background-image: url('@/assets/svg/search.svg');
32
+ background-repeat: no-repeat;
33
+ background-position: center right 16px;
34
+ padding-right: 40px;
35
+ }
36
+
37
+ &.save-icon {
38
+ background-image: url('@/assets/svg/save.svg');
39
+ background-repeat: no-repeat;
40
+ }
41
+
42
+ &.globe-icon {
43
+ background-image: url('@/assets/svg/globe.svg');
44
+ background-repeat: no-repeat;
45
+ }
46
+
47
+ &.pencil-icon {
48
+ background-image: url('@/assets/svg/pencil.svg');
49
+ background-repeat: no-repeat;
50
+ }
51
+
52
+ &.alert-icon {
53
+ background-image: url('@/assets/svg/alert.svg');
54
+ background-repeat: no-repeat;
55
+ }
56
+
57
+ &.export-icon {
58
+ background-image: url('@/assets/svg/export.svg');
59
+ background-repeat: no-repeat;
60
+ }
61
+
62
+ &::placeholder {
63
+ @include medium-14-20;
64
+ color: $main-100;
65
+ }
66
+ }
67
+
68
+ @mixin input-has-error {
69
+ border-color: $error-800;
70
+ color: $error-800;
71
+ background-color: $error-50;
72
+
73
+ &::placeholder {
74
+ color: $error-800;
75
+ }
76
+
77
+ & + svg {
78
+ background-color: $error-50;
79
+ }
80
+ }
src/assets/mixins/_label.scss ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin label {
2
+ @include semibold-14-16;
3
+ display: block;
4
+ color: $main-500;
5
+ margin-bottom: 8px;
6
+ transition: all .3s ease-in-out;
7
+ }
8
+
9
+ @mixin label-has-error {
10
+ color: $error-800;
11
+ }
src/assets/mixins/_links.scss ADDED
@@ -0,0 +1,301 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin header-menu-styles {
2
+ ul {
3
+ display: flex;
4
+ > li {
5
+ > a {
6
+ @include semibold-16-16;
7
+ color: var(--header-menu-links-color);
8
+ transition: color .3s ease-in-out;
9
+
10
+ text-decoration: none;
11
+ position: relative;
12
+
13
+ &::after {
14
+ content: '';
15
+ position: absolute;
16
+ width: 100%;
17
+ transform: scaleX(0);
18
+ height: 1px;
19
+ bottom: 0;
20
+ left: 0;
21
+ background-color: $primary-200;
22
+ transform-origin: bottom right;
23
+ transition: transform 0.3s ease-in-out;
24
+ }
25
+
26
+ &:hover:not(.active)::after {
27
+ transform: scaleX(1);
28
+ transform-origin: bottom left;
29
+ }
30
+
31
+ &.active {
32
+ color: $primary-200;
33
+ border-bottom: 1px solid $primary-200;
34
+ }
35
+
36
+ &:hover {
37
+ color: $primary-200;
38
+ }
39
+ &:active {
40
+ color: $primary-200;
41
+ }
42
+ }
43
+
44
+ & + li {
45
+ margin-left: 20px;
46
+ }
47
+ }
48
+ }
49
+ }
50
+
51
+ @mixin header-mobile-menu-styles {
52
+ ul {
53
+ > li {
54
+ transition: all .3s ease-in-out;
55
+
56
+ &.my-account-btn,
57
+ &:not(.lang-switch) > a,
58
+ .language-chooser {
59
+ padding: 12px;
60
+ }
61
+
62
+ > a {
63
+ @include medium-16-24;
64
+ display: block;
65
+ transition: color .3s ease-in-out;
66
+ text-decoration: none;
67
+
68
+ &.active {
69
+ background: $primary-25;
70
+ text-decoration: underline;
71
+ }
72
+ }
73
+
74
+ & + li {
75
+ border-top: 1px solid $main-100;
76
+ }
77
+ }
78
+ }
79
+ }
80
+
81
+ @mixin language-link-option {
82
+ .language-link-option {
83
+ border: 1px solid $main-100;
84
+ background-color: $main-00;
85
+
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ padding: 10px 12px;
90
+ cursor: pointer;
91
+ transition: all .3s ease-in-out;
92
+ text-decoration: none;
93
+
94
+
95
+ &.selected {
96
+ background-color: $primary-50;
97
+ > .lang-text {
98
+ color: $main-900;
99
+ }
100
+ }
101
+ > .lang-text {
102
+ @include semibold-14-16;
103
+ color: $main-500;
104
+
105
+ &:first-letter {
106
+ text-transform: uppercase;
107
+ }
108
+ }
109
+
110
+ > .lang-code {
111
+ @include semibold-14-16;
112
+ color: $primary-400;
113
+ text-transform: uppercase;
114
+ }
115
+
116
+ &:hover {
117
+ background-color: $primary-50;
118
+ > .lang-text {
119
+ color: $main-900;
120
+ }
121
+ }
122
+
123
+ &:first-child {
124
+ border-radius: 4px 4px 0px 0px;
125
+ }
126
+
127
+ &:last-child {
128
+ border-radius: 0px 0px 4px 4px;
129
+ }
130
+
131
+ & + .language-link-option {
132
+ border-top-width: 0px;
133
+ }
134
+ }
135
+ }
136
+
137
+ @mixin footer-menu-styles {
138
+ @include language-link-option;
139
+
140
+ ul {
141
+ display: flex;
142
+ flex-wrap: wrap;
143
+ align-items: center;
144
+ gap: 24px;
145
+ > li > a {
146
+ @include semibold-16-16;
147
+ color: $main-00;
148
+ transition: color .3s ease-in-out;
149
+
150
+ &:hover {
151
+ color: $primary-200;
152
+ }
153
+
154
+ &:active {
155
+ color: $primary-300;
156
+ }
157
+
158
+ &.disabled {
159
+ color: $main-300;
160
+ }
161
+ }
162
+ }
163
+ }
164
+
165
+ @mixin legal-links-styles {
166
+ ul {
167
+ display: flex;
168
+ flex-wrap: wrap;
169
+ align-items: center;
170
+ gap: 20px;
171
+
172
+ > li > a {
173
+ @include medium-lined-12-12;
174
+ color: $main-100;
175
+ }
176
+ }
177
+ }
178
+
179
+ @mixin link-color($color: '') {
180
+ @if $color != '' {
181
+ color: $color;
182
+ } @else {
183
+ color: $primary-400;
184
+ }
185
+
186
+ &:visited {
187
+ @if $color != '' {
188
+ color: $color;
189
+ } @else {
190
+ color: $primary-400;
191
+ }
192
+ }
193
+ }
194
+
195
+ @mixin medium-12-12-link($color: '') {
196
+ @include medium-12-12;
197
+ display: block;
198
+
199
+ @include link-color($color);
200
+ }
201
+
202
+ @mixin regular-14-16-link($color: '') {
203
+ @include regular-14-16;
204
+ display: block;
205
+ @include link-color($color);
206
+ }
207
+
208
+ @mixin admin-nav-links {
209
+ @include medium-16-24;
210
+ @include link-color($main-900);
211
+ display: block;
212
+ text-decoration: none;
213
+ padding: 12px;
214
+
215
+ &.router-link-active {
216
+ @include semibold-16-24;
217
+ background-color: $main-50;
218
+ }
219
+ }
220
+
221
+ @mixin panel-nav-links($mobile: false) {
222
+ .nav-list {
223
+ display: flex;
224
+ flex-direction: column;
225
+ height: 100%;
226
+
227
+ > .nav-item {
228
+ border-bottom: 1px solid $main-50;
229
+ width: 100%;
230
+
231
+ &:first-child {
232
+ border-top: 1px solid $main-50;
233
+ }
234
+
235
+ > a {
236
+ @include medium-16-24;
237
+ padding: 12px;
238
+ display: block;
239
+ text-decoration: none;
240
+
241
+ &:is(:link, :visited, :focus, :active) {
242
+ color: $main-900;
243
+ }
244
+
245
+ &.router-link-active {
246
+ background-color: $main-50;
247
+ @include semibold-16-24;
248
+ }
249
+ }
250
+
251
+ > p {
252
+ @include medium-16-24;
253
+ padding: 40px 12px 12px;
254
+ color: $main-900;
255
+ }
256
+
257
+ &:last-child {
258
+ margin-top: auto;
259
+
260
+ @if $mobile == false {
261
+ border-top: 1px solid $main-50;
262
+ }
263
+
264
+ > a {
265
+ display: flex;
266
+ align-items: center;
267
+ column-gap: 8px;
268
+ }
269
+ }
270
+ }
271
+ }
272
+ }
273
+
274
+ @mixin semibold-14-16-link($color: '') {
275
+ @include semibold-14-16;
276
+ display: block;
277
+
278
+ @include link-color($color);
279
+ }
280
+
281
+ @mixin medium-14-20-link($color: '') {
282
+ @include medium-14-20;
283
+ @include link-color($color);
284
+ }
285
+
286
+ @mixin auth-social-links {
287
+ @include medium-14-20;
288
+ padding: 12px;
289
+ text-decoration: none;
290
+ @include link-color($main-500);
291
+
292
+ > svg {
293
+ width: 24px;
294
+ height: 24px;
295
+ }
296
+ }
297
+
298
+ @mixin medium-16-24-link($color: '') {
299
+ @include medium-16-24;
300
+ @include link-color($color);
301
+ }
src/assets/mixins/_markdown_content.scss ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin markdown-styles($from: '') {
2
+
3
+ a {
4
+ @include medium-16-24-link($primary-400);
5
+ }
6
+
7
+ strong {
8
+ @include semibold-16-24;
9
+ color: var(--markdown-content-strong-text-color);
10
+ padding-bottom: 20px;
11
+ }
12
+
13
+ p {
14
+ @include medium-16-24;
15
+ color: var(--markdown-content-text-color);
16
+
17
+ & + p {
18
+ padding-top: 20px;
19
+ }
20
+
21
+ & + :is(ul, ol) {
22
+ padding-top: 20px;
23
+ }
24
+ }
25
+
26
+ table {
27
+ @include custom-table-style;
28
+ }
29
+
30
+ ul {
31
+ list-style: disc;
32
+ }
33
+
34
+ ol {
35
+ list-style: decimal;
36
+ }
37
+
38
+ iframe {
39
+ margin-block: 20px;
40
+ }
41
+
42
+ ul, ol {
43
+ list-style-position: inside;
44
+ -webkit-padding-start: 15px;
45
+ padding-left: 15px;
46
+
47
+ @if ($from != 'collapsible') {
48
+ padding-top: 20px;
49
+ }
50
+
51
+ li {
52
+ @include medium-16-24;
53
+ color: var(--markdown-content-text-color);
54
+
55
+ > p {
56
+ display: inline-block;
57
+ }
58
+
59
+ & + li {
60
+ padding-top: 20px;
61
+ }
62
+ }
63
+
64
+ & + p {
65
+ padding-top: 20px;
66
+ }
67
+ }
68
+
69
+ h1,h2,h3,h4,h5 {
70
+ color: var(--markdown-content-strong-text-color);
71
+
72
+ & + p {
73
+ padding-top: 20px;
74
+ }
75
+ }
76
+
77
+ h1 {
78
+ @include h1;
79
+
80
+ &:not(:first-child) {
81
+ padding-top: 60px;
82
+ }
83
+ }
84
+
85
+ h2 {
86
+ @include h2;
87
+
88
+ &:not(:first-child) {
89
+ padding-top: 60px;
90
+ }
91
+ }
92
+
93
+ h3 {
94
+ @include h3;
95
+
96
+ &:not(:first-child) {
97
+ padding-top: 40px;
98
+ }
99
+ }
100
+
101
+ h4 {
102
+ @include h4;
103
+
104
+ &:not(:first-child) {
105
+ padding-top: 40px;
106
+ }
107
+ }
108
+
109
+ h5 {
110
+ @include h5;
111
+
112
+ &:not(:first-child) {
113
+ padding-top: 40px;
114
+ }
115
+ }
116
+ }
src/assets/mixins/_post.scss ADDED
@@ -0,0 +1,241 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin post-style {
2
+ gap: 12px;
3
+
4
+ > .post {
5
+ padding: 12px;
6
+ box-shadow: 0px 2px 8px 0px rgba(89, 99, 168, 0.16);
7
+ border-radius: 8px;
8
+ position: relative;
9
+
10
+ & + .post {
11
+ margin-top: 12px;
12
+ }
13
+
14
+ .crop-text {
15
+ display: -webkit-box;
16
+ max-width: calc(100% - 20px);
17
+ line-clamp: 3;
18
+ -webkit-line-clamp: 3;
19
+ -webkit-box-orient: vertical;
20
+ overflow: hidden;
21
+ }
22
+
23
+ &.full-width {
24
+ padding: unset;
25
+
26
+ > .container {
27
+ @include bg_darkener;
28
+ position: relative;
29
+
30
+ > a {
31
+ position: absolute;
32
+ top: 0px;
33
+ width: 100%;
34
+ height: 100%;
35
+ opacity: 0;
36
+ user-select: none;
37
+ z-index: 3;
38
+ }
39
+
40
+ > img {
41
+ width: 100%;
42
+ height: 560px;
43
+ border-radius: 8px;
44
+ }
45
+
46
+ > .inside-text {
47
+ position: absolute;
48
+ padding: 12px;
49
+ display: flex;
50
+ top: 0px;
51
+ flex-direction: column;
52
+ height: 100%;
53
+ z-index: 2;
54
+
55
+ > .top > .category-tag {
56
+ @include tag-circle-small;
57
+ width: fit-content;
58
+ }
59
+
60
+ > .bottom {
61
+ margin-top: auto;
62
+
63
+ > .title {
64
+ @include h4;
65
+ color: $main-00;
66
+ }
67
+
68
+ > .description {
69
+ @include medium-16-24;
70
+ color: $main-00;
71
+ margin-top: 12px;
72
+ }
73
+
74
+ > .created-date {
75
+ display: flex;
76
+ align-items: center;
77
+ column-gap: 6px;
78
+ margin-top: 20px;
79
+ > svg {
80
+ color: $main-00;
81
+ }
82
+
83
+ > span {
84
+ @include regular-14-16;
85
+ color: $main-00;
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ @media (min-width: $mobile-768-breakpoint) {
93
+ grid-column: span 3;
94
+
95
+ > .container {
96
+ > .inside-text {
97
+ padding: 20px;
98
+ }
99
+
100
+ > img {
101
+ height: 720px;
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ > .container {
108
+ > .redirect-link {
109
+ position: absolute;
110
+ top: 0px;
111
+ left: 0px;
112
+ width: 100%;
113
+ height: 100%;
114
+ opacity: 0;
115
+ user-select: none;
116
+ z-index: 1;
117
+ }
118
+
119
+ > .image {
120
+ position: relative;
121
+
122
+ > img {
123
+ border-radius: 4px;
124
+ width: 100%;
125
+ height: 260px;
126
+ }
127
+
128
+ > .category {
129
+ @include tag-circle-small;
130
+ width: fit-content;
131
+ position: absolute;
132
+ top: 12px;
133
+ left: 12px;
134
+ }
135
+ }
136
+
137
+ > .content {
138
+ > .title {
139
+ @include semibold-16-24;
140
+ color: $main-900;
141
+ margin-top: 8px;
142
+ }
143
+
144
+ > .description {
145
+ @include medium-16-24;
146
+ color: $main-500;
147
+ margin-top: 8px;
148
+ }
149
+ }
150
+
151
+ > .bottom {
152
+ display: flex;
153
+ justify-content: space-between;
154
+ align-items: center;
155
+ margin-top: 12px;
156
+
157
+ > .continue-reading {
158
+ @include semibold-14-16-link($primary-400);
159
+ }
160
+
161
+ > .created-date {
162
+ display: flex;
163
+ justify-content: space-between;
164
+ align-items: center;
165
+ column-gap: 6px;
166
+
167
+ > svg {
168
+ color: $main-300;
169
+ }
170
+
171
+ > span {
172
+ @include regular-14-16;
173
+ color: $main-300;
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+
180
+ @media (min-width: $mobile-768-breakpoint) {
181
+ display: grid;
182
+ gap: 20px;
183
+
184
+ > .post {
185
+ padding: 20px;
186
+
187
+ > .container {
188
+ display: grid;
189
+ grid-template-rows: auto 1fr auto;
190
+ height: 100%;
191
+
192
+ > .image {
193
+ > img {
194
+ height: 300px;
195
+ }
196
+
197
+ > .category {
198
+ top: 20px;
199
+ left: 20px;
200
+ }
201
+ }
202
+ }
203
+
204
+ & + .post {
205
+ margin-top: unset;
206
+ }
207
+ }
208
+ }
209
+ }
210
+
211
+ @mixin bg_darkener {
212
+ &::after {
213
+ content: "";
214
+ background-image: url('@/img/big-article-darkener.svg');
215
+ background-repeat: no-repeat;
216
+ position: absolute;
217
+ background-position: bottom;
218
+ background-size: cover;
219
+ top: 0px;
220
+ height: 100%;
221
+ width: 100%;
222
+ border-radius: 8px;
223
+ z-index: 1;
224
+ }
225
+ }
226
+
227
+ @mixin auth_modal_article_darkener {
228
+ &::after {
229
+ content: "";
230
+ background-image: url('@/img/slideshow-article-darkener.svg');
231
+ background-repeat: no-repeat;
232
+ background-position: bottom;
233
+ background-size: cover;
234
+ position: absolute;
235
+ top: 0px;
236
+ height: 100%;
237
+ width: 100%;
238
+ border-radius: 8px;
239
+ z-index: 1;
240
+ }
241
+ }
src/assets/mixins/_radio.scss ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin radio {
2
+ > input[type='radio'] {
3
+ padding: 0;
4
+ height: initial;
5
+ width: initial;
6
+ margin-bottom: 0;
7
+ display: none;
8
+ cursor: pointer;
9
+
10
+ &:checked + label:after {
11
+ content: '';
12
+ display: block;
13
+ position: absolute;
14
+ background-image: url('@/assets/svg/radio-on.svg');
15
+ background-repeat: no-repeat;
16
+ background-size: contain;
17
+ width: 24px;
18
+ height: 24px;
19
+ }
20
+ }
21
+
22
+ > label {
23
+ @include medium-14-20;
24
+ position: relative;
25
+ cursor: pointer;
26
+ display: flex;
27
+ column-gap: 12px;
28
+ align-items: center;
29
+ color: $main-500;
30
+
31
+ &::before {
32
+ content: '';
33
+ flex-shrink: 0;
34
+ -webkit-appearance: none;
35
+ appearance: none;
36
+ background-image: url('@/assets/svg/radio-off.svg');
37
+ background-repeat: no-repeat;
38
+ background-size: contain;
39
+ width: 24px;
40
+ height: 24px;
41
+ border-radius: 12px;
42
+ cursor: pointer;
43
+ }
44
+
45
+ &:hover:before {
46
+ background-color: #F4F5FE;
47
+ }
48
+ }
49
+
50
+ &.disabled > label {
51
+ color: $main-300;
52
+ pointer-events: none;
53
+
54
+ &::before {
55
+ border-color: $main-50;
56
+ background-color: $main-00;
57
+ }
58
+ }
59
+ }
60
+
61
+ @mixin radio-has-error {
62
+ label {
63
+ color: $error-900;
64
+
65
+ &::before{
66
+ border-color: $error-900;
67
+ background-color: $error-50;
68
+ }
69
+ }
70
+ }
71
+
src/assets/mixins/_scrollbars.scss ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin scrollbar {
2
+
3
+ /* width */
4
+ ::-webkit-scrollbar {
5
+ border-radius: 100px;
6
+ height: 8px;
7
+ width:5px;
8
+ border: 1px solid $primary-50;
9
+ }
10
+
11
+ /* Track */
12
+ ::-webkit-scrollbar-track {
13
+ background: transparent;
14
+ }
15
+
16
+ /* Handle */
17
+ ::-webkit-scrollbar-thumb {
18
+ border-radius: 100px;
19
+ background: $primary-50;
20
+
21
+ &:hover{
22
+ background:#cfd0f9;
23
+ }
24
+ }
25
+ }
src/assets/mixins/_statuses.scss ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin subscription-status {
2
+ @include medium-12-12;
3
+ border-radius: 4px;
4
+ backdrop-filter: blur(4px);
5
+ padding: 4px;
6
+
7
+ &.active {
8
+ color: $success-900;
9
+ border: 1px solid $success-900;
10
+ background-color: $success-50;
11
+ }
12
+
13
+ &.free,
14
+ &.premium {
15
+ color: $analogous-900;
16
+ border: 1px solid $analogous-900;
17
+ background-color: $analogous-50;
18
+ }
19
+
20
+ &.expired,
21
+ &.overdue {
22
+ color: $main-300;
23
+ border: 1px solid $main-300;
24
+ background-color: $main-25;
25
+ }
26
+
27
+ &.refunded,
28
+ &.partially-refunded {
29
+ color: $complementary-900;
30
+ border: 1px solid $complementary-900;
31
+ background-color: $complementary-50;
32
+ }
33
+
34
+ &.canceled {
35
+ color: $error-900;
36
+ border: 1px solid $error-900;
37
+ background-color: $error-50;
38
+ }
39
+ }
40
+
41
+ @mixin payment-status {
42
+ @include medium-12-12;
43
+ border-radius: 4px;
44
+ backdrop-filter: blur(4px);
45
+ padding: 4px;
46
+
47
+ &.paid {
48
+ color: $success-900;
49
+ border: 1px solid $success-900;
50
+ background-color: $success-50;
51
+ }
52
+
53
+ &.refunded,
54
+ &.partially-refunded,
55
+ &.chargeback {
56
+ color: $complementary-900;
57
+ border: 1px solid $complementary-900;
58
+ background-color: $complementary-50;
59
+ }
60
+
61
+ &.pending-refund {
62
+ color: $analogous-900;
63
+ border: 1px solid $analogous-900;
64
+ background-color: $analogous-50;
65
+ }
66
+
67
+ &.refund-rejected {
68
+ color: $error-900;
69
+ border: 1px solid $error-900;
70
+ background-color: $error-50;
71
+ }
72
+ }
73
+
74
+ @mixin affiliate-status {
75
+ @include medium-12-12;
76
+ border-radius: 4px;
77
+ backdrop-filter: blur(4px);
78
+ padding: 4px;
79
+
80
+ &.revenue {
81
+ color: $success-900;
82
+ border: 1px solid $success-900;
83
+ background-color: $success-50;
84
+ }
85
+
86
+ &.refunded {
87
+ color: $complementary-900;
88
+ border: 1px solid $complementary-900;
89
+ background-color: $complementary-50;
90
+ }
91
+
92
+ &.payout {
93
+ color: $analogous-900;
94
+ border: 1px solid $analogous-900;
95
+ background-color: $analogous-50;
96
+ }
97
+
98
+ &.chargeback {
99
+ color: $error-900;
100
+ border: 1px solid $error-900;
101
+ background-color: $error-50;
102
+ }
103
+ }
src/assets/mixins/_table.scss ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin custom-table-style {
2
+ width: 100%;
3
+
4
+ border-collapse: collapse;
5
+ border-radius: 8px;
6
+ border-style: hidden;
7
+ box-shadow: 0 0 0 1px $main-50;
8
+
9
+ th {
10
+ background-color: $main-25;
11
+
12
+ &:first-child {
13
+ border-radius: 8px 0px 0px 0px;
14
+ }
15
+
16
+ &:last-child {
17
+ border-radius: 0px 8px 0px 0px;
18
+ }
19
+
20
+ > .select-all {
21
+ display: flex;
22
+ align-items: center;
23
+ column-gap: 0px;
24
+ }
25
+
26
+ > .head-label {
27
+ display: flex;
28
+ justify-content: flex-start;
29
+ column-gap: 10px;
30
+ min-width: 100px;
31
+
32
+ > p {
33
+ @include medium-14-20;
34
+ color: $main-300;
35
+ }
36
+
37
+ > svg {
38
+ cursor: pointer;
39
+ color: $main-300;
40
+ flex-shrink: 0;
41
+ }
42
+ }
43
+ }
44
+
45
+ td, th {
46
+ border-bottom: 1px solid $main-50;
47
+ padding: 12px;
48
+ text-align: left;
49
+
50
+ > p,
51
+ > span {
52
+ @include medium-14-20;
53
+ color: $main-500;
54
+ max-width: 700px;
55
+ white-space: nowrap;
56
+ overflow: hidden;
57
+ text-overflow: ellipsis;
58
+
59
+ @media (max-width: $tablet-1280-breakpoint) {
60
+ max-width: 300px;
61
+ }
62
+
63
+ }
64
+
65
+ > .actions {
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: flex-start;
69
+ column-gap: 10px;
70
+
71
+ > .table-action-edit {
72
+ color: $primary-400;
73
+ cursor: pointer;
74
+ }
75
+
76
+ > .table-action-delete {
77
+ color: $main-300;
78
+ cursor: pointer;
79
+ }
80
+ }
81
+ }
82
+ }
src/assets/mixins/_tags.scss ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin tag($bg-color, $text-color, $border-radius, $border-color: '', $padding: '', $font-size: '') {
2
+ @if $font-size == '12/12' {
3
+ @include medium-12-12;
4
+ } @else if $font-size == '14/20' {
5
+ @include medium-14-20;
6
+ } @else {
7
+ @include medium-16-24;
8
+ }
9
+
10
+ background-color: $bg-color;
11
+ border-radius: $border-radius;
12
+ color: $text-color;
13
+ border-width: 0px;
14
+ border-style: solid;
15
+ display: flex;
16
+ align-items: center;
17
+
18
+ @if $border-color != '' {
19
+ border-width: 1px;
20
+ border-color: $border-color;
21
+ }
22
+
23
+ @if $padding != '' {
24
+ padding: $padding;
25
+ } @else {
26
+ padding: 8px 12px;
27
+ }
28
+ }
29
+
30
+ @mixin tag-circle {
31
+ @include tag($primary-50, $primary-900, 100px);
32
+ }
33
+
34
+ @mixin tag-pricing {
35
+ @include tag($complementary-100, $complementary-900, 100px, '', 4px 8px, '12/12');
36
+ }
37
+
38
+ @mixin tag-keyword {
39
+ @include tag($primary-25, $main-1000, 100px, '', 8px 12px, '12/12');
40
+ }
41
+
42
+ @mixin tag-square {
43
+ @include tag($primary-50, $primary-900, 4px);
44
+ }
45
+
46
+ @mixin tag-square-with-border {
47
+ @include tag($primary-25, $primary-400, 4px, $primary-100, 5px);
48
+ }
49
+
50
+ @mixin tag-coming {
51
+ @include tag($main-50, $main-300, 4px, $main-200, 5px, '12/12');
52
+ }
53
+
54
+ @mixin tag-popular {
55
+ @include tag($complementary-50, $complementary-900, 4px, $complementary-900, 4px, '12/12');
56
+ }
57
+
58
+ @mixin tag-square-big {
59
+ @include tag($main-00, $main-900, 4px, $primary-100, 20px 26px, '14/20');
60
+
61
+ @media (max-width: $mobile-768-breakpoint) {
62
+ padding: 12px;
63
+ }
64
+ }
65
+
66
+ @mixin tag-circle-small {
67
+ @include tag($primary-50, $primary-900, 100px, '', '', '12/12');
68
+ }
69
+
70
+ @mixin tag-sources-no {
71
+ @include tag($primary-50, $primary-900, 100px, '', '', '12/12');
72
+ justify-content: center;
73
+ min-width: 16px;
74
+ height: 16px;
75
+ padding: 4px;
76
+ }
77
+
78
+ @mixin group-results-tag {
79
+ display: flex;
80
+ align-items: center;
81
+ column-gap: 4px;
82
+
83
+ .count {
84
+ @include tag($main-50, $main-900, 100px, '', 4px 6px, '12/12');
85
+ }
86
+
87
+ .label {
88
+ @include medium-12-12;
89
+ color: $main-300;
90
+ }
91
+ }
src/assets/mixins/_textarea.scss ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin textarea {
2
+ @include medium-14-20;
3
+ border: 1px solid $main-50;
4
+ border-radius: 6px;
5
+ padding: 10px 12px;
6
+ transition: border-color, background-color .3s ease-in-out;
7
+ background-color: $main-00;
8
+ outline: none;
9
+ resize: vertical;
10
+ vertical-align: top;
11
+
12
+ &:hover {
13
+ border-color: $primary-200;
14
+ background-color: $primary-25;
15
+ }
16
+
17
+ &:active,
18
+ &:focus {
19
+ border-color: $primary-400;
20
+ background-color: $primary-25;
21
+ }
22
+
23
+ &::placeholder {
24
+ @include medium-14-20;
25
+ color: $main-100;
26
+ }
27
+ }
28
+
29
+ @mixin textarea-has-error {
30
+ border-color: $error-800;
31
+ color: $error-800;
32
+ background-color: $error-50;
33
+
34
+ &::placeholder {
35
+ @include medium-14-20;
36
+ color: $error-800;
37
+ }
38
+ }
src/assets/mixins/_toggle_switch.scss ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin toggle-switch {
2
+ position: relative;
3
+ display: inline-block;
4
+ width: 37px;
5
+ height: 22px;
6
+ -webkit-transition: all .3s ease-in-out;
7
+ transition: all .3s ease-in-out;
8
+
9
+ > input {
10
+ opacity: 0;
11
+ width: 0;
12
+ height: 0;
13
+ -webkit-transition: all .3s ease-in-out;
14
+ transition: all .3s ease-in-out;
15
+
16
+ &:checked + .slider {
17
+ background-color: $primary-50;
18
+ border-color: $primary-900;
19
+ }
20
+
21
+ &:focus + .slider {
22
+ box-shadow: 0 0 1px $primary-900;
23
+ }
24
+
25
+ &:checked + .slider:before {
26
+ -webkit-transform: translateX(15px);
27
+ -ms-transform: translateX(15px);
28
+ transform: translateX(15px);
29
+
30
+ background-color: $primary-900;
31
+ }
32
+ }
33
+
34
+ > .slider {
35
+ position: absolute;
36
+ cursor: pointer;
37
+ top: 0;
38
+ left: 0;
39
+ right: 0;
40
+ bottom: 0;
41
+ background-color: $main-50;
42
+ border: 1.5px solid $main-500;
43
+ -webkit-transition: all .3s ease-in-out;
44
+ transition: all .3s ease-in-out;
45
+
46
+ &:hover {
47
+ background-color: $primary-100;
48
+ }
49
+
50
+ &::before {
51
+ position: absolute;
52
+ content: "";
53
+ height: 15px;
54
+ width: 15px;
55
+ top: 2px;
56
+ padding: 4px;
57
+ left: 2px;
58
+ bottom: 4px;
59
+ background-color: $main-500;
60
+ -webkit-transition: all .3s ease-in-out;
61
+ transition: all .3s ease-in-out;
62
+ }
63
+
64
+ /* Rounded sliders */
65
+ &.round {
66
+ border-radius: 100px;
67
+ }
68
+
69
+ &.round:before {
70
+ border-radius: 100px;
71
+ }
72
+ }
73
+ }
src/assets/mixins/_typography.scss ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "@/assets/variables";
2
+
3
+ /*
4
+ BOLD
5
+ */
6
+
7
+ //H1
8
+ @mixin h1 {
9
+ font: $bold-font-weight 30px/40px $bold-font;
10
+
11
+ @media (min-width: $tablet-1280-breakpoint) {
12
+ font: $bold-font-weight 48px/68px $bold-font;
13
+ }
14
+ }
15
+
16
+ //H2
17
+ @mixin h2 {
18
+ font: $bold-font-weight 20px/28px $bold-font;
19
+
20
+ @media (min-width: $tablet-1280-breakpoint) {
21
+ font: $bold-font-weight 36px/52px $bold-font;
22
+ }
23
+ }
24
+
25
+ //H3
26
+ @mixin h3 {
27
+ font: $bold-font-weight 18px/24px $bold-font;
28
+
29
+ @media (min-width: $tablet-1280-breakpoint) {
30
+ font: $bold-font-weight 28px/36px $bold-font;
31
+ }
32
+ }
33
+
34
+ //H4
35
+ @mixin h4 {
36
+ font: $semibold-font-weight 16px/24px $semibold-font;
37
+ @media (min-width: $tablet-1280-breakpoint) {
38
+ font: $bold-font-weight 20px/28px $bold-font;
39
+ }
40
+ }
41
+
42
+ @mixin h5 {
43
+ @include bold-18-24;
44
+ }
45
+
46
+ /*
47
+ BOLD
48
+ */
49
+ @mixin bold-18-24 {
50
+ font: $bold-font-weight 16px/24px $bold-font;
51
+
52
+ @media (min-width: $tablet-1280-breakpoint) {
53
+ font: $bold-font-weight 18px/24px $bold-font;
54
+ }
55
+ }
56
+
57
+ @mixin bold-20-28 {
58
+ font: $bold-font-weight 16px/24px $bold-font;
59
+
60
+ @media (min-width: $tablet-1280-breakpoint) {
61
+ font: $bold-font-weight 20px/28px $bold-font;
62
+ }
63
+ }
64
+
65
+ @mixin bold-28-36 {
66
+ font: $bold-font-weight 20px/28px $bold-font;
67
+
68
+ @media (min-width: $tablet-1280-breakpoint) {
69
+ font: $bold-font-weight 28px/36px $bold-font;
70
+ }
71
+ }
72
+
73
+ @mixin bold-36-52 {
74
+ font: $bold-font-weight 20px/28px $bold-font;
75
+
76
+ @media (min-width: $tablet-1280-breakpoint) {
77
+ font: $bold-font-weight 36px/52px $bold-font;
78
+ }
79
+ }
80
+
81
+ /*
82
+ SEMIBOLD
83
+ */
84
+
85
+ @mixin semibold-18-24 {
86
+ font: $semibold-font-weight 18px/24px $semibold-font;
87
+ }
88
+
89
+ @mixin semibold-20-36 {
90
+ font: $semibold-font-weight 20px/36px $semibold-font;
91
+ }
92
+
93
+ @mixin semibold-24-36 {
94
+ font: $semibold-font-weight 24px/36px $semibold-font;
95
+ }
96
+
97
+ @mixin semibold-16-24 {
98
+ font: $semibold-font-weight 16px/24px $semibold-font;
99
+ }
100
+
101
+ @mixin semibold-14-20 {
102
+ font: $semibold-font-weight 14px/20px $semibold-font;
103
+ }
104
+
105
+ @mixin semibold-16-16 {
106
+ font: $semibold-font-weight 16px/16px $semibold-font;
107
+ }
108
+
109
+ @mixin semibold-14-16 {
110
+ font: $semibold-font-weight 14px/16px $semibold-font;
111
+ }
112
+
113
+ @mixin semibold-lined-14-16 {
114
+ @include semibold-14-16;
115
+ text-decoration: underline;
116
+ display: block;
117
+ }
118
+
119
+ @mixin semibold-lined-16-16 {
120
+ @include semibold-16-16;
121
+ text-decoration: underline;
122
+ }
123
+
124
+ /*
125
+ MEDIUM
126
+ */
127
+
128
+ @mixin medium-16-24 {
129
+ font: $medium-font-weight 16px/24px $medium-font;
130
+ }
131
+
132
+ @mixin medium-14-20 {
133
+ font: $medium-font-weight 14px/20px $medium-font;
134
+ }
135
+
136
+ @mixin medium-12-12 {
137
+ font: $medium-font-weight 12px/12px $medium-font;
138
+ }
139
+
140
+ @mixin medium-lined-12-12 {
141
+ @include medium-12-12;
142
+ text-decoration: underline;
143
+ display: block;
144
+ }
145
+
146
+ /*
147
+ REGULAR
148
+ */
149
+
150
+ @mixin regular-14-16 {
151
+ font: $regular-font-weight 14px/16px $regular-font;
152
+ }
153
+
154
+ @mixin regular-14-20 {
155
+ font: $regular-font-weight 14px/20px $regular-font;
156
+ }
157
+
158
+ @mixin regular-10-14 {
159
+ font: $regular-font-weight 10px/14px $regular-font;
160
+ }
161
+
162
+ /*
163
+ Plan Price
164
+ */
165
+
166
+ @mixin plan-price {
167
+ font: $bold-font-weight 28px/36px $bold-font;
168
+
169
+ @media (min-width: $tablet-1280-breakpoint) {
170
+ font: $bold-font-weight 36px/48px $bold-font;
171
+ }
172
+ }
src/assets/mixins/_verification_input.scss ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @mixin verification-input {
2
+ @include bold-18-24;
3
+ border: 1px solid $main-50;
4
+ border-radius: 4px;
5
+ outline: none;
6
+ color: $main-900;
7
+ padding: 10px;
8
+ transition: border-color 0.2s ease-in-out;
9
+ text-align: center;
10
+ background-color: $main-00;
11
+
12
+ &:is(:hover, :active, :focus) {
13
+ border-color: $main-100;
14
+ }
15
+
16
+ &[readonly] {
17
+ cursor: not-allowed;
18
+ }
19
+
20
+ &::placeholder {
21
+ color: $main-100;
22
+ }
23
+
24
+ @media (min-width: $mobile-450-breakpoint) {
25
+ padding: 20px;
26
+ }
27
+ }
28
+
29
+ @mixin verification-has-error {
30
+ > label {
31
+ color: $error-800;
32
+ }
33
+
34
+ > input {
35
+ background-color: $error-50;
36
+ border-color: $error-300;
37
+ }
38
+
39
+ > .error-message > p {
40
+ @include medium-12-12;
41
+ margin-top: 8px;
42
+ color: $error-800;
43
+ }
44
+ }
src/assets/svg/alert.svg ADDED
src/assets/svg/arrow.svg ADDED
src/assets/svg/big-article-darkener.svg ADDED
src/assets/svg/categories/duplicates.svg ADDED
src/assets/svg/categories/people.svg ADDED
src/assets/svg/categories/related.svg ADDED
src/assets/svg/categories/similar.svg ADDED
src/assets/svg/check-off.svg ADDED