claude-presentation-master 1.0.1 → 1.0.2

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.mjs CHANGED
@@ -2360,11 +2360,23 @@ ${slides}
2360
2360
  }
2361
2361
  /**
2362
2362
  * Get base styles for slides.
2363
+ *
2364
+ * BULLETPROOF OVERFLOW PROTECTION:
2365
+ * 1. All slides use height: 100vh to match viewport exactly
2366
+ * 2. overflow: hidden on slide sections clips content at boundaries
2367
+ * 3. All child elements use flex-shrink: 1 and min-height: 0 to allow shrinking
2368
+ * 4. Tables use max-height with overflow: auto for scrolling if needed
2369
+ * 5. Two-column layouts use smaller font sizes to prevent overflow
2363
2370
  */
2364
2371
  getBaseStyles(mode) {
2365
- const fontSize = mode === "keynote" ? "2.5em" : "1.8em";
2366
- const lineHeight = mode === "keynote" ? "1.4" : "1.5";
2372
+ const fontSize = mode === "keynote" ? "2.2em" : "1.6em";
2373
+ const lineHeight = mode === "keynote" ? "1.3" : "1.4";
2367
2374
  return `
2375
+ /* ============================================
2376
+ BULLETPROOF SLIDE OVERFLOW PROTECTION
2377
+ All slides are guaranteed to fit in viewport
2378
+ ============================================ */
2379
+
2368
2380
  /* Base Styles */
2369
2381
  :root {
2370
2382
  --font-heading: 'Source Sans Pro', 'Helvetica Neue', -apple-system, BlinkMacSystemFont, sans-serif;
@@ -2379,8 +2391,12 @@ ${slides}
2379
2391
  --color-text-light: #4a4a68;
2380
2392
  --color-background: #ffffff;
2381
2393
 
2382
- --slide-padding: 60px;
2394
+ --slide-padding: 35px 45px;
2383
2395
  --content-max-width: 1200px;
2396
+
2397
+ /* Viewport-based heights for bulletproof containment */
2398
+ --slide-height: 100%;
2399
+ --content-area-height: calc(100% - 70px);
2384
2400
  }
2385
2401
 
2386
2402
  .reveal {
@@ -2394,82 +2410,275 @@ ${slides}
2394
2410
  text-align: left;
2395
2411
  }
2396
2412
 
2413
+ /* ============================================
2414
+ CRITICAL: SLIDE BOUNDARY ENFORCEMENT
2415
+ Content CANNOT escape these boundaries
2416
+ ============================================ */
2397
2417
  .reveal .slides section {
2398
- padding: var(--slide-padding);
2399
- box-sizing: border-box;
2400
- height: 100%;
2401
- display: flex;
2402
- flex-direction: column;
2418
+ padding: var(--slide-padding) !important;
2419
+ box-sizing: border-box !important;
2420
+ height: 100% !important;
2421
+ max-height: 100% !important;
2422
+ width: 100% !important;
2423
+ display: flex !important;
2424
+ flex-direction: column !important;
2425
+ overflow: hidden !important;
2426
+ justify-content: flex-start !important;
2403
2427
  }
2404
2428
 
2429
+ /* All direct children must be able to shrink */
2430
+ .reveal .slides section > * {
2431
+ flex-shrink: 1;
2432
+ min-height: 0;
2433
+ max-height: 100%;
2434
+ }
2435
+
2436
+ /* Content container with strict overflow protection */
2405
2437
  .reveal .slides section .slide-content {
2406
- flex: 1;
2438
+ flex: 1 1 auto;
2407
2439
  display: flex;
2408
2440
  flex-direction: column;
2409
2441
  max-width: var(--content-max-width);
2410
2442
  width: 100%;
2411
2443
  margin: 0 auto;
2444
+ overflow: hidden;
2445
+ min-height: 0;
2446
+ }
2447
+
2448
+ /* ============================================
2449
+ TABLES - Bulletproof containment
2450
+ ============================================ */
2451
+ .reveal table {
2452
+ font-size: 0.75em;
2453
+ width: 100%;
2454
+ table-layout: fixed;
2455
+ border-collapse: collapse;
2456
+ flex-shrink: 1;
2457
+ min-height: 0;
2458
+ }
2459
+
2460
+ /* Table wrapper to handle overflow */
2461
+ .reveal .table-wrapper,
2462
+ .reveal .table-container {
2463
+ flex: 1 1 auto;
2464
+ overflow: hidden;
2465
+ min-height: 0;
2466
+ max-height: 100%;
2467
+ }
2468
+
2469
+ .reveal table th,
2470
+ .reveal table td {
2471
+ padding: 0.4em 0.6em;
2472
+ overflow: hidden;
2473
+ text-overflow: ellipsis;
2474
+ white-space: nowrap;
2475
+ max-width: 200px;
2476
+ }
2477
+
2478
+ /* Allow text wrap for cells that need it */
2479
+ .reveal table td.wrap {
2480
+ white-space: normal;
2481
+ }
2482
+
2483
+ /* ============================================
2484
+ TWO-COLUMN LAYOUTS - Smaller text, strict bounds
2485
+ ============================================ */
2486
+ .reveal .two-column,
2487
+ .reveal .two-columns {
2488
+ display: flex;
2489
+ gap: 1.5em;
2490
+ flex: 1 1 auto;
2491
+ min-height: 0;
2492
+ overflow: hidden;
2493
+ max-height: calc(100% - 60px);
2494
+ }
2495
+
2496
+ .reveal .two-column > *,
2497
+ .reveal .two-columns > * {
2498
+ flex: 1 1 50%;
2499
+ min-width: 0;
2500
+ min-height: 0;
2501
+ overflow: hidden;
2502
+ display: flex;
2503
+ flex-direction: column;
2504
+ }
2505
+
2506
+ /* Two-column content gets smaller fonts */
2507
+ .reveal .two-column h2,
2508
+ .reveal .two-columns h2 {
2509
+ font-size: 1.2em;
2510
+ margin-bottom: 0.3em;
2511
+ }
2512
+
2513
+ .reveal .two-column h3,
2514
+ .reveal .two-columns h3 {
2515
+ font-size: 1em;
2516
+ margin-bottom: 0.2em;
2517
+ }
2518
+
2519
+ .reveal .two-column p,
2520
+ .reveal .two-column li,
2521
+ .reveal .two-columns p,
2522
+ .reveal .two-columns li {
2523
+ font-size: 0.8em;
2524
+ line-height: 1.3;
2525
+ margin-bottom: 0.3em;
2526
+ }
2527
+
2528
+ .reveal .two-column table,
2529
+ .reveal .two-columns table {
2530
+ font-size: 0.7em;
2531
+ }
2532
+
2533
+ /* ============================================
2534
+ GRIDS - Auto-fit to available space
2535
+ ============================================ */
2536
+ .reveal .stats-grid,
2537
+ .reveal .metrics-grid {
2538
+ display: grid;
2539
+ gap: 0.8em;
2540
+ width: 100%;
2541
+ flex-shrink: 1;
2542
+ min-height: 0;
2412
2543
  }
2413
2544
 
2414
- /* Typography */
2545
+ /* ============================================
2546
+ METRIC CARDS - Compact sizing
2547
+ ============================================ */
2548
+ .reveal .metric-card {
2549
+ padding: 0.8em 1em;
2550
+ font-size: 0.85em;
2551
+ flex-shrink: 1;
2552
+ }
2553
+
2554
+ .reveal .metric-card .number {
2555
+ font-size: 1.6em;
2556
+ }
2557
+
2558
+ .reveal .metric-card .label {
2559
+ font-size: 0.7em;
2560
+ }
2561
+
2562
+ /* ============================================
2563
+ HIGHLIGHT BOXES - Compact
2564
+ ============================================ */
2565
+ .reveal .highlight-box {
2566
+ padding: 0.6em 0.8em;
2567
+ margin: 0.4em 0;
2568
+ font-size: 0.85em;
2569
+ flex-shrink: 1;
2570
+ }
2571
+
2572
+ /* ============================================
2573
+ PROGRESS BARS - Fixed height
2574
+ ============================================ */
2575
+ .reveal .progress-bar {
2576
+ height: 16px;
2577
+ margin: 3px 0;
2578
+ flex-shrink: 0;
2579
+ }
2580
+
2581
+ .reveal .progress-fill {
2582
+ font-size: 0.6em;
2583
+ }
2584
+
2585
+ /* ============================================
2586
+ STAT ITEMS - Compact
2587
+ ============================================ */
2588
+ .reveal .stat-item {
2589
+ padding: 0.4em;
2590
+ flex-shrink: 1;
2591
+ }
2592
+
2593
+ .reveal .stat-item .value {
2594
+ font-size: 1.5em;
2595
+ }
2596
+
2597
+ .reveal .stat-item .label {
2598
+ font-size: 0.65em;
2599
+ }
2600
+
2601
+ /* ============================================
2602
+ TYPOGRAPHY - Reduced for density
2603
+ ============================================ */
2415
2604
  .reveal h1, .reveal h2, .reveal h3 {
2416
2605
  font-family: var(--font-heading);
2417
2606
  font-weight: 700;
2418
2607
  letter-spacing: -0.02em;
2419
2608
  color: var(--color-primary);
2420
- margin-bottom: 0.5em;
2609
+ flex-shrink: 0;
2421
2610
  }
2422
2611
 
2423
- .reveal h1 { font-size: 2.5em; }
2424
- .reveal h2 { font-size: 1.8em; }
2425
- .reveal h3 { font-size: 1.3em; }
2612
+ .reveal h1 {
2613
+ font-size: 2em;
2614
+ margin-bottom: 0.3em;
2615
+ }
2616
+ .reveal h2 {
2617
+ font-size: 1.5em;
2618
+ margin-bottom: 0.3em;
2619
+ }
2620
+ .reveal h3 {
2621
+ font-size: 1.1em;
2622
+ margin-bottom: 0.2em;
2623
+ }
2426
2624
 
2427
2625
  .reveal p {
2428
- margin: 0 0 1em 0;
2626
+ margin: 0 0 0.6em 0;
2627
+ flex-shrink: 1;
2429
2628
  }
2430
2629
 
2431
2630
  .reveal .subtitle {
2432
- font-size: 0.7em;
2631
+ font-size: 0.65em;
2433
2632
  color: var(--color-text-light);
2434
2633
  }
2435
2634
 
2436
- /* Lists */
2635
+ /* ============================================
2636
+ LISTS - Compact spacing
2637
+ ============================================ */
2437
2638
  .reveal ul, .reveal ol {
2438
- margin: 0 0 1em 1.2em;
2639
+ margin: 0 0 0.6em 1em;
2439
2640
  padding: 0;
2641
+ flex-shrink: 1;
2440
2642
  }
2441
2643
 
2442
2644
  .reveal li {
2443
- margin-bottom: 0.5em;
2645
+ margin-bottom: 0.3em;
2646
+ line-height: 1.3;
2444
2647
  }
2445
2648
 
2446
- /* Columns */
2649
+ /* ============================================
2650
+ COLUMNS - Flex with overflow protection
2651
+ ============================================ */
2447
2652
  .reveal .columns {
2448
2653
  display: flex;
2449
- gap: 40px;
2450
- flex: 1;
2654
+ gap: 25px;
2655
+ flex: 1 1 auto;
2451
2656
  align-items: flex-start;
2657
+ min-height: 0;
2658
+ overflow: hidden;
2452
2659
  }
2453
2660
 
2454
- .reveal .two-columns .column {
2455
- flex: 1;
2456
- }
2457
-
2661
+ .reveal .two-columns .column,
2458
2662
  .reveal .three-columns .column {
2459
2663
  flex: 1;
2664
+ min-width: 0;
2665
+ min-height: 0;
2666
+ overflow: hidden;
2460
2667
  }
2461
2668
 
2462
- /* Big elements */
2669
+ /* ============================================
2670
+ BIG ELEMENTS - Sized appropriately
2671
+ ============================================ */
2463
2672
  .reveal .big-idea-text,
2464
2673
  .reveal .statement {
2465
- font-size: 2em;
2674
+ font-size: 1.8em;
2466
2675
  font-weight: 700;
2467
2676
  line-height: 1.2;
2468
2677
  text-align: center;
2469
2678
  }
2470
2679
 
2471
2680
  .reveal .number {
2472
- font-size: 4em;
2681
+ font-size: 3em;
2473
2682
  font-weight: 800;
2474
2683
  color: var(--color-highlight);
2475
2684
  text-align: center;
@@ -2478,85 +2687,113 @@ ${slides}
2478
2687
  .reveal .number-context {
2479
2688
  text-align: center;
2480
2689
  color: var(--color-text-light);
2690
+ font-size: 0.9em;
2481
2691
  }
2482
2692
 
2483
- /* Quotes */
2693
+ /* ============================================
2694
+ QUOTES - Compact
2695
+ ============================================ */
2484
2696
  .reveal blockquote {
2485
2697
  border-left: 4px solid var(--color-accent);
2486
- padding-left: 1em;
2698
+ padding-left: 0.8em;
2487
2699
  font-style: italic;
2488
- margin: 1em 0;
2700
+ margin: 0.6em 0;
2701
+ flex-shrink: 1;
2489
2702
  }
2490
2703
 
2491
2704
  .reveal .attribution {
2492
2705
  text-align: right;
2493
2706
  color: var(--color-text-light);
2494
- font-size: 0.8em;
2707
+ font-size: 0.75em;
2495
2708
  }
2496
2709
 
2497
- /* Images */
2710
+ /* ============================================
2711
+ IMAGES - Contained within bounds
2712
+ ============================================ */
2498
2713
  .reveal img {
2499
2714
  max-width: 100%;
2715
+ max-height: 100%;
2500
2716
  height: auto;
2501
2717
  border-radius: 8px;
2718
+ object-fit: contain;
2502
2719
  }
2503
2720
 
2504
2721
  .reveal .image-container {
2505
2722
  text-align: center;
2723
+ flex: 1 1 auto;
2724
+ min-height: 0;
2725
+ overflow: hidden;
2726
+ display: flex;
2727
+ align-items: center;
2728
+ justify-content: center;
2506
2729
  }
2507
2730
 
2508
2731
  .reveal .caption {
2509
- font-size: 0.7em;
2732
+ font-size: 0.65em;
2510
2733
  color: var(--color-text-light);
2511
- margin-top: 0.5em;
2734
+ margin-top: 0.3em;
2735
+ flex-shrink: 0;
2512
2736
  }
2513
2737
 
2514
- /* Metrics */
2738
+ /* ============================================
2739
+ METRICS - Responsive grid
2740
+ ============================================ */
2515
2741
  .reveal .metrics-grid {
2516
2742
  display: grid;
2517
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2518
- gap: 30px;
2743
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
2744
+ gap: 20px;
2519
2745
  text-align: center;
2520
2746
  }
2521
2747
 
2522
2748
  .reveal .metric-value {
2523
- font-size: 2em;
2749
+ font-size: 1.6em;
2524
2750
  font-weight: 700;
2525
2751
  color: var(--color-highlight);
2526
2752
  }
2527
2753
 
2528
2754
  .reveal .metric-label {
2529
- font-size: 0.8em;
2755
+ font-size: 0.7em;
2530
2756
  color: var(--color-text-light);
2531
2757
  }
2532
2758
 
2533
2759
  .reveal .metric-change {
2534
- font-size: 0.7em;
2760
+ font-size: 0.65em;
2535
2761
  }
2536
2762
 
2537
2763
  .reveal .metric-change.up { color: #27ae60; }
2538
2764
  .reveal .metric-change.down { color: #e74c3c; }
2539
2765
 
2540
- /* Charts */
2766
+ /* ============================================
2767
+ CHARTS - Contained
2768
+ ============================================ */
2541
2769
  .reveal .chart-container {
2542
- margin: 1em 0;
2770
+ margin: 0.6em 0;
2771
+ flex: 1 1 auto;
2772
+ min-height: 0;
2773
+ overflow: hidden;
2543
2774
  }
2544
2775
 
2545
- /* Source */
2776
+ /* ============================================
2777
+ SOURCE ATTRIBUTION
2778
+ ============================================ */
2546
2779
  .reveal .source {
2547
2780
  position: absolute;
2548
- bottom: 20px;
2781
+ bottom: 15px;
2549
2782
  right: 20px;
2550
- font-size: 0.5em;
2783
+ font-size: 0.45em;
2551
2784
  color: var(--color-text-light);
2552
2785
  }
2553
2786
 
2554
- /* Speaker notes */
2787
+ /* ============================================
2788
+ SPEAKER NOTES
2789
+ ============================================ */
2555
2790
  .reveal aside.notes {
2556
2791
  display: none;
2557
2792
  }
2558
2793
 
2559
- /* Slide types */
2794
+ /* ============================================
2795
+ SLIDE TYPE SPECIFIC LAYOUTS
2796
+ ============================================ */
2560
2797
  .reveal .slide-title .slide-content {
2561
2798
  justify-content: center;
2562
2799
  text-align: center;
@@ -2590,12 +2827,12 @@ ${slides}
2590
2827
 
2591
2828
  .reveal .cta-button {
2592
2829
  display: inline-block;
2593
- padding: 0.5em 1.5em;
2830
+ padding: 0.4em 1.2em;
2594
2831
  background: var(--color-highlight);
2595
2832
  color: white;
2596
2833
  border-radius: 4px;
2597
2834
  font-weight: 600;
2598
- margin-top: 1em;
2835
+ margin-top: 0.8em;
2599
2836
  }
2600
2837
  `;
2601
2838
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-presentation-master",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
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",
@@ -20,7 +20,8 @@
20
20
  "lint:fix": "eslint src/**/*.ts --fix",
21
21
  "format": "prettier --write \"src/**/*.ts\"",
22
22
  "typecheck": "tsc --noEmit",
23
- "prepublishOnly": "npm run build && npm test",
23
+ "sync-knowledge": "bash scripts/sync-knowledge.sh",
24
+ "prepublishOnly": "npm run sync-knowledge && npm run build && npm test",
24
25
  "qa": "node bin/cli.js validate"
25
26
  },
26
27
  "keywords": [