@mr.slonn/my-scss-theme 1.0.0

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.
Files changed (103) hide show
  1. package/README.md +182 -0
  2. package/index.scss +1 -0
  3. package/package.json +10 -0
  4. package/scss/.sassdocrc +85 -0
  5. package/scss/_font-vars.scss +25 -0
  6. package/scss/_fonts.scss +139 -0
  7. package/scss/abstracts/_animations.scss +819 -0
  8. package/scss/abstracts/_breakpoints.scss +865 -0
  9. package/scss/abstracts/_colors.scss +256 -0
  10. package/scss/abstracts/_functions.scss +3 -0
  11. package/scss/abstracts/_grid.scss +816 -0
  12. package/scss/abstracts/_index.scss +134 -0
  13. package/scss/abstracts/_mixins.scss +1142 -0
  14. package/scss/abstracts/_patterns.scss +657 -0
  15. package/scss/abstracts/_radius.scss +279 -0
  16. package/scss/abstracts/_search-form.scss +271 -0
  17. package/scss/abstracts/_spacing.scss +158 -0
  18. package/scss/abstracts/_typography.scss +477 -0
  19. package/scss/abstracts/_utilities.scss +0 -0
  20. package/scss/abstracts/_variables.scss +3 -0
  21. package/scss/abstracts/breadcrumb/_base.scss +194 -0
  22. package/scss/abstracts/breadcrumb/_index.scss +12 -0
  23. package/scss/abstracts/breadcrumb/_variables.scss +54 -0
  24. package/scss/abstracts/buttons/_base.scss +92 -0
  25. package/scss/abstracts/buttons/_index.scss +31 -0
  26. package/scss/abstracts/buttons/_modifiers.scss +114 -0
  27. package/scss/abstracts/buttons/_variables.scss +98 -0
  28. package/scss/abstracts/buttons/_variants.scss +295 -0
  29. package/scss/abstracts/callout/_base.scss +142 -0
  30. package/scss/abstracts/callout/_index.scss +23 -0
  31. package/scss/abstracts/callout/_variables.scss +27 -0
  32. package/scss/abstracts/cards/_base.scss +74 -0
  33. package/scss/abstracts/cards/_blur.scss +65 -0
  34. package/scss/abstracts/cards/_featured.scss +363 -0
  35. package/scss/abstracts/cards/_hover.scss +99 -0
  36. package/scss/abstracts/cards/_index.scss +51 -0
  37. package/scss/abstracts/cards/_parts.scss +135 -0
  38. package/scss/abstracts/cards/_sizes.scss +52 -0
  39. package/scss/abstracts/cards/_variables.scss +72 -0
  40. package/scss/abstracts/cards/_variants.scss +143 -0
  41. package/scss/abstracts/cards/_vertical.scss +218 -0
  42. package/scss/abstracts/chip/_base.scss +99 -0
  43. package/scss/abstracts/chip/_icon.scss +73 -0
  44. package/scss/abstracts/chip/_index.scss +21 -0
  45. package/scss/abstracts/chip/_variables.scss +57 -0
  46. package/scss/abstracts/chip/_variants.scss +98 -0
  47. package/scss/abstracts/file-card/_base.scss +326 -0
  48. package/scss/abstracts/file-card/_index.scss +12 -0
  49. package/scss/abstracts/file-card/_variables.scss +79 -0
  50. package/scss/abstracts/hero/_base.scss +182 -0
  51. package/scss/abstracts/hero/_index.scss +23 -0
  52. package/scss/abstracts/hero/_variables.scss +59 -0
  53. package/scss/abstracts/info-card/_base.scss +152 -0
  54. package/scss/abstracts/info-card/_index.scss +12 -0
  55. package/scss/abstracts/info-card/_variables.scss +44 -0
  56. package/scss/abstracts/news-card/_base.scss +143 -0
  57. package/scss/abstracts/news-card/_compact.scss +24 -0
  58. package/scss/abstracts/news-card/_featured.scss +83 -0
  59. package/scss/abstracts/news-card/_index.scss +31 -0
  60. package/scss/abstracts/news-card/_variables.scss +44 -0
  61. package/scss/abstracts/project-card/_base.scss +109 -0
  62. package/scss/abstracts/project-card/_index.scss +23 -0
  63. package/scss/abstracts/project-card/_variables.scss +20 -0
  64. package/scss/abstracts/search-form/_base.scss +132 -0
  65. package/scss/abstracts/search-form/_composite.scss +54 -0
  66. package/scss/abstracts/search-form/_index.scss +31 -0
  67. package/scss/abstracts/search-form/_theme.scss +89 -0
  68. package/scss/abstracts/search-form/_variables.scss +39 -0
  69. package/scss/abstracts/section-title/_base.scss +127 -0
  70. package/scss/abstracts/section-title/_index.scss +23 -0
  71. package/scss/abstracts/section-title/_variables.scss +27 -0
  72. package/scss/abstracts/service-card/_base.scss +77 -0
  73. package/scss/abstracts/service-card/_index.scss +23 -0
  74. package/scss/abstracts/service-card/_variables.scss +23 -0
  75. package/scss/abstracts/sidebar-menu/_base.scss +148 -0
  76. package/scss/abstracts/sidebar-menu/_index.scss +12 -0
  77. package/scss/abstracts/sidebar-menu/_variables.scss +55 -0
  78. package/scss/abstracts/stats-card/_base.scss +99 -0
  79. package/scss/abstracts/stats-card/_index.scss +23 -0
  80. package/scss/abstracts/stats-card/_variables.scss +32 -0
  81. package/scss/api.scss +12 -0
  82. package/scss/components/_breadcrumb.scss +140 -0
  83. package/scss/components/_buttons.scss +226 -0
  84. package/scss/components/_callout.scss +118 -0
  85. package/scss/components/_chip.scss +56 -0
  86. package/scss/components/_file-card.scss +182 -0
  87. package/scss/components/_hero.scss +103 -0
  88. package/scss/components/_index.scss +110 -0
  89. package/scss/components/_info-card.scss +103 -0
  90. package/scss/components/_news-card-compact.scss +33 -0
  91. package/scss/components/_news-card-featured.scss +49 -0
  92. package/scss/components/_news-card.scss +303 -0
  93. package/scss/components/_project-card.scss +93 -0
  94. package/scss/components/_search-form.scss +181 -0
  95. package/scss/components/_section-title.scss +94 -0
  96. package/scss/components/_service-card.scss +83 -0
  97. package/scss/components/_sidebar-menu.scss +82 -0
  98. package/scss/components/_stats-card.scss +92 -0
  99. package/scss/components/_tag.scss +144 -0
  100. package/scss/components/_top-nav.scss +537 -0
  101. package/scss/main.scss +73 -0
  102. package/scss/utilities/_index.scss +40 -0
  103. package/scss/utilities/_visibility.scss +224 -0
@@ -0,0 +1,295 @@
1
+ // ============================================
2
+ // BUTTONS — VARIANTS
3
+ // local/common/theme-moexp/src/scss/abstracts/buttons/_variants.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Варианты кнопок
8
+ /// Primary, Secondary, Outline, Ghost, Destructive, Link, Icon
9
+ /// @group buttons-variants
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "sass:map";
14
+ @use "../colors";
15
+ @use "../mixins";
16
+ @use "../animations";
17
+ @use "variables" as *;
18
+ @use "base" as *;
19
+
20
+ // ─────────────────────────────────────────
21
+ // PRIMARY
22
+ // ─────────────────────────────────────────
23
+
24
+ /// Primary Button — основная CTA кнопка
25
+ /// Акцентный фон, светлый текст
26
+ /// @param {String} $size [md] - Размер: sm, md, lg
27
+ /// @require {mixin} btn-base
28
+ /// @require {mixin} mixins.bg-color
29
+ /// @require {mixin} mixins.text-color
30
+ /// @example scss - Hero CTA
31
+ /// .hero__cta {
32
+ /// @include btn-primary('lg');
33
+ /// }
34
+ /// @example scss - Маленькая primary
35
+ /// .card__action {
36
+ /// @include btn-primary('sm');
37
+ /// }
38
+ /// @output Кнопка с accent фоном
39
+ /// @group buttons-variants
40
+ /// @access public
41
+ @mixin btn-primary($size: md) {
42
+ @include btn-base($size);
43
+ @include mixins.bg-color(accent);
44
+ @include mixins.text-color(accent-foreground);
45
+ border: 1px solid transparent;
46
+
47
+ &:hover:not(:disabled) {
48
+ @include mixins.bg-color(accent, 0.9);
49
+ }
50
+ }
51
+
52
+ // ─────────────────────────────────────────
53
+ // SECONDARY
54
+ // ─────────────────────────────────────────
55
+
56
+ /// Secondary Button — вторичная кнопка
57
+ /// @param {String} $size [md] - Размер: sm, md, lg
58
+ /// @require {mixin} btn-base
59
+ /// @require {mixin} mixins.bg-color
60
+ /// @require {mixin} mixins.text-color
61
+ /// @example scss
62
+ /// .form__cancel {
63
+ /// @include btn-secondary;
64
+ /// }
65
+ /// @output Кнопка с secondary фоном
66
+ /// @group buttons-variants
67
+ /// @access public
68
+ @mixin btn-secondary($size: md) {
69
+ @include btn-base($size);
70
+ @include mixins.bg-color(secondary);
71
+ @include mixins.text-color(secondary-foreground);
72
+
73
+ &:hover:not(:disabled) {
74
+ @include mixins.bg-color(secondary, 0.85);
75
+ }
76
+ }
77
+
78
+ // ─────────────────────────────────────────
79
+ // OUTLINE
80
+ // ─────────────────────────────────────────
81
+
82
+ /// Outline Button — кнопка с обводкой
83
+ /// Полупрозрачный фон, цветная обводка
84
+ /// @param {String} $color [primary-foreground] - Цвет текста и обводки
85
+ /// @param {String} $size [md] - Размер: sm, md, lg
86
+ /// @require {mixin} btn-base
87
+ /// @require {mixin} mixins.bg-color
88
+ /// @require {mixin} mixins.text-color
89
+ /// @require {mixin} mixins.border-hsl
90
+ /// @require {mixin} mixins.border-color-hsl
91
+ /// @example scss - На тёмном фоне
92
+ /// .hero__secondary-cta {
93
+ /// @include btn-outline('primary-foreground');
94
+ /// }
95
+ /// @example scss - На светлом фоне
96
+ /// .card__learn-more {
97
+ /// @include btn-outline('primary', 'sm');
98
+ /// }
99
+ /// @output Кнопка с обводкой
100
+ /// @group buttons-variants
101
+ /// @access public
102
+ @mixin btn-outline($color: primary-foreground, $size: md) {
103
+ @include btn-base($size);
104
+ @include mixins.bg-color($color, 0.1);
105
+ @include mixins.text-color($color);
106
+ @include mixins.border-hsl(1px, solid, $color, 0.3);
107
+
108
+ &:hover:not(:disabled) {
109
+ @include mixins.bg-color($color, 0.2);
110
+ @include mixins.border-color-hsl($color, 0.5);
111
+ }
112
+ }
113
+
114
+ // ─────────────────────────────────────────
115
+ // GHOST
116
+ // ─────────────────────────────────────────
117
+
118
+ /// Ghost Button — прозрачная кнопка
119
+ /// Без фона, только текст, hover показывает фон
120
+ /// @param {String} $color [foreground] - Цвет текста
121
+ /// @param {String} $size [md] - Размер: sm, md, lg
122
+ /// @require {mixin} btn-base
123
+ /// @require {mixin} mixins.text-color
124
+ /// @require {mixin} mixins.bg-color
125
+ /// @example scss
126
+ /// .nav__link {
127
+ /// @include btn-ghost('foreground', 'sm');
128
+ /// }
129
+ /// @example scss - В меню
130
+ /// .menu__item {
131
+ /// @include btn-ghost;
132
+ /// }
133
+ /// @output Прозрачная кнопка
134
+ /// @group buttons-variants
135
+ /// @access public
136
+ @mixin btn-ghost($color: foreground, $size: md) {
137
+ @include btn-base($size);
138
+ background: transparent;
139
+ @include mixins.text-color($color);
140
+
141
+ &:hover:not(:disabled) {
142
+ @include mixins.bg-color($color, 0.1);
143
+ }
144
+ }
145
+
146
+ // ─────────────────────────────────────────
147
+ // DESTRUCTIVE
148
+ // ─────────────────────────────────────────
149
+
150
+ /// Destructive Button — кнопка опасного действия
151
+ /// Красный фон для удаления, отмены и т.п.
152
+ /// @param {String} $size [md] - Размер: sm, md, lg
153
+ /// @require {mixin} btn-base
154
+ /// @require {mixin} mixins.bg-color
155
+ /// @require {mixin} mixins.text-color
156
+ /// @example scss
157
+ /// .modal__delete {
158
+ /// @include btn-destructive;
159
+ /// }
160
+ /// @example scss - Маленькая
161
+ /// .item__remove {
162
+ /// @include btn-destructive('sm');
163
+ /// }
164
+ /// @output Красная кнопка
165
+ /// @group buttons-variants
166
+ /// @access public
167
+ @mixin btn-destructive($size: md) {
168
+ @include btn-base($size);
169
+ @include mixins.bg-color(destructive);
170
+ @include mixins.text-color(destructive-foreground);
171
+
172
+ &:hover:not(:disabled) {
173
+ @include mixins.bg-color(destructive, 0.9);
174
+ }
175
+ }
176
+
177
+ // ─────────────────────────────────────────
178
+ // LINK
179
+ // ─────────────────────────────────────────
180
+
181
+ /// Link Button — кнопка-ссылка
182
+ /// Выглядит как текстовая ссылка с подчёркиванием
183
+ /// @param {String} $color [accent] - Цвет ссылки
184
+ /// @require {mixin} mixins.text-color
185
+ /// @require {mixin} mixins.hsl-prop
186
+ /// @require {mixin} animations.transition
187
+ /// @require {variable} $btn-font-weight
188
+ /// @require {variable} $btn-transition-duration
189
+ /// @example scss
190
+ /// .card__read-more {
191
+ /// @include btn-link;
192
+ /// }
193
+ /// @example scss - Кастомный цвет
194
+ /// .footer__link {
195
+ /// @include btn-link('foreground-muted');
196
+ /// }
197
+ /// @output Кнопка в стиле ссылки
198
+ /// @group buttons-variants
199
+ /// @access public
200
+ @mixin btn-link($color: accent) {
201
+ display: inline-flex;
202
+ align-items: center;
203
+ gap: 0.25rem;
204
+
205
+ padding: 0;
206
+ background: transparent;
207
+ border: none;
208
+ cursor: pointer;
209
+
210
+ font-weight: $btn-font-weight;
211
+ @include mixins.text-color($color);
212
+ text-decoration: underline;
213
+ text-underline-offset: 4px;
214
+ text-decoration-thickness: 1px;
215
+
216
+ @include animations.transition((color, text-decoration-thickness), $btn-transition-duration);
217
+
218
+ &:hover:not(:disabled) {
219
+ text-decoration-thickness: 2px;
220
+ }
221
+
222
+ &:focus-visible {
223
+ outline: 2px solid;
224
+ @include mixins.hsl-prop(outline-color, $color, 0.5);
225
+ outline-offset: 2px;
226
+ border-radius: 2px;
227
+ }
228
+ }
229
+
230
+ // ─────────────────────────────────────────
231
+ // ICON
232
+ // ─────────────────────────────────────────
233
+
234
+ /// Icon Button — круглая кнопка только с иконкой
235
+ /// @param {String} $size [md] - Размер: sm (32px), md (40px), lg (48px)
236
+ /// @param {String} $color [foreground-muted] - Цвет иконки
237
+ /// @param {String} $color-hover [accent] - Цвет иконки при hover
238
+ /// @require {mixin} mixins.text-color
239
+ /// @require {mixin} mixins.bg-color
240
+ /// @require {mixin} mixins.focus-ring
241
+ /// @require {mixin} animations.transition
242
+ /// @require {variable} $btn-transition-duration
243
+ /// @example scss - Кнопка закрытия
244
+ /// .modal__close {
245
+ /// @include btn-icon('md', 'foreground-muted', 'destructive');
246
+ /// }
247
+ /// @example scss - Социальные иконки
248
+ /// .social__link {
249
+ /// @include btn-icon('lg', 'foreground', 'accent');
250
+ /// }
251
+ /// @output Круглая кнопка-иконка
252
+ /// @group buttons-variants
253
+ /// @access public
254
+ @mixin btn-icon($size: md, $color: foreground-muted, $color-hover: accent) {
255
+ $sizes: (
256
+ sm: 32px,
257
+ md: 40px,
258
+ lg: 48px,
259
+ );
260
+ $icon-size: map.get($sizes, $size);
261
+
262
+ display: inline-flex;
263
+ align-items: center;
264
+ justify-content: center;
265
+
266
+ width: $icon-size;
267
+ height: $icon-size;
268
+ padding: 0;
269
+
270
+ background: transparent;
271
+ border: none;
272
+ border-radius: 50%;
273
+ cursor: pointer;
274
+
275
+ @include mixins.text-color($color);
276
+ @include animations.transition((color, background-color, transform), $btn-transition-duration);
277
+
278
+ &:hover:not(:disabled) {
279
+ @include mixins.text-color($color-hover);
280
+ @include mixins.bg-color($color-hover, 0.1);
281
+ }
282
+
283
+ &:active:not(:disabled) {
284
+ transform: scale(0.95);
285
+ }
286
+
287
+ &:focus-visible {
288
+ @include mixins.focus-ring($color-hover);
289
+ }
290
+
291
+ &:disabled {
292
+ opacity: 0.5;
293
+ cursor: not-allowed;
294
+ }
295
+ }
@@ -0,0 +1,142 @@
1
+ // ============================================
2
+ // CALLOUT — BASE
3
+ // local/common/theme-moexp/src/scss/abstracts/callout/_base.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Базовые миксины callout блока
8
+ /// @group callout-base
9
+ /// @author MOEXP Team
10
+ ////
11
+
12
+ @use "../typography";
13
+ @use "../spacing";
14
+ @use "../mixins";
15
+ @use "../patterns";
16
+ @use "../breakpoints";
17
+ @use "../../font-vars" as fonts;
18
+ @use "variables" as *;
19
+
20
+ // ─────────────────────────────────────────
21
+ // БАЗОВЫЕ МИКСИНЫ
22
+ // ─────────────────────────────────────────
23
+
24
+ /// Базовые стили контейнера
25
+ /// @param {String} $bg-color [primary] - Цвет фона
26
+ /// @output Стили секции
27
+ /// @group callout-base
28
+ @mixin base($bg-color: primary) {
29
+ position: relative;
30
+ overflow: hidden;
31
+ padding-top: $padding-y;
32
+ padding-bottom: $padding-y;
33
+
34
+ @include mixins.bg-color($bg-color);
35
+ @include patterns.pattern-container;
36
+ }
37
+
38
+ /// Паттерн
39
+ /// @output Псевдоэлемент с паттерном
40
+ /// @group callout-base
41
+ @mixin pattern {
42
+ @include patterns.pattern-stripes;
43
+ }
44
+
45
+ /// Контейнер контента
46
+ /// @output Flex центрирование
47
+ /// @group callout-base
48
+ @mixin container {
49
+ position: relative;
50
+ z-index: 1;
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: center;
54
+ }
55
+
56
+ /// Контент (иконка + текст)
57
+ /// @output Flex layout
58
+ /// @group callout-base
59
+ @mixin content {
60
+ display: flex;
61
+ align-items: center;
62
+ justify-content: center;
63
+ gap: $gap;
64
+ padding-top: spacing.$spacing-xl;
65
+ padding-bottom: spacing.$spacing-xl;
66
+
67
+ @include breakpoints.md-down {
68
+ flex-direction: column;
69
+ text-align: center;
70
+ gap: spacing.$gap-lg;
71
+ }
72
+ }
73
+
74
+ /// Иконка
75
+ /// @param {String} $color [accent] - Цвет иконки
76
+ /// @output Стили иконки
77
+ /// @group callout-base
78
+ @mixin icon($color: accent) {
79
+ width: $icon-size;
80
+ height: $icon-size;
81
+ flex-shrink: 0;
82
+
83
+ @include mixins.text-color($color);
84
+ }
85
+
86
+ /// Текстовый блок
87
+ /// @param {String} $color [primary-foreground] - Цвет текста
88
+ /// @output Стили текста
89
+ /// @group callout-base
90
+ @mixin text($color: primary-foreground) {
91
+ line-height: typography.$line-height-normal;
92
+
93
+ @include mixins.text-color($color);
94
+ }
95
+
96
+ /// Заголовок
97
+ /// @param {String} $color [primary-foreground] - Цвет
98
+ /// @param {String} $font-family [fonts.$font-literata] - Шрифт
99
+ /// @output Стили заголовка
100
+ /// @group callout-base
101
+ @mixin title($color: primary-foreground, $font-family: fonts.$font-literata) {
102
+ font-family: $font-family;
103
+ font-size: typography.$font-size-2xl;
104
+ font-weight: typography.$font-weight-semibold;
105
+ line-height: typography.$line-height-snug;
106
+ margin-bottom: spacing.$spacing-xs;
107
+
108
+ @include mixins.text-color($color);
109
+
110
+ @include breakpoints.md-down {
111
+ font-size: typography.$font-size-xl;
112
+ }
113
+ }
114
+
115
+ /// Подзаголовок
116
+ /// @param {String} $color [primary-foreground] - Цвет
117
+ /// @param {Number} $alpha [0.8] - Прозрачность
118
+ /// @output Стили подзаголовка
119
+ /// @group callout-base
120
+ @mixin subtitle($color: primary-foreground, $alpha: 0.8) {
121
+ font-size: typography.$font-size-xl;
122
+ line-height: typography.$line-height-relaxed;
123
+
124
+ @include mixins.text-color($color, $alpha);
125
+
126
+ @include breakpoints.md-down {
127
+ font-size: typography.$font-size-lg;
128
+ }
129
+ }
130
+
131
+ /// Кнопка действия
132
+ /// @output Стили обёртки кнопки
133
+ /// @group callout-base
134
+ @mixin action {
135
+ flex-shrink: 0;
136
+ margin-left: spacing.$spacing-xl;
137
+
138
+ @include breakpoints.md-down {
139
+ margin-left: 0;
140
+ margin-top: spacing.$spacing-md;
141
+ }
142
+ }
@@ -0,0 +1,23 @@
1
+ // ============================================
2
+ // CALLOUT — INDEX
3
+ // local/common/theme-moexp/src/scss/abstracts/callout/_index.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Точка входа модуля callout
8
+ /// Экспортирует все переменные и миксины
9
+ /// @group callout
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ // ─────────────────────────────────────────
14
+ // EXPORTS
15
+ // ─────────────────────────────────────────
16
+
17
+ /// Переменные
18
+ /// @see callout/_variables.scss
19
+ @forward "variables";
20
+
21
+ /// Базовые миксины
22
+ /// @see callout/_base.scss
23
+ @forward "base";
@@ -0,0 +1,27 @@
1
+ // ============================================
2
+ // CALLOUT — VARIABLES
3
+ // local/common/theme-moexp/src/scss/abstracts/callout/_variables.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Переменные callout блока
8
+ /// @group callout-variables
9
+ /// @author MOEXP Team
10
+ ////
11
+
12
+ @use "../spacing";
13
+
14
+ /// Вертикальный padding
15
+ /// @type Number
16
+ /// @group callout-variables
17
+ $padding-y: spacing.$spacing-xl !default;
18
+
19
+ /// Размер иконки
20
+ /// @type Number
21
+ /// @group callout-variables
22
+ $icon-size: spacing.$spacing-2xl !default;
23
+
24
+ /// Gap между иконкой и текстом
25
+ /// @type Number
26
+ /// @group callout-variables
27
+ $gap: spacing.$gap-xl !default;
@@ -0,0 +1,74 @@
1
+ // ============================================
2
+ // CARDS — BASE
3
+ // local/common/theme-moexp/src/scss/abstracts/cards/_base.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Базовые миксины карточек
8
+ /// Фундамент для всех вариантов карточек
9
+ /// @group cards-base
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "../mixins";
14
+ @use "../radius";
15
+ @use "variables" as *;
16
+
17
+ // ─────────────────────────────────────────
18
+ // БАЗОВЫЙ МИКСИН
19
+ // ─────────────────────────────────────────
20
+
21
+ /// Базовые стили карточки
22
+ /// Включает: position, padding, background, border, radius, shadow
23
+ /// @param {String} $bg [background-card] - Цвет фона
24
+ /// @param {Number} $bg-alpha [0.95] - Прозрачность фона
25
+ /// @param {String} $border-color [border] - Цвет бордера
26
+ /// @param {Number} $border-alpha [0.5] - Прозрачность бордера
27
+ /// @require {mixin} mixins.bg-color
28
+ /// @require {mixin} mixins.border-hsl
29
+ /// @require {mixin} radius.rounded
30
+ /// @require {mixin} mixins.shadow-sm
31
+ /// @example scss - Базовая карточка
32
+ /// .card {
33
+ /// @include card-base;
34
+ /// }
35
+ /// @example scss - Кастомный фон
36
+ /// .card-dark {
37
+ /// @include card-base('primary', 0.9, 'primary', 0.3);
38
+ /// }
39
+ /// @output Базовые стили карточки
40
+ /// @group cards-base
41
+ /// @access public
42
+ @mixin card-base($bg: background-card, $bg-alpha: $card-bg-alpha, $border-color: border, $border-alpha: $card-border-alpha) {
43
+ position: relative;
44
+ overflow: hidden;
45
+
46
+ padding: $card-padding;
47
+
48
+ @include mixins.bg-color($bg, $bg-alpha);
49
+ @include mixins.border-hsl(1px, solid, $border-color, $border-alpha);
50
+ @include radius.rounded(lg);
51
+ @include mixins.shadow-sm;
52
+ }
53
+
54
+ // ─────────────────────────────────────────
55
+ // GLASS CARD
56
+ // ─────────────────────────────────────────
57
+
58
+ /// Карточка с glassmorphism эффектом (backdrop-blur)
59
+ /// @param {String} $bg [background-card] - Цвет фона
60
+ /// @param {Number} $bg-alpha [0.8] - Прозрачность фона (ниже для эффекта стекла)
61
+ /// @param {Number} $blur [8px] - Степень размытия
62
+ /// @require {mixin} card-base
63
+ /// @example scss
64
+ /// .glass-card {
65
+ /// @include card-glass('background-card', 0.7, 12px);
66
+ /// }
67
+ /// @output Карточка с backdrop-filter: blur
68
+ /// @group cards-base
69
+ /// @access public
70
+ @mixin card-glass($bg: background-card, $bg-alpha: 0.8, $blur: 8px) {
71
+ @include card-base($bg, $bg-alpha);
72
+ backdrop-filter: blur($blur);
73
+ -webkit-backdrop-filter: blur($blur);
74
+ }
@@ -0,0 +1,65 @@
1
+ // ============================================
2
+ // CARDS — BLUR
3
+ // local/common/theme-moexp/src/scss/abstracts/cards/_blur.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Backdrop blur эффекты
8
+ /// Glassmorphism утилиты
9
+ /// @group cards-blur
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ // ─────────────────────────────────────────
14
+ // BASE BLUR
15
+ // ─────────────────────────────────────────
16
+
17
+ /// Backdrop blur эффект
18
+ /// @param {Number} $blur [8px] - Степень размытия
19
+ /// @example scss
20
+ /// .overlay {
21
+ /// @include backdrop-blur(12px);
22
+ /// }
23
+ /// @output backdrop-filter: blur(); -webkit-backdrop-filter: blur();
24
+ /// @group cards-blur
25
+ /// @access public
26
+ @mixin backdrop-blur($blur: 8px) {
27
+ backdrop-filter: blur($blur);
28
+ -webkit-backdrop-filter: blur($blur);
29
+ }
30
+
31
+ // ─────────────────────────────────────────
32
+ // BLUR VARIANTS
33
+ // ─────────────────────────────────────────
34
+
35
+ /// Маленький blur (4px)
36
+ /// @require {mixin} backdrop-blur
37
+ /// @group cards-blur
38
+ /// @access public
39
+ @mixin backdrop-blur-sm {
40
+ @include backdrop-blur(4px);
41
+ }
42
+
43
+ /// Средний blur (12px)
44
+ /// @require {mixin} backdrop-blur
45
+ /// @group cards-blur
46
+ /// @access public
47
+ @mixin backdrop-blur-md {
48
+ @include backdrop-blur(12px);
49
+ }
50
+
51
+ /// Большой blur (16px)
52
+ /// @require {mixin} backdrop-blur
53
+ /// @group cards-blur
54
+ /// @access public
55
+ @mixin backdrop-blur-lg {
56
+ @include backdrop-blur(16px);
57
+ }
58
+
59
+ /// Очень большой blur (24px)
60
+ /// @require {mixin} backdrop-blur
61
+ /// @group cards-blur
62
+ /// @access public
63
+ @mixin backdrop-blur-xl {
64
+ @include backdrop-blur(24px);
65
+ }