fix(web): open articles as a card, drop search, unstick stale app shell

- Service worker activates new versions immediately (skipWaiting +
  clientsClaim). In prompt mode a waiting worker kept serving the previous
  build to tabs that never send SKIP_WAITING, so the old UI hit the new API
  and showed "Aucun contenu disponible" on every article. Pages already
  controlled get a reload toast; lazy chunks missing after a deploy reload
  once.
- Reader opens as a large card above the dimmed grid: close with ✕, Escape
  or a click beside it; previous/next arrows on the sides (desktop) and a
  bottom bar with the next title (all sizes).
- Remove search, the focus banner and decorative headers; plain sentence-
  case labels instead of tracked capitals; quieter dashboard header.
- Fix horizontal overflow of cards and reader navigation on phones.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Antigravity AgentandClaude Opus 5.5 committed 2026-10-09 08:26:25 +02:00
1 parent b24a9806d5
commit ed83525d26
12 files changed
+316 -375

No files matched your search

+15 -3
View File
@@ -14,13 +14,25 @@ import './index.css'
import App from './App.tsx'
import { useUpdate } from './stores/updateStore'
// Prompt-based updates: a new version never reloads the page mid-read.
const updateSW = registerSW({
const reload = () => window.location.reload()
registerSW({
immediate: true,
onNeedRefresh() {
useUpdate.getState().setAvailable(() => updateSW(true))
useUpdate.getState().setAvailable(reload)
},
})
// The service worker activates new versions right away; when it takes over a
// page that was already controlled, offer a reload instead of forcing one
// under the reader.
if ('serviceWorker' in navigator) {
const hadController = !!navigator.serviceWorker.controller
navigator.serviceWorker.addEventListener('controllerchange', () => {
if (hadController) useUpdate.getState().setAvailable(reload)
})
}
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />