diff --git a/cbd-web/src/app.rs b/cbd-web/src/app.rs
index 958d9db..eb072c8 100644
--- a/cbd-web/src/app.rs
+++ b/cbd-web/src/app.rs
@@ -1216,12 +1216,18 @@ fn Transport(store: Store) -> impl IntoView {
"⏮"
+ // Guillemets, not U+23EA/U+23E9: those two carry emoji
+ // presentation, so a browser with a color emoji font drew them
+ // full-color and oversized next to a row of monochrome type.
+ // These are plain text glyphs at the weight of the `‹` in the
+ // library toolbar, and read as a nudge against the heavier
+ // prev/next marks either side of them.
"⏪"
+ on:click=move |_| store.dispatch(Action::SeekBackward)>"«"
{state_symbol}
"⏩"
+ on:click=move |_| store.dispatch(Action::SeekForward)>"»"
"⏭"
` skip a whole
-track), as do the `⏪`/`⏩`
-buttons in
-the transport bar, and the progress bar is clickable — a click seeks to
+track), as do the `«`/`»` buttons in the transport bar, and the progress
+bar is clickable — a click seeks to
that point in the track. The `/` live filter is TUI-only for now.
A pair of `library` / `queue` tabs in the top bar switches panes and shows
diff --git a/plan/summary.md b/plan/summary.md
index b934d75..54a7bd8 100644
--- a/plan/summary.md
+++ b/plan/summary.md
@@ -1625,3 +1625,18 @@ collapse to a strip, which was its toolbar and the top of its list with the
rest clipped — all still taking taps, so aiming at the strip hit the wrong
pane's list, or the library's "play", which replaces the queue. With the tabs
carrying the switch, the strip had nothing left to earn.
+
+## Web seek buttons (2026-07-27)
+
+The 15-second seek buttons were `⏪`/`⏩` (U+23EA/U+23E9), which carry emoji
+presentation: a browser with a color emoji font drew them as full-color
+pictures, taller than the line and off its baseline, in a row that is
+otherwise monochrome type.
+
+They are `«`/`»` now — plain text glyphs at the weight of the `‹` in the
+library toolbar, and lighter than the prev/next marks either side, which suits
+a nudge next to a skip.
+
+`font-variant-emoji: text` on the controls row asks for the text form of the
+prev/next/pause marks, which have the same emoji presentation. It is ignored
+where unsupported, at no cost: those glyphs are the fallback anyway.