├── .prettierrc ├── static ├── glass.png ├── icon.png ├── favicon.ico ├── dashboard.png ├── waves-macos-big-sur-colorful-5k-1920x1080-4992.jpg ├── macos-big-sur-apple-layers-fluidic-colorful-dark-wwdc-2020-5120x2880.jpg └── README.md ├── components ├── README.md ├── AppCard.vue ├── Banner.vue ├── Popup.vue ├── icons │ ├── ai.vue │ ├── pr.vue │ ├── id.vue │ ├── ae.vue │ ├── ps.vue │ └── st.vue ├── MainHeader.vue ├── InstalledApps.vue ├── AppBar.vue └── AppSideBar.vue ├── .editorconfig ├── layouts ├── README.md └── default.vue ├── pages ├── README.md └── index.vue ├── assets ├── README.md └── style.scss ├── plugins └── README.md ├── middleware └── README.md ├── store ├── README.md └── index.js ├── package.json ├── license ├── .github └── workflows │ └── deploy.yml ├── .gitignore ├── nuxt.config.js └── README.md /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /static/glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/staticdesigner/dashboard/HEAD/static/glass.png -------------------------------------------------------------------------------- /static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/staticdesigner/dashboard/HEAD/static/icon.png -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/staticdesigner/dashboard/HEAD/static/favicon.ico -------------------------------------------------------------------------------- /static/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/staticdesigner/dashboard/HEAD/static/dashboard.png -------------------------------------------------------------------------------- /static/waves-macos-big-sur-colorful-5k-1920x1080-4992.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/staticdesigner/dashboard/HEAD/static/waves-macos-big-sur-colorful-5k-1920x1080-4992.jpg -------------------------------------------------------------------------------- /static/macos-big-sur-apple-layers-fluidic-colorful-dark-wwdc-2020-5120x2880.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/staticdesigner/dashboard/HEAD/static/macos-big-sur-apple-layers-fluidic-colorful-dark-wwdc-2020-5120x2880.jpg -------------------------------------------------------------------------------- /components/README.md: -------------------------------------------------------------------------------- 1 | # COMPONENTS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | The components directory contains your Vue.js Components. 6 | 7 | _Nuxt.js doesn't supercharge these components._ 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /layouts/README.md: -------------------------------------------------------------------------------- 1 | # LAYOUTS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Application Layouts. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/views#layouts). 8 | -------------------------------------------------------------------------------- /pages/README.md: -------------------------------------------------------------------------------- 1 | # PAGES 2 | 3 | This directory contains your Application Views and Routes. 4 | The framework reads all the `*.vue` files inside this directory and creates the router of your application. 5 | 6 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing). 7 | -------------------------------------------------------------------------------- /assets/README.md: -------------------------------------------------------------------------------- 1 | # ASSETS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your un-compiled assets such as LESS, SASS, or JavaScript. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked). 8 | -------------------------------------------------------------------------------- /plugins/README.md: -------------------------------------------------------------------------------- 1 | # PLUGINS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains Javascript plugins that you want to run before mounting the root Vue.js application. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins). 8 | -------------------------------------------------------------------------------- /middleware/README.md: -------------------------------------------------------------------------------- 1 | # MIDDLEWARE 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your application middleware. 6 | Middleware let you define custom functions that can be run before rendering either a page or a group of pages. 7 | 8 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware). 9 | -------------------------------------------------------------------------------- /store/README.md: -------------------------------------------------------------------------------- 1 | # STORE 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Vuex Store files. 6 | Vuex Store option is implemented in the Nuxt.js framework. 7 | 8 | Creating a file in this directory automatically activates the option in the framework. 9 | 10 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store). 11 | -------------------------------------------------------------------------------- /static/README.md: -------------------------------------------------------------------------------- 1 | # STATIC 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your static files. 6 | Each file inside this directory is mapped to `/`. 7 | Thus you'd want to delete this README.md before deploying to production. 8 | 9 | Example: `/static/robots.txt` is mapped as `/robots.txt`. 10 | 11 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#static). 12 | -------------------------------------------------------------------------------- /components/AppCard.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /store/index.js: -------------------------------------------------------------------------------- 1 | export const state = () => ({ 2 | popup: false, 3 | dark: false, 4 | installedapps: [ 5 | { appid: 1, name: 'Photoshop', status: 'Updated' }, 6 | { appid: 2, name: 'Illustrator', status: 'Update Available' }, 7 | { appid: 3, name: 'After Effects', status: 'Updated' }, 8 | ], 9 | }) 10 | 11 | export const getters = {} 12 | 13 | export const mutations = { 14 | togglePopup(state) { 15 | state.popup = !state.popup 16 | }, 17 | } 18 | 19 | export const actions = { 20 | togglePopup(context) { 21 | context.commit('togglePopup') 22 | }, 23 | } 24 | -------------------------------------------------------------------------------- /components/Banner.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dashboard", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "nuxt", 7 | "build": "nuxt build", 8 | "start": "nuxt start", 9 | "generate": "nuxt generate" 10 | }, 11 | "dependencies": { 12 | "@nuxtjs/axios": "^5.13.1", 13 | "@nuxtjs/pwa": "^3.3.5", 14 | "core-js": "^3.9.1", 15 | "normalize.css": "^8.0.1", 16 | "nuxt": "^2.15.3" 17 | }, 18 | "devDependencies": { 19 | "eslint-config-prettier": "^8.1.0", 20 | "eslint-plugin-prettier": "^3.3.1", 21 | "fibers": "^5.0.0", 22 | "prettier": "^2.2.1", 23 | "sass": "^1.32.8", 24 | "sass-loader": "^10.1.1" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /components/Popup.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 32 | -------------------------------------------------------------------------------- /components/icons/ai.vue: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /components/icons/pr.vue: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /components/icons/id.vue: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /components/icons/ae.vue: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | Copyright (c) 2021 by Aysenur Turk (https://codepen.io/TurkAysenur/pen/ZEpxeYm) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | 9 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy 2 | on: [push] 3 | jobs: 4 | build-and-deploy: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Checkout 🛎️ 8 | uses: actions/checkout@v2.3.1 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly. 9 | with: 10 | persist-credentials: false 11 | 12 | - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. 13 | run: | 14 | npm install 15 | npm run generate 16 | 17 | - name: Deploy 🚀 18 | uses: JamesIves/github-pages-deploy-action@3.7.1 19 | with: 20 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 21 | BRANCH: gh-pages # The branch the action should deploy to. 22 | FOLDER: dist # The folder the action should deploy. 23 | CLEAN: true # Automatically remove deleted files from the deploy branch 24 | -------------------------------------------------------------------------------- /components/MainHeader.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 51 | -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 65 | -------------------------------------------------------------------------------- /components/icons/ps.vue: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | /logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # Nuxt generate 72 | dist 73 | 74 | # vuepress build output 75 | .vuepress/dist 76 | 77 | # Serverless directories 78 | .serverless 79 | 80 | # IDE / Editor 81 | .idea 82 | 83 | # Service worker 84 | sw.* 85 | 86 | # macOS 87 | .DS_Store 88 | 89 | # Vim swap files 90 | *.swp 91 | -------------------------------------------------------------------------------- /components/icons/st.vue: -------------------------------------------------------------------------------- 1 | 40 | -------------------------------------------------------------------------------- /nuxt.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | // Target: https://go.nuxtjs.dev/config-target 3 | target: 'static', 4 | router: { 5 | base: '/dashboard/', 6 | }, 7 | 8 | // Global page headers: https://go.nuxtjs.dev/config-head 9 | head: { 10 | // bodyAttrs: { class: 'light-mode' }, 11 | title: 'Dashboard - Nuxt.js fast loading dashboard theme', 12 | meta: [ 13 | { charset: 'utf-8' }, 14 | { name: 'viewport', content: 'width=device-width, initial-scale=1' }, 15 | { 16 | hid: 'description', 17 | name: 'description', 18 | content: 19 | 'Dashboard ¬– is a lightweight, minimal, fast loading front-end dashboard theme. It is built with Vue.js and Nuxt.js.', 20 | }, 21 | ], 22 | link: [ 23 | { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }, 24 | { 25 | rel: 'stylesheet', 26 | href: 27 | 'https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700&display=swap', 28 | }, 29 | ], 30 | }, 31 | 32 | // Global CSS: https://go.nuxtjs.dev/config-css 33 | css: ['normalize.css/normalize.css', '@/assets/style.scss'], 34 | 35 | // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins 36 | plugins: [], 37 | 38 | // Auto import components: https://go.nuxtjs.dev/config-components 39 | components: true, 40 | components: [ 41 | '~/components', 42 | { path: '~/components/icons/', prefix: 'icons' }, 43 | ], 44 | 45 | // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules 46 | buildModules: [], 47 | 48 | // Modules: https://go.nuxtjs.dev/config-modules 49 | modules: [ 50 | // https://go.nuxtjs.dev/axios 51 | '@nuxtjs/axios', 52 | // https://go.nuxtjs.dev/pwa 53 | '@nuxtjs/pwa', 54 | ], 55 | 56 | // Axios module configuration: https://go.nuxtjs.dev/config-axios 57 | axios: {}, 58 | 59 | // PWA module configuration: https://go.nuxtjs.dev/pwa 60 | pwa: { 61 | manifest: { 62 | lang: 'en', 63 | }, 64 | }, 65 | 66 | // Build Configuration: https://go.nuxtjs.dev/config-build 67 | build: {}, 68 | // server: { 69 | // port: 8000, 70 | // host: '0.0.0.0', 71 | // }, 72 | } 73 | -------------------------------------------------------------------------------- /components/InstalledApps.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 75 | -------------------------------------------------------------------------------- /components/AppBar.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 93 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dashboard 2 | 3 | **Dashboard** - is a lightweight, minimal, fast loading front-end dashboard theme. It is built with Vue.js and Nuxt.js. 4 | 5 | The UI design of the theme is taken from the original work of [Aysenur Turk](https://codepen.io/TurkAysenur). 6 | 7 | ## Build Setup 8 | 9 | You will need a Windows, Mac, or Linux computer with access to the command-line and permission to install new system packages. An active internet connection is required in order to install the following required software: 10 | 11 | - Node https://nodejs.org/en/ 12 | - NPM https://www.npmjs.com/ 13 | - Yarn https://yarnpkg.com/ 14 | - Vue CLI https://cli.vuejs.org/ 15 | 16 | Using the terminal, navigate to the folder containing the unzipped theme and run the `npm install` command. This will install all of the required packages and prepare your project for local development and production deployment. Once complete, type `npm run dev` and press the enter key. Vue CLI will then compile the project and serve a local server located at http://localhost:8080/dashboard/. 17 | 18 | ```bash 19 | # install dependencies 20 | $ yarn install 21 | 22 | # serve with hot reload at localhost:3000 23 | $ yarn dev 24 | 25 | # build for production and launch server 26 | $ yarn build 27 | $ yarn start 28 | 29 | # generate static project 30 | $ yarn generate 31 | ``` 32 | 33 | For detailed explanation on how things work, check out [Nuxt.js docs](https://nuxtjs.org). 34 | 35 |
36 | 37 | ## [Demo](https://staticdesigner.github.io/dashboard/) 38 | 39 | 40 | 41 | ## Licensing 42 | 43 | Copyright (c) 2021 by [Aysenur Turk](https://codepen.io/TurkAysenur/pen/ZEpxeYm) 44 | 45 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 46 | 47 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 48 | 49 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 50 | 51 |
52 | 53 | ## Highlights 54 | 55 | - Beautiful design **Glassmorphism Creative Cloud App** 56 | - Fully responsive 57 | - Fast loading 58 | - Lightweight 59 | - Built on Vue & Nuxt 60 | - SCSS style 61 | - Well commented and clean code 62 | - Optimized for SEO and Accessibility 63 | 64 | Still have **questions** about this theme? Reach out to us by [email](mailto:vinay@staticdesigner.com). 65 | -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 104 | 105 | 112 | -------------------------------------------------------------------------------- /components/AppSideBar.vue: -------------------------------------------------------------------------------- 1 | 177 | -------------------------------------------------------------------------------- /assets/style.scss: -------------------------------------------------------------------------------- 1 | // @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700&display=swap'); 2 | 3 | * { 4 | outline: none; 5 | box-sizing: border-box; 6 | } 7 | 8 | :root { 9 | --theme-bg-color: rgba(16 18 27 / 40%); 10 | --border-color: rgba(113 119 144 / 25%); 11 | --theme-color: #f9fafb; 12 | --inactive-color: rgb(113 119 144 / 78%); 13 | --body-font: 'Poppins', sans-serif; 14 | --hover-menu-bg: rgba(12 15 25 / 30%); 15 | --content-title-color: #999ba5; 16 | --content-bg: rgb(146 151 179 / 13%); 17 | --button-inactive: rgb(249 250 251 / 55%); 18 | --dropdown-bg: #21242d; 19 | --dropdown-hover: rgb(42 46 60); 20 | --popup-bg: rgb(22 25 37); 21 | --search-bg: #14162b; 22 | --overlay-bg: rgba(36, 39, 59, 0.3); 23 | --scrollbar-bg: rgb(1 2 3 / 40%); 24 | } 25 | 26 | .light-mode { 27 | --theme-bg-color: rgb(255 255 255 / 31%); 28 | --theme-color: #3c3a3a; 29 | --inactive-color: #333333; 30 | --button-inactive: #3c3a3a; 31 | --search-bg: rgb(255 255 255 / 31%); 32 | --dropdown-bg: #f7f7f7; 33 | --overlay-bg: rgb(255 255 255 / 30%); 34 | --dropdown-hover: rgb(236 236 236); 35 | --border-color: rgb(255 255 255 / 35%); 36 | --popup-bg: rgb(255 255 255); 37 | --hover-menu-bg: rgba(255 255 255 / 35%); 38 | --scrollbar-bg: rgb(255 253 253 / 57%); 39 | --content-title-color: --theme-color; 40 | } 41 | 42 | html { 43 | box-sizing: border-box; 44 | -webkit-font-smoothing: antialiased; 45 | } 46 | 47 | body { 48 | font-family: var(--body-font); 49 | background-image: url('~/static/macos-big-sur-apple-layers-fluidic-colorful-dark-wwdc-2020-5120x2880.jpg'); 50 | background-size: cover; 51 | background-position: center; 52 | display: flex; 53 | justify-content: center; 54 | align-items: center; 55 | flex-direction: column; 56 | margin: 0; 57 | padding: 2em; 58 | width: 100%; 59 | height: 100vh; 60 | @media screen and (max-width: 480px) { 61 | padding: 0.8em; 62 | } 63 | } 64 | 65 | img { 66 | max-width: 100%; 67 | } 68 | 69 | .dark-light { 70 | position: fixed; 71 | width: 40px; 72 | height: 40px; 73 | bottom: 50px; 74 | right: 30px; 75 | background-color: var(--dropdown-bg); 76 | box-shadow: -1px 3px 8px -1px rgba(0, 0, 0, 0.2); 77 | padding: 8px; 78 | border-radius: 50%; 79 | z-index: 3; 80 | cursor: pointer; 81 | svg { 82 | width: 24px; 83 | flex-shrink: 0; 84 | fill: #ffce45; 85 | stroke: #ffce45; 86 | transition: 0.5s; 87 | } 88 | } 89 | 90 | .light-mode { 91 | .dark-light svg { 92 | fill: transparent; 93 | stroke: var(--theme-color); 94 | } 95 | .profile-img { 96 | border: 2px solid var(--theme-bg-color); 97 | } 98 | .content-section ul { 99 | background-color: var(--theme-bg-color); 100 | } 101 | .pop-up__title { 102 | border-color: var(--theme-color); 103 | } 104 | .dropdown.is-active ul { 105 | background-color: rgb(255 255 255 / 94%); 106 | } 107 | } 108 | 109 | body.light-mode:before { 110 | content: ''; 111 | position: absolute; 112 | left: 0; 113 | top: 0; 114 | width: 100%; 115 | height: 100vh; 116 | background: linear-gradient( 117 | 180deg, 118 | rgba(255, 255, 255, 0.72) 0%, 119 | rgb(255 255 255 / 45%) 100% 120 | ); 121 | backdrop-filter: saturate(3); 122 | z-index: -1; 123 | } 124 | 125 | .app { 126 | background-color: var(--theme-bg-color); 127 | max-width: 1250px; 128 | max-height: 860px; 129 | height: 90vh; 130 | display: flex; 131 | flex-direction: column; 132 | overflow: hidden; 133 | width: 100%; 134 | border-radius: 14px; 135 | backdrop-filter: blur(20px); 136 | -webkit-backdrop-filter: blur(20px); 137 | font-size: 15px; 138 | font-weight: 500; 139 | } 140 | 141 | .header { 142 | display: flex; 143 | align-items: center; 144 | flex-shrink: 0; 145 | height: 58px; 146 | width: 100%; 147 | border-bottom: 1px solid var(--border-color); 148 | padding: 0 30px; 149 | white-space: nowrap; 150 | @media screen and (max-width: 480px) { 151 | padding: 0 16px; 152 | } 153 | &-menu { 154 | display: flex; 155 | align-items: center; 156 | a { 157 | padding: 20px 30px; 158 | text-decoration: none; 159 | color: var(--inactive-color); 160 | border-bottom: 2px solid transparent; 161 | transition: 0.3s; 162 | @media screen and (max-width: 610px) { 163 | &:not(.main-header-link) { 164 | display: none; 165 | } 166 | } 167 | &.is-active, 168 | &:hover { 169 | color: var(--theme-color); 170 | border-bottom: 2px solid var(--theme-color); 171 | } 172 | } 173 | } 174 | } 175 | 176 | .notify { 177 | position: relative; 178 | &:before { 179 | content: ''; 180 | position: absolute; 181 | background-color: #3a6df0; 182 | width: 6px; 183 | height: 6px; 184 | border-radius: 50%; 185 | right: 20px; 186 | top: 16px; 187 | } 188 | @media screen and (max-width: 1055px) { 189 | display: none; 190 | } 191 | } 192 | 193 | .menu-circle { 194 | width: 15px; 195 | height: 15px; 196 | background-color: #f96057; 197 | border-radius: 50%; 198 | box-shadow: 24px 0 0 0 #f8ce52, 48px 0 0 0 #5fcf65; 199 | margin-right: 195px; 200 | flex-shrink: 0; 201 | @media screen and (max-width: 945px) { 202 | display: none; 203 | } 204 | } 205 | 206 | .search-bar { 207 | height: 40px; 208 | display: flex; 209 | width: 100%; 210 | max-width: 400px; 211 | padding-left: 16px; 212 | border-radius: 4px; 213 | input { 214 | width: 100%; 215 | height: 100%; 216 | border: none; 217 | background-color: var(--search-bg); 218 | border-radius: 4px; 219 | font-family: var(--body-font); 220 | font-size: 15px; 221 | font-weight: 500; 222 | padding: 0 20px 0 40px; 223 | box-shadow: 0 0 0 2px rgb(134 140 160 / 2%); 224 | background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56.966 56.966' fill='%23717790c7'%3e%3cpath d='M55.146 51.887L41.588 37.786A22.926 22.926 0 0046.984 23c0-12.682-10.318-23-23-23s-23 10.318-23 23 10.318 23 23 23c4.761 0 9.298-1.436 13.177-4.162l13.661 14.208c.571.593 1.339.92 2.162.92.779 0 1.518-.297 2.079-.837a3.004 3.004 0 00.083-4.242zM23.984 6c9.374 0 17 7.626 17 17s-7.626 17-17 17-17-7.626-17-17 7.626-17 17-17z'/%3e%3c/svg%3e"); 225 | background-size: 14px; 226 | background-repeat: no-repeat; 227 | background-position: 16px 48%; 228 | color: var(--theme-color); 229 | &::placeholder { 230 | font-family: var(--body-font); 231 | color: var(--inactive-color); 232 | font-size: 15px; 233 | font-weight: 500; 234 | } 235 | } 236 | } 237 | 238 | .header-profile { 239 | display: flex; 240 | align-items: center; 241 | padding: 0 16px 0 40px; 242 | margin-left: auto; 243 | flex-shrink: 0; 244 | svg { 245 | width: 22px; 246 | color: #f9fafb; 247 | flex-shrink: 0; 248 | } 249 | } 250 | 251 | .notification { 252 | position: relative; 253 | &-number { 254 | position: absolute; 255 | background-color: #3a6df0; 256 | width: 16px; 257 | height: 16px; 258 | border-radius: 50%; 259 | font-size: 10px; 260 | display: flex; 261 | align-items: center; 262 | justify-content: center; 263 | color: #fff; 264 | right: -6px; 265 | top: -6px; 266 | } 267 | & + svg { 268 | margin-left: 22px; 269 | @media screen and (max-width: 945px) { 270 | display: none; 271 | } 272 | } 273 | } 274 | 275 | .profile-img { 276 | width: 32px; 277 | height: 32px; 278 | border-radius: 50%; 279 | object-fit: cover; 280 | border: 2px solid var(--theme-color); 281 | margin-left: 22px; 282 | } 283 | 284 | .wide { 285 | .header-menu, 286 | .header-profile { 287 | display: none; 288 | } 289 | .search-bar { 290 | max-width: 600px; 291 | margin: auto; 292 | transition: 0.4s; 293 | box-shadow: 0 0 0 1px var(--border-color); 294 | padding-left: 0; 295 | } 296 | .menu-circle { 297 | margin-right: 0; 298 | } 299 | } 300 | 301 | .wrapper { 302 | display: flex; 303 | flex-grow: 1; 304 | overflow: hidden; 305 | } 306 | 307 | .left-side { 308 | flex-basis: 240px; 309 | border-right: 1px solid var(--border-color); 310 | padding: 26px; 311 | overflow: auto; 312 | flex-shrink: 0; 313 | scrollbar-color: var(--scrollbar-bg) rgba(255, 253, 253, 0); 314 | scrollbar-width: thin; 315 | @media screen and (max-width: 945px) { 316 | display: none; 317 | } 318 | } 319 | 320 | .side-wrapper + .side-wrapper { 321 | margin-top: 20px; 322 | } 323 | 324 | .side-title { 325 | color: var(--inactive-color); 326 | margin-bottom: 14px; 327 | } 328 | 329 | .side-menu { 330 | display: flex; 331 | flex-direction: column; 332 | white-space: nowrap; 333 | a { 334 | text-decoration: none; 335 | color: var(--theme-color); 336 | display: flex; 337 | align-items: center; 338 | font-weight: 400; 339 | padding: 10px; 340 | font-size: 14px; 341 | border-radius: 6px; 342 | transition: 0.3s; 343 | &:hover { 344 | background-color: var(--hover-menu-bg); 345 | } 346 | } 347 | svg { 348 | width: 16px; 349 | margin-right: 8px; 350 | } 351 | } 352 | 353 | .updates { 354 | position: relative; 355 | top: 0; 356 | right: 0; 357 | margin-left: auto; 358 | width: 18px; 359 | height: 18px; 360 | font-size: 11px; 361 | } 362 | 363 | .main-header { 364 | display: flex; 365 | align-items: center; 366 | border-bottom: 1px solid var(--border-color); 367 | height: 58px; 368 | flex-shrink: 0; 369 | .header-menu { 370 | margin-left: 150px; 371 | @media screen and (max-width: 1055px) { 372 | margin: auto; 373 | } 374 | a { 375 | padding: 20px 24px; 376 | } 377 | } 378 | } 379 | 380 | .main-container { 381 | display: flex; 382 | flex-direction: column; 383 | flex-grow: 1; 384 | } 385 | 386 | .menu-link-main { 387 | text-decoration: none; 388 | color: var(--theme-color); 389 | padding: 0 30px; 390 | @media screen and (max-width: 1055px) { 391 | display: none; 392 | } 393 | } 394 | 395 | .content-wrapper { 396 | display: flex; 397 | flex-direction: column; 398 | color: var(--theme-color); 399 | padding: 20px 40px; 400 | height: 100%; 401 | overflow: auto; 402 | scrollbar-color: var(--scrollbar-bg) rgba(255, 253, 253, 0); 403 | background-color: var(--theme-bg-color); 404 | scrollbar-width: thin; 405 | @media screen and (max-width: 510px) { 406 | padding: 20px; 407 | } 408 | &-header { 409 | display: flex; 410 | align-items: center; 411 | width: 100%; 412 | justify-content: space-between; 413 | background-image: url('https://www.transparenttextures.com/patterns/cubes.png'), 414 | linear-gradient( 415 | to right top, 416 | #cf4af3, 417 | #e73bd7, 418 | #f631bc, 419 | #fd31a2, 420 | #ff3a8b, 421 | #ff4b78, 422 | #ff5e68, 423 | #ff705c, 424 | #ff8c51, 425 | #ffaa49, 426 | #ffc848, 427 | #ffe652 428 | ); 429 | border-radius: 14px; 430 | padding: 20px 40px; 431 | @media screen and (max-width: 415px) { 432 | padding: 20px; 433 | } 434 | } 435 | &.overlay { 436 | pointer-events: none; 437 | transition: 0.3s; 438 | background-color: var(--overlay-bg); 439 | } 440 | } 441 | 442 | .overlay-app { 443 | width: 100%; 444 | height: 100%; 445 | position: fixed; 446 | left: 0; 447 | top: 0; 448 | pointer-events: all; 449 | background-color: rgba(36, 39, 59, 0.8); 450 | opacity: 0; 451 | visibility: hidden; 452 | transition: 0.3s; 453 | &.is-active { 454 | visibility: visible; 455 | opacity: 1; 456 | } 457 | } 458 | 459 | .img-content { 460 | font-weight: 500; 461 | font-size: 17px; 462 | display: flex; 463 | align-items: center; 464 | margin: 0; 465 | svg { 466 | width: 28px; 467 | margin-right: 14px; 468 | } 469 | } 470 | 471 | .content-text { 472 | font-weight: 400; 473 | font-size: 14px; 474 | margin-top: 16px; 475 | line-height: 1.7em; 476 | color: #ebecec; 477 | display: -webkit-box; 478 | -webkit-line-clamp: 4; 479 | -webkit-box-orient: vertical; 480 | overflow: hidden; 481 | text-overflow: ellipsis; 482 | } 483 | 484 | .content-wrapper-context { 485 | max-width: 350px; 486 | } 487 | 488 | .content-button { 489 | background-color: #3a6df0; 490 | border: none; 491 | padding: 8px 26px; 492 | color: #fff; 493 | border-radius: 20px; 494 | margin-top: 16px; 495 | cursor: pointer; 496 | transition: 0.3s; 497 | white-space: nowrap; 498 | } 499 | 500 | .content-wrapper-img { 501 | width: 186px; 502 | object-fit: cover; 503 | margin-top: -25px; 504 | object-position: center; 505 | @media screen and (max-width: 570px) { 506 | width: 110px; 507 | } 508 | } 509 | 510 | .content-section { 511 | margin-top: 30px; 512 | display: flex; 513 | flex-direction: column; 514 | &-title { 515 | color: var(--content-title-color); 516 | margin-bottom: 14px; 517 | } 518 | ul { 519 | display: flex; 520 | flex-direction: column; 521 | width: 100%; 522 | height: 100%; 523 | justify-content: space-around; 524 | background-color: var(--content-bg); 525 | padding-left: 0; 526 | margin: 0; 527 | border-radius: 14px; 528 | border: 1px solid var(--theme-bg-color); 529 | cursor: pointer; 530 | li { 531 | list-style: none; 532 | padding: 10px 18px; 533 | display: flex; 534 | align-items: center; 535 | font-size: 16px; 536 | width: 100%; 537 | height: 100%; 538 | white-space: nowrap; 539 | transition: 0.3s; 540 | &:hover { 541 | background-color: var(--theme-bg-color); 542 | &:first-child { 543 | border-radius: 13px 13px 0 0; 544 | } 545 | &:last-child { 546 | border-radius: 0 0 13px 13px; 547 | } 548 | } 549 | & + li { 550 | border-top: 1px solid var(--border-color); 551 | } 552 | } 553 | svg { 554 | width: 28px; 555 | border-radius: 6px; 556 | margin-right: 16px; 557 | flex-shrink: 0; 558 | } 559 | } 560 | } 561 | 562 | .products { 563 | display: flex; 564 | align-items: center; 565 | width: 150px; 566 | @media screen and (max-width: 480px) { 567 | width: 120px; 568 | } 569 | } 570 | .status { 571 | margin-left: auto; 572 | width: 140px; 573 | font-size: 15px; 574 | position: relative; 575 | @media screen and (max-width: 700px) { 576 | display: none; 577 | } 578 | &-circle { 579 | width: 6px; 580 | height: 6px; 581 | background-color: #396df0; 582 | position: absolute; 583 | border-radius: 50%; 584 | top: 4px; 585 | left: -20px; 586 | &.green { 587 | background-color: #3bf083; 588 | } 589 | } 590 | &-button { 591 | font-size: 15px; 592 | margin-top: 0; 593 | padding: 6px 24px; 594 | @media screen and (max-width: 390px) { 595 | padding: 6px 14px; 596 | } 597 | &.open { 598 | background: none; 599 | color: var(--button-inactive); 600 | border: 1px solid var(--button-inactive); 601 | } 602 | &:not(.open):hover { 603 | color: #fff; 604 | border-color: #fff; 605 | } 606 | } 607 | } 608 | 609 | .content-button:not(.open):hover { 610 | background: #1e59f1; 611 | } 612 | 613 | .menu { 614 | width: 5px; 615 | height: 5px; 616 | background-color: var(--button-inactive); 617 | border-radius: 50%; 618 | box-shadow: 7px 0 0 0 var(--button-inactive), 619 | 14px 0 0 0 var(--button-inactive); 620 | margin: 0 12px; 621 | } 622 | 623 | @media screen and (max-width: 415px) { 624 | .adobe-product .menu { 625 | display: none; 626 | } 627 | } 628 | 629 | .dropdown { 630 | position: relative; 631 | height: 53px; 632 | width: 40px; 633 | top: -24px; 634 | display: flex; 635 | left: -5px; 636 | background: transparent; 637 | border: none; 638 | cursor: pointer; 639 | ul { 640 | position: absolute; 641 | background: var(--dropdown-bg); 642 | height: 110px; 643 | width: 120px; 644 | right: 0; 645 | top: 20px; 646 | pointer-events: none; 647 | opacity: 0; 648 | transform: translatey(10px); 649 | transition: all 0.4s ease; 650 | li a { 651 | text-decoration: none; 652 | color: var(--theme-color); 653 | font-size: 12px; 654 | } 655 | } 656 | } 657 | 658 | .dropdown.is-active { 659 | ul { 660 | opacity: 1; 661 | pointer-events: all; 662 | transform: translatey(25px); 663 | li:hover { 664 | background-color: var(--dropdown-hover); 665 | } 666 | } 667 | } 668 | 669 | .button-wrapper { 670 | display: flex; 671 | align-items: center; 672 | justify-content: flex-end; 673 | width: 187px; 674 | margin-left: auto; 675 | @media screen and (max-width: 480px) { 676 | width: auto; 677 | } 678 | } 679 | 680 | .pop-up { 681 | position: absolute; 682 | padding: 30px 40px; 683 | top: 50%; 684 | left: 50%; 685 | transform: (translate(-50%, -50%)); 686 | overflow-y: auto; 687 | box-shadow: 0px 6px 30px rgba(0, 0, 0, 0.4); 688 | transition: all 0.3s; 689 | z-index: 10; 690 | background-color: var(--popup-bg); 691 | width: 500px; 692 | visibility: hidden; 693 | opacity: 0; 694 | border-radius: 6px; 695 | display: flex; 696 | flex-direction: column; 697 | white-space: normal; 698 | @media screen and (max-width: 570px) { 699 | width: 100%; 700 | } 701 | &.visible { 702 | visibility: visible; 703 | opacity: 1; 704 | } 705 | &__title { 706 | padding-bottom: 20px; 707 | border-bottom: 1px solid var(--border-color); 708 | display: flex; 709 | justify-content: space-between; 710 | align-items: center; 711 | } 712 | &__subtitle { 713 | white-space: normal; 714 | margin: 20px 0; 715 | font-size: 14px; 716 | font-weight: 400; 717 | line-height: 1.8em; 718 | a { 719 | color: var(--theme-color); 720 | } 721 | } 722 | } 723 | 724 | .content-button-wrapper .content-button.status-button.open.close { 725 | width: auto; 726 | } 727 | 728 | .content-section .close { 729 | margin-right: 0; 730 | width: 24px; 731 | } 732 | 733 | .checkbox-wrapper { 734 | display: flex; 735 | align-items: center; 736 | font-size: 14px; 737 | font-weight: 400; 738 | & + .checkbox-wrapper { 739 | margin: 20px 0 40px; 740 | } 741 | } 742 | 743 | .checkbox { 744 | display: none; 745 | } 746 | 747 | .checkbox + label { 748 | display: flex; 749 | align-items: center; 750 | &:before { 751 | content: ''; 752 | margin-right: 10px; 753 | width: 15px; 754 | height: 15px; 755 | border: 1px solid var(--theme-color); 756 | border-radius: 4px; 757 | cursor: pointer; 758 | flex-shrink: 0; 759 | } 760 | } 761 | 762 | .checkbox:checked + label:before { 763 | background-color: #3a6df0; 764 | border-color: #3a6df0; 765 | background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' class='feather feather-check'%3e%3cpath d='M20 6L9 17l-5-5'/%3e%3c/svg%3e"); 766 | background-position: 50%; 767 | background-size: 12px; 768 | background-repeat: no-repeat; 769 | } 770 | 771 | .content-button-wrapper { 772 | margin-top: auto; 773 | margin-left: auto; 774 | .open { 775 | margin-right: 8px; 776 | } 777 | } 778 | 779 | .apps-card { 780 | display: flex; 781 | align-items: center; 782 | flex-wrap: wrap; 783 | width: calc(100% + 20px); 784 | } 785 | 786 | .app-card { 787 | display: flex; 788 | flex-direction: column; 789 | width: calc(33.3% - 20px); 790 | font-size: 16px; 791 | background-color: var(--content-bg); 792 | border-radius: 14px; 793 | border: 1px solid var(--theme-bg-color); 794 | padding: 20px; 795 | cursor: pointer; 796 | transition: 0.3s ease; 797 | &:hover { 798 | transform: scale(1.02); 799 | background-color: var(--theme-bg-color); 800 | } 801 | svg { 802 | width: 28px; 803 | border-radius: 6px; 804 | margin-right: 12px; 805 | flex-shrink: 0; 806 | } 807 | & + .app-card { 808 | margin-left: 20px; 809 | } 810 | span { 811 | display: flex; 812 | align-items: center; 813 | } 814 | &__subtext { 815 | font-size: 14px; 816 | font-weight: 400; 817 | line-height: 1.6em; 818 | margin-top: 20px; 819 | border-bottom: 1px solid var(--border-color); 820 | padding-bottom: 20px; 821 | } 822 | &-buttons { 823 | display: flex; 824 | align-items: center; 825 | margin-left: auto; 826 | margin-top: 16px; 827 | } 828 | @media screen and (max-width: 1110px) { 829 | width: calc(50% - 20px); 830 | &:last-child { 831 | margin-top: 20px; 832 | margin-left: 0px; 833 | } 834 | } 835 | @media screen and (max-width: 565px) { 836 | width: calc(100% - 20px); 837 | margin-top: 20px; 838 | & + .app-card { 839 | margin-left: 0; 840 | } 841 | } 842 | } 843 | 844 | ::-webkit-scrollbar { 845 | width: 6px; 846 | border-radius: 10px; 847 | } 848 | 849 | ::-webkit-scrollbar-thumb { 850 | background: var(--scrollbar-bg); 851 | border-radius: 10px; 852 | } 853 | --------------------------------------------------------------------------------