itube-specs 0.0.817 → 0.0.818

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,23 @@
1
+ @use 'vars' as *;
2
+ @use '../mixins' as *;
3
+
4
+ /**
5
+ Анимация открытия попапов, для анимации открытия попапа обернуть SPopup в transition
6
+ */
7
+ .v-enter-active,
8
+ .v-leave-active {
9
+ transition: 100ms ease opacity;
10
+
11
+ @include from-br(sm) {
12
+ transition: 300ms linear opacity, 200ms linear transform;
13
+ }
14
+ }
15
+
16
+ .v-enter-from,
17
+ .v-leave-to {
18
+ opacity: 0;
19
+
20
+ @include from-br(sm) {
21
+ transform: scale(0.99) translateY(8px);
22
+ }
23
+ }
@@ -0,0 +1,78 @@
1
+ @use 'vars' as *;
2
+ @use '../mixins' as *;
3
+
4
+ .document {
5
+ @include font-sm;
6
+
7
+ line-height: 1.625;
8
+ }
9
+
10
+ .document__container {
11
+ --max-width-container: 910px;
12
+
13
+ padding-block: 32px 48px;
14
+ }
15
+
16
+ .document > section {
17
+ padding: 24px;
18
+ border-radius: $radius-2xl;
19
+ border: 1px solid $document-section-border;
20
+ background-color: $document-section-bg;
21
+
22
+ @include from-br(sm) {
23
+ padding: 32px;
24
+ }
25
+ }
26
+
27
+ .document h1 {
28
+ @include font-lg;
29
+
30
+ font-weight: 700;
31
+ text-transform: uppercase;
32
+ letter-spacing: var(--tracking-wide);
33
+ color: $document-heading;
34
+ padding-bottom: 16px;
35
+ margin-bottom: 32px;
36
+ border-bottom: 1px solid $document-header-border;
37
+ }
38
+
39
+ .document ul {
40
+ margin-bottom: 24px;
41
+ padding-left: 16px;
42
+ list-style: inside;
43
+ }
44
+
45
+ .document li:not(:last-child) {
46
+ margin-bottom: 12px;
47
+ }
48
+
49
+ .document p:not(:last-child) {
50
+ margin-bottom: 16px;
51
+ }
52
+
53
+ .document ul,
54
+ .document p {
55
+ color: $document-text;
56
+ }
57
+
58
+ .document h2 {
59
+ @include font-sm;
60
+
61
+ font-weight: 600;
62
+ margin-top: 32px;
63
+ margin-bottom: 12px;
64
+ color: $document-heading;
65
+ text-transform: uppercase;
66
+ }
67
+
68
+ .document h2:first-child {
69
+ margin-top: 0;
70
+ }
71
+
72
+ .document a {
73
+ color: $document-link;
74
+
75
+ @include hover(color) {
76
+ color: $document-link--hover;
77
+ }
78
+ }
@@ -0,0 +1,93 @@
1
+ @use 'vars' as *;
2
+ @use '../mixins' as *;
3
+
4
+ html {
5
+ scrollbar-gutter: stable;
6
+ scroll-behavior: smooth;
7
+ scrollbar-width: thin;
8
+ scrollbar-color: $scrollbar-thumb transparent;
9
+ }
10
+
11
+ ::-webkit-scrollbar {
12
+ width: 8px;
13
+ height: 8px;
14
+ }
15
+
16
+ ::-webkit-scrollbar-track {
17
+ background: transparent;
18
+ }
19
+
20
+ ::-webkit-scrollbar-thumb {
21
+ background-color: $scrollbar-thumb;
22
+ border-radius: 4px;
23
+
24
+ &:hover {
25
+ background-color: $scrollbar-thumb--hover;
26
+ }
27
+ }
28
+
29
+ body {
30
+ font-family: $default-font-family, system-ui, sans-serif;
31
+ background-color: $body-bg;
32
+ color: $body-text;
33
+ -webkit-font-smoothing: antialiased;
34
+ -moz-osx-font-smoothing: grayscale;
35
+ }
36
+
37
+ a {
38
+ color: $link-text;
39
+ text-decoration: none;
40
+ }
41
+
42
+ button {
43
+ @include from-br(sm) {
44
+ cursor: pointer;
45
+ }
46
+ }
47
+
48
+ summary {
49
+ all: unset;
50
+ display: block;
51
+ cursor: pointer;
52
+ }
53
+
54
+ summary::-webkit-details-marker {
55
+ display: none;
56
+ }
57
+
58
+ #anchor {
59
+ scroll-margin-top: var(--header-height);
60
+
61
+ @include from-br(sm) {
62
+ $subheader-height: 59px;
63
+
64
+ scroll-margin-top: calc(var(--header-height) + #{$subheader-height});
65
+ }
66
+ }
67
+
68
+ /* спрятать элемент для сохранения доступности */
69
+ ._visually-hidden {
70
+ position: absolute;
71
+ overflow: hidden;
72
+ width: 1px;
73
+ height: 1px;
74
+ margin: -1px;
75
+ padding: 0;
76
+ border: 0;
77
+ white-space: nowrap;
78
+ clip-path: inset(100%);
79
+ }
80
+
81
+ ._hidden {
82
+ display: none !important;
83
+ }
84
+
85
+ @for $i from 1 through 12 {
86
+ ._mb-#{$i * 2} {
87
+ margin-bottom: #{$i * 2}px;
88
+ }
89
+
90
+ ._mt-#{$i * 2} {
91
+ margin-top: #{$i * 2}px;
92
+ }
93
+ }
@@ -0,0 +1,41 @@
1
+ @use 'vars' as *;
2
+
3
+ /**
4
+ * хак подсветки автозаполненных инпутов
5
+ */
6
+ input:-webkit-autofill,
7
+ input:-webkit-autofill:hover,
8
+ input:-webkit-autofill:focus,
9
+ textarea:-webkit-autofill,
10
+ textarea:-webkit-autofill:hover,
11
+ textarea:-webkit-autofill:focus,
12
+ select:-webkit-autofill,
13
+ select:-webkit-autofill:hover,
14
+ select:-webkit-autofill:focus {
15
+ box-shadow: 0 0 0 1000px transparent inset !important;
16
+ -webkit-text-fill-color: $input-autofill-text !important;
17
+ color: $input-autofill-text !important;
18
+ border: none !important;
19
+ transition: background-color 5000s ease-in-out 0s !important;
20
+ font-size: inherit !important;
21
+ }
22
+
23
+ /**
24
+ * Убирает иконку автозаполнения паролей на сафари
25
+ */
26
+ input::-webkit-credentials-auto-fill-button {
27
+ visibility: hidden;
28
+ pointer-events: none;
29
+ position: absolute;
30
+ right: 0;
31
+ }
32
+
33
+ /**
34
+ * Убирает дефолтные браузерные приблуды с поискового инпута
35
+ */
36
+ input[type="search"]::-webkit-search-decoration,
37
+ input[type="search"]::-webkit-search-cancel-button,
38
+ input[type="search"]::-webkit-search-results-button,
39
+ input[type="search"]::-webkit-search-results-decoration {
40
+ appearance:none;
41
+ }
@@ -0,0 +1,7 @@
1
+ @forward 'global';
2
+ @forward 'normalize';
3
+ @forward 'animations';
4
+ @forward 'hacks';
5
+ @forward 'utils';
6
+ @forward 'loading';
7
+ @forward 'document';
@@ -0,0 +1,25 @@
1
+ @use 'vars' as *;
2
+
3
+ ._loading {
4
+ position: relative;
5
+
6
+ &::before {
7
+ position: absolute;
8
+ inset: 0;
9
+ z-index: $z-index-loader;
10
+ backdrop-filter: blur(4px);
11
+ content: '';
12
+ }
13
+
14
+ &::after {
15
+ position: absolute;
16
+ z-index: $z-index-loader;
17
+ left: 50%;
18
+ top: min(50%, 100px);
19
+ transform: translate(-50%, -50%);
20
+ display: block;
21
+ width: var(--size, 64px);
22
+ height: var(--size, 64px);
23
+ content: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"><radialGradient id="a12" cx=".66" fx=".66" cy=".3125" fy=".3125" gradientTransform="scale(1.5)"><stop offset="0" stop-color="%23FFFFFF"></stop><stop offset=".3" stop-color="%23FFFFFF" stop-opacity=".9"></stop><stop offset=".6" stop-color="%23FFFFFF" stop-opacity=".6"></stop><stop offset=".8" stop-color="%23FFFFFF" stop-opacity=".3"></stop><stop offset="1" stop-color="%23FFFFFF" stop-opacity="0"></stop></radialGradient><circle transform-origin="center" fill="none" stroke="url(%23a12)" stroke-width="15" stroke-linecap="round" stroke-dasharray="200 1000" stroke-dashoffset="0" cx="100" cy="100" r="70"><animateTransform type="rotate" attributeName="transform" calcMode="spline" dur="2" values="360;0" keyTimes="0;1" keySplines="0 0 1 1" repeatCount="indefinite"></animateTransform></circle><circle transform-origin="center" fill="none" opacity=".2" stroke="%23FFFFFF" stroke-width="15" stroke-linecap="round" cx="100" cy="100" r="70"></circle></svg>');
24
+ }
25
+ }
@@ -0,0 +1,93 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ ul[class],
8
+ ol[class] {
9
+ padding: 0;
10
+ }
11
+
12
+ body,
13
+ h1,
14
+ h2,
15
+ h3,
16
+ h4,
17
+ p,
18
+ ul[class],
19
+ ol[class],
20
+ li,
21
+ figure,
22
+ figcaption,
23
+ blockquote,
24
+ dl,
25
+ dd {
26
+ margin: 0;
27
+ }
28
+
29
+ body {
30
+ min-height: 100vh;
31
+ scroll-behavior: smooth;
32
+ text-rendering: optimizespeed;
33
+ line-height: 1.5;
34
+ }
35
+
36
+ ul[class],
37
+ ol[class] {
38
+ list-style: none;
39
+ }
40
+
41
+ a:not([class]) {
42
+ text-decoration-skip-ink: auto;
43
+ }
44
+
45
+ img {
46
+ max-width: 100%;
47
+ display: block;
48
+ }
49
+
50
+ article > * + * {
51
+ margin-top: 1em;
52
+ }
53
+
54
+ button {
55
+ background-color: transparent;
56
+ color: inherit;
57
+ }
58
+
59
+ input,
60
+ button,
61
+ textarea,
62
+ select {
63
+ font: inherit;
64
+ }
65
+
66
+ button,
67
+ a,
68
+ input,
69
+ dialog,
70
+ label,
71
+ textarea {
72
+ padding: 0;
73
+ border: 0;
74
+ outline: none;
75
+ appearance: none;
76
+ }
77
+
78
+ dialog {
79
+ max-width: 100%;
80
+ max-height: 100%;
81
+ appearance: none;
82
+ background-color: transparent;
83
+ color: inherit;
84
+ }
85
+
86
+ @media (prefers-reduced-motion: reduce) {
87
+ * {
88
+ animation-duration: 0.01ms !important;
89
+ animation-iteration-count: 1 !important;
90
+ transition-duration: 0.01ms !important;
91
+ scroll-behavior: auto !important;
92
+ }
93
+ }
@@ -0,0 +1,37 @@
1
+ @use '../mixins/breakpoints' as *;
2
+
3
+ @include from-br(xs) { ._to-xs { display: none !important; } }
4
+
5
+ @include from-br(sm) { ._to-sm { display: none !important; } }
6
+
7
+ @include from-br(md) { ._to-md { display: none !important; } }
8
+
9
+ @include from-br(lg) { ._to-lg { display: none !important; } }
10
+
11
+ @include to-br(xs) { ._from-xs { display: none !important; } }
12
+
13
+ @include to-br(sm) { ._from-sm { display: none !important; } }
14
+
15
+ @include to-br(md) { ._from-md { display: none !important; } }
16
+
17
+ @include to-br(lg) { ._from-lg { display: none !important; } }
18
+
19
+ ._truncate {
20
+ display: -webkit-box !important;
21
+ -webkit-line-clamp: var(--line-clamp, 1);
22
+ -webkit-box-orient: vertical;
23
+ word-break: var(--word-break, normal);
24
+ overflow: hidden;
25
+ text-align: var(--align, left);
26
+
27
+ --is-single-line: 1 - clamp(0, calc(var(--line-clamp) - 1), var(--line-clamp));
28
+ --delay: calc(-1s * (var(--is-single-line, 1) - 1));
29
+
30
+ animation: states 1s var(--delay) paused;
31
+
32
+ @keyframes states {
33
+ 0% {
34
+ word-break: break-all;
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,2 @@
1
+ @forward 'layout';
2
+ @forward 'page';
@@ -0,0 +1,38 @@
1
+ @use 'vars' as *;
2
+ @use '../mixins' as *;
3
+
4
+ .layout {
5
+ position: relative;
6
+ display: flex;
7
+ flex-direction: column;
8
+ min-height: 100vh;
9
+ min-height: 100dvh;
10
+ }
11
+
12
+ .header {
13
+ position: sticky;
14
+ top: 0;
15
+ z-index: $z-index-header;
16
+ padding-inline: 16px;
17
+ padding-block: 12px;
18
+ border-bottom: 1px solid $layout-header-border;
19
+
20
+ @include from-br(sm) {
21
+ padding-inline: 32px;
22
+ padding-block: 12px;
23
+ }
24
+ }
25
+
26
+ .main {
27
+ display: grid;
28
+ flex-grow: 1;
29
+ }
30
+
31
+ .navigation {
32
+ position: sticky;
33
+ top: var(--header-height);
34
+ z-index: calc(#{$z-index-header} - 1);
35
+ border-bottom: 1px solid $layout-nav-border;
36
+ padding-block: 10px;
37
+ padding-inline: 24px;
38
+ }
@@ -0,0 +1,49 @@
1
+ @use 'vars' as *;
2
+ @use '../mixins' as *;
3
+
4
+ ._page {
5
+ @include page;
6
+ }
7
+
8
+ ._breadcrumbs {
9
+ margin-bottom: 24px;
10
+ padding-top: 24px;
11
+ }
12
+
13
+ ._breadcrumbs-info {
14
+ margin-bottom: 16px;
15
+ padding-top: 24px;
16
+ }
17
+
18
+ ._page > ._breadcrumbs,
19
+ ._page > ._breadcrumbs-info {
20
+ padding-top: 0;
21
+ }
22
+
23
+ ._footer-links {
24
+ @include page-footer-links;
25
+ }
26
+
27
+ ._title {
28
+ @include page-title;
29
+
30
+ margin-bottom: 24px;
31
+ }
32
+
33
+ ._nav-filter {
34
+ margin-bottom: 32px;
35
+ }
36
+
37
+ ._container {
38
+ width: 100%;
39
+ margin: 0 auto;
40
+ padding-inline: var(--container-padding-inline);
41
+
42
+ @include from-br(md) {
43
+ max-width: var(--max-width-container);
44
+ }
45
+ }
46
+
47
+ ._pagination {
48
+ margin-top: 32px;
49
+ }
@@ -0,0 +1,3 @@
1
+ @use 'vars/tokens';
2
+ @use 'base';
3
+ @use 'layout';
@@ -0,0 +1,10 @@
1
+ /* увеличить область клика */
2
+ @mixin area-point {
3
+ content: '';
4
+ position: absolute;
5
+ top: 50%;
6
+ left: 50%;
7
+ width: 28px;
8
+ height: 28px;
9
+ transform: translate(-50%, -50%);
10
+ }
@@ -0,0 +1,99 @@
1
+ @use 'sass:map';
2
+ @use 'sass:list';
3
+ @use 'sass:meta';
4
+
5
+ // Брейкпоинты соответствуют брейкпоинтам vuetify https://v2.vuetifyjs.com/en/features/breakpoints/
6
+
7
+ $brkpnts: (
8
+ xs: 475px,
9
+ xm: 650px,
10
+ sm: 960px,
11
+ md: 1350px,
12
+ ml: 1500px,
13
+ lg: 1792px,
14
+ xl: 2560px,
15
+ );
16
+
17
+ /**
18
+ Mobile first брейкпоинты
19
+ @include from-br(sm) { ... }
20
+ @include from-br(400px) { ... }
21
+ */
22
+ @mixin from-br($bp) {
23
+ @if map.has-key($brkpnts, $bp) {
24
+ $breakpoint-value: map.get($brkpnts, $bp);
25
+
26
+ @media (min-width: $breakpoint-value) {
27
+ @content;
28
+ }
29
+ } @else if meta.type-of($bp) == 'number' {
30
+ $pixelyzed: $bp * 1px;
31
+
32
+ @media (min-width: $pixelyzed) {
33
+ @content;
34
+ }
35
+ } @else {
36
+ @warn 'Invalid breakpoint: #{$bp}.';
37
+ }
38
+ }
39
+
40
+ /**
41
+ @include to-br(md) { ... }
42
+ @include to-br(400px) { ... }
43
+ */
44
+ @mixin to-br($bp) {
45
+ @if map.has-key($brkpnts, $bp) {
46
+ $breakpoint-value: map.get($brkpnts, $bp) - 1px;
47
+
48
+ @media (max-width: $breakpoint-value) {
49
+ @content;
50
+ }
51
+ } @else if meta.type-of($bp) == 'number' {
52
+ $pixelyzed: $bp * 1px - 1px;
53
+
54
+ @media (max-width: $pixelyzed) {
55
+ @content;
56
+ }
57
+ } @else {
58
+ @warn 'Invalid breakpoint: #{$bp}.';
59
+ }
60
+ }
61
+
62
+ /**
63
+ Container query брейкпоинты
64
+ @include from-cq($width) { ... }
65
+ @include to-cq($width) { ... }
66
+ */
67
+ @mixin from-cq($bp) {
68
+ @container (min-width: #{$bp}) {
69
+ @content;
70
+ }
71
+ }
72
+
73
+ @mixin to-cq($bp) {
74
+ @container (max-width: #{$bp - 1px}) {
75
+ @content;
76
+ }
77
+ }
78
+
79
+ /**
80
+ Hover с transition
81
+ @include hover(background-color) { background-color: red; }
82
+ @include hover(background-color, color) { background-color: red; color: white; }
83
+ */
84
+ @mixin hover($properties...) {
85
+ @include from-br(sm) {
86
+ $transitions: ();
87
+
88
+ @each $prop in $properties {
89
+ $transitions: list.append($transitions, var(--transition) #{$prop}, comma);
90
+ }
91
+
92
+ transition: $transitions;
93
+
94
+ &:is(:hover, :focus-visible) {
95
+ @content;
96
+ }
97
+ }
98
+ }
99
+
@@ -0,0 +1,51 @@
1
+ @mixin font-3xs {
2
+ font-size: 11px;
3
+ line-height: 1;
4
+ }
5
+
6
+ @mixin font-xs {
7
+ font-size: 12px;
8
+ line-height: 1.333;
9
+ }
10
+
11
+ @mixin font-2xs {
12
+ font-size: 13px;
13
+ line-height: 1.5;
14
+ }
15
+
16
+ @mixin font-sm {
17
+ font-size: 14px;
18
+ line-height: 1.429;
19
+ }
20
+
21
+ @mixin font-md {
22
+ font-size: 15px;
23
+ line-height: 1.5;
24
+ }
25
+
26
+ @mixin font-base {
27
+ font-size: 16px;
28
+ line-height: 1.5;
29
+ }
30
+
31
+ @mixin font-lg {
32
+ font-size: 18px;
33
+ line-height: 1.556;
34
+ }
35
+
36
+ @mixin font-xl {
37
+ font-size: 20px;
38
+ line-height: 1.4;
39
+ }
40
+
41
+ @mixin font-2xl {
42
+ font-size: 24px;
43
+ line-height: 1.333;
44
+ }
45
+
46
+ @mixin font-4xl {
47
+ font-size: 36px;
48
+ line-height: 1.111;
49
+ }
50
+
51
+
@@ -0,0 +1,5 @@
1
+ @forward 'font-sizes';
2
+ @forward 'accessibility';
3
+ @forward 'breakpoints';
4
+ @forward 'page';
5
+ @forward 'video-card';
@@ -0,0 +1,28 @@
1
+ @use 'breakpoints' as *;
2
+ @use 'font-sizes' as *;
3
+ @use '../vars' as *;
4
+
5
+ @mixin page {
6
+ display: flex;
7
+ flex-direction: column;
8
+ padding-top: 24px;
9
+ padding-bottom: 24px;
10
+ }
11
+
12
+ @mixin page-title {
13
+ @include font-lg;
14
+
15
+ text-transform: uppercase;
16
+ letter-spacing: var(--tracking-wide);
17
+ font-weight: 700;
18
+ }
19
+
20
+ @mixin page-footer-links {
21
+ margin-top: auto;
22
+ padding-top: 8px;
23
+ border-top: 1px solid $page-footer-links-border;
24
+
25
+ @include from-br(sm) {
26
+ padding-top: 16px;
27
+ }
28
+ }
@@ -0,0 +1,18 @@
1
+ @use 'breakpoints' as *;
2
+ @use 'font-sizes' as *;
3
+ @use '../vars' as *;
4
+
5
+ @mixin video-card {
6
+ display: grid;
7
+ row-gap: 12px;
8
+ width: 100%;
9
+ align-content: start;
10
+ }
11
+
12
+ @mixin video-card-poster {
13
+ position: relative;
14
+ aspect-ratio: 16/9;
15
+ overflow: hidden;
16
+ border-radius: $radius-lg;
17
+ height: 100%;
18
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.817",
4
+ "version": "0.0.818",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
@@ -57,6 +57,10 @@
57
57
  "server/",
58
58
  "pages/",
59
59
  "assets/icons/",
60
+ "assets/scss/mixins/",
61
+ "assets/scss/base/",
62
+ "assets/scss/layout/",
63
+ "assets/scss/main.scss",
60
64
  "nuxt.config.ts"
61
65
  ],
62
66
  "devDependencies": {