claude-presentation-master 1.0.0 → 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.
@@ -248,6 +248,7 @@
248
248
 
249
249
  .reveal .slides section {
250
250
  height: 100% !important;
251
+ max-height: 100% !important;
251
252
  padding: var(--slide-padding-y) var(--slide-padding-x) !important;
252
253
  padding-top: calc(var(--slide-padding-y) + var(--safe-area-top)) !important;
253
254
  padding-right: calc(var(--slide-padding-x) + var(--safe-area-right)) !important;
@@ -259,6 +260,21 @@
259
260
  justify-content: flex-start !important;
260
261
  align-items: stretch !important;
261
262
  background: var(--color-bg-primary);
263
+ overflow: hidden !important;
264
+ }
265
+
266
+ /* CRITICAL: Content overflow protection */
267
+ .reveal .slides section > * {
268
+ flex-shrink: 1;
269
+ min-height: 0;
270
+ }
271
+
272
+ .reveal .slides section .slide-content {
273
+ flex: 1 1 auto;
274
+ overflow: hidden;
275
+ max-height: 100%;
276
+ display: flex;
277
+ flex-direction: column;
262
278
  }
263
279
 
264
280
  .reveal h1,
package/dist/index.d.mts CHANGED
@@ -696,6 +696,13 @@ declare class RevealJsGenerator {
696
696
  private buildDocument;
697
697
  /**
698
698
  * Get base styles for slides.
699
+ *
700
+ * BULLETPROOF OVERFLOW PROTECTION:
701
+ * 1. All slides use height: 100vh to match viewport exactly
702
+ * 2. overflow: hidden on slide sections clips content at boundaries
703
+ * 3. All child elements use flex-shrink: 1 and min-height: 0 to allow shrinking
704
+ * 4. Tables use max-height with overflow: auto for scrolling if needed
705
+ * 5. Two-column layouts use smaller font sizes to prevent overflow
699
706
  */
700
707
  private getBaseStyles;
701
708
  /**
package/dist/index.d.ts CHANGED
@@ -696,6 +696,13 @@ declare class RevealJsGenerator {
696
696
  private buildDocument;
697
697
  /**
698
698
  * Get base styles for slides.
699
+ *
700
+ * BULLETPROOF OVERFLOW PROTECTION:
701
+ * 1. All slides use height: 100vh to match viewport exactly
702
+ * 2. overflow: hidden on slide sections clips content at boundaries
703
+ * 3. All child elements use flex-shrink: 1 and min-height: 0 to allow shrinking
704
+ * 4. Tables use max-height with overflow: auto for scrolling if needed
705
+ * 5. Two-column layouts use smaller font sizes to prevent overflow
699
706
  */
700
707
  private getBaseStyles;
701
708
  /**
package/dist/index.js CHANGED
@@ -2422,11 +2422,23 @@ ${slides}
2422
2422
  }
2423
2423
  /**
2424
2424
  * Get base styles for slides.
2425
+ *
2426
+ * BULLETPROOF OVERFLOW PROTECTION:
2427
+ * 1. All slides use height: 100vh to match viewport exactly
2428
+ * 2. overflow: hidden on slide sections clips content at boundaries
2429
+ * 3. All child elements use flex-shrink: 1 and min-height: 0 to allow shrinking
2430
+ * 4. Tables use max-height with overflow: auto for scrolling if needed
2431
+ * 5. Two-column layouts use smaller font sizes to prevent overflow
2425
2432
  */
2426
2433
  getBaseStyles(mode) {
2427
- const fontSize = mode === "keynote" ? "2.5em" : "1.8em";
2428
- const lineHeight = mode === "keynote" ? "1.4" : "1.5";
2434
+ const fontSize = mode === "keynote" ? "2.2em" : "1.6em";
2435
+ const lineHeight = mode === "keynote" ? "1.3" : "1.4";
2429
2436
  return `
2437
+ /* ============================================
2438
+ BULLETPROOF SLIDE OVERFLOW PROTECTION
2439
+ All slides are guaranteed to fit in viewport
2440
+ ============================================ */
2441
+
2430
2442
  /* Base Styles */
2431
2443
  :root {
2432
2444
  --font-heading: 'Source Sans Pro', 'Helvetica Neue', -apple-system, BlinkMacSystemFont, sans-serif;
@@ -2441,8 +2453,12 @@ ${slides}
2441
2453
  --color-text-light: #4a4a68;
2442
2454
  --color-background: #ffffff;
2443
2455
 
2444
- --slide-padding: 60px;
2456
+ --slide-padding: 35px 45px;
2445
2457
  --content-max-width: 1200px;
2458
+
2459
+ /* Viewport-based heights for bulletproof containment */
2460
+ --slide-height: 100%;
2461
+ --content-area-height: calc(100% - 70px);
2446
2462
  }
2447
2463
 
2448
2464
  .reveal {
@@ -2456,82 +2472,275 @@ ${slides}
2456
2472
  text-align: left;
2457
2473
  }
2458
2474
 
2475
+ /* ============================================
2476
+ CRITICAL: SLIDE BOUNDARY ENFORCEMENT
2477
+ Content CANNOT escape these boundaries
2478
+ ============================================ */
2459
2479
  .reveal .slides section {
2460
- padding: var(--slide-padding);
2461
- box-sizing: border-box;
2462
- height: 100%;
2463
- display: flex;
2464
- flex-direction: column;
2480
+ padding: var(--slide-padding) !important;
2481
+ box-sizing: border-box !important;
2482
+ height: 100% !important;
2483
+ max-height: 100% !important;
2484
+ width: 100% !important;
2485
+ display: flex !important;
2486
+ flex-direction: column !important;
2487
+ overflow: hidden !important;
2488
+ justify-content: flex-start !important;
2465
2489
  }
2466
2490
 
2491
+ /* All direct children must be able to shrink */
2492
+ .reveal .slides section > * {
2493
+ flex-shrink: 1;
2494
+ min-height: 0;
2495
+ max-height: 100%;
2496
+ }
2497
+
2498
+ /* Content container with strict overflow protection */
2467
2499
  .reveal .slides section .slide-content {
2468
- flex: 1;
2500
+ flex: 1 1 auto;
2469
2501
  display: flex;
2470
2502
  flex-direction: column;
2471
2503
  max-width: var(--content-max-width);
2472
2504
  width: 100%;
2473
2505
  margin: 0 auto;
2506
+ overflow: hidden;
2507
+ min-height: 0;
2508
+ }
2509
+
2510
+ /* ============================================
2511
+ TABLES - Bulletproof containment
2512
+ ============================================ */
2513
+ .reveal table {
2514
+ font-size: 0.75em;
2515
+ width: 100%;
2516
+ table-layout: fixed;
2517
+ border-collapse: collapse;
2518
+ flex-shrink: 1;
2519
+ min-height: 0;
2520
+ }
2521
+
2522
+ /* Table wrapper to handle overflow */
2523
+ .reveal .table-wrapper,
2524
+ .reveal .table-container {
2525
+ flex: 1 1 auto;
2526
+ overflow: hidden;
2527
+ min-height: 0;
2528
+ max-height: 100%;
2529
+ }
2530
+
2531
+ .reveal table th,
2532
+ .reveal table td {
2533
+ padding: 0.4em 0.6em;
2534
+ overflow: hidden;
2535
+ text-overflow: ellipsis;
2536
+ white-space: nowrap;
2537
+ max-width: 200px;
2538
+ }
2539
+
2540
+ /* Allow text wrap for cells that need it */
2541
+ .reveal table td.wrap {
2542
+ white-space: normal;
2543
+ }
2544
+
2545
+ /* ============================================
2546
+ TWO-COLUMN LAYOUTS - Smaller text, strict bounds
2547
+ ============================================ */
2548
+ .reveal .two-column,
2549
+ .reveal .two-columns {
2550
+ display: flex;
2551
+ gap: 1.5em;
2552
+ flex: 1 1 auto;
2553
+ min-height: 0;
2554
+ overflow: hidden;
2555
+ max-height: calc(100% - 60px);
2556
+ }
2557
+
2558
+ .reveal .two-column > *,
2559
+ .reveal .two-columns > * {
2560
+ flex: 1 1 50%;
2561
+ min-width: 0;
2562
+ min-height: 0;
2563
+ overflow: hidden;
2564
+ display: flex;
2565
+ flex-direction: column;
2566
+ }
2567
+
2568
+ /* Two-column content gets smaller fonts */
2569
+ .reveal .two-column h2,
2570
+ .reveal .two-columns h2 {
2571
+ font-size: 1.2em;
2572
+ margin-bottom: 0.3em;
2573
+ }
2574
+
2575
+ .reveal .two-column h3,
2576
+ .reveal .two-columns h3 {
2577
+ font-size: 1em;
2578
+ margin-bottom: 0.2em;
2579
+ }
2580
+
2581
+ .reveal .two-column p,
2582
+ .reveal .two-column li,
2583
+ .reveal .two-columns p,
2584
+ .reveal .two-columns li {
2585
+ font-size: 0.8em;
2586
+ line-height: 1.3;
2587
+ margin-bottom: 0.3em;
2588
+ }
2589
+
2590
+ .reveal .two-column table,
2591
+ .reveal .two-columns table {
2592
+ font-size: 0.7em;
2593
+ }
2594
+
2595
+ /* ============================================
2596
+ GRIDS - Auto-fit to available space
2597
+ ============================================ */
2598
+ .reveal .stats-grid,
2599
+ .reveal .metrics-grid {
2600
+ display: grid;
2601
+ gap: 0.8em;
2602
+ width: 100%;
2603
+ flex-shrink: 1;
2604
+ min-height: 0;
2474
2605
  }
2475
2606
 
2476
- /* Typography */
2607
+ /* ============================================
2608
+ METRIC CARDS - Compact sizing
2609
+ ============================================ */
2610
+ .reveal .metric-card {
2611
+ padding: 0.8em 1em;
2612
+ font-size: 0.85em;
2613
+ flex-shrink: 1;
2614
+ }
2615
+
2616
+ .reveal .metric-card .number {
2617
+ font-size: 1.6em;
2618
+ }
2619
+
2620
+ .reveal .metric-card .label {
2621
+ font-size: 0.7em;
2622
+ }
2623
+
2624
+ /* ============================================
2625
+ HIGHLIGHT BOXES - Compact
2626
+ ============================================ */
2627
+ .reveal .highlight-box {
2628
+ padding: 0.6em 0.8em;
2629
+ margin: 0.4em 0;
2630
+ font-size: 0.85em;
2631
+ flex-shrink: 1;
2632
+ }
2633
+
2634
+ /* ============================================
2635
+ PROGRESS BARS - Fixed height
2636
+ ============================================ */
2637
+ .reveal .progress-bar {
2638
+ height: 16px;
2639
+ margin: 3px 0;
2640
+ flex-shrink: 0;
2641
+ }
2642
+
2643
+ .reveal .progress-fill {
2644
+ font-size: 0.6em;
2645
+ }
2646
+
2647
+ /* ============================================
2648
+ STAT ITEMS - Compact
2649
+ ============================================ */
2650
+ .reveal .stat-item {
2651
+ padding: 0.4em;
2652
+ flex-shrink: 1;
2653
+ }
2654
+
2655
+ .reveal .stat-item .value {
2656
+ font-size: 1.5em;
2657
+ }
2658
+
2659
+ .reveal .stat-item .label {
2660
+ font-size: 0.65em;
2661
+ }
2662
+
2663
+ /* ============================================
2664
+ TYPOGRAPHY - Reduced for density
2665
+ ============================================ */
2477
2666
  .reveal h1, .reveal h2, .reveal h3 {
2478
2667
  font-family: var(--font-heading);
2479
2668
  font-weight: 700;
2480
2669
  letter-spacing: -0.02em;
2481
2670
  color: var(--color-primary);
2482
- margin-bottom: 0.5em;
2671
+ flex-shrink: 0;
2483
2672
  }
2484
2673
 
2485
- .reveal h1 { font-size: 2.5em; }
2486
- .reveal h2 { font-size: 1.8em; }
2487
- .reveal h3 { font-size: 1.3em; }
2674
+ .reveal h1 {
2675
+ font-size: 2em;
2676
+ margin-bottom: 0.3em;
2677
+ }
2678
+ .reveal h2 {
2679
+ font-size: 1.5em;
2680
+ margin-bottom: 0.3em;
2681
+ }
2682
+ .reveal h3 {
2683
+ font-size: 1.1em;
2684
+ margin-bottom: 0.2em;
2685
+ }
2488
2686
 
2489
2687
  .reveal p {
2490
- margin: 0 0 1em 0;
2688
+ margin: 0 0 0.6em 0;
2689
+ flex-shrink: 1;
2491
2690
  }
2492
2691
 
2493
2692
  .reveal .subtitle {
2494
- font-size: 0.7em;
2693
+ font-size: 0.65em;
2495
2694
  color: var(--color-text-light);
2496
2695
  }
2497
2696
 
2498
- /* Lists */
2697
+ /* ============================================
2698
+ LISTS - Compact spacing
2699
+ ============================================ */
2499
2700
  .reveal ul, .reveal ol {
2500
- margin: 0 0 1em 1.2em;
2701
+ margin: 0 0 0.6em 1em;
2501
2702
  padding: 0;
2703
+ flex-shrink: 1;
2502
2704
  }
2503
2705
 
2504
2706
  .reveal li {
2505
- margin-bottom: 0.5em;
2707
+ margin-bottom: 0.3em;
2708
+ line-height: 1.3;
2506
2709
  }
2507
2710
 
2508
- /* Columns */
2711
+ /* ============================================
2712
+ COLUMNS - Flex with overflow protection
2713
+ ============================================ */
2509
2714
  .reveal .columns {
2510
2715
  display: flex;
2511
- gap: 40px;
2512
- flex: 1;
2716
+ gap: 25px;
2717
+ flex: 1 1 auto;
2513
2718
  align-items: flex-start;
2719
+ min-height: 0;
2720
+ overflow: hidden;
2514
2721
  }
2515
2722
 
2516
- .reveal .two-columns .column {
2517
- flex: 1;
2518
- }
2519
-
2723
+ .reveal .two-columns .column,
2520
2724
  .reveal .three-columns .column {
2521
2725
  flex: 1;
2726
+ min-width: 0;
2727
+ min-height: 0;
2728
+ overflow: hidden;
2522
2729
  }
2523
2730
 
2524
- /* Big elements */
2731
+ /* ============================================
2732
+ BIG ELEMENTS - Sized appropriately
2733
+ ============================================ */
2525
2734
  .reveal .big-idea-text,
2526
2735
  .reveal .statement {
2527
- font-size: 2em;
2736
+ font-size: 1.8em;
2528
2737
  font-weight: 700;
2529
2738
  line-height: 1.2;
2530
2739
  text-align: center;
2531
2740
  }
2532
2741
 
2533
2742
  .reveal .number {
2534
- font-size: 4em;
2743
+ font-size: 3em;
2535
2744
  font-weight: 800;
2536
2745
  color: var(--color-highlight);
2537
2746
  text-align: center;
@@ -2540,85 +2749,113 @@ ${slides}
2540
2749
  .reveal .number-context {
2541
2750
  text-align: center;
2542
2751
  color: var(--color-text-light);
2752
+ font-size: 0.9em;
2543
2753
  }
2544
2754
 
2545
- /* Quotes */
2755
+ /* ============================================
2756
+ QUOTES - Compact
2757
+ ============================================ */
2546
2758
  .reveal blockquote {
2547
2759
  border-left: 4px solid var(--color-accent);
2548
- padding-left: 1em;
2760
+ padding-left: 0.8em;
2549
2761
  font-style: italic;
2550
- margin: 1em 0;
2762
+ margin: 0.6em 0;
2763
+ flex-shrink: 1;
2551
2764
  }
2552
2765
 
2553
2766
  .reveal .attribution {
2554
2767
  text-align: right;
2555
2768
  color: var(--color-text-light);
2556
- font-size: 0.8em;
2769
+ font-size: 0.75em;
2557
2770
  }
2558
2771
 
2559
- /* Images */
2772
+ /* ============================================
2773
+ IMAGES - Contained within bounds
2774
+ ============================================ */
2560
2775
  .reveal img {
2561
2776
  max-width: 100%;
2777
+ max-height: 100%;
2562
2778
  height: auto;
2563
2779
  border-radius: 8px;
2780
+ object-fit: contain;
2564
2781
  }
2565
2782
 
2566
2783
  .reveal .image-container {
2567
2784
  text-align: center;
2785
+ flex: 1 1 auto;
2786
+ min-height: 0;
2787
+ overflow: hidden;
2788
+ display: flex;
2789
+ align-items: center;
2790
+ justify-content: center;
2568
2791
  }
2569
2792
 
2570
2793
  .reveal .caption {
2571
- font-size: 0.7em;
2794
+ font-size: 0.65em;
2572
2795
  color: var(--color-text-light);
2573
- margin-top: 0.5em;
2796
+ margin-top: 0.3em;
2797
+ flex-shrink: 0;
2574
2798
  }
2575
2799
 
2576
- /* Metrics */
2800
+ /* ============================================
2801
+ METRICS - Responsive grid
2802
+ ============================================ */
2577
2803
  .reveal .metrics-grid {
2578
2804
  display: grid;
2579
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2580
- gap: 30px;
2805
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
2806
+ gap: 20px;
2581
2807
  text-align: center;
2582
2808
  }
2583
2809
 
2584
2810
  .reveal .metric-value {
2585
- font-size: 2em;
2811
+ font-size: 1.6em;
2586
2812
  font-weight: 700;
2587
2813
  color: var(--color-highlight);
2588
2814
  }
2589
2815
 
2590
2816
  .reveal .metric-label {
2591
- font-size: 0.8em;
2817
+ font-size: 0.7em;
2592
2818
  color: var(--color-text-light);
2593
2819
  }
2594
2820
 
2595
2821
  .reveal .metric-change {
2596
- font-size: 0.7em;
2822
+ font-size: 0.65em;
2597
2823
  }
2598
2824
 
2599
2825
  .reveal .metric-change.up { color: #27ae60; }
2600
2826
  .reveal .metric-change.down { color: #e74c3c; }
2601
2827
 
2602
- /* Charts */
2828
+ /* ============================================
2829
+ CHARTS - Contained
2830
+ ============================================ */
2603
2831
  .reveal .chart-container {
2604
- margin: 1em 0;
2832
+ margin: 0.6em 0;
2833
+ flex: 1 1 auto;
2834
+ min-height: 0;
2835
+ overflow: hidden;
2605
2836
  }
2606
2837
 
2607
- /* Source */
2838
+ /* ============================================
2839
+ SOURCE ATTRIBUTION
2840
+ ============================================ */
2608
2841
  .reveal .source {
2609
2842
  position: absolute;
2610
- bottom: 20px;
2843
+ bottom: 15px;
2611
2844
  right: 20px;
2612
- font-size: 0.5em;
2845
+ font-size: 0.45em;
2613
2846
  color: var(--color-text-light);
2614
2847
  }
2615
2848
 
2616
- /* Speaker notes */
2849
+ /* ============================================
2850
+ SPEAKER NOTES
2851
+ ============================================ */
2617
2852
  .reveal aside.notes {
2618
2853
  display: none;
2619
2854
  }
2620
2855
 
2621
- /* Slide types */
2856
+ /* ============================================
2857
+ SLIDE TYPE SPECIFIC LAYOUTS
2858
+ ============================================ */
2622
2859
  .reveal .slide-title .slide-content {
2623
2860
  justify-content: center;
2624
2861
  text-align: center;
@@ -2652,12 +2889,12 @@ ${slides}
2652
2889
 
2653
2890
  .reveal .cta-button {
2654
2891
  display: inline-block;
2655
- padding: 0.5em 1.5em;
2892
+ padding: 0.4em 1.2em;
2656
2893
  background: var(--color-highlight);
2657
2894
  color: white;
2658
2895
  border-radius: 4px;
2659
2896
  font-weight: 600;
2660
- margin-top: 1em;
2897
+ margin-top: 0.8em;
2661
2898
  }
2662
2899
  `;
2663
2900
  }