No.189 · Data· New
Board View
A status board in a calm document style: coloured status pills, cards with owner, date and tags, drag-and-drop between columns with a blue landing line, and full keyboard moves.
The prompt
Written for the variant you picked above: Light
Build a kanban board in a calm document style: Inter 14px, warm near-black ink #37352f on white. Columns sit side by side (min 15.5rem each, 14px gaps) and scroll horizontally with snap on narrow containers (each column 82% wide under 40rem). A column header holds a rounded status pill (a 7px coloured dot plus the label on a pastel tint) and a faint card count; the whole column tints with 6% ink while a card is dragged over it. Cards are white with 6px corners and a hairline-ring shadow (0 0 0 1px rgb(15 15 15 / 0.08), 0 2px 4px rgb(15 15 15 / 0.06)). Each shows a 500-weight title, a muted meta line with an 18px initials avatar tinted by name and a short date ('16 Oct'), and small 3px-radius tag pills. Use a nine-colour select-pill palette (gray, brown, orange, yellow, green, blue, purple, pink, red), each a pale background with a deeper ink. A '+ New' ghost row at the foot of each column turns into an inline input ('Type a name, Enter to add'). Dragging: press a card and move 5px; the original fades to 35% and a fixed ghost copy follows the pointer, tilted 1.5° with a deeper shadow. A 3px rounded blue line (#2383e2) appears where it will land in the column under the pointer. On drop, cards slide to their new places (FLIP, 240ms). When a card has focus it also shows a small native 'Move to' select listing the columns. Selected variant — Light (light): Light theme: page and cards #ffffff, card hover #fbfbfa, ink #37352f, muted #787774, faint #a5a29a, hover tint rgb(55 53 47 / 0.06), landing line and focus #2383e2. Pills: gray #f1f1ef/#787774, brown #f4eeee/#9f6b53, orange #fbecdd/#b85c0b, yellow #fbf3db/#a3741a, green #edf3ec/#448361, blue #e7f3f8/#337ea9, purple #f6f3f9/#9065b0, pink #faf1f5/#c14c8a, red #fdebec/#c4403b. 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: Pointer drag between and within columns. Keyboard: cards are focusable; arrows move focus between cards and columns, Shift+←/→ moves the card to the neighbouring status, and Shift+↑/↓ reorders it; focus follows the card. Tapping a card on touch focuses it and reveals the Move to select. + New adds a card to that column. onChange receives the cards array with updated statuses and order. Motion: Cards glide to new positions with FLIP over 240ms (cubic-bezier(.2,.8,.2,1)); the drag ghost tilts slightly; columns tint on hover. Reduced motion removes the glide and the tilt. Accessibility: Each column is a section labelled by its header; cards are list items with tabIndex 0, described by hidden keyboard instructions. A polite live region announces each move ('moved to In review, position 2 of 3') and additions. The Move to select and New buttons have full accessible names. Responsive behavior: Columns keep a readable minimum width and the board scrolls horizontally with scroll-snap; titles and tags wrap within each card. Touch: Touch keeps native scrolling: tap a card to focus it, then use its Move to select. Drag still works with a mouse or pen. 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
- Pointer drag between and within columns. Keyboard: cards are focusable; arrows move focus between cards and columns, Shift+←/→ moves the card to the neighbouring status, and Shift+↑/↓ reorders it; focus follows the card. Tapping a card on touch focuses it and reveals the Move to select. + New adds a card to that column. onChange receives the cards array with updated statuses and order.
- Motion
- Cards glide to new positions with FLIP over 240ms (cubic-bezier(.2,.8,.2,1)); the drag ghost tilts slightly; columns tint on hover. Reduced motion removes the glide and the tilt.
- Accessibility
- Each column is a section labelled by its header; cards are list items with tabIndex 0, described by hidden keyboard instructions. A polite live region announces each move ('moved to In review, position 2 of 3') and additions. The Move to select and New buttons have full accessible names.
- Responsive
- Columns keep a readable minimum width and the board scrolls horizontally with scroll-snap; titles and tags wrap within each card.
- On touch
- Touch keeps native scrolling: tap a card to focus it, then use its Move to select. Drag still works with a mouse or pen.