No.300 · Feedback· New
Underside 404
A blank sheet with one corner turned up. Turn the page — drag the corner or press the button — and the back is printed with an index of the places that exist.
The prompt
Written for the variant you picked above: Paper
Build a not-found page as a single sheet of paper lying on a flat desk colour. The sheet is 30rem wide at most, about 4:3 tall, with a soft layered shadow. Front (recto): a hairline-ruled mono header 'No. 404' left and 'Recto' right; vertically centred, a 36–52px Instrument Serif headline 'This page is blank.' and a muted 15px line 'Nothing was ever printed on it. The way back is on the other side.'; at the bottom, a pill outline button 'Turn the page over ↶'. The bottom-right corner is cut away with clip-path along a 40px diagonal and a flap in the back's tone is folded over it, with a darker copy of the flap offset 3px as its shadow; the fold grows to 54px when the corner or the button is hovered or focused. Back (verso): the same ruled header reading 'Index' and 'Verso', then a nav with an ordered list of entries: an Instrument Serif label, a dotted leader that fills the gap, and a mono folio number, each a 44px link whose label and leader turn the accent colour on hover. A footer rule holds a pill 'Turn back ↷' button and a small uppercase home link. Both faces share one grid cell inside a sheet with preserve-3d; the back is pre-rotated 180°, both hide their backface, and the sheet rotates by --turn × −180° around the vertical axis. Selected variant — Paper (paper): Paper theme: desk #e3dfd6, sheet #fbfaf6, back of sheet #f3f0e8, ink #1f1d19, muted #6e695f, faint leaders #aaa498, hairlines rgb(31 29 25 / 0.12), accent brick #a2361f. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: The button turns the page and moves focus to the first index entry; Turn back returns and focuses the turn button. Dragging the turned corner leftwards turns the page live in proportion to the drag (pointer capture); releasing past 35% completes the turn, otherwise it settles back. A plain tap on the corner also turns it. The hidden side is inert and ignores pointers. Motion: The page turn is a 720ms rotateY with a soft ease-out, tracked 1:1 during a drag with transitions off. The corner fold grows on hover. With reduced motion the sheet never rotates: the two sides cross-fade in place. Accessibility: The section is labelled by the front headline. The turn button has aria-expanded and aria-controls pointing at the back; the drag corner is decorative and hidden, so the button is the accessible path. The back is a labelled nav with an ordered list, and the side facing away is inert. Focus moves deliberately on each turn. Responsive behavior: The sheet is fluid to 320px, sized with container units so the headline and padding scale; the index keeps a minimum leader width and labels wrap rather than overflow. Touch: Drag the corner with a finger (touch-action is disabled on it), tap it, or use the button. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.
Notes
- Interaction
- The button turns the page and moves focus to the first index entry; Turn back returns and focuses the turn button. Dragging the turned corner leftwards turns the page live in proportion to the drag (pointer capture); releasing past 35% completes the turn, otherwise it settles back. A plain tap on the corner also turns it. The hidden side is inert and ignores pointers.
- Motion
- The page turn is a 720ms rotateY with a soft ease-out, tracked 1:1 during a drag with transitions off. The corner fold grows on hover. With reduced motion the sheet never rotates: the two sides cross-fade in place.
- Accessibility
- The section is labelled by the front headline. The turn button has aria-expanded and aria-controls pointing at the back; the drag corner is decorative and hidden, so the button is the accessible path. The back is a labelled nav with an ordered list, and the side facing away is inert. Focus moves deliberately on each turn.
- Responsive
- The sheet is fluid to 320px, sized with container units so the headline and padding scale; the index keeps a minimum leader width and labels wrap rather than overflow.
- On touch
- Drag the corner with a finger (touch-action is disabled on it), tap it, or use the button.