Tokens
Every design token in @etched/monet/tokens.css. Components use semantic tokens only; apps change looks by setting these, after the file.
Each color is light-dark(light, dark), so color-scheme picks the mode. Light is the default. Set data-mode="dark" or data-mode="system" (the OS setting) on <html>, or on an element for its subtree; data-mode="light" sets light again. Popups in a portal follow <html>, or the element that their container names. Color samples show light, then dark.
Type
--et-font-sans"Sohne", "Sohne Fallback", ui-sans-serif, system-ui, sans-serif--et-weight-regular400Buch: everything except the cases below--et-weight-strong500Kräftig: headings, labels, selected states
Space, radius, motion
--et-space-0-52px--et-space-14px--et-space-1-56px--et-space-28px--et-space-2-510px--et-space-312px--et-space-416px--et-space-520px--et-space-624px--et-space-832px--et-space-1040px--et-space-1248px--et-radius-sm4px--et-radius-md6px--et-radius-lg8px--et-radius-xl12px--et-radius-full9999px--et-duration-fast120ms--et-duration-base160ms--et-easecubic-bezier(0.2, 0, 0, 1)--et-spin800msone turn of a busy spinner: Button, Toast, Switch--et-loader-spin2sone turn of Loader's spinner (Kumo)--et-loader-pulse1.5sone pass of Loader's growing arc and of the skeleton shimmer (Kumo)--et-meter-slide1.5sone pass of the moving bar in a Progress with no value (Monet)--et-duration-slide220mslarge panels that slide or resize: sheets, the sidebar (Orbit's --orbit-duration)
Surfaces
--et-canvas#fbfbfb#060605[canvas] page background (--bg); the sidebar: Etched's black drawer. Dark: near-black, so cards lift from it; the brand's drawer is #000--et-surface#fff#151412[base] cards, buttons, menus--et-elevated#f8f8f8#0a0908[elevated] raised panels, table stripes and group rows, read-only fields (--raised)--et-recessed#f2f2f2#11100e[recessed] wells, chips, segmented tracks (--chip)--et-tint#f5f5f5#2c2b29[tint] hover (--hover): lighter than fields and popups in dark--et-highlight#e5e5e5#393835highlighted option and menu rows (--chip-hover): a step above the popup in dark--et-segmentvar(--et-surface)#454340the chosen segment on a recessed track: segmented tabs, the slider's bar, a switch's knob when off. Dark: lighter than the track, as in Kumo--et-controlvar(--et-surface)#1e1d1b[control] field background. Dark: fields lift from the surface (Kumo)--et-popupvar(--et-surface)#252422menus, select lists, popovers, tooltips, hover cards, toasts. Dark: a step above the surface (Kumo's overlay)--et-overlay#0006#0009dialog backdrop--et-contrastvar(--et-text)[contrast] primary button, checked controls (Orbit's button.primary)--et-contrast-hover#3a3a3b#cdcac5--primary-hover: toward the canvas--et-line#e9e9e9#2c2b29[hairline] one line for panels, rows and dividers--et-scrollbar-thumbvar(--et-text-inactive)ScrollArea's thumb: Orbit's thin scrollbars (scrollbar-color: --inactive)--et-scrollbar-thumb-hovervar(--et-text-faint)Monet: one step stronger while pointed at or dragged
Text
--et-text#18181b#eae7e3[default]--et-text-strong#0a0a0a#f7f5f2[strong] Kumo neutral-950--et-text-subtle#737373#a8a199[subtle] help text, labels, placeholders (--muted): 4.7:1 on white; dark: Etched warm grey, 7.2:1--et-text-faint#a1a1a1#7d7568[placeholder] table headings (--faint): 2.6:1 on white, kept on purpose (Ryan, 2026-10-15); dark: Etched deep warm grey, 4:1--et-text-inactive#d4d4d4#4f4d48[inactive] disabled (--inactive)--et-text-inverse#fff#151412[inverse] on contrast--et-text-on-solid#fff#fffon a saturated fill (the danger fill, the solid tones): white in both modes (Kumo)--et-text-linkvar(--et-text)[link] ink like the text; the underline marks a link (Orbit, Kumo neutral)
Brand and focus
--et-brand#0b0b0b#eae7e3[brand] Orbit --accent, Kumo's focus ink: focus, single-selection marks (tab underline, the open row's bar), checked cards, beta badge. Ink in both modes: slate and gold are retired (Ryan, 2026-10-15; dark, 2026-10-27)--et-focusvar(--et-brand)[focus] 19.8:1 on white, 15:1 on the dark surface; the 2px offset keeps it visible on filled buttons--et-focus-width2px--et-focus-offset2px
Feedback
--et-info#193cb8#80b3fd--et-info-tintoklch(93.2% 0.032 255.6 / 0.45)oklch(45% 0.12 262 / 0.3)--et-success#006045#6cd79d--et-success-tintoklch(96.2% 0.043 156.7 / 0.57)oklch(45% 0.09 158 / 0.3)--et-warning#7f5401#eac25adark: OKLCH hue 88, off Etched gold's 64, so warnings do not read as brand gold--et-warning-tintrgb(255 172 0 / 0.16)oklch(50% 0.1 70 / 0.3)--et-danger#c10007#f75d59--et-danger-fillvar(--et-danger)#c92f30a destructive fill (Button, a step with an error) under white text: the ink in light; dark: a saturated red, 5.3:1 (Kumo)--et-danger-hovercolor-mix(in srgb, var(--et-danger-fill) 85%, light-dark(white, black))the fill on hover, toward the canvas like the primary hover; 6.9:1 in dark--et-danger-tintoklch(93.6% 0.032 17.7 / 0.42)oklch(45% 0.13 25 / 0.3)
Tones for pills and colored badges
--et-tone-neutral-ink#424242#d3d0cd--et-tone-neutral-fill#e0e0e0#32302d--et-tone-red-ink#682e2b#ffbfb8--et-tone-red-fill#fed2cd#4c221f--et-tone-orange-ink#623606#f9c59c--et-tone-orange-fill#fdd5b7#482707--et-tone-amber-ink#583d01#edcc95--et-tone-amber-fill#fcd89d#412c00--et-tone-olive-ink#3f4805#ccd99d--et-tone-olive-fill#dae4b7#2e3407--et-tone-green-ink#194f29#ace0b6--et-tone-green-fill#c3eac9#14391e--et-tone-teal-ink#004e44#95e3d3--et-tone-teal-fill#b3ecdf#003931--et-tone-cyan-ink#024b55#91e0ee--et-tone-cyan-fill#b0eaf4#01373f--et-tone-blue-ink#29416f#b9d2ff--et-tone-blue-fill#cddfff#1e3051--et-tone-purple-ink#503464#e1c3f9--et-tone-purple-fill#ead4fc#3a2649
Solid tones for colored badges, under white text
--et-tone-neutral-solidvar(--et-tone-neutral-ink)#636363--et-tone-red-solidvar(--et-tone-red-ink)#984743--et-tone-orange-solidvar(--et-tone-orange-ink)#8f520f--et-tone-green-solidvar(--et-tone-green-ink)#2b7440--et-tone-teal-solidvar(--et-tone-teal-ink)#007766--et-tone-blue-solidvar(--et-tone-blue-ink)#4061a2--et-tone-purple-solidvar(--et-tone-purple-ink)#765092
An ordinal green ramp for scores, stronger as the score grows
--et-ramp-ink#1b552c#b9eec2--et-ramp-1-fill#e8f9eb#17261a--et-ramp-2-fill#d0f0d5#17321e--et-ramp-3-fill#b9e7c1#163f21--et-ramp-4-fill#a2ddad#114c24
A custom hue
--et-tone-ink-lightness0.38--et-tone-ink-lightness-dark0.86--et-tone-ink-chroma0.064--et-tone-fill-lightness0.9--et-tone-fill-lightness-dark0.31--et-tone-fill-chroma0.048
Charts
--et-chart-1#155dfc#588efeblue (Orbit --chart-blue)--et-chart-2#ea6f2f#ff9463orange--et-chart-3#622cb5#7848d0violet--et-chart-4#4f9b3e#68b457green--et-chart-5#43b2e1#66cffesky--et-chart-6#008877#31a08eteal (Orbit --chart-teal, chroma up to 0.10)--et-chart-7#eda109#ffc167amber (Orbit --chart-amber, lightness down to 0.77)--et-chart-8#df5ba1#fb75bapink--et-chart-othervar(--et-text-subtle)"Other" and "Not specified" (Orbit --chart-stone)--et-chart-swatch10pxthe color square in a legend (Orbit)--et-calendar-day32pxa day in the calendar (Kumo)
Tooltips
--et-tooltip-bgvar(--et-popup)--et-tooltip-textvar(--et-text)--et-tooltip-max20remwith the viewport less 1rem, whichever is smaller
Elevation
--et-shadow-sm0 1px 2px light-dark(#0000000f, transparent)--et-ring#0000000d#ffffff1fthe visible edge of a floating layer, and of its arrow--et-shadow-ring0 0 0 1px var(--et-ring)its transparent outline draws in high contrast--et-shadow-md0 4px 16px light-dark(#00000024, #0000004d), var(--et-shadow-ring)--et-shadow-lg0 16px 48px light-dark(#00000033, transparent), 0 2px 6px light-dark(#0000000f, transparent), 0 4px 16px light-dark(transparent, #0000004d), var(--et-shadow-ring)--et-disabled-opacity0.5one value for every disabled control (Kumo)--et-loader-track-opacity0.1--et-z-overlay100popovers, menus and dialogs; later portals stack above earlier ones
Type roles
- Aa
--et-text-caption 12px--et-leading-caption16px- Aa
--et-text-body-sm 13px--et-leading-body-sm18px- Aa
--et-text-body 14px--et-leading-body20px--et-leading-prose22pxnotes, messages: one step looser than body- Aa
--et-text-heading-sm 16px--et-leading-heading-sm20px- Aa
--et-text-heading 18px--et-leading-heading24px- Aa
--et-text-title 24px--et-leading-title28px- Aa
--et-text-display 28px--et-leading-display30px
Controls
--et-control-sm28pxin tables, small buttons, pagination, segmented items. Orbit has two control heights only.--et-control-base36px--et-control-radiusvar(--et-radius-lg)controls, menus and panels--et-control-border-width1px--et-control-border#0a0a0a1a#ffffff1f[line] field borders (--control)--et-control-border-hovervar(--et-text-subtle)--et-control-readonlyvar(--et-elevated)read-only field fill: the value stays clear, but the field does not look editable. Keeps its edge; no hover.--et-popup-radiusvar(--et-radius-lg)select lists, menus, popovers--et-item-radiusvar(--et-radius-sm)small marks and inner items: checkboxes, options, menu rows, segments; 4 px inside an 8 px box with a 4 px inset--et-dialog-radiusvar(--et-radius-xl)--et-dialog-sm18remdialog widths (Kumo); sheets take them too--et-dialog-base24rem384 px, as shadcn/ui's sheet--et-dialog-lg32remthe default sheet: a record's details--et-dialog-xl48rem--et-scroll-fade24pxthe soft edge where a scrolling dialog or sheet body cuts its content (Kumo LayerDialog)--et-tooltip-radiusvar(--et-radius-md)Kumo--et-card-radiusvar(--et-radius-lg)empty states and cards: panels--et-choice-size16pxcheckbox and radio box (Kumo)--et-kbd-size20pxa key's height and minimum width (shadcn Kbd)--et-switch-sm16pxswitch heights; the track is twice as wide and the thumb 2 px inside it (Kumo 32 x 16, 36 x 18, 40 x 20)--et-switch-base18px--et-switch-lg20px--et-score-min28pxa score shown as a box (Orbit's .conviction-value)--et-score-trigger-min52pxa score box that opens a list (Orbit's .conviction-input)--et-touch-row44pxoption and menu rows on coarse pointers--et-scrollbar10pxScrollArea's track: an 8 px thumb with 1 px around it (shadcn's scroll-area)--et-nav-panel-max400pxNavigationMenu's widest panel (Base UI's navigation menu)--et-row-marker3pxthe ink bar on a table's open row (Orbit)--et-loader-base24pxspinner sizes (Kumo); sm uses --et-icon-base--et-loader-lg32px--et-step-marker24pxthe step number circle (Orbit's .step-number)--et-meter-height6pxmeter and progress bars (Orbit's outreach bars)--et-meter-compact-height4pxa meter without a label, in a table cell (Orbit's warm-path strength)--et-slider-thumb16pxthe slider thumb's width (Kumo w-4)--et-slider-gripcolor-mix(in srgb, var(--et-contrast) 25%, transparent)the line on the slider thumb (Kumo contrast/25)--et-avatar-xs22pxavatars and their initials (Orbit 10/10/11/18): in person pills--et-avatar-xs-text10px--et-avatar-sm28pxrows, lists, sidebar--et-avatar-sm-text10px--et-avatar-base36px--et-avatar-base-text11px--et-avatar-lg56pxprofiles--et-avatar-lg-text18px--et-icon-xs10pxthe remove mark in a chip (Kumo's tag input)--et-attachment-max20remthe widest attachment chip; a longer file name ends in an ellipsis (Monet)--et-bubble-radiusvar(--et-radius-xl)a message bubble (shadcn's bubble; Monet)--et-field-label-width280pxthe label column of a field with its label beside the control (Orbit's settings rows: minmax(220px, 280px))--et-field-control-min240pxa responsive field puts its label on top when the control would be narrower than this (Monet)--et-toolbar-input10rema toolbar's search field shrinks to this before the toolbar wraps (Monet)--et-icon-sm14px--et-icon-base16px--et-icon-lg20pxthe command palette's search icon (Orbit)--et-palette-width40remthe command palette dialog (Orbit's candidate search, 640 px)--et-palette-listmin(360px, calc(100dvh - 240px))the command palette's fixed list height (Orbit's candidate search)--et-palette-list-min80px--et-palette-row62pxa palette row: a label and a description line
App shell
--et-sidebar-width224px--orbit-width; also the drawer on phones--et-sidebar-width-collapsed72pxthe icon rail--et-sidebar-header64px.hiring-brand--et-sidebar-icon18pxnav icons--et-measure-prose72chlongest line of prose, such as a page description (Orbit --measure-prose)