slidev-theme-practicum 0.1.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 (88) hide show
  1. package/README.md +270 -0
  2. package/components/DebugGrid.vue +50 -0
  3. package/components/DecorLibrary.vue +1117 -0
  4. package/components/Header.vue +124 -0
  5. package/components/Image.vue +82 -0
  6. package/components/ImageRenderer.vue +126 -0
  7. package/components/Logo.vue +142 -0
  8. package/components/Person.vue +89 -0
  9. package/components/Slide.vue +324 -0
  10. package/components/Slot.vue +419 -0
  11. package/components/Text.vue +216 -0
  12. package/components/Timeline.vue +202 -0
  13. package/composables/decor-catalog.mjs +339 -0
  14. package/composables/decor-config.mjs +488 -0
  15. package/composables/decor-file-store.ts +192 -0
  16. package/composables/decor-http-store.ts +25 -0
  17. package/composables/decor-store.ts +39 -0
  18. package/composables/decor-tuning-overrides.mjs +2 -0
  19. package/composables/decor-workbench.ts +799 -0
  20. package/composables/grid-placement.ts +396 -0
  21. package/composables/image-config.mjs +484 -0
  22. package/composables/layout-authoring.ts +372 -0
  23. package/composables/layout-markdown.mjs +56 -0
  24. package/composables/layout-recipes.ts +347 -0
  25. package/composables/layout-registry.ts +47 -0
  26. package/composables/layout-shorthands.ts +891 -0
  27. package/composables/layout-vnode.ts +43 -0
  28. package/composables/logo-mark.mjs +5 -0
  29. package/composables/slide-layout.ts +43 -0
  30. package/composables/slot-placement.ts +195 -0
  31. package/composables/slot-rules.ts +147 -0
  32. package/composables/text-fit-runtime.ts +577 -0
  33. package/composables/text-priority-fit.mjs +166 -0
  34. package/composables/text-typography.mjs +138 -0
  35. package/composables/theme-foundation.ts +192 -0
  36. package/composables/theme-media.mjs +202 -0
  37. package/composables/use-theme-config.ts +71 -0
  38. package/decor-library.md +10 -0
  39. package/env.d.ts +6 -0
  40. package/example.md +786 -0
  41. package/layouts/collection.vue +5 -0
  42. package/layouts/cover.vue +5 -0
  43. package/layouts/default.vue +5 -0
  44. package/layouts/explainer.vue +5 -0
  45. package/layouts/message.vue +5 -0
  46. package/layouts/none.vue +5 -0
  47. package/layouts/section.vue +5 -0
  48. package/layouts/two-cols.vue +11 -0
  49. package/package.json +84 -0
  50. package/public/decor/decor-1.svg +83 -0
  51. package/public/decor/decor-10.svg +40 -0
  52. package/public/decor/decor-11.svg +162 -0
  53. package/public/decor/decor-12.svg +83 -0
  54. package/public/decor/decor-13.svg +5 -0
  55. package/public/decor/decor-14.svg +7 -0
  56. package/public/decor/decor-15.svg +10 -0
  57. package/public/decor/decor-16.svg +9 -0
  58. package/public/decor/decor-17.png +0 -0
  59. package/public/decor/decor-18.png +0 -0
  60. package/public/decor/decor-19.svg +5 -0
  61. package/public/decor/decor-2.png +0 -0
  62. package/public/decor/decor-3.svg +9 -0
  63. package/public/decor/decor-4.svg +31 -0
  64. package/public/decor/decor-5.png +0 -0
  65. package/public/decor/decor-6.png +0 -0
  66. package/public/decor/decor-7.png +0 -0
  67. package/public/decor/decor-8.svg +21 -0
  68. package/public/decor/decor-9.svg +38 -0
  69. package/public/favicon.svg +11 -0
  70. package/public/photos/photo-1.png +0 -0
  71. package/public/photos/photo-10.png +0 -0
  72. package/public/photos/photo-2.png +0 -0
  73. package/public/photos/photo-3.png +0 -0
  74. package/public/photos/photo-4.png +0 -0
  75. package/public/photos/photo-5.png +0 -0
  76. package/public/photos/photo-6.png +0 -0
  77. package/public/photos/photo-7.png +0 -0
  78. package/public/photos/photo-8.png +0 -0
  79. package/public/photos/photo-9.png +0 -0
  80. package/setup/main.ts +3 -0
  81. package/setup/shiki.ts +10 -0
  82. package/setup/vite-plugins.ts +106 -0
  83. package/slidev-theme-practicum.png +0 -0
  84. package/slidev-theme-practicum.svg +102 -0
  85. package/styles/example.css +0 -0
  86. package/styles/index.css +192 -0
  87. package/styles/vars.css +119 -0
  88. package/types/slidev-client.d.ts +15 -0
package/example.md ADDED
@@ -0,0 +1,786 @@
1
+ ---
2
+ theme: ./
3
+ title: Яндекс Практикум — справочная галерея
4
+ layout: cover
5
+ variant: grid
6
+ mode: dark
7
+ tone: blue
8
+ themeConfig:
9
+ deckTitle: 'Как делать слайды в стиле Практикума'
10
+ debugGrid: false
11
+ ---
12
+
13
+ <Slot role="primary" surface="dark" margin="4" gap="4">
14
+ <Text as="h1" size="7">Как делать слайды в стиле Практикума</Text>
15
+ <Text size="3" align="end" muted>
16
+ Эта колода — самопример: каждый слайд показывает свою задачу, а исходник работает как готовый шаблон для копирования.
17
+ </Text>
18
+ </Slot>
19
+
20
+ <Slot
21
+ role="media"
22
+ surface="color"
23
+ tone="green"
24
+ :decor="{ meaning: 'cover', tone: 'green', color: 'var(--theme-color-light-0)' }"
25
+ />
26
+
27
+ <Slot
28
+ role="media"
29
+ surface="dark"
30
+ :decor="{ meaning: 'cover', tone: 'green', color: 'var(--theme-color-green-0)' }"
31
+ />
32
+
33
+ <Slot
34
+ role="media"
35
+ :decor="{ meaning: 'workspace', tone: 'blue', position: '50% 10%', zoom: 1.5 }"
36
+ />
37
+
38
+ ---
39
+ layout: cover
40
+ variant: grid
41
+ mode: dark
42
+ tone: blue
43
+ ---
44
+
45
+ <Slot role="primary" surface="dark" margin="4" gap="4">
46
+ <Text as="h1" size="7">Стандартный вход с триптихом справа</Text>
47
+ <Text size="3" align="end" muted>
48
+ Заголовок занимает левую половину, а три квадратных слота держат настроение раздела. Берите для большинства разделов: спокойно, но фирменно.
49
+ </Text>
50
+ </Slot>
51
+
52
+ <Slot
53
+ role="media"
54
+ surface="color"
55
+ tone="blue"
56
+ :decor="{ meaning: 'cover', tone: 'blue', color: 'var(--theme-color-light-0)' }"
57
+ />
58
+
59
+ <Slot
60
+ role="media"
61
+ :decor="{ meaning: 'workspace', tone: 'blue', position: '50% 44%', zoom: 1.06 }"
62
+ />
63
+
64
+ <Slot
65
+ role="media"
66
+ surface="dark"
67
+ :decor="{ meaning: 'cover', tone: 'blue', color: 'var(--theme-color-blue-0)' }"
68
+ />
69
+
70
+ ---
71
+ layout: cover
72
+ variant: grid-balanced
73
+ mode: light
74
+ tone: orange
75
+ ---
76
+
77
+ <Slot role="primary" surface="dark" margin="4" gap="4">
78
+ <Text as="h1" size="7">Несколько равноправных опор</Text>
79
+ <Text size="3" align="end" muted>
80
+ Высота нижнего блока выровнена с двумя верхними. Используйте, когда у темы нет одной центральной картинки и важно держать ритм.
81
+ </Text>
82
+ </Slot>
83
+
84
+ <Slot
85
+ role="media"
86
+ surface="color"
87
+ tone="orange"
88
+ :decor="{ meaning: 'cover', tone: 'orange', zoom: 4, color: 'var(--theme-color-light-0)' }"
89
+ />
90
+
91
+ <Slot
92
+ role="media"
93
+ :decor="{ meaning: 'home', tone: 'orange', position: '50% 0%', zoom: 1.2 }"
94
+ />
95
+
96
+ <Slot
97
+ role="media"
98
+ surface="tint"
99
+ tone="orange"
100
+ :decor="{ id: 'decor-support-raster-02' }"
101
+ />
102
+
103
+ ---
104
+ layout: cover
105
+ variant: banner
106
+ mode: light
107
+ tone: orange
108
+ ---
109
+
110
+ <Slot role="primary" surface="light" margin="4" gap="4">
111
+ <Text as="h1" size="7">Когда нужен широкий вход</Text>
112
+ <Text size="3">
113
+ Заголовок на полную ширину сразу заявляет тему. Внизу — три равные опоры, которые держат визуальный ритм без конкуренции с заголовком.
114
+ </Text>
115
+ </Slot>
116
+
117
+ <Slot
118
+ role="media"
119
+ surface="color"
120
+ tone="orange"
121
+ :decor="{ meaning: 'support', tone: 'orange', zoom: 1.3, color: 'var(--theme-color-light-0)' }"
122
+ />
123
+
124
+ <Slot
125
+ role="media"
126
+ :decor="{ meaning: 'workspace', tone: 'blue', position: '50% 44%', zoom: 1.08 }"
127
+ />
128
+
129
+ <Slot
130
+ role="media"
131
+ surface="dark"
132
+ :decor="{ id: 'decor-cover-vertical-01', rotate: '90deg', zoom: 1.45, color: 'var(--theme-color-orange-0)' }"
133
+ />
134
+
135
+ ---
136
+ layout: cover
137
+ variant: signal
138
+ mode: dark
139
+ tone: blue
140
+ ---
141
+
142
+ <Slot role="primary" surface="light" margin="4" gap="4">
143
+ <Text as="h1" size="7">Сильный тезис просит контраста</Text>
144
+ <Text size="3" align="end" muted>
145
+ Слева — широкая зона текста, справа узкий тёмный столбец. Композиция останавливает внимание и задаёт темп раздела.
146
+ </Text>
147
+ </Slot>
148
+
149
+ <Slot
150
+ role="media"
151
+ surface="light"
152
+ :decor="{ meaning: 'signal', tone: 'blue', color: 'var(--theme-color-blue-0)' }"
153
+ />
154
+
155
+ <Slot
156
+ role="media"
157
+ surface="color"
158
+ tone="blue"
159
+ :decor="{ meaning: 'support', tone: 'blue', position: '106%', zoom: 0.95, color: 'var(--theme-color-light-0)' }"
160
+ />
161
+
162
+ <Slot
163
+ role="media"
164
+ :decor="{ meaning: 'outdoor', tone: 'blue', position: '52% 42%', zoom: 1.05 }"
165
+ />
166
+
167
+ ---
168
+ layout: cover
169
+ variant: split-media-triptych
170
+ mode: light
171
+ tone: green
172
+ ---
173
+
174
+ <Slot role="primary" surface="dark" margin="4" gap="4">
175
+ <Text as="h1" size="7">Когда заголовку нужен запас воздуха</Text>
176
+ <Text size="3" align="end" muted>
177
+ Текст занимает левые две трети до восьмой колонки, а триптих справа остаётся как смысловая поддержка. Берите, когда главное — длинная формулировка.
178
+ </Text>
179
+ </Slot>
180
+
181
+ <Slot
182
+ role="media"
183
+ surface="color"
184
+ tone="green"
185
+ :decor="{ meaning: 'cover', tone: 'green', zoom: 3.5, color: 'var(--theme-color-light-0)' }"
186
+ />
187
+
188
+ <Slot
189
+ role="media"
190
+ :decor="{ meaning: 'campus', tone: 'green', position: '50% 50%' }"
191
+ />
192
+
193
+ <Slot
194
+ role="media"
195
+ surface="dark"
196
+ :decor="{ meaning: 'support', tone: 'green', zoom: 1.5, color: 'var(--theme-color-green-0)' }"
197
+ />
198
+
199
+ ---
200
+ layout: collection
201
+ variant: agenda
202
+ mode: color
203
+ tone: orange
204
+ decor:
205
+ meaning: agenda
206
+ tone: orange
207
+ ---
208
+
209
+ # Архетипы слайдов
210
+
211
+ - Обложка — пять входов в раздел
212
+ - Поясняющий слайд — иерархия и опоры
213
+ - Сообщение — пауза, цитата, финал
214
+ - Коллекция — оглавление, таймлайн, метрики
215
+ - Большие факты — заголовок и три числа
216
+ - Ручная сетка — нестандартный коллаж
217
+
218
+ ---
219
+ layout: collection
220
+ variant: agenda
221
+ mode: color
222
+ tone: blue
223
+ decor:
224
+ meaning: agenda
225
+ tone: blue
226
+ ---
227
+
228
+ # Параметры слайда
229
+
230
+ - Фон — светлый, тёмный, цветной
231
+ - Пять акцентных цветов
232
+ - Поверхность слота — карточка внутри
233
+ - Поля и ритм внутри слота
234
+ - Декор — картинка под смысл
235
+ - Шапка — показать или спрятать
236
+
237
+ ---
238
+ layout: explainer
239
+ variant: title-supports
240
+ ---
241
+
242
+ # Сначала задача, потом макет
243
+
244
+ - Слайд — это смысловой кадр: один тезис, одно сравнение или одна метрика.
245
+ - Архетип говорит, как этот кадр устроен: например, «заголовок и три аргумента».
246
+ - Шаблон даёт готовые архетипы и просит выбрать форму, прежде чем писать текст.
247
+
248
+ ---
249
+ layout: explainer
250
+ variant: definition
251
+ label: '#Определение'
252
+ ---
253
+
254
+ # Архетип слайда
255
+
256
+ именованная схема расположения слотов внутри лейаута, под которую заранее подобран ритм текста, отступов и поверхностей
257
+
258
+ ---
259
+ layout: explainer
260
+ variant: title-supports
261
+ ---
262
+
263
+ # Заголовок и три коротких аргумента
264
+
265
+ - Самая рабочая лошадка: одна мысль слева и три аргумента справа.
266
+ - Поддержки приглушены, чтобы заголовок оставался главным.
267
+ - Берите для правил, чек-листов и кратких объяснений.
268
+
269
+ ---
270
+ layout: explainer
271
+ variant: title-supports-bottom-muted
272
+ ---
273
+
274
+ # Заголовок и две приглушённые опоры
275
+
276
+ - Контекст или ограничение: «учитывайте, что» или «работает, если».
277
+ - Уточнение или вывод: «поэтому» или «в итоге это даёт».
278
+
279
+ ---
280
+ layout: explainer
281
+ variant: title-supports-bottom-plain
282
+ ---
283
+
284
+ # Когда нужны два самостоятельных абзаца
285
+
286
+ - Этот вариант снимает приглушение с нижних опор. Каждый абзац читается как самостоятельный текст: его не воспринимают как «второстепенный к заголовку», а ставят рядом по весу.
287
+ - Берите слайд, когда тезис распадается на два независимых направления: например, «что включить» и «чего избегать», «теория» и «практика», «причина» и «следствие». Третий блок не нужен — два аргумента уже задают сильную смысловую пару.
288
+
289
+ ---
290
+ layout: explainer
291
+ variant: title-body
292
+ ---
293
+
294
+ # Когда нужен один развёрнутый текст
295
+
296
+ Этот вариант нужен, когда мысль не разбирается тремя короткими пунктами. Слева остаётся заголовок, справа можно положить несколько абзацев, список и при необходимости подытожить выводом.
297
+
298
+ - Сначала называйте контекст и почему он важен.
299
+ - Затем показывайте порядок рассуждения или ограничение.
300
+ - В конце оставляйте вывод, который готовит следующий слайд.
301
+
302
+ ---
303
+ layout: message
304
+ variant: centered
305
+ mode: light
306
+ ---
307
+
308
+ # Поставьте паузу: оставьте на слайде один тезис
309
+
310
+ ---
311
+ layout: message
312
+ variant: quote
313
+ mode: light
314
+ person:
315
+ name: Константин Константинопольский
316
+ title: наставник
317
+ avatar: /photos/photo-3.png
318
+ avatar-position: '50% 38%'
319
+ avatar-zoom: 1.04
320
+ ---
321
+
322
+ > Цитата работает, когда внешний голос усиливает тезис.
323
+
324
+ ---
325
+ layout: collection
326
+ variant: agenda
327
+ mode: color
328
+ tone: green
329
+ decor:
330
+ meaning: agenda
331
+ tone: green
332
+ ---
333
+
334
+ # Слайд-агенда
335
+
336
+ - Задаёт тему
337
+ - Ведёт по шагам
338
+ - До 7 пунктов
339
+
340
+ ---
341
+ layout: collection
342
+ variant: timeline
343
+ items:
344
+ - year: '2021'
345
+ body: Самая первая версия шаблонов
346
+ - year: '2024'
347
+ body: Текущая графическая система
348
+ - year: '2026'
349
+ body: Slidev-шаблоны для использования с ИИ
350
+ active: true
351
+ ---
352
+
353
+ # Эволюция шаблона
354
+
355
+ Подсветка одной даты подсказывает, где мы сейчас, остальные годы остаются спокойным контекстом
356
+
357
+ ---
358
+ layout: collection
359
+ variant: timeline
360
+ items:
361
+ - year: 'март'
362
+ body: Согласовать задачу курса
363
+ - year: 'апрель'
364
+ body: Собрать черновик модулей
365
+ - year: 'май'
366
+ body: Проверить темп на занятии
367
+ - year: 'июнь'
368
+ body: Подготовить повторное использование
369
+ ---
370
+
371
+ # План подготовки курса
372
+
373
+ Когда подсветки нет, все шаги читаются как равноценные — это календарный маршрут, а не «мы здесь»
374
+
375
+ ---
376
+ layout: collection
377
+ variant: points
378
+ arrangement: trio
379
+ tone: green
380
+ decor:
381
+ meaning: rules
382
+ tone: green
383
+ fit: contain
384
+ position: right top
385
+ anchor: right top
386
+ x: 20%
387
+ y: 20%
388
+ zoom: 2.6
389
+ ---
390
+
391
+ # Зелёный тон: подтверждение
392
+
393
+ 1. Показывайте готовность, прогресс или безопасный статус
394
+ 2. Держите формулировки спокойными
395
+ 3. Не используйте зелёный для тревожных сообщений
396
+
397
+ ---
398
+ layout: collection
399
+ variant: points
400
+ arrangement: trio
401
+ tone: blue
402
+ decor:
403
+ meaning: rules
404
+ tone: blue
405
+ fit: contain
406
+ position: right top
407
+ anchor: right top
408
+ x: 20%
409
+ y: 20%
410
+ zoom: 2.6
411
+ ---
412
+
413
+ # Синий тон: рабочий процесс
414
+
415
+ 1. Объясняйте маршруты, инструкции и нейтральные состояния
416
+ 2. Помогайте сравнивать варианты без давления
417
+ 3. Сохраняйте цвет как фон для чтения
418
+
419
+ ---
420
+ layout: collection
421
+ variant: points
422
+ arrangement: trio
423
+ tone: orange
424
+ decor:
425
+ meaning: rules
426
+ tone: orange
427
+ fit: contain
428
+ position: right top
429
+ anchor: right top
430
+ x: 20%
431
+ y: 20%
432
+ zoom: 2.6
433
+ ---
434
+
435
+ # Оранжевый тон: акцент
436
+
437
+ 1. Выносите важный поворот или предупреждение
438
+ 2. Не окрашивайте им весь ряд одинаковых фактов
439
+ 3. Оставляйте рядом достаточно воздуха
440
+
441
+ ---
442
+ layout: collection
443
+ variant: metrics
444
+ arrangement: featured-media
445
+ decor:
446
+ id: decor-rules-wide-01
447
+ opacity: 0.85
448
+ media:
449
+ src: /photos/photo-5.png
450
+ fit: cover
451
+ position: '48% 44%'
452
+ zoom: 1.08
453
+ metrics:
454
+ - value: '64%'
455
+ body: главная метрика читается крупно как вывод
456
+ featured: true
457
+ - value: '18'
458
+ body: вторая метрика даёт масштаб
459
+ - value: '5'
460
+ body: третья метрика подтверждает охват
461
+ ---
462
+
463
+ ---
464
+ layout: collection
465
+ variant: metrics
466
+ arrangement: featured-copy
467
+ media:
468
+ src: /photos/photo-5.png
469
+ fit: cover
470
+ position: '48% 44%'
471
+ zoom: 1.08
472
+ metrics:
473
+ - value: '60%'
474
+ body: главное число живёт во всю ширину карточки
475
+ featured: true
476
+ - value: '24%'
477
+ body: контекст уходит вниз
478
+ - value: '16%'
479
+ body: деталь занимает минимум места
480
+ ---
481
+
482
+ ---
483
+ layout: collection
484
+ variant: metrics
485
+ arrangement: featured-copy-split-media
486
+ media:
487
+ - src: /photos/photo-5.png
488
+ fit: cover
489
+ position: '48% 44%'
490
+ zoom: 1.08
491
+ - src: /photos/photo-6.png
492
+ fit: cover
493
+ position: '50% 40%'
494
+ zoom: 1.04
495
+ ---
496
+
497
+ - ×2
498
+ - две фотографии бок о бок усиливают «до и после»
499
+ - 18
500
+ - минут до подсказок
501
+ - 9
502
+ - минут после подсказок
503
+
504
+ ---
505
+ layout: collection
506
+ variant: facts-stacked
507
+ mode: dark
508
+ ---
509
+
510
+ # Три факта как вертикальная опора
511
+
512
+ Когда нужно отступить от равных карточек, этот архетип собирает заголовок и три факта без ручных координат.
513
+
514
+ - 33%
515
+ - отдано каждому из чисел
516
+ - 4
517
+ - уровня иерархии размеров текста
518
+ - иногда
519
+ - факты могут быть короткими словами
520
+
521
+ ---
522
+ layout: collection
523
+ variant: facts-trio
524
+ mode: light
525
+ tone: blue
526
+ ---
527
+
528
+ # Заголовок поддержанный тремя одноранговыми фактами
529
+
530
+ Берите этот вариант, когда тезис подкрепляется тремя сопоставимыми числами и важна равная значимость
531
+
532
+ - 33%
533
+ - отдано каждому из чисел
534
+ - 4
535
+ - уровня иерархии размеров текста
536
+ - иногда
537
+ - факты могут быть короткими словами
538
+
539
+ ---
540
+ layout: collection
541
+ variant: facts-featured
542
+ mode: light
543
+ tone: blue
544
+ ---
545
+
546
+ # Главное число и две поддержки
547
+
548
+ Когда один факт несёт основную нагрузку, отдайте ему половину слайда — мелкие подтверждения уйдут к правому краю
549
+
550
+ - 50%
551
+ - отдано главному числу
552
+ - 25%
553
+ - каждому вспомогательному факту, возможно с более длинным описанием
554
+ - 2
555
+ - вспомогательных факта
556
+
557
+ ---
558
+ layout: explainer
559
+ variant: title-supports
560
+ mode: light
561
+ ---
562
+
563
+ # Один текстовый слайд держит один вывод
564
+
565
+ - Заголовок формулирует мысль, которую зритель должен унести.
566
+ - Поддерживающий текст раскрывает только эту мысль, без второй темы внутри.
567
+ - Цвета и декор объясняйте на слайдах, где они действительно видны.
568
+
569
+ ---
570
+ layout: none
571
+ mode: light
572
+ header: default
573
+ ---
574
+
575
+ <Slot area="2 / 1 / 6 / -1" gap="2">
576
+ <Text size="6">Акцентный цвет — пять настроений</Text>
577
+ <Text size="3" muted>
578
+ Цвета фона и акцента работают независимо: можно держать графитовый фон с синими акцентами или красить весь слайд в выбранный цвет.
579
+ </Text>
580
+ </Slot>
581
+
582
+ <Slot area="6 / 1 / 9 / 5" surface="color" tone="blue" margin="3">
583
+ <Text size="4">1</Text>
584
+ <Text size="4" align="end">синий</Text>
585
+ </Slot>
586
+
587
+ <Slot area="6 / 5 / 9 / 9" surface="color" tone="orange" margin="3">
588
+ <Text size="4">2</Text>
589
+ <Text size="4" align="end">оранжевый</Text>
590
+ </Slot>
591
+
592
+ <Slot area="6 / 9 / 9 / -1" surface="color" tone="green" margin="3">
593
+ <Text size="4">3</Text>
594
+ <Text size="4" align="end">зелёный</Text>
595
+ </Slot>
596
+
597
+ <Slot area="9 / 1 / -1 / 7" surface="color" tone="red" margin="3">
598
+ <Text size="4">4</Text>
599
+ <Text size="4" align="end">красный</Text>
600
+ </Slot>
601
+
602
+ <Slot area="9 / 7 / -1 / -1" surface="color" tone="yellow" margin="3">
603
+ <Text size="4">5</Text>
604
+ <Text size="4" align="end">жёлтый</Text>
605
+ </Slot>
606
+
607
+ ---
608
+ layout: none
609
+ mode: light
610
+ header: default
611
+ ---
612
+
613
+ <Slot area="2 / 1 / 6 / 7" surface="light" margin="4" gap="2">
614
+ <Text size="5">Светлая поверхность</Text>
615
+ <Text size="3">Нейтральная карточка: на тёмном слайде или в составной композиции держит спокойный тон.</Text>
616
+ </Slot>
617
+
618
+ <Slot area="2 / 7 / 6 / -1" surface="dark" margin="4" gap="2">
619
+ <Text size="5">Тёмная поверхность</Text>
620
+ <Text size="3" muted>Добавляет вес и держит контраст внутри светлого слайда.</Text>
621
+ </Slot>
622
+
623
+ <Slot area="6 / 1 / -1 / 7" surface="color" tone="orange" margin="4" gap="2">
624
+ <Text size="5">Цветная поверхность</Text>
625
+ <Text size="3">Слот целиком красится в текущий акцентный цвет — для смыслового выделения.</Text>
626
+ </Slot>
627
+
628
+ <Slot area="6 / 7 / -1 / -1" surface="tint" tone="blue" margin="4" gap="2">
629
+ <Text size="5">Приглушённый оттенок</Text>
630
+ <Text size="3">Бледная подложка под цвет акцента: читается как намёк, а не как акцент.</Text>
631
+ </Slot>
632
+
633
+ ---
634
+ layout: explainer
635
+ variant: title-body
636
+ ---
637
+
638
+ # Текстовый блок объясняет один контракт
639
+
640
+ Если слайд построен только на тексте, весь правый блок должен разбирать одну форму: что автор пишет в исходнике, как это читается и где заканчивается паттерн.
641
+
642
+ - Заголовок называет форму.
643
+ - Абзац раскрывает критерий выбора.
644
+ - Список фиксирует правила, а не новую тему.
645
+
646
+ ---
647
+ layout: none
648
+ mode: light
649
+ header: default
650
+ ---
651
+
652
+ <Slot area="2 / 1 / 5 / -1" gap="2">
653
+ <Text size="6">Один и тот же цвет, разный смысл</Text>
654
+ <Text size="3" muted>
655
+ Размер и тон у слотов одинаковые, а смысл — разный. Каталог достаёт из своих веток разные картинки и слоты получают совсем непохожие изображения.
656
+ </Text>
657
+ </Slot>
658
+
659
+ <Slot
660
+ area="5 / 1 / 11 / 7"
661
+ surface="light"
662
+ :decor="{ meaning: 'workspace', tone: 'blue' }"
663
+ />
664
+
665
+ <Slot
666
+ area="5 / 7 / 11 / -1"
667
+ surface="light"
668
+ :decor="{ meaning: 'home', tone: 'blue' }"
669
+ />
670
+
671
+ <Slot area="11 / 1 / -1 / 7" margin-top="2">
672
+ <Text size="3" muted>смысл: рабочее место</Text>
673
+ </Slot>
674
+
675
+ <Slot area="11 / 7 / -1 / -1" margin-top="2">
676
+ <Text size="3" muted>смысл: дом</Text>
677
+ </Slot>
678
+
679
+ ---
680
+ layout: none
681
+ mode: light
682
+ header: default
683
+ ---
684
+
685
+ <Slot area="2 / 1 / 5 / -1" gap="2">
686
+ <Text size="6">Один смысл, разные настроения цвета</Text>
687
+ <Text size="3" muted>
688
+ Все три слота просят картинку «поддержка», а различается только цвет настроения. Каталог уводит в разные ветки: меняется и сам кадр, и его акцент.
689
+ </Text>
690
+ </Slot>
691
+
692
+ <Slot
693
+ area="5 / 1 / 11 / 5"
694
+ surface="tint"
695
+ tone="blue"
696
+ :decor="{ meaning: 'support', tone: 'blue', color: 'var(--theme-color-blue-0)', opacity: 0.72 }"
697
+ />
698
+
699
+ <Slot
700
+ area="5 / 5 / 11 / 9"
701
+ surface="tint"
702
+ tone="orange"
703
+ :decor="{ meaning: 'support', tone: 'orange', opacity: 0.9 }"
704
+ />
705
+
706
+ <Slot
707
+ area="5 / 9 / 11 / -1"
708
+ surface="tint"
709
+ tone="green"
710
+ :decor="{ meaning: 'support', tone: 'green', color: 'var(--theme-color-green-0)', opacity: 0.72 }"
711
+ />
712
+
713
+ <Slot area="11 / 1 / -1 / 5" margin-top="2">
714
+ <Text size="3" muted>цвет: синий</Text>
715
+ </Slot>
716
+
717
+ <Slot area="11 / 5 / -1 / 9" margin-top="2">
718
+ <Text size="3" muted>цвет: оранжевый</Text>
719
+ </Slot>
720
+
721
+ <Slot area="11 / 9 / -1 / -1" margin-top="2">
722
+ <Text size="3" muted>цвет: зелёный</Text>
723
+ </Slot>
724
+
725
+ ---
726
+ layout: explainer
727
+ variant: title-supports
728
+ ---
729
+
730
+ # Когда нужен предсказуемый результат
731
+
732
+ - Закрепите конкретную картинку — и слайд всегда получит её, без сюрпризов от автоподбора.
733
+ - Свои картинки регистрируйте в каталоге темы: у каждой записи указан смысл и подходящие цвета.
734
+ - Если важно настроение, а не точный кадр — оставляйте автоподбор, он именно под это и сделан.
735
+
736
+ ---
737
+ layout: explainer
738
+ variant: title-body
739
+ ---
740
+
741
+ # Когда нужна ручная сетка
742
+
743
+ Если задача не укладывается ни в один типовой архетип, переходите на ручную сетку. Слайд даёт вам чистые 12 колонок и шапку, а решения о расположении вы принимаете сами.
744
+
745
+ - Каждому слоту дайте координаты в сетке — четыре числа от строки и колонки до их пары.
746
+ - В ручной сетке нет ролей — слоты различаются только координатами.
747
+ - Поверхности, поля и декор у слотов работают точно так же, как в готовых архетипах.
748
+
749
+ ---
750
+ layout: none
751
+ mode: light
752
+ header: default
753
+ ---
754
+
755
+ <Slot area="1 / 1 / 7 / 7" surface="light" margin="4">
756
+ <Text size="6-7">Нестандартный коллаж</Text>
757
+ </Slot>
758
+
759
+ <Slot area="1 / 7 / 7 / -1" surface="light" margin="4">
760
+ <Text size="5">Когда типовой слайд не выдерживает смысловую задачу, собирайте композицию из слотов вручную</Text>
761
+ </Slot>
762
+
763
+ <Slot area="7 / 1 / -1 / 7" surface="light" margin="4">
764
+ <Text size="2-3">
765
+ Текст, цвет и декоративное фото держат один визуальный тон. Главное — не смешивать архетипы внутри одного слайда.
766
+ </Text>
767
+ </Slot>
768
+
769
+ <Slot area="7 / 7 / -1 / 10" surface="light">
770
+ <Image src="/photos/photo-5.png" fit="cover" position="52% 40%" zoom="1.08" />
771
+ </Slot>
772
+
773
+ <Slot area="7 / 10 / -1 / -1" surface="color" tone="blue" margin="3" gap="2">
774
+ <Text size="4-7">Связка</Text>
775
+ <Text size="2-6" priority="2" muted>между текстом, цветом и декором</Text>
776
+ </Slot>
777
+
778
+ ---
779
+ layout: message
780
+ variant: closing
781
+ mode: dark
782
+ tone: blue
783
+ logo: full
784
+ ---
785
+
786
+ # Делайте меньше, но точнее