← all tools

Component worklist

21 components · 0 triaged · last saved 2026-06-24 09:50 UTC

A shared worklist for working through the components together. Set a status and leave your notes on each one; I read this file and reply in Claude's notes so we both have the same context next time. Edits save to component-notes.json. Use the gallery link to see a component live across teardown × framework.

about-media daisyui · openprops · pico · shoelace view in gallery ↗
One about block: a heading, a body paragraph, and a supporting image with an optional accessible label. SINGLE composite (not looped) — the section renders one block, so the component consumes the ctx vars directly rather than a loop item. The text+image LAYOUT and the image TREATMENT (frame / shape / shadow) are wher…

Status

Your notes

accordion-item daisyui · openprops · pico · shoelace view in gallery ↗
One FAQ disclosure: a question summary that expands to its answer. Native <details>/<summary>, no JS. Framework-agnostic CONTRACT; each Library constructs the disclosure differently (flush rows, bordered boxes, filled panels, minimal native).

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

W2 done: the answer body now uses the main paragraph font (var(--font-body)) and the real text colour (--text-on-page / --text-on-alt) instead of a faint grey --text-muted. Verified on bluelotus — the answer now renders in PT Serif (its real body font) at full black.
button daisyui · openprops · pico · shoelace view in gallery ↗

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

Done in W1. Buttons keep the brand fill where it contrasts the surface, but on any surface where the brand would vanish I shift it (lighten on dark / darken on light) to a ~3:1 contrast floor, and every hover now has a guaranteed minimum perceptible change (Δlum ≥ .10) pushed toward the button text — 2250 went .06→.26, addictive .14. WCAG: 2.x has no explicit hover-contrast rule; 1.4.11 wants 3:1 for UI state/boundary, which the floor targets. All CTA components (form submit, pricing, cta-band) inherit this automatically.
contact-form daisyui · openprops · pico · shoelace view in gallery ↗
One enquiry form: a heading, a name input, an email input, a message textarea, and a submit button (shared .btn .btn--primary). SINGLE — there is no loop item; the section renders exactly one form. The three fields (name, email, message) are STATIC markup in each implementation; only the heading and submit label are d…

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

W1: submit is now right-aligned and tied to the main .btn--primary, so it behaves exactly like the hero/nav buttons (incl. per-surface hover) — the Divi-vs-Gravity-Forms split shouldn’t recur. STILL TO DO (W3, next): the dark-surface field invisibility — Shoelace fill + Pico underline; I’ll keep the Pico underline distinct from the focus colour. W3 done: on a dark section the Shoelace field borders and Pico underline now use a visible light hairline (rgba(255,255,255,.34)), kept distinct from the brand focus colour. Verified in the gallery dark column (screenshot). Filled libs (OpenProps/DaisyUI) already show a light field on dark. Message textarea shortened: rows 5→3 + min-height 7rem→4rem across all 4 libs, so it reads more like a comment line than a giant box (matches the dark example you flagged). Still vertically resizable by the user.
cta-band daisyui · openprops · pico · shoelace view in gallery ↗
One centred call-to-action band: a heading, an optional body line, and up to two CTAs (primary + secondary). SINGLE — there is no loop item; the section renders exactly one band. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace' construction lives in the implementa…

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

Done via W1 — the primary button now has a contrast floor against the band it sits on, so it won’t disappear on a dark/emphasis section (absoluteit was the failing case; beechworth already worked). Worth an eyeball in the showcase.
dish-card daisyui · openprops · pico · shoelace view in gallery ↗
One menu / dish card in a grid: an optional image (a token-styled labelled placeholder when empty), a name, a short description, and a price. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace / that's DaisyUI' construction lives in the implementation, never here).

Status

2026-06-24 09:49 UTC

Your notes

feature-card daisyui · openprops · pico · shoelace view in gallery ↗
One feature / service card in a landing-page grid: an optional icon (emoji or short glyph), a title, a short body, and an optional link that makes the whole card clickable. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace / that's DaisyUI' construction lives in the…

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

W2 done: the small heading is bumped a step (--type-h4→--type-h3 size) and to a bolder weight (--type-weight-h2) for a clearer heading↔body delta; body text uses a readable colour. The faint ‘Feature’/linework on cakewallet/openprops/daisyui improves with this + the softened --text-muted. Dark elevation: a dark rgba(0,0,0) drop shadow is invisible on a dark surface, so on dark contexts the shadow scale now swaps to a soft LIGHT glow (inverse drop shadow) so cards lift the same way the light version does. Also bumped the dark hairline slightly (.16→.22) so the card edge reads. On the accent-border question: see chat — recommend keeping the card border NEUTRAL (accent stays meaningful on the icon pill + featured/action cards), with the glow doing the lift; a subtle brand-tinted hairline is available if you want a whisper of brand.
footer daisyui · openprops · pico · shoelace view in gallery ↗
The site footer bar: a business name + tagline block, an inline list of legal/utility links, and a copyright line with the current year. SINGLE — one block per section, not looped (the links list IS looped internally). This is the framework-agnostic CONTRACT — each Library implements the footer's construction differen…

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

Answer to your question: footers ALREADY default to var(--font-body) (set on .section-footer-v1) — so they DO match the paragraph body font. The reason they look the same is the body-font capture: ~47% of teardowns fall back to Inter. That’s W5 (improving googleFontFor + flagging low-confidence). The only heading-font bits left in the footer are the brand NAME and the daisyUI CTA pill, which is correct.
gallery-item daisyui · openprops · pico · shoelace view in gallery ↗
One gallery tile in a landing-page image grid: an image and an optional caption. The image slot is optional — when empty the tile renders a token-styled labelled placeholder box, never a broken or empty img. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace / that's…

Status

Your notes

hero-media daisyui · openprops · pico · shoelace view in gallery ↗
One above-the-fold hero: a text column (eyebrow, headline, subheading, up to two CTAs) beside a media frame (image or labelled placeholder). SINGLE — there is no loop item; the section renders exactly one hero. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace' cons…

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

W3 done (border): the Pico image frame now uses a visible light hairline on dark sections (was a currentColor-mix that vanished). The FONT half of your note — body fonts so often identical — is W5 next (improving the Inter catch-all in googleFontFor + a low-confidence flag). W5 (font): you were right — ~47% were defaulting to Inter because googleFontFor mapped any unrecognised face to it. I widened the alias map (DIN→Archivo, Söhne/Switzer→Inter deliberately, Canela/Ogg→Playfair, Clash→Space Grotesk, etc.) and added grotesk routing, and added a font_confidence flag: 23/63 are now flagged ‘low’ (font fell to the Inter default / wasn’t captured). The gallery shows a ‘font?’ chip for those, so a defaulted Inter is now distinguishable from a genuine one. Re-mapped from the stored *_font_id (no re-capture).
logo-item daisyui · openprops · pico · shoelace view in gallery ↗
One logo / publication cell in a 'featured in' band. The captured shape carries no image asset, so the cell renders the name as a token-styled WORDMARK placeholder (never a broken or empty img); when a link is present the whole cell becomes a hover-responsive link. This is the framework-agnostic CONTRACT — each Librar…

Status

Your notes

map-hours daisyui · openprops · pico · shoelace view in gallery ↗
A two-part location block: a token-styled MAP PLACEHOLDER (a labelled box, no real embed) paired with an OPENING HOURS list. SINGLE — one block per section, not looped (the hours list IS looped internally). This is the framework-agnostic CONTRACT — each Library constructs the map frame and the hours table differently …

Status

Your notes

mobile-quickbar daisyui · openprops · pico · shoelace view in gallery ↗
A sticky mobile-only bottom action bar: a tap-to-call link and a quote button. SINGLE — there is no loop item; the component IS the bar and renders exactly one call link + one CTA. This is the framework-agnostic CONTRACT — each Library constructs the bar differently (the 'that's Shoelace' construction lives in the imp…

Status

Your notes

nav-bar daisyui · openprops · pico · shoelace view in gallery ↗
The whole chrome navigation bar: a business name / brand, a set of nav links, and an optional CTA, with a CSS-only mobile burger. SINGLE (not looped) — the component IS the bar and iterates its links internally. This is the framework-agnostic CONTRACT — each Library constructs the bar differently (the 'that's Shoelace…

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

W4 done (all 4 libraries): the hamburger now animates its three bars into an X on open (pure CSS :checked transform, no JS). Burgers are always transparent now — removed the DaisyUI border + hover fill and the OpenProps hover/pill background. And the Shoelace nav is now a rounded strip that floats on the page (page-coloured rounded card + soft shadow + margin, dropping the full-width hairline chrome). Verified at mobile width: clean transparent X + open menu.
notice-bar daisyui · openprops · pico · shoelace view in gallery ↗
One thin full-width announcement strip: a single line of text and an OPTIONAL action (a hover-underline link or the shared button). SINGLE — there is no loop item; the section renders exactly one strip. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace' construction…

Status

Your notes

pricing-card daisyui · openprops · pico · shoelace view in gallery ↗
One pricing / package card: a name, a price, a feature list, an optional note, an optional CTA, and a most-popular flag. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace' construction lives in the implementation, never here).

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

Done via W1 — pricing CTAs already use .btn--primary, so the dark-safe per-surface fills + min hover roll straight through. The Shoelace ‘dark button on dark bg’ (2250) is fixed by the per-surface contrast floor. Follow-up fix: the W1 contrast floor was computed against each teardown’s OWN surfaces, but the gallery dark column / dark-theme lead REMAP --bg-page to the dark inverse AFTER that — so an on-page button (dark-safe for a light page, e.g. 2250 near-black) was still rendering on the now-dark card and vanishing. Fixed: the dark remap now also swaps the page/alt button tokens to the dark-safe --btn-*-on-inverse. Verified 2250 (#69696b) + absoluteit (#636875) ‘See the menu’ visible on dark.
service-card daisyui · openprops · pico · shoelace view in gallery ↗
One service / offering card in a landing-page grid: an optional icon glyph (or a labelled placeholder when absent), a name, a short description, an optional price line, and an optional link to enquire / book. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace / that'…

Status

Your notes

stat daisyui · openprops · pico · shoelace view in gallery ↗
One stat tile in a 'by the numbers' band: a big number (value), a label naming what it counts, and an optional supporting line (desc). This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace / that's DaisyUI' construction lives in the implementation, never here). This com…

Status

Your notes

step-item daisyui · openprops · pico · shoelace view in gallery ↗
One numbered process step: a derived order number, a title, and an optional body. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace' construction lives in the implementation, never here). The step number is derived from order by the section, never authored into the …

Status

2026-06-24 09:49 UTC

Your notes

Claude's notes

W2 done (legibility): step body now uses --font-body + the real --text-on-page colour (was the faint --text-muted, which I also softened globally 0.42→0.68). The ‘feels the same / not captured as serif’ part is the body-font capture issue — that’s W5 next (cutting the Inter catch-all + a low-confidence flag); fonts like PT Serif/Lora now come through where captured. W5: the body-font sameness is now visible via the ‘font?’ flag (23/63 low-confidence) and reduced via the widened mapping. Where a real serif was captured (e.g. PT Serif/Lora) it now comes through; where the site used a paid/system face we map to the nearest Google + flag it.
team-member-card daisyui · openprops · pico · shoelace view in gallery ↗
One team / staff member card in a landing-page grid: an optional photo (with a token-styled labelled placeholder when empty), a name, a role and a short bio. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace / that's DaisyUI' construction lives in the implementation…

Status

Your notes

testimonial-card daisyui · openprops · pico · shoelace view in gallery ↗
One testimonial block: a customer quote and an optional attribution. SINGLE (not looped) — the section renders one block, so the component consumes the ctx vars directly rather than a loop item. This is the framework-agnostic CONTRACT — each Library implements it differently (the 'that's Shoelace / that's DaisyUI' con…

Status

Your notes

Claude's notes

Done: the quote is now bounded by typographic quotation marks (curly “ ” via CSS, so they hug whatever copy comes through — no double-quotes if the data already has them since our fixtures don’t), and the quote text is reduced one step across all 4 libraries (Shoelace/OpenProps/DaisyUI h3→h4, Pico h4→h5). Verified on the Helena testimonial.
Saves all statuses + notes to component-notes.json