feat: one hamburger, every page — mobile navigation, and the ghost log HUD is gone
The app never had a global navigation. Every page carried its own scattered links, so on a phone it read as a pile of tiny controls with no map: you could not tell what existed or where you were. Reported as "everything is tiny and I cannot see what is going on". MobileNav is one drawer with every reachable route pegged to exactly one tab, each with a glyph and a line saying what it is for. It closes on Escape, on backdrop press, and on any navigation including the back button, and it locks body scroll — restoring the PREVIOUS value rather than clearing it, since the séance board legitimately owns overflow during a rite. Nothing was removed to make room: the whole component is display:none above 860px, so desktop is byte-for-byte unchanged. Detail routes light their parent tab, so reading a dossier still shows you as "in the codex". The load-bearing test parses App.tsx's route table and fails if a page exists that no tab reaches — proven by dropping /devices, which reports "these pages exist but no mobile tab reaches them: /devices". That is the failure that actually happens over time. The floating Ghost Log HUD is removed as requested — it never showed anything the transcript doesn't already show, and on a 390px screen its fixed 300px panel sat on top of the séance ask-field. Its event bus went with it: once the HUD was gone the bus had emitters and zero subscribers. Two things caught while doing this, both mine: - I first wrote the nav i18n block wholesale and clobbered the existing one, which would have silently renamed the Enter page from "the threshold" to "the veil" and dropped nav.enter. Merged instead, and verified no original value changed. The drawer reuses the existing nav.* vocabulary rather than inventing a second set of names for the same places. - The route-table test first used node:fs, which passes under vitest but fails the production build, since tsc typechecks tests and there is no @types/node. Uses Vite's ?raw import now — no new dependency. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,7 +19,25 @@
|
||||
"enter": "entrar",
|
||||
"logout": "partir",
|
||||
"log": "registro",
|
||||
"hunters": "lista"
|
||||
"hunters": "lista",
|
||||
"title": "los caminos",
|
||||
"openMenu": "los caminos",
|
||||
"closeMenu": "cerrar los caminos",
|
||||
"messages": "mensajes",
|
||||
"profile": "perfil",
|
||||
"doctrine": "doctrina",
|
||||
"blurb": {
|
||||
"seance": "abre un canal y llama",
|
||||
"log": "lo que la sala ha dicho",
|
||||
"codex": "cada espíritu nombrado",
|
||||
"hunters": "otros que hacen esto",
|
||||
"messages": "palabra de otros cazadores",
|
||||
"profile": "tu rango y posición",
|
||||
"inventory": "lo que has guardado",
|
||||
"devices": "vincula un sensor",
|
||||
"doctrine": "cómo funciona el instrumento",
|
||||
"shop": "instrumentos por venir"
|
||||
}
|
||||
},
|
||||
"log": {
|
||||
"title": "REGISTRO ESPECTRAL",
|
||||
@@ -443,6 +461,10 @@
|
||||
"high": "muy poco de lo que dice es de fiar."
|
||||
}
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"open": "más",
|
||||
"close": "cerrar"
|
||||
}
|
||||
},
|
||||
"codex": {
|
||||
@@ -689,14 +711,6 @@
|
||||
"listening": "…escuchando…"
|
||||
}
|
||||
},
|
||||
"ghostLog": {
|
||||
"title": "REGISTRO FANTASMA",
|
||||
"idle": "el velo está en silencio — no se detecta presencia",
|
||||
"waiting": "escuchando indicios…",
|
||||
"meterLabel": "medidor de maldad",
|
||||
"collapse": "ocultar el registro fantasma",
|
||||
"expand": "abrir el registro fantasma"
|
||||
},
|
||||
"profile": {
|
||||
"back": "← la mesa",
|
||||
"title": "TU SIGILO",
|
||||
|
||||
Reference in New Issue
Block a user