Merge branch 'master' of git.flexites.org:Students/ITRadio

This commit is contained in:
Mike0001-droid 2024-07-22 10:19:48 +05:00
commit 2a231edd46
71 changed files with 3607 additions and 2231 deletions

View File

@ -1,3 +1,11 @@
module.exports = { module.exports = {
printWidth: 120,
tabWidth: 2,
tabs: false,
semi: true,
singleQuote: true, singleQuote: true,
trailingComma: 'all',
bracketSpacing: true,
arrowParens: 'always',
endOfLine: 'auto',
}; };

7
client/.stylelintrc.json Normal file
View File

@ -0,0 +1,7 @@
{
"extends": ["stylelint-config-standard-scss", "stylelint-config-clean-order"],
"rules": {
"selector-class-pattern": null,
"scss/load-partial-extension": "always"
}
}

View File

@ -3,6 +3,7 @@
A Al project A Al project
## Install the dependencies ## Install the dependencies
```bash ```bash
yarn yarn
# or # or
@ -10,24 +11,25 @@ npm install
``` ```
### Start the app in development mode (hot-code reloading, error reporting, etc.) ### Start the app in development mode (hot-code reloading, error reporting, etc.)
```bash ```bash
quasar dev quasar dev
``` ```
### Lint the files ### Lint the files
```bash ```bash
yarn lint yarn lint
# or # or
npm run lint npm run lint
``` ```
### Build the app for production ### Build the app for production
```bash ```bash
quasar build quasar build
``` ```
### Customize the configuration ### Customize the configuration
See [Configuring quasar.config.js](https://v2.quasar.dev/quasar-cli-webpack/quasar-config-js). See [Configuring quasar.config.js](https://v2.quasar.dev/quasar-cli-webpack/quasar-config-js).

View File

@ -5,9 +5,7 @@ module.exports = (api) => {
presets: [ presets: [
[ [
'@quasar/babel-preset-app', '@quasar/babel-preset-app',
api.caller((caller) => caller && caller.target === 'node') api.caller((caller) => caller && caller.target === 'node') ? { targets: { node: 'current' } } : {},
? { targets: { node: 'current' } }
: {},
], ],
], ],
}; };

View File

@ -2,38 +2,16 @@
"compilerOptions": { "compilerOptions": {
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"src/*": [ "src/*": ["src/*"],
"src/*" "app/*": ["*"],
], "components/*": ["src/components/*"],
"app/*": [ "layouts/*": ["src/layouts/*"],
"*" "pages/*": ["src/pages/*"],
], "assets/*": ["src/assets/*"],
"components/*": [ "boot/*": ["src/boot/*"],
"src/components/*" "stores/*": ["src/stores/*"],
], "vue$": ["node_modules/vue/dist/vue.runtime.esm-bundler.js"]
"layouts/*": [
"src/layouts/*"
],
"pages/*": [
"src/pages/*"
],
"assets/*": [
"src/assets/*"
],
"boot/*": [
"src/boot/*"
],
"stores/*": [
"src/stores/*"
],
"vue$": [
"node_modules/vue/dist/vue.runtime.esm-bundler.js"
]
} }
}, },
"exclude": [ "exclude": ["dist", ".quasar", "node_modules"]
"dist",
".quasar",
"node_modules"
]
} }

1240
client/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,9 @@
"private": true, "private": true,
"scripts": { "scripts": {
"lint": "eslint --ext .js,.vue ./", "lint": "eslint --ext .js,.vue ./",
"lint:fix": "eslint --ext .js,.vue --fix ./", "lint:fix": "eslint --ext .js,.vue, --fix ./",
"lint:css": "stylelint '**/*.scss'",
"lint:css:fix": "npm run lint:css -- --fix",
"test": "echo \"No test specified\" && exit 0", "test": "echo \"No test specified\" && exit 0",
"serve": "npx cross-env NODE_ENV=development quasar dev", "serve": "npx cross-env NODE_ENV=development quasar dev",
"serve:ssr": "quasar dev -m ssr", "serve:ssr": "quasar dev -m ssr",
@ -64,6 +66,10 @@
"postcss-simple-vars": "^7.0.1", "postcss-simple-vars": "^7.0.1",
"prettier": "^3.3.2", "prettier": "^3.3.2",
"sass-loader": "^13.3.2", "sass-loader": "^13.3.2",
"stylelint": "^16.7.0",
"stylelint-config-clean-order": "^6.1.0",
"stylelint-config-standard": "^36.0.1",
"stylelint-config-standard-scss": "^13.1.0",
"vue-loader": "^17.3.0" "vue-loader": "^17.3.0"
}, },
"browserslist": [ "browserslist": [

View File

@ -80,9 +80,7 @@ module.exports = configure(function (ctx) {
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
chainWebpack(chain) { chainWebpack(chain) {
chain chain.plugin('eslint-webpack-plugin').use(ESLintPlugin, [{ extensions: ['js', 'vue'] }]);
.plugin('eslint-webpack-plugin')
.use(ESLintPlugin, [{ extensions: ['js', 'vue'] }]);
// chain.plugin('normal-module-replacement').use( // chain.plugin('normal-module-replacement').use(
// new webpack.NormalModuleReplacementPlugin(/settings$/, function(resource) { // new webpack.NormalModuleReplacementPlugin(/settings$/, function(resource) {
// resource.request = resource.request.replace(/settings$/, `settings/${process.env.NODE_ENV}`); // resource.request = resource.request.replace(/settings$/, `settings/${process.env.NODE_ENV}`);
@ -193,9 +191,7 @@ module.exports = configure(function (ctx) {
// Tell browser when a file from the server should expire from cache (in ms) // Tell browser when a file from the server should expire from cache (in ms)
chainWebpackWebserver(chain) { chainWebpackWebserver(chain) {
chain chain.plugin('eslint-webpack-plugin').use(ESLintPlugin, [{ extensions: ['js'] }]);
.plugin('eslint-webpack-plugin')
.use(ESLintPlugin, [{ extensions: ['js'] }]);
}, },
middlewares: [ middlewares: [
@ -213,9 +209,7 @@ module.exports = configure(function (ctx) {
// if using workbox in InjectManifest mode // if using workbox in InjectManifest mode
chainWebpackCustomSW(chain) { chainWebpackCustomSW(chain) {
chain chain.plugin('eslint-webpack-plugin').use(ESLintPlugin, [{ extensions: ['js'] }]);
.plugin('eslint-webpack-plugin')
.use(ESLintPlugin, [{ extensions: ['js'] }]);
}, },
manifest: { manifest: {
@ -290,15 +284,11 @@ module.exports = configure(function (ctx) {
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
chainWebpackMain(chain) { chainWebpackMain(chain) {
chain chain.plugin('eslint-webpack-plugin').use(ESLintPlugin, [{ extensions: ['js'] }]);
.plugin('eslint-webpack-plugin')
.use(ESLintPlugin, [{ extensions: ['js'] }]);
}, },
chainWebpackPreload(chain) { chainWebpackPreload(chain) {
chain chain.plugin('eslint-webpack-plugin').use(ESLintPlugin, [{ extensions: ['js'] }]);
.plugin('eslint-webpack-plugin')
.use(ESLintPlugin, [{ extensions: ['js'] }]);
}, },
}, },
}; };

View File

@ -23,15 +23,7 @@ import Player from '@/components/player.vue';
import ChangingUser from '@/components/modal/сhanging-user.vue'; import ChangingUser from '@/components/modal/сhanging-user.vue';
export default { export default {
async preFetch({ async preFetch({ store, currentRoute, previousRoute, redirect, ssrContext, urlPath, publicPath }) {},
store,
currentRoute,
previousRoute,
redirect,
ssrContext,
urlPath,
publicPath,
}) {},
components: { components: {
ChangingUser, ChangingUser,
Player, Player,

View File

@ -4,19 +4,23 @@
box-sizing: border-box; box-sizing: border-box;
outline: none !important; outline: none !important;
} }
h1 { h1 {
margin: 0;
position: relative; position: relative;
z-index: 2; z-index: 2;
margin: 0;
} }
.text { .text {
@mixin p; @mixin p;
} }
.h1 { .h1 {
@mixin h1; @mixin h1;
} }
.h2, h2 { .h2,
h2 {
@mixin h2; @mixin h2;
} }
@ -34,10 +38,12 @@ h1{
.title { .title {
@mixin p; @mixin p;
color: transparent;
background-clip: text;
background-image: var(--linear-gradient);
font-size: 34px; font-size: 34px;
color: transparent;
background-image: var(--linear-gradient);
background-clip: text;
&.m--white { &.m--white {
color: var(--color-white); color: var(--color-white);
} }
@ -58,21 +64,25 @@ h1{
.a, .a,
a { a {
@mixin a; @mixin a;
/* @mixin a--color $color-base; */ /* @mixin a--color $color-base; */
} }
html { html {
scrollbar-color: var(--color-black) var(--bg-opacity); scrollbar-color: var(--color-black) var(--bg-opacity);
scrollbar-gutter: stable;
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-gutter: stable;
} }
body { body {
padding: 0 !important;
font-family: var(--font-family-base);
font-size: var(--base-fz); font-size: var(--base-fz);
line-height: var(--base-lh); line-height: var(--base-lh);
background: var(--color-black);
font-family: var(--font-family-base);
color: var(--color-white); color: var(--color-white);
padding: 0 !important;
background: var(--color-black);
} }
.button { .button {

View File

@ -1,31 +1,29 @@
@import "./mixins/responsive.scss"; @import './mixins/responsive.scss';
@import "./setting.scss"; @import './setting.scss';
@import "./lib/reset.css"; @import './lib/reset.css';
@import './lib/fonts.css'; @import './lib/fonts.css';
@import "./mixins/form.scss"; @import './mixins/form.scss';
@import "./mixins/text.scss"; @import './mixins/text.scss';
@import "./common.scss"; @import './common.scss';
@import "./module/app.scss"; @import './module/app.scss';
@import "./module/app-header.scss"; @import './module/app-header.scss';
@import "./module/app-footer.scss"; @import './module/app-footer.scss';
@import "./module/app-breadcrumbs.scss"; @import './module/app-breadcrumbs.scss';
@import "./module/modal.scss"; @import './module/modal.scss';
@import "./module/fiald.scss"; @import './module/fiald.scss';
@import "./module/pagination.scss"; @import './module/pagination.scss';
@import "./module/home.scss"; @import './module/home.scss';
@import "./module/team.scss"; @import './module/team.scss';
@import "./module/rubric.scss"; @import './module/rubric.scss';
@import "./module/blog.scss"; @import './module/blog.scss';
@import "./module/authentication.scss"; @import './module/authentication.scss';
@import "./module/tabs.scss"; @import './module/tabs.scss';
@import "./module/about.scss"; @import './module/about.scss';
@import "./module/playlists.scss"; @import './module/playlists.scss';
@import "./module/playlist.scss"; @import './module/playlist.scss';
@import "./module/contacts.scss"; @import './module/contacts.scss';
@import "./module/support.scss"; @import './module/support.scss';
@import "./module/player.scss"; @import './module/player.scss';
@import "./module/loader.scss"; @import './module/loader.scss';
@import "./module/profile.scss"; @import './module/profile.scss';
@import "./module/song.scss"; @import './module/song.scss';

View File

@ -68,4 +68,3 @@
font-style: normal; font-style: normal;
font-display: swap; font-display: swap;
} }

View File

@ -1,16 +1,84 @@
html, body, div, span, applet, object, iframe, html,
h1, h2, h3, h4, h5, h6, p, blockquote, pre, body,
a, abbr, acronym, address, big, cite, code, div,
del, dfn, em, img, ins, kbd, q, s, samp, span,
small, strike, strong, sub, sup, tt, var, applet,
b, u, i, center, object,
dl, dt, dd, ol, ul, li, iframe,
fieldset, form, label, legend, h1,
table, caption, tbody, tfoot, thead, tr, th, td, h2,
article, aside, canvas, details, embed, h3,
figure, figcaption, footer, header, hgroup, h4,
menu, nav, output, ruby, section, summary, h5,
time, mark, audio, video { h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0; margin: 0;
padding: 0; padding: 0;
border: 0; border: 0;
@ -18,8 +86,17 @@ time, mark, audio, video {
font-size: 100%; font-size: 100%;
} }
article, aside, details, figcaption, figure, article,
footer, header, hgroup, menu, nav, section { aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block; display: block;
} }
@ -27,16 +104,20 @@ body {
line-height: 1; line-height: 1;
} }
ol, ul { ol,
ul {
list-style: none; list-style: none;
} }
blockquote, q { blockquote,
q {
quotes: none; quotes: none;
} }
blockquote:before, blockquote:after, blockquote:before,
q:before, q:after { blockquote:after,
q:before,
q:after {
content: none; content: none;
} }
@ -45,7 +126,9 @@ table {
border-spacing: 0; border-spacing: 0;
} }
input, textarea, select { input,
textarea,
select {
font-family: inherit; font-family: inherit;
font-size: inherit; font-size: inherit;
font-weight: inherit; font-weight: inherit;

View File

@ -1,53 +1,66 @@
@define-mixin input { @define-mixin input {
width: 100%;
margin-bottom: 10px;
padding: 1rem 1.2rem;
color: var(--color-white);
background: transparent; background: transparent;
border: 1px solid var(--color-white); border: 1px solid var(--color-white);
border-radius: 40px; border-radius: 40px;
padding: 1rem 1.2rem;
width: 100%;
color: var(--color-white);
margin-bottom: 10px;
} }
@define-mixin button {
font-family: var(--font-family-base);
color: var(--color-white); @define-mixin button {
min-width: 220px; cursor: pointer;
position: relative;
z-index: 2;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
box-sizing: border-box; box-sizing: border-box;
vertical-align: middle; min-width: 220px;
min-height: 3rem;
font-family: var(--font-family-base);
font-size: 1rem;
font-weight: 500;
line-height: 1rem;
color: var(--color-white);
text-align: center; text-align: center;
text-decoration: none; text-decoration: none;
font-weight: 500; vertical-align: middle;
font-size: 1rem;
line-height: 1rem;
border-radius: 100px;
cursor: pointer;
border: 1px solid var(--color-white);
min-height: 3rem;
transition: border 0.5s ease, background 0.5s ease, color 0.5s ease;
background: transparent;
position: relative;
z-index: 2;
background: transparent;
border: 1px solid var(--color-white);
border-radius: 100px;
transition:
border 0.5s ease,
background 0.5s ease,
color 0.5s ease;
&:hover { &:hover {
cursor: url("./assets/img/icon/cursor.svg"), auto; cursor: url('./assets/img/icon/cursor.svg'), auto;
color: var(--color-black); color: var(--color-black);
background: var(--color-white); background: var(--color-white);
} }
&-violet { &-violet {
border-color: var(--color-primary);
color: var(--color-primary); color: var(--color-primary);
border-color: var(--color-primary);
&:hover { &:hover {
border-color: transparent; border-color: transparent;
} }
} }
&.is-active, &.is-active,
&:active { &:active {
cursor: url("./assets/img/icon/cursor.svg"), auto; cursor: url('./assets/img/icon/cursor.svg'), auto;
color: var(--color-black); color: var(--color-black);
background: var(--color-white-darker); background: var(--color-white-darker);
} }
@ -67,9 +80,10 @@
&.m--blur { &.m--blur {
min-width: 0; min-width: 0;
padding: 1rem 1.5rem; padding: 1rem 1.5rem;
background: var(--bg-opacity); background: var(--bg-opacity);
border: none;
backdrop-filter: blur(5px); backdrop-filter: blur(5px);
border: none;
&:hover { &:hover {
background: var(--color-white); background: var(--color-white);
@ -84,25 +98,30 @@
&.m--arrow { &.m--arrow {
&::after { &::after {
margin-left: 10px;
content: ''; content: '';
width: 20px; width: 20px;
height: 20px; height: 20px;
margin-left: 10px;
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%; background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%;
background-size: cover; background-size: cover;
transition: background 0.3s ease, width 0.3s ease;
transition:
background 0.3s ease,
width 0.3s ease;
} }
&:hover::after { &:hover::after {
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#232323) no-repeat 100%;
width: 45px; width: 45px;
height: 20px; height: 20px;
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#232323) no-repeat 100%;
} }
&.m--active, &.m--active,
&:active { &:active {
background:transparent;
color: var(--color-white); color: var(--color-white);
background: transparent;
} }
} }
@ -124,7 +143,9 @@
content: ''; content: '';
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#232323) no-repeat 100%; background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#232323) no-repeat 100%;
background-size: cover; background-size: cover;
transition: background 0.3s ease, width 0.3s ease; transition:
background 0.3s ease,
width 0.3s ease;
} }
&:hover::after { &:hover::after {
@ -132,58 +153,65 @@
} }
} }
} }
&.m--text-link { &.m--text-link {
border: none; @mixin a;
pad: 0;
min-width: 0; min-width: 0;
min-height: 0; min-height: 0;
padding: 0; padding: 0;
border: none;
pad: 0;
&:hover { &:hover {
background: transparent; background: transparent;
} }
@mixin a;
} }
&.m--circle { &.m--circle {
width: 56px;
height: 56px;
min-width: 0;
border-color: var(--color-white-opacity);
overflow: hidden; overflow: hidden;
&:before { width: 56px;
background: var(--linear-gradient); min-width: 0;
height: 56px;
border-color: var(--color-white-opacity);
&::before {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; inset: 0;
left: 0;
bottom: 0;
right: 0;
opacity: 0; opacity: 0;
transition: opacity .3s ease; background: var(--linear-gradient);
transition: opacity 0.3s ease;
} }
&:after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; inset: 0;
left: 0; transform: rotate(-45deg);
bottom: 0;
right: 0;
width: 18px; width: 18px;
height: 18px; height: 18px;
margin: auto auto; margin: auto;
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#404145FF) no-repeat 100%; background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#404145FF) no-repeat 100%;
transform: rotate(-45deg);
} }
&:hover:before { &:hover::before {
cursor: url('./assets/img/icon/cursor.svg'), auto;
opacity: 1; opacity: 1;
cursor: url("./assets/img/icon/cursor.svg"), auto;
} }
&:hover:after { &:hover::after {
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%; background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%;
} }
} }
} }

View File

@ -1,7 +1,6 @@
@define-mixin responsive-xl { @define-mixin responsive-xl {
@media (max-width: $document-width-xl) { @media (max-width: $document-width-xl) {
@mixin-content; @mixin-content;
} }
} }
@ -11,31 +10,26 @@
} }
} }
@define-mixin responsive-m { @define-mixin responsive-m {
@media (max-width: $document-width-m) { @media (max-width: $document-width-m) {
@mixin-content; @mixin-content;
} }
} }
@define-mixin responsive-s { @define-mixin responsive-s {
@media (max-width: $document-width-s) { @media (max-width: $document-width-s) {
@mixin-content; @mixin-content;
} }
} }
@define-mixin responsive-xs { @define-mixin responsive-xs {
@media (max-width: $document-width-xs) { @media (max-width: $document-width-xs) {
@mixin-content; @mixin-content;
} }
} }
@define-mixin responsive-xxs { @define-mixin responsive-xxs {
@media (max-width: $document-width-xxs) { @media (max-width: $document-width-xxs) {
@mixin-content; @mixin-content;
} }
} }

View File

@ -1,6 +1,7 @@
@define-mixin __p { @define-mixin __p {
position: relative; position: relative;
z-index: 2; z-index: 2;
&:first-child { &:first-child {
margin-top: 0; margin-top: 0;
} }
@ -33,67 +34,79 @@
@define-mixin h1 { @define-mixin h1 {
@mixin __p; @mixin __p;
/*margin-top: 32px;*/
margin-bottom: 1.5rem;
font-size: 100px;
line-height: 1.2;
font-weight: 500;
color: var(--color-white);
padding-bottom: 6px;
@mixin responsive-l { @mixin responsive-l {
font-size: 84px; font-size: 84px;
} }
@mixin responsive-m { @mixin responsive-m {
font-size: 48px; font-size: 48px;
} }
@mixin responsive-s { @mixin responsive-s {
font-size: 36px; font-size: 36px;
} }
/* margin-top: 32px; */
margin-bottom: 1.5rem;
padding-bottom: 6px;
font-size: 100px;
font-weight: 500;
line-height: 1.2;
color: var(--color-white);
} }
@define-mixin h2 { @define-mixin h2 {
@mixin __p; @mixin __p;
margin: 2.5rem 0;
font-size: 3.375rem;
line-height: 1.3;
font-weight: 500;
color: transparent;
padding-bottom: 6px;
background-clip: text;
background-image: var(--linear-gradient);
text-transform: uppercase;
@mixin responsive-l { @mixin responsive-l {
font-size: 40px; font-size: 40px;
line-height: 1.1; line-height: 1.1;
} }
@mixin responsive-m { @mixin responsive-m {
font-size: 32px; font-size: 32px;
} }
margin: 2.5rem 0;
padding-bottom: 6px;
font-size: 3.375rem;
font-weight: 500;
line-height: 1.3;
color: transparent;
text-transform: uppercase;
background-image: var(--linear-gradient);
background-clip: text;
/* @mixin responsive-s { /* @mixin responsive-s {
font-size: 36px; font-size: 36px;
} */ } */
&.m--white { &.m--white {
color: var(--color-white);
margin: 1.5rem 0; margin: 1.5rem 0;
color: var(--color-white);
} }
&.m--border { &.m--border {
&:after { &::after {
margin-top: 10px;
content: ''; content: '';
display: block; display: block;
background: url("./assets/img/icon/borderLine.svg");
max-width: 260px;
width: 100%; width: 100%;
max-width: 260px;
height: 10px; height: 10px;
margin-top: 10px;
background: url('./assets/img/icon/borderLine.svg');
} }
} }
a { a {
text-decoration: none;
font-weight: 500; font-weight: 500;
color: var(--color-white); color: var(--color-white);
text-decoration: none;
transition: color 0.5s ease; transition: color 0.5s ease;
&:hover { &:hover {
@ -107,8 +120,9 @@
margin-top: 24px; margin-top: 24px;
margin-bottom: 16px; margin-bottom: 16px;
font-weight: 700;
font-size: 20px; font-size: 20px;
font-weight: 700;
line-height: 1.2; line-height: 1.2;
} }
@ -117,13 +131,15 @@
margin-top: 16px; margin-top: 16px;
margin-bottom: 8px; margin-bottom: 8px;
font-weight: 500;
font-size: 18px; font-size: 18px;
font-weight: 500;
line-height: 1.2; line-height: 1.2;
} }
@define-mixin p { @define-mixin p {
@mixin __p; @mixin __p;
margin-top: 8px; margin-top: 8px;
margin-bottom: 8px; margin-bottom: 8px;
} }
@ -131,13 +147,13 @@
@define-mixin ul { @define-mixin ul {
@mixin p; @mixin p;
list-style: none;
padding: 0; padding: 0;
list-style: none;
li { li {
padding-left: 15px;
position: relative; position: relative;
margin-bottom: 16px; margin-bottom: 16px;
padding-left: 15px;
/* &:before { /* &:before {
content: ''; content: '';
@ -151,13 +167,16 @@
background-image: svg-load('assets/img/icons/vector.svg', fill=$color-red); background-image: svg-load('assets/img/icons/vector.svg', fill=$color-red);
background-repeat: no-repeat; background-repeat: no-repeat;
} */ } */
&:before { &::before {
content: ''; content: '';
position: absolute; position: absolute;
top: 7px;
left: 0; left: 0;
width: 5px; width: 5px;
height: 5px; height: 5px;
top: 7px;
background: var(--color-white); background: var(--color-white);
border-radius: 50%; border-radius: 50%;
} }
@ -171,11 +190,14 @@
li { li {
padding-left: 1rem; padding-left: 1rem;
&:before { &::before {
content: ''; content: '';
top: 0; top: 0;
height: auto;
width: auto; width: auto;
height: auto;
background: none; background: none;
} }
} }
@ -185,18 +207,21 @@
@define-mixin ol { @define-mixin ol {
@mixin p; @mixin p;
list-style: none;
counter-reset: item; counter-reset: item;
list-style: none;
li { li {
counter-increment: item; counter-increment: item;
margin-bottom: 16px; margin-bottom: 16px;
vertical-align: middle; vertical-align: middle;
&:before { &::before {
content: counter(item); content: counter(item);
padding-left: 12px; padding-left: 12px;
font-weight: 500;
font-size: 18px; font-size: 18px;
font-weight: 500;
line-height: 24px; line-height: 24px;
color: var(--color-white); color: var(--color-white);
} }
@ -208,18 +233,23 @@
} }
@define-mixin a { @define-mixin a {
text-decoration: none;
font-weight: 500;
transition: all 0.5s ease;
color: var(--color-white);
position: relative; position: relative;
z-index: 2; z-index: 2;
&:hover {
color: transparent; font-weight: 500;
-webkit-background-clip: text; color: var(--color-white);
background-image: var(--linear-gradient);
cursor: url("./assets/img/icon/cursor.svg"), auto;
text-decoration: none; text-decoration: none;
transition: all 0.5s ease;
&:hover {
cursor: url('./assets/img/icon/cursor.svg'), auto;
color: transparent;
text-decoration: none;
background-image: var(--linear-gradient);
background-clip: text;
} }
&.m--link { &.m--link {
@ -228,13 +258,18 @@
border-bottom: 1px solid transparent; border-bottom: 1px solid transparent;
&::after { &::after {
margin-left: 10px;
content: ''; content: '';
width: 20px; width: 20px;
height: 20px; height: 20px;
margin-left: 10px;
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%; background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%;
background-size: cover; background-size: cover;
transition: background 0.3s ease, width 0.3s ease;
transition:
background 0.3s ease,
width 0.3s ease;
} }
&:hover { &:hover {

View File

@ -13,10 +13,10 @@
} }
&-right { &-right {
flex: 1 1 auto;
background: url("./assets/img/bg/about-banner.svg") no-repeat 50% 60%;
position: relative; position: relative;
z-index: 2; z-index: 2;
flex: 1 1 auto;
background: url('./assets/img/bg/about-banner.svg') no-repeat 50% 60%;
} }
&-description { &-description {
@ -60,24 +60,25 @@
margin-bottom: var(--space-between-sections); margin-bottom: var(--space-between-sections);
&-item { &-item {
width: calc(100% / 3 - 20px / 3);
min-height: 725px;
position: relative; position: relative;
z-index: 2; z-index: 2;
background-size: cover;
width: calc(100% / 3 - 20px / 3);
min-height: 725px;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: cover;
&.m--gallery-item-one { &.m--gallery-item-one {
background-image: url("./assets/img/bg/gallery-item-one.svg"); background-image: url('./assets/img/bg/gallery-item-one.svg');
} }
&.m--gallery-item-two { &.m--gallery-item-two {
background-image: url("./assets/img/bg/gallery-item-two.svg"); background-image: url('./assets/img/bg/gallery-item-two.svg');
} }
&.m--gallery-item-three { &.m--gallery-item-three {
background-image: url("./assets/img/bg/gallery-item-three.svg"); background-image: url('./assets/img/bg/gallery-item-three.svg');
} }
} }
} }
@ -101,16 +102,18 @@
} }
&-list { &-list {
} }
&-item { &-item {
display: flex;
align-items: center;
padding-bottom: 1.5rem;
margin-bottom: 1.5rem;
position: relative; position: relative;
z-index: 2; z-index: 2;
display: flex;
align-items: center;
margin-bottom: 1.5rem;
padding-bottom: 1.5rem;
border-bottom: 1px solid var(--color-white-opacity); border-bottom: 1px solid var(--color-white-opacity);
} }
} }

View File

@ -2,16 +2,20 @@
display: flex; display: flex;
margin-top: 80px; margin-top: 80px;
margin-bottom: var(--space-between-block); margin-bottom: var(--space-between-block);
&__item { &__item {
display: flex; display: flex;
align-items: center; align-items: center;
&:last-child:after{
&::after {
content: '/';
margin: 0 10px;
}
&:last-child::after {
display: none; display: none;
} }
&:after{
margin: 0 10px;
content: '/';
}
&-link { &-link {
font-size: 0.875rem; font-size: 0.875rem;
} }

View File

@ -1,22 +1,23 @@
.footer { .footer {
padding-bottom: var(--space-between-block);
width: 100%; width: 100%;
padding-bottom: var(--space-between-block);
&__top { &__top {
padding-bottom: 80px;
margin-bottom: 80px; margin-bottom: 80px;
padding-bottom: 80px;
border-bottom: 1px solid var(--color-white-opacity); border-bottom: 1px solid var(--color-white-opacity);
} }
&__question { &__question {
@mixin responsive-xs {
flex-direction: column;
align-items: flex-start;
}
display: flex; display: flex;
gap: 10px;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
gap: 10px;
@mixin responsive-xs {
align-items: flex-start;
flex-direction: column;
}
&-button { &-button {
margin-left: auto; margin-left: auto;
@ -25,27 +26,30 @@
&__bottom { &__bottom {
display: flex; display: flex;
justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: space-between;
} }
&__menu { &__menu {
display: grid;
grid-template-columns: var(--space-between-sections) var(--space-between-sections);
grid-template-rows: fit-content fit-content;
grid-column-gap: var(--space-between-sections);
grid-row-gap: var(--space-between-block);
@mixin responsive-m { @mixin responsive-m {
width: 100%;
grid-row-gap: 10px; grid-row-gap: 10px;
grid-template-rows: min-content;
grid-template-columns: min-content min-content min-content; grid-template-columns: min-content min-content min-content;
grid-template-rows: min-content;
width: 100%;
margin-bottom: var(--space-between-block); margin-bottom: var(--space-between-block);
} }
@mixin responsive-s { @mixin responsive-s {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
display: grid;
grid-gap: var(--space-between-block) var(--space-between-sections);
grid-template-columns: var(--space-between-sections) var(--space-between-sections);
grid-template-rows: fit-content fit-content;
&-item { &-item {
@mixin responsive-s { @mixin responsive-s {
width: 100%; width: 100%;
@ -58,24 +62,26 @@
} }
&__social { &__social {
@mixin responsive-m {
grid-row-gap: 10px;
margin-bottom: var(--space-between-block);
}
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: var(--space-between-block); gap: var(--space-between-block);
@mixin responsive-m {
margin-bottom: var(--space-between-block);
grid-row-gap: 10px;
}
} }
&__connection { &__connection {
@mixin responsive-m {
align-items: flex-start;
width: 100%;
}
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 1rem;
align-items: flex-end; align-items: flex-end;
justify-content: space-between; justify-content: space-between;
gap: 1rem;
@mixin responsive-m {
width: 100%;
align-items: flex-start;
}
} }
} }

View File

@ -1,21 +1,25 @@
.header { .header {
position: sticky;
top: -30px;
z-index: 11;
width: 100%;
backdrop-filter: blur(100px);
@mixin responsive-l { @mixin responsive-l {
top: 0; top: 0;
} }
&__wrapper { position: sticky;
padding: 40px 20px 10px; z-index: 11;
top: -30px;
width: 100%; width: 100%;
display: flex;
align-items: center; backdrop-filter: blur(100px);
&__wrapper {
@mixin responsive-l { @mixin responsive-l {
padding: 10px 20px; padding: 10px 20px;
} }
display: flex;
align-items: center;
width: 100%;
padding: 40px 20px 10px;
} }
&__logo { &__logo {
@ -25,59 +29,66 @@
margin-right: auto; margin-right: auto;
&.m--menu { &.m--menu {
display: none;
margin-bottom: var(--space-between-block);
@mixin responsive-l { @mixin responsive-l {
display: block; display: block;
} }
display: none;
margin-bottom: var(--space-between-block);
} }
&:hover { &:hover {
cursor: url("./assets/img/icon/cursor.svg"), auto; cursor: url('./assets/img/icon/cursor.svg'), auto;
} }
} }
&__menu { &__menu {
display: flex;
align-items: center;
transition: transform .3s ease;
@mixin responsive-xl { @mixin responsive-xl {
gap: 20px; gap: 20px;
} }
@mixin responsive-l { @mixin responsive-l {
position: fixed; position: fixed;
z-index: 10;
top: 0;
bottom: 0;
left: 0;
transform: translateX(-100%);
flex-direction: column; flex-direction: column;
align-items: start; align-items: start;
top: 0;
left: 0;
width: 320px; width: 320px;
bottom: 0;
min-height: calc(100vh + 30px); min-height: calc(100vh + 30px);
transform: translateX(-100%);
background: var(--color-black);
padding: 40px 20px 0; padding: 40px 20px 0;
z-index: 10;
background: var(--color-black);
&.m--active { &.m--active {
transform: translateX(0); transform: translateX(0);
} }
} }
display: flex;
align-items: center;
transition: transform 0.3s ease;
&-item { &-item {
margin: 0 25px;
&.m--tools {
margin: 0 10px 0 25px;
}
@mixin responsive-xl { @mixin responsive-xl {
margin: 0 10px; margin: 0 10px;
&.m--tools { &.m--tools {
margin: 0 5px 0 10px; margin: 0 5px 0 10px;
} }
} }
@mixin responsive-l {
@mixin responsive-l {
}
margin: 0 25px;
&.m--tools {
margin: 0 10px 0 25px;
} }
} }
@ -86,18 +97,21 @@
&.is-subactive { &.is-subactive {
color: transparent; color: transparent;
-webkit-background-clip: text;
background-image: var(--linear-gradient); background-image: var(--linear-gradient);
background-clip: text;
} }
} }
&-icon { &-icon {
background: none; cursor: url('./assets/img/icon/cursor.svg'), auto;
border: none;
width: 24px; width: 24px;
height: 24px; height: 24px;
cursor: url("./assets/img/icon/cursor.svg"), auto;
transition: all .3s ease; background: none;
border: none;
transition: all 0.3s ease;
&.m--profile { &.m--profile {
background: svg-load('./assets/img/icon/user-icon.svg', stroke=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/user-icon.svg', stroke=$color-primary) no-repeat 100%;
@ -125,62 +139,66 @@
} }
&__burger { &__burger {
width: 38px;
height: 24px;
position: relative;
display: none;
&:hover {
cursor: url("./assets/img/icon/cursor.svg"), auto;
}
&.m--menu {
position: absolute;
right: 15px;
top: 15px;
}
&.m--active {
span {
display: none;
}
&:after {
transform: rotate(45deg);
bottom: 10px;
}
&:before {
transform: rotate(-45deg);
top: 10px;
}
}
@mixin responsive-l { @mixin responsive-l {
display: block; display: block;
} }
&:after, &:before, span { position: relative;
display: none;
width: 38px;
height: 24px;
&::after,
&::before,
span {
content: ''; content: '';
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 4px; height: 4px;
background: var(--color-white); background: var(--color-white);
border-radius: 20px; border-radius: 20px;
transition: all 0.3s ease; transition: all 0.3s ease;
} }
&:before { &::before {
top: 0; top: 0;
} }
&::after {
bottom: 0;
}
&:hover {
cursor: url('./assets/img/icon/cursor.svg'), auto;
}
&.m--menu {
position: absolute;
top: 15px;
right: 15px;
}
&.m--active {
&::after {
bottom: 10px;
transform: rotate(45deg);
}
&::before {
top: 10px;
transform: rotate(-45deg);
}
span {
display: none;
}
}
span { span {
top: 10px; top: 10px;
} }
&:after {
bottom: 0;
} }
} }
}

View File

@ -3,36 +3,40 @@
flex-direction: column; flex-direction: column;
min-height: 100vh; min-height: 100vh;
padding-bottom: 100px; padding-bottom: 100px;
&:after{
&::after {
content: ''; content: '';
position: fixed; position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: url("./assets/img/bg/bg.svg");
z-index: 1; z-index: 1;
inset: 0;
background: url('./assets/img/bg/bg.svg');
} }
&__block { &__block {
flex: 1 1 auto; flex: 1 1 auto;
} }
&__overlay { &__overlay {
position: fixed; position: fixed;
z-index: 5; z-index: 5;
inset: 0;
min-height: 100vh; min-height: 100vh;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--color-black-cc); background: var(--color-black-cc);
} }
&__content { &__content {
max-width: var(--container);
margin: 0 auto;
padding: 0 50px;
@mixin responsive-l { @mixin responsive-l {
padding: 0 20px; padding: 0 20px;
} }
max-width: var(--container);
margin: 0 auto;
padding: 0 50px;
.m--indentation { .m--indentation {
} }
} }

View File

@ -3,77 +3,94 @@
&__header { &__header {
display: flex; display: flex;
justify-content: space-between;
align-items: start;
flex-wrap: wrap; flex-wrap: wrap;
margin-bottom: var(--space-between-block);
row-gap: var(--space-between-block); row-gap: var(--space-between-block);
align-items: start;
justify-content: space-between;
margin-bottom: var(--space-between-block);
&-title { &-title {
margin-bottom: 0; margin-bottom: 0;
} }
&-btn { &-btn {
margin-left: auto;
@mixin responsive-xxs { @mixin responsive-xxs {
width: 100%; width: 100%;
} }
margin-left: auto;
} }
} }
&__content { &__content {
display: flex;
gap: 80px;
@mixin responsive-m { @mixin responsive-m {
flex-direction: column; flex-direction: column;
} }
display: flex;
gap: 80px;
} }
&__cover { &__cover {
width: 100%;
max-height: 640px;
background: url("./assets/img/bg/blog.svg") no-repeat center;
position: relative;
z-index: 2;
background-size: cover;
@mixin responsive-m { @mixin responsive-m {
height: calc(var(--base-content-size) / 2); height: calc(var(--base-content-size) / 2);
max-height: none; max-height: none;
} }
position: relative;
z-index: 2;
width: 100%;
max-height: 640px;
background: url('./assets/img/bg/blog.svg') no-repeat center;
background-size: cover;
} }
&__list { &__list {
} }
&__item { &__item {
border-bottom: 1px solid var(--color-white-opacity);
color: var(--color-white-opacity);
padding: 2rem 0;
position: relative; position: relative;
z-index: 2; z-index: 2;
transition: all .3s ease;
&:after, &:before { padding: 2rem 0;
position: absolute;
color: var(--color-white-opacity);
border-bottom: 1px solid var(--color-white-opacity);
transition: all 0.3s ease;
&::after,
&::before {
content: ''; content: '';
left: 0;
position: absolute;
right: 0; right: 0;
background: var(--color-white-opacity); left: 0;
height: 1px;
display: none; display: none;
transition: background .3s ease;
height: 1px;
background: var(--color-white-opacity);
transition: background 0.3s ease;
} }
&:before { &::before {
top: -1px; top: -1px;
} }
&:after { &::after {
display: block;
bottom: -1px; bottom: -1px;
display: block;
} }
&:first-child { &:first-child {
&:before { &::before {
display: block; display: block;
} }
} }
@ -81,33 +98,34 @@
&:hover { &:hover {
color: var(--color-white); color: var(--color-white);
&:after, &:before { &::after,
&::before {
display: block; display: block;
background: var(--linear-gradient); background: var(--linear-gradient);
} }
} }
&:hover &-btn { &:hover &-btn {
&:before { &::before {
opacity: 1; opacity: 1;
} }
&:after { &::after {
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%; background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%;
} }
} }
&-header { &-header {
display: flex; display: flex;
justify-content: space-between;
align-items: center;
gap: 1rem; gap: 1rem;
align-items: center;
justify-content: space-between;
} }
&-title { &-title {
font-size: 2rem;
width: calc(100% - 56px - 1rem); width: calc(100% - 56px - 1rem);
margin-bottom: 2rem; margin-bottom: 2rem;
font-size: 2rem;
} }
} }

View File

@ -4,18 +4,24 @@
gap: var(--space-between-block); gap: var(--space-between-block);
margin-bottom: var(--space-between-sections); margin-bottom: var(--space-between-sections);
} }
&__info { &__info {
&:before { &::before {
content: ''; content: '';
display: block;
height: 50px;
position: relative; position: relative;
z-index: 2; z-index: 2;
display: block;
width: 50px; width: 50px;
background: url("./assets/img/icon/one-circle.svg") no-repeat center; height: 50px;
margin-bottom: 20px; margin-bottom: 20px;
background: url('./assets/img/icon/one-circle.svg') no-repeat center;
} }
} }
&__item { &__item {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -24,42 +30,55 @@
margin-bottom: 20px; margin-bottom: 20px;
} }
} }
&__social { &__social {
display: flex; display: flex;
gap: 10px; gap: 10px;
&.m--telegram, &.m--vk{
&.m--telegram,
&.m--vk {
width: 25px; width: 25px;
height: 25px; height: 25px;
} }
&.m--telegram { &.m--telegram {
background: url("./assets/img/icon/telegram.svg") no-repeat; background: url('./assets/img/icon/telegram.svg') no-repeat;
} }
&.m--vk { &.m--vk {
background: url("./assets/img/icon/vk.svg") no-repeat; background: url('./assets/img/icon/vk.svg') no-repeat;
} }
} }
&__map { &__map {
position: relative; position: relative;
z-index: 2; z-index: 2;
flex: 1 1 auto; flex: 1 1 auto;
&-frame { &-frame {
height: 100%; height: 100%;
} }
} }
&__form { &__form {
position: relative; position: relative;
z-index: 2; z-index: 2;
max-width: 360px;
width: 100%; width: 100%;
&:before { max-width: 360px;
&::before {
content: ''; content: '';
display: block;
height: 50px;
position: relative; position: relative;
z-index: 2; z-index: 2;
display: block;
width: 100px; width: 100px;
background: url("./assets/img/icon/two-circle.svg") no-repeat center; height: 50px;
margin-bottom: 20px; margin-bottom: 20px;
background: url('./assets/img/icon/two-circle.svg') no-repeat center;
} }
} }
} }

View File

@ -1,16 +1,18 @@
.field { .field {
position: relative; position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding-bottom: 28px;
margin-bottom: 8px; margin-bottom: 8px;
padding-bottom: 28px;
padding-bottom: 0; padding-bottom: 0;
&&.m--100 { &&.m--100 {
width: 100%; width: 100%;
margin-right: 0; margin-right: 0;
} }
&__inner { &__inner {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -18,7 +20,6 @@
height: 100%; height: 100%;
} }
&__label { &__label {
display: none; display: none;
} }
@ -26,92 +27,121 @@
.input { .input {
@mixin input; @mixin input;
} }
&__input { &__input {
&.m--search { &.m--search {
position: relative; position: relative;
&:before{
&::before {
content: ''; content: '';
width: 24px;
height: 24px; position: absolute;
top: 16px; top: 16px;
left: 16px; left: 16px;
position: absolute;
width: 24px;
height: 24px;
background: svg-load('./assets/img/icon/search-icon.svg') no-repeat 100%; background: svg-load('./assets/img/icon/search-icon.svg') no-repeat 100%;
} }
.input { .input {
padding: 1rem 1.2rem 1rem 3rem; padding: 1rem 1.2rem 1rem 3rem;
border: 1px solid var(--color-primary); border: 1px solid var(--color-primary);
} }
} }
&.m--hidden { &.m--hidden {
display: none; display: none;
} }
} }
&__checkbox { &__checkbox {
&-label { &-label {
padding-left: 50px;
display: flex; display: flex;
padding-left: 50px;
font-size: 1rem; font-size: 1rem;
color: var(--color-white-opacity); color: var(--color-white-opacity);
&:hover { &:hover {
cursor: url("./assets/img/icon/cursor.svg"), auto; cursor: url('./assets/img/icon/cursor.svg'), auto;
} }
&:before{
content: ""; &::before {
cursor: pointer; cursor: pointer;
content: '';
user-select: none;
user-select: none;
user-select: none;
user-select: none;
user-select: none;
position: absolute; position: absolute;
left: 0; left: 0;
text-indent: -9999px;
display: block;
width: 40px; width: 40px;
height: 24px; height: 24px;
text-indent: -9999px;
background: var(--color-white-opacity); background: var(--color-white-opacity);
display: block;
border-radius: 100px; border-radius: 100px;
transition: all .3s ease;
transition: all 0.3s ease;
-webkit-tap-highlight-color: transparent; -webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none; -webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
} }
&:after{
content: ""; &::after {
content: '';
position: absolute; position: absolute;
top: 3px; top: 3px;
left: 3px; left: 3px;
width: 18px; width: 18px;
height: 18px; height: 18px;
background: #fff; background: #fff;
border-radius: 90px; border-radius: 90px;
transition: all .3s ease;
transition: all 0.3s ease;
} }
} }
&-input { &-input {
display: none; display: none;
} }
&-input:checked + &-label { &-input:checked + &-label {
&:before{ &::before {
background: var(--color-primary); background: var(--color-primary);
} }
&:after{
&::after {
left: 37px; left: 37px;
transform: translateX(-100%); transform: translateX(-100%);
} }
} }
} }
textarea { textarea {
border-radius: 30px !important;
resize: none; resize: none;
min-height: 80px;
scrollbar-color: var(--color-black) var(--color-white-opacity); scrollbar-color: var(--color-black) var(--color-white-opacity);
scrollbar-gutter: stable;
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-gutter: stable;
scroll-margin-right: 20px; scroll-margin-right: 20px;
min-height: 80px;
border-radius: 30px !important;
} }
&__comment { &__comment {
font-size: 1rem;
margin-bottom: 1rem; margin-bottom: 1rem;
font-size: 1rem;
} }
} }

View File

@ -1,276 +1,335 @@
.home { .home {
overflow-x: hidden; overflow-x: hidden;
&__meaning { &__meaning {
min-height: var(--base-content-size); position: relative;
z-index: 2;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
position: relative;
z-index: 2; min-height: var(--base-content-size);
&:after, &:before {
&::after,
&::before {
content: ''; content: '';
position: absolute; position: absolute;
background: url("./assets/img/icon/ellipseGradient.svg") no-repeat 50% 60%;
background-size: 100%;
z-index: 1; z-index: 1;
background: url('./assets/img/icon/ellipseGradient.svg') no-repeat 50% 60%;
background-size: 100%;
} }
&:after { &::after {
right: 50vh; right: 50vh;
bottom: 10vh; bottom: 10vh;
width: 300px; width: 300px;
height: 300px; height: 300px;
animation: moving-circle-2 9s infinite linear; animation: moving-circle-2 9s infinite linear;
@keyframes moving-circle-2 { @keyframes moving-circle-2 {
0% { 0% {
-webkit-transform: rotate(360deg) translatex(100%) translatey(100%) scale(1.5); transform: rotate(360deg) translateX(100%) translateY(100%) scale(1.5);
} }
100% { 100% {
-webkit-transform: rotate(0deg) translatex(100%) translatey(100%) scale(1.5); transform: rotate(0deg) translateX(100%) translateY(100%) scale(1.5);
} }
} }
} }
&:before { &::before {
bottom: 10vh;
left: 10vh;
width: 250px; width: 250px;
height: 250px; height: 250px;
left: 10vh;
bottom: 10vh;
animation: moving-circle-3 8s infinite linear; animation: moving-circle-3 8s infinite linear;
@keyframes moving-circle-3 { @keyframes moving-circle-3 {
0% { 0% {
-webkit-transform: rotate(360deg) translatex(-100%) translatey(150%) scale(1.5); transform: rotate(360deg) translateX(-100%) translateY(150%) scale(1.5);
} }
100% { 100% {
-webkit-transform:rotate(0deg) translatex(-100%) translatey(200%) scale(1.5); transform: rotate(0deg) translateX(-100%) translateY(200%) scale(1.5);
} }
} }
} }
} }
&__subtitle { &__subtitle {
text-align: center;
max-width: 600px;
margin: 0 auto;
@mixin responsive-l { @mixin responsive-l {
padding: 0 20px; padding: 0 20px;
} }
span {
font-weight: 700; max-width: 600px;
} margin: 0 auto;
&:after{ text-align: center;
&::after {
content: ''; content: '';
position: absolute; position: absolute;
z-index: -1;
top: 0; top: 0;
width: 400px; width: 400px;
height: 400px; height: 400px;
background: url("./assets/img/icon/ellipseGradient.svg") no-repeat 50% 60%;
background: url('./assets/img/icon/ellipseGradient.svg') no-repeat 50% 60%;
background-size: 100%; background-size: 100%;
animation: moving-circle 10s infinite linear; animation: moving-circle 10s infinite linear;
z-index: -1;
@keyframes moving-circle { @keyframes moving-circle {
0% { 0% {
-webkit-transform: rotate(0) translatex(-400px) translatey(-100px) scale(1.5); transform: rotate(0) translateX(-400px) translateY(-100px) scale(1.5);
} }
50% { 50% {
-webkit-transform: rotate(180deg) translatex(-200px) translatey(-200px) scale(1); transform: rotate(180deg) translateX(-200px) translateY(-200px) scale(1);
} }
100% { 100% {
-webkit-transform: rotate(360deg) translatex(-400px) translatey(-100px) scale(1.5); transform: rotate(360deg) translateX(-400px) translateY(-100px) scale(1.5);
} }
} }
} }
span {
font-weight: 700;
}
} }
&__title { &__title {
@mixin h1; @mixin h1;
-webkit-background-clip: text;
text-align: center;
background-clip: text;
background-image: linear-gradient(91.17deg, var(--color-white) -4.01%, var(--color-white) 36.14%, var(--color-white) 77.44%, var(--color-white) 106.11%);
padding: 0 20px; padding: 0 20px;
text-align: center;
background-image: linear-gradient(
91.17deg,
var(--color-white) -4.01%,
var(--color-white) 36.14%,
var(--color-white) 77.44%,
var(--color-white) 106.11%
);
background-clip: text;
background-clip: text;
span { span {
color: var(--color-black); color: var(--color-black);
-webkit-background-clip: text; background-clip: text;
-webkit-text-stroke: 3px transparent; -webkit-text-stroke: 3px transparent;
} }
} }
&__banner { &__banner {
position: absolute; position: absolute;
z-index: 0; z-index: 0;
top: 0; inset: 0;
left: 0; scale: 0.8;
right: 0;
bottom: 0;
background: url("./assets/img/bg/home-banner.png") no-repeat center;
width: 1920px; width: 1920px;
max-height: var(--base-content-size); max-height: var(--base-content-size);
background-size: contain;
scale: 0.8;
margin-left: calc((100vw + -1 * 1920px) / 2); margin-left: calc((100vw + -1 * 1920px) / 2);
background: url('./assets/img/bg/home-banner.png') no-repeat center;
background-size: contain;
} }
&__description { &__description {
margin-top: calc(var(--space-between-sections) / 2);
display: flex;
justify-content: space-between;
flex-wrap: wrap;
margin-bottom: var(--space-between-sections);
@mixin responsive-m { @mixin responsive-m {
gap: var(--space-between-block); gap: var(--space-between-block);
} }
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-top: calc(var(--space-between-sections) / 2);
margin-bottom: var(--space-between-sections);
} }
&__info { &__info {
width: 60%;
@mixin responsive-m { @mixin responsive-m {
width: 100%; width: 100%;
} }
width: 60%;
&--item { &--item {
display: flex;
justify-content: space-between;
color: transparent;
background-clip: text;
background-image: var(--linear-gradient);
@mixin responsive-s { @mixin responsive-s {
flex-direction: column; flex-direction: column;
gap: 10px; gap: 10px;
} }
display: flex;
justify-content: space-between;
color: transparent;
background-image: var(--linear-gradient);
background-clip: text;
&.m--circle { &.m--circle {
align-items: end; align-items: end;
&:before { &::before {
content: '';
display: block;
width: 130px;
height: 130px;
background: url("./assets/img/icon/circleGradient.svg") no-repeat center;
@mixin responsive-s { @mixin responsive-s {
margin-right: auto;
width: 80px; width: 80px;
height: 80px; height: 80px;
margin-right: auto;
background-size: contain; background-size: contain;
} }
content: '';
display: block;
width: 130px;
height: 130px;
background: url('./assets/img/icon/circleGradient.svg') no-repeat center;
} }
} }
span { span {
font-weight: 400;
color: var(--color-white);
width: 57%;
@mixin responsive-m { @mixin responsive-m {
width: 75%; width: 75%;
} }
@mixin responsive-s { @mixin responsive-s {
width: 100%; width: 100%;
} }
width: 57%;
font-weight: 400;
color: var(--color-white);
} }
} }
} }
&__content { &__content {
max-width: 360px;
@mixin responsive-m { @mixin responsive-m {
display: flex; display: flex;
align-items: flex-start;
flex-wrap: wrap; flex-wrap: wrap;
gap: calc(var(--space-between-block) / 2); gap: calc(var(--space-between-block) / 2);
align-items: flex-start;
max-width: none; max-width: none;
} }
max-width: 360px;
&--item { &--item {
display: flex;
flex-direction: column;
align-items: flex-start;
font-size: 16px;
position: relative;
z-index: 2;
&:not(&:last-child){
margin-bottom: var(--space-between-block);
}
@mixin responsive-m { @mixin responsive-m {
width: calc((100% - var(--space-between-block)) / 3); width: calc((100% - var(--space-between-block)) / 3);
} }
@mixin responsive-s { @mixin responsive-s {
width: 100%; width: 100%;
} }
&:before {
content: '';
height: 50px;
margin-bottom: 10px;
position: relative; position: relative;
z-index: 2; z-index: 2;
display: flex;
flex-direction: column;
align-items: flex-start;
font-size: 16px;
&::before {
content: '';
position: relative;
z-index: 2;
height: 50px;
margin-bottom: 10px;
} }
&.m--one-circle:before { &:not(&:last-child) {
margin-bottom: var(--space-between-block);
}
&.m--one-circle::before {
width: 50px; width: 50px;
background: url("./assets/img/icon/one-circle.svg") no-repeat center; background: url('./assets/img/icon/one-circle.svg') no-repeat center;
} }
&.m--two-circle:before { &.m--two-circle::before {
width: 100px; width: 100px;
background: url("./assets/img/icon/two-circle.svg") no-repeat center; background: url('./assets/img/icon/two-circle.svg') no-repeat center;
} }
&.m--three-circle:before { &.m--three-circle::before {
width: 150px; width: 150px;
background: url("./assets/img/icon/three-circle.svg") no-repeat center; background: url('./assets/img/icon/three-circle.svg') no-repeat center;
} }
span { span {
color: transparent; color: transparent;
background-clip: text;
background-image: var(--linear-gradient); background-image: var(--linear-gradient);
background-clip: text;
} }
} }
} }
&__social { &__social {
height: var(--base-content-size); position: relative;
max-height: 900px; z-index: 2;
background: url("./assets/img/bg/bg-social.svg") no-repeat center;
padding: 3rem 2.5rem;
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
justify-content: center; justify-content: center;
position: relative;
z-index: 2; height: var(--base-content-size);
max-height: 900px;
margin-bottom: var(--space-between-sections); margin-bottom: var(--space-between-sections);
padding: 3rem 2.5rem;
background: url('./assets/img/bg/bg-social.svg') no-repeat center;
background-size: cover; background-size: cover;
&:after {
&::after {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; inset: 0;
bottom: 0; background: linear-gradient(179.74deg, rgb(0 0 0 / 0%) 0.23%, rgb(0 0 0 / 66%) 99.77%);
left: 0;
right: 0;
background: linear-gradient(179.74deg, rgba(0, 0, 0, 0) 0.23%, rgba(0, 0, 0, 0.66) 99.77%);
} }
&--tools { &--tools {
display: flex; display: flex;
justify-content: space-between;
align-items: flex-end;
flex-wrap: wrap; flex-wrap: wrap;
row-gap: var(--space-between-block); row-gap: var(--space-between-block);
align-items: flex-end;
justify-content: space-between;
} }
&--description { &--description {
max-width: 45%;
@mixin responsive-xs { @mixin responsive-xs {
max-width: 100%; max-width: 100%;
} }
max-width: 45%;
} }
&--btns { &--btns {
display: grid; display: grid;
grid-gap: 8px;
grid-template-columns: min-content min-content; grid-template-columns: min-content min-content;
grid-template-rows: min-content min-content; grid-template-rows: min-content min-content;
grid-column-gap: 8px;
grid-row-gap: 8px;
} }
} }
} }

View File

@ -1,63 +1,83 @@
.loader { .loader {
position: relative;
z-index: 2;
display: flex; display: flex;
gap: 1rem;
align-items: center; align-items: center;
margin: 0.75rem 0;
font-size: 1.25rem; font-size: 1.25rem;
font-weight: 600; font-weight: 600;
color: transparent; color: transparent;
background-clip: text;
background-image: var(--linear-gradient); background-image: var(--linear-gradient);
margin: 0.75rem 0; background-clip: text;
gap: 1rem;
position: relative;
z-index: 2;
.spinner { .spinner {
position: relative;
width: 48px; width: 48px;
height: 48px; height: 48px;
border-radius: 50%; border-radius: 50%;
position: relative;
animation: rotate 1s linear infinite; animation: rotate 1s linear infinite;
&:before, &:after { &::before,
content: ""; &::after {
box-sizing: border-box; content: '';
position: absolute; position: absolute;
inset: 0px; inset: 0;
border-radius: 50%;
box-sizing: border-box;
border: 5px solid var(--color-primary); border: 5px solid var(--color-primary);
border-radius: 50%;
animation: prixClipFix 5s linear infinite; animation: prixClipFix 5s linear infinite;
} }
&:after { &::after {
border-color: var(--color-white);
animation: prixClipFix 5s linear infinite, rotate 0.5s linear infinite reverse;
inset: 6px; inset: 6px;
border-color: var(--color-white);
animation:
prixClipFix 5s linear infinite,
rotate 0.5s linear infinite reverse;
} }
} }
} }
@keyframes rotate { @keyframes rotate {
0% { 0% {
transform: rotate(0deg) transform: rotate(0deg);
} }
100% { 100% {
transform: rotate(360deg) transform: rotate(360deg);
} }
} }
@keyframes prixClipFix { @keyframes prixClipFix {
0% { 0% {
clip-path: polygon(50% 50%, 0 0, 0 0, 0 0, 0 0, 0 0) clip-path: polygon(50% 50%, 0 0, 0 0, 0 0, 0 0, 0 0);
} }
25% { 25% {
clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 0, 100% 0, 100% 0) clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 0, 100% 0, 100% 0);
} }
50% { 50% {
clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 100% 100%, 100% 100%) clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 100% 100%, 100% 100%);
} }
75% { 75% {
clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 100%) clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 100%);
} }
100% { 100% {
clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 0) clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 0);
} }
} }

View File

@ -1,38 +1,45 @@
.modal { .modal {
&__container { &__container {
display: flex;
justify-content: center;
align-items: center;
z-index: 100; z-index: 100;
display: flex;
align-items: center;
justify-content: center;
.vfm__overlay { .vfm__overlay {
background: var(--bg-wrapper-modal); background: var(--bg-wrapper-modal);
} }
&.m--right { &.m--right {
justify-content: flex-end;
align-items: stretch; align-items: stretch;
justify-content: flex-end;
} }
} }
&__container.m--right &__block { &__container.m--right &__block {
margin: 0;
max-height: none; max-height: none;
margin: 0;
} }
&__block { &__block {
position: relative; position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin: 0 1.5rem;
padding: 2.5rem; min-width: 360px;
background: var(--color-black); max-width: 90vw;
min-height: 96px; min-height: 96px;
max-height: 90vh; max-height: 90vh;
max-width: 90vw; margin: 0 1.5rem;
min-width: 360px; padding: 2.5rem;
background: var(--color-black);
&.m--half { &.m--half {
max-width: 950px;
width: 50%; width: 50%;
max-width: 950px;
} }
&.m--long { &.m--long {
width: 100%; width: 100%;
max-width: 950px; max-width: 950px;
@ -48,41 +55,56 @@
max-width: 420px; max-width: 420px;
} }
} }
&__content { &__content {
min-width: 360px; min-width: 360px;
} }
&__title { &__title {
font-size: 2rem;
margin-bottom: 2.5rem; margin-bottom: 2.5rem;
font-size: 2rem;
} }
&__close { &__close {
width: 30px;
height: 30px;
position: absolute; position: absolute;
top: 5px; top: 5px;
right: 5px; right: 5px;
background: transparent;
border: none; width: 30px;
min-width: 0; min-width: 0;
height: 30px;
min-height: 0; min-height: 0;
padding: 0; padding: 0;
&:after,&:before{
background: transparent;
border: none;
&::after,
&::before {
content: ''; content: '';
position: absolute; position: absolute;
background: var(--color-white);
left: 5px;
right: 5px; right: 5px;
left: 5px;
height: 2px; height: 2px;
background: var(--color-white);
border-radius: 20px; border-radius: 20px;
transition: all .3s ease;
transition: all 0.3s ease;
} }
&:after{
&::after {
transform: rotate(45deg); transform: rotate(45deg);
} }
&:before{
&::before {
transform: rotate(-45deg); transform: rotate(-45deg);
} }
&:hover:after, &:hover:before{
&:hover::after,
&:hover::before {
background: var(--color-black); background: var(--color-black);
} }
} }

View File

@ -3,52 +3,58 @@
justify-content: center; justify-content: center;
margin-top: var(--space-between-block); margin-top: var(--space-between-block);
margin-bottom: var(--space-between-sections); margin-bottom: var(--space-between-sections);
&__list { &__list {
display: flex; display: flex;
} }
&__item { &__item {
margin: 0 5px; margin: 0 5px;
} }
&__link { &__link {
padding: 0 5px; padding: 0 5px;
&.m--current { &.m--current {
color: transparent; color: transparent;
-webkit-background-clip: text;
background-image: var(--linear-gradient); background-image: var(--linear-gradient);
background-clip: text;
} }
} }
&__btn { &__btn {
min-height: 25px;
min-width: 25px;
position: relative; position: relative;
min-width: 25px;
min-height: 25px;
border-radius: 50%; border-radius: 50%;
&:after {
&::after {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; inset: 0;
bottom: 0;
left: 0;
right: 0;
margin: 5px; margin: 5px;
} }
&:hover { &:hover {
background: var(--color-white); background: var(--color-white);
} }
&.m--prev:after {
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%; &.m--prev::after {
transform: rotate(180deg); transform: rotate(180deg);
}
&.m--prev:hover:after{
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#232323) no-repeat 100%;
}
&.m--next:after {
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%; background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%;
} }
&.m--next:hover:after{
&.m--prev:hover::after {
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#232323) no-repeat 100%;
}
&.m--next::after {
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#FFFF) no-repeat 100%;
}
&.m--next:hover::after {
background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#232323) no-repeat 100%; background: svg-load('./assets/img/icon/ArrowRight.svg', stroke=#232323) no-repeat 100%;
} }
} }

View File

@ -1,13 +1,17 @@
.player { .player {
position: fixed; position: fixed;
z-index: 3;
right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0;
backdrop-filter: blur(100px);
z-index: 3;
padding: 10px var(--space-between-block);
display: flex; display: flex;
gap: var(--space-between-block); gap: var(--space-between-block);
padding: 10px var(--space-between-block);
backdrop-filter: blur(100px);
//display: none; //display: none;
&__cover { &__cover {
width: 80px; width: 80px;
@ -20,20 +24,24 @@
} }
&__top { &__top {
margin-bottom: 10px;
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 10px;
} }
&__executor { &__executor {
font-size: 1rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-left: 20px;
gap: 0.25rem; gap: 0.25rem;
margin-left: 20px;
font-size: 1rem;
span { span {
color: var(--color-white-opacity); color: var(--color-white-opacity);
} }
&.m--skeleton { &.m--skeleton {
min-width: 135px; min-width: 135px;
} }
@ -42,179 +50,204 @@
&__favorites { &__favorites {
width: 27px; width: 27px;
height: 27px; height: 27px;
background: svg-load('./assets/img/icon/favorites.svg', fill=#404145FF)
no-repeat 100%;
margin-left: var(--space-between-block); margin-left: var(--space-between-block);
background: svg-load('./assets/img/icon/favorites.svg', fill=#404145FF) no-repeat 100%;
&.m--skeleton { &.m--skeleton {
background: none; background: none;
} }
&:hover { &:hover {
cursor: url('./assets/img/icon/cursor.svg'), auto; cursor: url('./assets/img/icon/cursor.svg'), auto;
} }
&.m--active { &.m--active {
background: svg-load('./assets/img/icon/favorites.svg', fill=#FFF) background: svg-load('./assets/img/icon/favorites.svg', fill=#FFF) no-repeat 100%;
no-repeat 100%;
} }
} }
&__bottom { &__bottom {
display: flex; display: flex;
align-items: center;
gap: 20px; gap: 20px;
align-items: center;
} }
&__time { &__time {
font-size: 1rem;
color: var(--color-white-opacity);
font-weight: 500;
position: relative; position: relative;
min-width: 105px; min-width: 105px;
font-size: 1rem;
font-weight: 500;
color: var(--color-white-opacity);
&.m--ether { &.m--ether {
padding-right: 10px; padding-right: 10px;
&:after { &::after {
content: ''; content: '';
animation: blink 1s infinite;
position: absolute; position: absolute;
border-radius: 50%;
left: 40px;
top: 0; top: 0;
left: 40px;
width: 5px; width: 5px;
height: 5px; height: 5px;
background: var(--color-emmit); background: var(--color-emmit);
border-radius: 50%;
animation: blink 1s infinite;
} }
} }
} }
&__tools { &__tools {
display: flex; display: flex;
gap: var(--space-between-block); gap: var(--space-between-block);
align-items: center; align-items: center;
margin-left: auto; margin-left: auto;
&.m--skeleton { &.m--skeleton {
min-width: 200px; min-width: 200px;
} }
} }
&__volume { &__volume {
display: flex;
align-items: center;
position: relative; position: relative;
display: flex;
gap: 10px; gap: 10px;
align-items: center;
&-on { &-on {
width: 24px; width: 24px;
height: 24px; height: 24px;
background: svg-load('./assets/img/icon/volume.svg', fill=#FFFF) no-repeat background: svg-load('./assets/img/icon/volume.svg', fill=#FFFF) no-repeat 100%;
100%;
&:hover { &:hover {
cursor: url('./assets/img/icon/cursor.svg'), auto; cursor: url('./assets/img/icon/cursor.svg'), auto;
} }
} }
&-off { &-off {
width: 24px; width: 24px;
height: 24px; height: 24px;
background: svg-load('./assets/img/icon/volume-off.svg', fill=#FFFF) background: svg-load('./assets/img/icon/volume-off.svg', fill=#FFFF) no-repeat 100%;
no-repeat 100%;
&:hover { &:hover {
cursor: url('./assets/img/icon/cursor.svg'), auto; cursor: url('./assets/img/icon/cursor.svg'), auto;
} }
} }
input { input {
position: relative; position: relative;
appearance: none;
overflow: hidden;
display: block;
width: calc(100% - 34px); width: calc(100% - 34px);
height: 5px; height: 5px;
border-radius: 10px;
display: block;
background: var(--color-white-opacity);
overflow: hidden;
margin: 0; margin: 0;
appearance: none;
background: var(--color-white-opacity);
border-radius: 10px;
&::-webkit-slider-thumb,
&::-webkit-slider-thumb {
width: 1px;
height: 5px;
appearance: none;
box-shadow: -100vmax 0 0 100vmax var(--color-white);
}
&:hover { &:hover {
cursor: url('./assets/img/icon/cursor.svg'), auto; cursor: url('./assets/img/icon/cursor.svg'), auto;
} }
}
}
&::-webkit-slider-thumb,
&::-webkit-slider-thumb {
-webkit-appearance: none;
width: 1px;
height: 5px;
box-shadow: -100vmax 0 0 100vmax var(--color-white);
}
}
}
&__progress { &__progress {
flex: 1 1 auto;
position: relative; position: relative;
flex: 1 1 auto;
input { input {
position: relative; position: relative;
appearance: none;
overflow: hidden;
display: block;
width: 100%; width: 100%;
height: 5px; height: 5px;
border-radius: 10px;
display: block;
background: var(--color-white-opacity);
margin-bottom: 20px;
overflow: hidden;
margin: 0; margin: 0;
margin-bottom: 20px;
&:hover { appearance: none;
cursor: url('./assets/img/icon/cursor.svg'), auto; background: var(--color-white-opacity);
} border-radius: 10px;
&::-webkit-slider-thumb, &::-webkit-slider-thumb,
&::-webkit-slider-thumb { &::-webkit-slider-thumb {
-webkit-appearance: none;
width: 1px; width: 1px;
height: 5px; height: 5px;
appearance: none;
box-shadow: -100vmax 0 0 100vmax var(--color-primary); box-shadow: -100vmax 0 0 100vmax var(--color-primary);
} }
&:hover {
cursor: url('./assets/img/icon/cursor.svg'), auto;
}
} }
} }
&__btn { &__btn {
min-height: 0;
min-width: 0;
width: 50px;
height: 50px;
border-radius: 50%;
border: none;
background: var(--color-primary);
position: relative; position: relative;
width: 50px;
min-width: 0;
height: 50px;
min-height: 0;
background: var(--color-primary);
border: none;
border-radius: 50%;
&.m--play { &.m--play {
&:after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
width: 18px; width: 18px;
height: 18px; height: 18px;
margin: auto; margin: auto;
background: svg-load('./assets/img/icon/play.svg', fill=#FFFF) no-repeat
100%; background: svg-load('./assets/img/icon/play.svg', fill=#FFFF) no-repeat 100%;
background-size: contain; background-size: contain;
} }
&:hover:after { &:hover::after {
background: svg-load('./assets/img/icon/play.svg', fill=$color-primary) background: svg-load('./assets/img/icon/play.svg', fill=$color-primary) no-repeat 100%;
no-repeat 100%;
background-size: contain; background-size: contain;
} }
} }
&.m--pause { &.m--pause {
&:after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
width: 18px; width: 18px;
height: 18px; height: 18px;
margin: auto; margin: auto;
background: svg-load('./assets/img/icon/pause.svg', fill=#FFFF)
no-repeat 100%; background: svg-load('./assets/img/icon/pause.svg', fill=#FFFF) no-repeat 100%;
background-size: contain; background-size: contain;
} }
&:hover:after { &:hover::after {
background: svg-load('./assets/img/icon/pause.svg', fill=$color-primary) background: svg-load('./assets/img/icon/pause.svg', fill=$color-primary) no-repeat 100%;
no-repeat 100%;
background-size: contain; background-size: contain;
} }
} }
@ -229,6 +262,7 @@
from { from {
opacity: 1; opacity: 1;
} }
to { to {
opacity: 0; opacity: 0;
} }

View File

@ -1,87 +1,117 @@
.playlist { .playlist {
position: relative; position: relative;
z-index: 2; z-index: 2;
&__header { &__header {
display: flex; display: flex;
align-items: center;
gap: calc(var(--space-between-block) / 2); gap: calc(var(--space-between-block) / 2);
align-items: center;
margin-bottom: var(--space-between-block); margin-bottom: var(--space-between-block);
} }
&__title { &__title {
font-size: 32px;
margin: 0; margin: 0;
padding: 0; padding: 0;
font-size: 32px;
&.m--margin { &.m--margin {
margin-bottom: 1rem; margin-bottom: 1rem;
} }
} }
&__back { &__back {
cursor: url('./assets/img/icon/cursor.svg'), auto;
width: 30px; width: 30px;
height: 30px; height: 30px;
background: svg-load('./assets/img/icon/arrow-right.svg', stroke=$color-white) no-repeat 100%; background: svg-load('./assets/img/icon/arrow-right.svg', stroke=$color-white) no-repeat 100%;
cursor: url("./assets/img/icon/cursor.svg"), auto;
transition: all .3s ease; transition: all 0.3s ease;
&:hover { &:hover {
background: svg-load('./assets/img/icon/arrow-right.svg', stroke=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/arrow-right.svg', stroke=$color-primary) no-repeat 100%;
} }
} }
&__edit { &__edit {
cursor: url('./assets/img/icon/cursor.svg'), auto;
width: 30px; width: 30px;
height: 30px; height: 30px;
background: svg-load('./assets/img/icon/ellipsis.svg', fill=$color-white) no-repeat 100%; background: svg-load('./assets/img/icon/ellipsis.svg', fill=$color-white) no-repeat 100%;
cursor: url("./assets/img/icon/cursor.svg"), auto;
transition: all .3s ease; transition: all 0.3s ease;
&:hover { &:hover {
background: svg-load('./assets/img/icon/ellipsis.svg', fill=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/ellipsis.svg', fill=$color-primary) no-repeat 100%;
} }
} }
&-roster { &-roster {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: calc(var(--space-between-block) / 2); gap: calc(var(--space-between-block) / 2);
width: 100%; width: 100%;
} }
&-edit { &-edit {
position: relative; position: relative;
z-index: 2; z-index: 2;
&__search { &__search {
margin-bottom: var(--space-between-block); margin-bottom: var(--space-between-block);
} }
&__search { &__search {
min-width: 320px;
width: 40%; width: 40%;
min-width: 320px;
} }
&__list { &__list {
display: flex; display: flex;
gap: var(--space-between-block); gap: var(--space-between-block);
} }
&__item { &__item {
width: calc(50% - var(--space-between-block) / 2); width: calc(50% - var(--space-between-block) / 2);
} }
&__title { &__title {
color: transparent;
font-size: 2rem;
background-clip: text;
background-image: var(--linear-gradient);
margin-bottom: 1rem; margin-bottom: 1rem;
}
&__upload{ font-size: 2rem;
cursor: url("./assets/img/icon/cursor.svg"), auto;
border: none;
padding: 0;
background-clip: text;
color: transparent; color: transparent;
background-image: var(--linear-gradient-highlight);
margin: 0 0 var(--space-between-block); background-image: var(--linear-gradient);
transition: all .3s ease; background-clip: text;
}
&__upload {
cursor: url('./assets/img/icon/cursor.svg'), auto;
display: flex; display: flex;
gap: 10px; gap: 10px;
&:before{
margin: 0 0 var(--space-between-block);
padding: 0;
color: transparent;
background-image: var(--linear-gradient-highlight);
background-clip: text;
border: none;
transition: all 0.3s ease;
&::before {
content: ''; content: '';
width: 20px; width: 20px;
height: 20px; height: 20px;
background: svg-load('./assets/img/icon/paper-clip.svg', fill=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/paper-clip.svg', fill=$color-primary) no-repeat 100%;
} }
&:hover { &:hover {
color: var(--color-white); color: var(--color-white);
} }
@ -89,45 +119,55 @@
} }
&-item { &-item {
z-index: 2; cursor: url('./assets/img/icon/cursor.svg'), auto;
position: relative; position: relative;
z-index: 2;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-width: 220px; min-width: 220px;
cursor: url("./assets/img/icon/cursor.svg"), auto;
&__cover { &__cover {
min-height: 220px;
margin-bottom: 10px;
background: svg-load('./assets/img/icon/playlist-item.svg', fill=$color-white) no-repeat 100%; background: svg-load('./assets/img/icon/playlist-item.svg', fill=$color-white) no-repeat 100%;
border-radius: 10px; border-radius: 10px;
margin-bottom: 10px;
transition: all .3s ease; transition: all 0.3s ease;
min-height: 220px;
&:hover { &:hover {
margin-bottom: 10px;
background: svg-load('./assets/img/icon/playlist-item.svg', fill=$color-white-opacity) no-repeat 100%; background: svg-load('./assets/img/icon/playlist-item.svg', fill=$color-white-opacity) no-repeat 100%;
border-radius: 10px; border-radius: 10px;
margin-bottom: 10px;
} }
} }
&.m--create &__cover { &.m--create &__cover {
position: relative; position: relative;
background: var(--bg-opacity); background: var(--bg-opacity);
&:after {
&::after {
content: ''; content: '';
position: absolute;
inset: 0;
width: 63px; width: 63px;
height: 63px; height: 63px;
background: svg-load('./assets/img/icon/playlist-item-create.svg', fill=$color-white-opacity) no-repeat 100%;
transition: all .3s ease;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto; margin: auto;
background: svg-load('./assets/img/icon/playlist-item-create.svg', fill=$color-white-opacity) no-repeat 100%;
transition: all 0.3s ease;
} }
&:hover { &:hover {
background: var(--color-primary); background: var(--color-primary);
&:after{
&::after {
background: svg-load('./assets/img/icon/playlist-item-create.svg', fill=$color-white) no-repeat 100%; background: svg-load('./assets/img/icon/playlist-item-create.svg', fill=$color-white) no-repeat 100%;
} }
} }

View File

@ -1,36 +1,42 @@
.playlists { .playlists {
&__content { &__content {
} }
&__list { &__list {
} }
&__item { &__item {
display: flex;
position: relative; position: relative;
padding-bottom: 1rem;
align-items: center;
gap: 20px;
padding-top: 1rem;
&:after{ display: flex;
gap: 20px;
align-items: center;
padding-top: 1rem;
padding-bottom: 1rem;
&::after {
content: '';
position: absolute; position: absolute;
bottom: 0; bottom: 0;
content: '';
width: 100%; width: 100%;
height: 1px; height: 1px;
background: var(--linear-gradient); background: var(--linear-gradient);
} }
} }
&__time { &__time {
width: 100px; width: 100px;
margin: 0; margin: 0;
} }
&__param { &__param {
margin: 0;
width: 25%; width: 25%;
margin: 0;
&.m--long { &.m--long {
flex: 1 1 auto; flex: 1 1 auto;
} }

View File

@ -4,6 +4,7 @@
padding: 0; padding: 0;
font-size: 1.5rem; font-size: 1.5rem;
} }
&__tabs { &__tabs {
margin-top: var(--space-between-block); margin-top: var(--space-between-block);
} }

View File

@ -1,110 +1,142 @@
.rubric { .rubric {
&-block { &-block {
margin-bottom: var(--space-between-sections); margin-bottom: var(--space-between-sections);
&__header { &__header {
display: flex; display: flex;
justify-content: space-between;
align-items: start;
flex-wrap: wrap; flex-wrap: wrap;
align-items: start;
justify-content: space-between;
&-title{ &-title{
margin-bottom: 0; margin-bottom: 0;
} }
} }
&__description{ &__description{
max-width: 60%;
margin-bottom: 2.5rem;
@mixin responsive-xxs { @mixin responsive-xxs {
max-width: none; max-width: none;
} }
max-width: 60%;
margin-bottom: 2.5rem;
&.m--50{ &.m--50{
margin-bottom: 0;
max-width: 50%;
width: 100%; width: 100%;
max-width: 50%;
margin-bottom: 0;
} }
} }
&__link{ &__link{
@mixin responsive-xxs { @mixin responsive-xxs {
order: 1; order: 1;
margin: var(--space-between-block) 0;
width: 100%; width: 100%;
margin: var(--space-between-block) 0;
} }
} }
&__list{ &__list{
position: relative; position: relative;
padding-bottom: 10px; padding-bottom: 10px;
&:before{
&::before{
content: '';
position: absolute;
top: 0; top: 0;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
position: absolute;
content: '';
background: url("./assets/img/bg/rubric-list.svg") no-repeat; background: url("./assets/img/bg/rubric-list.svg") no-repeat;
background-position: 25%; background-position: 25%;
background-size: 35%; background-size: 35%;
} }
} }
&__item{ &__item{
position: relative;
z-index: 2;
display: flex; display: flex;
align-items: center; align-items: center;
position: relative;
padding: 20px 0; padding: 20px 0;
z-index: 2;
&:hover{ &:hover{
cursor: url("./assets/img/icon/cursor.svg"), auto; cursor: url("./assets/img/icon/cursor.svg"), auto;
} }
&:after{
&::after{
content: '';
position: absolute; position: absolute;
bottom: 0; bottom: 0;
content: '';
background: #000;
width: 100%; width: 100%;
height: 1px; height: 1px;
background: #000;
background: var(--linear-gradient); background: var(--linear-gradient);
} }
} }
&__title{ &__title{
transition: all .3s ease;
margin-right: auto; margin-right: auto;
padding-right: 10px;
color: var(--color-white); color: var(--color-white);
text-wrap: nowrap; text-wrap: nowrap;
padding-right: 10px;
transition: all .3s ease;
} }
&__btn{ &__btn{
transition: all .35s ease, visibility .0s ease;
visibility: hidden;
text-wrap: nowrap;
min-width: 0;
width: 0; width: 0;
min-width: 0;
text-wrap: nowrap;
visibility: hidden;
transition: all .35s ease, visibility .0s ease;
} }
&__item:hover &__btn{ &__item:hover &__btn{
visibility: visible;
min-width: 240px;
width: 240px; width: 240px;
min-width: 240px;
margin-left: 20px; margin-left: 20px;
visibility: visible;
} }
&__item:hover &__title{ &__item:hover &__title{
color: transparent; color: transparent;
background-clip: text;
background-image: var(--linear-gradient); background-image: var(--linear-gradient);
background-clip: text;
} }
} }
&-modal{ &-modal{
&__header{ &__header{
display: flex; display: flex;
justify-content: space-between;
align-items: center; align-items: center;
justify-content: space-between;
margin-bottom: 1rem; margin-bottom: 1rem;
} }
&__title{ &__title{
margin-bottom: 0; margin-bottom: 0;
} }
&__close{ &__close{
position: relative; position: relative;
} }
&__cover{ &__cover{
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
&__description{ &__description{
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }

View File

@ -4,26 +4,34 @@
flex-wrap: wrap; flex-wrap: wrap;
gap: 0 var(--space-between-block); gap: 0 var(--space-between-block);
} }
.m--column &-item{ .m--column &-item{
width: 100%; width: 100%;
} }
&-item { &-item {
width: calc(50% - var(--space-between-block) / 2);
position: relative;
display: flex;
align-items: center;
z-index: 2;
border-left: 3px solid transparent;
padding: 10px;
transition: border .5s ease, background .5s ease;
background: transparent;
@mixin responsive-m { @mixin responsive-m {
width: 100%; width: 100%;
} }
position: relative;
z-index: 2;
display: flex;
align-items: center;
width: calc(50% - var(--space-between-block) / 2);
padding: 10px;
background: transparent;
border-left: 3px solid transparent;
transition: border .5s ease, background .5s ease;
&.m--select &__selected { &.m--select &__selected {
margin-right: 20px;
width: 35px; width: 35px;
height: 33px; height: 33px;
margin-right: 20px;
&.m--stop { &.m--stop {
path { path {
@ -33,8 +41,8 @@
} }
&__selected { &__selected {
width: 0;
overflow: hidden; overflow: hidden;
width: 0;
transition: all .2s ease; transition: all .2s ease;
path:nth-child(n) { path:nth-child(n) {
@ -53,110 +61,133 @@
&:hover { &:hover {
cursor: url("./assets/img/icon/cursor.svg"), auto; cursor: url("./assets/img/icon/cursor.svg"), auto;
background: linear-gradient(90deg, rgb(255 255 255 / 20%) 0%, rgb(255 255 255 / 0%) 100%);
border-color: var(--color-primary); border-color: var(--color-primary);
background: linear-gradient(90deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0) 100%);
} }
&__btn { &__btn {
min-height: 0;
min-width: 0;
width: 50px;
height: 50px;
border-radius: 50%;
border: none;
background: var(--color-primary);
position: relative; position: relative;
width: 50px;
min-width: 0;
height: 50px;
min-height: 0;
background: var(--color-primary);
border: none;
border-radius: 50%;
&.m--small { &.m--small {
background: transparent;
width: 25px; width: 25px;
height: 25px; height: 25px;
background: transparent;
} }
&.m--favorites { &.m--favorites {
&:after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
width: 25px; width: 25px;
height: 25px; height: 25px;
margin: auto; margin: auto;
background: svg-load('./assets/img/icon/favorites.svg', fill=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/favorites.svg', fill=$color-primary) no-repeat 100%;
background-size: contain; background-size: contain;
transition: all .3s ease; transition: all .3s ease;
} }
&:hover:after { &:hover::after {
background: svg-load('./assets/img/icon/favorites.svg', fill=#FFF) no-repeat 100%; background: svg-load('./assets/img/icon/favorites.svg', fill=#FFF) no-repeat 100%;
background-size: contain; background-size: contain;
} }
} }
&.m--add { &.m--add {
&:after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
width: 25px; width: 25px;
height: 25px; height: 25px;
margin: auto; margin: auto;
background: svg-load('./assets/img/icon/add-icon.svg', fill=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/add-icon.svg', fill=$color-primary) no-repeat 100%;
background-size: contain; background-size: contain;
transition: all .3s ease; transition: all .3s ease;
} }
&:hover:after { &:hover::after {
background: svg-load('./assets/img/icon/add-icon.svg', fill=#FFF) no-repeat 100%; background: svg-load('./assets/img/icon/add-icon.svg', fill=#FFF) no-repeat 100%;
background-size: contain; background-size: contain;
} }
} }
&.m--already{ &.m--already{
&:after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
width: 25px; width: 25px;
height: 25px; height: 25px;
margin: auto; margin: auto;
background: svg-load('./assets/img/icon/icon-trash.svg', stroke=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/icon-trash.svg', stroke=$color-primary) no-repeat 100%;
background-size: contain; background-size: contain;
transition: all .3s ease; transition: all .3s ease;
} }
&:hover:after { &:hover::after {
background: svg-load('./assets/img/icon/icon-trash.svg', stroke=#FFF) no-repeat 100%; background: svg-load('./assets/img/icon/icon-trash.svg', stroke=#FFF) no-repeat 100%;
background-size: contain; background-size: contain;
} }
} }
&.m--play { &.m--play {
&:after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
width: 18px; width: 18px;
height: 18px; height: 18px;
margin: auto; margin: auto;
background: svg-load('./assets/img/icon/play.svg', fill=#FFFF) no-repeat 100%; background: svg-load('./assets/img/icon/play.svg', fill=#FFFF) no-repeat 100%;
background-size: contain; background-size: contain;
transition: all .3s ease; transition: all .3s ease;
} }
&:hover:after { &:hover::after {
background: svg-load('./assets/img/icon/play.svg', fill=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/play.svg', fill=$color-primary) no-repeat 100%;
background-size: contain; background-size: contain;
} }
} }
&.m--pause { &.m--pause {
&:after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
width: 18px; width: 18px;
height: 18px; height: 18px;
margin: auto; margin: auto;
background: svg-load('./assets/img/icon/pause.svg', fill=#FFFF) no-repeat 100%; background: svg-load('./assets/img/icon/pause.svg', fill=#FFFF) no-repeat 100%;
background-size: contain; background-size: contain;
transition: all .3s ease; transition: all .3s ease;
} }
&:hover:after { &:hover::after {
background: svg-load('./assets/img/icon/pause.svg', fill=$color-primary) no-repeat 100%; background: svg-load('./assets/img/icon/pause.svg', fill=$color-primary) no-repeat 100%;
background-size: contain; background-size: contain;
} }
@ -166,21 +197,23 @@
&__info { &__info {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
font-size: 1rem;
color: var(--color-white-opacity);
line-height: 21px;
margin-left: 20px; margin-left: 20px;
font-size: 1rem;
line-height: 21px;
color: var(--color-white-opacity);
span { span {
color: var(--color-white); color: var(--color-white);
} }
} }
&__tools { &__tools {
margin-left: auto;
display: flex; display: flex;
align-items: center;
gap: 20px; gap: 20px;
align-items: center;
margin-left: auto;
} }
} }
} }
@ -189,9 +222,11 @@
0% { 0% {
transform: translateY(0); transform: translateY(0);
} }
50% { 50% {
transform: translateY(50%); transform: translateY(50%);
} }
100% { 100% {
transform: translateY(0); transform: translateY(0);
} }

View File

@ -1,38 +1,46 @@
.support{ .support{
&-block{ &-block{
margin-bottom: var(--space-between-sections); margin-bottom: var(--space-between-sections);
&__item { &__item {
width: calc(100% / 3); position: relative;
z-index: 2;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
font-size: 16px;
width: calc(100% / 3);
margin-bottom: 2.5rem; margin-bottom: 2.5rem;
font-size: 16px;
&::before {
content: '';
position: relative; position: relative;
z-index: 2; z-index: 2;
&:before {
content: '';
height: 50px; height: 50px;
margin-bottom: 10px; margin-bottom: 10px;
position: relative;
z-index: 2;
} }
&.m--one-circle:before { &.m--one-circle::before {
width: 50px; width: 50px;
background: url("./assets/img/icon/one-circle.svg") no-repeat center; background: url("./assets/img/icon/one-circle.svg") no-repeat center;
} }
&.m--two-circle:before { &.m--two-circle::before {
width: 100px; width: 100px;
background: url("./assets/img/icon/two-circle.svg") no-repeat center; background: url("./assets/img/icon/two-circle.svg") no-repeat center;
} }
&.m--three-circle:before { &.m--three-circle::before {
width: 150px; width: 150px;
background: url("./assets/img/icon/three-circle.svg") no-repeat center; background: url("./assets/img/icon/three-circle.svg") no-repeat center;
} }
} }
&__list{ &__list{
display: flex; display: flex;
gap: var(--space-between-block); gap: var(--space-between-block);

View File

@ -2,50 +2,61 @@
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
margin-bottom: var(--space-between-block); margin-bottom: var(--space-between-block);
&.m--btns{ &.m--btns{
gap: 10px;
@mixin responsive-xs { @mixin responsive-xs {
.button{ .button{
width: 100%; width: 100%;
} }
} }
gap: 10px;
} }
&__item { &__item {
border: none; position: relative;
background: none;
display: flex;
margin-right: 10px;
padding: 0;
font-size: 2rem;
color: var(--color-white); color: var(--color-white);
text-transform: uppercase; text-transform: uppercase;
font-size: 2rem;
margin-right: 10px; background: none;
position: relative; border: none;
display: flex;
padding: 0;
transition: all 0.5s ease; transition: all 0.5s ease;
&:after { &::after {
content: ''; content: '';
display: block; display: block;
width: 3px;
height: 100%;
margin-left: 10px;
background: var(--color-white); background: var(--color-white);
border-radius: 20px; border-radius: 20px;
height: 100%;
width: 3px;
margin-left: 10px;
} }
&:last-child { &:last-child {
margin: 0; margin: 0;
&:after { &::after {
display: none; display: none;
} }
} }
&.is-active, &:hover { &.is-active, &:hover {
color: transparent;
-webkit-background-clip: text;
background-image: var(--linear-gradient);
cursor: url("./assets/img/icon/cursor.svg"), auto; cursor: url("./assets/img/icon/cursor.svg"), auto;
color: transparent;
background-image: var(--linear-gradient);
background-clip: text;
} }
} }
} }

View File

@ -1,31 +1,36 @@
.team { .team {
margin-left: auto;
max-width: calc(100vw - ((100vw - var(--container)) / 2));
margin-bottom: var(--space-between-sections);
position: relative;
z-index: 2;
@mixin responsive-xl { @mixin responsive-xl {
padding: 0 0 0 20px; padding: 0 0 0 20px;
} }
position: relative;
z-index: 2;
max-width: calc(100vw - ((100vw - var(--container)) / 2));
margin-bottom: var(--space-between-sections);
margin-left: auto;
&__header { &__header {
display: flex;
max-width: var(--container);
margin-right: auto;
padding: 0 50px 0;
margin-bottom: var(--space-between-block);
@mixin responsive-xl { @mixin responsive-xl {
padding: 0 40px 0 0;
column-gap: var(--space-between-block); column-gap: var(--space-between-block);
padding: 0 40px 0 0;
} }
@mixin responsive-s { @mixin responsive-s {
flex-wrap: wrap; flex-wrap: wrap;
} }
display: flex;
max-width: var(--container);
margin-right: auto;
margin-bottom: var(--space-between-block);
padding: 0 50px;
} }
&__title { &__title {
margin-bottom: 0;
margin-right: auto; margin-right: auto;
margin-bottom: 0;
text-wrap: nowrap; text-wrap: nowrap;
} }
@ -44,79 +49,93 @@
} }
&__tools { &__tools {
margin-top: 65px;
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: space-between;
max-width: var(--container);
margin-right: auto;
row-gap: 1.5rem;
padding: 0 50px 0;
@mixin responsive-xl { @mixin responsive-xl {
padding: 0 80px 0 35px; padding: 0 80px 0 35px;
} }
@mixin responsive-l { @mixin responsive-l {
padding: 0 40px 0 0; padding: 0 40px 0 0;
} }
display: flex;
flex-wrap: wrap;
row-gap: 1.5rem;
align-items: center;
justify-content: space-between;
max-width: var(--container);
margin-top: 65px;
margin-right: auto;
padding: 0 50px;
.m--link{ .m--link{
@mixin responsive-s { @mixin responsive-s {
width: 100%;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
width: 100%;
} }
} }
} }
&__progress { &__progress {
width: 100%;
height: 4px;
position: relative;
max-width: 460px;
background: var(--color-white-opacity);
border-radius: 20px;
overflow: hidden;
@mixin responsive-s { @mixin responsive-s {
max-width: none; max-width: none;
} }
position: relative;
overflow: hidden;
width: 100%;
max-width: 460px;
height: 4px;
background: var(--color-white-opacity);
border-radius: 20px;
span { span {
background: var(--color-white);
position: absolute; position: absolute;
left: 0;
top: 0; top: 0;
left: 0;
transform-origin: left top;
width: 100%; width: 100%;
height: 100%; height: 100%;
transform-origin: left top;
background: var(--color-white);
} }
} }
&__cover { &__cover {
margin-bottom: 0.5rem;
height: 450px;
overflow: hidden; overflow: hidden;
height: 450px;
margin-bottom: 0.5rem;
} }
&__name { &__name {
font-weight: 500;
font-size: 1.5rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0.5rem; gap: 0.5rem;
font-size: 1.5rem;
font-weight: 500;
span { span {
font-weight: 400;
font-size: 1.125rem; font-size: 1.125rem;
font-weight: 400;
} }
} }
&__description { &__description {
max-width: 820px;
@mixin responsive-xl { @mixin responsive-xl {
max-width: calc(100% - var(--space-between-block)); max-width: calc(100% - var(--space-between-block));
} }
@mixin responsive-s { @mixin responsive-s {
max-width: none;
width: 100%; width: 100%;
} max-width: none;
}
max-width: 820px;
} }
} }

View File

@ -5,8 +5,9 @@ $document-width-s: 730px;
$document-width-xs: 640px; $document-width-xs: 640px;
$document-width-xxs: 480px; $document-width-xxs: 480px;
$color-primary: #5e5bfc; $color-primary: #5e5bfc;
$color-white: #ffffff; $color-white: #fff;
$color-white-opacity: #bbb9ca; $color-white-opacity: #bbb9ca;
:root { :root {
--color-black: #232323; --color-black: #232323;
--color-white: $color-white; --color-white: $color-white;
@ -14,24 +15,14 @@ $color-white-opacity: #bbb9ca;
--color-white-opacity: $color-white-opacity; --color-white-opacity: $color-white-opacity;
--bg-wrapper-modal: #000000e5; --bg-wrapper-modal: #000000e5;
--color-primary: $color-primary; --color-primary: $color-primary;
--color-black-cc: #000000cc; --color-black-cc: #000c;
--color-emmit: #e81717; --color-emmit: #e81717;
--bg-opacity: #74767d; --bg-opacity: #74767d;
--base-fz: 18px; --base-fz: 18px;
--base-lh: 1.3; --base-lh: 1.3;
--font-family-base: 'Manrope', 'Tahoma', sans-serif; --font-family-base: 'Manrope', 'Tahoma', sans-serif;
--linear-gradient-highlight: linear-gradient( --linear-gradient-highlight: linear-gradient(259.3deg, #5e5bfc 0.44%, #871df0 97.88%);
259.3deg, --linear-gradient: linear-gradient(91.17deg, #c6f1f7 -4.01%, #f983e9 36.14%, #b877ff 77.44%, #c2e9cd 106.11%);
#5e5bfc 0.44%,
#871df0 97.88%
);
--linear-gradient: linear-gradient(
91.17deg,
#c6f1f7 -4.01%,
#f983e9 36.14%,
#b877ff 77.44%,
#c2e9cd 106.11%
);
--container: $document-width-xl; --container: $document-width-xl;
--space-between-block: calc(var(--base-fz) * 2.25); --space-between-block: calc(var(--base-fz) * 2.25);
--space-between-sections: calc(var(--base-fz) * 7); --space-between-sections: calc(var(--base-fz) * 7);
@ -40,13 +31,16 @@ $color-white-opacity: #bbb9ca;
@media (max-width: $document-width-xl) { @media (max-width: $document-width-xl) {
--container: $document-width-l; --container: $document-width-l;
} }
@media (max-width: $document-width-l) { @media (max-width: $document-width-l) {
--container: $document-width-m; --container: $document-width-m;
} }
@media (max-width: $document-width-m) { @media (max-width: $document-width-m) {
--container: $document-width-s; --container: $document-width-s;
--space-between-sections: calc(var(--base-fz) * 2.7); --space-between-sections: calc(var(--base-fz) * 2.7);
} }
@media (max-width: $document-width-s) { @media (max-width: $document-width-s) {
--container: $document-width-xs; --container: $document-width-xs;
} }

View File

@ -0,0 +1,13 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19.6499 10.4707L36.2205 21.7959C37.8587 22.8014 37.9651 24.941 36.4308 26.07L19.8603 37.1358C17.9201 38.5687 15 37.326 15 35.0679V12.6794C15 10.53 17.6776 9.25767 19.6499 10.4707Z" fill="url(#paint0_linear_764_558)" stroke="url(#paint1_linear_764_558)" stroke-width="7.67085" stroke-miterlimit="10" stroke-linejoin="round"/>
<defs>
<linearGradient id="paint0_linear_764_558" x1="16.5052" y1="11.6349" x2="37.4699" y2="31.8231" gradientUnits="userSpaceOnUse">
<stop stop-color="#8E00FE"/>
<stop offset="1" stop-color="#6800FF"/>
</linearGradient>
<linearGradient id="paint1_linear_764_558" x1="16.5052" y1="11.6349" x2="37.4699" y2="31.8231" gradientUnits="userSpaceOnUse">
<stop stop-color="#8E00FE"/>
<stop offset="1" stop-color="#6800FF"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 881 B

View File

@ -0,0 +1,13 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.8909 7.29266L23.1931 14.3337C24.2116 14.9589 24.2778 16.289 23.3239 16.991L13.0217 23.8708C11.8155 24.7616 10 23.989 10 22.5851V8.66585C10 7.32952 11.6647 6.53848 12.8909 7.29266Z" fill="url(#paint0_linear_764_557)" stroke="url(#paint1_linear_764_557)" stroke-width="4.76909" stroke-miterlimit="10" stroke-linejoin="round"/>
<defs>
<linearGradient id="paint0_linear_764_557" x1="10.9358" y1="8.01644" x2="23.9699" y2="20.5678" gradientUnits="userSpaceOnUse">
<stop stop-color="#8E00FE"/>
<stop offset="1" stop-color="#6800FF"/>
</linearGradient>
<linearGradient id="paint1_linear_764_557" x1="10.9358" y1="8.01644" x2="23.9699" y2="20.5678" gradientUnits="userSpaceOnUse">
<stop stop-color="#8E00FE"/>
<stop offset="1" stop-color="#6800FF"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 884 B

View File

@ -0,0 +1,13 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.44547 3.4592L11.5966 6.97972C12.1058 7.29229 12.1389 7.95738 11.6619 8.30836L6.51086 11.7482C5.90775 12.1937 5 11.8074 5 11.1054V4.14579C5 3.47763 5.83236 3.08211 6.44547 3.4592Z" fill="url(#paint0_linear_764_556)" stroke="url(#paint1_linear_764_556)" stroke-width="2.38454" stroke-miterlimit="10" stroke-linejoin="round"/>
<defs>
<linearGradient id="paint0_linear_764_556" x1="5.46789" y1="3.82109" x2="11.9849" y2="10.0968" gradientUnits="userSpaceOnUse">
<stop stop-color="#8E00FE"/>
<stop offset="1" stop-color="#6800FF"/>
</linearGradient>
<linearGradient id="paint1_linear_764_556" x1="5.46789" y1="3.82109" x2="11.9849" y2="10.0968" gradientUnits="userSpaceOnUse">
<stop stop-color="#8E00FE"/>
<stop offset="1" stop-color="#6800FF"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 882 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@ -1,12 +1,6 @@
<template> <template>
<div class="app__breadcrumbs breadcrumbs"> <div class="app__breadcrumbs breadcrumbs">
<router-link <router-link v-for="(item, key) in breadcrumbs" :key="key" v-slot="{ href, navigate }" :to="item.route" custom>
v-for="(item, key) in breadcrumbs"
:key="key"
v-slot="{ href, navigate }"
:to="item.route"
custom
>
<div v-if="item.name" class="breadcrumbs__item"> <div v-if="item.name" class="breadcrumbs__item">
<a :href="href" class="breadcrumbs__item-link" @click="navigate"> <a :href="href" class="breadcrumbs__item-link" @click="navigate">
{{ item.name }} {{ item.name }}

View File

@ -4,33 +4,20 @@
<h2 class="h2 m--white">Напишите нам</h2> <h2 class="h2 m--white">Напишите нам</h2>
<div class="footer__question"> <div class="footer__question">
<div class="text">Остались вопросы? Мы с радостью вам ответим!</div> <div class="text">Остались вопросы? Мы с радостью вам ответим!</div>
<button class="button m--white m--arrow footer__question-button"> <button class="button m--white m--arrow footer__question-button">Написать</button>
Написать
</button>
</div> </div>
</div> </div>
<div class="footer__bottom"> <div class="footer__bottom">
<ul class="footer__menu"> <ul class="footer__menu">
<li <li v-for="(item, key) in menu" :key="key" :class="['footer__menu-item', item.class]">
v-for="(item, key) in menu" <router-link :to="{ name: item.name, params: item.params }" class="footer__menu-link">
:key="key"
:class="['footer__menu-item', item.class]"
>
<router-link
:to="{ name: item.name, params: item.params }"
class="footer__menu-link"
>
{{ item.title }} {{ item.title }}
</router-link> </router-link>
</li> </li>
</ul> </ul>
<div class="footer__connection"> <div class="footer__connection">
<ul class="footer__social"> <ul class="footer__social">
<li <li v-for="(item, key) in socialMenu" :key="key" :class="['footer__menu-item', item.class]">
v-for="(item, key) in socialMenu"
:key="key"
:class="['footer__menu-item', item.class]"
>
<router-link :to="item.link" class="footer__menu-link"> <router-link :to="item.link" class="footer__menu-link">
{{ item.title }} {{ item.title }}
</router-link> </router-link>
@ -38,14 +25,10 @@
</ul> </ul>
<ul class="footer__connection"> <ul class="footer__connection">
<li class="footer__menu-item"> <li class="footer__menu-item">
<router-link to="#" class="m--underline"> <router-link to="#" class="m--underline"> it@radio.org </router-link>
it@radio.org
</router-link>
</li> </li>
<li class="footer__menu-item"> <li class="footer__menu-item">
<router-link to="#" class="m--underline"> <router-link to="#" class="m--underline"> +7 (900) 000-01-12 </router-link>
+7 (900) 000-01-12
</router-link>
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -11,16 +11,8 @@
<li class="header__logo m--menu" @click="next('home')"> <li class="header__logo m--menu" @click="next('home')">
<img src="@/assets/img/icon/logo.svg" alt="logo" /> <img src="@/assets/img/icon/logo.svg" alt="logo" />
</li> </li>
<li <li v-for="(item, key) in menu" :key="key" :class="['header__menu-item', item.class]">
v-for="(item, key) in menu" <router-link v-if="!item.action" :to="{ name: item.name, params: item.params }" class="header__menu-link">
:key="key"
:class="['header__menu-item', item.class]"
>
<router-link
v-if="!item.action"
:to="{ name: item.name, params: item.params }"
class="header__menu-link"
>
{{ item.title }} {{ item.title }}
</router-link> </router-link>
<button <button
@ -31,12 +23,7 @@
> >
{{ item.title }} {{ item.title }}
</button> </button>
<button <button v-else class="header__menu-icon" :class="[item.icon]" @click="handlerClick(item.action)"></button>
v-else
class="header__menu-icon"
:class="[item.icon]"
@click="handlerClick(item.action)"
></button>
</li> </li>
</ul> </ul>
<div class="header__burger" @click="handlerShowMenu"> <div class="header__burger" @click="handlerShowMenu">

View File

@ -36,15 +36,13 @@ export default {
}, },
{ {
id: 2, id: 2,
title: title: 'Искусственный интеллект меняет мир технологий: возможности и вызовы',
'Искусственный интеллект меняет мир технологий: возможности и вызовы',
time: '2', time: '2',
data: '21 октября', data: '21 октября',
}, },
{ {
id: 3, id: 3,
title: title: 'Как кибербезопасность становится ключевым фактором успеха в IT',
'Как кибербезопасность становится ключевым фактором успеха в IT',
time: '2', time: '2',
data: '21 октября', data: '21 октября',
}, },

View File

@ -161,10 +161,7 @@ export default {
node.setErrors([err.detail], err.error); node.setErrors([err.detail], err.error);
}); });
} else { } else {
if ( if (this.formRegistration.password === this.formRegistration.repeatPassword) {
this.formRegistration.password ===
this.formRegistration.repeatPassword
) {
app app
.createUser(this.formRegistration) .createUser(this.formRegistration)
.then((res) => { .then((res) => {

View File

@ -19,10 +19,7 @@
<div class="title m--white rubric-modal__title"> <div class="title m--white rubric-modal__title">
{{ rubrik.name }} {{ rubrik.name }}
</div> </div>
<button <button class="button modal__close rubric-modal__close" @click="$emit('hideModal')"></button>
class="button modal__close rubric-modal__close"
@click="$emit('hideModal')"
></button>
</div> </div>
<div class="rubric-modal__cover"> <div class="rubric-modal__cover">
<img :src="`${selfUrl}${rubrik.img}`" alt="" /> <img :src="`${selfUrl}${rubrik.img}`" alt="" />
@ -30,9 +27,7 @@
<div class="rubric-modal__description"> <div class="rubric-modal__description">
{{ rubrik.description }} {{ rubrik.description }}
</div> </div>
<button class="button m--fit-content m--white m--arrow" v-if="user?.id"> <button class="button m--fit-content m--white m--arrow" v-if="user?.id">Написать</button>
Написать
</button>
</template> </template>
</vue-final-modal> </vue-final-modal>
</template> </template>

View File

@ -97,28 +97,16 @@ export default {
if (count <= 4) { if (count <= 4) {
items.push({ text: item, value: item }); items.push({ text: item, value: item });
} else { } else {
if ( if (item === 1 && this.currentPage !== item && this.currentPage - 1 !== 1 && this.currentPage - 2 !== 1) {
item === 1 &&
this.currentPage !== item &&
this.currentPage - 1 !== 1 &&
this.currentPage - 2 !== 1
) {
items.push({ text: '1', value: 1 }); items.push({ text: '1', value: 1 });
items.push({ text: '...', value: null }); items.push({ text: '...', value: null });
} else if ( } else if (item === count && this.currentPage + 1 !== count && this.currentPage + 2 !== count) {
item === count &&
this.currentPage + 1 !== count &&
this.currentPage + 2 !== count
) {
items.push({ text: '...', value: null }); items.push({ text: '...', value: null });
items.push({ text: count, value: count }); items.push({ text: count, value: count });
} else { } else {
let deltaPrev = count - this.currentPage <= 3 ? 3 : 2; let deltaPrev = count - this.currentPage <= 3 ? 3 : 2;
let deltaAfter = this.currentPage <= 3 ? 4 - this.currentPage : 2; let deltaAfter = this.currentPage <= 3 ? 4 - this.currentPage : 2;
if ( if (item > this.currentPage - deltaPrev && item < this.currentPage + deltaAfter) {
item > this.currentPage - deltaPrev &&
item < this.currentPage + deltaAfter
) {
console.log(item); console.log(item);
items.push({ text: item, value: item }); items.push({ text: item, value: item });
} }

View File

@ -2,26 +2,17 @@
<div class="player"> <div class="player">
<div class="player__cover"> <div class="player__cover">
<q-skeleton v-if="loaderPlay" height="100%" /> <q-skeleton v-if="loaderPlay" height="100%" />
<img v-else :src="currentPlay.art" alt="player" /> <template v-else>
<img v-if="currentPlay.art" :src="currentPlay.art" alt="player" />
<img v-else :src="require('@/assets/img/mock/template-artist.png')" alt="player" />
</template>
</div> </div>
<div class="player__content"> <div class="player__content">
<div class="player__top"> <div class="player__top">
<q-skeleton <q-skeleton v-if="loaderPlay" type="circle" class="player__btn m--skeleton" />
v-if="loaderPlay"
type="circle"
class="player__btn m--skeleton"
/>
<template v-else> <template v-else>
<button <button v-if="currentPlay.isPlay" @click="handlerPause" class="button player__btn m--pause"></button>
v-if="currentPlay.isPlay" <button v-else @click="handlerPlay" class="button player__btn m--play"></button>
@click="handlerPause"
class="button player__btn m--pause"
></button>
<button
v-else
@click="handlerPlay"
class="button player__btn m--play"
></button>
</template> </template>
<div class="player__executor"> <div class="player__executor">
<q-skeleton v-if="loaderPlay" class="player__executor m--skeleton" /> <q-skeleton v-if="loaderPlay" class="player__executor m--skeleton" />
@ -37,12 +28,7 @@
</div> </div>
<div @click="handleAuthRequired"> <div @click="handleAuthRequired">
<q-skeleton v-if="loaderPlay" class="player__favorites m--skeleton" /> <q-skeleton v-if="loaderPlay" class="player__favorites m--skeleton" />
<div <div v-else class="player__favorites" :class="[isFavorites && 'm--active']" @click="handlerFavorites"></div>
v-else
class="player__favorites"
:class="[isFavorites && 'm--active']"
@click="handlerFavorites"
></div>
</div> </div>
<div class="player__tools"> <div class="player__tools">
<q-skeleton v-if="loaderPlay" class="player__tools m--skeleton" /> <q-skeleton v-if="loaderPlay" class="player__tools m--skeleton" />
@ -60,26 +46,14 @@
<span <span
ref="volumeIcon" ref="volumeIcon"
@click="toggleVolume" @click="toggleVolume"
:class=" :class="songVolume == 0 ? 'player__volume-off' : 'player__volume-on'"
songVolume == 0 ? 'player__volume-off' : 'player__volume-on'
"
/>
<input
type="range"
min="0"
max="1"
step="0.01"
v-model="songVolume"
@input="changeVolume"
/> />
<input type="range" min="0" max="1" step="0.01" v-model="songVolume" @input="changeVolume" />
</div> </div>
</div> </div>
</div> </div>
<div class="player__bottom"> <div class="player__bottom">
<div <div class="player__time" :class="!loaderPlay && !isUserMusic && 'm--ether'">
class="player__time"
:class="!loaderPlay && !isUserMusic && 'm--ether'"
>
<q-skeleton v-if="loaderPlay" /> <q-skeleton v-if="loaderPlay" />
<template v-else-if="isUserMusic"> <template v-else-if="isUserMusic">
{{ getTime(playerInfo.currentTime) }} / {{ getTime(playerInfo.currentTime) }} /
@ -89,12 +63,7 @@
</div> </div>
<div class="player__progress"> <div class="player__progress">
<q-skeleton v-if="loaderPlay" height="5px" /> <q-skeleton v-if="loaderPlay" height="5px" />
<input <input v-else :disabled="!isUserMusic" type="range" v-model="playerInfo.progress" />
v-else
:disabled="!isUserMusic"
type="range"
v-model="playerInfo.progress"
/>
</div> </div>
</div> </div>
</div> </div>
@ -189,9 +158,7 @@ export default {
...this.userSongList[this.currentPlay.currentIndex || 0], ...this.userSongList[this.currentPlay.currentIndex || 0],
live: false, live: false,
}); });
this.getAudio( this.getAudio(this.userSongList[this.currentPlay.currentIndex || 0]?.azura_id);
this.userSongList[this.currentPlay.currentIndex || 0]?.azura_id,
);
if (this.player.target) { if (this.player.target) {
this.player.target.addEventListener('timeupdate', this.updateProgress); this.player.target.addEventListener('timeupdate', this.updateProgress);
} }
@ -238,16 +205,12 @@ export default {
}); });
}, },
handleConnection(e) { handleConnection(e) {
// console.log('getPlaying', e);
const jsonData = JSON.parse(e.data); const jsonData = JSON.parse(e.data);
// console.log('jsonData', jsonData);
const data = const data =
// Второй ответ // Второй ответ
jsonData?.pub?.data || jsonData?.pub?.data ||
// Первый ответ // Первый ответ
jsonData?.connect?.subs?.['station:it-radio']?.publications?.[0]?.data; jsonData?.connect?.subs?.['station:it-radio']?.publications?.[0]?.data;
// console.log('getPlaying', data);
// console.log(data);
if (!data) return; if (!data) return;
if (this.currentPlay.live) { if (this.currentPlay.live) {
@ -255,12 +218,9 @@ export default {
const dataUrl = data.np.station.listen_url; const dataUrl = data.np.station.listen_url;
// Объект с данными музыки // Объект с данными музыки
const dataSong = data.np.now_playing.song; const dataSong = data.np.now_playing.song;
// console.log(dataSong);
const playerUrl = this.player.target.src; const playerUrl = this.player.target.src;
if (dataUrl !== playerUrl) { if (dataUrl !== playerUrl) {
// console.log('data.np.station.listen_url', dataUrl);
this.$store.dispatch('changePlayer', dataUrl); this.$store.dispatch('changePlayer', dataUrl);
// console.log(this.player);
this.actionCurrentPlay(dataSong); this.actionCurrentPlay(dataSong);
} }
if (dataSong.id !== this.currentPlay.id) { if (dataSong.id !== this.currentPlay.id) {
@ -269,7 +229,7 @@ export default {
} }
}, },
actionCurrentPlay(song) { actionCurrentPlay(song) {
// console.log('actionCurrentPlay', data); console.log('actionCurrentPlay', song);
const currentPlay = { const currentPlay = {
...this.currentPlay, // Инфа про текущий трек ...this.currentPlay, // Инфа про текущий трек
...song, ...song,
@ -278,23 +238,18 @@ export default {
live: true, live: true,
currentIndex: null, currentIndex: null,
}; };
// console.log('params in getPlaying ', params);
// delete params.unique_id; // delete params.unique_id;
this.$store.dispatch('setCurrentPlay', currentPlay); this.$store.dispatch('setCurrentPlay', currentPlay);
}, },
updateProgress(e) { updateProgress(e) {
this.playerInfo = { this.playerInfo = {
...this.playerInfo, ...this.playerInfo,
progress: progress: (this.player.target.currentTime / this.player.target.duration) * 100,
(this.player.target.currentTime / this.player.target.duration) * 100,
currentTime: this.player.target.currentTime, currentTime: this.player.target.currentTime,
}; };
if (this.player.target.currentTime === this.player.target.duration) { if (this.player.target.currentTime === this.player.target.duration) {
let currentIndex = this.currentPlay.currentIndex + 1; let currentIndex = this.currentPlay.currentIndex + 1;
if ( if (!this.userSongList[currentIndex]?.azura_id || currentIndex === null) {
!this.userSongList[currentIndex]?.azura_id ||
currentIndex === null
) {
currentIndex = 0; currentIndex = 0;
} }
this.$store.dispatch('setCurrentPlay', { this.$store.dispatch('setCurrentPlay', {
@ -334,9 +289,7 @@ export default {
if (this.user?.id) { if (this.user?.id) {
const params = { const params = {
...this.currentPlay, ...this.currentPlay,
azura_id: Number(this.currentPlay.id) azura_id: Number(this.currentPlay.id) ? this.currentPlay.azura_id : this.currentPlay.id,
? this.currentPlay.azura_id
: this.currentPlay.id,
}; };
if (!this.isFavorites) { if (!this.isFavorites) {
delete params.id; delete params.id;
@ -396,8 +349,7 @@ export default {
this.player.target.addEventListener('timeupdate', this.updateProgress); this.player.target.addEventListener('timeupdate', this.updateProgress);
blob.arrayBuffer().then((buffer) => { blob.arrayBuffer().then((buffer) => {
var audioContext = new (window.AudioContext || var audioContext = new (window.AudioContext || window.webkitAudioContext)();
window.webkitAudioContext)();
audioContext.decodeAudioData(buffer, (decodedData) => { audioContext.decodeAudioData(buffer, (decodedData) => {
this.playerInfo.duration = decodedData.duration; this.playerInfo.duration = decodedData.duration;
}); });

View File

@ -2,18 +2,13 @@
<div class="rubric-block"> <div class="rubric-block">
<div class="rubric-block__header"> <div class="rubric-block__header">
<h2 class="h2 rubric-block__header-title">Рубрики</h2> <h2 class="h2 rubric-block__header-title">Рубрики</h2>
<button <button class="button m--arrow rubric-block__link" v-if="$route.name !== 'rubric'" @click="next('rubric')">
class="button m--arrow rubric-block__link"
v-if="$route.name !== 'rubric'"
@click="next('rubric')"
>
Смотреть все Смотреть все
</button> </button>
<div class="p rubric-block__description"> <div class="p rubric-block__description">
IT-радио - это уникальная платформа для обмена опытом, знаниями и IT-радио - это уникальная платформа для обмена опытом, знаниями и обсуждения актуальных вопросов, связанных с
обсуждения актуальных вопросов, связанных с разработкой программного разработкой программного обеспечения, искусственного интеллекта, интернета вещей и других направлений
обеспечения, искусственного интеллекта, интернета вещей и других IT-индустрии
направлений IT-индустрии
</div> </div>
</div> </div>
<template v-if="showLoader"> <template v-if="showLoader">
@ -23,27 +18,14 @@
</div> </div>
</template> </template>
<div v-else class="rubric-block__list"> <div v-else class="rubric-block__list">
<div <div class="rubric-block__item" v-for="rubrik in rubriks" :key="`rubrik_${rubrik.id}`">
class="rubric-block__item"
v-for="rubrik in rubriks"
:key="`rubrik_${rubrik.id}`"
>
<div class="title rubric-block__title">{{ rubrik.name }}</div> <div class="title rubric-block__title">{{ rubrik.name }}</div>
<div class="p rubric-block__description m--50">{{ rubrik.title }}</div> <div class="p rubric-block__description m--50">{{ rubrik.title }}</div>
<button <button class="button m--arrow rubric-block__btn" @click="showModalRubric(rubrik.id)">Узнать больше</button>
class="button m--arrow rubric-block__btn"
@click="showModalRubric(rubrik.id)"
>
Узнать больше
</button>
</div> </div>
</div> </div>
</div> </div>
<RubricModal <RubricModal :showModal="isShowModalRubric" @hideModal="hiddenModalRubric" :selectRubric="ModalTemplate" />
:showModal="isShowModalRubric"
@hideModal="hiddenModalRubric"
:selectRubric="ModalTemplate"
/>
</template> </template>
<script> <script>

View File

@ -1,67 +1,32 @@
<template> <template>
<div <div class="song-item" :class="[selectSong && 'm--select']" @click="handlerSelectSong">
class="song-item"
:class="[selectSong && 'm--select']"
@click="handlerSelectSong"
>
<div class="song-item__selected" :class="[!isPlay && 'm--stop']"> <div class="song-item__selected" :class="[!isPlay && 'm--stop']">
<svg <svg width="33" height="28" viewBox="0 0 33 28" fill="none" xmlns="http://www.w3.org/2000/svg">
width="33"
height="28"
viewBox="0 0 33 28"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path <path
class="" class=""
d="M0 15C0 13.6193 1.11929 12.5 2.5 12.5C3.88071 12.5 5 13.6193 5 15V27.5H0V15Z" d="M0 15C0 13.6193 1.11929 12.5 2.5 12.5C3.88071 12.5 5 13.6193 5 15V27.5H0V15Z"
fill="#7138F4" fill="#7138F4"
/> />
<path <path d="M7 9C7 7.61929 8.11929 6.5 9.5 6.5C10.8807 6.5 12 7.61929 12 9V27.5H7V9Z" fill="#7138F4" />
d="M7 9C7 7.61929 8.11929 6.5 9.5 6.5C10.8807 6.5 12 7.61929 12 9V27.5H7V9Z" <path d="M14 12C14 10.6193 15.1193 9.5 16.5 9.5C17.8807 9.5 19 10.6193 19 12V27.5H14V12Z" fill="#7138F4" />
fill="#7138F4" <path d="M21 3C21 1.61929 22.1193 0.5 23.5 0.5C24.8807 0.5 26 1.61929 26 3V27.5H21V3Z" fill="#7138F4" />
/> <path d="M28 20C28 18.6193 29.1193 17.5 30.5 17.5C31.8807 17.5 33 18.6193 33 20V27.5H28V20Z" fill="#7138F4" />
<path
d="M14 12C14 10.6193 15.1193 9.5 16.5 9.5C17.8807 9.5 19 10.6193 19 12V27.5H14V12Z"
fill="#7138F4"
/>
<path
d="M21 3C21 1.61929 22.1193 0.5 23.5 0.5C24.8807 0.5 26 1.61929 26 3V27.5H21V3Z"
fill="#7138F4"
/>
<path
d="M28 20C28 18.6193 29.1193 17.5 30.5 17.5C31.8807 17.5 33 18.6193 33 20V27.5H28V20Z"
fill="#7138F4"
/>
</svg> </svg>
</div> </div>
<div> <div>
<button <button v-if="isPlay" @click.stop="handlerPause" class="button song-item__btn m--pause"></button>
v-if="isPlay" <button v-else @click.stop="handlerPlay" class="button song-item__btn m--play"></button>
@click.stop="handlerPause"
class="button song-item__btn m--pause"
></button>
<button
v-else
@click.stop="handlerPlay"
class="button song-item__btn m--play"
></button>
</div> </div>
<div class="song-item__info"> <div class="song-item__info">
<span>{{ song.title }}</span> <span>{{ song.title }}</span>
{{ song.artist }} {{ song.artist }}
</div> </div>
<div class="song-item__tools"> <div class="song-item__tools">
<button <button class="button song-item__btn m--small m--favorites" @click.stop="removeSong"></button>
class="button song-item__btn m--small m--favorites"
@click.stop="removeSong"
></button>
<button <button
class="button song-item__btn m--small m--add" class="button song-item__btn m--small m--add"
:class="songAlreadyAddPlaylist && 'm--already'" :class="songAlreadyAddPlaylist && 'm--already'"
@click.stop=" @click.stop="songAlreadyAddPlaylist ? removeToPlaylist() : addPlaylist()"
songAlreadyAddPlaylist ? removeToPlaylist() : addPlaylist()
"
></button> ></button>
</div> </div>
</div> </div>

View File

@ -4,9 +4,7 @@
v-for="song in songList" v-for="song in songList"
:key="song" :key="song"
:song="song" :song="song"
:playSong=" :playSong="song.azura_id === currentPlay.azura_id ? currentPlay.isPlay : false"
song.azura_id === currentPlay.azura_id ? currentPlay.isPlay : false
"
:selectSong="song.azura_id === currentPlay.azura_id" :selectSong="song.azura_id === currentPlay.azura_id"
:songAlreadyAddPlaylist="songAlreadyAdd" :songAlreadyAddPlaylist="songAlreadyAdd"
@selectSong="handlerSelectSong" @selectSong="handlerSelectSong"
@ -46,9 +44,7 @@ export default {
methods: { methods: {
handlerSelectSong(params) { handlerSelectSong(params) {
const data = { ...this.currentPlay, ...params, isLoader: true }; const data = { ...this.currentPlay, ...params, isLoader: true };
data.currentIndex = this.songList.findIndex( data.currentIndex = this.songList.findIndex((el) => el.azura_id === params.azura_id);
(el) => el.azura_id === params.azura_id,
);
this.$store.dispatch('setCurrentPlay', data); this.$store.dispatch('setCurrentPlay', data);
console.log('handlerSelectSong'); console.log('handlerSelectSong');
}, },

View File

@ -4,19 +4,17 @@
<div class="support-block__list"> <div class="support-block__list">
<div class="support-block__item m--one-circle"> <div class="support-block__item m--one-circle">
<div class="title">Донат</div> <div class="title">Донат</div>
Мы будем рады, если вы поддержите нас любой суммой! Все средства пойдут Мы будем рады, если вы поддержите нас любой суммой! Все средства пойдут на дальнейшее развитие проекта
на дальнейшее развитие проекта
</div> </div>
<div class="support-block__item m--two-circle"> <div class="support-block__item m--two-circle">
<div class="title">Дело</div> <div class="title">Дело</div>
Если вы фотографируете, монтируете, пишете, корректируете, занимаетесь Если вы фотографируете, монтируете, пишете, корректируете, занимаетесь продвижением или делаете еще что-нибудь
продвижением или делаете еще что-нибудь классное и думаете, что можете классное и думаете, что можете быть нам полезны на волонтерских началах свяжитесь с нами через форму
быть нам полезны на волонтерских началах свяжитесь с нами через форму
</div> </div>
<div class="support-block__item m--three-circle"> <div class="support-block__item m--three-circle">
<div class="title">Развитие</div> <div class="title">Развитие</div>
Расскажите о нашем проекте в соцсетях! Можно поделиться любым нашим Расскажите о нашем проекте в соцсетях! Можно поделиться любым нашим постом, видео в ютубе или рассказать о нас в
постом, видео в ютубе или рассказать о нас в своей аудитории своей аудитории
</div> </div>
</div> </div>
</div> </div>

View File

@ -3,9 +3,8 @@
<div class="team__header"> <div class="team__header">
<h2 class="h2 team__title">Наша команда</h2> <h2 class="h2 team__title">Наша команда</h2>
<div class="team__description"> <div class="team__description">
На IT волне команда профессионалов неутомимо трудится, чтобы дарить На IT волне команда профессионалов неутомимо трудится, чтобы дарить слушателям самые свежие и актуальные новости
слушателям самые свежие и актуальные новости из мира технологий, из мира технологий, отвечать на их вопросы и обсуждать горячие темы на IT радио.
отвечать на их вопросы и обсуждать горячие темы на IT радио.
</div> </div>
</div> </div>
<template v-if="showLoader"> <template v-if="showLoader">
@ -43,11 +42,7 @@
}" }"
class="team__slider" class="team__slider"
> >
<SwiperSlide <SwiperSlide class="team__item" v-for="employee in team" :key="employee.id">
class="team__item"
v-for="employee in team"
:key="employee.id"
>
<div class="team__cover"> <div class="team__cover">
<img :src="`${selfUrl + employee.img_person}`" alt="user" /> <img :src="`${selfUrl + employee.img_person}`" alt="user" />
</div> </div>
@ -61,9 +56,7 @@
<div class="team__progress" ref="progressBar"> <div class="team__progress" ref="progressBar">
<span></span> <span></span>
</div> </div>
<router-link :to="{ name: 'about' }" class="m--link"> <router-link :to="{ name: 'about' }" class="m--link"> Больше о нас </router-link>
Больше о нас
</router-link>
</div> </div>
</div> </div>
</template> </template>

View File

@ -9,17 +9,12 @@
content="user-scalable=yes, initial-scale=1, maximum-scale=5, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>" content="user-scalable=yes, initial-scale=1, maximum-scale=5, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>"
/> />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="icon" type="image/ico" href="favicon.ico" /> <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
rel="icon"
type="image/svg"
sizes="16x16"
href="icons/favicon-16x16.svg"
/>
<link rel="manifest" href="/site.webmanifest" /> <link rel="manifest" href="/site.webmanifest" />
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" /> <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
<meta name="msapplication-TileColor" content="#00a300" /> <meta name="msapplication-TileColor" content="#da532c" />
<meta name="theme-color" content="#119b58" /> <meta name="theme-color" content="#ffffff" />
</head> </head>
<body> <body>
<!-- DO NOT touch the following DIV --> <!-- DO NOT touch the following DIV -->

View File

@ -1,11 +1,6 @@
import { route } from 'quasar/wrappers'; import { route } from 'quasar/wrappers';
import store from '@/store'; import store from '@/store';
import { import { createRouter, createMemoryHistory, createWebHistory, createWebHashHistory } from 'vue-router';
createRouter,
createMemoryHistory,
createWebHistory,
createWebHashHistory,
} from 'vue-router';
import routes from './routes'; import routes from './routes';
/* /*
@ -43,13 +38,11 @@ export default route(function (/* { store, ssrContext } */) {
// Leave this as is and make changes in quasar.conf.js instead! // Leave this as is and make changes in quasar.conf.js instead!
// quasar.conf.js -> build -> vueRouterMode // quasar.conf.js -> build -> vueRouterMode
// quasar.conf.js -> build -> publicPath // quasar.conf.js -> build -> publicPath
history: createHistory( history: createHistory(process.env.MODE === 'ssr' ? void 0 : process.env.VUE_ROUTER_BASE),
process.env.MODE === 'ssr' ? void 0 : process.env.VUE_ROUTER_BASE,
),
}); });
Router.beforeEach((to, from, next) => { Router.beforeEach((to, from, next) => {
console.log(process.env.SERVER); // console.log(process.env.SERVER);
//уточнить зачем нужен process.env.SERVER //уточнить зачем нужен process.env.SERVER
if (to.meta.isAuth && !process.env.SERVER) { if (to.meta.isAuth && !process.env.SERVER) {
if (store.state.user) { if (store.state.user) {

View File

@ -1,12 +1,9 @@
import { urlPath as settings } from '@/settings'; import { urlPath as settings } from '@/settings';
import { REST, RESTError } from './rest'; import { REST, RESTError } from './rest';
// запросы на сервер Django
// console.log(settings); // console.log(settings);
export default class extends REST { export default class extends REST {
// export default class Django extends REST {
static get settings() { static get settings() {
return settings; return settings;
} }
@ -233,10 +230,7 @@ export default class extends REST {
return data; return data;
}) })
.catch((error) => { .catch((error) => {
throw new RESTError( throw new RESTError(error, 'Ошибка при получении информации о текущем треке');
error,
'Ошибка при получении информации о текущем треке',
);
}); });
} }

View File

@ -21,9 +21,7 @@ export default class extends REST {
}), }),
}); });
// console.log('sseUriParams', sseUriParams.toString()); // console.log('sseUriParams', sseUriParams.toString());
this.connection = new EventSource( this.connection = new EventSource(sseBaseUri + '?' + sseUriParams.toString());
sseBaseUri + '?' + sseUriParams.toString(),
);
// window.connection = this.connection; // window.connection = this.connection;
// this.connection.onopen = (e) => console.log('connected', e); // this.connection.onopen = (e) => console.log('connected', e);
} }

View File

@ -8,8 +8,7 @@ class RESTError extends Error {
let detail = let detail =
error.response && error.response &&
error.response.data && error.response.data &&
(error.response.data.detail || (error.response.data.detail || (error.response.data.error && error.response.data.error.detail));
(error.response.data.error && error.response.data.error.detail));
let header = (message || error.message) + (detail ? ': ' + detail : ''); let header = (message || error.message) + (detail ? ': ' + detail : '');
super(header); super(header);
@ -39,23 +38,8 @@ class REST {
static get settings() { static get settings() {
throw new Error('settings must be overridden'); throw new Error('settings must be overridden');
} }
static _get( static _get(url, params = {}, extraParams, use_cache = false, isBlob = false) {
url, return this._request('get', url, params, {}, {}, extraParams, use_cache, isBlob);
params = {},
extraParams,
use_cache = false,
isBlob = false,
) {
return this._request(
'get',
url,
params,
{},
{},
extraParams,
use_cache,
isBlob,
);
} }
static _post(url, params, data) { static _post(url, params, data) {
return this._request('post', url, params, data); return this._request('post', url, params, data);

View File

@ -1,9 +1,9 @@
/* eslint-disable */ /* eslint-disable */
// THIS FEATURE-FLAG FILE IS AUTOGENERATED, // THIS FEATURE-FLAG FILE IS AUTOGENERATED,
// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING // REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING
import "quasar/dist/types/feature-flag"; import 'quasar/dist/types/feature-flag';
declare module "quasar/dist/types/feature-flag" { declare module 'quasar/dist/types/feature-flag' {
interface QuasarFeatureFlags { interface QuasarFeatureFlags {
store: true; store: true;
} }

View File

@ -24,10 +24,7 @@ export default class {
delete params.extraData; delete params.extraData;
} }
if (params.extraParams) { if (params.extraParams) {
params.params = this.__append_extra_params( params.params = this.__append_extra_params(params.params, params.extraParams);
params.params,
params.extraParams,
);
delete params.extraParams; delete params.extraParams;
} }
/* /*

View File

@ -5,23 +5,16 @@
<div class="page404__block"> <div class="page404__block">
<div class="page404__info"> <div class="page404__info">
<div class="page404__info-title">404</div> <div class="page404__info-title">404</div>
<div class="page404__info-subtitle"> <div class="page404__info-subtitle">Мы не можем найти то, что вы ищете</div>
Мы не можем найти то, что вы ищете
</div>
<div class="page404__info-content"> <div class="page404__info-content">
Возможно, запрашиваемая вами страница была перенесена или удалена. Возможно, запрашиваемая вами страница была перенесена или удалена. Также возможно, что вы допустили
Также возможно, что вы допустили небольшую опечатку при вводе небольшую опечатку при вводе адреса такое случается даже с нами, поэтому еще раз внимательно проверьте.
адреса такое случается даже с нами, поэтому еще раз внимательно
проверьте.
</div> </div>
<div class="page404__info-bottom"> <div class="page404__info-bottom">
Переходите на главную страницу, там вы сможете найти много Переходите на главную страницу, там вы сможете найти много полезной информации!
полезной информации!
</div> </div>
<div class="page404__info-button"> <div class="page404__info-button">
<button class="button button-blue" @click="next()"> <button class="button button-blue" @click="next()">На главную</button>
На главную
</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -6,17 +6,12 @@
<div class="page500__info"> <div class="page500__info">
<div class="page500__info-title">Упс!</div> <div class="page500__info-title">Упс!</div>
<div class="page500__info-subtitle">Что то пошло не так!</div> <div class="page500__info-subtitle">Что то пошло не так!</div>
<div class="page500__info-content"> <div class="page500__info-content">Мы уже знаем об этом и делаем все возможное!</div>
Мы уже знаем об этом и делаем все возможное!
</div>
<div class="page500__info-bottom"> <div class="page500__info-bottom">
Переходите на главную страницу, там вы сможете найти много Переходите на главную страницу, там вы сможете найти много полезной информации!
полезной информации!
</div> </div>
<div class="page500__info-button"> <div class="page500__info-button">
<button class="button button-blue" @click="next()"> <button class="button button-blue" @click="next()">На главную</button>
На главную
</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -13,26 +13,22 @@
<div class="about__header-left"> <div class="about__header-left">
<h1 class="h2">О нас</h1> <h1 class="h2">О нас</h1>
<div class="text about__header-description"> <div class="text about__header-description">
IT-радио это не просто обычная радиостанция, мы ваши партнеры в IT-радио это не просто обычная радиостанция, мы ваши партнеры в творчестве и современных технологиях.
творчестве и современных технологиях.
</div> </div>
</div> </div>
<div class="about__header-right"></div> <div class="about__header-right"></div>
</div> </div>
<div class="text about__header-bottom"> <div class="text about__header-bottom">
Наша миссия воплотить ваши мечты в реальность, шаг за шагом. Наша миссия воплотить ваши мечты в реальность, шаг за шагом. Благодаря разнообразной команде ведущих,
Благодаря разнообразной команде ведущих, журналистов, разработчиков и журналистов, разработчиков и новаторов, мы постоянно расширяем границы возможного в цифровом мире.
новаторов, мы постоянно расширяем границы возможного в цифровом мире.
</div> </div>
</div> </div>
<div class="about__description"> <div class="about__description">
<h2 class="h2">Мы здесь, чтобы открыть глаза на мир IT</h2> <h2 class="h2">Мы здесь, чтобы открыть глаза на мир IT</h2>
<div class="about__description-info"> <div class="about__description-info">
<div class="text about__description-item m--left"> <div class="text about__description-item m--left">
IT-радио это уникальный проект, который объединяет в себе самых IT-радио это уникальный проект, который объединяет в себе самых ярких представителей IT-индустрии, а также
ярких представителей IT-индустрии, а также экспертов из различных экспертов из различных областей, чтобы поделиться своими знаниями и опытом с широкой аудиторией.
областей, чтобы поделиться своими знаниями и опытом с широкой
аудиторией.
</div> </div>
<div class="text about__description-item"> <div class="text about__description-item">
Мы команда, которая верит в силу теплой улыбки и дружеской беседы. Мы команда, которая верит в силу теплой улыбки и дружеской беседы.
@ -45,14 +41,13 @@
<div class="about__description"> <div class="about__description">
<div class="about__description-info"> <div class="about__description-info">
<div class="text about__description-item m--left"> <div class="text about__description-item m--left">
Основанное с целью переосмыслить радио через призму современного и Основанное с целью переосмыслить радио через призму современного и инновационного подхода, мы стали больше,
инновационного подхода, мы стали больше, чем просто радиостанцией, чем просто радиостанцией, мы сообщество родственных душ, которые разделяют страсть к артистизму, развитию и
мы сообщество родственных душ, которые разделяют страсть к инновациям.
артистизму, развитию и инновациям.
</div> </div>
<div class="text about__description-item"> <div class="text about__description-item">
Каждое шоу на IT-радио включает в себя актуальные темы, новости, Каждое шоу на IT-радио включает в себя актуальные темы, новости, обзоры, интервью с экспертами и многое
обзоры, интервью с экспертами и многое другое. другое.
</div> </div>
</div> </div>
</div> </div>
@ -71,27 +66,19 @@
</div> </div>
<div class="about__history-list"> <div class="about__history-list">
<div class="about__history-item"> <div class="about__history-item">
<div class="title m--white about__history-title"> <div class="title m--white about__history-title">Событие кратко 1</div>
Событие кратко 1
</div>
<div class="about__history-date">Ноябрь 2023</div> <div class="about__history-date">Ноябрь 2023</div>
</div> </div>
<div class="about__history-item"> <div class="about__history-item">
<div class="title m--white about__history-title"> <div class="title m--white about__history-title">Событие кратко 2</div>
Событие кратко 2
</div>
<div class="about__history-date">Ноябрь 2023</div> <div class="about__history-date">Ноябрь 2023</div>
</div> </div>
<div class="about__history-item"> <div class="about__history-item">
<div class="title m--white about__history-title"> <div class="title m--white about__history-title">Событие кратко 3</div>
Событие кратко 3
</div>
<div class="about__history-date">Ноябрь 2023</div> <div class="about__history-date">Ноябрь 2023</div>
</div> </div>
<div class="about__history-item"> <div class="about__history-item">
<div class="title m--white about__history-title"> <div class="title m--white about__history-title">Событие кратко 4</div>
Событие кратко 4
</div>
<div class="about__history-date">Ноябрь 2023</div> <div class="about__history-date">Ноябрь 2023</div>
</div> </div>
</div> </div>

View File

@ -10,30 +10,20 @@
<div class="contacts__content"> <div class="contacts__content">
<div v-if="contacts" class="contacts__info"> <div v-if="contacts" class="contacts__info">
<div v-for="(item, index) in contactsField" :key="index"> <div v-for="(item, index) in contactsField" :key="index">
<div <div v-if="item.title !== dictionaryFields.socials" class="text contacts__item">
v-if="item.title !== dictionaryFields.socials"
class="text contacts__item"
>
<span class="title">{{ item.title }}</span> <span class="title">{{ item.title }}</span>
{{ item.data }} {{ item.data }}
</div> </div>
<div v-else class="contacts__socials"> <div v-else class="contacts__socials">
<span class="title">{{ item.title }}</span> <span class="title">{{ item.title }}</span>
<div <div v-for="(href, social) in item.data" :key="social" class="contacts__social">
v-for="(href, social) in item.data"
:key="social"
class="contacts__social"
>
<a :href="href" :class="['contacts__social', social]"></a> <a :href="href" :class="['contacts__social', social]"></a>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="contacts__map"> <div class="contacts__map">
<!-- <div <div class="contacts__map-frame" style="position: relative; overflow: hidden">
class="contacts__map-frame"
style="position: relative; overflow: hidden"
>
<a <a
href="https://yandex.ru/maps/56/chelyabinsk/?utm_medium=mapframe&utm_source=maps" href="https://yandex.ru/maps/56/chelyabinsk/?utm_medium=mapframe&utm_source=maps"
style="color: #eee; font-size: 12px; position: absolute; top: 0px" style="color: #eee; font-size: 12px; position: absolute; top: 0px"
@ -46,8 +36,7 @@
allowfullscreen="true" allowfullscreen="true"
style="position: relative" style="position: relative"
></iframe> ></iframe>
</div> --> </div>
<YandexMap apiKey="e73ed16e-35ea-483b-afb4-9daac388591a" />
</div> </div>
<FormKit <FormKit
v-model="formData" v-model="formData"
@ -76,12 +65,11 @@
<script> <script>
import AppBreadcrumbs from '@/components/app-breadcrumbs.vue'; import AppBreadcrumbs from '@/components/app-breadcrumbs.vue';
import SupportBlock from '@/components/support-block.vue'; import SupportBlock from '@/components/support-block.vue';
import YandexMap from '@/components/ymap.vue';
import { app } from '@/services'; import { app } from '@/services';
export default { export default {
name: 'contacts', name: 'contacts',
components: { SupportBlock, AppBreadcrumbs, YandexMap }, components: { SupportBlock, AppBreadcrumbs },
data() { data() {
return { return {
formData: {}, formData: {},

View File

@ -5,8 +5,7 @@
<p class="text home__subtitle"> <p class="text home__subtitle">
Мы цифровое <span>онлайн радио.</span><br /> Мы цифровое <span>онлайн радио.</span><br />
Помогаем разобраться в том, что такое <span>IT.</span><br /> Помогаем разобраться в том, что такое <span>IT.</span><br />
Находимся в <span>Челябинске</span>, но вещаем на весь <span>Мир</span Находимся в <span>Челябинске</span>, но вещаем на весь <span>Мир</span><br />
><br />
</p> </p>
<h1 class="home__title" ref="targetTitle"> <h1 class="home__title" ref="targetTitle">
IT-Радио IT-Радио
@ -30,31 +29,27 @@
<div class="text home__info--item"> <div class="text home__info--item">
IT-RADIO. 2023 IT-RADIO. 2023
<span> <span>
Сегодня IT-сфера развивается настолько быстро, что следить за Сегодня IT-сфера развивается настолько быстро, что следить за всеми новинками и изменениями в ней
всеми новинками и изменениями в ней становится все сложнее.<br /><br /> становится все сложнее.<br /><br />
Но есть способ всегда быть в курсе последних новостей и событий Но есть способ всегда быть в курсе последних новостей и событий это IT-радио.
это IT-радио.
</span> </span>
</div> </div>
<h2 class="h2 m--border"> <h2 class="h2 m--border">Открывая новые горизонты в мире технологий</h2>
Открывая новые горизонты в мире технологий
</h2>
<div class="text home__info--item m--circle"> <div class="text home__info--item m--circle">
<span> <span>
IT-радио это уникальный проект, который объединяет в себе IT-радио это уникальный проект, который объединяет в себе самых ярких представителей IT-индустрии, а
самых ярких представителей IT-индустрии, а также экспертов из также экспертов из различных областей, чтобы поделиться своими знаниями и опытом с широкой
различных областей, чтобы поделиться своими знаниями и опытом с аудиторией.<br /><br />
широкой аудиторией.<br /><br /> Каждое шоу на IT-радио включает в себя актуальные темы, новости, обзоры, интервью с экспертами и многое
Каждое шоу на IT-радио включает в себя актуальные темы, новости, другое.
обзоры, интервью с экспертами и многое другое.
</span> </span>
</div> </div>
</div> </div>
<div class="home__content"> <div class="home__content">
<div class="home__content--item m--one-circle"> <div class="home__content--item m--one-circle">
<span class="title">Музыка</span> <span class="title">Музыка</span>
Нам важно создать комфортную атмосферу, которая поможет Нам важно создать комфортную атмосферу, которая поможет сосредоточиться на задачах и улучшит
сосредоточиться на задачах и улучшит продуктивность. продуктивность.
</div> </div>
<div class="home__content--item m--two-circle"> <div class="home__content--item m--two-circle">
<span class="title">Подкасты</span> <span class="title">Подкасты</span>
@ -76,9 +71,8 @@
<div class="home__social--description"> <div class="home__social--description">
<h2 class="h2 m--white">Соц сети</h2> <h2 class="h2 m--white">Соц сети</h2>
<div class="text"> <div class="text">
Следите за обновлениями и новыми постами на IT Radio, чтобы быть в Следите за обновлениями и новыми постами на IT Radio, чтобы быть в курсе последних новостей и событий в
курсе последних новостей и событий в мире IT, а также следить за мире IT, а также следить за анонсами и обновлениями!
анонсами и обновлениями!
</div> </div>
</div> </div>
<div class="home__social--btns"> <div class="home__social--btns">
@ -125,8 +119,7 @@ export default {
}); });
gsap.to(this.$refs.targetTitle, { gsap.to(this.$refs.targetTitle, {
color: 'transparent', color: 'transparent',
backgroundImage: backgroundImage: 'linear-gradient(91.17deg, #C6F1F7 -4.01%, #F983E9 36.14%, #B877FF 77.44%, #C2E9CD 106.11%)',
'linear-gradient(91.17deg, #C6F1F7 -4.01%, #F983E9 36.14%, #B877FF 77.44%, #C2E9CD 106.11%)',
scrollTrigger: { scrollTrigger: {
trigger: this.$refs.targetWrapper, trigger: this.$refs.targetWrapper,
scrub: true, scrub: true,

View File

@ -15,18 +15,9 @@
<h1 class="h2 playlist__title m--margin"> <h1 class="h2 playlist__title m--margin">
{{ $route.name === 'playlist-create' ? 'Новый плейлист' : playlist.name }} {{ $route.name === 'playlist-create' ? 'Новый плейлист' : playlist.name }}
</h1> </h1>
<button class="playlist-edit__upload" @click="handlerUploadCover"> <button class="playlist-edit__upload" @click="handlerUploadCover">Добавить обложку</button>
Добавить обложку
</button>
<div class="field__input m--hidden"> <div class="field__input m--hidden">
<input <input id="cover" ref="coverInput" accept=".jpg,.png,.svg" class="input" type="file" name="logo" />
id="cover"
ref="coverInput"
accept=".jpg,.png,.svg"
class="input"
type="file"
name="logo"
/>
</div> </div>
<FormKit <FormKit
v-model="playlist.name" v-model="playlist.name"
@ -96,9 +87,7 @@ export default {
computed: { computed: {
songsFiltered() { songsFiltered() {
return this.songs.filter((song) => { return this.songs.filter((song) => {
const alreadyAdd = this.playlist.song.find( const alreadyAdd = this.playlist.song.find((item) => item.azura_id === song.azura_id);
(item) => item.azura_id === song.azura_id,
);
return !alreadyAdd; return !alreadyAdd;
}); });
}, },

View File

@ -10,12 +10,7 @@
<div class="playlist__header"> <div class="playlist__header">
<div class="playlist__back" @click="handlerBack"></div> <div class="playlist__back" @click="handlerBack"></div>
<div class="h2 playlist__title">{{ playlist.name }}</div> <div class="h2 playlist__title">{{ playlist.name }}</div>
<div <div class="playlist__edit" @click="next({ name: 'playlist-edit', params: { id: this.playlist.id } })"></div>
class="playlist__edit"
@click="
next({ name: 'playlist-edit', params: { id: this.playlist.id } })
"
></div>
</div> </div>
<SongList :songList="playlist.song" :songAlreadyAdd="true" /> <SongList :songList="playlist.song" :songAlreadyAdd="true" />
</template> </template>

View File

@ -1,10 +1,6 @@
<template> <template>
<div class="app__content profile"> <div class="app__content profile">
<template <template v-if="$route.name !== 'playlist-edit' && $route.name !== 'playlist-create'">
v-if="
$route.name !== 'playlist-edit' && $route.name !== 'playlist-create'
"
>
<AppBreadcrumbs <AppBreadcrumbs
:breadcrumbs="[ :breadcrumbs="[
{ name: 'Главная', route: { name: 'home' } }, { name: 'Главная', route: { name: 'home' } },
@ -12,9 +8,7 @@
]" ]"
/> />
<h1 class="h2 profile__title">{{ user.email }}</h1> <h1 class="h2 profile__title">{{ user.email }}</h1>
<button class="button m--text-link" @click="showRecovery"> <button class="button m--text-link" @click="showRecovery">Редактировать профиль</button>
Редактировать профиль
</button>
<div class="profile__tabs tabs m--btns"> <div class="profile__tabs tabs m--btns">
<button <button
v-for="item in tabsItems" v-for="item in tabsItems"
@ -35,11 +29,7 @@
Загрузка данных Загрузка данных
</div> </div>
</template> </template>
<SongList <SongList v-else :songList="userFavorite.songs" @removeSong="removeFavorites" />
v-else
:songList="userFavorite.songs"
@removeSong="removeFavorites"
/>
</template> </template>
<template v-if="currentTabsItem === 'playlists'"> <template v-if="currentTabsItem === 'playlists'">
<template v-if="showLoaderPlaylist"> <template v-if="showLoaderPlaylist">
@ -48,11 +38,7 @@
Загрузка данных Загрузка данных
</div> </div>
</template> </template>
<PlaylistRoster <PlaylistRoster v-else :list="userFavorite.playlist" @createPlaylist="createPlayList" />
v-else
:list="userFavorite.playlist"
@createPlaylist="createPlayList"
/>
</template> </template>
</template> </template>
<routerView v-else /> <routerView v-else />
@ -106,10 +92,7 @@ export default {
console.log('1'); console.log('1');
this.currentTabsItem = to?.hash.replace('#', '') || 'music'; this.currentTabsItem = to?.hash.replace('#', '') || 'music';
} }
if ( if ((to?.hash !== from?.hash && to?.name === from?.name) || (!from?.name && !from?.hash)) {
(to?.hash !== from?.hash && to?.name === from?.name) ||
(!from?.name && !from?.hash)
) {
console.log('2'); console.log('2');
if (to.hash) { if (to.hash) {
this.currentTabsItem = to?.hash.replace('#', '') || 'music'; this.currentTabsItem = to?.hash.replace('#', '') || 'music';