The vitrine

Every atom the system ships, in every face it actually wears, with Vault and Daylight resolving side by side in one document. Nothing here is a screenshot and nothing here is a copy: each specimen is live markup painted by components/index.css and by nothing else. This page is the picture of the system before the consolidation pass, so that the pass has something to be compared against.

11 atoms 2 themes, one document 0 generators 0 screenshots

How to read this page

Two themes, one instant. The roles in tokens.css are declared on :root,[data-theme="dark"] and on [data-theme="light"], and the light selector carries no :root. So any element can be marked and its subtree takes that theme. The two columns below are the same markup resolving twice, at the same moment, with no toggle and no capture. A role given a value in only one theme renders anyway, and the only way to see it is to have the other one beside it.

The ground is the plate, not the page. In the product a control almost never stands on the page: it stands on the plate the feed and the detail shell draw. A specimen on the page ground is a specimen measured against a surface it is never seen on.

Every specimen stands inside body.app-case, and it has to. A large part of this system is scoped to that class: chip.css writes .app-case .chip-quiet, not .chip-quiet. A chip outside .app-case is not a chip, it is an unstyled anchor. That is worth knowing before anyone hands a component to a developer as a standalone thing.

Hover, press and focus are live, not drawn. Point at a specimen and the real rule fires; press Tab and the real ring appears. They are deliberately not reproduced as frozen classes, because a frozen copy of a state is a second place the value lives and it is the one that goes stale. What IS shown as a specimen is every state a class or an attribute can carry: selected, current, pressed, disabled, error.

button

Four emphases and four sizes are faces of one thing, not four things. The emphasis says how loud the action is and the size says how much room it has, and they are independent: every combination below is one decision taken twice, never a new component.

Vault, dark Daylight, light .btn .btn-primary .btn-mdthe commit. 122 uses, always block
.btn .btn-secondary .btn-mdthe most used face in the product, 444
.btn .btn-primary .btn-sm71
.btn .btn-secondary .btn-sm57
.btn .btn-ghost .btn-xsthe header pill, 105
.btn .btn-barea button that is a link, 72
.btn .btn-prompt .btn-lga well asking to be filled, 4
[disabled]the state a real attribute carries
[aria-disabled="true"]the same paint, still reachable by Tab

Rule. Emphasis and size are chosen separately. Anti-rule. Never two primaries in one field of view: primary means "this is the one", and a second one revokes the promise of the first.

iconbtn

Six faces, and every one of them is an answer to the surface it stands on: a band, a card, a photograph, a row. That is why they cannot be reduced to one, and why they are still one component: the job is identical and only the ground changes.

Vault, dark Daylight, light .icon-btn36px, the header default
.icon-btn-bareno box at all, 44px tap area by margin
.icon-btn-bare[aria-pressed]saved. The state is the attribute
.icon-btn-tilea 10px box, not a pill
.icon-btn-tile[data-fav][aria-pressed]brass, and brass only. Not green
.icon-btn-lift28px, rises 2px on hover
.icon-btn-small24px. Two pseudo-elements draw the cross and the letter inside is the grey tree's
.bal-add / .bal-swap32px, the wallet strip. Desktop only
.icon-btn-photothe only face whose ink and line are not tokens of the theme but of the photograph. Identical in both columns, and correctly so

Rule. An icon button always carries an aria-label: it has no text, so without one it is a control with no name. Anti-rule. Never an icon button for an action a person has not met before. An icon is a reminder, not an explanation.

chip

The rail, the nav, the amount and the quiet chip are one box under four scopes. Selection is the same brass tint every time, and it is a class (.sel) or an ancestor attribute ([aria-current="page"]), never a second component.

Vault, dark Daylight, light .chip .chip-quietthe filter strip. 38px, pill [aria-current="page"] .chip-quietcurrent. The ancestor decides .chip .chip-navthe category band. 10px radius, an icon [aria-current="page"] .chip-navcurrent. Brass ink, brass edge, the halo .chip .chip-railthe chart range. 26px, no border, no ground
.chip .chip-amountdeposit. The only chip with a ground of its own
.chip .chip-lanea pill on mobile, a full-width row from 900px. It is the chip that carries the count

Rule. A chip is a filter or a jump, and its selected face is always the same brass tint. Anti-rule. A chip is never a commit. If pressing it changes money or state, it is a button.

oddsbar

A track and a fill. The fill's width is a datum and that is why it is on the element: it is the one thing on this page the stylesheet is not allowed to decide.

This is the first place the card form has ever existed as markup. The detail form, .ed-oddsbar, ships in the HTML of nine screens. The card form, .oddsbar with its labels, ships in none: it is built by a page script at run time, as a string, on 105 screens. Its "213 uses" in the inventory were counted by a regular expression that read inside that string, which is a reading to correct rather than trust.

Vault, dark Daylight, light .ed-oddsbarthe detail screen. 8px track, inset shade
.oddsbarthe card form, with labels. 4px track
YES 38%NO 62%
YES 38%NO 62%
.oddsbarat 6%, the edge case. A fill this thin still has to read as YES
YES 6%NO 94%
YES 6%NO 94%

Rule. Green is the YES share and red is the remainder, always in that order, because the number written beside it is the YES number. Anti-rule. The bar never carries a brand colour: green and red here are outcome semantics, and brass would say the house has an opinion.

input

One field, one label and the currency mark beside it. The face is the class now: .amount-input is the sheet field, .amount-bet is the number a person is about to commit, and .addr is a value you only check.

And this page is what found the defect that fixed, on its first render. Until 2026-08-08 every rule in that file was scoped to a CONTAINER, so the first row of this section rendered white, with black text, inside the dark theme: no rule set the field's ground or its ink outside a dialog, and a User Agent has one idea of a text field. A missing value is a value. It never appeared on a screen, because on every one of them the field stands inside a dialog or a bet panel; it appeared here, which is the whole reason a stand shows an atom on its own.

Vault, dark Daylight, light .amount-inputthe sheet face, and it needs no container since 2026-08-08: this is the markup the product ships, a number field with the currency mark beside it rather than inside the value
Amount$
Amount$
.amount-input.amount-betthe trader field: 30px display, a rule under it, no box. It is a class rather than four ancestors since 2026-08-08; what the panel still decides is the width it takes of the row

not rendered below 760px, exactly as on the detail screen: the dock stands there instead

Amount$92.00 cash
$

not rendered below 760px, exactly as on the detail screen: the dock stands there instead

Amount$92.00 cash
$
[disabled]the same field while a deposit is pending

not rendered below 760px, exactly as on the detail screen: the dock stands there instead

Amount
$

not rendered below 760px, exactly as on the detail screen: the dock stands there instead

Amount
$

A third face exists and it is on the component's own page rather than here, because a shelf shows a component and this one has three: .amount-input.addr, the wallet address, mono and ellipsised and never wrapping. It is a <span>, because it is a value you check rather than one you type. Until 2026-08-08 it could not have been shown here at all, and neither could the two above: every rule was scoped to a dialog or a bet row, so this atom had no face of its own, only faces its containers lent it. That sentence stood on this page as a finding for a day before anybody acted on it.

Rule. A field always carries a label element, never a placeholder standing in for one: a placeholder disappears the moment a person types, which is exactly when they need to know what they are typing. Anti-rule. Never a field with no visible focus edge. Focus here is a border colour and a glow, and both have a value in both themes.

yesno

The two halves state one market's two sides and cannot exist apart. This is the control the product is named after, and it wears three boxes: the card pair, the compact pair in a multi-outcome list, and the trader pick in the bet panel and its mobile dock.

Vault, dark Daylight, light .yesnothe card pair. 44px floor, links wrapping buttons .yesno.compactthe multi-outcome row, inside .opt-list
Donald Trump22%
Donald Trump22%
.yesno.compact button.selchosen: the tint becomes the colour
Donald Trump22%
Donald Trump22%
.yesno-pick .bp-sidethe desktop bet panel. Unselected is neutral on purpose
.yesno-pick-barthe mobile dock. Below 760 only, and it is a different control

not rendered from 760px up, exactly as on a screen: the dock is the panel's pair below 760 and the panel replaces it above

not rendered from 760px up, exactly as on a screen: the dock is the panel's pair below 760 and the panel replaces it above

THE DEFECT: NO written firstidentical classes, order reversed. The rule is :first-of-type and :last-of-type, so the position paints the colour and the WORD does not. Do not copy this row. 81 readings depend on the order

Rule. Green is YES and red is NO, everywhere, and neither colour is ever borrowed for anything else in this system. Anti-rule. The pair never appears with one half missing. A market with one side offered is not a market, it is an advert.

toast

A sentence, a mark and a way out. It holds an icon button, which is why index.css files it as a molecule, and it is still an atom: nothing inside it is a part a person would name.

Vault, dark Daylight, light .toastconfirmation. The mark is brass, not green
Bet placed
Bet placed
.toast.toast-errorthe failure. Louder edge, heavier ink, no red
We could not place your bet. Try again.
We could not place your bet. Try again.

Rule. A toast reports something that already happened. Anti-rule. Never a question and never a choice: a toast that has to be answered is a dialog, and it will be dismissed before it is read.

skeleton

A shape that stands where a thing will be. Four widths, a thumbnail and a button block, and they exist so the page does not jump when the content lands.

Vault, dark Daylight, light .sk-line .w80 / .w60 / .w40the widths are the ramp: 80, 70, 60, 40
.sk-thumb / .sk-btn56px square, 32px block
.card.skeletonthe loading card, exactly as event-feed-loading ships it

Rule. A skeleton has the shape of the thing it replaces, so the layout does not move when the content arrives. Anti-rule. Never a spinner in its place. A spinner says "wait" and says nothing about what is coming.

toggle

The switch. It is marked unmeasured in the inventory because it does not stand on any of the 41 anchor screens: it lives on the sort control and in settings. That is a statement about where it was measured, not a statement that it is empty.

Vault, dark Daylight, light [role=switch][aria-checked=false]off. The knob is muted ink
[aria-checked=true]on: brass, because on is a brand state and not an outcome
[aria-disabled=true]unavailable, in both positions

Rule. A switch takes effect the moment it is thrown, with no Save beside it. Anti-rule. Never a switch inside a form that has a submit button: there the control is a checkbox, because the decision is not final until the form is.

platehead

The brass-cornered head of a plate, written 2026-08-11 out of the two copies that were standing in dialog.css and hiw.css. It is an atom by the lockup's reading: it holds nothing from the system, and both of the wholes that hold it load at level 3, so it has to be able to lose a tie to either of them. The third host, the how-it-works page hero, is 922px wide and is on the component's own page, because a shelf column cannot show it without lying about its width. The fourth arrived the same day by backlog 109: the outcome head had this anatomy to the declaration and its own ground, wave opacity and glow, so it wears the face and says the skin, which is what turned this file from a face into an anatomy plus a default one.

Vault, dark Daylight, light .plate-head.sheet-heada sheet head, 225 placements. 24/20/20, and its title runs to 15ch
.plate-head.hiw-pagethe how-it-works page hero, 1 placement. The only host of the three that draws its own edge and corner, and the loudest heading in the system at --display-hiw

How It Works

You always know what you are doing, why, and what happens to your money. This is a promise, not a FAQ.

How It Works

You always know what you are doing, why, and what happens to your money. This is a promise, not a FAQ.

Rule. A face that more than one component wears is a file, and each wearer says only where it sits and how loud it is. Anti-rule. Never make two rules agree by editing one of them: six numbers were moved on the how-it-works copy on the morning of 2026-08-11 so that it would match the sheet head, and the result looked like a fix while it was the same duplication being paid for a fourth time.

What this page is not, yet

The molecules and the organisms are not here: trustbar, market, filters, catnav, bottomnav and the rest of level 2, then header, footer, card, dialog, betpanel and the shells at level 3. They follow in the same format.

Neither is the consolidation. Padding still stands at 17 values, rendered height at 29, border at 17, and one font size on these screens is 19.2px, which is 1.2em of something and the only value on the list nobody typed. This page is the picture taken before that pass, so the pass can be looked at rather than read as a diff.