ui-style-kit-css 2.6.1 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +13 -12
- package/dist/ui-style-kit.css +1185 -1335
- package/dist/ui-style-kit.min.css +2 -2
- package/dist/ui-style-kit.visual.css +1185 -1335
- package/dist/ui-style-kit.visual.min.css +2 -2
- package/dist/ui-style-kit.with-bridge.css +1185 -1335
- package/dist/ui-style-kit.with-bridge.min.css +2 -2
- package/dist/visual/art-deco.css +455 -717
- package/dist/visual/bauhaus.css +2 -2
- package/dist/visual/bento.css +2 -2
- package/dist/visual/brutalism.css +411 -678
- package/dist/visual/clay.css +2 -2
- package/dist/visual/cyberpunk.css +430 -690
- package/dist/visual/data-terminal.css +426 -693
- package/dist/visual/editorial-luxe.css +429 -696
- package/dist/visual/industrial-utility.css +437 -699
- package/dist/visual/maximalist.css +434 -700
- package/dist/visual/minimal-saas.css +421 -684
- package/dist/visual/neo-noir.css +2 -2
- package/dist/visual/neumorphism.css +422 -689
- package/dist/visual/organic-modern.css +2 -2
- package/dist/visual/paper-editorial.css +484 -711
- package/dist/visual/retro-glass.css +435 -689
- package/dist/visual/retrofuturism.css +423 -690
- package/dist/visual/tactile.css +433 -698
- package/dist/visual/technical-blueprint.css +437 -700
- package/dist/visual/y2k.css +445 -692
- package/docs/COMPONENT-SPACING.md +154 -0
- package/docs/DEMO-SHOWCASE.md +16 -0
- package/docs/ECOSYSTEM.md +2 -2
- package/docs/PUBLISHING.md +7 -7
- package/docs/RELEASE-2.7.0.md +21 -0
- package/docs/RELEASE-2.7.1.md +21 -0
- package/manifest.json +9 -1
- package/package.json +2 -2
- package/styles/art-deco.css +18 -9
- package/styles/bauhaus.css +8 -5
- package/styles/bento.css +27 -16
- package/styles/brutalism.css +8 -5
- package/styles/clay.css +17 -10
- package/styles/clean-defaults.css +20 -0
- package/styles/component-composition.css +63 -0
- package/styles/components.css +262 -2
- package/styles/cyberpunk.css +21 -10
- package/styles/data-terminal.css +9 -5
- package/styles/editorial-luxe.css +9 -5
- package/styles/industrial-utility.css +17 -8
- package/styles/maximalist.css +10 -5
- package/styles/minimal-saas.css +9 -4
- package/styles/native-elements.css +32 -2
- package/styles/neo-noir.css +18 -9
- package/styles/neumorphism.css +13 -7
- package/styles/organic-modern.css +4 -4
- package/styles/paper-editorial.css +45 -7
- package/styles/retro-glass.css +16 -6
- package/styles/retrofuturism.css +10 -7
- package/styles/tactile.css +22 -9
- package/styles/technical-blueprint.css +14 -7
- package/styles/y2k.css +34 -14
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Shared component spacing and structural composition
|
|
2
|
+
|
|
3
|
+
UI Style Kit owns component appearance and internal geometry. Layout Style CSS
|
|
4
|
+
owns page arrangement, measures, gutters and section rhythm. Interactive Surface
|
|
5
|
+
CSS owns state feedback. React exposes those contracts without another paint layer.
|
|
6
|
+
|
|
7
|
+
## Choose the existing owner
|
|
8
|
+
|
|
9
|
+
| Need | Public configuration |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| Paragraph hyperlink | A classless native anchor, or `data-link-presentation="inline"` on a classed anchor |
|
|
12
|
+
| Aligned navigation action | `data-link-presentation="control"`; use the navigation component for current-page semantics |
|
|
13
|
+
| Card content inset | `data-card-spacing="flush\|compact\|normal\|comfortable"` on `.usk-card` or `.ui-card` |
|
|
14
|
+
| Structural shell, article or aside | `data-ui-structure="neutral"` with the optional component-composition stylesheet |
|
|
15
|
+
| Wider content lane | Layout `.ly-wrapper--content`, `--wide`, `--workspace`, `--full` or `--breakout` |
|
|
16
|
+
| Screen gutter | Layout `--ly-wrapper-gutter`; the wrapper incorporates the device safe area |
|
|
17
|
+
| Section block spacing | Layout `.ly-section`, `--compact` or `--flush` |
|
|
18
|
+
| Centering or wrapping actions | Layout center/cluster primitives and their public alignment/gap options |
|
|
19
|
+
|
|
20
|
+
React candidates expose `Link presentation`, `Card spacing`, `Layout.Wrapper
|
|
21
|
+
measure`, and `Layout.Section spacing`. Undecorated Layout article/aside semantics
|
|
22
|
+
carry the neutral structural hook. Existing wrapper and section APIs require no
|
|
23
|
+
new Layout release.
|
|
24
|
+
|
|
25
|
+
## Inline links
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<p>Read <a href="/guide">the guide</a>, then continue.</p>
|
|
29
|
+
<a class="usk-link" data-link-presentation="inline" href="/guide">
|
|
30
|
+
<span class="usk-link__label">A long wrapping guide title</span>
|
|
31
|
+
</a>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The link and label have no independent margin, padding, border or control fill.
|
|
35
|
+
Focus and theme colors remain available. Omitting the presentation attribute on
|
|
36
|
+
an existing classed link retains its preset defaults. Control presentation adds
|
|
37
|
+
inline alignment and uses `--usk-link-gap`; it does not turn navigation into a
|
|
38
|
+
button action or replace the application's accessible name.
|
|
39
|
+
|
|
40
|
+
## Card density
|
|
41
|
+
|
|
42
|
+
```html
|
|
43
|
+
<div class="usk-card" data-card-spacing="comfortable">
|
|
44
|
+
<article data-ui-structure="neutral">Structural content inside one card.</article>
|
|
45
|
+
</div>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
| Density | Default inset | Optional token |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| flush | 0 | No inset |
|
|
51
|
+
| compact | .75rem | `--usk-card-padding-compact` |
|
|
52
|
+
| normal | 1rem | `--usk-card-padding-normal` |
|
|
53
|
+
| comfortable | `clamp(1.25rem, 2.5vw, 2rem)` | `--usk-card-padding-comfortable` |
|
|
54
|
+
|
|
55
|
+
Omitting density preserves the preset's card inset. Configure the density token
|
|
56
|
+
at an application boundary when product composition needs another measure;
|
|
57
|
+
avoid descendant `.usk-card` padding overrides. Compound card regions remain
|
|
58
|
+
available for media and content composition.
|
|
59
|
+
|
|
60
|
+
Native article/aside decoration remains the default. Neutral structure is an
|
|
61
|
+
explicit opt-in, so existing standalone semantic panels retain their appearance.
|
|
62
|
+
The same hook is available on div, main, section, header, footer and navigation
|
|
63
|
+
boundaries to prevent the element floor from accumulating through a nested shell.
|
|
64
|
+
Layout's later structural layer continues to own configured gutters and section
|
|
65
|
+
padding. React's neutral Layout article/aside treatment is automatic; other
|
|
66
|
+
neutral shell boundaries remain explicit native data attributes.
|
|
67
|
+
|
|
68
|
+
## Compact components and feedback
|
|
69
|
+
|
|
70
|
+
Empty-state symbols use `--usk-empty-state-icon-size` (default `2.75rem`) so
|
|
71
|
+
compact preset typography does not reduce the illustration to body-text size.
|
|
72
|
+
Chip, tab and segment frames use `--usk-compact-content-padding-block` (`.35rem`)
|
|
73
|
+
and `--usk-compact-content-padding-inline` (`.65rem`). Status badges use
|
|
74
|
+
`--usk-badge-padding-block` (`.22rem`) and `--usk-badge-padding-inline` (`.6rem`).
|
|
75
|
+
These are frame insets; compound labels and icons do not add another inset.
|
|
76
|
+
Popover, menu and listbox frames use `--usk-overlay-padding` (`.5rem`);
|
|
77
|
+
menu items and listbox options use `--usk-option-padding-block` (`.55rem`)
|
|
78
|
+
and `--usk-option-padding-inline` (`.7rem`) to keep their text clear of edges.
|
|
79
|
+
|
|
80
|
+
Progress tracks and fills do not inherit the element-spacing floor. Switch
|
|
81
|
+
thumbs use `--usk-switch-thumb-size` (`1.125rem`) and remain centered inside the
|
|
82
|
+
track at either end. Presets continue to supply their silhouettes and materials;
|
|
83
|
+
native slider thumbs use the preset's action color.
|
|
84
|
+
|
|
85
|
+
A toast with a direct title places that title above its content, across the full
|
|
86
|
+
available row. Title and body text wrap at word boundaries rather than splitting
|
|
87
|
+
letters into a narrow side column. The toast owns its content inset through
|
|
88
|
+
`--usk-toast-padding` (`1rem`). Page columns and the surrounding card layout remain
|
|
89
|
+
Layout Style CSS or application responsibilities.
|
|
90
|
+
|
|
91
|
+
Tooltip tone and placement are independent:
|
|
92
|
+
|
|
93
|
+
```html
|
|
94
|
+
<span class="usk-tooltip" data-ui-variant="primary" role="tooltip">Primary tip</span>
|
|
95
|
+
<span class="usk-tooltip" data-ui-variant="secondary" role="tooltip">Context cue</span>
|
|
96
|
+
<span class="usk-tooltip" data-ui-variant="accent" role="tooltip">Action hint</span>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Primary uses the paired action fill and ink. Secondary uses an outlined context
|
|
100
|
+
treatment, and accent uses a double edge and the paired accent colors. Existing
|
|
101
|
+
unqualified tooltips keep their preset defaults. Advanced prefixed markup can
|
|
102
|
+
combine, for example, `saas-tooltip saas-tooltip-right saas-tooltip-secondary`.
|
|
103
|
+
|
|
104
|
+
Secondary buttons use paired secondary fill and ink to remain distinct from ghost
|
|
105
|
+
actions. Warning buttons and badges use the warm warning palette and a slow
|
|
106
|
+
brightness pulse; text stays opaque. `--usk-warning-attention-duration` defaults
|
|
107
|
+
to `1.8s`. Reduced-motion users receive the static warm treatment. Disabled radios
|
|
108
|
+
use muted paint and a dashed edge; forced-color mode retains system colors.
|
|
109
|
+
|
|
110
|
+
These contracts are covered by `tests/e2e/demo-annotation-regressions.spec.js`.
|
|
111
|
+
|
|
112
|
+
Status messages retain success, warning and danger tints after preset material
|
|
113
|
+
rules. Titles and body copy use the same readable message ink. Status color
|
|
114
|
+
remains in the surface tint, leading edge and symbol; title hierarchy comes from
|
|
115
|
+
the preset's weight and typography. Small titles do not need text shadows or
|
|
116
|
+
outlines to compensate for a low-contrast foreground.
|
|
117
|
+
Browsers without `color-mix()` retain solid status fills with paired readable
|
|
118
|
+
foregrounds; the tinted treatment is a guarded enhancement.
|
|
119
|
+
|
|
120
|
+
Icon tiles pair their ink with the painted face, including inverted theme
|
|
121
|
+
materials and translucent plates. Metallic rims remain decorative around a
|
|
122
|
+
stable glyph surface. Busy indicators retain preset geometry while using visible
|
|
123
|
+
paint against the actual button face; palette accent fill alone is insufficient
|
|
124
|
+
for a small moving mark. The shared coverage is in
|
|
125
|
+
`tests/e2e/feedback-visibility.spec.js`.
|
|
126
|
+
|
|
127
|
+
Paper Editorial message symbols occupy a fixed 24px lane and stay centered
|
|
128
|
+
against the full message, including wrapped copy. Text and optional dismiss
|
|
129
|
+
buttons occupy separate grid columns. Native loader hooks must retain the active
|
|
130
|
+
preset's geometry, paint and animation, including decorative pseudo-elements.
|
|
131
|
+
These contracts are covered by `tests/e2e/feedback-layout.spec.js`.
|
|
132
|
+
|
|
133
|
+
## Migration and validation
|
|
134
|
+
|
|
135
|
+
The inline link and component-label fixes correct the global element spacing
|
|
136
|
+
floor. Optional component composition also owns modal auto margins, avatar
|
|
137
|
+
fallback centering and chip-label containment. Edge drawers retain their
|
|
138
|
+
placement contract. These contracts have focused browser regressions in
|
|
139
|
+
`tests/e2e/css-ownership-composition.spec.js`.
|
|
140
|
+
|
|
141
|
+
Consumer migrations must be checked against the exact packed candidate artifacts.
|
|
142
|
+
An unchanged published dependency pin does not mean these candidate contracts
|
|
143
|
+
are present in that installed release. Publish UI Style Kit before adopting the
|
|
144
|
+
React/consumer release pair; temporary tarball references belong only in ignored
|
|
145
|
+
integration fixtures.
|
|
146
|
+
|
|
147
|
+
## React variant attributes and prefixed classes
|
|
148
|
+
|
|
149
|
+
React buttons may combine a semantic class, a preset class and
|
|
150
|
+
`data-ui-variant`. Legacy neutral-only paint rules exclude attribute-selected
|
|
151
|
+
variants through `:where(:not([data-ui-variant]))`. This keeps their specificity
|
|
152
|
+
stable while allowing the selected primary, secondary, danger or ghost surface
|
|
153
|
+
to retain its paired foreground and decoration. The mixed-class regression
|
|
154
|
+
checks all presets, palettes, modes and pressed states.
|
package/docs/DEMO-SHOWCASE.md
CHANGED
|
@@ -4,6 +4,22 @@ The default `index.html` and `demo/index.html` present one shared library showca
|
|
|
4
4
|
semantic components, overview, color tokens, prefixed components, native HTML,
|
|
5
5
|
the Interactive Surface bridge, and usage examples.
|
|
6
6
|
|
|
7
|
+
## Interaction contrast
|
|
8
|
+
|
|
9
|
+
Hover, press, and keyboard focus must preserve readable labels. A filled action
|
|
10
|
+
keeps its paired foreground and background; an inline-link rule must not recolor
|
|
11
|
+
a button or navigation component. Gloss and grain remain decorative rather than
|
|
12
|
+
replacing the label's underlying paint.
|
|
13
|
+
|
|
14
|
+
The release regressions check 20 presets, 25 named palettes plus native palettes,
|
|
15
|
+
three modes, and five interaction states, including hover on pressed buttons.
|
|
16
|
+
They cover prefixed, semantic, and mixed React class models, anchor buttons,
|
|
17
|
+
native controls, disclosures, navigation, and table labels. The
|
|
18
|
+
contrast probe samples the central label lane and accounts for translucent paint
|
|
19
|
+
and full-face pseudo-elements; positioned dropdown arrows are outside that lane.
|
|
20
|
+
|
|
21
|
+
Recheck the rendered demo after changing palette values in the workbench.
|
|
22
|
+
|
|
7
23
|
## Preview state and palette editing
|
|
8
24
|
|
|
9
25
|
Use `?ui=tactile&theme=None&mode=dark` to preview a native palette. The `personality`
|
package/docs/ECOSYSTEM.md
CHANGED
|
@@ -14,11 +14,11 @@ Before a UI branch or pull request is expected to validate, verify the reviewed
|
|
|
14
14
|
|
|
15
15
|
| Library | Current aligned version | Owns |
|
|
16
16
|
|---|---:|---|
|
|
17
|
-
| `ui-style-kit-css@2.
|
|
17
|
+
| `ui-style-kit-css@2.7.1` | current UI version | visual identity, color themes, UI paint, native HTML styling, content wrapping, and bridge tokens |
|
|
18
18
|
| `interactive-surface-css@1.7.3` | compatible state release | interaction-state primitives, surface behavior, state layers, and input affordances |
|
|
19
19
|
| `layout-style-css@3.2.3` | compatible structural release | structural wrappers, grids, sections, app shells, and layout recipes |
|
|
20
20
|
|
|
21
|
-
The current combination is `ui-style-kit-css@2.
|
|
21
|
+
The current combination is `ui-style-kit-css@2.7.1`, `interactive-surface-css@1.7.3`, and `layout-style-css@3.2.3`. UI Style Kit `2.7.1` is the current UI version. The companion versions are reviewed releases. Layout Style `3.2.3` is the compatible structural release. The validated minimum remains `ui-style-kit-css@2.1.0`, `interactive-surface-css@1.5.0`, and `layout-style-css@3.0.0`.
|
|
22
22
|
|
|
23
23
|
## Layout-to-visual pairing matrix
|
|
24
24
|
|
package/docs/PUBLISHING.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Publishing Guide
|
|
2
2
|
|
|
3
|
-
## 2.
|
|
3
|
+
## 2.7.1 release workflow
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This guide prepares version `2.7.1`. [Release preparation notes](RELEASE-2.7.1.md)
|
|
6
6
|
record the current local scope and gates; existing visual-QA documents are historical
|
|
7
|
-
evidence, not proof that subsequent edits passed browser validation. The 2.
|
|
7
|
+
evidence, not proof that subsequent edits passed browser validation. The 2.7.1
|
|
8
8
|
changelog entry must carry the approved publication date before tagging.
|
|
9
9
|
|
|
10
10
|
Update the tracked `wiki/` sources with the README and docs. Publishing those pages
|
|
@@ -13,9 +13,9 @@ documentation generator is configured in this package; reusable JavaScript helpe
|
|
|
13
13
|
use JSDoc-compatible comments, and the checked-in build owns generated CSS, manifests,
|
|
14
14
|
icons, README size measurements, and demo asset hashes.
|
|
15
15
|
|
|
16
|
-
Prepare `ui-style-kit-css@2.
|
|
16
|
+
Prepare `ui-style-kit-css@2.7.1` on its release branch, open a pull request against `main`, and merge only after the fast automated gate is green and any requested manual demo review is complete. The aligned companion releases are `layout-style-css@3.2.3` and `interactive-surface-css@1.7.3`.
|
|
17
17
|
|
|
18
|
-
Do not push `v2.
|
|
18
|
+
Do not push `v2.7.1` before the reviewed release commit is on `main`. A pushed version tag runs Release Version Alignment, which validates the tag/package/changelog contract and creates the GitHub Release; publishing that release triggers the protected npm workflow.
|
|
19
19
|
|
|
20
20
|
Release Version Alignment owns the fast automated release gate: lint, build, unit checks, the tagged Chromium release-smoke Playwright suite, and packed ecosystem preflight with `--skip-clean-install`. The visual-baseline suite, full UI matrix, and clean-install ecosystem matrix are manual escalation tools, not default push or publish blockers. The protected npm workflow intentionally does not rerun browser gates; it revalidates the immutable tag, package contracts, browser-free compatibility checks, companion commit reachability, the explicit release preflight with `--skip-clean-install`, npm token presence, npm owner authorization, and registry state before publishing.
|
|
21
21
|
|
|
@@ -76,7 +76,7 @@ npm run check:ecosystem:packs -- --layout-repo ../Layout-Style-CSS --interactive
|
|
|
76
76
|
npm publish
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
`prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the default fast release gate. For GitHub releases, push or dispatch the matching package tag, such as `v2.
|
|
79
|
+
`prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the default fast release gate. For GitHub releases, push or dispatch the matching package tag, such as `v2.7.1`, only after the release PR is merged. The release workflows verify that `package.json`, `package-lock.json`, `CHANGELOG.md`, generated dist banners, and ecosystem pins are aligned before publishing. Dispatch the protected npm workflow from the current `main` workflow file when recovering publication for a release that has already passed Release Version Alignment.
|
|
80
80
|
|
|
81
81
|
The repository `NPM_TOKEN` secret must authenticate to npm as a user that appears in `npm owner ls ui-style-kit-css`. If the token belongs to another npm account or lacks package publish rights, npm may report a misleading registry `E404` at publish time.
|
|
82
82
|
|
|
@@ -88,4 +88,4 @@ npm run release:minor
|
|
|
88
88
|
npm run release:major
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
Use patch for compatible fixes, minor for new themes, presets, component capabilities, or browser-support contracts, and major for incompatible public API changes. Version `2.
|
|
91
|
+
Use patch for compatible fixes, minor for new themes, presets, component capabilities, or browser-support contracts, and major for incompatible public API changes. Version `2.7.1` is a patch release because it repairs interaction paint and contrast while retaining the preset and semantic component APIs. Future feature versioning continues to follow this policy.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# v2.7.0 release candidate
|
|
2
|
+
|
|
3
|
+
UI Style Kit CSS 2.7.0 is the minor release candidate for shared component spacing, link presentation, feedback visibility, and preset variant paint. Its entrypoints, 20 presets, and theme inventory remain available. Version 2.6.1 remains published on npm until the release workflow completes.
|
|
4
|
+
|
|
5
|
+
## Changed
|
|
6
|
+
|
|
7
|
+
- Added token-backed card spacing and link presentation controls for consumer markup.
|
|
8
|
+
- Made generic structural elements neutral and contained shared component content at narrow widths.
|
|
9
|
+
- Kept status titles in readable neutral ink while status surfaces, edges, and icons carry success, warning, and danger.
|
|
10
|
+
- Centered Paper Editorial status icons and gave native loading indicators the active preset identity.
|
|
11
|
+
- Guarded legacy neutral fallback paint so a button with both a preset class and `data-ui-variant` retains its selected variant in 17 affected presets.
|
|
12
|
+
- Repaired annotation contrast, star sizing, progress centering, text insets, tooltip variation, controls, and warning actions.
|
|
13
|
+
- The options toolbar stays visible during page scrolling at narrow and wide viewport sizes. Section links land below the toolbar.
|
|
14
|
+
- Optional preset specimen modules load when their preset is selected, reducing the initial demo JavaScript transfer.
|
|
15
|
+
- Theme and mode changes update palette-dependent sections while preserving unrelated demo controls and user-entered values.
|
|
16
|
+
- The toolbar uses shared semantic field and select styles with one neutral platform indicator rule in local CSS.
|
|
17
|
+
- Updated development-only dependency resolutions for fast-uri, postcss-selector-parser, and source-map-js.
|
|
18
|
+
|
|
19
|
+
## Verification
|
|
20
|
+
|
|
21
|
+
The 2.7.0 candidate passed the focused UI correction tests, the remaining 43 Chromium release smoke cases, package export admission, affected CSS lint, and a clean npm advisory audit. The complete release workflow will repeat its protected gates from the merged commit. Confirm generated demo asset hashes, package exports, and version surfaces before merging. Tagging, GitHub Release creation, and npm publication follow the protected workflow in [PUBLISHING.md](PUBLISHING.md).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# v2.7.1 interaction contrast patch
|
|
2
|
+
|
|
3
|
+
This compatible patch preserves the 20 presets, 25 named color themes, native palettes, three modes, and existing public entrypoints.
|
|
4
|
+
|
|
5
|
+
## Corrections
|
|
6
|
+
|
|
7
|
+
- Neutral hover rules no longer replace filled action backgrounds while retaining their foregrounds.
|
|
8
|
+
- Outlined CTAs retain readable surface ink at rest and their paired primary fill on hover. Neutral defaults exclude these paint-owning modifiers; Clay icon buttons use the control surface beneath their labels.
|
|
9
|
+
- Inline-link presentation excludes prefixed and semantic action classes. The build generates semantic aliases only for selectors that positively select a promoted component; exclusions alone cannot introduce a competing component rule. Variant exclusions also cover mixed prefixed/semantic markup used by React consumers.
|
|
10
|
+
- Primary, danger, warning, and current-navigation labels retain a matched foreground and background. Decorative reflections stay outside the central label lane.
|
|
11
|
+
- Neumorphism table values use readable surface ink, and Bento success and warning badge labels remain readable on translucent tints.
|
|
12
|
+
- Neo Noir warning paint belongs to its skewed face, preserving the component geometry.
|
|
13
|
+
- Y2K cut modifiers preserve primary action paint, and the compact trust seal contains its full number and caption.
|
|
14
|
+
|
|
15
|
+
## Verification boundary
|
|
16
|
+
|
|
17
|
+
Focused Chromium regressions cover all presets, native plus named palettes, all modes, and rest, hover, active, keyboard-focus, and pressed-hover states. Fixtures include prefixed buttons, both semantic namespaces, mixed React class models, anchor actions, marketing CTAs, icon actions, native fields, disclosures, navigation, and tables. The React paint check asserts the real theme IDs visited, preventing a repeated native palette from masquerading as named-theme coverage.
|
|
18
|
+
|
|
19
|
+
Manual demo interaction uses the connected local Opera browser because Gnomie Browser Commander's runtime is unavailable in this session. Local evidence, protected GitHub release checks, npm publication, and live demo verification remain separate gates. No jsdoc2md generator is configured in this CSS package; JSDoc-compatible comments and the repository build maintain the generated artifacts.
|
|
20
|
+
|
|
21
|
+
Publication follows [PUBLISHING.md](PUBLISHING.md). The aligned companions remain Interactive Surface CSS 1.7.3 and Layout Style CSS 3.2.3.
|
package/manifest.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"breakingChange": "increment-schemaVersion-before-removing-or-renaming-fields"
|
|
6
6
|
},
|
|
7
7
|
"name": "ui-style-kit-css",
|
|
8
|
-
"version": "2.
|
|
8
|
+
"version": "2.7.1",
|
|
9
9
|
"cascadeLayers": [
|
|
10
10
|
"ui-style-kit.theme_colors",
|
|
11
11
|
"ui-style-kit.native_elements",
|
|
@@ -733,6 +733,11 @@
|
|
|
733
733
|
"success",
|
|
734
734
|
"warning",
|
|
735
735
|
"danger"
|
|
736
|
+
],
|
|
737
|
+
".usk-tooltip": [
|
|
738
|
+
"primary",
|
|
739
|
+
"secondary",
|
|
740
|
+
"accent"
|
|
736
741
|
]
|
|
737
742
|
}
|
|
738
743
|
},
|
|
@@ -1091,6 +1096,9 @@
|
|
|
1091
1096
|
"toolbar",
|
|
1092
1097
|
"tooltip",
|
|
1093
1098
|
"tooltip-arrow",
|
|
1099
|
+
"tooltip-primary",
|
|
1100
|
+
"tooltip-secondary",
|
|
1101
|
+
"tooltip-accent",
|
|
1094
1102
|
"tooltip-bottom",
|
|
1095
1103
|
"tooltip-left",
|
|
1096
1104
|
"tooltip-right",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ui-style-kit-css",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.1",
|
|
4
4
|
"description": "CSS theme and UI style preset library for accessible websites, dashboards, admin interfaces, and client-facing pages.",
|
|
5
5
|
"style": "dist/ui-style-kit.css",
|
|
6
6
|
"main": "dist/ui-style-kit.css",
|
|
@@ -248,7 +248,7 @@
|
|
|
248
248
|
},
|
|
249
249
|
"overrides": {
|
|
250
250
|
"colord": "2.9.4",
|
|
251
|
-
"fast-uri": "3.1.
|
|
251
|
+
"fast-uri": "3.1.9",
|
|
252
252
|
"js-yaml": "4.3.2",
|
|
253
253
|
"nanoid": "3.3.18",
|
|
254
254
|
"postcss": "8.5.23"
|
package/styles/art-deco.css
CHANGED
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
--usk-native-range-track-shadow: 0 0 0 2px var(--deco-surface-strong);
|
|
252
252
|
--usk-native-range-progress-background: var(--deco-primary);
|
|
253
253
|
--usk-native-range-thumb-size: 1.35rem;
|
|
254
|
-
--usk-native-range-thumb-background: var(--
|
|
254
|
+
--usk-native-range-thumb-background: var(--usk-native-primary);
|
|
255
255
|
--usk-native-range-thumb-border: 1px solid var(--deco-border);
|
|
256
256
|
--usk-native-range-thumb-radius: 50%;
|
|
257
257
|
--usk-native-range-thumb-shadow: 0 0 0 2px var(--deco-surface-strong);
|
|
@@ -437,7 +437,9 @@
|
|
|
437
437
|
/* Theme-responsive component defaults */
|
|
438
438
|
.deco-card, .deco-panel { background: var(--deco-card-bg); }
|
|
439
439
|
.deco-toolbar, .deco-table-wrap { background: var(--deco-control-bg); }
|
|
440
|
-
|
|
440
|
+
/** Attribute-selected variants bypass the legacy neutral-only paint fallback. */
|
|
441
|
+
/** Neutral defaults exclude outlined actions so their hover fill and ink remain paired. */
|
|
442
|
+
.deco-button:where(:not([data-ui-variant])):not(.deco-button-primary):not(.deco-button-secondary):not(.deco-button-danger):not(.deco-button-warning):not(.deco-button-ghost):not(.deco-button-outline-heavy), .deco-icon-button { background: var(--deco-control-bg); }
|
|
441
443
|
.deco-button, .deco-icon-button, .deco-badge, .deco-nav-link { font-family: var(--deco-font-control); }
|
|
442
444
|
|
|
443
445
|
|
|
@@ -629,7 +631,7 @@
|
|
|
629
631
|
.deco-button.deco-button-outline-heavy,
|
|
630
632
|
.deco-button-outline-heavy {
|
|
631
633
|
background: transparent;
|
|
632
|
-
color: var(--usk-primary-ink, var(--deco-
|
|
634
|
+
color: var(--usk-primary-ink, var(--deco-text));
|
|
633
635
|
border-style: solid;
|
|
634
636
|
border-width: 2px;
|
|
635
637
|
border-color: var(--deco-primary);
|
|
@@ -858,7 +860,7 @@
|
|
|
858
860
|
--usk-native-range-track-shadow: inset 0 0 0 1px rgb(var(--deco-surface-strong-rgb) / .72);
|
|
859
861
|
--usk-native-range-progress-background: linear-gradient(90deg, var(--deco-primary), var(--deco-warning));
|
|
860
862
|
--usk-native-range-thumb-size: 1.18rem;
|
|
861
|
-
--usk-native-range-thumb-background:
|
|
863
|
+
--usk-native-range-thumb-background: var(--usk-native-primary);
|
|
862
864
|
--usk-native-range-thumb-border: 3px double var(--deco-border);
|
|
863
865
|
--usk-native-range-thumb-radius: 0;
|
|
864
866
|
--usk-native-range-thumb-shadow: 0 0 0 2px rgb(var(--deco-surface-strong-rgb) / .72);
|
|
@@ -1035,8 +1037,7 @@
|
|
|
1035
1037
|
--usk-native-range-track-background:
|
|
1036
1038
|
linear-gradient(90deg, var(--deco-surface-soft), rgb(var(--deco-metal-rgb) / .52), var(--deco-surface-soft));
|
|
1037
1039
|
--usk-native-range-progress-background: var(--deco-jewel-primary);
|
|
1038
|
-
--usk-native-range-thumb-background:
|
|
1039
|
-
linear-gradient(135deg, var(--deco-jewel-warning), var(--deco-jewel-primary));
|
|
1040
|
+
--usk-native-range-thumb-background: var(--usk-native-primary);
|
|
1040
1041
|
--usk-native-progress-size: .625rem;
|
|
1041
1042
|
--usk-native-progress-value-background: var(--deco-jewel-primary);
|
|
1042
1043
|
--usk-native-meter-optimum-background: var(--deco-jewel-success);
|
|
@@ -1058,6 +1059,12 @@
|
|
|
1058
1059
|
}
|
|
1059
1060
|
}
|
|
1060
1061
|
|
|
1062
|
+
/** Named palettes preserve their tested primary paint pair instead of tempering only the fill. */
|
|
1063
|
+
[data-ui="art-deco"][data-theme][data-mode] :is(.deco-button-primary, .deco-nav-link[aria-current="page"], .deco-nav-link.is-active) {
|
|
1064
|
+
background-color: var(--deco-primary);
|
|
1065
|
+
color: var(--deco-on-primary);
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1061
1068
|
/**
|
|
1062
1069
|
* Lets explicit runtime token edits render exact user-supplied action colors
|
|
1063
1070
|
* while untouched shared themes keep the tempered Art Deco jewel paint.
|
|
@@ -1524,7 +1531,9 @@
|
|
|
1524
1531
|
text-indent: 0;
|
|
1525
1532
|
}
|
|
1526
1533
|
|
|
1527
|
-
.
|
|
1534
|
+
/** Neutral defaults exclude outlined actions so their hover fill and ink remain paired. */
|
|
1535
|
+
|
|
1536
|
+
.deco-button:where(:not([data-ui-variant])):not(.deco-button-primary):not(.deco-button-secondary):not(.deco-button-danger):not(.deco-button-warning):not(.deco-button-ghost):not(.deco-button-outline-heavy),
|
|
1528
1537
|
.deco-icon-button {
|
|
1529
1538
|
background-color: var(--deco-surface-strong);
|
|
1530
1539
|
background-image: none;
|
|
@@ -1839,7 +1848,7 @@
|
|
|
1839
1848
|
--usk-native-choice-checked-background: var(--deco-secondary);
|
|
1840
1849
|
--usk-native-choice-mark-color: var(--deco-on-secondary);
|
|
1841
1850
|
--usk-native-range-progress-background: var(--deco-secondary);
|
|
1842
|
-
--usk-native-range-thumb-background: var(--
|
|
1851
|
+
--usk-native-range-thumb-background: var(--usk-native-primary);
|
|
1843
1852
|
--usk-native-progress-value-background: var(--deco-secondary);
|
|
1844
1853
|
}
|
|
1845
1854
|
/** Decorative layers retain stepped borders without clipping focus or content. */
|
|
@@ -1901,7 +1910,7 @@
|
|
|
1901
1910
|
.deco-icon-button { width: 36px; min-width: 36px; padding: 0; font-family: "Segoe UI Symbol", Arial, sans-serif; font-size: 16px; line-height: 1; }
|
|
1902
1911
|
.deco-button-loading { display: inline-flex; align-items: center; justify-content: center; min-inline-size: 152px; }
|
|
1903
1912
|
.deco-button[aria-busy="true"]::after, .deco-icon-button[aria-busy="true"]::after,
|
|
1904
|
-
[data-ui="art-deco"] :where(button[aria-busy="true"])::after { content: ""; position: static; display: inline-block; box-sizing: border-box; flex: 0 0 16px; width: 16px; height: 16px; margin: 0; background:
|
|
1913
|
+
[data-ui="art-deco"] :where(button[aria-busy="true"])::after { content: ""; position: static; display: inline-block; box-sizing: border-box; flex: 0 0 16px; width: 16px; height: 16px; margin: 0; background: repeating-conic-gradient(currentColor 0 8deg, transparent 8deg 16deg, currentColor 16deg 24deg, transparent 24deg 30deg); border: 3px double var(--deco-metal); box-shadow: none; border-radius: 50%; -webkit-mask: none; mask: none; animation: deco-spin 1.4s linear infinite; }
|
|
1905
1914
|
/** One loader silhouette across prefixed, native, and generated semantic surfaces. */
|
|
1906
1915
|
.deco-spinner, .deco-loading-spinner, [data-ui="art-deco"] :where(.ui-spinner, .loading-spinner, [data-loading-spinner]) { position: relative; display: inline-block; width: 48px; height: 48px; flex: 0 0 48px; border: 3px double var(--deco-metal); border-radius: 50%; background: var(--deco-spinner-segmented-background); box-shadow: none; clip-path: none; animation: deco-spin 1.4s linear infinite; }
|
|
1907
1916
|
.deco-spinner::before, .deco-loading-spinner::before, [data-ui="art-deco"] :where(.ui-spinner, .loading-spinner, [data-loading-spinner])::before { content: ""; position: absolute; inset: 0; border-radius: 50%; background: repeating-conic-gradient(var(--deco-metal) 0deg 22deg, transparent 22deg 36deg); -webkit-mask: radial-gradient(transparent 49%, #000 51%); mask: radial-gradient(transparent 49%, #000 51%); }
|
package/styles/bauhaus.css
CHANGED
|
@@ -264,7 +264,7 @@
|
|
|
264
264
|
--usk-native-range-track-shadow: none;
|
|
265
265
|
--usk-native-range-progress-background: var(--bau-primary);
|
|
266
266
|
--usk-native-range-thumb-size: 1.55rem;
|
|
267
|
-
--usk-native-range-thumb-background: var(--
|
|
267
|
+
--usk-native-range-thumb-background: var(--usk-native-primary);
|
|
268
268
|
--usk-native-range-thumb-border: 2px solid var(--bau-border);
|
|
269
269
|
--usk-native-range-thumb-radius: 50%;
|
|
270
270
|
--usk-native-range-thumb-shadow: var(--bau-control-shadow-pressed);
|
|
@@ -463,7 +463,9 @@
|
|
|
463
463
|
/* Theme-responsive component defaults */
|
|
464
464
|
.bau-card, .bau-panel { background: var(--bau-card-bg); }
|
|
465
465
|
.bau-toolbar, .bau-table-wrap { background: var(--bau-control-bg); }
|
|
466
|
-
|
|
466
|
+
/** Attribute-selected variants bypass the legacy neutral-only paint fallback. */
|
|
467
|
+
/** Neutral defaults exclude outlined actions so their hover fill and ink remain paired. */
|
|
468
|
+
.bau-button:where(:not([data-ui-variant])):not(.bau-button-primary):not(.bau-button-secondary):not(.bau-button-danger):not(.bau-button-warning):not(.bau-button-ghost):not(.bau-button-outline-heavy):not(.is-primary):not(.is-secondary):not(.is-danger):not(.is-ghost):not(.is-busy):not(.is-hover), .bau-icon-button { background: var(--bau-control-bg); }
|
|
467
469
|
.bau-button, .bau-icon-button, .bau-badge, .bau-nav-link { font-family: var(--bau-font-control); }
|
|
468
470
|
|
|
469
471
|
|
|
@@ -661,7 +663,7 @@
|
|
|
661
663
|
.bau-button.bau-button-outline-heavy,
|
|
662
664
|
.bau-button-outline-heavy {
|
|
663
665
|
background: transparent;
|
|
664
|
-
color: var(--usk-primary-ink, var(--bau-
|
|
666
|
+
color: var(--usk-primary-ink, var(--bau-text));
|
|
665
667
|
border-style: solid;
|
|
666
668
|
border-width: 2px;
|
|
667
669
|
border-color: var(--bau-primary);
|
|
@@ -863,7 +865,7 @@
|
|
|
863
865
|
--usk-native-range-track-shadow: inset 0 -2px 0 rgb(var(--bau-text-rgb) / .3);
|
|
864
866
|
--usk-native-range-progress-background: var(--bau-primary);
|
|
865
867
|
--usk-native-range-thumb-size: 1.58rem;
|
|
866
|
-
--usk-native-range-thumb-background: var(--
|
|
868
|
+
--usk-native-range-thumb-background: var(--usk-native-primary);
|
|
867
869
|
--usk-native-range-thumb-border: 2px solid var(--bau-border);
|
|
868
870
|
--usk-native-range-thumb-radius: 50%;
|
|
869
871
|
--usk-native-range-thumb-shadow: .16rem .16rem 0 rgb(var(--bau-text-rgb) / .7);
|
|
@@ -949,7 +951,8 @@
|
|
|
949
951
|
.bau-button-primary { background: var(--bau-primary); color: var(--bau-on-primary); border-color: var(--bau-primary); }
|
|
950
952
|
.bau-button-secondary { background: var(--bau-secondary); color: var(--bau-on-secondary); border-color: var(--bau-secondary); }
|
|
951
953
|
.bau-button-danger { background: var(--bau-danger); color: var(--bau-on-danger); border-color: var(--bau-danger); }
|
|
952
|
-
|
|
954
|
+
/** Native palettes need surface ink when the primary fill is too dark for an unfilled action. */
|
|
955
|
+
.bau-button-ghost { background: transparent; color: var(--usk-primary-ink, var(--bau-text)); border-color: transparent; }
|
|
953
956
|
}
|
|
954
957
|
|
|
955
958
|
@layer ui-style-kit.bauhaus {
|
package/styles/bento.css
CHANGED
|
@@ -261,7 +261,7 @@
|
|
|
261
261
|
--usk-native-range-track-shadow: inset 0 1px 2px rgb(var(--bento-text-rgb) / .12);
|
|
262
262
|
--usk-native-range-progress-background: var(--bento-primary);
|
|
263
263
|
--usk-native-range-thumb-size: 1.35rem;
|
|
264
|
-
--usk-native-range-thumb-background: var(--
|
|
264
|
+
--usk-native-range-thumb-background: var(--usk-native-primary);
|
|
265
265
|
--usk-native-range-thumb-border: 1px solid rgb(var(--bento-primary-rgb) / .28);
|
|
266
266
|
--usk-native-range-thumb-radius: .5rem;
|
|
267
267
|
--usk-native-range-thumb-shadow: 0 .35rem .8rem rgb(var(--bento-text-rgb) / .18), inset 0 1px 0 rgb(var(--bento-surface-strong-rgb) / .78);
|
|
@@ -454,7 +454,8 @@
|
|
|
454
454
|
/* Theme-responsive component defaults */
|
|
455
455
|
.bento-card, .bento-panel { background: var(--bento-card-bg); }
|
|
456
456
|
.bento-toolbar, .bento-table-wrap { background: var(--bento-control-bg); }
|
|
457
|
-
|
|
457
|
+
/** Neutral defaults exclude outlined actions so their hover fill and ink remain paired. */
|
|
458
|
+
.bento-button:where(:not(.bento-button-primary):not(.bento-button-secondary):not(.bento-button-danger):not(.bento-button-warning):not(.bento-button-ghost):not(.bento-button-outline-heavy):not(.is-primary):not(.is-secondary):not(.is-danger):not(.is-ghost):not(.is-hover):not(.is-busy)), .bento-icon-button { background: var(--bento-control-bg); }
|
|
458
459
|
.bento-button, .bento-icon-button, .bento-badge, .bento-nav-link { font-family: var(--bento-font-control); }
|
|
459
460
|
|
|
460
461
|
|
|
@@ -500,8 +501,9 @@
|
|
|
500
501
|
.bento-badge { display: inline-flex; align-items: center; gap: var(--bento-space-1); min-height: 1.75rem; padding: .38rem .72rem; background: var(--bento-tile-secondary-bg); color: var(--bento-text); border: 1px solid var(--bento-tile-edge); border-radius: var(--bento-radius-sm); box-shadow: inset 0 1px 0 rgb(var(--bento-surface-strong-rgb) / .62); font-size: .8125rem; font-weight: 800; line-height: 1; }
|
|
501
502
|
.bento-badge-primary { background: var(--bento-primary); color: var(--bento-on-primary); border-color: var(--bento-primary); }
|
|
502
503
|
.bento-badge-secondary { background: rgb(var(--bento-primary-rgb) / .10); color: var(--usk-primary-ink, var(--bento-primary)); border-color: transparent; }
|
|
503
|
-
|
|
504
|
-
.bento-badge-
|
|
504
|
+
/** Warning and success tints use surface text rather than their solid signal fill as ink. */
|
|
505
|
+
.bento-badge-success { background: rgb(var(--bento-success-rgb) / .14); color: var(--bento-text); border-color: transparent; }
|
|
506
|
+
.bento-badge-warning { background: rgb(var(--bento-warning-rgb) / .14); color: var(--bento-text); border-color: transparent; }
|
|
505
507
|
.bento-badge-danger { background: rgb(var(--bento-danger-rgb) / .14); color: var(--bento-danger); border-color: transparent; }
|
|
506
508
|
|
|
507
509
|
.bento-nav { display: flex; flex-wrap: wrap; align-items: center; gap: var(--bento-space-2); padding: var(--bento-space-2); background: var(--bento-card-bg); border: 1px solid var(--bento-tile-edge); border-radius: var(--bento-tile-radius); box-shadow: var(--bento-tile-shadow); }
|
|
@@ -674,7 +676,7 @@
|
|
|
674
676
|
.bento-button.bento-button-outline-heavy,
|
|
675
677
|
.bento-button-outline-heavy {
|
|
676
678
|
background: transparent;
|
|
677
|
-
color: var(--usk-primary-ink, var(--bento-
|
|
679
|
+
color: var(--usk-primary-ink, var(--bento-text));
|
|
678
680
|
border-style: solid;
|
|
679
681
|
border-width: 2px;
|
|
680
682
|
border-color: var(--bento-primary);
|
|
@@ -793,7 +795,8 @@
|
|
|
793
795
|
.bento-card-feature { background: var(--bento-tile-accent-bg); border-radius: var(--bento-tile-radius); }
|
|
794
796
|
.bento-icon-medallion {
|
|
795
797
|
background: rgb(var(--bento-primary-rgb) / .10);
|
|
796
|
-
|
|
798
|
+
/* Translucent tiles use readable surface ink when no shared palette is active. */
|
|
799
|
+
color: var(--usk-primary-ink, var(--bento-link));
|
|
797
800
|
border: 1px solid rgb(var(--bento-primary-rgb) / .20);
|
|
798
801
|
border-radius: var(--bento-radius-md);
|
|
799
802
|
box-shadow: var(--bento-shadow-sm);
|
|
@@ -816,7 +819,7 @@
|
|
|
816
819
|
}
|
|
817
820
|
.bento-button.bento-button-outline-heavy, .bento-button-outline-heavy {
|
|
818
821
|
background: rgb(var(--bento-surface-strong-rgb) / var(--bento-panel-alpha));
|
|
819
|
-
color: var(--usk-primary-ink, var(--bento-
|
|
822
|
+
color: var(--usk-primary-ink, var(--bento-text));
|
|
820
823
|
border-width: 1px;
|
|
821
824
|
border-color: rgb(var(--bento-primary-rgb) / .32);
|
|
822
825
|
border-radius: var(--bento-control-radius);
|
|
@@ -1209,7 +1212,6 @@
|
|
|
1209
1212
|
|
|
1210
1213
|
[data-ui=bento][data-mode] :is(.bento-button, .bento-icon-button) {
|
|
1211
1214
|
align-items: center;
|
|
1212
|
-
background: var(--bento-mosaic-panel-soft);
|
|
1213
1215
|
border: 1px solid var(--bento-mosaic-line);
|
|
1214
1216
|
border-radius: 8px;
|
|
1215
1217
|
display: inline-flex;
|
|
@@ -1220,6 +1222,8 @@
|
|
|
1220
1222
|
padding: 0 16px;
|
|
1221
1223
|
transition: background-color 150ms ease, border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease;
|
|
1222
1224
|
}
|
|
1225
|
+
/** Mosaic neutral paint yields to the outlined CTA's paired hover fill. */
|
|
1226
|
+
[data-ui=bento][data-mode] :is(.bento-button, .bento-icon-button):where(:not(.bento-button-outline-heavy)) { background: var(--bento-mosaic-panel-soft); }
|
|
1223
1227
|
[data-ui=bento][data-mode] .bento-button:hover:not(:disabled) { transform: translateY(-1px); }
|
|
1224
1228
|
[data-ui=bento][data-mode] .bento-button:active:not(:disabled) { transform: translateY(1px); }
|
|
1225
1229
|
[data-ui=bento][data-mode] .bento-button.is-primary,
|
|
@@ -1334,6 +1338,9 @@
|
|
|
1334
1338
|
[data-ui=bento][data-mode] .bento-stepper > i { background: var(--bento-mosaic-line-strong); height: 2px; width: 23px; }
|
|
1335
1339
|
|
|
1336
1340
|
[data-ui=bento][data-mode] .bento-segment { background: var(--bento-mosaic-panel-soft); border: 1px solid var(--bento-mosaic-line); border-radius: 7px; display: grid; grid-template-columns: repeat(3, 1fr); padding: 2px; }
|
|
1341
|
+
/** The public segment button is distinct from the legacy three-column segment container. */
|
|
1342
|
+
[data-ui=bento][data-mode] button.bento-segment { display: inline-flex; grid-template-columns: none; align-items: center; justify-content: center; }
|
|
1343
|
+
[data-ui=bento][data-mode] button.bento-segment[aria-pressed="true"] { background: var(--usk-native-primary); color: var(--usk-native-on-primary); }
|
|
1337
1344
|
[data-ui=bento][data-mode] .bento-segment button { background: transparent; border: 0; border-radius: 5px; color: var(--bento-mosaic-muted); font-size: 12px; min-height: 24px; }
|
|
1338
1345
|
[data-ui=bento][data-mode] .bento-segment button.is-active { background: var(--bento-mosaic-panel-raised); box-shadow: 0 2px 8px rgba(24, 35, 72, 0.1); color: var(--usk-primary-ink, var(--bento-mosaic-primary)); font-weight: 800; }
|
|
1339
1346
|
|
|
@@ -1375,7 +1382,7 @@
|
|
|
1375
1382
|
|
|
1376
1383
|
[data-ui=bento][data-mode] .bento-loading { align-items: center; display: grid; grid-template-columns: 40px 1fr; grid-template-rows: auto 1fr; }
|
|
1377
1384
|
[data-ui=bento][data-mode] .bento-loading > header { width: 100%; }
|
|
1378
|
-
[data-ui=bento][data-mode] .bento-spinner { color: var(--usk-primary-ink, var(--bento-
|
|
1385
|
+
[data-ui=bento][data-mode] .bento-spinner { color: var(--usk-primary-ink, var(--bento-link)); height: 31px; width: 31px; }
|
|
1379
1386
|
[data-ui=bento][data-mode] .bento-spin { animation: bento-mosaic-spin 1s linear infinite; }
|
|
1380
1387
|
@keyframes bento-mosaic-spin { to { transform: rotate(360deg); } }
|
|
1381
1388
|
[data-ui=bento][data-mode] .bento-skeleton { display: grid; gap: 5px; }
|
|
@@ -1443,10 +1450,10 @@
|
|
|
1443
1450
|
[data-ui=bento][data-mode] .bento-dialog-zone { background: var(--bento-primary); border-color: var(--bento-primary); display: grid; grid-template-rows: auto 1fr; padding: 0; }
|
|
1444
1451
|
[data-ui=bento][data-mode] .bento-sheet[data-mode="dark"] .bento-dialog-zone { background: var(--bento-primary); border-color: var(--bento-border); }
|
|
1445
1452
|
[data-ui=bento][data-mode] .bento-dialog-toolbar { align-items: center; border-bottom: 1px solid rgba(255, 255, 255, 0.15); display: flex; justify-content: space-between; padding: 7px 11px; }
|
|
1446
|
-
[data-ui=bento][data-mode] .bento-tabs { display: flex; gap: 3px; }
|
|
1447
|
-
[data-ui=bento][data-mode] .bento-tabs button,
|
|
1453
|
+
[data-ui=bento][data-mode] .bento-dialog-toolbar .bento-tabs { display: flex; gap: 3px; }
|
|
1454
|
+
[data-ui=bento][data-mode] .bento-dialog-toolbar .bento-tabs button,
|
|
1448
1455
|
[data-ui=bento][data-mode] .bento-dialog-toolbar > button { background: transparent; border: 0; border-radius: 6px; color: var(--bento-on-primary); font-size: 12px; min-height: 26px; padding: 0 8px; }
|
|
1449
|
-
[data-ui=bento][data-mode] .bento-tabs button.is-active { background: rgba(255, 255, 255, 0.13); color: var(--bento-on-primary); font-weight: 800; }
|
|
1456
|
+
[data-ui=bento][data-mode] .bento-dialog-toolbar .bento-tabs button.is-active { background: rgba(255, 255, 255, 0.13); color: var(--bento-on-primary); font-weight: 800; }
|
|
1450
1457
|
[data-ui=bento][data-mode] .bento-dialog-surface { align-items: center; display: flex; justify-content: center; padding: 16px; }
|
|
1451
1458
|
[data-ui=bento][data-mode] .bento-dialog-surface dialog { background: var(--bento-mosaic-panel-raised); border: 1px solid var(--bento-mosaic-line); border-radius: 14px; box-shadow: var(--bento-mosaic-shadow-raised); color: var(--bento-mosaic-text); display: block; margin: 0; max-width: 315px; padding: 26px; position: relative; width: 100%; }
|
|
1452
1459
|
[data-ui=bento][data-mode] .bento-dialog-surface dialog:not([open]) { display: none; }
|
|
@@ -1590,7 +1597,9 @@
|
|
|
1590
1597
|
[data-ui=bento][data-mode] .bento-feature-strip, [data-ui=bento][data-mode] .bento-callout-bar { border-radius: 17px; box-shadow: var(--bento-mosaic-shadow); }
|
|
1591
1598
|
[data-ui=bento][data-mode] .bento-card, [data-ui=bento][data-mode] .bento-panel { padding: 16px; }
|
|
1592
1599
|
[data-ui=bento][data-mode] .bento-button, [data-ui=bento][data-mode] .bento-icon-button { border-radius: 8px; box-shadow: none; font-weight: 750; text-shadow: none; }
|
|
1593
|
-
|
|
1600
|
+
/** Attribute-selected variants bypass the legacy neutral-only paint fallback. */
|
|
1601
|
+
/** Neutral defaults exclude outlined actions so their hover fill and ink remain paired. */
|
|
1602
|
+
[data-ui=bento][data-mode] .bento-button:where(:not([data-ui-variant])):not(.bento-button-primary):not(.bento-button-secondary):not(.bento-button-danger):not(.bento-button-warning):not(.bento-button-ghost):not(.bento-button-outline-heavy):not(.is-primary):not(.is-secondary):not(.is-danger):not(.is-ghost):not(.is-busy):not(.is-hover) { background: var(--bento-surface-soft); }
|
|
1594
1603
|
[data-ui=bento][data-mode] .bento-button.bento-button-primary, [data-ui=bento][data-mode] .bento-button.is-primary, [data-ui=bento][data-mode] .bento-button.is-busy { background: var(--bento-primary); color: var(--bento-on-primary); border-color: var(--bento-primary); }
|
|
1595
1604
|
[data-ui=bento][data-mode] .bento-button.bento-button-secondary, [data-ui=bento][data-mode] .bento-button.is-secondary { background: transparent; color: var(--bento-link); border-color: var(--bento-primary); }
|
|
1596
1605
|
[data-ui=bento][data-mode] .bento-button.bento-button-danger, [data-ui=bento][data-mode] .bento-button.is-danger { background: var(--bento-mosaic-danger-soft); color: var(--bento-text); border-color: var(--bento-danger); }
|
|
@@ -1674,7 +1683,7 @@
|
|
|
1674
1683
|
[data-ui=bento][data-mode] .bento-segment button.is-active,
|
|
1675
1684
|
[data-ui=bento][data-mode] .bento-listbox button[aria-selected="true"] { color: var(--bento-link); }
|
|
1676
1685
|
[data-ui=bento][data-mode] .bento-media-scrim > :where(figcaption, [data-media-caption]) * { color: inherit; }
|
|
1677
|
-
[data-ui=bento][data-mode] .bento-tabs button.is-active { background: var(--bento-surface); color: var(--bento-text); }
|
|
1686
|
+
[data-ui=bento][data-mode] .bento-dialog-toolbar .bento-tabs button.is-active { background: var(--bento-surface); color: var(--bento-text); }
|
|
1678
1687
|
[data-ui=bento][data-mode] .bento-switch-row { min-height: 32px; }
|
|
1679
1688
|
[data-ui=bento][data-mode] .bento-sheet .bento-switch:where(button, span) { flex: 0 0 37px; padding: 2px; min-height: 20px; }
|
|
1680
1689
|
[data-ui=bento][data-mode] .bento-segment button { min-height: 36px; padding: 4px; }
|
|
@@ -1688,8 +1697,10 @@
|
|
|
1688
1697
|
[data-ui=bento][data-mode] .bento-loading-spinner,
|
|
1689
1698
|
[data-ui=bento][data-mode] :where(.ui-spinner, .loading-spinner, [data-loading-spinner]),
|
|
1690
1699
|
[data-ui=bento][data-mode] .bento-sheet .bento-spinner { border: 2px solid currentColor; border-top-color: transparent; background: transparent; clip-path: none; border-radius: 50%; box-shadow: none; animation: bento-mosaic-spin 1s linear infinite; width: 28px; height: 28px; inline-size: 28px; block-size: 28px; flex: 0 0 auto; }
|
|
1691
|
-
/**
|
|
1692
|
-
[data-ui=bento][data-mode]
|
|
1700
|
+
/** Every loading entry point uses the same readable ink, including native palettes. */
|
|
1701
|
+
[data-ui=bento][data-mode] .bento-spinner,
|
|
1702
|
+
[data-ui=bento][data-mode] .bento-loading-spinner,
|
|
1703
|
+
[data-ui=bento][data-mode] :where(.ui-spinner, .loading-spinner, [data-loading-spinner]) { color: var(--usk-primary-ink, var(--bento-link)); }
|
|
1693
1704
|
[data-ui=bento][data-mode] .bento-spinner-sm { width: 16px; height: 16px; inline-size: 16px; block-size: 16px; }
|
|
1694
1705
|
[data-ui=bento][data-mode] .bento-spinner-lg { width: 40px; height: 40px; inline-size: 40px; block-size: 40px; }
|
|
1695
1706
|
/** Keeps native busy controls on the same Soft Mosaic ring as authored button aliases. */
|