:root { --bg: #f8fbff; --ink: #0f172a; --muted: #64748b; --accent: #2563eb; --accent-strong: #7c3aed; --line: #e2e8f0; } * { box-sizing: border-box; } html, body { height: 100%; margin: 0; } body { overflow: hidden; background: linear-gradient(180deg, #ffffff 0%, var(--bg) 42%, #eef6ff 100%); color: var(--ink); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; } .top-progress { position: fixed; top: 0; left: 0; z-index: 30; width: 100vw; height: 5px; overflow: hidden; background: rgba(226, 232, 240, .82); } .top-progress span { display: block; width: 100%; height: 100%; background: linear-gradient(90deg, var(--accent), var(--accent-strong)); transform: scaleX(0); transform-origin: left center; transition: transform 420ms cubic-bezier(.22, 1, .36, 1); } .deck { position: relative; width: 100vw; height: 100dvh; } .slide { position: absolute; inset: 0; display: grid; grid-template-rows: max-content minmax(0, 1fr); gap: clamp(14px, 2vh, 24px); height: 100dvh; padding: clamp(34px, 5vh, 58px) clamp(20px, 4.8vw, 74px) clamp(20px, 4vh, 42px); opacity: 0; pointer-events: none; transform: translateY(10px); transition: opacity 180ms ease, transform 220ms ease; } .slide.active { z-index: 2; opacity: 1; pointer-events: auto; transform: translateY(0); } .slide-header { width: 100%; margin: 0; text-align: center; } .eyebrow { display: inline-flex; align-items: center; justify-content: center; height: 30px; margin-bottom: 16px; padding: 0 14px; border: 1px solid var(--line); border-radius: 999px; background: rgba(255, 255, 255, .86); color: var(--accent); font-size: 13px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; box-shadow: 0 10px 26px rgba(15, 23, 42, .05); } h1 { margin: 0; font-size: clamp(42px, 5vw, 72px); font-weight: 900; letter-spacing: -0.055em; line-height: .96; } .subtitle { margin: 18px auto 0; color: var(--muted); font-size: clamp(18px, 2vw, 25px); font-weight: 650; line-height: 1.35; } .visual { display: flex; justify-content: center; width: 100%; height: 100%; min-height: 0; } .visual img { display: block; width: auto; height: 100%; max-width: 100%; max-height: 100%; object-fit: contain; } .notes { position: fixed; left: 50%; bottom: 34px; z-index: 20; width: min(1060px, calc(100vw - 60px)); max-height: 38vh; overflow: auto; padding: 22px 26px; border: 1px solid rgba(255, 255, 255, .13); border-radius: 24px; background: rgba(15, 23, 42, .94); box-shadow: 0 24px 60px rgba(2, 6, 23, .35); color: #e2e8f0; opacity: 0; pointer-events: none; transform: translateX(-50%) translateY(24px); transition: opacity 180ms ease, transform 180ms ease; } .notes.open { opacity: 1; pointer-events: auto; transform: translateX(-50%) translateY(0); } .notes h2 { margin: 0 0 10px; color: #fff; font-size: 18px; letter-spacing: .01em; } .notes ul { display: grid; gap: 7px; margin: 0; padding-left: 22px; } .notes li { color: #cbd5e1; font-size: 15px; line-height: 1.5; } .notes code { padding: 1px 5px; border: 1px solid rgba(147, 197, 253, .15); border-radius: 6px; background: rgba(37, 99, 235, .16); color: #bfdbfe; } @media (max-width: 800px) { .slide { padding: 34px 24px 24px; } .visual img { height: 100%; max-width: 100%; } } @media (max-width: 1536px), (max-height: 850px) { .eyebrow { height: 28px; margin-bottom: 12px; font-size: 11px; } h1 { font-size: clamp(32px, 4.1vw, 56px); } .subtitle { margin-top: 12px; font-size: clamp(15px, 1.55vw, 20px); } } @media (max-height: 720px) { .slide { gap: 12px; padding-top: 28px; padding-bottom: 18px; } .eyebrow { height: 26px; margin-bottom: 10px; font-size: 11px; } h1 { font-size: clamp(30px, 6vh, 48px); } .subtitle { margin-top: 10px; font-size: clamp(14px, 2.4vh, 18px); } } @media (max-height: 560px) { .slide { padding-top: 18px; padding-bottom: 14px; } .eyebrow { display: none; } h1 { font-size: clamp(28px, 7vh, 42px); } .subtitle { font-size: clamp(14px, 3vh, 17px); } } @media (prefers-reduced-motion: reduce) { .top-progress span, .slide, .notes { transition: none; } } @media print { body { overflow: visible; background: #fff; } .top-progress, .notes { display: none; } .deck { height: auto; } .slide { position: relative; min-height: 100vh; page-break-after: always; opacity: 1; pointer-events: auto; transform: none; } }