Documentation
Browse documentation

DocumentationReference

Style properties and tokens

Every property that style.ocss accepts in a PlayerVox OverCrow widget, with its values and its initial value, then the design tokens and the icons. The style explains selectors, layout, tokens and animations; this page is the list.

OCSStemplates/chart/style.ocss
.value {
  font-size: var(--font-size-value);
  font-variant-numeric: tabular-nums;
}

Anything that is not on this page is refused when the widget is checked: a property, a keyword or a unit outside the lists below is an error, with the closest name as a suggestion.

How to read a property

  • Value uses the notations of values: <px>, <percent>, <color>… A | separates alternatives, ? marks an optional part.
  • Initial is the value of an element that no rule styles.
  • Inherited properties take the value of the parent when no rule sets them: set them on a container.
  • Animatable properties can appear in a transition and in @keyframes.

Properties

Layout

PropertyValueInitialInheritedAnimatable
displayflex | grid | noneflexnono
positionrelative | absoluterelativenono
top<px> | <percent> | auto, negative allowedautonono
right<px> | <percent> | auto, negative allowedautonono
bottom<px> | <percent> | auto, negative allowedautonono
left<px> | <percent> | auto, negative allowedautonono
flex-directionrow | column | row-reverse | column-reverserownono
flex-wrapnowrap | wrapnowrapnono
flex-grownumber 0 to 10000nono
flex-shrinknumber 0 to 10001nono
flex-basis<px> | <percent> | autoautonono
justify-contentstart | end | center | stretch | space-between | space-around | space-evenlystartnono
align-itemsstart | end | center | baseline | stretchstretchnono
align-selfauto | start | end | center | baseline | stretchautonono
align-contentstart | end | center | stretch | space-between | space-around | space-evenlystretchnono
justify-itemsstart | end | center | stretchstretchnono
justify-selfauto | start | end | center | stretchautonono
gap1–2 × (<px> | <percent>)0nono
row-gap<px> | <percent>0nono
column-gap<px> | <percent>0nono
grid-template-columnsnone | list ≤ 24 of <track>, or repeat(<integer>, <track>)nonenono
grid-template-rowsnone | list ≤ 24 of <track>, or repeat(<integer>, <track>)nonenono
grid-auto-flowrow | columnrownono
grid-auto-columns<track>: <px> | <percent> | <fr> | auto | min-content | max-content | minmax(<track>, <track>)autonono
grid-auto-rows<track>: <px> | <percent> | <fr> | auto | min-content | max-content | minmax(<track>, <track>)autonono
grid-columnauto | <integer> | span <integer> | <start> / <end>, lines 1 to 24autonono
grid-rowauto | <integer> | span <integer> | <start> / <end>, lines 1 to 24autonono

Box

PropertyValueInitialInheritedAnimatable
width<px> | <percent> | autoautonono
height<px> | <percent> | autoautonono
min-width<px> | <percent> | autoautonono
min-height<px> | <percent> | autoautonono
max-width<px> | <percent> | nonenonenono
max-height<px> | <percent> | nonenonenono
aspect-rationumber 0.01 to 100autonono
margin1–4 × (<px> | <percent> | auto), negative allowed0nono
margin-top<px> | <percent> | auto, negative allowed0nono
margin-right<px> | <percent> | auto, negative allowed0nono
margin-bottom<px> | <percent> | auto, negative allowed0nono
margin-left<px> | <percent> | auto, negative allowed0nono
padding1–4 × (<px> | <percent>)0nono
padding-top<px> | <percent>0nono
padding-right<px> | <percent>0nono
padding-bottom<px> | <percent>0nono
padding-left<px> | <percent>0nono
overflowvisible | hiddenvisiblenono

Appearance

PropertyValueInitialInheritedAnimatable
background-color<color>transparentnoyes
background<color> | linear-gradient(<angle>?, <color> <percent>?, …), stops ≤ 8transparentnono
border<px> (solid | none)? <color>?0 nonenono
border-top<px> (solid | none)? <color>?0 nonenono
border-right<px> (solid | none)? <color>?0 nonenono
border-bottom<px> (solid | none)? <color>?0 nonenono
border-left<px> (solid | none)? <color>?0 nonenono
border-width1–4 × (<px>)0nono
border-stylesolid | nonenonenono
border-color<color>currentColornoyes
border-radius1–4 × (<px> | <percent>)0nono
box-shadownone | var(--shadow-…) alone | list ≤ 2 of inset? <px> <px> <px>? <px>? <color>nonenono
opacitynumber 0 to 11noyes
visibilityvisible | hiddenvisibleyesno
object-fitcontain | cover | fill | nonecontainnono

Text

PropertyValueInitialInheritedAnimatable
color<color>var(--color-text)yesyes
font-familyui | mono | display, or a font tokenuiyesno
font-size<px> within 6 px to 96 px, or a size tokenvar(--font-size-body)yesno
font-weight400 | 500 | 600 | 700 | normal | bold400yesno
font-stylenormal | italicnormalyesno
font-variant-numericnormal | tabular-numsnormalyesno
line-heightnumber 0.5 to 4 (× font size) | <px>1.3yesno
letter-spacing<px>, negative allowed0yesno
text-alignstart | center | endstartyesno
text-decorationnone | underline | line-throughnonenono
text-transformnone | uppercase | lowercase | capitalizenoneyesno
white-spacenormal | nowrap | pre-wrapnormalyesno
vertical-alignbaseline | middlebaselinenono
text-overflowclip | ellipsis | marqueeclipnono
line-clampinteger 0 to 640nono
overflow-wrapnormal | anywherenormalyesno

Motion

PropertyValueInitialInheritedAnimatable
transformnone | up to 4 of translate(<length>, <length>) with <px> or <percent>, translateX(), translateY(), scale(<number>{1,2}) 0 to 8, rotate(<angle>)nonenoyes
transform-origin1–2 × (left | center | right | top | bottom | <percent> | <px>)centernono
transitionnone | list ≤ 8 of <animatable-property> <time> <easing>? <time>?nonenono
animationnone | list ≤ 8 of <keyframes-name> <time> <easing>? <time>? (<integer> | infinite)? <direction>? <fill-mode>?, integer 1 to 10000nonenono

Interaction

PropertyValueInitialInheritedAnimatable
cursordefault | pointer | text | not-allowed | grab | grabbingdefaultyesno
pointer-eventsauto | noneautonono

Values

SyntaxMeaning
<px>12px; 0 may omit the unit. Decimal numbers, no exponent.
<percent>50% of the containing block, as in CSS; at most 1000 either way.
<fr>1fr, grid tracks only; from 0 to 1000.
<time>120ms or 0.12s, from 0 to 300000 ms.
<angle>4deg or 0.5turn, at most 3600 degrees either way.
<color>#rgb, #rgba, #rrggbb, #rrggbbaa, rgb(r g b), rgb(r g b / a), transparent, currentColor, or a colour token. No named colours.
var(--token)Design-system token of the expected type, as a whole value or a component of a composite value. No fallback argument; widgets cannot declare custom properties.
<easing>linear, ease, ease-in, ease-out, ease-in-out, steps(<integer 1..=MAX_EASING_STEPS>).
<direction>normal, reverse, alternate.
<fill-mode>none, forwards, backwards, both.

Design tokens

A token is written var(--name) where a value of its type is expected. Colour and shadow tokens have a value per theme; the others are the same in both.

OCSStemplates/list/style.ocss
.summary {
  font-size: var(--font-size-caption);
  color: var(--color-text-secondary);
}

Colours

TokenDarkLightMeaning
--color-accent#a3e635#4d7c0fBrand accent: primary actions, checked state.
--color-accent-hover#b5f153#3f6212Accent under the pointer.
--color-accent-soft#a3e6351c#4d7c0f1fAccent wash behind selected content.
--color-on-accent#09090b#ffffffText and icons drawn on the accent and its hover state.
--color-surface-panel#111114ee#fafafaeeWidget panel background, drawn by the host behind the content.
--color-surface-raised#1e1e22e0#f4f4f5ebRaised surface inside the panel.
--color-surface-hover#28282deb#e4e4e7f0Surface under the pointer.
--color-surface-field#0f0f12#ffffffText input background.
--color-surface-popover#18181c#ffffffPopover and drop-down background.
--color-border#ffffff18#0000001aDefault border.
--color-border-strong#ffffff2a#0000002eEmphasized border and separator.
--color-text#f7f7f8#18181bPrimary text.
--color-text-secondary#d4d4d8#3f3f46Secondary text.
--color-text-muted#a1a1aa#52525bCaptions and metadata.
--color-text-subtle#71717a#71717aPlaceholders and disabled text.
--color-danger#fb7185#e11d48Errors and destructive actions.
--color-danger-soft#fb71851a#e11d481aDanger wash behind destructive confirmations and errors.
--color-warning#fbbf24#b45309Warnings.
--color-success#86efac#15803dSuccess and healthy states.

Lengths

TokenValueMeaning
--space-12pxSpacing step 1.
--space-24pxSpacing step 2.
--space-36pxSpacing step 3 (default item spacing).
--space-48pxSpacing step 4.
--space-512pxSpacing step 5.
--space-616pxSpacing step 6.
--radius-sm6pxSmall controls and images.
--radius-md9pxButtons.
--radius-lg10pxCards.
--radius-pill999pxPills and round buttons.
--control-height28pxStandard control height.
--icon-button-size22pxCompact icon button.

Font sizes

TokenValueMeaning
--font-size-caption10pxEyebrow and captions.
--font-size-small11pxMetadata.
--font-size-button13pxButton labels.
--font-size-body14pxBody text.
--font-size-title18pxSection titles.
--font-size-value22pxHeadline values (clock, FPS).

Font families

TokenValueMeaning
--font-uiuiNoto Sans UI, the interface face.
--font-monomonoNoto Sans Mono, for values.
--font-displaydisplaySpace Grotesk, for grades and scores.

Durations

TokenValueMeaning
--duration-fast120msState transitions.
--duration-medium240msPanels and popovers.

Shadows

TokenDarkLightMeaning
--shadow-panel0px 4px 16px 0px #000000660px 4px 16px 0px #0000001fShadow of the widget panel and of floating host surfaces.

Icons

The icon element and the rows of the options menu take the name of a Lucide icon, in its usual spelling: circle-check, rotate-ccw, chevron-down.

OCMLtemplates/list/view.ocml
          <icon name="x"/>

Lucide 1.34.0, 1777 icons.

Any other name is refused, and the SDK's IconName type lists them all, so a wrong name in the logic is a TypeScript error. Within API v1 the set may grow but never loses or renames an icon. PlayerVox OverCrow draws the icons itself: a widget ships no icon font.