# Changelog All notable changes to **Bento Slides**. The app version is baked into every shell as `APP_VERSION` (from `slides/package.json`) and shown in the About dialog; a shipped file updates itself through the signed release channel. The format (`bento/slides`, version `1`) is additive and stable — every version below opens files from every earlier version, and unknown fields are preserved. This project's versions roughly follow semantic-ish `0.MINOR.PATCH` while it is pre-1.0. ## [Unreleased] ## [1.0.8] — 2026-07-24 - **Reduce motion during a presentation.** A calmer show for motion sensitivity, a laggy projector, or a weak machine. It honours the OS *prefers-reduced-motion* setting automatically; the presenter can also toggle it with **M** (or the ⏸ button in speaker view). When on, slide transitions cut instantly and every animation — morph, entrance staggers, count-ups, dash-march / motion-path loops, ken-burns — is skipped, so elements just show their final state. It's a viewer/presenter preference (persisted per browser), never written into the document. - **Gradient text.** Text can take a multi-stop linear gradient fill (angle + colour stops), painted into the glyphs — edited in the Typography panel. - **Outlined & hollow text.** A text outline (width + colour) with an optional hollow interior — the classic outlined section-break word. - **Element blur & blend modes.** Any element can take a Gaussian blur and a CSS blend mode (screen for neon light glows, multiply/overlay for editorial duotones), in the Effects panel. - **Frosted-glass panels.** Elements can blur what's behind them (backdrop-filter). Screen-only — pair with a translucent fill so PDF/print show a graceful flat panel. - **First-run Slideshow hint.** New editors get a peach neon-runner cue tracing the Slideshow button until they present once (and again on hover); the About dialog now links back to bento.page. - **Fix: live edits no longer lose focus when a collaborator changes something.** A remote collab op used to trigger a full canvas repaint that tore down the text (or table-cell) node you were typing in — stealing focus and resetting the caret. The canvas now defers the repaint while an inline edit is in progress (a burst of remote ops coalesces into one repaint), and catches up the instant the edit commits. Your edit is untouched; everyone else's changes still land — you just see them when you finish typing. (The most-reported rough edge from the Show HN launch.) - **Fix: charts with negative values now baseline at zero.** A bar/line chart whose data crosses zero drew everything from the bottom of the plot — negative bars pointed up and the x-axis was pinned to the floor. Bars now grow from the zero line (positive up, negative down), and the x-axis line sits at zero so values dip below it. All-positive charts are unchanged. - **Fix: two-finger pinch no longer breaks selection on mobile Safari.** A pinch over the canvas started a rubber-band marquee and, combined with the page zoom, threw the selection box off and could crash the page. Multi-touch gestures are now ignored by the marquee and the page pinch-zoom is suppressed over the canvas; single-touch scroll and selection are unaffected. ## [1.0.7] — 2026-07-22 - **In-place update keeps its handle.** When a deck opened *without* a File System Access handle (e.g. double-clicked from disk) is updated via "Update this file…", Bento now keeps the handle the save-picker grants — so this and every later update rewrite the file in place silently, instead of re-prompting each time. (A double-clicked file gives the browser no handle on open, so the first update still needs you to overwrite the file you have open in the save dialog; after that it's automatic.) - **Editable morph id.** Elements now carry an optional `morphId` that overrides which element they morph into across slides, so two independently-created elements can be paired without the duplicate-a-slide dance. The element panel gains a **Morph** section: a "Morph id" field (set it back to the element's own id to clear the override) and a "Pair with" picker that adopts another slide element's key. `id` stays the stable identity — selection, connectors, comments and live-collab node identity are untouched — and the default morph (elements sharing an `id`) is unchanged, so existing decks behave identically. Same-slide key collisions are rejected inline. - **True bezier curve editing.** Selecting a curve now shows real pen-tool control handles (in/out tangents) on each anchor — drag a handle to bend the curve exactly. Smooth anchors mirror the opposite handle; Alt breaks a corner. Double-click a segment to insert an anchor (a de Casteljau split that preserves the shape), double-click an anchor to remove it. Replaces the old Catmull-Rom anchor editing, which sampled the rendered curve into approximate points and re-smoothed on every drag — lossy, drifting, no real handles. The new model parses the path's actual control points and round-trips losslessly. - **Hybrid bezier motion paths.** The "Edit path on canvas" motion-path editor (the trajectory a presenting element loops along) now uses the same exact cubic-bezier core. It stays SIMPLE by default — drop and drag waypoints and the path auto-smooths, exactly as before — but selecting a waypoint reveals its in/out control handles, and dragging one flips that point to "manual" for a precise arc or a sharp corner (Alt) while untouched points keep auto-smoothing. Inserting a point (double-click the path) splits the curve without changing its shape. Because the path is now stored as explicit cubics, the old sample-and-re-smooth round-trip drift is gone: a motion path is byte-stable across open/save, and existing decks reopen unchanged. Per-anchor speed (scroll a point) and the live preview dot are preserved. Double-clicking a waypoint to remove it is detected directly on the point's mousedown (the select-on-click redraw would otherwise defeat the browser's dblclick, which needs both clicks on the same element) — so remove now works whether or not the point was already selected. - **Help: the `?` overlay now documents lines, curves & motion paths.** New "Lines & curves" and "Motion paths" sections spell out the gestures — draw from the Shape menu, drag points, click a point for bézier handles, Alt for a sharp corner, double-click to add/remove a point, scroll a motion-path point to set its speed. ## [1.0.6] — 2026-07-21 - **Fix: topbar menus were icon-only on narrow screens.** The responsive rule that collapses topbar button labels to icons below 1200px also hid the label of every item INSIDE the dropdown menus (Save, language, shapes, media) — on phones they rendered as icon-only mystery lists. Menu items are exempt now; only the bar-level buttons collapse. ## [1.0.5] — 2026-07-21 - **Fix: dropdowns unreadable on dark-mode phones.** The app never declared a color scheme, so dark-mode Android/iOS rendered NATIVE form controls dark (and Chrome-on-Android could force-darken the page) while the ink stayed dark — dark-on-dark "blank" dropdowns. The shell now declares `color-scheme: only light` (meta + CSS) and form fields carry explicit light background/ink. The 1.0.4 iOS `user-select` fix remains as the second half of the story. ## [1.0.4] — 2026-07-21 - **Fix: dropdowns rendered blank on iOS Safari.** WebKit draws a `