diff --git a/assets/generated/01-title-food-chain.signed.svg b/assets/generated/01-title-food-chain.signed.svg new file mode 100644 index 0000000..a7199dd --- /dev/null +++ b/assets/generated/01-title-food-chain.signed.svg @@ -0,0 +1,8 @@ + + + + + + Титульная картинка + Вампирическая пищевая цепочка: элита, отбор и человечество как ресурс + diff --git a/assets/generated/02-medieval-origin.signed.svg b/assets/generated/02-medieval-origin.signed.svg new file mode 100644 index 0000000..837e40f --- /dev/null +++ b/assets/generated/02-medieval-origin.signed.svg @@ -0,0 +1,8 @@ + + + + + + Происхождение вируса + XII-XIV века: войны, эпидемии и скрытое распространение SNV-12 + diff --git a/assets/generated/03-vampire-classes.signed.svg b/assets/generated/03-vampire-classes.signed.svg new file mode 100644 index 0000000..04e264d --- /dev/null +++ b/assets/generated/03-vampire-classes.signed.svg @@ -0,0 +1,8 @@ + + + + + + Классы вампиров + Молодой носитель, старший адаптант и гемарх в одной иерархии + diff --git a/assets/generated/04-failed-infection.signed.svg b/assets/generated/04-failed-infection.signed.svg new file mode 100644 index 0000000..ceaf68c --- /dev/null +++ b/assets/generated/04-failed-infection.signed.svg @@ -0,0 +1,8 @@ + + + + + + Неудачное заражение + Феррогемный каскад и термогемолитический коллапс + diff --git a/assets/generated/05-recognize-vampire.signed.svg b/assets/generated/05-recognize-vampire.signed.svg new file mode 100644 index 0000000..a42f934 --- /dev/null +++ b/assets/generated/05-recognize-vampire.signed.svg @@ -0,0 +1,8 @@ + + + + + + Как распознать вампира + Судебно-медицинский плакат с внешними и поведенческими маркерами + diff --git a/assets/generated/06-blood-economy.signed.svg b/assets/generated/06-blood-economy.signed.svg new file mode 100644 index 0000000..d5612ba --- /dev/null +++ b/assets/generated/06-blood-economy.signed.svg @@ -0,0 +1,8 @@ + + + + + + Экономика качественной крови + Массовая, стабильная, пиковая и династическая кровь как ресурс + diff --git a/assets/generated/07-artificial-blood.signed.svg b/assets/generated/07-artificial-blood.signed.svg new file mode 100644 index 0000000..7b77eb9 --- /dev/null +++ b/assets/generated/07-artificial-blood.signed.svg @@ -0,0 +1,8 @@ + + + + + + Почему искусственная кровь не подходит + Сравнение живой сигнатуры крови и стерильного суррогата + diff --git a/assets/generated/08-hidden-donor-market.signed.svg b/assets/generated/08-hidden-donor-market.signed.svg new file mode 100644 index 0000000..5245757 --- /dev/null +++ b/assets/generated/08-hidden-donor-market.signed.svg @@ -0,0 +1,8 @@ + + + + + + Тайный рынок доноров + Клиники, биобанки, школы, клубы и логистика к верхушке + diff --git a/assets/generated/09-donor-house.signed.svg b/assets/generated/09-donor-house.signed.svg new file mode 100644 index 0000000..a5318d0 --- /dev/null +++ b/assets/generated/09-donor-house.signed.svg @@ -0,0 +1,8 @@ + + + + + + Донорский дом + Элитный пансион как скрытая инфраструктура премиальных доноров + diff --git a/assets/generated/10-blood-etiquette.signed.svg b/assets/generated/10-blood-etiquette.signed.svg new file mode 100644 index 0000000..9418bf1 --- /dev/null +++ b/assets/generated/10-blood-etiquette.signed.svg @@ -0,0 +1,8 @@ + + + + + + Кровяной этикет элиты + Аристократический ритуал оценки донора как дегустация вина + diff --git a/assets/generated/11-feeding-zones-map.signed.svg b/assets/generated/11-feeding-zones-map.signed.svg new file mode 100644 index 0000000..f0e81da --- /dev/null +++ b/assets/generated/11-feeding-zones-map.signed.svg @@ -0,0 +1,8 @@ + + + + + + Геополитика кормовых зон + Резервуары населения, коридоры, убежища и экспериментальные территории + diff --git a/assets/generated/12-food-chain-chart.signed.svg b/assets/generated/12-food-chain-chart.signed.svg new file mode 100644 index 0000000..786c393 --- /dev/null +++ b/assets/generated/12-food-chain-chart.signed.svg @@ -0,0 +1,8 @@ + + + + + + Пищевая цепочка + От человека через сортировку и рынок качества к гемархам + diff --git a/assets/generated/13-medieval-europe-map.png b/assets/generated/13-medieval-europe-map.png new file mode 100644 index 0000000..ac0054f Binary files /dev/null and b/assets/generated/13-medieval-europe-map.png differ diff --git a/assets/generated/13-medieval-europe-map.signed.svg b/assets/generated/13-medieval-europe-map.signed.svg new file mode 100644 index 0000000..bd955ea --- /dev/null +++ b/assets/generated/13-medieval-europe-map.signed.svg @@ -0,0 +1,8 @@ + + + + + + Средневековье создаёт идеальную среду + XII-XIV века: войны, миграции, антисанитария, эпидемии + diff --git a/assets/generated/README.md b/assets/generated/README.md index fca7eb4..374f31c 100644 --- a/assets/generated/README.md +++ b/assets/generated/README.md @@ -4,37 +4,53 @@ - 01-title-food-chain - PNG: `01-title-food-chain.png` + - Подписанная версия: `01-title-food-chain.signed.svg` - Подпись: Титульная картинка — Вампирическая пищевая цепочка: элита, отбор и человечество как ресурс - 02-medieval-origin - PNG: `02-medieval-origin.png` + - Подписанная версия: `02-medieval-origin.signed.svg` - Подпись: Происхождение вируса — XII-XIV века: войны, эпидемии и скрытое распространение SNV-12 - 03-vampire-classes - PNG: `03-vampire-classes.png` + - Подписанная версия: `03-vampire-classes.signed.svg` - Подпись: Классы вампиров — Молодой носитель, старший адаптант и гемарх в одной иерархии - 04-failed-infection - PNG: `04-failed-infection.png` + - Подписанная версия: `04-failed-infection.signed.svg` - Подпись: Неудачное заражение — Феррогемный каскад и термогемолитический коллапс - 05-recognize-vampire - PNG: `05-recognize-vampire.png` + - Подписанная версия: `05-recognize-vampire.signed.svg` - Подпись: Как распознать вампира — Судебно-медицинский плакат с внешними и поведенческими маркерами - 06-blood-economy - PNG: `06-blood-economy.png` + - Подписанная версия: `06-blood-economy.signed.svg` - Подпись: Экономика качественной крови — Массовая, стабильная, пиковая и династическая кровь как ресурс - 07-artificial-blood - PNG: `07-artificial-blood.png` + - Подписанная версия: `07-artificial-blood.signed.svg` - Подпись: Почему искусственная кровь не подходит — Сравнение живой сигнатуры крови и стерильного суррогата - 08-hidden-donor-market - PNG: `08-hidden-donor-market.png` + - Подписанная версия: `08-hidden-donor-market.signed.svg` - Подпись: Тайный рынок доноров — Клиники, биобанки, школы, клубы и логистика к верхушке - 09-donor-house - PNG: `09-donor-house.png` + - Подписанная версия: `09-donor-house.signed.svg` - Подпись: Донорский дом — Элитный пансион как скрытая инфраструктура премиальных доноров - 10-blood-etiquette - PNG: `10-blood-etiquette.png` + - Подписанная версия: `10-blood-etiquette.signed.svg` - Подпись: Кровяной этикет элиты — Аристократический ритуал оценки донора как дегустация вина - 11-feeding-zones-map - PNG: `11-feeding-zones-map.png` + - Подписанная версия: `11-feeding-zones-map.signed.svg` - Подпись: Геополитика кормовых зон — Резервуары населения, коридоры, убежища и экспериментальные территории - 12-food-chain-chart - 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 века: войны, миграции, антисанитария, эпидемии diff --git a/generate_presentation.js b/generate_presentation.js index 7ff0d20..de5d1e5 100644 --- a/generate_presentation.js +++ b/generate_presentation.js @@ -26,49 +26,44 @@ pptx.subject = 'Псевдонаучная теория о гемозависи pptx.title = 'Пищевая цепочка: от тебя до теневого правительства'; pptx.lang = 'ru-RU'; pptx.theme = { - headFontFace: 'Aptos Display', + headFontFace: 'Georgia', bodyFontFace: 'Aptos', lang: 'ru-RU' }; const C = { bgDark: '130B0D', - bgLight: 'F4EEE7', - card: 'FFF8F2', + bgLight: 'F3EADF', + card: 'FFF7EE', red: '7A1623', red2: 'A42A37', text: '24181A', cream: 'F5E6D3', gold: 'C7A56A', muted: '705A5D', - line: 'D8C2B8', 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.addShape(pptx.ShapeType.rect, { x: 0, y: 0, w: 13.333, h: 0.45, 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(tag, { x: 10.2, y: 0.6, w: 2.4, 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 }); + 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.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.0, y: 0.62, w: 2.65, h: 0.18, fontSize: 10, color: C.red2, italic: true, align: 'right', margin: 0 }); } function addBullets(slide, items, opts = {}) { 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, { x: opts.x ?? 0.9, 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) { 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(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 -{ - const s = pptx.addSlide(); - s.background = { color: C.bgDark }; - s.addImage({ path: assets.title, x: 0, y: 0, w: 13.333, h: 7.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 } }); - 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: 'Aptos Display', fontSize: 25, 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); +function addCallout(slide, text, opts = {}) { + slide.addShape(pptx.ShapeType.roundRect, { + x: opts.x ?? 0.9, + y: opts.y ?? 5.82, + w: opts.w ?? 11.5, + h: opts.h ?? 0.58, + rectRadius: 0.05, + fill: { color: opts.fill ?? C.red }, + line: { color: opts.fill ?? C.red } + }); + 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(); - 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, 'Базовая идея', 'Теневое правительство — это не просто политическая сеть, а долгоживущая гемозависимая каста, превратившая власть в механизм стабильного питания.'); addBullets(s, [ 'вирусное происхождение касты;', @@ -140,10 +166,10 @@ function addCard(slide, x, y, w, h, title, body, accent = C.red2) { footer(s, 2); } -// 3 Virus +// 3 virus { const s = pptx.addSlide(); - baseLight(s, 'Sanguis Noctis Virus (SNV-12)'); + baseTextSlide(s, 'Sanguis Noctis Virus (SNV-12)'); 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 }); addCard(s, 6.8, 1.55, 5.3, 3.9, 'Ключевые эффекты', 'SNV-12 не делает человека мистическим существом мгновенно. Он перестраивает обменные пути, усиливает регенерацию, замедляет старение и формирует зависимость от человеческой крови как от носителя редких сигнальных молекул.'); - addCallout(s, 'Вампиризм здесь — не проклятие, а вирусная адаптация', { fill: 'A42A37' }); + addCallout(s, 'Вампиризм здесь — не проклятие, а вирусная адаптация', { fill: C.red2 }); footer(s, 3); } -// 4 Middle Ages +// 4 medieval origin { const s = pptx.addSlide(); - baseLight(s, 'Почему именно XII-XIV века'); - s.addImage({ path: assets.medieval, x: 0.78, y: 1.28, w: 6.9, h: 4.85 }); - addBullets(s, [ - 'войны и миграции ускоряют перенос патогена;', - 'антисанитария скрывает аномальные случаи;', - 'массовая смертность маскирует новый фенотип;', - 'фольклор фиксирует ранние утечки в легенды.' - ], { x: 8.0, y: 1.7, w: 4.2, h: 3.7, fontSize: 17.5 }); - addCallout(s, 'Там, где высокая смертность, новый патоген легче принять за обычное бедствие', { y: 6.02, fontSize: 19 }); - footer(s, 4); + fullImage(s, assets.medieval); + darkPlaque(s, 'XII–XIV века', 5.05, 0.38, 3.2, 0.34, 18, { bold: true }); + 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 }); + footer(s, 4, true); } -// 5 Classes +// 5 classes { const s = pptx.addSlide(); - baseLight(s, 'Классы вампирической адаптации'); - s.addImage({ path: assets.classes, x: 0.78, y: 1.35, w: 7.0, h: 5.1 }); - addBullets(s, [ - 'молодой носитель: нестабилен и голоден;', - 'старший адаптант: устойчив и дисциплинирован;', - 'гемарх: древняя элита, пьёт редко, но требует лучшее;', - 'ранний возраст заражения повышает шанс интеграции.' - ], { x: 8.02, y: 1.7, w: 4.25, h: 3.9, fontSize: 16.8 }); - addCallout(s, 'Древность в этой системе — не возраст, а политический капитал', { y: 6.0, w: 12.0, x: 0.65, fontSize: 20 }); - footer(s, 5); + fullImage(s, assets.classes); + lightPlaque(s, 'нестабилен, часто голоден', 0.45, 5.93, 3.42, 0.4, 12); + 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); + footer(s, 5, true); } -// 6 Failed infection +// 6 failed infection { const s = pptx.addSlide(); - baseLight(s, 'Не всякий укушенный становится вампиром'); - s.addImage({ path: assets.failed, x: 0.78, y: 1.28, w: 6.9, h: 4.9 }); - addBullets(s, [ - 'феррогемный каскад запускает перегрев крови;', - 'летальная несовместимость отсеивает большинство;', - 'успешная вампиризация биологически редка;', - 'малочисленность касты имеет псевдонаучное объяснение.' - ], { x: 8.0, y: 1.72, w: 4.2, h: 3.8, fontSize: 17 }); - addCallout(s, 'Не всякий укушенный становится вампиром; большинство становятся статистикой', { y: 6.0, fontSize: 18.5 }); - footer(s, 6); + fullImage(s, assets.failed); + lightPlaque(s, 'объект: носитель SNV-12\nс несовместимым фенотипом', 0.52, 0.8, 3.47, 1.16, 12.5, { bold: true }); + 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); + lightPlaque(s, 'Неудачное обращение объясняется\nтермогемолитическим коллапсом.', 4.35, 5.45, 3.8, 1.1, 13, { bold: true }); + footer(s, 6, true); } -// 7 Recognition +// 7 recognize vampire { const s = pptx.addSlide(); - baseLight(s, 'Как распознать вампира'); - s.addImage({ path: assets.recognize, x: 0.78, y: 1.28, w: 6.85, h: 4.95 }); - addBullets(s, [ - 'клыки чуть длиннее нормы;', - 'странно медленное старение;', - 'в голоде — тёмный расширенный зрачок;', - 'закрытые клубы и слишком долгая карьера.' - ], { x: 8.0, y: 1.7, w: 4.2, h: 3.6, fontSize: 17.3 }); - addCallout(s, 'Ни один симптом не доказывает ничего сам по себе — работает только совокупность', { y: 6.0, w: 12.0, x: 0.65, fontSize: 18.3 }); - footer(s, 7); + fullImage(s, assets.recognize); + lightPlaque(s, 'слегка увеличенные\nклыки', 0.42, 2.06, 2.38, 0.46, 12.4); + 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); + footer(s, 7, true); } -// 8 Blood economy +// 8 blood economy { const s = pptx.addSlide(); - baseLight(s, 'Экономика качественной крови'); - s.addImage({ path: assets.blood, x: 0.78, y: 1.3, w: 7.0, h: 4.95 }); - addBullets(s, [ - 'массовая кровь — для периферии;', - 'стабильная кровь — от здоровых доноров;', - 'пиковая кровь — от молодых и сильных;', - 'династическая кровь — от особо ценных линий.' - ], { x: 8.0, y: 1.65, w: 4.25, h: 3.8, fontSize: 16.9 }); - addCallout(s, 'Чем древнее вампир, тем реже он питается, но тем дороже обходится каждый акт питания', { y: 6.0, x: 0.65, w: 12.0, fontSize: 17.8 }); - footer(s, 8); + fullImage(s, assets.blood); + lightPlaque(s, 'базовое\nподдержание', 1.26, 1.84, 2.05, 0.36, 12.2); + 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); + lightPlaque(s, 'для старших\nадаптантов', 10.16, 4.98, 1.62, 0.28, 10.2); + lightPlaque(s, 'только для\nдревних', 10.16, 6.47, 1.62, 0.28, 10.2); + 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(); - baseLight(s, 'Почему искусственная кровь им не подходит'); - s.addImage({ path: assets.artificial, x: 0.78, y: 1.28, w: 7.0, h: 4.95 }); - addBullets(s, [ - 'живая кровь несёт гормоны и стрессовые маркеры;', - 'искусственный суррогат даёт только базовую функцию;', - 'у гемархов не возникает полноценного насыщения;', - 'фототолерантность и регенерация не восстанавливаются.' - ], { x: 8.0, y: 1.67, w: 4.25, h: 3.8, fontSize: 16.8 }); - addCallout(s, 'Искусственная кровь для них — суррогат, а не решение', { y: 6.0, fontSize: 19 }); - footer(s, 9); + fullImage(s, assets.artificial); + lightPlaque(s, 'высокая\nвариативность', 4.78, 1.58, 1.55, 0.28, 10.2); + 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); + lightPlaque(s, 'сглажен', 10.2, 1.58, 1.55, 0.28, 10.2); + lightPlaque(s, 'почти нет', 10.2, 2.54, 1.55, 0.28, 10.2); + 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(); - baseLight(s, 'Тайный рынок доноров'); - s.addImage({ path: assets.market, x: 0.78, y: 1.28, w: 6.95, h: 4.95 }); - addBullets(s, [ - 'частные клиники и закрытые биобанки;', - 'элитные школы и клубы как фильтр линий;', - 'донорские дома и фонды наблюдения;', - 'качество для верхушки важнее объёма.' - ], { x: 8.02, y: 1.72, w: 4.2, h: 3.5, fontSize: 17 }); - addCallout(s, 'Настоящая роскошь для гемархов — не золото, а доступ к правильно отсортированным живым донорам', { y: 6.0, x: 0.65, w: 12.0, fontSize: 17 }); - footer(s, 10); + fullImage(s, assets.market); + darkPlaque(s, 'Тайный рынок доноров', 5.35, 2.06, 2.1, 0.28, 16, { bold: true }); + 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); + darkPlaque(s, 'Медицинский\nотбор', 2.95, 4.13, 1.9, 0.22, 10.0); + lightPlaque(s, 'лаунджи для\nудержания доноров', 5.55, 4.88, 2.42, 0.34, 10.5); + 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(); - baseLight(s, 'Почему захват власти рационален'); - s.addImage({ path: assets.donorHouse, x: 0.78, y: 1.28, w: 6.95, h: 4.95 }); - addBullets(s, [ - 'обеспечить безопасный доступ к крови;', - 'скрыть своё существование;', - 'сортировать кровь по качеству;', - 'контролировать внутреннюю иерархию через снабжение.' - ], { x: 8.0, y: 1.72, w: 4.2, h: 3.7, fontSize: 17.2 }); - addCallout(s, 'Власть здесь не цель, а технология питания', { y: 6.0, fontSize: 22 }); - footer(s, 11); + fullImage(s, assets.donorHouse); + darkPlaque(s, 'Донорский дом', 0.82, 0.52, 4.95, 0.4, 22, { bold: true }); + 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); + footer(s, 11, true); } -// 12 Internal discipline +// 12 blood etiquette { const s = pptx.addSlide(); - baseLight(s, 'Кровь как валюта и инструмент подчинения'); - s.addImage({ path: assets.etiquette, x: 0.78, y: 1.28, w: 6.95, h: 4.95 }); - addBullets(s, [ - 'доступ к качественной крови = статус;', - 'плохое питание ломает самоконтроль низших носителей;', - 'снабжение превращается в механизм дисциплины;', - 'верхушка удерживает касту через монополию на лучший ресурс.' - ], { 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); + fullImage(s, assets.etiquette); + lightPlaque(s, 'Кровяной этикет элиты', 3.95, 0.42, 5.38, 0.42, 22, { bold: true }); + 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); } -// 13 Geography +// 13 feeding zones { const s = pptx.addSlide(); - baseLight(s, 'Геополитика кормовых зон'); - s.addImage({ path: assets.zones, x: 0.78, y: 1.28, w: 7.0, h: 4.98 }); - addBullets(s, [ - 'резервуары населения;', - 'транспортные коридоры людей и биоресурсов;', - 'убежища древних династий;', - 'экспериментальные зоны селекции и наблюдения.' - ], { x: 8.0, y: 1.7, w: 4.2, h: 3.7, fontSize: 17.1 }); - addCallout(s, 'Геополитика = распределение кормовых контуров', { y: 6.02, fontSize: 21 }); - footer(s, 13); + fullImage(s, assets.zones); + lightPlaque(s, 'Геополитика кормовых зон', 3.62, 0.34, 5.9, 0.34, 20, { bold: true }); + 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); + lightPlaque(s, 'карта показывает не государства,\nа контуры биологического снабжения', 4.72, 6.88, 3.95, 0.36, 11.6, { bold: true }); + footer(s, 13, true); } -// 14 Chain +// 14 food chain chart { const s = pptx.addSlide(); - baseLight(s, 'Пищевая цепочка: от тебя до теневого правительства'); - s.addImage({ path: assets.chain, x: 0.78, y: 1.28, w: 7.0, h: 4.98 }); - addBullets(s, [ - 'человек — исходный биоресурс;', - 'системы учёта отсеивают пригодных доноров;', - 'рынок качества поднимает ресурс к верхушке;', - 'гемархи замыкают всю логистику на себе.' - ], { x: 8.0, y: 1.72, w: 4.2, h: 3.7, fontSize: 17.1 }); - addCallout(s, 'Человек включён в систему не как гражданин, а как элемент глобальной донорской инфраструктуры', { y: 6.0, x: 0.65, w: 12.0, fontSize: 17.6 }); - footer(s, 14); + fullImage(s, assets.chain); + lightPlaque(s, 'Пищевая цепочка: от тебя до теневого правительства', 1.82, 0.28, 9.72, 0.34, 17.5, { bold: true }); + 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); + darkPlaque(s, 'досье', 11.18, 1.8, 1.48, 0.2, 10.2); + darkPlaque(s, 'гемарх', 12.08, 1.8, 0.95, 0.2, 10.0); + 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(); - 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.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• кровь = валюта\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 }); - footer(s, 15); + footer(s, 15, true); } async function main() { diff --git a/plan-novoj-prezentacii.md b/plan-novoj-prezentacii.md new file mode 100644 index 0000000..1918256 --- /dev/null +++ b/plan-novoj-prezentacii.md @@ -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 слайда: + - вирус и молекула; + - механизм и симптомы. +- Если карта Средневековья выйдет слишком декоративной, её надо перегенерировать до состояния аналитической карты. + +--- + +## Короткий итог + +Новая презентация должна выглядеть не как оккультный арт-проект, а как строгий, почти биомедицинский и аналитический доклад о вымышленной системе. Центральная новая ось — биологический механизм (вирус + молекула + клеточное действие), из которого выводятся все вампирские свойства и вся социальная надстройка. diff --git a/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pdf b/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pdf index 5e4b2ac..ea9e546 100644 Binary files a/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pdf and b/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pdf differ diff --git a/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pptx b/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pptx index 6964661..034daf8 100644 Binary files a/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pptx and b/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pptx differ diff --git a/rendered_check/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.png b/rendered_check/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.png index b86af45..2e8fa59 100644 Binary files a/rendered_check/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.png and b/rendered_check/prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.png differ diff --git a/verify.js b/verify.js index 919f095..ba4759c 100644 --- a/verify.js +++ b/verify.js @@ -8,6 +8,7 @@ const pptxPath = path.join(base, 'prezentaciya-vampiricheskoe-tenevoe-pravitelst const pdfPath = path.join(base, 'prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pdf'); const reportPath = path.join(base, 'doklad.md'); const handoutPath = path.join(base, 'razdatochnyj-material.md'); +const generatorPath = path.join(base, 'generate_presentation.js'); function assert(cond, msg) { if (!cond) throw new Error(msg); @@ -22,10 +23,12 @@ async function main() { const report = fs.readFileSync(reportPath, 'utf8'); const handout = fs.readFileSync(handoutPath, 'utf8'); + const generator = fs.readFileSync(generatorPath, 'utf8'); assert(report.includes('Sanguis Noctis Virus'), 'В докладе отсутствует ключевой термин'); assert(report.includes('Экономика качественной крови'), 'В докладе нет раздела о качественной крови'); assert(report.includes('Почему искусственная кровь им не подходит'), 'В докладе нет раздела про искусственную кровь'); assert(handout.includes('Тайный рынок доноров'), 'В раздатке нет блока про тайный рынок доноров'); + assert(generator.includes("12-food-chain-chart.png") && generator.includes("assets', 'generated'"), 'Генератор не использует пакет generated PNG'); const pptxBuf = fs.readFileSync(pptxPath); const zip = await JSZip.loadAsync(pptxBuf); @@ -35,10 +38,10 @@ async function main() { assert(slideFiles.length === 15, `Ожидалось 15 слайдов, получено ${slideFiles.length}`); 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'); assert(firstSlide.includes('Пищевая цепочка:'), 'На первом слайде нет заголовка'); - assert(middleSlide.includes('Экономика качественной крови'), 'Нет слайда про экономику качественной крови'); + assert(chainSlide.includes('Пищевая цепочка: от тебя до теневого правительства'), 'На слайде пищевой цепочки нет подписанного изображения'); assert(lastSlide.includes('Вывод'), 'На последнем слайде нет слайда с выводом'); try {