- - - --interactive-surface-bg - - - - - - - + + + + One system, clear boundaries + Ecosystem ownership + + Each package remains useful on its own while owning one distinct + part of the interface contract. + + + + + Layout Style CSS + structure and geometry + + Responsive composition, spacing relationships, and page-level + layout. + - - - - --interactive-surface-fg - - - - - - - + + UI Style Kit CSS + visual paint and themes + Color, typography, borders, elevation, and theme expression. - - - - --interactive-surface-border-color - - - - - - - + + Interactive Surface CSS + interaction states + + Focus, hover, active, pressed, selected, busy, and disabled + behavior. + - - - - --interactive-surface-focus-ring-color - - - - - - - + + + + + + + Live semantic proof + Interaction state lab + + Use the controls, then inspect their native attributes. No + pseudo-class is faked. + + + + + + Action + + Run action + + <button> + + + + Toggle + + Notifications Off + + aria-pressed - - - - --accent-main + + + Current + + State lab + + aria-current="page" + + + + Selected + - - - + Resting - - - - - - - --accent-soft - - - + Selected - + + Resting view + + + Selected view + - - - - .my-control { --interactive-surface-bg:rgb(15 79 127); --interactive-surface-fg:rgb(244 251 255); - --interactive-surface-focus-ring-color:rgb(30 91 240); } - - - - - Import CSS - - - - Export CSS - - Editing Light theme token overrides. - - - - - Buttons and states - Hover, focus, active, pressed, and disabled are all handled by one class. - - Primary CTA - Secondary - - Data hook CTA - - Selected (.is-active) - Warning - Danger - Pressed (ARIA) - Size SM - Disabled - - - - - - Card surfaces - The same primitive works for card-like affordances with no extra runtime logic. - - - Reusable elevation - One class keeps hover, press, and focus behavior consistent across your system. - - - Theme-safe defaults - Fallback tokens keep controls usable even before full design-token rollout. - - - ARIA-aware state - Pressed style can come from semantic attributes instead of custom state classes. - - - Content-rich cards - Compose text, metadata, and icons while preserving a single interaction model. - - - - - - - Icon micro controls - Role-based icon colors can change by mode while keeping a consistent hit target. - - - - Li + + Loading + + Run loading proof - light-icon: var(--interactive-surface-light-icon-color) + aria-busy - - - Da + + + Disabled + + Unavailable action - dark-icon: var(--interactive-surface-dark-icon-color) + disabled - - - A11Y + + + Variant + + Primary variant - accessibility-icon: var(--interactive-surface-accessibility-icon-color) + .variant-primary - - - + + + + Level + + Elevated level 2 - icon-only keeps 44px minimum target + data-surface-level="2" - - - L + + + Icon + + + + - disabled + aria-disabled support + aria-label + icon-only - - - Accessibility highlights - - Side-by-side comparison: left inherits the full interaction/accessibility model; right is a - plain control baseline. - - - - With interactive-surface - - Focusable Action - - Pressed state - - - SET - - - - Focus ring is visible with :focus-visible fallback. - Pressed and disabled states map directly to ARIA attributes. - Reduced motion and forced colors are supported by default. - + + + + Built on browser semantics + Accessibility guidance + + + + Start with native controls + + Use buttons for actions and anchors for navigation so keyboard and + assistive technology behavior is preserved. + - - Plain controls baseline - - Focusable Action - Pressed state - SET - - - No unified hover/active model. - No tokenized theming contract. - Requires extra CSS to reach parity with contrast and motion handling. - + + Expose persistent state + + Pair visual treatment with aria-pressed, + aria-selected, aria-current, or + aria-busy. + + + + Keep focus reliable + + Disabled controls stay non-interactive, modal focus stays + contained, and closing restores the initiating control. + - - - Creative composition ideas - Use the same primitive for launcher bars, filters, and dashboard cards. - - - Command launcher - - - Open command palette - Ctrl+K - - + + + + Choose the right ownership boundary + Entry points + + + + Standalone preset + + Complete paint, geometry, and interaction behavior for a + framework-agnostic page. + + @import "interactive-surface-css/standalone-preset.css"; + + + State core + + Interaction mechanics only when a host design system already owns + presentation. + + @import "interactive-surface-css/state-core.css"; + + + Compatibility bundle + The established package entry point for current consumers. + @import "interactive-surface-css/interactive-surface.css"; - - Filter chip row - - All - Open - Blocked + + + + + + + Advanced configuration + Token tools + + Edit a value, import a small CSS override, or export the current + overrides for further testing. + + + + + + + Surface background + --interactive-surface-bg + rgb(255 255 255) + + Edit value + - - Playlist card - - Deep Work Mix - Use card-style controls for media, dashboards, or map markers. + + + + Focus ring + --interactive-surface-focus-ring-color + + rgb(30 91 240) + + Edit value + + + + Import token CSS + + + + Copy token CSS + + + Download token CSS + + - - - README and wiki links - - This section mirrors README content so GitHub Pages users can test the library and read docs without - switching pages. - - - - Wiki Home - Getting Started - Installation and Usage - API Reference - Token Reference - Accessibility - Testing and Quality - Publishing and Releases - FAQ - Roadmap - Contributing - Code of Conduct - Security Policy - - - - Loading README.md... - + + + + Reference + README reference + + The repository README renders here with an embedded fallback for + local and offline use. + + + README on GitHub + Accessibility wiki + Token reference + + + Preparing the embedded README reference… + - - - - - - Edit token - Updates are written to a page style override on submit. - - - - Token - - - - Color value - - - - - Apply Token - - Cancel - - - - - - + + + + + + + + Advanced token override + Edit token + + + Token name + + + + Token value + + + + + Apply token + + + Cancel token edit + + + + + - - - + +
+ Layout Style CSS + structure and geometry + + Responsive composition, spacing relationships, and page-level + layout. +
- - - --interactive-surface-fg - - - - - - - + + UI Style Kit CSS + visual paint and themes + Color, typography, borders, elevation, and theme expression. - - - - --interactive-surface-border-color - - - - - - - + + Interactive Surface CSS + interaction states + + Focus, hover, active, pressed, selected, busy, and disabled + behavior. + - - - - --interactive-surface-focus-ring-color - - - - - - - +
+ UI Style Kit CSS + visual paint and themes + Color, typography, borders, elevation, and theme expression.
- - - --interactive-surface-border-color - - - - - - - + + Interactive Surface CSS + interaction states + + Focus, hover, active, pressed, selected, busy, and disabled + behavior. + - - - - --interactive-surface-focus-ring-color - - - - - - - +
+ Interactive Surface CSS + interaction states + + Focus, hover, active, pressed, selected, busy, and disabled + behavior. +
- - - --accent-main + + + Current + + State lab + + aria-current="page" + + + + Selected + - - - + Resting - - - - - - - --accent-soft - - - + Selected - + + Resting view + + + Selected view + - - - - .my-control { --interactive-surface-bg:rgb(15 79 127); --interactive-surface-fg:rgb(244 251 255); - --interactive-surface-focus-ring-color:rgb(30 91 240); } - - - - - Import CSS - - - - Export CSS - - Editing Light theme token overrides. - - - - - Buttons and states - Hover, focus, active, pressed, and disabled are all handled by one class. - - Primary CTA - Secondary - - Data hook CTA - - Selected (.is-active) - Warning - Danger - Pressed (ARIA) - Size SM - Disabled - - - - - - Card surfaces - The same primitive works for card-like affordances with no extra runtime logic. - - - Reusable elevation - One class keeps hover, press, and focus behavior consistent across your system. - - - Theme-safe defaults - Fallback tokens keep controls usable even before full design-token rollout. - - - ARIA-aware state - Pressed style can come from semantic attributes instead of custom state classes. - - - Content-rich cards - Compose text, metadata, and icons while preserving a single interaction model. - - - - - - - Icon micro controls - Role-based icon colors can change by mode while keeping a consistent hit target. - - - - Li + + Loading + + Run loading proof - light-icon: var(--interactive-surface-light-icon-color) + aria-busy - - - Da + + + Disabled + + Unavailable action - dark-icon: var(--interactive-surface-dark-icon-color) + disabled - - - A11Y + + + Variant + + Primary variant - accessibility-icon: var(--interactive-surface-accessibility-icon-color) + .variant-primary - - - + + + + Level + + Elevated level 2 - icon-only keeps 44px minimum target + data-surface-level="2" - - - L + + + Icon + + + + - disabled + aria-disabled support + aria-label + icon-only - - - Accessibility highlights - - Side-by-side comparison: left inherits the full interaction/accessibility model; right is a - plain control baseline. - - - - With interactive-surface - - Focusable Action - - Pressed state - - - SET - - - - Focus ring is visible with :focus-visible fallback. - Pressed and disabled states map directly to ARIA attributes. - Reduced motion and forced colors are supported by default. - + + + + Built on browser semantics + Accessibility guidance + + + + Start with native controls + + Use buttons for actions and anchors for navigation so keyboard and + assistive technology behavior is preserved. + - - Plain controls baseline - - Focusable Action - Pressed state - SET - - - No unified hover/active model. - No tokenized theming contract. - Requires extra CSS to reach parity with contrast and motion handling. - + + Expose persistent state + + Pair visual treatment with aria-pressed, + aria-selected, aria-current, or + aria-busy. + + + + Keep focus reliable + + Disabled controls stay non-interactive, modal focus stays + contained, and closing restores the initiating control. + - - - Creative composition ideas - Use the same primitive for launcher bars, filters, and dashboard cards. - - - Command launcher - - - Open command palette - Ctrl+K - - + + + + Choose the right ownership boundary + Entry points + + + + Standalone preset + + Complete paint, geometry, and interaction behavior for a + framework-agnostic page. + + @import "interactive-surface-css/standalone-preset.css"; + + + State core + + Interaction mechanics only when a host design system already owns + presentation. + + @import "interactive-surface-css/state-core.css"; + + + Compatibility bundle + The established package entry point for current consumers. + @import "interactive-surface-css/interactive-surface.css"; - - Filter chip row - - All - Open - Blocked + + + + + + + Advanced configuration + Token tools + + Edit a value, import a small CSS override, or export the current + overrides for further testing. + + + + + + + Surface background + --interactive-surface-bg + rgb(255 255 255) + + Edit value + - - Playlist card - - Deep Work Mix - Use card-style controls for media, dashboards, or map markers. + + + + Focus ring + --interactive-surface-focus-ring-color + + rgb(30 91 240) + + Edit value + + + + Import token CSS + + + + Copy token CSS + + + Download token CSS + + - - - README and wiki links - - This section mirrors README content so GitHub Pages users can test the library and read docs without - switching pages. - - - - Wiki Home - Getting Started - Installation and Usage - API Reference - Token Reference - Accessibility - Testing and Quality - Publishing and Releases - FAQ - Roadmap - Contributing - Code of Conduct - Security Policy - - - - Loading README.md... - + + + + Reference + README reference + + The repository README renders here with an embedded fallback for + local and offline use. + + + README on GitHub + Accessibility wiki + Token reference + + + Preparing the embedded README reference… + - - - - - - Edit token - Updates are written to a page style override on submit. - - - - Token - - - - Color value - - - - - Apply Token - - Cancel - - - - - - + + + + + + + + Advanced token override + Edit token + + + Token name + + + + Token value + + + + + Apply token + + + Cancel token edit + + + + + - - - + +
- - Li + + Loading + + Run loading proof - light-icon: var(--interactive-surface-light-icon-color) + aria-busy - - - Da + + + Disabled + + Unavailable action - dark-icon: var(--interactive-surface-dark-icon-color) + disabled - - - A11Y + + + Variant + + Primary variant - accessibility-icon: var(--interactive-surface-accessibility-icon-color) + .variant-primary - - - + + + + Level + + Elevated level 2 - icon-only keeps 44px minimum target + data-surface-level="2" - - - L + + + Icon + + + + - disabled + aria-disabled support + aria-label + icon-only
+ Loading + + Run loading proof - light-icon: var(--interactive-surface-light-icon-color) + aria-busy
- - Da + + + Disabled + + Unavailable action - dark-icon: var(--interactive-surface-dark-icon-color) + disabled - - - A11Y + + + Variant + + Primary variant - accessibility-icon: var(--interactive-surface-accessibility-icon-color) + .variant-primary - - - + + + + Level + + Elevated level 2 - icon-only keeps 44px minimum target + data-surface-level="2" - - - L + + + Icon + + + + - disabled + aria-disabled support + aria-label + icon-only
- - A11Y + + + Variant + + Primary variant - accessibility-icon: var(--interactive-surface-accessibility-icon-color) + .variant-primary - - - + + + + Level + + Elevated level 2 - icon-only keeps 44px minimum target + data-surface-level="2" - - - L + + + Icon + + + + - disabled + aria-disabled support + aria-label + icon-only
+ Variant + + Primary variant - accessibility-icon: var(--interactive-surface-accessibility-icon-color) + .variant-primary
- - + + + + Level + + Elevated level 2 - icon-only keeps 44px minimum target + data-surface-level="2" - - - L + + + Icon + + + + - disabled + aria-disabled support + aria-label + icon-only
- With interactive-surface - - Focusable Action - - Pressed state - - - SET - - - - Focus ring is visible with :focus-visible fallback. - Pressed and disabled states map directly to ARIA attributes. - Reduced motion and forced colors are supported by default. - + + + + Built on browser semantics + Accessibility guidance + + + + Start with native controls + + Use buttons for actions and anchors for navigation so keyboard and + assistive technology behavior is preserved. + - - Plain controls baseline - - Focusable Action - Pressed state - SET - - - No unified hover/active model. - No tokenized theming contract. - Requires extra CSS to reach parity with contrast and motion handling. - + + Expose persistent state + + Pair visual treatment with aria-pressed, + aria-selected, aria-current, or + aria-busy. + + + + Keep focus reliable + + Disabled controls stay non-interactive, modal focus stays + contained, and closing restores the initiating control. + - - - Creative composition ideas - Use the same primitive for launcher bars, filters, and dashboard cards. - - - Command launcher - - - Open command palette - Ctrl+K - - + + + + Choose the right ownership boundary + Entry points + + + + Standalone preset + + Complete paint, geometry, and interaction behavior for a + framework-agnostic page. + + @import "interactive-surface-css/standalone-preset.css"; + + + State core + + Interaction mechanics only when a host design system already owns + presentation. + + @import "interactive-surface-css/state-core.css"; + + + Compatibility bundle + The established package entry point for current consumers. + @import "interactive-surface-css/interactive-surface.css"; - - Filter chip row - - All - Open - Blocked + + + + + + + Advanced configuration + Token tools + + Edit a value, import a small CSS override, or export the current + overrides for further testing. + + + + + + + Surface background + --interactive-surface-bg + rgb(255 255 255) + + Edit value + - - Playlist card - - Deep Work Mix - Use card-style controls for media, dashboards, or map markers. + + + + Focus ring + --interactive-surface-focus-ring-color + + rgb(30 91 240) + + Edit value + + + + Import token CSS + + + + Copy token CSS + + + Download token CSS + + - - - README and wiki links - - This section mirrors README content so GitHub Pages users can test the library and read docs without - switching pages. - - - - Wiki Home - Getting Started - Installation and Usage - API Reference - Token Reference - Accessibility - Testing and Quality - Publishing and Releases - FAQ - Roadmap - Contributing - Code of Conduct - Security Policy - - - - Loading README.md... - + + + + Reference + README reference + + The repository README renders here with an embedded fallback for + local and offline use. + + + README on GitHub + Accessibility wiki + Token reference + + + Preparing the embedded README reference… + - - - - - - Edit token - Updates are written to a page style override on submit. - - - - Token - - - - Color value - - - - - Apply Token - - Cancel - - - - - - + + + + + + + + Advanced token override + Edit token + + + Token name + + + + Token value + + + + + Apply token + + + Cancel token edit + + + + + - - - + +
+ Start with native controls + + Use buttons for actions and anchors for navigation so keyboard and + assistive technology behavior is preserved. +
- Plain controls baseline - - Focusable Action - Pressed state - SET - - - No unified hover/active model. - No tokenized theming contract. - Requires extra CSS to reach parity with contrast and motion handling. - + + Expose persistent state + + Pair visual treatment with aria-pressed, + aria-selected, aria-current, or + aria-busy. + + + + Keep focus reliable + + Disabled controls stay non-interactive, modal focus stays + contained, and closing restores the initiating control. +
+ Expose persistent state + + Pair visual treatment with aria-pressed, + aria-selected, aria-current, or + aria-busy. + +
+ Keep focus reliable + + Disabled controls stay non-interactive, modal focus stays + contained, and closing restores the initiating control. +
- Command launcher - - - Open command palette - Ctrl+K - - + + + + Choose the right ownership boundary + Entry points + + + + Standalone preset + + Complete paint, geometry, and interaction behavior for a + framework-agnostic page. + + @import "interactive-surface-css/standalone-preset.css"; + + + State core + + Interaction mechanics only when a host design system already owns + presentation. + + @import "interactive-surface-css/state-core.css"; + + + Compatibility bundle + The established package entry point for current consumers. + @import "interactive-surface-css/interactive-surface.css"; - - Filter chip row - - All - Open - Blocked + + + + + + + Advanced configuration + Token tools + + Edit a value, import a small CSS override, or export the current + overrides for further testing. + + + + + + + Surface background + --interactive-surface-bg + rgb(255 255 255) + + Edit value + - - Playlist card - - Deep Work Mix - Use card-style controls for media, dashboards, or map markers. + + + + Focus ring + --interactive-surface-focus-ring-color + + rgb(30 91 240) + + Edit value + + + + Import token CSS + + + + Copy token CSS + + + Download token CSS + + - - - README and wiki links - - This section mirrors README content so GitHub Pages users can test the library and read docs without - switching pages. - - - - Wiki Home - Getting Started - Installation and Usage - API Reference - Token Reference - Accessibility - Testing and Quality - Publishing and Releases - FAQ - Roadmap - Contributing - Code of Conduct - Security Policy - - - - Loading README.md... - + + + + Reference + README reference + + The repository README renders here with an embedded fallback for + local and offline use. + + + README on GitHub + Accessibility wiki + Token reference + + + Preparing the embedded README reference… + - - - - - - Edit token - Updates are written to a page style override on submit. - - - - Token - - - - Color value - - - - - Apply Token - - Cancel - - - - - - + + + + + + + + Advanced token override + Edit token + + + Token name + + + + Token value + + + + + Apply token + + + Cancel token edit + + + + + - - - + +
+ Standalone preset + + Complete paint, geometry, and interaction behavior for a + framework-agnostic page. + + @import "interactive-surface-css/standalone-preset.css"; +
+ State core + + Interaction mechanics only when a host design system already owns + presentation. + + @import "interactive-surface-css/state-core.css"; +
+ Compatibility bundle + The established package entry point for current consumers. + @import "interactive-surface-css/interactive-surface.css";
- Filter chip row - - All - Open - Blocked + + + + + + + Advanced configuration + Token tools + + Edit a value, import a small CSS override, or export the current + overrides for further testing. + + + + + + + Surface background + --interactive-surface-bg + rgb(255 255 255) + + Edit value + - - Playlist card - - Deep Work Mix - Use card-style controls for media, dashboards, or map markers. + + + + Focus ring + --interactive-surface-focus-ring-color + + rgb(30 91 240) + + Edit value + + + + Import token CSS + + + + Copy token CSS + + + Download token CSS + + - - - README and wiki links - - This section mirrors README content so GitHub Pages users can test the library and read docs without - switching pages. - - - - Wiki Home - Getting Started - Installation and Usage - API Reference - Token Reference - Accessibility - Testing and Quality - Publishing and Releases - FAQ - Roadmap - Contributing - Code of Conduct - Security Policy - - - - Loading README.md... - + + + + Reference + README reference + + The repository README renders here with an embedded fallback for + local and offline use. + + + README on GitHub + Accessibility wiki + Token reference + + + Preparing the embedded README reference… + - - - - - - Edit token - Updates are written to a page style override on submit. - - - - Token - - - - Color value - - - - - Apply Token - - Cancel - - - - - - + + + + + + + + Advanced token override + Edit token + + + Token name + + + + Token value + + + + + Apply token + + + Cancel token edit + + + + + - - - + +
- Playlist card - - Deep Work Mix - Use card-style controls for media, dashboards, or map markers. + + + + Focus ring + --interactive-surface-focus-ring-color + + rgb(30 91 240) + + Edit value