- commit
- dafc19146a332f9caacb3d59b5e9c91b28a9067e
- parent
- 7f4f3f2b8ade8d65221f54373c3bd55642f506ce
- author
- Dami <dami.etoile@gmail.com>
No content changes.
No content changes.
No content changes.
No content changes.
No content changes.
@@ -0,0 +1,152 @@
1+# world-index-presentation Specification2+3+## Purpose4+TBD - created by archiving change add-world-index-presentation. Update Purpose after archive.5+## Requirements6+### Requirement: INDEX SHALL present the active world as the header subject7+8+The INDEX presentation SHALL render an 11px tracked `INDEX | WORLD NN`9+eyebrow, the active world name in `--fg`, weight 800, and its muted tagline10+with 8px vertical spacing. The tagline SHALL fall back to11+`walk the path, pick a proof` when the normalized world has none. The large12+standalone INDEX heading and overlapping world-number stack SHALL not be13+rendered. The presentation SHALL also show `★ n / N`, where both counts are14+scoped to the active world view model.15+16+#### Scenario: Desktop world header establishes hierarchy17+18+- **WHEN** INDEX renders an active world on a desktop canvas19+- **THEN** the eyebrow, name, tagline, and per-world count are legible,20+ separated by the specified spacing, and do not overlap the board or world21+ strip22+23+#### Scenario: Missing tagline uses the approved fallback24+25+- **WHEN** the normalized active world has no tagline26+- **THEN** INDEX renders `walk the path, pick a proof` in the tagline region27+28+#### Scenario: Mobile header remains inside its owning region29+30+- **WHEN** INDEX renders at 390px wide31+- **THEN** the complete world name, fallback or authored tagline, and per-world32+ count remain inside the header region without covering the board or footer33+34+### Requirement: INDEX SHALL render the world strip as an actionable control35+36+The desktop strip SHALL render `[Q] ◀ ● • • ▶ [E]` with drawn Q and E keycaps,37+14px arrows, 10px dots, and one dot per world. The active dot SHALL use the38+normalized world's accent when present; inactive dots SHALL use the neutral dot39+role. On mobile or coarse pointers, keycaps SHALL be omitted and each arrow40+SHALL expose a 44px tap target. Hit geometry SHALL match the visible arrows.41+42+#### Scenario: World strip exposes adjacent actions43+44+- **WHEN** INDEX renders three worlds on desktop45+- **THEN** it shows Q, a previous arrow, three dots, a next arrow, and E in46+ that order, with the active dot accented47+48+#### Scenario: Mobile strip exposes touch targets49+50+- **WHEN** INDEX renders on a 390px canvas or a coarse pointer51+- **THEN** Q/E keycaps are absent and the previous and next arrows each have a52+ 44px tappable target53+54+#### Scenario: Dot slide follows a world transition55+56+- **WHEN** the D20 seam reports a world switch57+- **THEN** the active dot travels from its prior position to its new position58+ over 110ms with back-ease, while the world sheet uses the same transition59+ start and its 280ms ease60+61+#### Scenario: Reduced motion settles the strip62+63+- **WHEN** reduced motion is enabled during a world switch64+- **THEN** the strip renders the destination dot and sheet immediately without65+ an intermediate slide66+67+### Requirement: The first-entry world card SHALL present and dismiss world identity68+69+The INDEX SHALL consume the D20 `world-card` request and render a centered,70+hard-edged card containing the normalized glyph at 96px, `WORLD NN` eyebrow,71+32px name, 15px muted tagline when present, a meta line with proof count,72+`★ n / N`, and `by <author>` only when an author exists, followed by an action.73+These elements SHALL use a 16px vertical rhythm. The card SHALL never show74+`by Unknown author`. Its 2px stroke SHALL use the normalized world accent.75+Desktop SHALL show `[ENTER] enter world`; mobile and coarse-pointer layouts76+SHALL show a full-width 48px accent `ENTER WORLD` button without a keycap.77+The card SHALL fit all copy inside at desktop and mobile sizes and preserve78+the existing iris entry choreography. ENTER or the79+equivalent confirmed pointer/touch action SHALL dismiss the card and leave the80+player on the settled INDEX sheet without selecting a proof. The card SHALL81+not install packs or mutate simulation state.82+83+#### Scenario: INDEX first entry opens a readable world card84+85+- **WHEN** D20 requests a card with origin `index`86+- **THEN** the card shows its glyph, `WORLD NN`, name, tagline, proof count,87+ completion, author when present, and the correct desktop or touch action88+ without clipping89+90+#### Scenario: Core uses a first-party identity91+92+- **WHEN** the player first enters the Core world93+- **THEN** its card uses `🐈`, `Where the rules first bend.`, the `you` accent,94+ and `by Miau Is True` rather than the fallback identity95+96+#### Scenario: Missing author leaves no placeholder97+98+- **WHEN** an imported world omits author99+- **THEN** its meta line omits the byline segment and never prints100+ `by Unknown author`101+102+#### Scenario: Workshop PLAY uses the same card presentation103+104+- **WHEN** D20 requests a card with origin `workshop`105+- **THEN** the card uses the same composition and preserves the Workshop106+ selected pack's first node for the subsequent INDEX sheet107+108+#### Scenario: Card confirmation returns to INDEX109+110+- **WHEN** the player confirms ENTER on an open world card111+- **THEN** the card closes and INDEX remains on the active world's sheet; no112+ proof move or simulation turn is recorded113+114+#### Scenario: Touch confirmation has a large target115+116+- **WHEN** the card is rendered for a coarse pointer117+- **THEN** the card has no visible keycap and its full-width accent118+ `ENTER WORLD` button is 48px high and tappable across that width119+120+#### Scenario: Card motion respects reduced motion121+122+- **WHEN** reduced motion is enabled123+- **THEN** the card appears in its settled geometry without an iris intermediate124+125+### Requirement: Mobile INDEX controls SHALL use touch affordances and coherent narration126+127+Below 760px or on coarse pointers, INDEX SHALL omit keyboard keycap hints,128+render `tap the cat to play` below the active proof banner, and expose the129+bottom `☰ menu` thumb affordance. Workshop SHALL remain reached through that130+menu. The INDEX accessibility label SHALL include world number/name,131+world-scoped completion, total proof count, and the keyboard world-switch132+action where keyboard controls are available. An open card label SHALL include133+world identity, author, and its ENTER action.134+135+#### Scenario: Mobile footer removes desktop hints136+137+- **WHEN** INDEX renders below 760px or for a coarse pointer138+- **THEN** it shows the cat play prompt and menu thumb affordance without the139+ desktop ENTER, ESC, or SPACE keycap row140+141+#### Scenario: Accessibility follows the visible world state142+143+- **WHEN** the active world or its completed count changes144+- **THEN** the INDEX label names the current world and its updated `n of N`145+ proof progress, and announces Q/E switching when applicable146+147+#### Scenario: Presentation leaves simulation and grid state unchanged148+149+- **WHEN** any header, strip, card, or mobile footer presentation is measured,150+ animated, or dismissed151+- **THEN** engine rules, simulation snapshots, integer board coordinates,152+ progress keys, and pointer semantics remain unchanged