Files
lewis b64ce0f832 perf(presenter): smooth navigation via postMessage (no reload, no flicker)
Problem: Switching slides reset iframe.src each time, causing visible
flicker (white flash → load → render) on every navigation.

Solution: load each preview iframe ONCE, then use postMessage for all
subsequent slide changes. The iframe stays mounted; only .is-active
class toggles between slides inside it.

Changes:
- runtime.js preview mode: now exposes a showSlide() function and
  listens for window.message events of type 'preview-goto'. Also
  posts 'preview-ready' to parent on init so the presenter window
  knows when each iframe is loaded.
- presenter window: tracks iframeReady state per iframe; first frame
  renders via iframe.src = ?preview=N (one-time), all subsequent
  navigation goes through postPreviewGoto() → postMessage. Notes,
  meta, and timer update directly without touching iframes.
- Init no longer calls update(idx) which used to reset iframe.src;
  instead inits notes/meta/count once and lets the load→ready flow
  populate previews.

Docs synced to match new architecture:
- SKILL.md: describes 4 magnetic cards, draggable/resizable, with
  the iframe ?preview=N pattern explained for AI consumers
- references/presenter-mode.md: updated ASCII diagram to show 4
  cards, removed old 58%/35% layout description, added explanation
  for why previews are pixel-perfect (iframe loads same HTML) and
  why navigation is flicker-free (postMessage, not reload)
- presenter-mode-reveal README: updated 4-card description
2026-04-17 23:27:05 +08:00
..