Quick start
Load the stylesheet:
Add the base class and a value, in whatever units your data naturally comes in:
If your dataset's raw values aren't already on a −1..1 scale, set --tvv-scale once on a shared container to the largest magnitude in your data — every element underneath normalizes against it automatically, so the picture looks the same no matter what units the scores are in:
Try it
Pick one option from each of the three slots below (fill / edge / margin each occupy a single CSS background or pseudo-element, so only one per group can be active at a time), plus any free modifiers, and copy the resulting markup.
How it works
Slots (pick at most one per group)
| Slot | CSS used | Classes |
|---|---|---|
| Fill | background | tvv-wash, tvv-texture, tvv-corner |
| Edge | ::after | tvv-edge, tvv-center |
| Margin | ::before | tvv-gutter, tvv-dot |
An element only has one background, one ::before, and one ::after — that's a hard CSS limit, not a stylistic choice, so each slot can hold exactly one active class.
Free modifiers (combine with anything)
| Class | What it does |
|---|---|
tvv-glow | Inset box-shadow bleeding in from the side matching sign |
tvv-ink | Tiny opacity/lightness nudge to the text color itself |
tvv-weight | Shifts font-weight / variable-font wght axis |
tvv-shift | A few px of horizontal translation — works with no color at all |
tvv-radius | Asymmetric corner rounding, sign-dependent |
Scale invariance
Every effect is driven by --tvv-value divided by --tvv-scale, normalized to the −1..1 range before anything else happens. CSS can't inspect sibling elements to find a dataset's own range automatically, so --tvv-scale is the one number you supply — set it on a container, not per element. Scaling an entire dataset by a constant and updating --tvv-scale by the same factor reproduces an identical picture.
Accessibility
Color-coded methods (tvv-wash, tvv-gutter, tvv-corner, tvv-glow, tvv-ink) are invisible to some color-vision-deficient readers. Pair at least one position/shape-based method (tvv-edge, tvv-center, tvv-shift, tvv-dot, tvv-radius) with any color method so the meaning survives even if hue doesn't.
Reveal modes
Toggle a class on an ancestor (e.g. <body class="tvv-mode-subtle">) to globally scale intensity without touching individual elements: tvv-mode-off, tvv-mode-subtle (default), tvv-mode-explicit. There's also a built-in :hover boost for an on-demand reveal.