| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /* ===========================================
- VIEWPORT FITTING: MANDATORY BASE STYLES
- Include this ENTIRE file in every presentation.
- These styles ensure slides fit exactly in the viewport.
- =========================================== */
- /* 1. Lock html/body to viewport */
- html, body {
- height: 100%;
- overflow-x: hidden;
- }
- html {
- scroll-snap-type: y mandatory;
- scroll-behavior: smooth;
- }
- /* 2. Each slide = exact viewport height */
- .slide {
- width: 100vw;
- height: 100vh;
- height: 100dvh; /* Dynamic viewport height for mobile browsers */
- overflow: hidden; /* CRITICAL: Prevent ANY overflow */
- scroll-snap-align: start;
- display: flex;
- flex-direction: column;
- position: relative;
- }
- /* 3. Content container with flex for centering */
- .slide-content {
- flex: 1;
- display: flex;
- flex-direction: column;
- justify-content: center;
- max-height: 100%;
- overflow: hidden; /* Double-protection against overflow */
- padding: var(--slide-padding);
- }
- /* 4. ALL typography uses clamp() for responsive scaling */
- :root {
- /* Titles scale from mobile to desktop */
- --title-size: clamp(1.5rem, 5vw, 4rem);
- --h2-size: clamp(1.25rem, 3.5vw, 2.5rem);
- --h3-size: clamp(1rem, 2.5vw, 1.75rem);
- /* Body text */
- --body-size: clamp(0.75rem, 1.5vw, 1.125rem);
- --small-size: clamp(0.65rem, 1vw, 0.875rem);
- /* Spacing scales with viewport */
- --slide-padding: clamp(1rem, 4vw, 4rem);
- --content-gap: clamp(0.5rem, 2vw, 2rem);
- --element-gap: clamp(0.25rem, 1vw, 1rem);
- }
- /* 5. Cards/containers use viewport-relative max sizes */
- .card, .container, .content-box {
- max-width: min(90vw, 1000px);
- max-height: min(80vh, 700px);
- }
- /* 6. Lists auto-scale with viewport */
- .feature-list, .bullet-list {
- gap: clamp(0.4rem, 1vh, 1rem);
- }
- .feature-list li, .bullet-list li {
- font-size: var(--body-size);
- line-height: 1.4;
- }
- /* 7. Grids adapt to available space */
- .grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
- gap: clamp(0.5rem, 1.5vw, 1rem);
- }
- /* 8. Images constrained to viewport */
- img, .image-container {
- max-width: 100%;
- max-height: min(50vh, 400px);
- object-fit: contain;
- }
- /* ===========================================
- RESPONSIVE BREAKPOINTS
- Aggressive scaling for smaller viewports
- =========================================== */
- /* Short viewports (< 700px height) */
- @media (max-height: 700px) {
- :root {
- --slide-padding: clamp(0.75rem, 3vw, 2rem);
- --content-gap: clamp(0.4rem, 1.5vw, 1rem);
- --title-size: clamp(1.25rem, 4.5vw, 2.5rem);
- --h2-size: clamp(1rem, 3vw, 1.75rem);
- }
- }
- /* Very short viewports (< 600px height) */
- @media (max-height: 600px) {
- :root {
- --slide-padding: clamp(0.5rem, 2.5vw, 1.5rem);
- --content-gap: clamp(0.3rem, 1vw, 0.75rem);
- --title-size: clamp(1.1rem, 4vw, 2rem);
- --body-size: clamp(0.7rem, 1.2vw, 0.95rem);
- }
- /* Hide non-essential elements */
- .nav-dots, .keyboard-hint, .decorative {
- display: none;
- }
- }
- /* Extremely short (landscape phones, < 500px height) */
- @media (max-height: 500px) {
- :root {
- --slide-padding: clamp(0.4rem, 2vw, 1rem);
- --title-size: clamp(1rem, 3.5vw, 1.5rem);
- --h2-size: clamp(0.9rem, 2.5vw, 1.25rem);
- --body-size: clamp(0.65rem, 1vw, 0.85rem);
- }
- }
- /* Narrow viewports (< 600px width) */
- @media (max-width: 600px) {
- :root {
- --title-size: clamp(1.25rem, 7vw, 2.5rem);
- }
- /* Stack grids vertically */
- .grid {
- grid-template-columns: 1fr;
- }
- }
- /* ===========================================
- REDUCED MOTION
- Respect user preferences
- =========================================== */
- @media (prefers-reduced-motion: reduce) {
- *, *::before, *::after {
- animation-duration: 0.01ms !important;
- transition-duration: 0.2s !important;
- }
- html {
- scroll-behavior: auto;
- }
- }
|