Nº 384 of 520
Receipt slip
Print slip feeds a yard note out of a slot. Reprint pulls it back. The note says it is not a tax bill.
Preview
Use it
Free to use · credit appreciated1 Once, in your project
npx skills add SusanAcharya/Design-Lounge 2 Then ask
Using the Design Lounge skill, build "Receipt slip" (piece receipt-slip) in my stack. Match its brief; restyle it onto my product's theme.
No skill? Paste the brief instead. It carries the numbers, tokens and behaviour.
<!-- Design Lounge Nº 384 · "Receipt slip" · designlounge.vercel.app -->
# Receipt slip
> **Build brief for a coding agent.** Rebuild this piece in the reader's stack. If they haven't said which stack, ask once, then default to semantic HTML + CSS + a little vanilla JS. Match the numbers below; don't "improve" them.
## What it is
A slot and a slip. Print slip sets max-height from 0 to 280px over 700ms. The slip names Hollis Yard, 3 Oct 2026 18:40, Load 18 Gate 4, Held 6h, and says Not a tax bill. The button becomes Reprint. Reprint collapses the slip. This is not a checkout. That summary is `mobile-one-page-checkout`.
## Reference behaviour
1. The slip starts at max-height 0. The button reads Print slip.
2. Click sets data-out true. The slip grows to 280px.
3. The button reads Reprint.
4. Click again sets data-out false and the button reads Print slip.
5. The type on the slip is IBM Plex Mono, 14px, line-height 1.7.
6. The grow is 700ms. Reduced motion snaps.
7. The slot is a 28px dark bar and does not move.
## Structure
```
320px
[ slot ]
[ slip ]
Print slip
```
- The machine is 320px, text-align center.
- The slot is 28px tall, fill #1c1b19, radius 2px 2px 0 0.
- The slip is #fffdf8, border #e4dfd4, border-top 0, overflow hidden.
- The pre is padding 16px 18px 20px, text-align left.
- The button is 44px, fill #1f4d3a, text #fffdf8, margin-top 16px.
## Tokens
```css
:root { --bg:#f6f4ef; --slip:#fffdf8; --ink:#161513; --slot:#1c1b19; --primary:#1f4d3a; }
```
… 135 more lines. Copy or download for the full brief. Loading the source…Brief
175 linesBuild brief for a coding agent. Rebuild this piece in the reader’s stack. If they haven’t said which stack, ask once, then default to semantic HTML + CSS + a little vanilla JS. Match the numbers below; don’t “improve” them.
What it is
A slot and a slip. Print slip sets max-height from 0 to 280px over 700ms. The slip names Hollis Yard, 3 Oct 2026 18:40, Load 18 Gate 4, Held 6h, and says Not a tax bill. The button becomes Reprint. Reprint collapses the slip. This is not a checkout. That summary is mobile-one-page-checkout.
Reference behaviour
- The slip starts at max-height 0. The button reads Print slip.
- Click sets data-out true. The slip grows to 280px.
- The button reads Reprint.
- Click again sets data-out false and the button reads Print slip.
- The type on the slip is IBM Plex Mono, 14px, line-height 1.7.
- The grow is 700ms. Reduced motion snaps.
- The slot is a 28px dark bar and does not move.
Structure
320px
[ slot ]
[ slip ]
Print slip
- The machine is 320px, text-align center.
- The slot is 28px tall, fill #1c1b19, radius 2px 2px 0 0.
- The slip is #fffdf8, border #e4dfd4, border-top 0, overflow hidden.
- The pre is padding 16px 18px 20px, text-align left.
- The button is 44px, fill #1f4d3a, text #fffdf8, margin-top 16px.
Tokens
:root { --bg:#f6f4ef; --slip:#fffdf8; --ink:#161513; --slot:#1c1b19; --primary:#1f4d3a; }
Typography
| Role | Family | Size | Weight |
|---|---|---|---|
| Slip | IBM Plex Mono | 14px | 400 |
| Button | IBM Plex Sans | 14px | 500 |
Motion
- Slip | Print or Reprint | max-height 0 | max-height 280px | 700ms cubic-bezier(0.16,1,0.3,1). Reduced motion snaps.
States
- In: max-height 0, button Print slip.
- Out: max-height 280px, button Reprint.
- The slip text does not change.
- Reduced motion still toggles.
Accessibility
- The button name changes between Print slip and Reprint.
- The slip text is in the page, clipped by max-height.
- Focus ring is 2px #1f4d3a, offset 3px.
- Reduced motion still shows the slip.
- Do not use a print dialog.
- The slot is decorative.
Responsive rules
- The machine is 320px at 1280.
- Below 360 it is calc(100% - 32px).
- The slip text stays left aligned.
Acceptance checklist
Always
- Print and Reprint are one button.
- The slip names the load.
- It says Not a tax bill.
- The slot stays put.
- Nothing is sent to a printer.
This demo
- The header is HOLLIS YARD.
- The time is 3 Oct 2026 18:40.
- The line is Load 18 Gate 4.
- Held is 6h.
- The last line is Not a tax bill.
Implementation notes
Toggle data-out.
slip.dataset.out = String(on);
go.textContent = on ? "Reprint" : "Print slip";
Use max-height so the slip can grow without a fixed height animation library.
Measurements to keep
- Machine 320px. Slot height 28px.
- Slip max-height 0 or 280px. Duration 700ms.
- Pre padding 16px 18px 20px. Mono 14px, line-height 1.7.
- Button height 44px, margin-top 16px.
- Slip fill #fffdf8. Slot #1c1b19.
Wrong turns
- Do not open a print dialog.
- Do not call it a tax invoice.
- Do not start with the slip out. The first frame is the slot.
- Do not fetch a receipt.
- Do not use a second button.
- Do not animate the slot.
Fit with the rest of the library
- A checkout is
mobile-one-page-checkout. - A morph is
button-state-morph. - This is the slip.
- One machine.
- Slip type is IBM Plex Mono.
- The ground is #f6f4ef.
Keyboard
- Enter prints or reprints.
- The button name changes.
- The slip is not a tab stop.
- Do not use a positive tabindex.
- Focus stays on the button.
- Reduced motion snaps.
- One button.
- The text is in a pre.
- Focus offset is 3px.
- It starts hidden.
- Mono is IBM Plex Mono.
- Button type is IBM Plex Sans.
- Escape does nothing.
- No print API.
- The slot does not move.
- Do not trap focus.
Rebuild order
- Build step: The slip starts at max-height 0. The button reads Print slip.
- Build step: Click sets data-out true. The slip grows to 280px.
- Build step: The button reads Reprint.
- Build step: Click again sets data-out false and the button reads Print slip.
- Build step: The type on the slip is IBM Plex Mono, 14px, line-height 1.7.
- Build step: The grow is 700ms. Reduced motion snaps.
- Build step: The slot is a 28px dark bar and does not move.
-
Keep this measurement while rebuilding: Machine 320px. Slot height 28px.
-
Keep this measurement while rebuilding: Slip max-height 0 or 280px. Duration 700ms.
-
Keep this measurement while rebuilding: Pre padding 16px 18px 20px. Mono 14px, line-height 1.7.
-
Keep this measurement while rebuilding: Button height 44px, margin-top 16px.
-
Keep this measurement while rebuilding: Slip fill #fffdf8. Slot #1c1b19.
-
While rebuilding, remember: Do not open a print dialog.
-
While rebuilding, remember: Do not call it a tax invoice.
-
While rebuilding, remember: Do not start with the slip out. The first frame is the slot.
-
While rebuilding, remember: Do not fetch a receipt.
-
While rebuilding, remember: Do not use a second button.
-
While rebuilding, remember: Do not animate the slot.
Details
- Palette
- Type
- IBM Plex Sans · IBM Plex Mono
- Motion
- Subtle motion
- Build
- Quick build
- Tags
On the shelves