@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,158 @@
1
+ ////
2
+ /// Система отступов темы MOEXP
3
+ /// Gap для flexbox/grid и spacing для padding/margin
4
+ /// @group spacing
5
+ /// @author MOEXP Team
6
+ ////
7
+
8
+ // ============================================
9
+ // SPACING SYSTEM
10
+ // local\common\theme-moexp\src\scss\abstracts\_spacing.scss
11
+ // ============================================
12
+
13
+ @use "sass:map";
14
+
15
+ // ─────────────────────────────────────────
16
+ // Gap (для flexbox/grid)
17
+ // ─────────────────────────────────────────
18
+
19
+ /// Gap XS (4px) — минимальный отступ между элементами
20
+ /// @type Number
21
+ /// @group spacing
22
+ $gap-xs: 0.25rem !default;
23
+
24
+ /// Gap SM (8px) — маленький отступ
25
+ /// @type Number
26
+ /// @group spacing
27
+ $gap-sm: 0.5rem !default;
28
+
29
+ /// Gap MD (16px) — стандартный отступ
30
+ /// @type Number
31
+ /// @group spacing
32
+ $gap-md: 1rem !default;
33
+
34
+ /// Gap LG (24px) — увеличенный отступ
35
+ /// @type Number
36
+ /// @group spacing
37
+ $gap-lg: 1.5rem !default;
38
+
39
+ /// Gap XL (32px) — большой отступ
40
+ /// @type Number
41
+ /// @group spacing
42
+ $gap-xl: 2rem !default;
43
+
44
+ /// Gap 2XL (48px) — очень большой отступ
45
+ /// @type Number
46
+ /// @group spacing
47
+ $gap-2xl: 3rem !default;
48
+
49
+ /// Карта всех значений gap
50
+ /// @type Map
51
+ /// @prop {Number} xs [0.25rem] - 4px
52
+ /// @prop {Number} sm [0.5rem] - 8px
53
+ /// @prop {Number} md [1rem] - 16px
54
+ /// @prop {Number} lg [1.5rem] - 24px
55
+ /// @prop {Number} xl [2rem] - 32px
56
+ /// @prop {Number} 2xl [3rem] - 48px
57
+ /// @example scss - Получение значения из карты
58
+ /// gap: map.get($gaps, 'lg');
59
+ /// // => 1.5rem
60
+ /// @group spacing
61
+ $gaps: (
62
+ xs: $gap-xs,
63
+ sm: $gap-sm,
64
+ md: $gap-md,
65
+ lg: $gap-lg,
66
+ xl: $gap-xl,
67
+ 2xl: $gap-2xl,
68
+ ) !default;
69
+
70
+ // ─────────────────────────────────────────
71
+ // Spacing (для padding/margin)
72
+ // ─────────────────────────────────────────
73
+
74
+ /// Spacing 2XS (2px) — микро-отступ
75
+ /// @type Number
76
+ /// @group spacing
77
+ $spacing-2xs: 0.125rem !default;
78
+
79
+ /// Spacing XS (4px) — минимальный отступ
80
+ /// @type Number
81
+ /// @group spacing
82
+ $spacing-xs: 0.25rem !default;
83
+
84
+ /// Spacing SM (8px) — маленький отступ
85
+ /// @type Number
86
+ /// @group spacing
87
+ $spacing-sm: 0.5rem !default;
88
+
89
+ /// Spacing MD (16px) — стандартный отступ
90
+ /// @type Number
91
+ /// @group spacing
92
+ $spacing-md: 1rem !default;
93
+
94
+ /// Spacing LG (24px) — увеличенный отступ
95
+ /// @type Number
96
+ /// @group spacing
97
+ $spacing-lg: 1.5rem !default;
98
+
99
+ /// Spacing XL (32px) — большой отступ
100
+ /// @type Number
101
+ /// @group spacing
102
+ $spacing-xl: 2rem !default;
103
+
104
+ /// Spacing 2XL (48px) — очень большой отступ
105
+ /// @type Number
106
+ /// @group spacing
107
+ $spacing-2xl: 3rem !default;
108
+
109
+ /// Spacing 3XL (64px) — секционный отступ
110
+ /// @type Number
111
+ /// @group spacing
112
+ $spacing-3xl: 4rem !default;
113
+
114
+ /// Spacing 4XL (80px) — большой секционный отступ
115
+ /// @type Number
116
+ /// @group spacing
117
+ $spacing-4xl: 5rem !default;
118
+
119
+ /// Spacing 5XL (96px) — максимальный отступ
120
+ /// @type Number
121
+ /// @group spacing
122
+ $spacing-5xl: 6rem !default;
123
+
124
+ /// Карта всех значений spacing
125
+ /// @type Map
126
+ /// @prop {Number} 2xs [0.125rem] - 2px
127
+ /// @prop {Number} xs [0.25rem] - 4px
128
+ /// @prop {Number} sm [0.5rem] - 8px
129
+ /// @prop {Number} md [1rem] - 16px
130
+ /// @prop {Number} lg [1.5rem] - 24px
131
+ /// @prop {Number} xl [2rem] - 32px
132
+ /// @prop {Number} 2xl [3rem] - 48px
133
+ /// @prop {Number} 3xl [4rem] - 64px
134
+ /// @prop {Number} 4xl [5rem] - 80px
135
+ /// @prop {Number} 5xl [6rem] - 96px
136
+ /// @example scss - Padding секции
137
+ /// .section {
138
+ /// padding: map.get($spacings, '3xl') 0;
139
+ /// }
140
+ /// // => padding: 4rem 0;
141
+ /// @example scss - Margin между блоками
142
+ /// .card {
143
+ /// margin-bottom: map.get($spacings, 'lg');
144
+ /// }
145
+ /// // => margin-bottom: 1.5rem;
146
+ /// @group spacing
147
+ $spacings: (
148
+ 2xs: $spacing-2xs,
149
+ xs: $spacing-xs,
150
+ sm: $spacing-sm,
151
+ md: $spacing-md,
152
+ lg: $spacing-lg,
153
+ xl: $spacing-xl,
154
+ 2xl: $spacing-2xl,
155
+ 3xl: $spacing-3xl,
156
+ 4xl: $spacing-4xl,
157
+ 5xl: $spacing-5xl,
158
+ ) !default;
@@ -0,0 +1,477 @@
1
+ ////
2
+ /// Типографика темы MOEXP
3
+ /// Размеры шрифтов, высота строки, начертания и миксины для текста
4
+ /// @group typography
5
+ /// @author MOEXP Team
6
+ ////
7
+
8
+ // ============================================
9
+ // TYPOGRAPHY
10
+ // local\common\theme-moexp\src\scss\abstracts\_typography.scss
11
+ // ============================================
12
+
13
+ @use "sass:map";
14
+ @use "mixins";
15
+ @use "breakpoints";
16
+
17
+ // ─────────────────────────────────────────
18
+ // Font Sizes
19
+ // ─────────────────────────────────────────
20
+
21
+ /// Размер шрифта 2XS (10px)
22
+ /// @type Number
23
+ /// @group typography
24
+ $font-size-2xs: 0.625rem !default;
25
+
26
+ /// Размер шрифта XS (12px)
27
+ /// @type Number
28
+ /// @group typography
29
+ $font-size-xs: 0.75rem !default;
30
+
31
+ /// Размер шрифта SM (14px)
32
+ /// @type Number
33
+ /// @group typography
34
+ $font-size-sm: 0.875rem !default;
35
+
36
+ /// Базовый размер шрифта (16px)
37
+ /// @type Number
38
+ /// @group typography
39
+ $font-size-base: 1rem !default;
40
+
41
+ /// Размер шрифта LG (18px)
42
+ /// @type Number
43
+ /// @group typography
44
+ $font-size-lg: 1.125rem !default;
45
+
46
+ /// Размер шрифта XL (20px)
47
+ /// @type Number
48
+ /// @group typography
49
+ $font-size-xl: 1.25rem !default;
50
+
51
+ /// Размер шрифта 2XL (24px)
52
+ /// @type Number
53
+ /// @group typography
54
+ $font-size-2xl: 1.5rem !default;
55
+
56
+ /// Размер шрифта 3XL (30px)
57
+ /// @type Number
58
+ /// @group typography
59
+ $font-size-3xl: 1.875rem !default;
60
+
61
+ /// Размер шрифта 4XL (36px)
62
+ /// @type Number
63
+ /// @group typography
64
+ $font-size-4xl: 2.25rem !default;
65
+
66
+ /// Размер шрифта 5XL (48px)
67
+ /// @type Number
68
+ /// @group typography
69
+ $font-size-5xl: 3rem !default;
70
+
71
+ /// Размер шрифта 6XL (60px)
72
+ /// @type Number
73
+ /// @group typography
74
+ $font-size-6xl: 3.75rem !default;
75
+
76
+ /// Размер шрифта 7XL (72px)
77
+ /// @type Number
78
+ /// @group typography
79
+ $font-size-7xl: 4.5rem !default;
80
+
81
+ /// Карта всех размеров шрифтов
82
+ /// @type Map
83
+ /// @prop {Number} 2xs [0.625rem] - 10px
84
+ /// @prop {Number} xs [0.75rem] - 12px
85
+ /// @prop {Number} sm [0.875rem] - 14px
86
+ /// @prop {Number} base [1rem] - 16px
87
+ /// @prop {Number} lg [1.125rem] - 18px
88
+ /// @prop {Number} xl [1.25rem] - 20px
89
+ /// @prop {Number} 2xl [1.5rem] - 24px
90
+ /// @prop {Number} 3xl [1.875rem] - 30px
91
+ /// @prop {Number} 4xl [2.25rem] - 36px
92
+ /// @prop {Number} 5xl [3rem] - 48px
93
+ /// @prop {Number} 6xl [3.75rem] - 60px
94
+ /// @prop {Number} 7xl [4.5rem] - 72px
95
+ /// @example scss - Получение размера из карты
96
+ /// font-size: map.get($font-sizes, '2xl');
97
+ /// // => 1.5rem
98
+ /// @group typography
99
+ $font-sizes: (
100
+ 2xs: $font-size-2xs,
101
+ // ← Добавить
102
+ xs: $font-size-xs,
103
+ sm: $font-size-sm,
104
+ base: $font-size-base,
105
+ lg: $font-size-lg,
106
+ xl: $font-size-xl,
107
+ 2xl: $font-size-2xl,
108
+ 3xl: $font-size-3xl,
109
+ 4xl: $font-size-4xl,
110
+ 5xl: $font-size-5xl,
111
+ 6xl: $font-size-6xl,
112
+ 7xl: $font-size-7xl,
113
+ ) !default;
114
+
115
+ // ─────────────────────────────────────────
116
+ // Line Heights
117
+ // ─────────────────────────────────────────
118
+
119
+ /// Высота строки none — без интерлиньяжа
120
+ /// @type Number
121
+ /// @group typography
122
+ $line-height-none: 1 !default;
123
+
124
+ /// Высота строки tight — плотная (для крупных заголовков)
125
+ /// @type Number
126
+ /// @group typography
127
+ $line-height-tight: 1.25 !default;
128
+
129
+ /// Высота строки snug — компактная
130
+ /// @type Number
131
+ /// @group typography
132
+ $line-height-snug: 1.375 !default;
133
+
134
+ /// Высота строки normal — стандартная
135
+ /// @type Number
136
+ /// @group typography
137
+ $line-height-normal: 1.5 !default;
138
+
139
+ /// Высота строки relaxed — комфортная для чтения
140
+ /// @type Number
141
+ /// @group typography
142
+ $line-height-relaxed: 1.625 !default;
143
+
144
+ /// Высота строки loose — свободная (двойной интерлиньяж)
145
+ /// @type Number
146
+ /// @group typography
147
+ $line-height-loose: 2 !default;
148
+
149
+ /// Карта всех значений высоты строки
150
+ /// @type Map
151
+ /// @prop {Number} none [1] - Без интерлиньяжа
152
+ /// @prop {Number} tight [1.25] - Плотная
153
+ /// @prop {Number} snug [1.375] - Компактная
154
+ /// @prop {Number} normal [1.5] - Стандартная
155
+ /// @prop {Number} relaxed [1.625] - Комфортная
156
+ /// @prop {Number} loose [2] - Свободная
157
+ /// @example scss - Получение значения из карты
158
+ /// line-height: map.get($line-heights, 'relaxed');
159
+ /// // => 1.625
160
+ /// @group typography
161
+ $line-heights: (
162
+ none: $line-height-none,
163
+ tight: $line-height-tight,
164
+ snug: $line-height-snug,
165
+ normal: $line-height-normal,
166
+ relaxed: $line-height-relaxed,
167
+ loose: $line-height-loose,
168
+ ) !default;
169
+
170
+ // ─────────────────────────────────────────
171
+ // Font Weights
172
+ // ─────────────────────────────────────────
173
+
174
+ /// Тонкий
175
+ /// @type Number
176
+ /// @group typography
177
+ $font-weight-thin: 100 !default;
178
+
179
+ /// Очень лёгкий
180
+ /// @type Number
181
+ /// @group typography
182
+ $font-weight-extralight: 200 !default;
183
+
184
+ /// Лёгкий
185
+ /// @type Number
186
+ /// @group typography
187
+ $font-weight-light: 300 !default;
188
+
189
+ /// Нормальный
190
+ /// @type Number
191
+ /// @group typography
192
+ $font-weight-normal: 400 !default;
193
+
194
+ /// Средний
195
+ /// @type Number
196
+ /// @group typography
197
+ $font-weight-medium: 500 !default;
198
+
199
+ /// Полужирный
200
+ /// @type Number
201
+ /// @group typography
202
+ $font-weight-semibold: 600 !default;
203
+
204
+ /// Жирный
205
+ /// @type Number
206
+ /// @group typography
207
+ $font-weight-bold: 700 !default;
208
+
209
+ /// Очень жирный
210
+ /// @type Number
211
+ /// @group typography
212
+ $font-weight-extrabold: 800 !default;
213
+
214
+ /// Чёрный (максимальный)
215
+ /// @type Number
216
+ /// @group typography
217
+ $font-weight-black: 900 !default;
218
+
219
+ /// Карта всех начертаний шрифта
220
+ /// @type Map
221
+ /// @prop {Number} thin [100] - Тонкое
222
+ /// @prop {Number} extralight [200] - Очень лёгкое
223
+ /// @prop {Number} light [300] - Лёгкое
224
+ /// @prop {Number} normal [400] - Обычное
225
+ /// @prop {Number} medium [500] - Среднее
226
+ /// @prop {Number} semibold [600] - Полужирное
227
+ /// @prop {Number} bold [700] - Жирное
228
+ /// @prop {Number} extrabold [800] - Очень жирное
229
+ /// @prop {Number} black [900] - Сверхжирное
230
+ /// @example scss - Получение значения из карты
231
+ /// font-weight: map.get($font-weights, 'semibold');
232
+ /// // => 600
233
+ /// @group typography
234
+ $font-weights: (
235
+ thin: $font-weight-thin,
236
+ extralight: $font-weight-extralight,
237
+ light: $font-weight-light,
238
+ normal: $font-weight-normal,
239
+ medium: $font-weight-medium,
240
+ semibold: $font-weight-semibold,
241
+ bold: $font-weight-bold,
242
+ extrabold: $font-weight-extrabold,
243
+ black: $font-weight-black,
244
+ ) !default;
245
+
246
+ // ============================================
247
+ // МИКСИНЫ ТИПОГРАФИКИ
248
+ // ============================================
249
+
250
+ /// Стили для Hero-заголовка (h1 на главном экране)
251
+ /// Адаптивный размер: 4xl → 5xl (lg) → 6xl (xl)
252
+ /// @param {String} $color [primary-foreground] - Имя цвета из палитры
253
+ /// @param {String} $font-heading - Семейство шрифта для заголовка
254
+ /// @require {mixin} mixins.text-color
255
+ /// @require {mixin} breakpoints.lg
256
+ /// @require {mixin} breakpoints.xl
257
+ /// @example scss - Использование в Hero-секции
258
+ /// .hero__title {
259
+ /// @include hero-title('primary-foreground', $font-golos-text);
260
+ /// }
261
+ /// @output
262
+ /// margin-bottom: 1.5rem;
263
+ /// font-family: ...;
264
+ /// font-weight: 700;
265
+ /// font-size: 2.25rem; // адаптивно до 3.75rem
266
+ /// line-height: 1;
267
+ /// color: hsl(var(--primary-foreground));
268
+ /// @group typography
269
+ @mixin hero-title($color: primary-foreground, $font-heading) {
270
+ margin-bottom: 1.5rem;
271
+
272
+ font-family: $font-heading;
273
+ font-weight: $font-weight-bold;
274
+ font-size: $font-size-4xl;
275
+ line-height: $line-height-none;
276
+
277
+ @include mixins.text-color($color);
278
+
279
+ @include breakpoints.lg {
280
+ font-size: $font-size-5xl;
281
+ }
282
+
283
+ @include breakpoints.xl {
284
+ font-size: $font-size-6xl;
285
+ }
286
+ }
287
+
288
+ /// Стили для Hero-подзаголовка
289
+ /// Адаптивный размер с ограничением ширины
290
+ /// @param {String} $color [primary-foreground] - Имя цвета из палитры
291
+ /// @param {Number} $alpha [0.8] - Прозрачность текста
292
+ /// @require {mixin} mixins.text-color
293
+ /// @require {mixin} breakpoints.lg
294
+ /// @require {mixin} breakpoints.xs
295
+ /// @example scss - Использование в Hero-секции
296
+ /// .hero__subtitle {
297
+ /// @include hero-subtitle('primary-foreground', 0.85);
298
+ /// }
299
+ /// @output
300
+ /// max-width: 42rem;
301
+ /// margin-bottom: 2.5rem;
302
+ /// font-size: 1.125rem; // адаптивно
303
+ /// color: hsl(var(--primary-foreground) / 0.8);
304
+ /// @group typography
305
+ @mixin hero-subtitle($color: primary-foreground, $alpha: 0.8) {
306
+ max-width: 42rem;
307
+ margin-bottom: 2.5rem;
308
+
309
+ font-size: $font-size-lg;
310
+
311
+ @include mixins.text-color($color, $alpha);
312
+
313
+ @include breakpoints.lg {
314
+ font-size: $font-size-xl;
315
+ line-height: $line-height-relaxed;
316
+ }
317
+ @include breakpoints.xs {
318
+ font-size: $font-size-lg;
319
+ line-height: $line-height-none;
320
+ }
321
+ }
322
+
323
+ /// Стили для заголовка секции (h2)
324
+ /// Адаптивный размер: 3xl → 4xl (lg)
325
+ /// @param {String} $color [foreground] - Имя цвета из палитры
326
+ /// @param {String} $font-heading - Семейство шрифта для заголовка
327
+ /// @require {mixin} mixins.text-color
328
+ /// @require {mixin} breakpoints.lg
329
+ /// @example scss - Использование в секции
330
+ /// .about__title {
331
+ /// @include section-title('foreground', $font-golos-text);
332
+ /// }
333
+ /// @output
334
+ /// margin-bottom: 1rem;
335
+ /// font-family: ...;
336
+ /// font-weight: 700;
337
+ /// font-size: 1.875rem; // адаптивно до 2.25rem
338
+ /// line-height: 1.25;
339
+ /// color: hsl(var(--foreground));
340
+ /// @group typography
341
+ @mixin section-title($color: foreground, $font-heading) {
342
+ margin-bottom: 1rem;
343
+
344
+ font-family: $font-heading;
345
+ font-weight: $font-weight-bold;
346
+ font-size: $font-size-3xl;
347
+ line-height: $line-height-tight;
348
+
349
+ @include mixins.text-color($color);
350
+
351
+ @include breakpoints.lg {
352
+ font-size: $font-size-4xl;
353
+ }
354
+ }
355
+
356
+ /// Стили для подзаголовка секции
357
+ /// С ограничением максимальной ширины для читаемости
358
+ /// @param {String} $color [foreground-muted] - Имя цвета из палитры
359
+ /// @require {mixin} mixins.text-color
360
+ /// @example scss - Использование в секции
361
+ /// .about__subtitle {
362
+ /// @include section-subtitle('foreground-muted');
363
+ /// }
364
+ /// @output
365
+ /// max-width: 36rem;
366
+ /// margin-bottom: 2rem;
367
+ /// font-size: 1.125rem;
368
+ /// line-height: 1.625;
369
+ /// color: hsl(var(--foreground-muted));
370
+ /// @group typography
371
+ @mixin section-subtitle($color: foreground-muted) {
372
+ max-width: 36rem;
373
+ margin-bottom: 2rem;
374
+
375
+ font-size: $font-size-lg;
376
+ line-height: $line-height-relaxed;
377
+
378
+ @include mixins.text-color($color);
379
+ }
380
+
381
+ /// Стили для надзаголовка секции (slogan)
382
+ /// Uppercase текст с letter-spacing
383
+ /// @param {String} $color [foreground-muted] - Имя цвета из палитры
384
+ /// @require {mixin} mixins.text-color
385
+ /// @require {mixin} breakpoints.md-down
386
+ /// @example scss - Использование в секции
387
+ /// .services__slogan {
388
+ /// @include section-slogan('foreground-muted');
389
+ /// }
390
+ /// @output
391
+ /// font-size: 0.875rem;
392
+ /// text-transform: uppercase;
393
+ /// letter-spacing: 0.1em;
394
+ /// color: hsl(var(--foreground-muted));
395
+ /// @group typography
396
+ @mixin section-slogan($color: foreground-muted) {
397
+ font-size: $font-size-sm;
398
+ font-weight: $font-weight-medium;
399
+ line-height: $line-height-normal;
400
+ text-transform: uppercase;
401
+ letter-spacing: 0.1em;
402
+
403
+ @include mixins.text-color($color);
404
+
405
+ @include breakpoints.md-down {
406
+ font-size: $font-size-xs;
407
+ }
408
+ }
409
+
410
+ /// Стили для заголовка карточки (h3)
411
+ /// @param {String} $color [foreground] - Имя цвета из палитры
412
+ /// @param {String} $font-heading - Семейство шрифта для заголовка
413
+ /// @require {mixin} mixins.text-color
414
+ /// @example scss - Использование в карточке
415
+ /// .card__title {
416
+ /// @include card-title('foreground', $font-golos-text);
417
+ /// }
418
+ /// @output
419
+ /// margin-bottom: 0.5rem;
420
+ /// font-family: ...;
421
+ /// font-weight: 600;
422
+ /// font-size: 1.25rem;
423
+ /// line-height: 1.375;
424
+ /// color: hsl(var(--foreground));
425
+ /// @group typography
426
+ @mixin card-title($color: foreground, $font-heading) {
427
+ margin-bottom: 0.5rem;
428
+
429
+ font-family: $font-heading;
430
+ font-weight: $font-weight-semibold;
431
+ font-size: $font-size-xl;
432
+ line-height: $line-height-snug;
433
+
434
+ @include mixins.text-color($color);
435
+ }
436
+
437
+ /// Стили для основного текста (body)
438
+ /// @param {String} $color [foreground-body] - Имя цвета из палитры
439
+ /// @require {mixin} mixins.text-color
440
+ /// @example scss - Использование для параграфов
441
+ /// .article__text {
442
+ /// @include body-text('foreground-body');
443
+ /// }
444
+ /// @output
445
+ /// font-size: 1rem;
446
+ /// line-height: 1.625;
447
+ /// color: hsl(var(--foreground-body));
448
+ /// @group typography
449
+ @mixin body-text($color: foreground-body) {
450
+ font-size: $font-size-base;
451
+ line-height: $line-height-relaxed;
452
+
453
+ @include mixins.text-color($color);
454
+ }
455
+
456
+ /// Стили для мелкого текста, подписей и caption
457
+ /// @param {String} $color [foreground-caption] - Имя цвета из палитры
458
+ /// @require {mixin} mixins.text-color
459
+ /// @example scss - Использование для подписей
460
+ /// .card__meta {
461
+ /// @include caption-text('foreground-caption');
462
+ /// }
463
+ /// @example scss - Кастомный цвет
464
+ /// .footer__copyright {
465
+ /// @include caption-text('foreground-muted');
466
+ /// }
467
+ /// @output
468
+ /// font-size: 0.875rem;
469
+ /// line-height: 1.5;
470
+ /// color: hsl(var(--foreground-caption));
471
+ /// @group typography
472
+ @mixin caption-text($color: foreground-caption) {
473
+ font-size: $font-size-sm;
474
+ line-height: $line-height-normal;
475
+
476
+ @include mixins.text-color($color);
477
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ // ============================================
2
+ // VARIABLES
3
+ // ============================================