update
8
assets/generated/01-title-food-chain.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="01-title-food-chain.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Титульная картинка</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Вампирическая пищевая цепочка: элита, отбор и человечество как ресурс</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 813 B |
8
assets/generated/02-medieval-origin.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="02-medieval-origin.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Происхождение вируса</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">XII-XIV века: войны, эпидемии и скрытое распространение SNV-12</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 790 B |
8
assets/generated/03-vampire-classes.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="03-vampire-classes.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Классы вампиров</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Молодой носитель, старший адаптант и гемарх в одной иерархии</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 789 B |
8
assets/generated/04-failed-infection.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="04-failed-infection.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Неудачное заражение</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Феррогемный каскад и термогемолитический коллапс</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 779 B |
8
assets/generated/05-recognize-vampire.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="05-recognize-vampire.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Как распознать вампира</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Судебно-медицинский плакат с внешними и поведенческими маркерами</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 814 B |
8
assets/generated/06-blood-economy.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="06-blood-economy.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Экономика качественной крови</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Массовая, стабильная, пиковая и династическая кровь как ресурс</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 816 B |
8
assets/generated/07-artificial-blood.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="07-artificial-blood.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Почему искусственная кровь не подходит</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Сравнение живой сигнатуры крови и стерильного суррогата</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 826 B |
8
assets/generated/08-hidden-donor-market.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="08-hidden-donor-market.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Тайный рынок доноров</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Клиники, биобанки, школы, клубы и логистика к верхушке</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 789 B |
8
assets/generated/09-donor-house.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="09-donor-house.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Донорский дом</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Элитный пансион как скрытая инфраструктура премиальных доноров</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 788 B |
8
assets/generated/10-blood-etiquette.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="10-blood-etiquette.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Кровяной этикет элиты</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Аристократический ритуал оценки донора как дегустация вина</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 799 B |
8
assets/generated/11-feeding-zones-map.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="11-feeding-zones-map.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Геополитика кормовых зон</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">Резервуары населения, коридоры, убежища и экспериментальные территории</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 829 B |
8
assets/generated/12-food-chain-chart.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="12-food-chain-chart.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Пищевая цепочка</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">От человека через сортировку и рынок качества к гемархам</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 783 B |
BIN
assets/generated/13-medieval-europe-map.png
Normal file
|
After Width: | Height: | Size: 3.4 MiB |
8
assets/generated/13-medieval-europe-map.signed.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
|
||||||
|
<rect width="1920" height="1080" fill="#130b0d"/>
|
||||||
|
<image href="13-medieval-europe-map.png" x="0" y="0" width="1920" height="1080" preserveAspectRatio="xMidYMid slice"/>
|
||||||
|
<rect x="0" y="0" width="1920" height="176" fill="#130b0d" opacity="0.86"/>
|
||||||
|
<rect x="0" y="176" width="1920" height="4" fill="#c7a56a" opacity="0.95"/>
|
||||||
|
<text x="76" y="78" font-family="Aptos Display, Arial, sans-serif" font-size="48" font-weight="700" fill="#fff8f2">Средневековье создаёт идеальную среду</text>
|
||||||
|
<text x="78" y="130" font-family="Aptos, Arial, sans-serif" font-size="27" fill="#f5e6d3">XII-XIV века: войны, миграции, антисанитария, эпидемии</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 816 B |
@@ -4,37 +4,53 @@
|
|||||||
|
|
||||||
- 01-title-food-chain
|
- 01-title-food-chain
|
||||||
- PNG: `01-title-food-chain.png`
|
- PNG: `01-title-food-chain.png`
|
||||||
|
- Подписанная версия: `01-title-food-chain.signed.svg`
|
||||||
- Подпись: Титульная картинка — Вампирическая пищевая цепочка: элита, отбор и человечество как ресурс
|
- Подпись: Титульная картинка — Вампирическая пищевая цепочка: элита, отбор и человечество как ресурс
|
||||||
- 02-medieval-origin
|
- 02-medieval-origin
|
||||||
- PNG: `02-medieval-origin.png`
|
- PNG: `02-medieval-origin.png`
|
||||||
|
- Подписанная версия: `02-medieval-origin.signed.svg`
|
||||||
- Подпись: Происхождение вируса — XII-XIV века: войны, эпидемии и скрытое распространение SNV-12
|
- Подпись: Происхождение вируса — XII-XIV века: войны, эпидемии и скрытое распространение SNV-12
|
||||||
- 03-vampire-classes
|
- 03-vampire-classes
|
||||||
- PNG: `03-vampire-classes.png`
|
- PNG: `03-vampire-classes.png`
|
||||||
|
- Подписанная версия: `03-vampire-classes.signed.svg`
|
||||||
- Подпись: Классы вампиров — Молодой носитель, старший адаптант и гемарх в одной иерархии
|
- Подпись: Классы вампиров — Молодой носитель, старший адаптант и гемарх в одной иерархии
|
||||||
- 04-failed-infection
|
- 04-failed-infection
|
||||||
- PNG: `04-failed-infection.png`
|
- PNG: `04-failed-infection.png`
|
||||||
|
- Подписанная версия: `04-failed-infection.signed.svg`
|
||||||
- Подпись: Неудачное заражение — Феррогемный каскад и термогемолитический коллапс
|
- Подпись: Неудачное заражение — Феррогемный каскад и термогемолитический коллапс
|
||||||
- 05-recognize-vampire
|
- 05-recognize-vampire
|
||||||
- PNG: `05-recognize-vampire.png`
|
- PNG: `05-recognize-vampire.png`
|
||||||
|
- Подписанная версия: `05-recognize-vampire.signed.svg`
|
||||||
- Подпись: Как распознать вампира — Судебно-медицинский плакат с внешними и поведенческими маркерами
|
- Подпись: Как распознать вампира — Судебно-медицинский плакат с внешними и поведенческими маркерами
|
||||||
- 06-blood-economy
|
- 06-blood-economy
|
||||||
- PNG: `06-blood-economy.png`
|
- PNG: `06-blood-economy.png`
|
||||||
|
- Подписанная версия: `06-blood-economy.signed.svg`
|
||||||
- Подпись: Экономика качественной крови — Массовая, стабильная, пиковая и династическая кровь как ресурс
|
- Подпись: Экономика качественной крови — Массовая, стабильная, пиковая и династическая кровь как ресурс
|
||||||
- 07-artificial-blood
|
- 07-artificial-blood
|
||||||
- PNG: `07-artificial-blood.png`
|
- PNG: `07-artificial-blood.png`
|
||||||
|
- Подписанная версия: `07-artificial-blood.signed.svg`
|
||||||
- Подпись: Почему искусственная кровь не подходит — Сравнение живой сигнатуры крови и стерильного суррогата
|
- Подпись: Почему искусственная кровь не подходит — Сравнение живой сигнатуры крови и стерильного суррогата
|
||||||
- 08-hidden-donor-market
|
- 08-hidden-donor-market
|
||||||
- PNG: `08-hidden-donor-market.png`
|
- PNG: `08-hidden-donor-market.png`
|
||||||
|
- Подписанная версия: `08-hidden-donor-market.signed.svg`
|
||||||
- Подпись: Тайный рынок доноров — Клиники, биобанки, школы, клубы и логистика к верхушке
|
- Подпись: Тайный рынок доноров — Клиники, биобанки, школы, клубы и логистика к верхушке
|
||||||
- 09-donor-house
|
- 09-donor-house
|
||||||
- PNG: `09-donor-house.png`
|
- PNG: `09-donor-house.png`
|
||||||
|
- Подписанная версия: `09-donor-house.signed.svg`
|
||||||
- Подпись: Донорский дом — Элитный пансион как скрытая инфраструктура премиальных доноров
|
- Подпись: Донорский дом — Элитный пансион как скрытая инфраструктура премиальных доноров
|
||||||
- 10-blood-etiquette
|
- 10-blood-etiquette
|
||||||
- PNG: `10-blood-etiquette.png`
|
- PNG: `10-blood-etiquette.png`
|
||||||
|
- Подписанная версия: `10-blood-etiquette.signed.svg`
|
||||||
- Подпись: Кровяной этикет элиты — Аристократический ритуал оценки донора как дегустация вина
|
- Подпись: Кровяной этикет элиты — Аристократический ритуал оценки донора как дегустация вина
|
||||||
- 11-feeding-zones-map
|
- 11-feeding-zones-map
|
||||||
- PNG: `11-feeding-zones-map.png`
|
- PNG: `11-feeding-zones-map.png`
|
||||||
|
- Подписанная версия: `11-feeding-zones-map.signed.svg`
|
||||||
- Подпись: Геополитика кормовых зон — Резервуары населения, коридоры, убежища и экспериментальные территории
|
- Подпись: Геополитика кормовых зон — Резервуары населения, коридоры, убежища и экспериментальные территории
|
||||||
- 12-food-chain-chart
|
- 12-food-chain-chart
|
||||||
- PNG: `12-food-chain-chart.png`
|
- PNG: `12-food-chain-chart.png`
|
||||||
|
- Подписанная версия: `12-food-chain-chart.signed.svg`
|
||||||
- Подпись: Пищевая цепочка — От человека через сортировку и рынок качества к гемархам
|
- Подпись: Пищевая цепочка — От человека через сортировку и рынок качества к гемархам
|
||||||
|
- 13-medieval-europe-map
|
||||||
|
- PNG: `13-medieval-europe-map.png`
|
||||||
|
- Подписанная версия: `13-medieval-europe-map.signed.svg`
|
||||||
|
- Подпись: Средневековье создаёт идеальную среду — XII-XIV века: войны, миграции, антисанитария, эпидемии
|
||||||
|
|||||||
@@ -26,49 +26,44 @@ pptx.subject = 'Псевдонаучная теория о гемозависи
|
|||||||
pptx.title = 'Пищевая цепочка: от тебя до теневого правительства';
|
pptx.title = 'Пищевая цепочка: от тебя до теневого правительства';
|
||||||
pptx.lang = 'ru-RU';
|
pptx.lang = 'ru-RU';
|
||||||
pptx.theme = {
|
pptx.theme = {
|
||||||
headFontFace: 'Aptos Display',
|
headFontFace: 'Georgia',
|
||||||
bodyFontFace: 'Aptos',
|
bodyFontFace: 'Aptos',
|
||||||
lang: 'ru-RU'
|
lang: 'ru-RU'
|
||||||
};
|
};
|
||||||
|
|
||||||
const C = {
|
const C = {
|
||||||
bgDark: '130B0D',
|
bgDark: '130B0D',
|
||||||
bgLight: 'F4EEE7',
|
bgLight: 'F3EADF',
|
||||||
card: 'FFF8F2',
|
card: 'FFF7EE',
|
||||||
red: '7A1623',
|
red: '7A1623',
|
||||||
red2: 'A42A37',
|
red2: 'A42A37',
|
||||||
text: '24181A',
|
text: '24181A',
|
||||||
cream: 'F5E6D3',
|
cream: 'F5E6D3',
|
||||||
gold: 'C7A56A',
|
gold: 'C7A56A',
|
||||||
muted: '705A5D',
|
muted: '705A5D',
|
||||||
line: 'D8C2B8',
|
|
||||||
white: 'FFFFFF',
|
white: 'FFFFFF',
|
||||||
ink: '2A1A1D'
|
ink: '2A1A1D',
|
||||||
|
brown: '4A3327'
|
||||||
};
|
};
|
||||||
|
|
||||||
function baseLight(slide, title, tag = 'Псевдонаучная реконструкция') {
|
function footer(slide, n, dark = false) {
|
||||||
|
slide.addText(String(n).padStart(2, '0'), {
|
||||||
|
x: 12.42, y: 7.02, w: 0.4, h: 0.18,
|
||||||
|
fontSize: 10, color: dark ? 'B89B82' : C.muted,
|
||||||
|
align: 'right', margin: 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function baseTextSlide(slide, title, tag = 'Псевдонаучная реконструкция') {
|
||||||
slide.background = { color: C.bgLight };
|
slide.background = { color: C.bgLight };
|
||||||
slide.addShape(pptx.ShapeType.rect, { x: 0, y: 0, w: 13.333, h: 0.45, fill: { color: C.red }, line: { color: C.red } });
|
slide.addShape(pptx.ShapeType.rect, { x: 0, y: 0, w: 13.333, h: 0.42, fill: { color: C.red }, line: { color: C.red } });
|
||||||
slide.addText(title, { x: 0.55, y: 0.56, w: 9.2, h: 0.4, fontFace: 'Aptos Display', fontSize: 27, bold: true, color: C.ink, margin: 0 });
|
slide.addText(title, { x: 0.62, y: 0.58, w: 8.8, h: 0.38, fontFace: 'Georgia', fontSize: 26, bold: true, color: C.ink, margin: 0 });
|
||||||
slide.addText(tag, { x: 10.2, y: 0.6, w: 2.4, h: 0.18, fontSize: 10, color: C.red2, italic: true, align: 'right', margin: 0 });
|
slide.addText(tag, { x: 10.0, y: 0.62, w: 2.65, h: 0.18, fontSize: 10, color: C.red2, italic: true, align: 'right', margin: 0 });
|
||||||
}
|
|
||||||
|
|
||||||
function baseDark(slide, title, subtitle = '') {
|
|
||||||
slide.background = { color: C.bgDark };
|
|
||||||
slide.addShape(pptx.ShapeType.rect, { x: 0, y: 0, w: 13.333, h: 7.5, fill: { color: C.bgDark }, line: { color: C.bgDark } });
|
|
||||||
slide.addText(title, { x: 0.9, y: 0.9, w: 8.8, h: 0.8, color: C.white, fontFace: 'Aptos Display', fontSize: 28, bold: true, margin: 0 });
|
|
||||||
if (subtitle) {
|
|
||||||
slide.addText(subtitle, { x: 0.92, y: 1.65, w: 7.7, h: 0.4, color: C.cream, fontSize: 17, italic: true, margin: 0 });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function footer(slide, n) {
|
|
||||||
slide.addText(String(n).padStart(2, '0'), { x: 12.45, y: 7.05, w: 0.35, h: 0.16, fontSize: 10, color: C.muted, align: 'right', margin: 0 });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function addBullets(slide, items, opts = {}) {
|
function addBullets(slide, items, opts = {}) {
|
||||||
const text = [];
|
const text = [];
|
||||||
items.forEach((item) => text.push({ text: item, options: { bullet: { indent: 16 }, breakLine: true } }));
|
items.forEach((item) => text.push({ text: item, options: { bullet: { indent: 14 }, breakLine: true } }));
|
||||||
slide.addText(text, {
|
slide.addText(text, {
|
||||||
x: opts.x ?? 0.9,
|
x: opts.x ?? 0.9,
|
||||||
y: opts.y ?? 1.6,
|
y: opts.y ?? 1.6,
|
||||||
@@ -82,53 +77,84 @@ function addBullets(slide, items, opts = {}) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function addCallout(slide, text, opts = {}) {
|
|
||||||
slide.addShape(pptx.ShapeType.roundRect, {
|
|
||||||
x: opts.x ?? 0.9,
|
|
||||||
y: opts.y ?? 5.8,
|
|
||||||
w: opts.w ?? 11.4,
|
|
||||||
h: opts.h ?? 0.6,
|
|
||||||
rectRadius: 0.05,
|
|
||||||
fill: { color: opts.fill ?? C.red },
|
|
||||||
line: { color: opts.fill ?? C.red }
|
|
||||||
});
|
|
||||||
slide.addText(text, {
|
|
||||||
x: (opts.x ?? 0.9) + 0.15,
|
|
||||||
y: (opts.y ?? 5.8) + 0.14,
|
|
||||||
w: (opts.w ?? 11.4) - 0.3,
|
|
||||||
h: 0.22,
|
|
||||||
align: 'center',
|
|
||||||
color: C.white,
|
|
||||||
fontSize: opts.fontSize ?? 21,
|
|
||||||
bold: true,
|
|
||||||
italic: opts.italic ?? true,
|
|
||||||
margin: 0
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function addCard(slide, x, y, w, h, title, body, accent = C.red2) {
|
function addCard(slide, x, y, w, h, title, body, accent = C.red2) {
|
||||||
slide.addShape(pptx.ShapeType.roundRect, { x, y, w, h, rectRadius: 0.06, fill: { color: C.card }, line: { color: accent, pt: 1.2 } });
|
slide.addShape(pptx.ShapeType.roundRect, { x, y, w, h, rectRadius: 0.06, fill: { color: C.card }, line: { color: accent, pt: 1.2 } });
|
||||||
slide.addText(title, { x: x + 0.18, y: y + 0.16, w: w - 0.36, h: 0.24, fontSize: 17, bold: true, color: C.red, margin: 0 });
|
slide.addText(title, { x: x + 0.18, y: y + 0.16, w: w - 0.36, h: 0.24, fontSize: 17, bold: true, color: C.red, margin: 0 });
|
||||||
slide.addText(body, { x: x + 0.18, y: y + 0.52, w: w - 0.36, h: h - 0.7, fontSize: 14.6, color: C.text, margin: 0.02, valign: 'mid' });
|
slide.addText(body, { x: x + 0.18, y: y + 0.52, w: w - 0.36, h: h - 0.7, fontSize: 14.6, color: C.text, margin: 0.02, valign: 'mid' });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1 Title
|
function addCallout(slide, text, opts = {}) {
|
||||||
{
|
slide.addShape(pptx.ShapeType.roundRect, {
|
||||||
const s = pptx.addSlide();
|
x: opts.x ?? 0.9,
|
||||||
s.background = { color: C.bgDark };
|
y: opts.y ?? 5.82,
|
||||||
s.addImage({ path: assets.title, x: 0, y: 0, w: 13.333, h: 7.5 });
|
w: opts.w ?? 11.5,
|
||||||
s.addShape(pptx.ShapeType.rect, { x: 0, y: 0, w: 13.333, h: 7.5, fill: { color: '120A0D', transparency: 34 }, line: { color: '120A0D', transparency: 100 } });
|
h: opts.h ?? 0.58,
|
||||||
s.addShape(pptx.ShapeType.roundRect, { x: 0.72, y: 0.82, w: 6.95, h: 5.25, rectRadius: 0.06, fill: { color: '1B1114', transparency: 15 }, line: { color: C.red2, pt: 1.1, transparency: 20 } });
|
rectRadius: 0.05,
|
||||||
s.addText('Пищевая цепочка:\nот тебя до теневого правительства', { x: 1.0, y: 1.15, w: 6.3, h: 1.5, color: C.white, fontFace: 'Aptos Display', fontSize: 25, bold: true, margin: 0 });
|
fill: { color: opts.fill ?? C.red },
|
||||||
s.addText('Расширенная версия: типы вампиров,\nкачественная кровь и скрытый рынок доноров', { x: 1.04, y: 2.95, w: 6.0, h: 0.75, color: C.cream, fontSize: 17.5, italic: true, margin: 0 });
|
line: { color: opts.fill ?? C.red }
|
||||||
s.addText('Клуб шапочек из фольги\nПсевдонаучный доклад в академическом стиле', { x: 1.04, y: 4.0, w: 4.9, h: 0.8, color: 'E0D0C4', fontSize: 16, margin: 0 });
|
});
|
||||||
footer(s, 1);
|
slide.addText(text, {
|
||||||
|
x: (opts.x ?? 0.9) + 0.14,
|
||||||
|
y: (opts.y ?? 5.82) + 0.13,
|
||||||
|
w: (opts.w ?? 11.5) - 0.28,
|
||||||
|
h: 0.23,
|
||||||
|
align: 'center', color: C.white,
|
||||||
|
fontSize: opts.fontSize ?? 20,
|
||||||
|
bold: true, italic: opts.italic ?? true, margin: 0
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2 Hypothesis
|
function fullImage(slide, imagePath) {
|
||||||
|
slide.background = { color: C.bgDark };
|
||||||
|
slide.addImage({ path: imagePath, x: 0, y: 0, w: 13.333, h: 7.5 });
|
||||||
|
}
|
||||||
|
|
||||||
|
function lightPlaque(slide, text, x, y, w, h, fontSize = 12, opts = {}) {
|
||||||
|
slide.addText(text, {
|
||||||
|
x, y, w, h,
|
||||||
|
fontFace: opts.fontFace ?? 'Georgia',
|
||||||
|
fontSize,
|
||||||
|
bold: opts.bold ?? false,
|
||||||
|
italic: opts.italic ?? false,
|
||||||
|
color: opts.color ?? C.brown,
|
||||||
|
align: opts.align ?? 'center',
|
||||||
|
valign: opts.valign ?? 'mid',
|
||||||
|
margin: opts.margin ?? 0.02,
|
||||||
|
breakLine: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function darkPlaque(slide, text, x, y, w, h, fontSize = 12, opts = {}) {
|
||||||
|
slide.addText(text, {
|
||||||
|
x, y, w, h,
|
||||||
|
fontFace: opts.fontFace ?? 'Georgia',
|
||||||
|
fontSize,
|
||||||
|
bold: opts.bold ?? false,
|
||||||
|
italic: opts.italic ?? false,
|
||||||
|
color: opts.color ?? C.cream,
|
||||||
|
align: opts.align ?? 'center',
|
||||||
|
valign: opts.valign ?? 'mid',
|
||||||
|
margin: opts.margin ?? 0.02,
|
||||||
|
breakLine: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1 title
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Гипотеза исследования');
|
fullImage(s, assets.title);
|
||||||
|
s.addShape(pptx.ShapeType.rect, { x: 0, y: 0, w: 13.333, h: 7.5, fill: { color: '120A0D', transparency: 34 }, line: { color: '120A0D', transparency: 100 } });
|
||||||
|
s.addShape(pptx.ShapeType.roundRect, { x: 0.72, y: 0.82, w: 6.95, h: 5.25, rectRadius: 0.06, fill: { color: '1B1114', transparency: 15 }, line: { color: C.red2, pt: 1.1, transparency: 20 } });
|
||||||
|
s.addText('Пищевая цепочка:\nот тебя до теневого правительства', { x: 1.0, y: 1.15, w: 6.3, h: 1.5, color: C.white, fontFace: 'Georgia', fontSize: 24, bold: true, margin: 0 });
|
||||||
|
s.addText('Расширенная версия: типы вампиров,\nкачественная кровь и скрытый рынок доноров', { x: 1.04, y: 2.95, w: 6.0, h: 0.75, color: C.cream, fontSize: 17.5, italic: true, margin: 0 });
|
||||||
|
s.addText('Клуб шапочек из фольги\nПсевдонаучный доклад в академическом стиле', { x: 1.04, y: 4.0, w: 4.9, h: 0.8, color: 'E0D0C4', fontSize: 16, margin: 0 });
|
||||||
|
footer(s, 1, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2 hypothesis
|
||||||
|
{
|
||||||
|
const s = pptx.addSlide();
|
||||||
|
baseTextSlide(s, 'Гипотеза исследования');
|
||||||
addCard(s, 0.88, 1.55, 5.35, 2.15, 'Базовая идея', 'Теневое правительство — это не просто политическая сеть, а долгоживущая гемозависимая каста, превратившая власть в механизм стабильного питания.');
|
addCard(s, 0.88, 1.55, 5.35, 2.15, 'Базовая идея', 'Теневое правительство — это не просто политическая сеть, а долгоживущая гемозависимая каста, превратившая власть в механизм стабильного питания.');
|
||||||
addBullets(s, [
|
addBullets(s, [
|
||||||
'вирусное происхождение касты;',
|
'вирусное происхождение касты;',
|
||||||
@@ -140,10 +166,10 @@ function addCard(slide, x, y, w, h, title, body, accent = C.red2) {
|
|||||||
footer(s, 2);
|
footer(s, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3 Virus
|
// 3 virus
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Sanguis Noctis Virus (SNV-12)');
|
baseTextSlide(s, 'Sanguis Noctis Virus (SNV-12)');
|
||||||
addBullets(s, [
|
addBullets(s, [
|
||||||
'латентная вирус-индуцированная вампиризация;',
|
'латентная вирус-индуцированная вампиризация;',
|
||||||
'хроническая антропогематофагия;',
|
'хроническая антропогематофагия;',
|
||||||
@@ -151,185 +177,192 @@ function addCard(slide, x, y, w, h, title, body, accent = C.red2) {
|
|||||||
'обратимая фототолерантность после кормления.'
|
'обратимая фототолерантность после кормления.'
|
||||||
], { x: 0.88, y: 1.7, w: 5.0, h: 3.8, fontSize: 18 });
|
], { x: 0.88, y: 1.7, w: 5.0, h: 3.8, fontSize: 18 });
|
||||||
addCard(s, 6.8, 1.55, 5.3, 3.9, 'Ключевые эффекты', 'SNV-12 не делает человека мистическим существом мгновенно. Он перестраивает обменные пути, усиливает регенерацию, замедляет старение и формирует зависимость от человеческой крови как от носителя редких сигнальных молекул.');
|
addCard(s, 6.8, 1.55, 5.3, 3.9, 'Ключевые эффекты', 'SNV-12 не делает человека мистическим существом мгновенно. Он перестраивает обменные пути, усиливает регенерацию, замедляет старение и формирует зависимость от человеческой крови как от носителя редких сигнальных молекул.');
|
||||||
addCallout(s, 'Вампиризм здесь — не проклятие, а вирусная адаптация', { fill: 'A42A37' });
|
addCallout(s, 'Вампиризм здесь — не проклятие, а вирусная адаптация', { fill: C.red2 });
|
||||||
footer(s, 3);
|
footer(s, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4 Middle Ages
|
// 4 medieval origin
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Почему именно XII-XIV века');
|
fullImage(s, assets.medieval);
|
||||||
s.addImage({ path: assets.medieval, x: 0.78, y: 1.28, w: 6.9, h: 4.85 });
|
darkPlaque(s, 'XII–XIV века', 5.05, 0.38, 3.2, 0.34, 18, { bold: true });
|
||||||
addBullets(s, [
|
lightPlaque(s, 'войны и миграции', 1.18, 6.24, 2.25, 0.34, 12);
|
||||||
'войны и миграции ускоряют перенос патогена;',
|
lightPlaque(s, 'антисанитария', 3.63, 6.24, 2.15, 0.34, 12);
|
||||||
'антисанитария скрывает аномальные случаи;',
|
lightPlaque(s, 'эпидемии и массовая смертность', 6.05, 6.24, 3.0, 0.34, 12);
|
||||||
'массовая смертность маскирует новый фенотип;',
|
lightPlaque(s, 'аристократические линии', 9.35, 6.24, 2.8, 0.34, 12);
|
||||||
'фольклор фиксирует ранние утечки в легенды.'
|
darkPlaque(s, 'Средневековье создаёт идеальную среду для скрытого патогена', 2.55, 6.83, 8.2, 0.26, 16, { italic: true, bold: true });
|
||||||
], { x: 8.0, y: 1.7, w: 4.2, h: 3.7, fontSize: 17.5 });
|
footer(s, 4, true);
|
||||||
addCallout(s, 'Там, где высокая смертность, новый патоген легче принять за обычное бедствие', { y: 6.02, fontSize: 19 });
|
|
||||||
footer(s, 4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5 Classes
|
// 5 classes
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Классы вампирической адаптации');
|
fullImage(s, assets.classes);
|
||||||
s.addImage({ path: assets.classes, x: 0.78, y: 1.35, w: 7.0, h: 5.1 });
|
lightPlaque(s, 'нестабилен, часто голоден', 0.45, 5.93, 3.42, 0.4, 12);
|
||||||
addBullets(s, [
|
lightPlaque(s, 'контроль только формируется', 0.45, 6.36, 3.42, 0.38, 11.5);
|
||||||
'молодой носитель: нестабилен и голоден;',
|
lightPlaque(s, 'устойчив, скрытен, дисциплинирован', 4.62, 5.93, 3.42, 0.4, 11.6);
|
||||||
'старший адаптант: устойчив и дисциплинирован;',
|
lightPlaque(s, 'столетнее накопление опыта', 4.62, 6.36, 3.42, 0.38, 11.3);
|
||||||
'гемарх: древняя элита, пьёт редко, но требует лучшее;',
|
lightPlaque(s, 'редкое питание, максимальная селекция', 8.95, 5.93, 3.45, 0.4, 11.3);
|
||||||
'ранний возраст заражения повышает шанс интеграции.'
|
lightPlaque(s, 'биологическая верхушка касты', 8.95, 6.36, 3.45, 0.38, 11.5);
|
||||||
], { x: 8.02, y: 1.7, w: 4.25, h: 3.9, fontSize: 16.8 });
|
footer(s, 5, true);
|
||||||
addCallout(s, 'Древность в этой системе — не возраст, а политический капитал', { y: 6.0, w: 12.0, x: 0.65, fontSize: 20 });
|
|
||||||
footer(s, 5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6 Failed infection
|
// 6 failed infection
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Не всякий укушенный становится вампиром');
|
fullImage(s, assets.failed);
|
||||||
s.addImage({ path: assets.failed, x: 0.78, y: 1.28, w: 6.9, h: 4.9 });
|
lightPlaque(s, 'объект: носитель SNV-12\nс несовместимым фенотипом', 0.52, 0.8, 3.47, 1.16, 12.5, { bold: true });
|
||||||
addBullets(s, [
|
lightPlaque(s, 'сосудистый\nперегрев', 4.48, 1.74, 0.78, 0.28, 10.8);
|
||||||
'феррогемный каскад запускает перегрев крови;',
|
lightPlaque(s, 'гемолиз', 4.47, 2.7, 0.78, 0.28, 10.8);
|
||||||
'летальная несовместимость отсеивает большинство;',
|
lightPlaque(s, 'системный\nколлапс', 4.47, 3.54, 0.78, 0.3, 10.5);
|
||||||
'успешная вампиризация биологически редка;',
|
lightPlaque(s, 'рост температуры\nдо критического порога', 1.2, 4.0, 2.8, 0.28, 10.8);
|
||||||
'малочисленность касты имеет псевдонаучное объяснение.'
|
lightPlaque(s, 'утрата стабильности\nкровяной среды', 0.9, 6.05, 3.1, 0.38, 12);
|
||||||
], { x: 8.0, y: 1.72, w: 4.2, h: 3.8, fontSize: 17 });
|
lightPlaque(s, 'Неудачное обращение объясняется\nтермогемолитическим коллапсом.', 4.35, 5.45, 3.8, 1.1, 13, { bold: true });
|
||||||
addCallout(s, 'Не всякий укушенный становится вампиром; большинство становятся статистикой', { y: 6.0, fontSize: 18.5 });
|
footer(s, 6, true);
|
||||||
footer(s, 6);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7 Recognition
|
// 7 recognize vampire
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Как распознать вампира');
|
fullImage(s, assets.recognize);
|
||||||
s.addImage({ path: assets.recognize, x: 0.78, y: 1.28, w: 6.85, h: 4.95 });
|
lightPlaque(s, 'слегка увеличенные\nклыки', 0.42, 2.06, 2.38, 0.46, 12.4);
|
||||||
addBullets(s, [
|
lightPlaque(s, 'медленное\nстарение', 0.42, 3.58, 2.38, 0.46, 12.4);
|
||||||
'клыки чуть длиннее нормы;',
|
lightPlaque(s, 'слишком ровная\nкожа', 0.42, 5.14, 2.38, 0.46, 12.2);
|
||||||
'странно медленное старение;',
|
lightPlaque(s, 'тёмный расширенный\nзрачок', 10.53, 2.06, 2.38, 0.46, 12.2);
|
||||||
'в голоде — тёмный расширенный зрачок;',
|
lightPlaque(s, 'интерес к крови\nи травмам', 10.53, 3.58, 2.38, 0.46, 12.2);
|
||||||
'закрытые клубы и слишком долгая карьера.'
|
lightPlaque(s, 'закрытые клубы\nи тайные круги', 10.53, 5.14, 2.38, 0.46, 12.0);
|
||||||
], { x: 8.0, y: 1.7, w: 4.2, h: 3.6, fontSize: 17.3 });
|
footer(s, 7, true);
|
||||||
addCallout(s, 'Ни один симптом не доказывает ничего сам по себе — работает только совокупность', { y: 6.0, w: 12.0, x: 0.65, fontSize: 18.3 });
|
|
||||||
footer(s, 7);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 8 Blood economy
|
// 8 blood economy
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Экономика качественной крови');
|
fullImage(s, assets.blood);
|
||||||
s.addImage({ path: assets.blood, x: 0.78, y: 1.3, w: 7.0, h: 4.95 });
|
lightPlaque(s, 'базовое\nподдержание', 1.26, 1.84, 2.05, 0.36, 12.2);
|
||||||
addBullets(s, [
|
lightPlaque(s, 'норма для\nпериферии', 1.26, 3.33, 2.05, 0.36, 12.2);
|
||||||
'массовая кровь — для периферии;',
|
lightPlaque(s, 'усиление\nспособностей', 1.26, 4.82, 2.05, 0.36, 12.0);
|
||||||
'стабильная кровь — от здоровых доноров;',
|
lightPlaque(s, 'ресурс для элиты\nи ритуалов', 1.26, 6.3, 2.05, 0.36, 11.6);
|
||||||
'пиковая кровь — от молодых и сильных;',
|
lightPlaque(s, 'минимальные\nтребования', 10.16, 2.0, 1.62, 0.28, 10.4);
|
||||||
'династическая кровь — от особо ценных линий.'
|
lightPlaque(s, 'устойчивый\nрацион', 10.16, 3.48, 1.62, 0.28, 10.4);
|
||||||
], { x: 8.0, y: 1.65, w: 4.25, h: 3.8, fontSize: 16.9 });
|
lightPlaque(s, 'для старших\nадаптантов', 10.16, 4.98, 1.62, 0.28, 10.2);
|
||||||
addCallout(s, 'Чем древнее вампир, тем реже он питается, но тем дороже обходится каждый акт питания', { y: 6.0, x: 0.65, w: 12.0, fontSize: 17.8 });
|
lightPlaque(s, 'только для\nдревних', 10.16, 6.47, 1.62, 0.28, 10.2);
|
||||||
footer(s, 8);
|
lightPlaque(s, 'дефицит создаёт власть', 0.78, 6.72, 2.2, 0.24, 11.2, { bold: true });
|
||||||
|
lightPlaque(s, 'чем старше древний,\nтем выше требования', 10.38, 6.72, 2.2, 0.34, 10.5, { bold: true });
|
||||||
|
footer(s, 8, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 9 Artificial blood
|
// 9 artificial blood
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Почему искусственная кровь им не подходит');
|
fullImage(s, assets.artificial);
|
||||||
s.addImage({ path: assets.artificial, x: 0.78, y: 1.28, w: 7.0, h: 4.95 });
|
lightPlaque(s, 'высокая\nвариативность', 4.78, 1.58, 1.55, 0.28, 10.2);
|
||||||
addBullets(s, [
|
lightPlaque(s, 'выражены', 4.78, 2.54, 1.55, 0.28, 10.2);
|
||||||
'живая кровь несёт гормоны и стрессовые маркеры;',
|
lightPlaque(s, 'уникален', 4.78, 3.48, 1.55, 0.28, 10.2);
|
||||||
'искусственный суррогат даёт только базовую функцию;',
|
lightPlaque(s, 'активна', 4.78, 4.42, 1.55, 0.28, 10.2);
|
||||||
'у гемархов не возникает полноценного насыщения;',
|
lightPlaque(s, 'есть', 4.78, 5.47, 1.55, 0.28, 10.2);
|
||||||
'фототолерантность и регенерация не восстанавливаются.'
|
lightPlaque(s, 'полное', 4.78, 6.33, 1.55, 0.28, 10.2);
|
||||||
], { x: 8.0, y: 1.67, w: 4.25, h: 3.8, fontSize: 16.8 });
|
lightPlaque(s, 'сглажен', 10.2, 1.58, 1.55, 0.28, 10.2);
|
||||||
addCallout(s, 'Искусственная кровь для них — суррогат, а не решение', { y: 6.0, fontSize: 19 });
|
lightPlaque(s, 'почти нет', 10.2, 2.54, 1.55, 0.28, 10.2);
|
||||||
footer(s, 9);
|
lightPlaque(s, 'стёрт', 10.2, 3.48, 1.55, 0.28, 10.2);
|
||||||
|
lightPlaque(s, 'низкая', 10.2, 4.42, 1.55, 0.28, 10.2);
|
||||||
|
lightPlaque(s, 'нет', 10.2, 5.47, 1.55, 0.28, 10.2);
|
||||||
|
lightPlaque(s, 'минимальное', 10.2, 6.33, 1.55, 0.28, 10.2);
|
||||||
|
footer(s, 9, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 10 Donor market
|
// 10 hidden donor market
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Тайный рынок доноров');
|
fullImage(s, assets.market);
|
||||||
s.addImage({ path: assets.market, x: 0.78, y: 1.28, w: 6.95, h: 4.95 });
|
darkPlaque(s, 'Тайный рынок доноров', 5.35, 2.06, 2.1, 0.28, 16, { bold: true });
|
||||||
addBullets(s, [
|
darkPlaque(s, 'Элитные\nшколы', 0.95, 1.95, 1.35, 0.26, 10.6);
|
||||||
'частные клиники и закрытые биобанки;',
|
darkPlaque(s, 'Закрытые\nклубы', 2.78, 1.95, 1.35, 0.26, 10.6);
|
||||||
'элитные школы и клубы как фильтр линий;',
|
darkPlaque(s, 'Донорские\nдома', 9.0, 1.95, 1.48, 0.26, 10.4);
|
||||||
'донорские дома и фонды наблюдения;',
|
darkPlaque(s, 'Династии', 10.85, 1.95, 1.45, 0.26, 10.6);
|
||||||
'качество для верхушки важнее объёма.'
|
darkPlaque(s, 'Клиники', 0.75, 4.13, 1.9, 0.22, 10.8);
|
||||||
], { x: 8.02, y: 1.72, w: 4.2, h: 3.5, fontSize: 17 });
|
darkPlaque(s, 'Медицинский\nотбор', 2.95, 4.13, 1.9, 0.22, 10.0);
|
||||||
addCallout(s, 'Настоящая роскошь для гемархов — не золото, а доступ к правильно отсортированным живым донорам', { y: 6.0, x: 0.65, w: 12.0, fontSize: 17 });
|
lightPlaque(s, 'лаунджи для\nудержания доноров', 5.55, 4.88, 2.42, 0.34, 10.5);
|
||||||
footer(s, 10);
|
darkPlaque(s, 'Биобанки', 9.02, 4.13, 1.9, 0.22, 10.8);
|
||||||
|
darkPlaque(s, 'Архивы и\nдосье', 11.18, 4.13, 1.72, 0.22, 10.0);
|
||||||
|
darkPlaque(s, 'доноры', 0.62, 6.86, 1.05, 0.2, 9.8);
|
||||||
|
darkPlaque(s, 'анкеты', 2.62, 6.86, 1.05, 0.2, 9.8);
|
||||||
|
darkPlaque(s, 'отбор', 4.83, 6.86, 1.05, 0.2, 9.8);
|
||||||
|
darkPlaque(s, 'пробирки', 6.93, 6.86, 1.05, 0.2, 9.8);
|
||||||
|
darkPlaque(s, 'архив', 9.13, 6.86, 1.05, 0.2, 9.8);
|
||||||
|
darkPlaque(s, 'сердце рынка', 11.28, 6.86, 1.18, 0.2, 9.4);
|
||||||
|
footer(s, 10, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 11 Power capture
|
// 11 donor house
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Почему захват власти рационален');
|
fullImage(s, assets.donorHouse);
|
||||||
s.addImage({ path: assets.donorHouse, x: 0.78, y: 1.28, w: 6.95, h: 4.95 });
|
darkPlaque(s, 'Донорский дом', 0.82, 0.52, 4.95, 0.4, 22, { bold: true });
|
||||||
addBullets(s, [
|
darkPlaque(s, 'санаторий, пансион и селекционный узел\nпод одной крышей', 0.92, 1.0, 4.7, 0.44, 12.8, { italic: true });
|
||||||
'обеспечить безопасный доступ к крови;',
|
darkPlaque(s, 'отбор', 7.15, 6.52, 1.1, 0.22, 10.5);
|
||||||
'скрыть своё существование;',
|
darkPlaque(s, 'обучение', 9.26, 6.52, 1.1, 0.22, 10.5);
|
||||||
'сортировать кровь по качеству;',
|
darkPlaque(s, 'медицина', 11.32, 6.52, 1.1, 0.22, 10.5);
|
||||||
'контролировать внутреннюю иерархию через снабжение.'
|
darkPlaque(s, 'селекция', 12.45, 6.52, 0.65, 0.22, 9.5);
|
||||||
], { x: 8.0, y: 1.72, w: 4.2, h: 3.7, fontSize: 17.2 });
|
footer(s, 11, true);
|
||||||
addCallout(s, 'Власть здесь не цель, а технология питания', { y: 6.0, fontSize: 22 });
|
|
||||||
footer(s, 11);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 12 Internal discipline
|
// 12 blood etiquette
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Кровь как валюта и инструмент подчинения');
|
fullImage(s, assets.etiquette);
|
||||||
s.addImage({ path: assets.etiquette, x: 0.78, y: 1.28, w: 6.95, h: 4.95 });
|
lightPlaque(s, 'Кровяной этикет элиты', 3.95, 0.42, 5.38, 0.42, 22, { bold: true });
|
||||||
addBullets(s, [
|
darkPlaque(s, 'оценка донора', 3.05, 6.86, 2.05, 0.22, 11.2, { bold: true });
|
||||||
'доступ к качественной крови = статус;',
|
darkPlaque(s, 'ритуал насыщения', 5.36, 6.86, 2.3, 0.22, 11.2, { bold: true });
|
||||||
'плохое питание ломает самоконтроль низших носителей;',
|
darkPlaque(s, 'учёт качества', 7.96, 6.86, 2.1, 0.22, 11.2, { bold: true });
|
||||||
'снабжение превращается в механизм дисциплины;',
|
darkPlaque(s, 'документы допуска', 10.45, 6.86, 2.15, 0.22, 10.6, { bold: true });
|
||||||
'верхушка удерживает касту через монополию на лучший ресурс.'
|
footer(s, 12, true);
|
||||||
], { x: 8.0, y: 1.68, w: 4.2, h: 3.8, fontSize: 16.9 });
|
|
||||||
addCallout(s, 'Кровь внутри системы — это одновременно пища, валюта и инструмент подчинения', { y: 6.0, x: 0.65, w: 12.0, fontSize: 18 });
|
|
||||||
footer(s, 12);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 13 Geography
|
// 13 feeding zones
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Геополитика кормовых зон');
|
fullImage(s, assets.zones);
|
||||||
s.addImage({ path: assets.zones, x: 0.78, y: 1.28, w: 7.0, h: 4.98 });
|
lightPlaque(s, 'Геополитика кормовых зон', 3.62, 0.34, 5.9, 0.34, 20, { bold: true });
|
||||||
addBullets(s, [
|
lightPlaque(s, 'резервуары\nнаселения', 0.68, 3.62, 1.8, 0.26, 10.4);
|
||||||
'резервуары населения;',
|
lightPlaque(s, 'морские\nкоридоры', 0.68, 4.07, 1.8, 0.26, 10.4);
|
||||||
'транспортные коридоры людей и биоресурсов;',
|
lightPlaque(s, 'авиационные\nузлы', 0.68, 4.53, 1.8, 0.26, 10.2);
|
||||||
'убежища древних династий;',
|
lightPlaque(s, 'убежища\nэлиты', 0.68, 4.99, 1.8, 0.26, 10.4);
|
||||||
'экспериментальные зоны селекции и наблюдения.'
|
lightPlaque(s, 'эксперименты\nи селекция', 0.68, 5.45, 1.8, 0.26, 10.0);
|
||||||
], { x: 8.0, y: 1.7, w: 4.2, h: 3.7, fontSize: 17.1 });
|
lightPlaque(s, 'карта показывает не государства,\nа контуры биологического снабжения', 4.72, 6.88, 3.95, 0.36, 11.6, { bold: true });
|
||||||
addCallout(s, 'Геополитика = распределение кормовых контуров', { y: 6.02, fontSize: 21 });
|
footer(s, 13, true);
|
||||||
footer(s, 13);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 14 Chain
|
// 14 food chain chart
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseLight(s, 'Пищевая цепочка: от тебя до теневого правительства');
|
fullImage(s, assets.chain);
|
||||||
s.addImage({ path: assets.chain, x: 0.78, y: 1.28, w: 7.0, h: 4.98 });
|
lightPlaque(s, 'Пищевая цепочка: от тебя до теневого правительства', 1.82, 0.28, 9.72, 0.34, 17.5, { bold: true });
|
||||||
addBullets(s, [
|
darkPlaque(s, 'человек', 0.32, 1.8, 1.48, 0.2, 10.2);
|
||||||
'человек — исходный биоресурс;',
|
darkPlaque(s, 'наблюдение', 2.45, 1.8, 1.48, 0.2, 10.2);
|
||||||
'системы учёта отсеивают пригодных доноров;',
|
darkPlaque(s, 'сортировка', 4.64, 1.8, 1.48, 0.2, 10.2);
|
||||||
'рынок качества поднимает ресурс к верхушке;',
|
darkPlaque(s, 'логистика', 6.82, 1.8, 1.48, 0.2, 10.2);
|
||||||
'гемархи замыкают всю логистику на себе.'
|
darkPlaque(s, 'встреча\nэлиты', 9.02, 1.8, 1.48, 0.2, 9.8);
|
||||||
], { x: 8.0, y: 1.72, w: 4.2, h: 3.7, fontSize: 17.1 });
|
darkPlaque(s, 'досье', 11.18, 1.8, 1.48, 0.2, 10.2);
|
||||||
addCallout(s, 'Человек включён в систему не как гражданин, а как элемент глобальной донорской инфраструктуры', { y: 6.0, x: 0.65, w: 12.0, fontSize: 17.6 });
|
darkPlaque(s, 'гемарх', 12.08, 1.8, 0.95, 0.2, 10.0);
|
||||||
footer(s, 14);
|
lightPlaque(s, 'массовая\nдонорская база', 0.33, 4.92, 1.7, 0.42, 10.3);
|
||||||
|
lightPlaque(s, 'отбор по\nбиометрии', 4.0, 6.16, 1.85, 0.3, 10.2);
|
||||||
|
lightPlaque(s, 'качество важнее\nколичества', 7.67, 6.16, 1.95, 0.3, 10.0);
|
||||||
|
lightPlaque(s, 'верхушка\nспроса', 11.32, 4.92, 1.6, 0.42, 10.4);
|
||||||
|
footer(s, 14, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 15 Conclusion
|
// 15 conclusion
|
||||||
{
|
{
|
||||||
const s = pptx.addSlide();
|
const s = pptx.addSlide();
|
||||||
baseDark(s, 'Вывод', 'Финальная формула псевдонаучной модели');
|
s.background = { color: C.bgDark };
|
||||||
|
s.addShape(pptx.ShapeType.rect, { x: 0, y: 0, w: 13.333, h: 7.5, fill: { color: C.bgDark }, line: { color: C.bgDark } });
|
||||||
|
s.addText('Вывод', { x: 0.92, y: 0.92, w: 3.0, h: 0.5, color: C.white, fontFace: 'Georgia', fontSize: 28, bold: true, margin: 0 });
|
||||||
s.addText('Если теория верна, вершина мировой политики — это не кабинет и не трон, а хорошо организованная столовая премиум-класса, где человечество давно числится в меню.', { x: 0.95, y: 2.0, w: 8.15, h: 1.9, fontSize: 24, color: C.cream, margin: 0.02, valign: 'mid' });
|
s.addText('Если теория верна, вершина мировой политики — это не кабинет и не трон, а хорошо организованная столовая премиум-класса, где человечество давно числится в меню.', { x: 0.95, y: 2.0, w: 8.15, h: 1.9, fontSize: 24, color: C.cream, margin: 0.02, valign: 'mid' });
|
||||||
s.addShape(pptx.ShapeType.roundRect, { x: 9.15, y: 1.6, w: 2.85, h: 3.4, rectRadius: 0.08, fill: { color: '2A1419' }, line: { color: C.gold, pt: 1.3 } });
|
s.addShape(pptx.ShapeType.roundRect, { x: 9.15, y: 1.6, w: 2.85, h: 3.4, rectRadius: 0.08, fill: { color: '2A1419' }, line: { color: C.gold, pt: 1.3 } });
|
||||||
s.addText('Ключевые\nформулы', { x: 9.72, y: 2.0, w: 1.75, h: 0.6, align: 'center', fontSize: 20, bold: true, color: C.white, margin: 0 });
|
s.addText('Ключевые\nформулы', { x: 9.72, y: 2.0, w: 1.75, h: 0.6, align: 'center', fontSize: 20, bold: true, color: C.white, margin: 0 });
|
||||||
s.addText('• власть = кормовая логистика\n• кровь = валюта\n• элита скрывает не власть, а рацион', { x: 9.45, y: 2.9, w: 2.25, h: 1.25, fontSize: 15.5, color: C.cream, margin: 0.02 });
|
s.addText('• власть = кормовая логистика\n• кровь = валюта\n• элита скрывает не власть, а рацион', { x: 9.45, y: 2.9, w: 2.25, h: 1.25, fontSize: 15.5, color: C.cream, margin: 0.02 });
|
||||||
s.addText('Жанр: академически поданная псевдонаука для клуба шапочек из фольги', { x: 1.0, y: 6.45, w: 7.4, h: 0.22, fontSize: 13, color: 'D2B8A5', italic: true, margin: 0 });
|
s.addText('Жанр: академически поданная псевдонаука для клуба шапочек из фольги', { x: 1.0, y: 6.45, w: 7.4, h: 0.22, fontSize: 13, color: 'D2B8A5', italic: true, margin: 0 });
|
||||||
footer(s, 15);
|
footer(s, 15, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
|
|||||||
447
plan-novoj-prezentacii.md
Normal file
@@ -0,0 +1,447 @@
|
|||||||
|
# План новой презентации: строгая научная версия
|
||||||
|
|
||||||
|
> Для Hermes: это план переработки презентации, а не исполнение. Новая версия должна опираться на строгий научно-инфографический стиль без псевдостаринной эстетики.
|
||||||
|
|
||||||
|
## Цель
|
||||||
|
|
||||||
|
Переделать презентацию «Пищевая цепочка: от тебя до теневого правительства» в формат строгого псевдонаучного доклада: меньше атмосферных иллюстраций, больше схем, карт, таблиц, сравнений и процессных диаграмм. Отдельно встроить биологический блок про молекулу, вирус и механизм действия, а затем связать его с особенностями вампиров: питание, солнечный свет, старение, регенерация, социальное поведение.
|
||||||
|
|
||||||
|
## Главный принцип
|
||||||
|
|
||||||
|
У каждого слайда должна быть одна функция:
|
||||||
|
- либо объяснять тезис через текст и композицию средствами презентации;
|
||||||
|
- либо показывать одну конкретную диаграмму/карту/схему;
|
||||||
|
- не смешивать атмосферный арт и аналитическую подачу.
|
||||||
|
|
||||||
|
## Новый визуальный стиль
|
||||||
|
|
||||||
|
### Что нужно
|
||||||
|
- светлый или нейтральный фон;
|
||||||
|
- строгая палитра: белый / светло-серый / графит / тёмно-красный как акцент / приглушённый синий или серо-синий;
|
||||||
|
- flat infographic style;
|
||||||
|
- clean medical / scientific / analytic look;
|
||||||
|
- тонкие линии, выноски, сетки, карточки, стрелки;
|
||||||
|
- минимум декора;
|
||||||
|
- крупная, читаемая типографика;
|
||||||
|
- одна и та же логика оформления диаграмм по всей колоде.
|
||||||
|
|
||||||
|
### Что убрать
|
||||||
|
- пергамент;
|
||||||
|
- псевдоготику;
|
||||||
|
- винтажные рамки;
|
||||||
|
- золотой декор;
|
||||||
|
- атмосферный хоррор-арт;
|
||||||
|
- старинные картуши;
|
||||||
|
- «музейный» стиль.
|
||||||
|
|
||||||
|
## Новая структура презентации
|
||||||
|
|
||||||
|
Рекомендуемая длина: 14 слайдов.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 1. Титул
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Задать новый строгий стиль и тему доклада.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Нет. Лучше средствами презентации.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- большой заголовок;
|
||||||
|
- подзаголовок в одну строку;
|
||||||
|
- справа небольшая минималистичная схема: человек -> отбор -> кровь -> элита;
|
||||||
|
- внизу короткая жанровая пометка: псевдонаучная реконструкция.
|
||||||
|
|
||||||
|
### Текст
|
||||||
|
- Заголовок: «Пищевая цепочка: от тебя до теневого правительства»
|
||||||
|
- Подзаголовок: «Псевдонаучная модель гемозависимой элиты и скрытой инфраструктуры питания»
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 2. Исходная гипотеза
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Сформулировать главную мысль одним экраном.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Нет. Средствами презентации.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- один тезис крупно;
|
||||||
|
- 4 коротких опорных пункта;
|
||||||
|
- внизу формула: власть = контроль кормовой инфраструктуры.
|
||||||
|
|
||||||
|
### Содержание
|
||||||
|
- элита не просто управляет обществом, а питается им;
|
||||||
|
- долгожительство даёт стратегическое преимущество;
|
||||||
|
- кровь становится и ресурсом, и валютой;
|
||||||
|
- институты власти маскируют биологическую зависимость.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 3. Биологический агент: вирус + молекула + механизм
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Ввести физическую основу вампиризма.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да. Нужна одна строгая научная схема.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
Комбинированная диаграмма из 3 блоков:
|
||||||
|
1. вирус SNV-12;
|
||||||
|
2. активная молекула/комплекс;
|
||||||
|
3. клеточный механизм действия.
|
||||||
|
|
||||||
|
### Внутренние подпункты
|
||||||
|
- вирусный агент: SNV-12;
|
||||||
|
- молекулярный комплекс: условно «гемофильный регуляторный каскад»;
|
||||||
|
- мишени: митохондрии, гем-связывающие белки, фоторецепторные пути, регенеративные сигналы.
|
||||||
|
|
||||||
|
### Вывод слайда
|
||||||
|
Именно этот биологический блок потом объясняет все «вампирские» свойства.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Научная биомедицинская схема: вирус SNV-12, устройство вириона, активная сигнальная молекула, клеточные мишени, изменение обмена, регенерации и светочувствительности, clean medical infographic, light background, strict scientific style
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 4. Средневековье создаёт идеальную среду
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Показать, почему вирус закрепился исторически.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да. Нужна карта.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- карта Европы XII–XIV веков;
|
||||||
|
- торговые пути;
|
||||||
|
- войны и миграции;
|
||||||
|
- очаги эпидемий;
|
||||||
|
- крупные узлы распространения.
|
||||||
|
|
||||||
|
### Смысл
|
||||||
|
Не атмосфера Средневековья, а эпидемиологическая логика распространения.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Историко-эпидемиологическая карта Европы XII–XIV веков, торговые пути, миграции, войны, очаги эпидемий, крупные города и порты, стрелки скрытого распространения SNV-12, строгая научная инфографика, светлый фон, clean labels
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 5. Как вирус меняет организм
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Связать агент с физиологией.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Нет отдельной картинки. Лучше средствами презентации.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
Схема «норма -> заражение -> адаптация» по системам:
|
||||||
|
- кровь;
|
||||||
|
- обмен веществ;
|
||||||
|
- нервная система;
|
||||||
|
- зрение/светочувствительность;
|
||||||
|
- регенерация;
|
||||||
|
- старение.
|
||||||
|
|
||||||
|
### Смысл
|
||||||
|
Это мост между молекулярным блоком и внешними симптомами.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 6. Почему возникает зависимость от крови
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Объяснить питание не мистикой, а биохимией.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Нет отдельной картинки. Лучше средствами презентации как причинно-следственную схему.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- блок: «вирус требует живые сигнальные молекулы»;
|
||||||
|
- блок: «искусственные заменители дают транспорт, но не насыщение»;
|
||||||
|
- блок: «живая кровь = биохимический пакет»;
|
||||||
|
- короткий итог: голод — это дефицит сигнальных компонентов, а не просто железа или калорий.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 7. Классы вампиров
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Показать иерархию адаптации.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- три уровня: молодой носитель, старший адаптант, гемарх;
|
||||||
|
- параметры сравнения: возраст, контроль голода, скрытность, доступ к качественной крови, политическая роль.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Строгая научная классификационная схема, три уровня: молодой носитель, старший адаптант, гемарх, сравнение по возрасту, контролю голода, скрытности, доступу к крови и влиянию, clean infographic, no vintage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 8. Неудачное заражение
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Объяснить, почему обращение не универсально.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- анатомический силуэт;
|
||||||
|
- каскад несовместимости;
|
||||||
|
- перегрев, гемолиз, системный сбой;
|
||||||
|
- краткий биологический вывод.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Псевдомедицинская схема неудачного заражения, термогемолитический коллапс, сосудистый перегрев, гемолиз, системная несовместимость, анатомический силуэт плюс процессная диаграмма, строгий лабораторный стиль, светлый фон
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 9. Как распознать вампира
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Показать внешние и поведенческие маркеры.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- лицо/фигура как центральный объект;
|
||||||
|
- выноски к признакам;
|
||||||
|
- разделение на внешние признаки и поведенческие признаки.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Судебно-медицинский диагностический постер, признаки гемозависимого фенотипа: слегка увеличенные клыки, медленное старение, ровная кожа, расширенный зрачок, интерес к крови, закрытые элитные круги, строгая научная схема с выносками
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 10. Экономика качественной крови
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Показать, как биология превращается в социальную иерархию.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- уровни качества крови;
|
||||||
|
- рост ценности и редкости;
|
||||||
|
- распределение по классам вампиров;
|
||||||
|
- логика дефицита.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Научная инфографика стратификации донорской крови, уровни: массовая, стабильная, пиковая, династическая, рост редкости, стоимости и доступа элиты, строгий аналитический стиль, clean chart
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 11. Почему искусственная кровь не подходит
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Сделать центральное биохимическое сравнение.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
Таблица или split-screen:
|
||||||
|
- живая кровь;
|
||||||
|
- искусственная кровь;
|
||||||
|
- сигналы, стрессовые маркеры, нейрохимия, насыщение, иммунный отклик.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Сравнительная научная таблица живая кровь vs искусственная кровь, гормональные сигналы, стрессовые маркеры, нейрохимический след, метаболическая активность, эффект насыщения, строгая биомедицинская инфографика, светлый фон
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 12. Тайный рынок доноров
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Показать инфраструктуру снабжения.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
Сетевой граф:
|
||||||
|
- школы;
|
||||||
|
- клиники;
|
||||||
|
- донорские дома;
|
||||||
|
- биобанки;
|
||||||
|
- логистика;
|
||||||
|
- элитный контур потребления.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Системная карта скрытого рынка доноров, узлы: элитные школы, клиники, биобанки, донорские дома, логистика, верхушка элиты, network diagram, строгий научно-аналитический стиль
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 13. Геополитика кормовых зон
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Масштабировать модель на мировой уровень.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Да.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- мировая карта;
|
||||||
|
- резервуары населения;
|
||||||
|
- транспортные коридоры;
|
||||||
|
- безопасные зоны элиты;
|
||||||
|
- экспериментальные территории.
|
||||||
|
|
||||||
|
### Краткий промпт
|
||||||
|
Глобальная карта скрытого биологического снабжения, резервуары населения, транспортные коридоры, убежища элиты, экспериментальные территории, строгая картографическая инфографика, clean labels, light background
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 14. Следствия: почему вампиры именно такие
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Собрать все особенности в один причинный вывод.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Нет. Лучше средствами презентации.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
Матрица «биомеханизм -> наблюдаемая особенность».
|
||||||
|
|
||||||
|
### Строки матрицы
|
||||||
|
- дефицит сигнальных молекул -> питание кровью;
|
||||||
|
- изменённые фоторецепторные пути -> чувствительность к солнечному свету;
|
||||||
|
- усиленная регенерация -> быстрое восстановление;
|
||||||
|
- перестройка клеточного цикла -> замедленное старение;
|
||||||
|
- хронический голодный стресс -> ритуалы отбора и жесткая иерархия;
|
||||||
|
- высокая цена качественной крови -> скрытая политика и элитные сети.
|
||||||
|
|
||||||
|
### Смысл
|
||||||
|
Это главный объединяющий слайд всей модели.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Слайд 15. Вывод
|
||||||
|
|
||||||
|
### Роль
|
||||||
|
Закрыть доклад сильной, но строгой формулой.
|
||||||
|
|
||||||
|
### Делать картинку?
|
||||||
|
Нет. Средствами презентации.
|
||||||
|
|
||||||
|
### Что должно быть
|
||||||
|
- один сильный вывод;
|
||||||
|
- 3 короткие формулы;
|
||||||
|
- без лишней визуальной перегрузки.
|
||||||
|
|
||||||
|
### Формулы
|
||||||
|
- вампиризм = биологическая зависимость + социальная инфраструктура;
|
||||||
|
- власть = устойчивый доступ к качественной крови;
|
||||||
|
- миф о монстре скрывает проблему системы снабжения.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Отдельный новый биологический блок
|
||||||
|
|
||||||
|
Это обязательное добавление в новую версию.
|
||||||
|
|
||||||
|
### Нужно включить
|
||||||
|
1. Устройство вируса SNV-12
|
||||||
|
2. Активную молекулу / молекулярный комплекс
|
||||||
|
3. Клеточный механизм действия
|
||||||
|
4. Переход от механизма к симптомам
|
||||||
|
|
||||||
|
### Логика объяснения
|
||||||
|
- вирус встраивается в клетки;
|
||||||
|
- меняет регуляцию обмена;
|
||||||
|
- усиливает зависимость от гем-связанных и донорских сигнальных компонентов;
|
||||||
|
- меняет реакцию на свет;
|
||||||
|
- влияет на старение и регенерацию;
|
||||||
|
- создаёт энергетическую и поведенческую зависимость.
|
||||||
|
|
||||||
|
### Какие особенности должны быть выведены из этого блока
|
||||||
|
- питание кровью;
|
||||||
|
- непригодность искусственной крови;
|
||||||
|
- чувствительность к солнцу;
|
||||||
|
- замедление старения;
|
||||||
|
- высокая регенерация;
|
||||||
|
- повышенная скрытность и дисциплина у старших форм;
|
||||||
|
- элитарная селекция по качеству доноров.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Какие изображения реально надо генерировать
|
||||||
|
|
||||||
|
Минимальный новый набор:
|
||||||
|
1. биологический агент: вирус + молекула + механизм;
|
||||||
|
2. карта Средневековой Европы;
|
||||||
|
3. классы вампиров;
|
||||||
|
4. неудачное заражение;
|
||||||
|
5. распознавание вампира;
|
||||||
|
6. экономика качественной крови;
|
||||||
|
7. живая кровь vs искусственная кровь;
|
||||||
|
8. тайный рынок доноров;
|
||||||
|
9. геополитика кормовых зон.
|
||||||
|
|
||||||
|
Итого: 9 новых строгих научных изображений.
|
||||||
|
|
||||||
|
## Какие слайды лучше собрать средствами презентации
|
||||||
|
- титул;
|
||||||
|
- гипотеза;
|
||||||
|
- как вирус меняет организм;
|
||||||
|
- почему возникает зависимость от крови;
|
||||||
|
- следствия: почему вампиры такие;
|
||||||
|
- вывод.
|
||||||
|
|
||||||
|
Итого: 6 слайдов без внешней картинки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Порядок будущей переработки
|
||||||
|
|
||||||
|
### Этап 1. Утвердить структуру
|
||||||
|
- подтвердить состав из 15 слайдов;
|
||||||
|
- подтвердить, что стиль теперь scientific / infographic, а не vintage.
|
||||||
|
|
||||||
|
### Этап 2. Сгенерировать новый набор картинок
|
||||||
|
- сначала 9 обязательных схем;
|
||||||
|
- все в одном стиле;
|
||||||
|
- без встроенного декоративного шума.
|
||||||
|
|
||||||
|
### Этап 3. Переделать генератор презентации
|
||||||
|
С высокой вероятностью менять:
|
||||||
|
- `/home/mikhail/repos/foil-cap-theories/vampire-government/generate_presentation.js`
|
||||||
|
- `/home/mikhail/repos/foil-cap-theories/vampire-government/verify.js`
|
||||||
|
|
||||||
|
### Этап 4. Перестроить композицию
|
||||||
|
- сократить full-bleed арт-слайды;
|
||||||
|
- увеличить количество чистых диаграмм и таблиц;
|
||||||
|
- унифицировать размеры заголовков, полей, карточек, легенд и подписей.
|
||||||
|
|
||||||
|
### Этап 5. Обновить проверку
|
||||||
|
- проверить число слайдов;
|
||||||
|
- проверить наличие нового биологического блока;
|
||||||
|
- проверить наличие нового средневекового картографического слайда;
|
||||||
|
- проверить обновлённую терминологию.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Риски и замечания
|
||||||
|
|
||||||
|
- Если генератор картинок будет слишком «художественным», стиль снова расползётся. Надо явно просить schematic / scientific / infographic.
|
||||||
|
- Самый сложный слайд — биологический агент: там легко перегрузить одну картинку. Возможно, при необходимости потом разделить его на 2 слайда:
|
||||||
|
- вирус и молекула;
|
||||||
|
- механизм и симптомы.
|
||||||
|
- Если карта Средневековья выйдет слишком декоративной, её надо перегенерировать до состояния аналитической карты.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Короткий итог
|
||||||
|
|
||||||
|
Новая презентация должна выглядеть не как оккультный арт-проект, а как строгий, почти биомедицинский и аналитический доклад о вымышленной системе. Центральная новая ось — биологический механизм (вирус + молекула + клеточное действие), из которого выводятся все вампирские свойства и вся социальная надстройка.
|
||||||
|
Before Width: | Height: | Size: 803 KiB After Width: | Height: | Size: 804 KiB |
@@ -8,6 +8,7 @@ const pptxPath = path.join(base, 'prezentaciya-vampiricheskoe-tenevoe-pravitelst
|
|||||||
const pdfPath = path.join(base, 'prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pdf');
|
const pdfPath = path.join(base, 'prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pdf');
|
||||||
const reportPath = path.join(base, 'doklad.md');
|
const reportPath = path.join(base, 'doklad.md');
|
||||||
const handoutPath = path.join(base, 'razdatochnyj-material.md');
|
const handoutPath = path.join(base, 'razdatochnyj-material.md');
|
||||||
|
const generatorPath = path.join(base, 'generate_presentation.js');
|
||||||
|
|
||||||
function assert(cond, msg) {
|
function assert(cond, msg) {
|
||||||
if (!cond) throw new Error(msg);
|
if (!cond) throw new Error(msg);
|
||||||
@@ -22,10 +23,12 @@ async function main() {
|
|||||||
|
|
||||||
const report = fs.readFileSync(reportPath, 'utf8');
|
const report = fs.readFileSync(reportPath, 'utf8');
|
||||||
const handout = fs.readFileSync(handoutPath, 'utf8');
|
const handout = fs.readFileSync(handoutPath, 'utf8');
|
||||||
|
const generator = fs.readFileSync(generatorPath, 'utf8');
|
||||||
assert(report.includes('Sanguis Noctis Virus'), 'В докладе отсутствует ключевой термин');
|
assert(report.includes('Sanguis Noctis Virus'), 'В докладе отсутствует ключевой термин');
|
||||||
assert(report.includes('Экономика качественной крови'), 'В докладе нет раздела о качественной крови');
|
assert(report.includes('Экономика качественной крови'), 'В докладе нет раздела о качественной крови');
|
||||||
assert(report.includes('Почему искусственная кровь им не подходит'), 'В докладе нет раздела про искусственную кровь');
|
assert(report.includes('Почему искусственная кровь им не подходит'), 'В докладе нет раздела про искусственную кровь');
|
||||||
assert(handout.includes('Тайный рынок доноров'), 'В раздатке нет блока про тайный рынок доноров');
|
assert(handout.includes('Тайный рынок доноров'), 'В раздатке нет блока про тайный рынок доноров');
|
||||||
|
assert(generator.includes("12-food-chain-chart.png") && generator.includes("assets', 'generated'"), 'Генератор не использует пакет generated PNG');
|
||||||
|
|
||||||
const pptxBuf = fs.readFileSync(pptxPath);
|
const pptxBuf = fs.readFileSync(pptxPath);
|
||||||
const zip = await JSZip.loadAsync(pptxBuf);
|
const zip = await JSZip.loadAsync(pptxBuf);
|
||||||
@@ -35,10 +38,10 @@ async function main() {
|
|||||||
assert(slideFiles.length === 15, `Ожидалось 15 слайдов, получено ${slideFiles.length}`);
|
assert(slideFiles.length === 15, `Ожидалось 15 слайдов, получено ${slideFiles.length}`);
|
||||||
|
|
||||||
const firstSlide = await zip.files[slideFiles[0]].async('string');
|
const firstSlide = await zip.files[slideFiles[0]].async('string');
|
||||||
const middleSlide = await zip.files[slideFiles[7]].async('string');
|
const chainSlide = await zip.files[slideFiles[13]].async('string');
|
||||||
const lastSlide = await zip.files[slideFiles[slideFiles.length - 1]].async('string');
|
const lastSlide = await zip.files[slideFiles[slideFiles.length - 1]].async('string');
|
||||||
assert(firstSlide.includes('Пищевая цепочка:'), 'На первом слайде нет заголовка');
|
assert(firstSlide.includes('Пищевая цепочка:'), 'На первом слайде нет заголовка');
|
||||||
assert(middleSlide.includes('Экономика качественной крови'), 'Нет слайда про экономику качественной крови');
|
assert(chainSlide.includes('Пищевая цепочка: от тебя до теневого правительства'), 'На слайде пищевой цепочки нет подписанного изображения');
|
||||||
assert(lastSlide.includes('Вывод'), 'На последнем слайде нет слайда с выводом');
|
assert(lastSlide.includes('Вывод'), 'На последнем слайде нет слайда с выводом');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||