@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.
- package/README.md +182 -0
- package/index.scss +1 -0
- package/package.json +10 -0
- package/scss/.sassdocrc +85 -0
- package/scss/_font-vars.scss +25 -0
- package/scss/_fonts.scss +139 -0
- package/scss/abstracts/_animations.scss +819 -0
- package/scss/abstracts/_breakpoints.scss +865 -0
- package/scss/abstracts/_colors.scss +256 -0
- package/scss/abstracts/_functions.scss +3 -0
- package/scss/abstracts/_grid.scss +816 -0
- package/scss/abstracts/_index.scss +134 -0
- package/scss/abstracts/_mixins.scss +1142 -0
- package/scss/abstracts/_patterns.scss +657 -0
- package/scss/abstracts/_radius.scss +279 -0
- package/scss/abstracts/_search-form.scss +271 -0
- package/scss/abstracts/_spacing.scss +158 -0
- package/scss/abstracts/_typography.scss +477 -0
- package/scss/abstracts/_utilities.scss +0 -0
- package/scss/abstracts/_variables.scss +3 -0
- package/scss/abstracts/breadcrumb/_base.scss +194 -0
- package/scss/abstracts/breadcrumb/_index.scss +12 -0
- package/scss/abstracts/breadcrumb/_variables.scss +54 -0
- package/scss/abstracts/buttons/_base.scss +92 -0
- package/scss/abstracts/buttons/_index.scss +31 -0
- package/scss/abstracts/buttons/_modifiers.scss +114 -0
- package/scss/abstracts/buttons/_variables.scss +98 -0
- package/scss/abstracts/buttons/_variants.scss +295 -0
- package/scss/abstracts/callout/_base.scss +142 -0
- package/scss/abstracts/callout/_index.scss +23 -0
- package/scss/abstracts/callout/_variables.scss +27 -0
- package/scss/abstracts/cards/_base.scss +74 -0
- package/scss/abstracts/cards/_blur.scss +65 -0
- package/scss/abstracts/cards/_featured.scss +363 -0
- package/scss/abstracts/cards/_hover.scss +99 -0
- package/scss/abstracts/cards/_index.scss +51 -0
- package/scss/abstracts/cards/_parts.scss +135 -0
- package/scss/abstracts/cards/_sizes.scss +52 -0
- package/scss/abstracts/cards/_variables.scss +72 -0
- package/scss/abstracts/cards/_variants.scss +143 -0
- package/scss/abstracts/cards/_vertical.scss +218 -0
- package/scss/abstracts/chip/_base.scss +99 -0
- package/scss/abstracts/chip/_icon.scss +73 -0
- package/scss/abstracts/chip/_index.scss +21 -0
- package/scss/abstracts/chip/_variables.scss +57 -0
- package/scss/abstracts/chip/_variants.scss +98 -0
- package/scss/abstracts/file-card/_base.scss +326 -0
- package/scss/abstracts/file-card/_index.scss +12 -0
- package/scss/abstracts/file-card/_variables.scss +79 -0
- package/scss/abstracts/hero/_base.scss +182 -0
- package/scss/abstracts/hero/_index.scss +23 -0
- package/scss/abstracts/hero/_variables.scss +59 -0
- package/scss/abstracts/info-card/_base.scss +152 -0
- package/scss/abstracts/info-card/_index.scss +12 -0
- package/scss/abstracts/info-card/_variables.scss +44 -0
- package/scss/abstracts/news-card/_base.scss +143 -0
- package/scss/abstracts/news-card/_compact.scss +24 -0
- package/scss/abstracts/news-card/_featured.scss +83 -0
- package/scss/abstracts/news-card/_index.scss +31 -0
- package/scss/abstracts/news-card/_variables.scss +44 -0
- package/scss/abstracts/project-card/_base.scss +109 -0
- package/scss/abstracts/project-card/_index.scss +23 -0
- package/scss/abstracts/project-card/_variables.scss +20 -0
- package/scss/abstracts/search-form/_base.scss +132 -0
- package/scss/abstracts/search-form/_composite.scss +54 -0
- package/scss/abstracts/search-form/_index.scss +31 -0
- package/scss/abstracts/search-form/_theme.scss +89 -0
- package/scss/abstracts/search-form/_variables.scss +39 -0
- package/scss/abstracts/section-title/_base.scss +127 -0
- package/scss/abstracts/section-title/_index.scss +23 -0
- package/scss/abstracts/section-title/_variables.scss +27 -0
- package/scss/abstracts/service-card/_base.scss +77 -0
- package/scss/abstracts/service-card/_index.scss +23 -0
- package/scss/abstracts/service-card/_variables.scss +23 -0
- package/scss/abstracts/sidebar-menu/_base.scss +148 -0
- package/scss/abstracts/sidebar-menu/_index.scss +12 -0
- package/scss/abstracts/sidebar-menu/_variables.scss +55 -0
- package/scss/abstracts/stats-card/_base.scss +99 -0
- package/scss/abstracts/stats-card/_index.scss +23 -0
- package/scss/abstracts/stats-card/_variables.scss +32 -0
- package/scss/api.scss +12 -0
- package/scss/components/_breadcrumb.scss +140 -0
- package/scss/components/_buttons.scss +226 -0
- package/scss/components/_callout.scss +118 -0
- package/scss/components/_chip.scss +56 -0
- package/scss/components/_file-card.scss +182 -0
- package/scss/components/_hero.scss +103 -0
- package/scss/components/_index.scss +110 -0
- package/scss/components/_info-card.scss +103 -0
- package/scss/components/_news-card-compact.scss +33 -0
- package/scss/components/_news-card-featured.scss +49 -0
- package/scss/components/_news-card.scss +303 -0
- package/scss/components/_project-card.scss +93 -0
- package/scss/components/_search-form.scss +181 -0
- package/scss/components/_section-title.scss +94 -0
- package/scss/components/_service-card.scss +83 -0
- package/scss/components/_sidebar-menu.scss +82 -0
- package/scss/components/_stats-card.scss +92 -0
- package/scss/components/_tag.scss +144 -0
- package/scss/components/_top-nav.scss +537 -0
- package/scss/main.scss +73 -0
- package/scss/utilities/_index.scss +40 -0
- 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
|
+
}
|