@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,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
+ }