flex: 1 zeroes flexBasis, so inside a parent whose height is content-derived
(e.g. a Paper Modal content container) the card measured 0 and collapsed —
the frame never drew and overflow: hidden clipped the header/body. flexGrow
keeps flexBasis auto so the card fills a parent that has height to give.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Keeps changeset publish / npm publish from pushing the Electron and Expo
showcase apps (and the workspace root) to the registry — they're apps, not
consumable libraries.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update repository.url (and the desktop homepage) from github.com/dangerous-tac0s
to git.dngr.us/DangerousThings/dt-design-system across all packages, and add the
missing repository field to showcase-mobile. Reflects the move off GitHub.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The tick is the bottom+left borders of a 10x6 box, so its ink centroid is at
(3.86, 4.14) in box coords rather than the box centre (5, 3). Rotating -45deg
about the centre therefore drops the visible mass 1.61px below wherever the box
is placed — nobody had compensated for that, so at left:6/top:8 the glyph sat
low and left of centre with its long arm running into the bottom-right bevel
cut.
Offsets derived from that geometry rather than nudged by eye: the box centre
wants to sit at (12, 10.39) for the ink to land dead centre of the 24px box,
giving left:7 and top:7.4.
Verified at 7x zoom against a crosshair on the 24px box, checked, unchecked and
disabled.
It was controlled-only and passed no attributes through to the input, so a
<form> could not use it: no `name` reached the element, meaning the field never
submitted. Consumers were dropping to a bare native input to get a working
form, which is how an unstyled checkbox ended up on the address page.
Now controlled when `checked` is passed and uncontrolled otherwise, with
name/id/required/value and the rest of the native attributes forwarded.
The unchecked box was a 10%-opacity fill with no border and a 1px
drop-shadow — on a dark surface that reads as empty space, so on a page
of several checkboxes only the ticked one looked like a control at all.
Outline is an inset shadow rather than a border: clip-path cuts the
bevel out of the border box, which would lose a real border's corners.
Affects every input[type=checkbox] under the dt brand.
Revert with: git revert <this commit>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A generic `input {}` rule in a host app (padding, margin, border-radius)
leaks straight into the checkbox, which the DT rule never zeroed — so the
bevel rendered as a rounded, vertically offset slab.
Revert with: git revert <this commit>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The entire .card ruleset in bevels.css was scoped to [data-brand="dt"] —
layout, header bar, full-bleed body, and the .mode-* colour variables.
Classic-brand cards therefore got nothing but a badge border-radius:
- .card-title rendered as bare inherited text with no accent bar
- .card had position: static, so .dt-card-badge (position: absolute,
from an unscoped rule) anchored to <body> and parked in the page's
bottom-right corner instead of the card
- .card-body-flush images were not full-bleed
- LAB/BUNDLE cards lost their warning/other colour
Unscoped the structural rules and added a [data-brand="classic"] block
that swaps the (already degenerate, --bevel-* is 0) clip-paths for
border-radius, plus symmetric badge padding since there is no bevel to
clear. dt rendering is byte-identical — verified by screenshot.
Revert with: git revert <this commit>
Migrates the storefront's colourblind palettes into tokens, generated as
[data-cb] CSS blocks (dark mode only) for both brands. The storefront's
ΔE / contrast check now runs in the tokens build and fails on a bad
palette; it caught the deuteranopia error orange at 4.4:1 on classic's
navy, so that value is now #c86000.
Animation speed rides along: animations.css scales durations by
--motion-scale, and both data-motion="0" and the classic brand bypass
animation outright. Brand tokens carry an `animations` flag so React
Native forces motion to 0 for classic too.
DTWebThemeProvider and DTThemeProvider take colorVision and motionScale;
buildThemeFromBrand moves into the react-native package from the
showcase. DTSettingsPanel (react and react-native) renders theme,
animation speed and colour vision as controlled sections.
Changesets: onlyUpdatePeerDependentsWhenOutOfRange, so a minor on tokens
no longer majors react through its `*` peer range. Versions bumped:
tokens 0.4.0, web 0.6.0, react 2.2.0, react-native 0.5.0.
Design: docs/plans/2026-09-12-color-vision-and-settings-design.md
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
MikeFaith
marked the pull request as work in progress 2026-09-12 20:52:00 -07:00
react-native-svg draws a tall Svg progressively lower the taller it is (~3px at 1200dp,
~10px at 3800dp on a Pixel 7a) while a plain View lands exactly on its layout box, so the
three full-height SVG overlays slid down relative to the header on tall cards and opened a
black notch in the top-left corner. Straight edges and the progress strip are now
layout-driven Views (no measuring, no first-frame gap); only the two beveled bottom corners
stay SVG. The bottom-right corner is split into a background layer under the content and an
accent band over it so content is never painted over; pieces overlap 1dp to avoid seams.
No API change; classic (non-bevel) branch untouched. Verified on device at 60/1200/4000dp.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The modal collapsed when used with scroll view.
A generic `input {}` rule in a host app (padding, margin, border-radius) leaks straight into the checkbox, which the DT rule never zeroed — so the bevel rendered as a rounded, vertically offset slab. Revert with: git revert <this commit> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>The entire .card ruleset in bevels.css was scoped to [data-brand="dt"] — layout, header bar, full-bleed body, and the .mode-* colour variables. Classic-brand cards therefore got nothing but a badge border-radius: - .card-title rendered as bare inherited text with no accent bar - .card had position: static, so .dt-card-badge (position: absolute, from an unscoped rule) anchored to <body> and parked in the page's bottom-right corner instead of the card - .card-body-flush images were not full-bleed - LAB/BUNDLE cards lost their warning/other colour Unscoped the structural rules and added a [data-brand="classic"] block that swaps the (already degenerate, --bevel-* is 0) clip-paths for border-radius, plus symmetric badge padding since there is no bevel to clear. dt rendering is byte-identical — verified by screenshot. Revert with: git revert <this commit>View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.