claude-presentation-master 3.8.6 → 3.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1300,11 +1300,20 @@ declare function initRenderer(): Promise<Renderer>;
1300
1300
  * - Tables as actual tables (not mangled metrics)
1301
1301
  * - Complete bullets (never truncated)
1302
1302
  * - Clean professional CSS (no random stock photos)
1303
- * - McKinsey/BCG style dark theme
1303
+ * - McKinsey/BCG consulting style (WHITE background, strong hierarchy)
1304
1304
  * - Automatic PDF generation alongside HTML
1305
1305
  */
1306
1306
 
1307
+ type ThemeStyle = 'mckinsey' | 'dark' | 'minimal' | 'corporate' | 'startup';
1307
1308
  declare class RendererV2 {
1309
+ private theme;
1310
+ private presentationType;
1311
+ /**
1312
+ * Create renderer with theme based on presentation type.
1313
+ * @param presentationType - The type of deck being created (determines theme)
1314
+ * @param themeOverride - Optional explicit theme override
1315
+ */
1316
+ constructor(presentationType?: PresentationType, themeOverride?: ThemeStyle);
1308
1317
  /**
1309
1318
  * Render slides to complete HTML document.
1310
1319
  */
@@ -1326,6 +1335,14 @@ declare class RendererV2 {
1326
1335
  * Render HTML optimized for PDF printing (no reveal.js, static pages).
1327
1336
  */
1328
1337
  private renderForPrint;
1338
+ /**
1339
+ * McKinsey-style print HTML (white background, professional).
1340
+ */
1341
+ private getMcKinseyPrintHTML;
1342
+ /**
1343
+ * Dark theme print HTML (legacy).
1344
+ */
1345
+ private getDarkPrintHTML;
1329
1346
  /**
1330
1347
  * Render slide content (shared between HTML and PDF renderers).
1331
1348
  */
@@ -1379,11 +1396,32 @@ declare class RendererV2 {
1379
1396
  */
1380
1397
  private escapeHtml;
1381
1398
  /**
1382
- * Professional CSS - McKinsey/BCG style.
1399
+ * Professional CSS - McKinsey/BCG consulting style.
1383
1400
  */
1384
1401
  private getCSS;
1402
+ /**
1403
+ * McKinsey/BCG Consulting Style - WHITE background, professional hierarchy.
1404
+ */
1405
+ private getMcKinseyCSS;
1406
+ /**
1407
+ * Dark theme CSS (legacy).
1408
+ */
1409
+ private getDarkCSS;
1385
1410
  }
1386
- declare function createRendererV2(): RendererV2;
1411
+ /**
1412
+ * Create a renderer with theme matched to the presentation type.
1413
+ *
1414
+ * @param presentationType - Type of deck (consulting_deck, keynote, etc.)
1415
+ * @param themeOverride - Optional explicit theme to use instead of auto-mapping
1416
+ *
1417
+ * Theme mapping:
1418
+ * - consulting_deck, board_presentation, internal_update → McKinsey (white, professional)
1419
+ * - keynote, sales_pitch, technical → Dark (dramatic)
1420
+ * - training, workshop, all_hands → Minimal (clean, readable)
1421
+ * - product_demo, investor_pitch → Startup (modern dark)
1422
+ * - executive_briefing → Corporate (professional)
1423
+ */
1424
+ declare function createRendererV2(presentationType?: PresentationType, themeOverride?: ThemeStyle): RendererV2;
1387
1425
 
1388
1426
  /**
1389
1427
  * NanoBanana Pro Image Generation Provider
package/dist/index.d.ts CHANGED
@@ -1300,11 +1300,20 @@ declare function initRenderer(): Promise<Renderer>;
1300
1300
  * - Tables as actual tables (not mangled metrics)
1301
1301
  * - Complete bullets (never truncated)
1302
1302
  * - Clean professional CSS (no random stock photos)
1303
- * - McKinsey/BCG style dark theme
1303
+ * - McKinsey/BCG consulting style (WHITE background, strong hierarchy)
1304
1304
  * - Automatic PDF generation alongside HTML
1305
1305
  */
1306
1306
 
1307
+ type ThemeStyle = 'mckinsey' | 'dark' | 'minimal' | 'corporate' | 'startup';
1307
1308
  declare class RendererV2 {
1309
+ private theme;
1310
+ private presentationType;
1311
+ /**
1312
+ * Create renderer with theme based on presentation type.
1313
+ * @param presentationType - The type of deck being created (determines theme)
1314
+ * @param themeOverride - Optional explicit theme override
1315
+ */
1316
+ constructor(presentationType?: PresentationType, themeOverride?: ThemeStyle);
1308
1317
  /**
1309
1318
  * Render slides to complete HTML document.
1310
1319
  */
@@ -1326,6 +1335,14 @@ declare class RendererV2 {
1326
1335
  * Render HTML optimized for PDF printing (no reveal.js, static pages).
1327
1336
  */
1328
1337
  private renderForPrint;
1338
+ /**
1339
+ * McKinsey-style print HTML (white background, professional).
1340
+ */
1341
+ private getMcKinseyPrintHTML;
1342
+ /**
1343
+ * Dark theme print HTML (legacy).
1344
+ */
1345
+ private getDarkPrintHTML;
1329
1346
  /**
1330
1347
  * Render slide content (shared between HTML and PDF renderers).
1331
1348
  */
@@ -1379,11 +1396,32 @@ declare class RendererV2 {
1379
1396
  */
1380
1397
  private escapeHtml;
1381
1398
  /**
1382
- * Professional CSS - McKinsey/BCG style.
1399
+ * Professional CSS - McKinsey/BCG consulting style.
1383
1400
  */
1384
1401
  private getCSS;
1402
+ /**
1403
+ * McKinsey/BCG Consulting Style - WHITE background, professional hierarchy.
1404
+ */
1405
+ private getMcKinseyCSS;
1406
+ /**
1407
+ * Dark theme CSS (legacy).
1408
+ */
1409
+ private getDarkCSS;
1385
1410
  }
1386
- declare function createRendererV2(): RendererV2;
1411
+ /**
1412
+ * Create a renderer with theme matched to the presentation type.
1413
+ *
1414
+ * @param presentationType - Type of deck (consulting_deck, keynote, etc.)
1415
+ * @param themeOverride - Optional explicit theme to use instead of auto-mapping
1416
+ *
1417
+ * Theme mapping:
1418
+ * - consulting_deck, board_presentation, internal_update → McKinsey (white, professional)
1419
+ * - keynote, sales_pitch, technical → Dark (dramatic)
1420
+ * - training, workshop, all_hands → Minimal (clean, readable)
1421
+ * - product_demo, investor_pitch → Startup (modern dark)
1422
+ * - executive_briefing → Corporate (professional)
1423
+ */
1424
+ declare function createRendererV2(presentationType?: PresentationType, themeOverride?: ThemeStyle): RendererV2;
1387
1425
 
1388
1426
  /**
1389
1427
  * NanoBanana Pro Image Generation Provider
package/dist/index.js CHANGED
@@ -96623,7 +96623,70 @@ async function initRenderer() {
96623
96623
 
96624
96624
  // src/output/RendererV2.ts
96625
96625
  var import_fs8 = require("fs");
96626
+ var THEMES = {
96627
+ mckinsey: {
96628
+ style: "mckinsey",
96629
+ primaryColor: "#003366",
96630
+ // McKinsey blue
96631
+ accentColor: "#0066cc",
96632
+ description: "White background, professional hierarchy - for consulting/analysis decks"
96633
+ },
96634
+ dark: {
96635
+ style: "dark",
96636
+ primaryColor: "#1a1a2e",
96637
+ accentColor: "#4a9eff",
96638
+ description: "Dark dramatic theme - for keynotes and tech presentations"
96639
+ },
96640
+ minimal: {
96641
+ style: "minimal",
96642
+ primaryColor: "#333333",
96643
+ accentColor: "#0066cc",
96644
+ description: "Clean minimal white - for training and documentation"
96645
+ },
96646
+ corporate: {
96647
+ style: "mckinsey",
96648
+ // Uses McKinsey CSS but with different branding potential
96649
+ primaryColor: "#1a365d",
96650
+ accentColor: "#3182ce",
96651
+ description: "Professional corporate - for executive presentations"
96652
+ },
96653
+ startup: {
96654
+ style: "dark",
96655
+ primaryColor: "#0d1117",
96656
+ accentColor: "#58a6ff",
96657
+ description: "Modern dark - for pitch decks and product demos"
96658
+ }
96659
+ };
96660
+ var PRESENTATION_TYPE_TO_THEME = {
96661
+ // Keynotes → Dark dramatic style (TED talks, big stage)
96662
+ ted_keynote: "dark",
96663
+ // Sales → Dark dramatic style (persuasion, impact)
96664
+ sales_pitch: "dark",
96665
+ // Consulting/Analysis decks → McKinsey white style (data-heavy, professional)
96666
+ consulting_deck: "mckinsey",
96667
+ // Investment Banking → McKinsey style (financial, dense data)
96668
+ investment_banking: "mckinsey",
96669
+ // Investor Pitch → Startup dark style (modern, VC audiences)
96670
+ investor_pitch: "startup",
96671
+ // Technical → Dark style (engineering audiences like dark mode)
96672
+ technical_presentation: "dark",
96673
+ // All Hands → Minimal clean style (readable, accessible)
96674
+ all_hands: "minimal"
96675
+ };
96626
96676
  var RendererV2 = class {
96677
+ theme;
96678
+ presentationType;
96679
+ /**
96680
+ * Create renderer with theme based on presentation type.
96681
+ * @param presentationType - The type of deck being created (determines theme)
96682
+ * @param themeOverride - Optional explicit theme override
96683
+ */
96684
+ constructor(presentationType = "consulting_deck", themeOverride) {
96685
+ this.presentationType = presentationType;
96686
+ const themeStyle = themeOverride || PRESENTATION_TYPE_TO_THEME[presentationType] || "mckinsey";
96687
+ this.theme = THEMES[themeStyle] || THEMES.mckinsey;
96688
+ console.log(`[RendererV2] Using "${this.theme.style}" theme for "${presentationType}" deck`);
96689
+ }
96627
96690
  /**
96628
96691
  * Render slides to complete HTML document.
96629
96692
  */
@@ -96712,6 +96775,245 @@ ${slidesHtml}
96712
96775
  const content = this.renderSlideContent(slide);
96713
96776
  return `<div class="slide slide-${slide.type}">${content}</div>`;
96714
96777
  }).join("\n");
96778
+ if (this.theme.style === "mckinsey") {
96779
+ return this.getMcKinseyPrintHTML(title, slidesHtml);
96780
+ }
96781
+ return this.getDarkPrintHTML(title, slidesHtml);
96782
+ }
96783
+ /**
96784
+ * McKinsey-style print HTML (white background, professional).
96785
+ */
96786
+ getMcKinseyPrintHTML(title, slidesHtml) {
96787
+ return `<!DOCTYPE html>
96788
+ <html lang="en">
96789
+ <head>
96790
+ <meta charset="UTF-8">
96791
+ <title>${this.escapeHtml(title)}</title>
96792
+ <style>
96793
+ @page {
96794
+ size: 1920px 1080px;
96795
+ margin: 0;
96796
+ }
96797
+
96798
+ * {
96799
+ box-sizing: border-box;
96800
+ margin: 0;
96801
+ padding: 0;
96802
+ }
96803
+
96804
+ body {
96805
+ font-family: 'Arial', 'Helvetica', sans-serif;
96806
+ background: #ffffff;
96807
+ color: #1a1a1a;
96808
+ }
96809
+
96810
+ .slide {
96811
+ width: 1920px;
96812
+ height: 1080px;
96813
+ padding: 0;
96814
+ background: #ffffff;
96815
+ page-break-after: always;
96816
+ page-break-inside: avoid;
96817
+ position: relative;
96818
+ display: flex;
96819
+ flex-direction: column;
96820
+ overflow: hidden;
96821
+ }
96822
+
96823
+ /* McKinsey header bar */
96824
+ .slide::before {
96825
+ content: '';
96826
+ display: block;
96827
+ height: 8px;
96828
+ background: #003366;
96829
+ width: 100%;
96830
+ flex-shrink: 0;
96831
+ }
96832
+
96833
+ .slide-content-area {
96834
+ padding: 60px 80px;
96835
+ flex: 1;
96836
+ display: flex;
96837
+ flex-direction: column;
96838
+ }
96839
+
96840
+ .slide:last-child {
96841
+ page-break-after: auto;
96842
+ }
96843
+
96844
+ h1 {
96845
+ font-size: 44px;
96846
+ font-weight: 700;
96847
+ color: #003366;
96848
+ margin-bottom: 24px;
96849
+ line-height: 1.2;
96850
+ border-bottom: 3px solid #003366;
96851
+ padding-bottom: 16px;
96852
+ }
96853
+
96854
+ h2 {
96855
+ font-size: 28px;
96856
+ font-weight: 600;
96857
+ color: #333333;
96858
+ margin-bottom: 20px;
96859
+ }
96860
+
96861
+ p {
96862
+ font-size: 22px;
96863
+ color: #333333;
96864
+ line-height: 1.6;
96865
+ margin-bottom: 16px;
96866
+ }
96867
+
96868
+ ul {
96869
+ margin: 20px 0 0 0;
96870
+ padding: 0;
96871
+ list-style: none;
96872
+ flex: 1;
96873
+ }
96874
+
96875
+ li {
96876
+ font-size: 22px;
96877
+ color: #333333;
96878
+ line-height: 1.5;
96879
+ margin-bottom: 16px;
96880
+ padding-left: 28px;
96881
+ position: relative;
96882
+ }
96883
+
96884
+ li::before {
96885
+ content: '\u25A0';
96886
+ position: absolute;
96887
+ left: 0;
96888
+ top: 0;
96889
+ color: #003366;
96890
+ font-size: 12px;
96891
+ }
96892
+
96893
+ li strong {
96894
+ color: #1a1a1a;
96895
+ font-weight: 700;
96896
+ }
96897
+
96898
+ .data-table {
96899
+ width: 100%;
96900
+ border-collapse: collapse;
96901
+ margin-top: 24px;
96902
+ font-size: 18px;
96903
+ }
96904
+
96905
+ .data-table th {
96906
+ background: #003366;
96907
+ color: #ffffff;
96908
+ font-weight: 600;
96909
+ text-align: left;
96910
+ padding: 14px 16px;
96911
+ border: 1px solid #003366;
96912
+ }
96913
+
96914
+ .data-table td {
96915
+ color: #333333;
96916
+ padding: 12px 16px;
96917
+ border: 1px solid #dee2e6;
96918
+ background: #ffffff;
96919
+ }
96920
+
96921
+ .data-table tbody tr:nth-child(even) td {
96922
+ background: #f8f9fa;
96923
+ }
96924
+
96925
+ .data-table td.number {
96926
+ text-align: right;
96927
+ font-weight: 600;
96928
+ color: #003366;
96929
+ }
96930
+
96931
+ .metrics-container {
96932
+ display: flex;
96933
+ justify-content: flex-start;
96934
+ gap: 32px;
96935
+ flex-wrap: wrap;
96936
+ margin-top: 32px;
96937
+ }
96938
+
96939
+ .metric {
96940
+ background: #f8f9fa;
96941
+ border: 2px solid #dee2e6;
96942
+ border-top: 4px solid #003366;
96943
+ padding: 24px 32px;
96944
+ text-align: center;
96945
+ min-width: 180px;
96946
+ }
96947
+
96948
+ .metric-value {
96949
+ font-size: 48px;
96950
+ font-weight: 700;
96951
+ color: #003366;
96952
+ line-height: 1;
96953
+ margin-bottom: 8px;
96954
+ }
96955
+
96956
+ .metric-label {
96957
+ font-size: 14px;
96958
+ color: #666666;
96959
+ text-transform: uppercase;
96960
+ letter-spacing: 0.05em;
96961
+ }
96962
+
96963
+ .statement {
96964
+ font-size: 32px;
96965
+ color: #1a1a1a;
96966
+ line-height: 1.5;
96967
+ max-width: 85%;
96968
+ font-style: italic;
96969
+ }
96970
+
96971
+ .subtext {
96972
+ font-size: 20px;
96973
+ color: #666666;
96974
+ }
96975
+
96976
+ .slide-title, .slide-thank_you {
96977
+ justify-content: center;
96978
+ align-items: center;
96979
+ text-align: center;
96980
+ background: #003366 !important;
96981
+ }
96982
+
96983
+ .slide-title::before, .slide-thank_you::before {
96984
+ display: none !important;
96985
+ }
96986
+
96987
+ .slide-title h1, .slide-thank_you h1 {
96988
+ font-size: 56px;
96989
+ color: #ffffff;
96990
+ border-bottom: none;
96991
+ padding-bottom: 0;
96992
+ }
96993
+
96994
+ .slide-title h2, .slide-thank_you h2 {
96995
+ color: rgba(255, 255, 255, 0.8);
96996
+ }
96997
+
96998
+ .source {
96999
+ position: absolute;
97000
+ bottom: 24px;
97001
+ left: 80px;
97002
+ font-size: 12px;
97003
+ color: #666666;
97004
+ font-style: italic;
97005
+ }
97006
+ </style>
97007
+ </head>
97008
+ <body>
97009
+ ${slidesHtml}
97010
+ </body>
97011
+ </html>`;
97012
+ }
97013
+ /**
97014
+ * Dark theme print HTML (legacy).
97015
+ */
97016
+ getDarkPrintHTML(title, slidesHtml) {
96715
97017
  return `<!DOCTYPE html>
96716
97018
  <html lang="en">
96717
97019
  <head>
@@ -97137,9 +97439,307 @@ ${content}
97137
97439
  return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
97138
97440
  }
97139
97441
  /**
97140
- * Professional CSS - McKinsey/BCG style.
97442
+ * Professional CSS - McKinsey/BCG consulting style.
97141
97443
  */
97142
97444
  getCSS() {
97445
+ if (this.theme.style === "mckinsey") {
97446
+ return this.getMcKinseyCSS();
97447
+ }
97448
+ return this.getDarkCSS();
97449
+ }
97450
+ /**
97451
+ * McKinsey/BCG Consulting Style - WHITE background, professional hierarchy.
97452
+ */
97453
+ getMcKinseyCSS() {
97454
+ return `
97455
+ /* McKinsey Consulting Theme - Clean White, Strong Hierarchy */
97456
+ :root {
97457
+ --bg-primary: #ffffff;
97458
+ --bg-secondary: #f8f9fa;
97459
+ --bg-accent: #e9ecef;
97460
+ --text-primary: #1a1a1a;
97461
+ --text-secondary: #333333;
97462
+ --text-muted: #666666;
97463
+ --mckinsey-blue: #003366;
97464
+ --accent-blue: #0066cc;
97465
+ --accent-green: #28a745;
97466
+ --accent-red: #dc3545;
97467
+ --border-color: #dee2e6;
97468
+ --header-bar: #003366;
97469
+ }
97470
+
97471
+ .reveal {
97472
+ font-family: 'Georgia', 'Times New Roman', serif;
97473
+ }
97474
+
97475
+ .reveal .slides {
97476
+ text-align: left;
97477
+ }
97478
+
97479
+ .reveal .slides section {
97480
+ padding: 0;
97481
+ background: var(--bg-primary);
97482
+ height: 100%;
97483
+ box-sizing: border-box;
97484
+ display: flex !important;
97485
+ flex-direction: column;
97486
+ justify-content: flex-start;
97487
+ align-items: stretch;
97488
+ }
97489
+
97490
+ /* McKinsey-style header bar */
97491
+ .reveal .slides section::before {
97492
+ content: '';
97493
+ display: block;
97494
+ height: 8px;
97495
+ background: var(--header-bar);
97496
+ width: 100%;
97497
+ flex-shrink: 0;
97498
+ }
97499
+
97500
+ .reveal .slides section .slide-content {
97501
+ padding: 60px 80px;
97502
+ flex: 1;
97503
+ display: flex;
97504
+ flex-direction: column;
97505
+ }
97506
+
97507
+ .reveal .slides section > ul,
97508
+ .reveal .slides section > .data-table {
97509
+ flex: 1;
97510
+ display: flex;
97511
+ flex-direction: column;
97512
+ justify-content: flex-start;
97513
+ }
97514
+
97515
+ /* Typography - Strong Hierarchy */
97516
+ .reveal h1 {
97517
+ font-size: 44px;
97518
+ font-weight: 700;
97519
+ color: var(--mckinsey-blue);
97520
+ margin-bottom: 24px;
97521
+ line-height: 1.2;
97522
+ letter-spacing: -0.01em;
97523
+ font-family: 'Arial', 'Helvetica', sans-serif;
97524
+ border-bottom: 3px solid var(--mckinsey-blue);
97525
+ padding-bottom: 16px;
97526
+ }
97527
+
97528
+ .reveal h2 {
97529
+ font-size: 28px;
97530
+ font-weight: 600;
97531
+ color: var(--text-secondary);
97532
+ margin-bottom: 20px;
97533
+ font-family: 'Arial', 'Helvetica', sans-serif;
97534
+ }
97535
+
97536
+ .reveal p {
97537
+ font-size: 22px;
97538
+ color: var(--text-secondary);
97539
+ line-height: 1.6;
97540
+ margin-bottom: 16px;
97541
+ }
97542
+
97543
+ /* Bullets - Clear, readable */
97544
+ .reveal ul {
97545
+ margin: 20px 0 0 0;
97546
+ padding: 0;
97547
+ list-style: none;
97548
+ }
97549
+
97550
+ .reveal li {
97551
+ font-size: 22px;
97552
+ color: var(--text-secondary);
97553
+ line-height: 1.5;
97554
+ margin-bottom: 16px;
97555
+ padding-left: 28px;
97556
+ position: relative;
97557
+ }
97558
+
97559
+ .reveal li::before {
97560
+ content: '\u25A0';
97561
+ position: absolute;
97562
+ left: 0;
97563
+ top: 0;
97564
+ color: var(--mckinsey-blue);
97565
+ font-size: 12px;
97566
+ }
97567
+
97568
+ .reveal li strong {
97569
+ color: var(--text-primary);
97570
+ font-weight: 700;
97571
+ }
97572
+
97573
+ /* Tables - Clean consulting style */
97574
+ .data-table {
97575
+ width: 100%;
97576
+ border-collapse: collapse;
97577
+ margin-top: 24px;
97578
+ font-size: 18px;
97579
+ font-family: 'Arial', sans-serif;
97580
+ }
97581
+
97582
+ .data-table th {
97583
+ background: var(--mckinsey-blue);
97584
+ color: #ffffff;
97585
+ font-weight: 600;
97586
+ text-align: left;
97587
+ padding: 14px 16px;
97588
+ border: 1px solid var(--mckinsey-blue);
97589
+ }
97590
+
97591
+ .data-table td {
97592
+ color: var(--text-secondary);
97593
+ padding: 12px 16px;
97594
+ border: 1px solid var(--border-color);
97595
+ background: var(--bg-primary);
97596
+ }
97597
+
97598
+ .data-table tbody tr:nth-child(even) td {
97599
+ background: var(--bg-secondary);
97600
+ }
97601
+
97602
+ .data-table td.number {
97603
+ text-align: right;
97604
+ font-family: 'Arial', sans-serif;
97605
+ font-weight: 600;
97606
+ color: var(--mckinsey-blue);
97607
+ }
97608
+
97609
+ .data-table tbody tr:hover td {
97610
+ background: #e3f2fd;
97611
+ }
97612
+
97613
+ /* Metrics - Clean boxes */
97614
+ .metrics-container {
97615
+ display: flex;
97616
+ justify-content: flex-start;
97617
+ gap: 32px;
97618
+ flex-wrap: wrap;
97619
+ margin-top: 32px;
97620
+ }
97621
+
97622
+ .metric {
97623
+ background: var(--bg-secondary);
97624
+ border: 2px solid var(--border-color);
97625
+ border-top: 4px solid var(--mckinsey-blue);
97626
+ padding: 24px 32px;
97627
+ text-align: center;
97628
+ min-width: 180px;
97629
+ }
97630
+
97631
+ .metric-value {
97632
+ font-size: 48px;
97633
+ font-weight: 700;
97634
+ color: var(--mckinsey-blue);
97635
+ line-height: 1;
97636
+ margin-bottom: 8px;
97637
+ font-family: 'Arial', sans-serif;
97638
+ }
97639
+
97640
+ .metric-trend-up .metric-value {
97641
+ color: var(--accent-green);
97642
+ }
97643
+
97644
+ .metric-trend-down .metric-value {
97645
+ color: var(--accent-red);
97646
+ }
97647
+
97648
+ .metric-label {
97649
+ font-size: 14px;
97650
+ color: var(--text-muted);
97651
+ text-transform: uppercase;
97652
+ letter-spacing: 0.05em;
97653
+ font-family: 'Arial', sans-serif;
97654
+ }
97655
+
97656
+ /* Statement slides */
97657
+ .statement {
97658
+ font-size: 32px;
97659
+ color: var(--text-primary);
97660
+ line-height: 1.5;
97661
+ max-width: 85%;
97662
+ font-style: italic;
97663
+ }
97664
+
97665
+ .subtext {
97666
+ font-size: 20px;
97667
+ color: var(--text-muted);
97668
+ }
97669
+
97670
+ /* Title slide */
97671
+ .slide-title {
97672
+ display: flex;
97673
+ flex-direction: column;
97674
+ justify-content: center;
97675
+ align-items: center;
97676
+ text-align: center;
97677
+ background: var(--mckinsey-blue) !important;
97678
+ }
97679
+
97680
+ .slide-title::before {
97681
+ display: none !important;
97682
+ }
97683
+
97684
+ .slide-title h1 {
97685
+ font-size: 56px;
97686
+ color: #ffffff;
97687
+ border-bottom: none;
97688
+ padding-bottom: 0;
97689
+ }
97690
+
97691
+ .slide-title h2 {
97692
+ color: rgba(255, 255, 255, 0.8);
97693
+ }
97694
+
97695
+ /* Thank you slide */
97696
+ .slide-thank_you {
97697
+ display: flex;
97698
+ flex-direction: column;
97699
+ justify-content: center;
97700
+ align-items: center;
97701
+ text-align: center;
97702
+ background: var(--mckinsey-blue) !important;
97703
+ }
97704
+
97705
+ .slide-thank_you::before {
97706
+ display: none !important;
97707
+ }
97708
+
97709
+ .slide-thank_you h1 {
97710
+ font-size: 56px;
97711
+ color: #ffffff;
97712
+ border-bottom: none;
97713
+ margin-bottom: 16px;
97714
+ }
97715
+
97716
+ .slide-thank_you h2 {
97717
+ color: rgba(255, 255, 255, 0.8);
97718
+ }
97719
+
97720
+ /* Source citation */
97721
+ .source {
97722
+ position: absolute;
97723
+ bottom: 24px;
97724
+ left: 80px;
97725
+ font-size: 12px;
97726
+ color: var(--text-muted);
97727
+ font-style: italic;
97728
+ }
97729
+
97730
+ /* Page number style footer */
97731
+ .reveal .slide-number {
97732
+ background: var(--mckinsey-blue);
97733
+ color: #ffffff;
97734
+ font-size: 14px;
97735
+ padding: 8px 12px;
97736
+ }
97737
+ `;
97738
+ }
97739
+ /**
97740
+ * Dark theme CSS (legacy).
97741
+ */
97742
+ getDarkCSS() {
97143
97743
  return `
97144
97744
  /* Professional Dark Theme - No Random Images */
97145
97745
  :root {
@@ -97364,8 +97964,8 @@ ${content}
97364
97964
  `;
97365
97965
  }
97366
97966
  };
97367
- function createRendererV2() {
97368
- return new RendererV2();
97967
+ function createRendererV2(presentationType = "consulting_deck", themeOverride) {
97968
+ return new RendererV2(presentationType, themeOverride);
97369
97969
  }
97370
97970
 
97371
97971
  // src/image/NanoBananaProvider.ts
package/dist/index.mjs CHANGED
@@ -4910,7 +4910,70 @@ async function initRenderer() {
4910
4910
 
4911
4911
  // src/output/RendererV2.ts
4912
4912
  import { writeFileSync } from "fs";
4913
+ var THEMES = {
4914
+ mckinsey: {
4915
+ style: "mckinsey",
4916
+ primaryColor: "#003366",
4917
+ // McKinsey blue
4918
+ accentColor: "#0066cc",
4919
+ description: "White background, professional hierarchy - for consulting/analysis decks"
4920
+ },
4921
+ dark: {
4922
+ style: "dark",
4923
+ primaryColor: "#1a1a2e",
4924
+ accentColor: "#4a9eff",
4925
+ description: "Dark dramatic theme - for keynotes and tech presentations"
4926
+ },
4927
+ minimal: {
4928
+ style: "minimal",
4929
+ primaryColor: "#333333",
4930
+ accentColor: "#0066cc",
4931
+ description: "Clean minimal white - for training and documentation"
4932
+ },
4933
+ corporate: {
4934
+ style: "mckinsey",
4935
+ // Uses McKinsey CSS but with different branding potential
4936
+ primaryColor: "#1a365d",
4937
+ accentColor: "#3182ce",
4938
+ description: "Professional corporate - for executive presentations"
4939
+ },
4940
+ startup: {
4941
+ style: "dark",
4942
+ primaryColor: "#0d1117",
4943
+ accentColor: "#58a6ff",
4944
+ description: "Modern dark - for pitch decks and product demos"
4945
+ }
4946
+ };
4947
+ var PRESENTATION_TYPE_TO_THEME = {
4948
+ // Keynotes → Dark dramatic style (TED talks, big stage)
4949
+ ted_keynote: "dark",
4950
+ // Sales → Dark dramatic style (persuasion, impact)
4951
+ sales_pitch: "dark",
4952
+ // Consulting/Analysis decks → McKinsey white style (data-heavy, professional)
4953
+ consulting_deck: "mckinsey",
4954
+ // Investment Banking → McKinsey style (financial, dense data)
4955
+ investment_banking: "mckinsey",
4956
+ // Investor Pitch → Startup dark style (modern, VC audiences)
4957
+ investor_pitch: "startup",
4958
+ // Technical → Dark style (engineering audiences like dark mode)
4959
+ technical_presentation: "dark",
4960
+ // All Hands → Minimal clean style (readable, accessible)
4961
+ all_hands: "minimal"
4962
+ };
4913
4963
  var RendererV2 = class {
4964
+ theme;
4965
+ presentationType;
4966
+ /**
4967
+ * Create renderer with theme based on presentation type.
4968
+ * @param presentationType - The type of deck being created (determines theme)
4969
+ * @param themeOverride - Optional explicit theme override
4970
+ */
4971
+ constructor(presentationType = "consulting_deck", themeOverride) {
4972
+ this.presentationType = presentationType;
4973
+ const themeStyle = themeOverride || PRESENTATION_TYPE_TO_THEME[presentationType] || "mckinsey";
4974
+ this.theme = THEMES[themeStyle] || THEMES.mckinsey;
4975
+ console.log(`[RendererV2] Using "${this.theme.style}" theme for "${presentationType}" deck`);
4976
+ }
4914
4977
  /**
4915
4978
  * Render slides to complete HTML document.
4916
4979
  */
@@ -4999,6 +5062,245 @@ ${slidesHtml}
4999
5062
  const content = this.renderSlideContent(slide);
5000
5063
  return `<div class="slide slide-${slide.type}">${content}</div>`;
5001
5064
  }).join("\n");
5065
+ if (this.theme.style === "mckinsey") {
5066
+ return this.getMcKinseyPrintHTML(title, slidesHtml);
5067
+ }
5068
+ return this.getDarkPrintHTML(title, slidesHtml);
5069
+ }
5070
+ /**
5071
+ * McKinsey-style print HTML (white background, professional).
5072
+ */
5073
+ getMcKinseyPrintHTML(title, slidesHtml) {
5074
+ return `<!DOCTYPE html>
5075
+ <html lang="en">
5076
+ <head>
5077
+ <meta charset="UTF-8">
5078
+ <title>${this.escapeHtml(title)}</title>
5079
+ <style>
5080
+ @page {
5081
+ size: 1920px 1080px;
5082
+ margin: 0;
5083
+ }
5084
+
5085
+ * {
5086
+ box-sizing: border-box;
5087
+ margin: 0;
5088
+ padding: 0;
5089
+ }
5090
+
5091
+ body {
5092
+ font-family: 'Arial', 'Helvetica', sans-serif;
5093
+ background: #ffffff;
5094
+ color: #1a1a1a;
5095
+ }
5096
+
5097
+ .slide {
5098
+ width: 1920px;
5099
+ height: 1080px;
5100
+ padding: 0;
5101
+ background: #ffffff;
5102
+ page-break-after: always;
5103
+ page-break-inside: avoid;
5104
+ position: relative;
5105
+ display: flex;
5106
+ flex-direction: column;
5107
+ overflow: hidden;
5108
+ }
5109
+
5110
+ /* McKinsey header bar */
5111
+ .slide::before {
5112
+ content: '';
5113
+ display: block;
5114
+ height: 8px;
5115
+ background: #003366;
5116
+ width: 100%;
5117
+ flex-shrink: 0;
5118
+ }
5119
+
5120
+ .slide-content-area {
5121
+ padding: 60px 80px;
5122
+ flex: 1;
5123
+ display: flex;
5124
+ flex-direction: column;
5125
+ }
5126
+
5127
+ .slide:last-child {
5128
+ page-break-after: auto;
5129
+ }
5130
+
5131
+ h1 {
5132
+ font-size: 44px;
5133
+ font-weight: 700;
5134
+ color: #003366;
5135
+ margin-bottom: 24px;
5136
+ line-height: 1.2;
5137
+ border-bottom: 3px solid #003366;
5138
+ padding-bottom: 16px;
5139
+ }
5140
+
5141
+ h2 {
5142
+ font-size: 28px;
5143
+ font-weight: 600;
5144
+ color: #333333;
5145
+ margin-bottom: 20px;
5146
+ }
5147
+
5148
+ p {
5149
+ font-size: 22px;
5150
+ color: #333333;
5151
+ line-height: 1.6;
5152
+ margin-bottom: 16px;
5153
+ }
5154
+
5155
+ ul {
5156
+ margin: 20px 0 0 0;
5157
+ padding: 0;
5158
+ list-style: none;
5159
+ flex: 1;
5160
+ }
5161
+
5162
+ li {
5163
+ font-size: 22px;
5164
+ color: #333333;
5165
+ line-height: 1.5;
5166
+ margin-bottom: 16px;
5167
+ padding-left: 28px;
5168
+ position: relative;
5169
+ }
5170
+
5171
+ li::before {
5172
+ content: '\u25A0';
5173
+ position: absolute;
5174
+ left: 0;
5175
+ top: 0;
5176
+ color: #003366;
5177
+ font-size: 12px;
5178
+ }
5179
+
5180
+ li strong {
5181
+ color: #1a1a1a;
5182
+ font-weight: 700;
5183
+ }
5184
+
5185
+ .data-table {
5186
+ width: 100%;
5187
+ border-collapse: collapse;
5188
+ margin-top: 24px;
5189
+ font-size: 18px;
5190
+ }
5191
+
5192
+ .data-table th {
5193
+ background: #003366;
5194
+ color: #ffffff;
5195
+ font-weight: 600;
5196
+ text-align: left;
5197
+ padding: 14px 16px;
5198
+ border: 1px solid #003366;
5199
+ }
5200
+
5201
+ .data-table td {
5202
+ color: #333333;
5203
+ padding: 12px 16px;
5204
+ border: 1px solid #dee2e6;
5205
+ background: #ffffff;
5206
+ }
5207
+
5208
+ .data-table tbody tr:nth-child(even) td {
5209
+ background: #f8f9fa;
5210
+ }
5211
+
5212
+ .data-table td.number {
5213
+ text-align: right;
5214
+ font-weight: 600;
5215
+ color: #003366;
5216
+ }
5217
+
5218
+ .metrics-container {
5219
+ display: flex;
5220
+ justify-content: flex-start;
5221
+ gap: 32px;
5222
+ flex-wrap: wrap;
5223
+ margin-top: 32px;
5224
+ }
5225
+
5226
+ .metric {
5227
+ background: #f8f9fa;
5228
+ border: 2px solid #dee2e6;
5229
+ border-top: 4px solid #003366;
5230
+ padding: 24px 32px;
5231
+ text-align: center;
5232
+ min-width: 180px;
5233
+ }
5234
+
5235
+ .metric-value {
5236
+ font-size: 48px;
5237
+ font-weight: 700;
5238
+ color: #003366;
5239
+ line-height: 1;
5240
+ margin-bottom: 8px;
5241
+ }
5242
+
5243
+ .metric-label {
5244
+ font-size: 14px;
5245
+ color: #666666;
5246
+ text-transform: uppercase;
5247
+ letter-spacing: 0.05em;
5248
+ }
5249
+
5250
+ .statement {
5251
+ font-size: 32px;
5252
+ color: #1a1a1a;
5253
+ line-height: 1.5;
5254
+ max-width: 85%;
5255
+ font-style: italic;
5256
+ }
5257
+
5258
+ .subtext {
5259
+ font-size: 20px;
5260
+ color: #666666;
5261
+ }
5262
+
5263
+ .slide-title, .slide-thank_you {
5264
+ justify-content: center;
5265
+ align-items: center;
5266
+ text-align: center;
5267
+ background: #003366 !important;
5268
+ }
5269
+
5270
+ .slide-title::before, .slide-thank_you::before {
5271
+ display: none !important;
5272
+ }
5273
+
5274
+ .slide-title h1, .slide-thank_you h1 {
5275
+ font-size: 56px;
5276
+ color: #ffffff;
5277
+ border-bottom: none;
5278
+ padding-bottom: 0;
5279
+ }
5280
+
5281
+ .slide-title h2, .slide-thank_you h2 {
5282
+ color: rgba(255, 255, 255, 0.8);
5283
+ }
5284
+
5285
+ .source {
5286
+ position: absolute;
5287
+ bottom: 24px;
5288
+ left: 80px;
5289
+ font-size: 12px;
5290
+ color: #666666;
5291
+ font-style: italic;
5292
+ }
5293
+ </style>
5294
+ </head>
5295
+ <body>
5296
+ ${slidesHtml}
5297
+ </body>
5298
+ </html>`;
5299
+ }
5300
+ /**
5301
+ * Dark theme print HTML (legacy).
5302
+ */
5303
+ getDarkPrintHTML(title, slidesHtml) {
5002
5304
  return `<!DOCTYPE html>
5003
5305
  <html lang="en">
5004
5306
  <head>
@@ -5424,9 +5726,307 @@ ${content}
5424
5726
  return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
5425
5727
  }
5426
5728
  /**
5427
- * Professional CSS - McKinsey/BCG style.
5729
+ * Professional CSS - McKinsey/BCG consulting style.
5428
5730
  */
5429
5731
  getCSS() {
5732
+ if (this.theme.style === "mckinsey") {
5733
+ return this.getMcKinseyCSS();
5734
+ }
5735
+ return this.getDarkCSS();
5736
+ }
5737
+ /**
5738
+ * McKinsey/BCG Consulting Style - WHITE background, professional hierarchy.
5739
+ */
5740
+ getMcKinseyCSS() {
5741
+ return `
5742
+ /* McKinsey Consulting Theme - Clean White, Strong Hierarchy */
5743
+ :root {
5744
+ --bg-primary: #ffffff;
5745
+ --bg-secondary: #f8f9fa;
5746
+ --bg-accent: #e9ecef;
5747
+ --text-primary: #1a1a1a;
5748
+ --text-secondary: #333333;
5749
+ --text-muted: #666666;
5750
+ --mckinsey-blue: #003366;
5751
+ --accent-blue: #0066cc;
5752
+ --accent-green: #28a745;
5753
+ --accent-red: #dc3545;
5754
+ --border-color: #dee2e6;
5755
+ --header-bar: #003366;
5756
+ }
5757
+
5758
+ .reveal {
5759
+ font-family: 'Georgia', 'Times New Roman', serif;
5760
+ }
5761
+
5762
+ .reveal .slides {
5763
+ text-align: left;
5764
+ }
5765
+
5766
+ .reveal .slides section {
5767
+ padding: 0;
5768
+ background: var(--bg-primary);
5769
+ height: 100%;
5770
+ box-sizing: border-box;
5771
+ display: flex !important;
5772
+ flex-direction: column;
5773
+ justify-content: flex-start;
5774
+ align-items: stretch;
5775
+ }
5776
+
5777
+ /* McKinsey-style header bar */
5778
+ .reveal .slides section::before {
5779
+ content: '';
5780
+ display: block;
5781
+ height: 8px;
5782
+ background: var(--header-bar);
5783
+ width: 100%;
5784
+ flex-shrink: 0;
5785
+ }
5786
+
5787
+ .reveal .slides section .slide-content {
5788
+ padding: 60px 80px;
5789
+ flex: 1;
5790
+ display: flex;
5791
+ flex-direction: column;
5792
+ }
5793
+
5794
+ .reveal .slides section > ul,
5795
+ .reveal .slides section > .data-table {
5796
+ flex: 1;
5797
+ display: flex;
5798
+ flex-direction: column;
5799
+ justify-content: flex-start;
5800
+ }
5801
+
5802
+ /* Typography - Strong Hierarchy */
5803
+ .reveal h1 {
5804
+ font-size: 44px;
5805
+ font-weight: 700;
5806
+ color: var(--mckinsey-blue);
5807
+ margin-bottom: 24px;
5808
+ line-height: 1.2;
5809
+ letter-spacing: -0.01em;
5810
+ font-family: 'Arial', 'Helvetica', sans-serif;
5811
+ border-bottom: 3px solid var(--mckinsey-blue);
5812
+ padding-bottom: 16px;
5813
+ }
5814
+
5815
+ .reveal h2 {
5816
+ font-size: 28px;
5817
+ font-weight: 600;
5818
+ color: var(--text-secondary);
5819
+ margin-bottom: 20px;
5820
+ font-family: 'Arial', 'Helvetica', sans-serif;
5821
+ }
5822
+
5823
+ .reveal p {
5824
+ font-size: 22px;
5825
+ color: var(--text-secondary);
5826
+ line-height: 1.6;
5827
+ margin-bottom: 16px;
5828
+ }
5829
+
5830
+ /* Bullets - Clear, readable */
5831
+ .reveal ul {
5832
+ margin: 20px 0 0 0;
5833
+ padding: 0;
5834
+ list-style: none;
5835
+ }
5836
+
5837
+ .reveal li {
5838
+ font-size: 22px;
5839
+ color: var(--text-secondary);
5840
+ line-height: 1.5;
5841
+ margin-bottom: 16px;
5842
+ padding-left: 28px;
5843
+ position: relative;
5844
+ }
5845
+
5846
+ .reveal li::before {
5847
+ content: '\u25A0';
5848
+ position: absolute;
5849
+ left: 0;
5850
+ top: 0;
5851
+ color: var(--mckinsey-blue);
5852
+ font-size: 12px;
5853
+ }
5854
+
5855
+ .reveal li strong {
5856
+ color: var(--text-primary);
5857
+ font-weight: 700;
5858
+ }
5859
+
5860
+ /* Tables - Clean consulting style */
5861
+ .data-table {
5862
+ width: 100%;
5863
+ border-collapse: collapse;
5864
+ margin-top: 24px;
5865
+ font-size: 18px;
5866
+ font-family: 'Arial', sans-serif;
5867
+ }
5868
+
5869
+ .data-table th {
5870
+ background: var(--mckinsey-blue);
5871
+ color: #ffffff;
5872
+ font-weight: 600;
5873
+ text-align: left;
5874
+ padding: 14px 16px;
5875
+ border: 1px solid var(--mckinsey-blue);
5876
+ }
5877
+
5878
+ .data-table td {
5879
+ color: var(--text-secondary);
5880
+ padding: 12px 16px;
5881
+ border: 1px solid var(--border-color);
5882
+ background: var(--bg-primary);
5883
+ }
5884
+
5885
+ .data-table tbody tr:nth-child(even) td {
5886
+ background: var(--bg-secondary);
5887
+ }
5888
+
5889
+ .data-table td.number {
5890
+ text-align: right;
5891
+ font-family: 'Arial', sans-serif;
5892
+ font-weight: 600;
5893
+ color: var(--mckinsey-blue);
5894
+ }
5895
+
5896
+ .data-table tbody tr:hover td {
5897
+ background: #e3f2fd;
5898
+ }
5899
+
5900
+ /* Metrics - Clean boxes */
5901
+ .metrics-container {
5902
+ display: flex;
5903
+ justify-content: flex-start;
5904
+ gap: 32px;
5905
+ flex-wrap: wrap;
5906
+ margin-top: 32px;
5907
+ }
5908
+
5909
+ .metric {
5910
+ background: var(--bg-secondary);
5911
+ border: 2px solid var(--border-color);
5912
+ border-top: 4px solid var(--mckinsey-blue);
5913
+ padding: 24px 32px;
5914
+ text-align: center;
5915
+ min-width: 180px;
5916
+ }
5917
+
5918
+ .metric-value {
5919
+ font-size: 48px;
5920
+ font-weight: 700;
5921
+ color: var(--mckinsey-blue);
5922
+ line-height: 1;
5923
+ margin-bottom: 8px;
5924
+ font-family: 'Arial', sans-serif;
5925
+ }
5926
+
5927
+ .metric-trend-up .metric-value {
5928
+ color: var(--accent-green);
5929
+ }
5930
+
5931
+ .metric-trend-down .metric-value {
5932
+ color: var(--accent-red);
5933
+ }
5934
+
5935
+ .metric-label {
5936
+ font-size: 14px;
5937
+ color: var(--text-muted);
5938
+ text-transform: uppercase;
5939
+ letter-spacing: 0.05em;
5940
+ font-family: 'Arial', sans-serif;
5941
+ }
5942
+
5943
+ /* Statement slides */
5944
+ .statement {
5945
+ font-size: 32px;
5946
+ color: var(--text-primary);
5947
+ line-height: 1.5;
5948
+ max-width: 85%;
5949
+ font-style: italic;
5950
+ }
5951
+
5952
+ .subtext {
5953
+ font-size: 20px;
5954
+ color: var(--text-muted);
5955
+ }
5956
+
5957
+ /* Title slide */
5958
+ .slide-title {
5959
+ display: flex;
5960
+ flex-direction: column;
5961
+ justify-content: center;
5962
+ align-items: center;
5963
+ text-align: center;
5964
+ background: var(--mckinsey-blue) !important;
5965
+ }
5966
+
5967
+ .slide-title::before {
5968
+ display: none !important;
5969
+ }
5970
+
5971
+ .slide-title h1 {
5972
+ font-size: 56px;
5973
+ color: #ffffff;
5974
+ border-bottom: none;
5975
+ padding-bottom: 0;
5976
+ }
5977
+
5978
+ .slide-title h2 {
5979
+ color: rgba(255, 255, 255, 0.8);
5980
+ }
5981
+
5982
+ /* Thank you slide */
5983
+ .slide-thank_you {
5984
+ display: flex;
5985
+ flex-direction: column;
5986
+ justify-content: center;
5987
+ align-items: center;
5988
+ text-align: center;
5989
+ background: var(--mckinsey-blue) !important;
5990
+ }
5991
+
5992
+ .slide-thank_you::before {
5993
+ display: none !important;
5994
+ }
5995
+
5996
+ .slide-thank_you h1 {
5997
+ font-size: 56px;
5998
+ color: #ffffff;
5999
+ border-bottom: none;
6000
+ margin-bottom: 16px;
6001
+ }
6002
+
6003
+ .slide-thank_you h2 {
6004
+ color: rgba(255, 255, 255, 0.8);
6005
+ }
6006
+
6007
+ /* Source citation */
6008
+ .source {
6009
+ position: absolute;
6010
+ bottom: 24px;
6011
+ left: 80px;
6012
+ font-size: 12px;
6013
+ color: var(--text-muted);
6014
+ font-style: italic;
6015
+ }
6016
+
6017
+ /* Page number style footer */
6018
+ .reveal .slide-number {
6019
+ background: var(--mckinsey-blue);
6020
+ color: #ffffff;
6021
+ font-size: 14px;
6022
+ padding: 8px 12px;
6023
+ }
6024
+ `;
6025
+ }
6026
+ /**
6027
+ * Dark theme CSS (legacy).
6028
+ */
6029
+ getDarkCSS() {
5430
6030
  return `
5431
6031
  /* Professional Dark Theme - No Random Images */
5432
6032
  :root {
@@ -5651,8 +6251,8 @@ ${content}
5651
6251
  `;
5652
6252
  }
5653
6253
  };
5654
- function createRendererV2() {
5655
- return new RendererV2();
6254
+ function createRendererV2(presentationType = "consulting_deck", themeOverride) {
6255
+ return new RendererV2(presentationType, themeOverride);
5656
6256
  }
5657
6257
 
5658
6258
  // src/image/NanoBananaProvider.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-presentation-master",
3
- "version": "3.8.6",
3
+ "version": "3.8.7",
4
4
  "description": "Generate world-class presentations using expert methodologies from Duarte, Reynolds, Gallo, and Anderson. Enforces rigorous quality standards through real visual validation.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",