@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,657 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// DECORATIVE PATTERNS
|
|
3
|
+
// local\common\theme-moexp\src\scss\abstracts\_patterns.scss
|
|
4
|
+
// ============================================
|
|
5
|
+
|
|
6
|
+
////
|
|
7
|
+
/// Декоративные CSS-паттерны для фоновых эффектов
|
|
8
|
+
/// @group patterns
|
|
9
|
+
/// @author SUSPENDED
|
|
10
|
+
/// @since 1.0.0
|
|
11
|
+
////
|
|
12
|
+
|
|
13
|
+
@use "sass:math";
|
|
14
|
+
@use "colors";
|
|
15
|
+
|
|
16
|
+
// ─────────────────────────────────────────
|
|
17
|
+
// БАЗОВЫЙ OVERLAY
|
|
18
|
+
// ─────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
/// Базовый абсолютный overlay для всех паттернов
|
|
21
|
+
///
|
|
22
|
+
/// Создаёт абсолютно позиционированный слой, который растягивается
|
|
23
|
+
/// на весь родительский контейнер. Используется как основа для
|
|
24
|
+
/// всех декоративных паттернов.
|
|
25
|
+
///
|
|
26
|
+
/// @param {Number} $opacity [0.05] - Прозрачность слоя (0-1)
|
|
27
|
+
/// @param {Number} $z-index [0] - Порядок наложения слоя
|
|
28
|
+
///
|
|
29
|
+
/// @output Свойства позиционирования и прозрачности
|
|
30
|
+
///
|
|
31
|
+
/// @example scss - Базовое использование
|
|
32
|
+
/// .overlay {
|
|
33
|
+
/// @include pattern-overlay(0.1, 1);
|
|
34
|
+
/// }
|
|
35
|
+
///
|
|
36
|
+
/// @example css - Результат компиляции
|
|
37
|
+
/// .overlay {
|
|
38
|
+
/// position: absolute;
|
|
39
|
+
/// inset: 0;
|
|
40
|
+
/// opacity: 0.1;
|
|
41
|
+
/// z-index: 1;
|
|
42
|
+
/// pointer-events: none;
|
|
43
|
+
/// }
|
|
44
|
+
///
|
|
45
|
+
/// @access public
|
|
46
|
+
@mixin pattern-overlay($opacity: 0.05, $z-index: 0) {
|
|
47
|
+
position: absolute;
|
|
48
|
+
inset: 0;
|
|
49
|
+
opacity: $opacity;
|
|
50
|
+
z-index: $z-index;
|
|
51
|
+
pointer-events: none;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// ─────────────────────────────────────────
|
|
55
|
+
// DIAGONAL STRIPES (диагональные полосы)
|
|
56
|
+
// ─────────────────────────────────────────
|
|
57
|
+
|
|
58
|
+
/// Диагональные полосы с произвольным цветом
|
|
59
|
+
///
|
|
60
|
+
/// Создаёт паттерн из диагональных полос с помощью
|
|
61
|
+
/// `repeating-linear-gradient`. Полосы занимают 50% от размера цикла.
|
|
62
|
+
///
|
|
63
|
+
/// @param {Number} $size [70px] - Ширина полного цикла (полоса + пробел)
|
|
64
|
+
/// @param {Angle} $angle [45deg] - Угол наклона полос
|
|
65
|
+
/// @param {Color} $color [currentcolor] - Цвет полос
|
|
66
|
+
/// @param {Number} $opacity [0.05] - Прозрачность паттерна (0-1)
|
|
67
|
+
///
|
|
68
|
+
/// @output Абсолютно позиционированный элемент с полосатым фоном
|
|
69
|
+
///
|
|
70
|
+
/// @require {mixin} pattern-overlay
|
|
71
|
+
/// @require {function} math.div - Sass math модуль
|
|
72
|
+
///
|
|
73
|
+
/// @example scss - Стандартные полосы
|
|
74
|
+
/// .hero::before {
|
|
75
|
+
/// content: "";
|
|
76
|
+
/// @include pattern-stripes-diagonal();
|
|
77
|
+
/// }
|
|
78
|
+
///
|
|
79
|
+
/// @example scss - Красные широкие полосы под углом
|
|
80
|
+
/// .banner::before {
|
|
81
|
+
/// content: "";
|
|
82
|
+
/// @include pattern-stripes-diagonal(100px, 60deg, #ff0000, 0.1);
|
|
83
|
+
/// }
|
|
84
|
+
///
|
|
85
|
+
/// @see pattern-stripes-diagonal-hsl
|
|
86
|
+
/// @see pattern-stripes
|
|
87
|
+
/// @access public
|
|
88
|
+
@mixin pattern-stripes-diagonal($size: 70px, $angle: 45deg, $color: currentcolor, $opacity: 0.05) {
|
|
89
|
+
@include pattern-overlay($opacity);
|
|
90
|
+
|
|
91
|
+
$half: math.div($size, 2);
|
|
92
|
+
|
|
93
|
+
background-image: repeating-linear-gradient($angle, transparent, transparent $half, $color $half, $color $size);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/// Диагональные полосы с HSL цветом из темы
|
|
97
|
+
///
|
|
98
|
+
/// Версия `pattern-stripes-diagonal` с поддержкой CSS Custom Properties.
|
|
99
|
+
/// Использует функции из модуля `colors` для получения цветов из палитры.
|
|
100
|
+
/// Генерирует fallback для старых браузеров.
|
|
101
|
+
///
|
|
102
|
+
/// @param {String} $color-name [foreground] - Имя цвета из палитры темы
|
|
103
|
+
/// @param {Number} $size [70px] - Ширина полного цикла
|
|
104
|
+
/// @param {Angle} $angle [45deg] - Угол наклона полос
|
|
105
|
+
/// @param {Number} $opacity [0.05] - Прозрачность паттерна (0-1)
|
|
106
|
+
///
|
|
107
|
+
/// @output Элемент с полосатым фоном и CSS-переменными
|
|
108
|
+
///
|
|
109
|
+
/// @require {mixin} pattern-overlay
|
|
110
|
+
/// @require {function} colors.color-static - Статический цвет (fallback)
|
|
111
|
+
/// @require {function} colors.color-var - CSS-переменная цвета
|
|
112
|
+
/// @require {function} math.div
|
|
113
|
+
///
|
|
114
|
+
/// @example scss - Полосы основного цвета
|
|
115
|
+
/// .card::before {
|
|
116
|
+
/// content: "";
|
|
117
|
+
/// @include pattern-stripes-diagonal-hsl(primary);
|
|
118
|
+
/// }
|
|
119
|
+
///
|
|
120
|
+
/// @example scss - Полосы акцентного цвета
|
|
121
|
+
/// .feature::before {
|
|
122
|
+
/// content: "";
|
|
123
|
+
/// @include pattern-stripes-diagonal-hsl(accent, 50px, 30deg, 0.08);
|
|
124
|
+
/// }
|
|
125
|
+
///
|
|
126
|
+
/// @see pattern-stripes-diagonal
|
|
127
|
+
/// @see pattern-stripes-themed
|
|
128
|
+
/// @access public
|
|
129
|
+
@mixin pattern-stripes-diagonal-hsl($color-name: foreground, $size: 70px, $angle: 45deg, $opacity: 0.05) {
|
|
130
|
+
@include pattern-overlay($opacity);
|
|
131
|
+
|
|
132
|
+
$half: math.div($size, 2);
|
|
133
|
+
|
|
134
|
+
// Fallback для старых браузеров
|
|
135
|
+
background-image: repeating-linear-gradient($angle, transparent, transparent $half, colors.color-static($color-name) $half, colors.color-static($color-name) $size);
|
|
136
|
+
|
|
137
|
+
// Modern браузеры с CSS Custom Properties
|
|
138
|
+
background-image: repeating-linear-gradient($angle, transparent, transparent $half, colors.color-var($color-name) $half, colors.color-var($color-name) $size);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// ─────────────────────────────────────────
|
|
142
|
+
// ГОТОВЫЕ ВАРИАНТЫ
|
|
143
|
+
// ─────────────────────────────────────────
|
|
144
|
+
|
|
145
|
+
/// Стандартные диагональные полосы
|
|
146
|
+
///
|
|
147
|
+
/// Готовый пресет: 70px цикл, 45° угол, currentcolor, 5% прозрачность.
|
|
148
|
+
/// Идеально подходит для hero-секций и карточек.
|
|
149
|
+
///
|
|
150
|
+
/// @output Полосатый паттерн со стандартными настройками
|
|
151
|
+
///
|
|
152
|
+
/// @require {mixin} pattern-stripes-diagonal
|
|
153
|
+
///
|
|
154
|
+
/// @example scss - Быстрое применение
|
|
155
|
+
/// .hero::before {
|
|
156
|
+
/// content: "";
|
|
157
|
+
/// @include pattern-stripes;
|
|
158
|
+
/// }
|
|
159
|
+
///
|
|
160
|
+
/// @see pattern-stripes-themed
|
|
161
|
+
/// @see pattern-stripes-thin
|
|
162
|
+
/// @see pattern-stripes-wide
|
|
163
|
+
/// @access public
|
|
164
|
+
@mixin pattern-stripes {
|
|
165
|
+
@include pattern-stripes-diagonal(70px, 45deg, currentcolor, 0.05);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/// Стандартные полосы с цветом из темы
|
|
169
|
+
///
|
|
170
|
+
/// Готовый пресет с поддержкой CSS Custom Properties.
|
|
171
|
+
///
|
|
172
|
+
/// @param {String} $color [foreground] - Имя цвета из палитры
|
|
173
|
+
///
|
|
174
|
+
/// @output Полосатый паттерн с темизируемым цветом
|
|
175
|
+
///
|
|
176
|
+
/// @require {mixin} pattern-stripes-diagonal-hsl
|
|
177
|
+
///
|
|
178
|
+
/// @example scss - С основным цветом
|
|
179
|
+
/// .card::before {
|
|
180
|
+
/// content: "";
|
|
181
|
+
/// @include pattern-stripes-themed(primary);
|
|
182
|
+
/// }
|
|
183
|
+
///
|
|
184
|
+
/// @see pattern-stripes
|
|
185
|
+
/// @access public
|
|
186
|
+
@mixin pattern-stripes-themed($color: foreground) {
|
|
187
|
+
@include pattern-stripes-diagonal-hsl($color, 70px, 45deg, 0.05);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/// Тонкие диагональные полосы
|
|
191
|
+
///
|
|
192
|
+
/// Пресет с узкими полосами (20px цикл). Подходит для subtle-эффектов.
|
|
193
|
+
///
|
|
194
|
+
/// @param {Color} $color [currentcolor] - Цвет полос
|
|
195
|
+
/// @param {Number} $opacity [0.05] - Прозрачность (0-1)
|
|
196
|
+
///
|
|
197
|
+
/// @output Паттерн с тонкими полосами
|
|
198
|
+
///
|
|
199
|
+
/// @require {mixin} pattern-stripes-diagonal
|
|
200
|
+
///
|
|
201
|
+
/// @example scss - Тонкие полосы на карточке
|
|
202
|
+
/// .subtle-card::before {
|
|
203
|
+
/// content: "";
|
|
204
|
+
/// @include pattern-stripes-thin(#333, 0.03);
|
|
205
|
+
/// }
|
|
206
|
+
///
|
|
207
|
+
/// @see pattern-stripes
|
|
208
|
+
/// @see pattern-stripes-wide
|
|
209
|
+
/// @access public
|
|
210
|
+
@mixin pattern-stripes-thin($color: currentcolor, $opacity: 0.05) {
|
|
211
|
+
@include pattern-stripes-diagonal(20px, 45deg, $color, $opacity);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/// Широкие диагональные полосы
|
|
215
|
+
///
|
|
216
|
+
/// Пресет с широкими полосами (120px цикл). Для крупных секций.
|
|
217
|
+
///
|
|
218
|
+
/// @param {Color} $color [currentcolor] - Цвет полос
|
|
219
|
+
/// @param {Number} $opacity [0.05] - Прозрачность (0-1)
|
|
220
|
+
///
|
|
221
|
+
/// @output Паттерн с широкими полосами
|
|
222
|
+
///
|
|
223
|
+
/// @require {mixin} pattern-stripes-diagonal
|
|
224
|
+
///
|
|
225
|
+
/// @example scss - Широкие полосы на hero
|
|
226
|
+
/// .hero-large::before {
|
|
227
|
+
/// content: "";
|
|
228
|
+
/// @include pattern-stripes-wide(white, 0.08);
|
|
229
|
+
/// }
|
|
230
|
+
///
|
|
231
|
+
/// @see pattern-stripes
|
|
232
|
+
/// @see pattern-stripes-thin
|
|
233
|
+
/// @access public
|
|
234
|
+
@mixin pattern-stripes-wide($color: currentcolor, $opacity: 0.05) {
|
|
235
|
+
@include pattern-stripes-diagonal(120px, 45deg, $color, $opacity);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/// Горизонтальные полосы
|
|
239
|
+
///
|
|
240
|
+
/// Паттерн с горизонтальными полосами (угол 0°).
|
|
241
|
+
///
|
|
242
|
+
/// @param {Number} $size [40px] - Ширина полного цикла
|
|
243
|
+
/// @param {Color} $color [currentcolor] - Цвет полос
|
|
244
|
+
/// @param {Number} $opacity [0.05] - Прозрачность (0-1)
|
|
245
|
+
///
|
|
246
|
+
/// @output Паттерн с горизонтальными полосами
|
|
247
|
+
///
|
|
248
|
+
/// @require {mixin} pattern-overlay
|
|
249
|
+
/// @require {function} math.div
|
|
250
|
+
///
|
|
251
|
+
/// @example scss - Горизонтальные линии
|
|
252
|
+
/// .lined-bg::before {
|
|
253
|
+
/// content: "";
|
|
254
|
+
/// @include pattern-stripes-horizontal(30px, #000, 0.1);
|
|
255
|
+
/// }
|
|
256
|
+
///
|
|
257
|
+
/// @see pattern-stripes-vertical
|
|
258
|
+
/// @access public
|
|
259
|
+
@mixin pattern-stripes-horizontal($size: 40px, $color: currentcolor, $opacity: 0.05) {
|
|
260
|
+
@include pattern-overlay($opacity);
|
|
261
|
+
|
|
262
|
+
$half: math.div($size, 2);
|
|
263
|
+
|
|
264
|
+
background-image: repeating-linear-gradient(0deg, transparent, transparent $half, $color $half, $color $size);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/// Вертикальные полосы
|
|
268
|
+
///
|
|
269
|
+
/// Паттерн с вертикальными полосами (угол 90°).
|
|
270
|
+
///
|
|
271
|
+
/// @param {Number} $size [40px] - Ширина полного цикла
|
|
272
|
+
/// @param {Color} $color [currentcolor] - Цвет полос
|
|
273
|
+
/// @param {Number} $opacity [0.05] - Прозрачность (0-1)
|
|
274
|
+
///
|
|
275
|
+
/// @output Паттерн с вертикальными полосами
|
|
276
|
+
///
|
|
277
|
+
/// @require {mixin} pattern-overlay
|
|
278
|
+
/// @require {function} math.div
|
|
279
|
+
///
|
|
280
|
+
/// @example scss - Вертикальные линии
|
|
281
|
+
/// .column-bg::before {
|
|
282
|
+
/// content: "";
|
|
283
|
+
/// @include pattern-stripes-vertical(50px);
|
|
284
|
+
/// }
|
|
285
|
+
///
|
|
286
|
+
/// @see pattern-stripes-horizontal
|
|
287
|
+
/// @access public
|
|
288
|
+
@mixin pattern-stripes-vertical($size: 40px, $color: currentcolor, $opacity: 0.05) {
|
|
289
|
+
@include pattern-overlay($opacity);
|
|
290
|
+
|
|
291
|
+
$half: math.div($size, 2);
|
|
292
|
+
|
|
293
|
+
background-image: repeating-linear-gradient(90deg, transparent, transparent $half, $color $half, $color $size);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// ─────────────────────────────────────────
|
|
297
|
+
// DOTS (точки)
|
|
298
|
+
// ─────────────────────────────────────────
|
|
299
|
+
|
|
300
|
+
/// Точечный паттерн
|
|
301
|
+
///
|
|
302
|
+
/// Создаёт регулярную сетку точек с помощью `radial-gradient`.
|
|
303
|
+
///
|
|
304
|
+
/// @param {Number} $size [20px] - Расстояние между центрами точек
|
|
305
|
+
/// @param {Number} $dot-size [2px] - Радиус точки
|
|
306
|
+
/// @param {Color} $color [currentcolor] - Цвет точек
|
|
307
|
+
/// @param {Number} $opacity [0.1] - Прозрачность паттерна (0-1)
|
|
308
|
+
///
|
|
309
|
+
/// @output Точечный фоновый паттерн
|
|
310
|
+
///
|
|
311
|
+
/// @require {mixin} pattern-overlay
|
|
312
|
+
///
|
|
313
|
+
/// @example scss - Стандартные точки
|
|
314
|
+
/// .dotted::before {
|
|
315
|
+
/// content: "";
|
|
316
|
+
/// @include pattern-dots();
|
|
317
|
+
/// }
|
|
318
|
+
///
|
|
319
|
+
/// @example scss - Крупные редкие точки
|
|
320
|
+
/// .sparse-dots::before {
|
|
321
|
+
/// content: "";
|
|
322
|
+
/// @include pattern-dots(40px, 4px, #333, 0.15);
|
|
323
|
+
/// }
|
|
324
|
+
///
|
|
325
|
+
/// @see pattern-dots-hsl
|
|
326
|
+
/// @see pattern-dots-pseudo
|
|
327
|
+
/// @access public
|
|
328
|
+
@mixin pattern-dots($size: 20px, $dot-size: 2px, $color: currentcolor, $opacity: 0.1) {
|
|
329
|
+
@include pattern-overlay($opacity);
|
|
330
|
+
|
|
331
|
+
background-image: radial-gradient(circle, $color $dot-size, transparent $dot-size);
|
|
332
|
+
background-size: $size $size;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/// Точечный паттерн с HSL цветом из темы
|
|
336
|
+
///
|
|
337
|
+
/// Версия `pattern-dots` с поддержкой CSS Custom Properties.
|
|
338
|
+
///
|
|
339
|
+
/// @param {String} $color-name [foreground] - Имя цвета из палитры
|
|
340
|
+
/// @param {Number} $size [20px] - Расстояние между центрами точек
|
|
341
|
+
/// @param {Number} $dot-size [2px] - Радиус точки
|
|
342
|
+
/// @param {Number} $opacity [0.1] - Прозрачность паттерна (0-1)
|
|
343
|
+
///
|
|
344
|
+
/// @output Точечный паттерн с CSS-переменными
|
|
345
|
+
///
|
|
346
|
+
/// @require {mixin} pattern-overlay
|
|
347
|
+
/// @require {function} colors.color-static
|
|
348
|
+
/// @require {function} colors.color-var
|
|
349
|
+
///
|
|
350
|
+
/// @example scss - Точки акцентного цвета
|
|
351
|
+
/// .accent-dots::before {
|
|
352
|
+
/// content: "";
|
|
353
|
+
/// @include pattern-dots-hsl(accent, 15px, 3px, 0.2);
|
|
354
|
+
/// }
|
|
355
|
+
///
|
|
356
|
+
/// @see pattern-dots
|
|
357
|
+
/// @access public
|
|
358
|
+
@mixin pattern-dots-hsl($color-name: foreground, $size: 20px, $dot-size: 2px, $opacity: 0.1) {
|
|
359
|
+
@include pattern-overlay($opacity);
|
|
360
|
+
|
|
361
|
+
// Fallback
|
|
362
|
+
background-image: radial-gradient(circle, colors.color-static($color-name) $dot-size, transparent $dot-size);
|
|
363
|
+
// Modern
|
|
364
|
+
background-image: radial-gradient(circle, colors.color-var($color-name) $dot-size, transparent $dot-size);
|
|
365
|
+
background-size: $size $size;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// ─────────────────────────────────────────
|
|
369
|
+
// GRID (сетка)
|
|
370
|
+
// ─────────────────────────────────────────
|
|
371
|
+
|
|
372
|
+
/// Сетка (клетчатый паттерн)
|
|
373
|
+
///
|
|
374
|
+
/// Создаёт сетку из пересекающихся линий.
|
|
375
|
+
///
|
|
376
|
+
/// @param {Number} $size [40px] - Размер ячейки сетки
|
|
377
|
+
/// @param {Number} $line-width [1px] - Толщина линий
|
|
378
|
+
/// @param {Color} $color [currentcolor] - Цвет линий
|
|
379
|
+
/// @param {Number} $opacity [0.05] - Прозрачность паттерна (0-1)
|
|
380
|
+
///
|
|
381
|
+
/// @output Сетчатый фоновый паттерн
|
|
382
|
+
///
|
|
383
|
+
/// @require {mixin} pattern-overlay
|
|
384
|
+
///
|
|
385
|
+
/// @example scss - Стандартная сетка
|
|
386
|
+
/// .grid-bg::before {
|
|
387
|
+
/// content: "";
|
|
388
|
+
/// @include pattern-grid();
|
|
389
|
+
/// }
|
|
390
|
+
///
|
|
391
|
+
/// @example scss - Крупная сетка с толстыми линиями
|
|
392
|
+
/// .blueprint::before {
|
|
393
|
+
/// content: "";
|
|
394
|
+
/// @include pattern-grid(80px, 2px, #0066cc, 0.2);
|
|
395
|
+
/// }
|
|
396
|
+
///
|
|
397
|
+
/// @see pattern-grid-hsl
|
|
398
|
+
/// @see pattern-grid-pseudo
|
|
399
|
+
/// @access public
|
|
400
|
+
@mixin pattern-grid($size: 40px, $line-width: 1px, $color: currentcolor, $opacity: 0.05) {
|
|
401
|
+
@include pattern-overlay($opacity);
|
|
402
|
+
|
|
403
|
+
background-image: linear-gradient($color $line-width, transparent $line-width), linear-gradient(90deg, $color $line-width, transparent $line-width);
|
|
404
|
+
background-size: $size $size;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/// Сетка с HSL цветом из темы
|
|
408
|
+
///
|
|
409
|
+
/// Версия `pattern-grid` с поддержкой CSS Custom Properties.
|
|
410
|
+
///
|
|
411
|
+
/// @param {String} $color-name [foreground] - Имя цвета из палитры
|
|
412
|
+
/// @param {Number} $size [40px] - Размер ячейки
|
|
413
|
+
/// @param {Number} $line-width [1px] - Толщина линий
|
|
414
|
+
/// @param {Number} $opacity [0.05] - Прозрачность (0-1)
|
|
415
|
+
///
|
|
416
|
+
/// @output Сетчатый паттерн с CSS-переменными
|
|
417
|
+
///
|
|
418
|
+
/// @require {mixin} pattern-overlay
|
|
419
|
+
/// @require {function} colors.color-static
|
|
420
|
+
/// @require {function} colors.color-var
|
|
421
|
+
///
|
|
422
|
+
/// @example scss - Сетка основного цвета
|
|
423
|
+
/// .themed-grid::before {
|
|
424
|
+
/// content: "";
|
|
425
|
+
/// @include pattern-grid-hsl(primary, 60px);
|
|
426
|
+
/// }
|
|
427
|
+
///
|
|
428
|
+
/// @see pattern-grid
|
|
429
|
+
/// @access public
|
|
430
|
+
@mixin pattern-grid-hsl($color-name: foreground, $size: 40px, $line-width: 1px, $opacity: 0.05) {
|
|
431
|
+
@include pattern-overlay($opacity);
|
|
432
|
+
|
|
433
|
+
// Fallback
|
|
434
|
+
background-image: linear-gradient(colors.color-static($color-name) $line-width, transparent $line-width),
|
|
435
|
+
linear-gradient(90deg, colors.color-static($color-name) $line-width, transparent $line-width);
|
|
436
|
+
// Modern
|
|
437
|
+
background-image: linear-gradient(colors.color-var($color-name) $line-width, transparent $line-width), linear-gradient(90deg, colors.color-var($color-name) $line-width, transparent $line-width);
|
|
438
|
+
background-size: $size $size;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// ─────────────────────────────────────────
|
|
442
|
+
// CHECKERBOARD (шахматка)
|
|
443
|
+
// ─────────────────────────────────────────
|
|
444
|
+
|
|
445
|
+
/// Шахматный паттерн
|
|
446
|
+
///
|
|
447
|
+
/// Создаёт классический шахматный узор из чередующихся квадратов.
|
|
448
|
+
/// Реализован через комбинацию четырёх градиентов под углом 45°.
|
|
449
|
+
///
|
|
450
|
+
/// @param {Number} $size [40px] - Размер одного квадрата
|
|
451
|
+
/// @param {Color} $color [currentcolor] - Цвет заполненных квадратов
|
|
452
|
+
/// @param {Number} $opacity [0.05] - Прозрачность паттерна (0-1)
|
|
453
|
+
///
|
|
454
|
+
/// @output Шахматный фоновый паттерн
|
|
455
|
+
///
|
|
456
|
+
/// @require {mixin} pattern-overlay
|
|
457
|
+
/// @require {function} math.div
|
|
458
|
+
///
|
|
459
|
+
/// @example scss - Стандартная шахматка
|
|
460
|
+
/// .chess::before {
|
|
461
|
+
/// content: "";
|
|
462
|
+
/// @include pattern-checkerboard();
|
|
463
|
+
/// }
|
|
464
|
+
///
|
|
465
|
+
/// @example scss - Крупная цветная шахматка
|
|
466
|
+
/// .retro::before {
|
|
467
|
+
/// content: "";
|
|
468
|
+
/// @include pattern-checkerboard(60px, #ff6600, 0.15);
|
|
469
|
+
/// }
|
|
470
|
+
///
|
|
471
|
+
/// @access public
|
|
472
|
+
@mixin pattern-checkerboard($size: 40px, $color: currentcolor, $opacity: 0.05) {
|
|
473
|
+
@include pattern-overlay($opacity);
|
|
474
|
+
|
|
475
|
+
$half: math.div($size, 2);
|
|
476
|
+
|
|
477
|
+
background-image: linear-gradient(45deg, $color 25%, transparent 25%), linear-gradient(-45deg, $color 25%, transparent 25%), linear-gradient(45deg, transparent 75%, $color 75%),
|
|
478
|
+
linear-gradient(-45deg, transparent 75%, $color 75%);
|
|
479
|
+
background-size: $size $size;
|
|
480
|
+
background-position: 0 0, 0 $half, $half (-$half), (-$half) 0;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// ─────────────────────────────────────────
|
|
484
|
+
// NOISE (шум) — через SVG
|
|
485
|
+
// ─────────────────────────────────────────
|
|
486
|
+
|
|
487
|
+
/// Шум/зернистость через SVG
|
|
488
|
+
///
|
|
489
|
+
/// Добавляет текстуру шума с помощью inline SVG с `feTurbulence`.
|
|
490
|
+
/// Отлично подходит для придания "живости" однотонным фонам.
|
|
491
|
+
///
|
|
492
|
+
/// @param {Number} $opacity [0.05] - Прозрачность шума (0-1)
|
|
493
|
+
///
|
|
494
|
+
/// @output SVG-шум в качестве фона
|
|
495
|
+
///
|
|
496
|
+
/// @require {mixin} pattern-overlay
|
|
497
|
+
///
|
|
498
|
+
/// @example scss - Добавление шума к секции
|
|
499
|
+
/// .textured::before {
|
|
500
|
+
/// content: "";
|
|
501
|
+
/// @include pattern-noise(0.08);
|
|
502
|
+
/// }
|
|
503
|
+
///
|
|
504
|
+
/// @example scss - Легкий шум для карточки
|
|
505
|
+
/// .card::after {
|
|
506
|
+
/// content: "";
|
|
507
|
+
/// @include pattern-noise(0.03);
|
|
508
|
+
/// }
|
|
509
|
+
///
|
|
510
|
+
/// @access public
|
|
511
|
+
@mixin pattern-noise($opacity: 0.05) {
|
|
512
|
+
@include pattern-overlay($opacity);
|
|
513
|
+
|
|
514
|
+
// Base64 encoded SVG noise
|
|
515
|
+
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
// ─────────────────────────────────────────
|
|
519
|
+
// CONTAINER MIXIN (для родителя)
|
|
520
|
+
// ─────────────────────────────────────────
|
|
521
|
+
|
|
522
|
+
/// Подготовка контейнера для паттерна
|
|
523
|
+
///
|
|
524
|
+
/// Добавляет необходимые стили к родительскому элементу,
|
|
525
|
+
/// чтобы паттерн корректно позиционировался внутри.
|
|
526
|
+
///
|
|
527
|
+
/// @output Стили позиционирования контейнера
|
|
528
|
+
///
|
|
529
|
+
/// @example scss - Подготовка секции для паттерна
|
|
530
|
+
/// .hero {
|
|
531
|
+
/// @include pattern-container;
|
|
532
|
+
/// background: var(--color-primary);
|
|
533
|
+
///
|
|
534
|
+
/// &::before {
|
|
535
|
+
/// content: "";
|
|
536
|
+
/// @include pattern-stripes;
|
|
537
|
+
/// }
|
|
538
|
+
/// }
|
|
539
|
+
///
|
|
540
|
+
/// @example html - HTML структура
|
|
541
|
+
/// <section class="hero">
|
|
542
|
+
/// <div class="hero__content">...</div>
|
|
543
|
+
/// </section>
|
|
544
|
+
///
|
|
545
|
+
/// @access public
|
|
546
|
+
@mixin pattern-container {
|
|
547
|
+
position: relative;
|
|
548
|
+
overflow: hidden;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
// ─────────────────────────────────────────
|
|
552
|
+
// КОМБИНИРОВАННЫЕ (с псевдоэлементом)
|
|
553
|
+
// ─────────────────────────────────────────
|
|
554
|
+
|
|
555
|
+
/// Полосы через псевдоэлемент
|
|
556
|
+
///
|
|
557
|
+
/// Автономный миксин, который добавляет паттерн полос через
|
|
558
|
+
/// псевдоэлемент. Не требует отдельного HTML-элемента.
|
|
559
|
+
/// Автоматически настраивает родителя.
|
|
560
|
+
///
|
|
561
|
+
/// @param {String} $pseudo [before] - Псевдоэлемент: `before` или `after`
|
|
562
|
+
/// @param {Number} $size [70px] - Ширина цикла полос
|
|
563
|
+
/// @param {Color} $color [currentcolor] - Цвет полос
|
|
564
|
+
/// @param {Number} $opacity [0.05] - Прозрачность (0-1)
|
|
565
|
+
///
|
|
566
|
+
/// @output Стили родителя и псевдоэлемента с полосами
|
|
567
|
+
///
|
|
568
|
+
/// @require {mixin} pattern-stripes-diagonal
|
|
569
|
+
///
|
|
570
|
+
/// @example scss - Полосы через ::before
|
|
571
|
+
/// .hero {
|
|
572
|
+
/// @include pattern-stripes-pseudo;
|
|
573
|
+
/// background: navy;
|
|
574
|
+
/// }
|
|
575
|
+
///
|
|
576
|
+
/// @example scss - Полосы через ::after
|
|
577
|
+
/// .card {
|
|
578
|
+
/// @include pattern-stripes-pseudo(after, 50px, white, 0.1);
|
|
579
|
+
/// }
|
|
580
|
+
///
|
|
581
|
+
/// @see pattern-dots-pseudo
|
|
582
|
+
/// @see pattern-grid-pseudo
|
|
583
|
+
/// @access public
|
|
584
|
+
@mixin pattern-stripes-pseudo($pseudo: before, $size: 70px, $color: currentcolor, $opacity: 0.05) {
|
|
585
|
+
position: relative;
|
|
586
|
+
overflow: hidden;
|
|
587
|
+
|
|
588
|
+
&::#{$pseudo} {
|
|
589
|
+
content: "";
|
|
590
|
+
@include pattern-stripes-diagonal($size, 45deg, $color, $opacity);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/// Точки через псевдоэлемент
|
|
595
|
+
///
|
|
596
|
+
/// Автономный миксин для точечного паттерна через псевдоэлемент.
|
|
597
|
+
///
|
|
598
|
+
/// @param {String} $pseudo [before] - Псевдоэлемент: `before` или `after`
|
|
599
|
+
/// @param {Number} $size [20px] - Расстояние между точками
|
|
600
|
+
/// @param {Number} $dot-size [2px] - Радиус точки
|
|
601
|
+
/// @param {Color} $color [currentcolor] - Цвет точек
|
|
602
|
+
/// @param {Number} $opacity [0.1] - Прозрачность (0-1)
|
|
603
|
+
///
|
|
604
|
+
/// @output Стили родителя и псевдоэлемента с точками
|
|
605
|
+
///
|
|
606
|
+
/// @require {mixin} pattern-dots
|
|
607
|
+
///
|
|
608
|
+
/// @example scss - Точки на карточке
|
|
609
|
+
/// .feature-card {
|
|
610
|
+
/// @include pattern-dots-pseudo(before, 15px, 3px, #000, 0.08);
|
|
611
|
+
/// }
|
|
612
|
+
///
|
|
613
|
+
/// @see pattern-stripes-pseudo
|
|
614
|
+
/// @see pattern-grid-pseudo
|
|
615
|
+
/// @access public
|
|
616
|
+
@mixin pattern-dots-pseudo($pseudo: before, $size: 20px, $dot-size: 2px, $color: currentcolor, $opacity: 0.1) {
|
|
617
|
+
position: relative;
|
|
618
|
+
overflow: hidden;
|
|
619
|
+
|
|
620
|
+
&::#{$pseudo} {
|
|
621
|
+
content: "";
|
|
622
|
+
@include pattern-dots($size, $dot-size, $color, $opacity);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/// Сетка через псевдоэлемент
|
|
627
|
+
///
|
|
628
|
+
/// Автономный миксин для сетчатого паттерна через псевдоэлемент.
|
|
629
|
+
///
|
|
630
|
+
/// @param {String} $pseudo [before] - Псевдоэлемент: `before` или `after`
|
|
631
|
+
/// @param {Number} $size [40px] - Размер ячейки сетки
|
|
632
|
+
/// @param {Number} $line-width [1px] - Толщина линий
|
|
633
|
+
/// @param {Color} $color [currentcolor] - Цвет линий
|
|
634
|
+
/// @param {Number} $opacity [0.05] - Прозрачность (0-1)
|
|
635
|
+
///
|
|
636
|
+
/// @output Стили родителя и псевдоэлемента с сеткой
|
|
637
|
+
///
|
|
638
|
+
/// @require {mixin} pattern-grid
|
|
639
|
+
///
|
|
640
|
+
/// @example scss - Сетка-чертёж
|
|
641
|
+
/// .blueprint-section {
|
|
642
|
+
/// @include pattern-grid-pseudo(after, 50px, 1px, #0088ff, 0.15);
|
|
643
|
+
/// background: #001133;
|
|
644
|
+
/// }
|
|
645
|
+
///
|
|
646
|
+
/// @see pattern-stripes-pseudo
|
|
647
|
+
/// @see pattern-dots-pseudo
|
|
648
|
+
/// @access public
|
|
649
|
+
@mixin pattern-grid-pseudo($pseudo: before, $size: 40px, $line-width: 1px, $color: currentcolor, $opacity: 0.05) {
|
|
650
|
+
position: relative;
|
|
651
|
+
overflow: hidden;
|
|
652
|
+
|
|
653
|
+
&::#{$pseudo} {
|
|
654
|
+
content: "";
|
|
655
|
+
@include pattern-grid($size, $line-width, $color, $opacity);
|
|
656
|
+
}
|
|
657
|
+
}
|