Paper Check
A compact editorial button feels like a paper tab pressed onto a page. Its offset underlay and slight tactile movement make the action feel physical, while the label changes to a clear confirmation after activation.
Interactive preview
What is Paper Check?
A single paper-like action button with an offset print layer and an inline confirmation state. The physical response stays subtle enough for everyday editorial interfaces.
How it’s built
The underlay is created with a pseudo-element and box shadow, while hover, focus, and active states shift the button by a few pixels. JavaScript toggles the pressed state and replaces the label without changing the surrounding layout.
Ideal for
- Review and approval actions
- Save controls in editorial tools
- Compact confirmation buttons
Accessibility
The native button element provides keyboard and screen-reader behavior. The pressed state is exposed with aria-pressed, and the focus ring remains visible against the paper surface.
Performance
The interaction uses one small event listener and hardware-friendly transforms. There are no images, fonts, libraries, or continuous animations.
Source code
Explore, copy and reuse the original HTML, CSS and JavaScript.
<div class="showcase"><div class="specimen"><div class="specimen__meta"><span>REVIEW QUEUE</span><span>ISSUE 04 / 12</span></div><div class="specimen__rule"></div><div class="specimen__copy"><p class="specimen__eyebrow">A considered finish</p><h1>Keep the page<br><em>moving forward.</em></h1><p class="specimen__description">A small confirmation for work that has earned its place in the archive.</p></div><button class="paper-check" type="button" aria-pressed="false"><span class="paper-check__label">Mark as reviewed</span><span class="paper-check__note" aria-hidden="true">✓</span></button><p class="specimen__caption">Tap once to record your review</p></div></div>
:root{--stage:#F1EDE6;--surface:#EEEAE4;--ink:#16131A;--muted:#5E5765;--accent:#62447D;--accent-soft:#B79BD4;--paper:#F4EFF8;--tab:#DF284D;--tab-offset:8px;--radius:2px}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{background:var(--stage)}.showcase{width:960px;height:640px;max-width:100vw;max-height:100vh;overflow:hidden;background:var(--stage);color:var(--ink);font-family:Arial,sans-serif;display:grid;place-items:center;padding:48px}.specimen{position:relative;width:min(100%,680px);min-height:440px;padding:42px 56px 48px;background:var(--surface);border:1px solid #D9D3CC;box-shadow:0 20px 44px #16131A14}.specimen:before{content:"";position:absolute;inset:10px -10px -10px 10px;border:1px solid #62447D33;z-index:0;pointer-events:none}.specimen>*{position:relative;z-index:1}.specimen__meta{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:10px;font-weight:700;letter-spacing:.18em}.specimen__rule{height:1px;background:#62447D66;margin:15px 0 58px}.specimen__copy{max-width:450px}.specimen__eyebrow{margin:0 0 14px;color:var(--accent);font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase}.specimen h1{margin:0;font:400 clamp(38px,5vw,54px)/.98 Georgia,serif;letter-spacing:-.045em}.specimen h1 em{color:var(--accent);font-style:italic}.specimen__description{max-width:330px;margin:23px 0 34px;color:var(--muted);font:16px/1.45 Georgia,serif}.paper-check{position:relative;isolation:isolate;display:inline-flex;align-items:center;gap:18px;min-height:58px;padding:0 20px 0 22px;color:var(--ink);background:var(--paper);border:1px solid var(--accent);border-radius:var(--radius);box-shadow:var(--tab-offset) var(--tab-offset) 0 var(--tab);font:700 14px/1 Arial,sans-serif;letter-spacing:.01em;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease,background .2s ease,color .2s ease}.paper-check:before{content:"";position:absolute;z-index:-1;inset:5px -7px -7px 7px;border:1px solid #62447D4D;transform:rotate(-1.2deg);pointer-events:none}.paper-check:hover{transform:translate(-3px,-3px);box-shadow:calc(var(--tab-offset) + 3px) calc(var(--tab-offset) + 3px) 0 var(--tab)}.paper-check:focus-visible{outline:2px solid var(--accent);outline-offset:6px}.paper-check:active{transform:translate(var(--tab-offset),var(--tab-offset));box-shadow:0 0 0 var(--tab)}.paper-check__note{display:grid;place-items:center;width:22px;height:22px;border:1px solid currentColor;border-radius:50%;font:700 13px/1 Arial,sans-serif;transition:background .2s ease,color .2s ease}.paper-check.is-done{background:var(--accent);color:var(--paper)}.paper-check.is-done .paper-check__note{background:var(--paper);color:var(--accent)}.specimen__caption{margin:22px 0 0;color:var(--muted);font-size:10px;letter-spacing:.12em;text-transform:uppercase}@media(max-width:700px){.showcase{padding:28px}.specimen{padding:32px 30px 38px}.specimen__rule{margin-bottom:44px}}@media(max-width:480px){.showcase{padding:18px}.specimen{min-height:0;padding:28px 24px 34px}.specimen h1{font-size:38px}.specimen__meta{font-size:9px}.paper-check{max-width:100%;padding-left:16px;padding-right:16px;gap:12px}}
document.querySelectorAll('.paper-check').forEach(button=>{button.addEventListener('click',()=>{const done=button.classList.toggle('is-done');button.setAttribute('aria-pressed',String(done));button.querySelector('.paper-check__label').textContent=done?'Reviewed':'Mark as reviewed';});});