@splendidlabz/styles 4.10.1 → 4.12.0

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.
Files changed (43) hide show
  1. package/README.md +86 -0
  2. package/package.json +12 -6
  3. package/src/base.css +15 -0
  4. package/src/components/astro/fancylist.css +22 -24
  5. package/src/components/bundle-astro.css +7 -0
  6. package/src/components/bundle-svelte.css +7 -0
  7. package/src/components/css/button.css +40 -0
  8. package/src/{form → components/css/forms}/index.css +0 -1
  9. package/src/components/css/index.css +2 -0
  10. package/src/components/css/typography/font-position.css +16 -0
  11. package/src/effects/bundle.css +5 -0
  12. package/src/effects/index.css +2 -1
  13. package/src/generic/anchors-and-buttons.css +3 -40
  14. package/src/generic/form.css +11 -0
  15. package/src/layouts/bundle.css +5 -0
  16. package/src/layouts/index.css +1 -1
  17. package/src/styles.css +9 -6
  18. package/src/theming.css +7 -0
  19. package/src/tools/interact.css +8 -15
  20. package/src/tools/object.css +6 -1
  21. package/src/tools/outlines.css +16 -21
  22. package/src/tools/pigment.css +11 -15
  23. package/src/tools/scaffolds.css +16 -5
  24. package/src/tools/transitions.css +5 -4
  25. package/src/utilities.css +11 -0
  26. package/src/variables/variables.css +2 -2
  27. package/dist/no-tw/layouts.css +0 -1895
  28. package/dist/no-tw/styles.css +0 -3094
  29. package/src/effects/testgb.css +0 -372
  30. package/src/form/textarea.css +0 -38
  31. package/src/type/font-position.css +0 -18
  32. /package/src/{form → components/css/forms}/checkbox-and-radio.css +0 -0
  33. /package/src/{form → components/css/forms}/input.css +0 -0
  34. /package/src/{form → components/css/forms}/select.css +0 -0
  35. /package/src/{type → components/css/typography}/font.css +0 -0
  36. /package/src/{type → components/css/typography}/index.css +0 -0
  37. /package/src/{type → components/css/typography}/text-edge.css +0 -0
  38. /package/src/{type → components/css/typography}/text-relative.css +0 -0
  39. /package/src/{animation → effects/animation}/animation.css +0 -0
  40. /package/src/{animation → effects/animation}/fly.css +0 -0
  41. /package/src/{animation → effects/animation}/index.css +0 -0
  42. /package/src/{transitions → effects/transitions}/index.css +0 -0
  43. /package/src/{transitions → effects/transitions}/starting-style.css +0 -0
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # @splendidlabz/styles
2
+
3
+ Splendid Labz styles for Tailwind CSS v4.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @splendidlabz/styles
9
+ ```
10
+
11
+ ## The quickest way — everything
12
+
13
+ ```css
14
+ @import 'tailwindcss';
15
+ @import '@splendidlabz/styles';
16
+ ```
17
+
18
+ That's the whole system: reset, theme, styled HTML, utilities, and the CSS components (`prose`, `card`, `table`, and friends). Tailwind tree-shakes whatever you don't use, so most projects want this and nothing else.
19
+
20
+ ## Keep your own reset — just the classes
21
+
22
+ Already have your own reset and base styles? Take Splendid's utilities and components without letting it touch your HTML:
23
+
24
+ ```css
25
+ @import 'tailwindcss';
26
+ @import '@splendidlabz/styles/utilities';
27
+ @import '@splendidlabz/styles/components/css';
28
+ ```
29
+
30
+ `utilities` is the same utility classes as above with no reset and no element styling. `components/css` adds the opt-in component classes. Nothing renders differently until you reach for a class.
31
+
32
+ ## Using Splendid's Astro or Svelte components
33
+
34
+ If you're pulling in components from `@splendidlabz/astro` or `@splendidlabz/svelte`, there are two extra things to wire up:
35
+
36
+ ```css
37
+ /* 1. Point Tailwind at the packages so it scans their class names —
38
+ they live in node_modules, which Tailwind skips by default. */
39
+ @source "../node_modules/@splendidlabz/astro";
40
+ @source "../node_modules/@splendidlabz/svelte";
41
+
42
+ @import 'tailwindcss';
43
+
44
+ /* 2. A base + the framework component styles. */
45
+ @import '@splendidlabz/styles/base';
46
+ @import '@splendidlabz/styles/components/astro'; /* or /components/svelte */
47
+ ```
48
+
49
+ Use `base`, not the full `@splendidlabz/styles`. The full import already carries the CSS components, and `/components/astro` brings them along too — so pairing them gives you two copies. `base` is the reset and styling *without* the components, and the framework layer fills them in once.
50
+
51
+ ## Without Tailwind's preflight
52
+
53
+ Splendid ships its own reset, so you can drop Tailwind's. Import Tailwind's theme and utilities on their own instead of the whole thing, and set the layer order so Splendid's reset lands first:
54
+
55
+ ```css
56
+ @layer reset, theme, base, components, utilities;
57
+
58
+ @import 'tailwindcss/theme.css' layer(theme);
59
+ @import 'tailwindcss/utilities.css' layer(utilities);
60
+
61
+ @import '@splendidlabz/styles';
62
+ ```
63
+
64
+ Everything else works the same — this just replaces `@import 'tailwindcss'`.
65
+
66
+ ## Two things that'll bite you
67
+
68
+ - **One base at a time.** `@splendidlabz/styles`, `base`, and `utilities` all overlap. Import two of them and you get two copies of the shared parts — Tailwind v4 doesn't merge repeated imports. Pick one.
69
+ - **Component layers need a base under them.** `components/css`, `components/astro`, and `components/svelte` can't stand alone — on their own they have nothing to resolve against and the build fails. Any of the three bases covers them; import order doesn't matter.
70
+
71
+ ## Every entry point
72
+
73
+ | Import | What you get |
74
+ | ---------------------- | ---------------------------------------------------------- |
75
+ | `@splendidlabz/styles` | Everything — reset, styled HTML, utilities, CSS components |
76
+ | `…/base` | Reset, styled HTML, utilities — no components |
77
+ | `…/utilities` | Utilities only — leaves your HTML alone |
78
+ | `…/components/css` | CSS component classes (`prose`, `card`, …) |
79
+ | `…/components/astro` | Astro component styles (includes CSS components) |
80
+ | `…/components/svelte` | Svelte component styles (includes CSS components) |
81
+ | `…/components` | All component styles — css, astro, svelte |
82
+ | `…/layouts` | Layout utilities (already in every base) |
83
+ | `…/effects` | Effects, animation, transitions (already in every base) |
84
+ | `…/tools` | The `@apply` / `@variant` helpers |
85
+ | `…/theming` | `@theme` tokens plus color/pigment |
86
+ | `…/variables` | `@theme` tokens on their own |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@splendidlabz/styles",
3
- "version": "4.10.1",
3
+ "version": "4.12.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "homepage": "https://splendidlabz.com/docs/styles",
@@ -12,18 +12,24 @@
12
12
  ],
13
13
  "exports": {
14
14
  ".": "./src/styles.css",
15
+ "./base": "./src/base.css",
16
+ "./utilities": "./src/utilities.css",
17
+ "./tools": "./src/tools/index.css",
18
+ "./layouts": "./src/layouts/bundle.css",
19
+ "./effects": "./src/effects/bundle.css",
20
+ "./variables": "./src/variables/index.css",
21
+ "./theming": "./src/theming.css",
15
22
  "./components": "./src/components/index.css",
16
- "./layouts": "./src/layouts/direct.css",
23
+ "./components/css": "./src/components/css/index.css",
24
+ "./components/astro": "./src/components/bundle-astro.css",
25
+ "./components/svelte": "./src/components/bundle-svelte.css",
17
26
  "./pigment": "./src/tools/pigment.css",
18
27
  "./scripts": "./scripts/index.js",
19
28
  "./scripts/*": "./scripts/*.js"
20
29
  },
21
30
  "scripts": {
22
31
  "lint": "stylelint '**/*.{css,scss}' --fix",
23
- "lightning": "lightningcss --bundle --targets \">= 0.25%\" ./src/styles.css -o dist/styles.css",
24
- "build-styles": "npx @tailwindcss/cli -i ./no-tailwind/index.css -o ./dist/no-tw/styles.css",
25
- "build-layouts": "npx @tailwindcss/cli -i ./no-tailwind/layouts.css -o ./dist/no-tw/layouts.css",
26
- "build": "npm run build-styles & npm run build-layouts"
32
+ "lightning": "lightningcss --bundle --targets \">= 0.25%\" ./src/styles.css -o dist/styles.css"
27
33
  },
28
34
  "dependencies": {
29
35
  "@splendidlabz/utils": "*"
package/src/base.css ADDED
@@ -0,0 +1,15 @@
1
+ /* Opinionated foundation: everything except the CSS/framework components.
2
+ Restyles bare HTML (reset + generic) and registers every utility group
3
+ (tools, layouts, effects), all tree-shaken. This is the foundation that
4
+ powers `base + components/*`. Use base OR utilities, never both. */
5
+
6
+ @import './tools/index.css';
7
+ /* button is a @utility (foundation-level): generic @applies it to bare
8
+ <button>, and framework components @apply button-icon. */
9
+ @import './components/css/button.css';
10
+ @import './reset.css' layer(reset);
11
+ @import './layout-reset.css' layer(reset);
12
+ @import './variables/index.css';
13
+ @import './generic/index.css';
14
+ @import './layouts/index.css';
15
+ @import './effects/index.css';
@@ -1,33 +1,31 @@
1
1
  @utility fancylist {
2
- & {
3
- --svg-width: 1em;
4
- --svg-height: 1lh;
5
- display: grid;
2
+ --svg-width: 1em;
3
+ --svg-height: 1lh;
4
+ display: grid;
6
5
 
7
- /* grid-template-columns: auto 1fr; */
8
- column-gap: 0.5em;
6
+ /* grid-template-columns: auto 1fr; */
7
+ column-gap: 0.5em;
9
8
 
10
- :where(li) {
11
- grid-column: 1 / -1;
12
- display: grid;
9
+ :where(li) {
10
+ grid-column: 1 / -1;
11
+ display: grid;
13
12
 
14
- /* grid-template-columns: subgrid; */
15
- grid-template-columns: auto 1fr;
16
- column-gap: inherit;
13
+ /* grid-template-columns: subgrid; */
14
+ grid-template-columns: auto 1fr;
15
+ column-gap: inherit;
17
16
 
18
- /* Positions the Emoji */
19
- /* This is kind of brute-forced at the moment. */
20
- :where(.emoji),
21
- > :where(astro-slot, astro-island) > :where(.emoji) {
22
- font-size: 0.75em;
23
- line-height: 1lh;
24
- }
17
+ /* Positions the Emoji */
18
+ /* This is kind of brute-forced at the moment. */
19
+ :where(.emoji),
20
+ > :where(astro-slot, astro-island) > :where(.emoji) {
21
+ font-size: 0.75em;
22
+ line-height: 1lh;
23
+ }
25
24
 
26
- :where(ul) {
27
- grid-column: 2;
28
- display: grid;
29
- column-gap: inherit;
30
- }
25
+ :where(ul) {
26
+ grid-column: 2;
27
+ display: grid;
28
+ column-gap: inherit;
31
29
  }
32
30
  }
33
31
  }
@@ -0,0 +1,7 @@
1
+ /* Astro component styles + the CSS components they @apply (prose, etc.).
2
+ Pure layer — no tools/layouts/button. Import a foundation first
3
+ (base or utilities), or these @applies won't resolve. Astro class names may
4
+ clash with common component names — opt in deliberately. */
5
+
6
+ @import './css/index.css';
7
+ @import './astro/index.css';
@@ -0,0 +1,7 @@
1
+ /* Svelte component styles + the CSS components they @apply (prose, button-icon).
2
+ Pure layer — no tools/layouts/button. Import a foundation first
3
+ (base or utilities), or these @applies won't resolve. Svelte class names may
4
+ clash with common component names — opt in deliberately. */
5
+
6
+ @import './css/index.css';
7
+ @import './svelte/index.css';
@@ -0,0 +1,40 @@
1
+ @utility button {
2
+ & {
3
+ @apply pigment-with-svg;
4
+ flex-shrink: 0; /* Prevents button from shrinking when used in flex elements */
5
+ display: inline-flex;
6
+ justify-content: center;
7
+ align-items: center;
8
+ gap: 0.5em;
9
+ max-width: 100%;
10
+ padding: 0.125lh 0.75lh;
11
+ font: inherit;
12
+ text-decoration-line: none !important;
13
+
14
+ &[disabled] {
15
+ cursor: default;
16
+ }
17
+
18
+ * {
19
+ pointer-events: none;
20
+ }
21
+
22
+ svg path {
23
+ @apply transition-scaffold;
24
+ transition: var(--transition-values);
25
+ transition-property: var(--transition-props);
26
+ }
27
+ }
28
+ }
29
+
30
+ @utility button-icon {
31
+ & {
32
+ padding: 0.5em;
33
+ }
34
+ }
35
+
36
+ @utility button-round {
37
+ & {
38
+ border-radius: 50%;
39
+ }
40
+ }
@@ -1,4 +1,3 @@
1
1
  @import './input.css';
2
- @import './textarea.css';
3
2
  @import './select.css';
4
3
  @import './checkbox-and-radio.css';
@@ -9,3 +9,5 @@
9
9
  @import './table.css';
10
10
  @import './writing-mode.css';
11
11
  @import './strikethrough.css';
12
+ @import './forms/index.css';
13
+ @import './typography/index.css';
@@ -0,0 +1,16 @@
1
+ /* --font-position-adjust: 1;
2
+ --padding-block: 1em; */
3
+
4
+ @utility font-position {
5
+ > .font-position-adjust,
6
+ &:not(:has(.font-position-adjust)) {
7
+ padding-block: calc(
8
+ var(--padding-block, 1em) * var(--font-position-adjust, 1)
9
+ )
10
+ calc(var(--padding-block, 1em) / var(--font-position-adjust, 1));
11
+ }
12
+
13
+ &:has(.font-position-adjust) {
14
+ padding-block: 0;
15
+ }
16
+ }
@@ -0,0 +1,5 @@
1
+ /* Standalone effects: tools (effects @apply border-scaffold, transition-scaffold)
2
+ + the effect utilities (incl. animation + transitions). Self-contained. */
3
+
4
+ @import '../tools/index.css';
5
+ @import './index.css';
@@ -1,8 +1,9 @@
1
+ @import './animation/index.css';
2
+ @import './transitions/index.css';
1
3
  @import './elevation.css';
2
4
  @import './gradients.css';
3
5
  @import './fancybox.css';
4
6
  @import './bezel.css';
5
- @import './testgb.css';
6
7
  @import './highlight.css';
7
8
  @import './shadows.css';
8
9
  @import './text.css';
@@ -1,43 +1,6 @@
1
- @utility button {
2
- & {
3
- @apply pigment-with-svg;
4
- flex-shrink: 0; /* Prevents button from shrinking when used in flex elements */
5
- display: inline-flex;
6
- justify-content: center;
7
- align-items: center;
8
- gap: 0.5em;
9
- max-width: 100%;
10
- padding: 0.125lh 0.75lh;
11
- font: inherit;
12
- text-decoration-line: none !important;
13
-
14
- &[disabled] {
15
- cursor: default;
16
- }
17
-
18
- * {
19
- pointer-events: none;
20
- }
21
-
22
- svg path {
23
- @apply transition-scaffold;
24
- transition: var(--transition-values);
25
- transition-property: var(--transition-props);
26
- }
27
- }
28
- }
29
-
30
- @utility button-icon {
31
- & {
32
- padding: 0.5em;
33
- }
34
- }
35
-
36
- @utility button-round {
37
- & {
38
- border-radius: 50%;
39
- }
40
- }
1
+ /* button / button-icon / button-round utilities live in components/css/button.css.
2
+ The base layer below `@apply`s `button`; whichever bundle includes this file
3
+ must also register button.css (styles.css via components/css, base.css directly). */
41
4
 
42
5
  @layer base {
43
6
  a {
@@ -1,8 +1,19 @@
1
+ @theme {
2
+ --textarea-height: 6lh;
3
+ }
4
+
1
5
  @layer base {
2
6
  fieldset {
3
7
  border: none;
4
8
  }
5
9
 
10
+ textarea {
11
+ min-height: var(--textarea-height);
12
+ resize: vertical;
13
+ /* stylelint-disable-next-line */
14
+ field-sizing: normal; /* Allows textarea to auto */
15
+ }
16
+
6
17
  /* Text inputs */
7
18
  input:where(
8
19
  [type='text'],
@@ -0,0 +1,5 @@
1
+ /* Standalone layouts: tools (for @variant interact-within etc.) + layout reset
2
+ + the layout utilities. Self-contained; imports tools once. */
3
+
4
+ @import '../tools/index.css';
5
+ @import './direct.css';
@@ -1,4 +1,4 @@
1
- /* Micro needs to come first
1
+ /* Micro needs to come first
2
2
  because it contains vertical that macro uses */
3
3
  @import './micro/index.css';
4
4
  @import './shell/index.css';
package/src/styles.css CHANGED
@@ -1,17 +1,20 @@
1
1
  /* Splendid Styles */
2
2
 
3
+ /* Canonical full bundle = the base foundation + CSS components. tools/layouts/
4
+ effects/button are registered once here; the pure component bodies below do
5
+ not re-import them. Don't compose this file from base.css + components (base
6
+ also imports button — that would duplicate it). For framework components on
7
+ top of everything, use `base + components/astro`, not this bundle. */
8
+
9
+ @import './tools/index.css';
10
+ @import './components/css/button.css';
3
11
  @import './reset.css' layer(reset);
4
12
  @import './layout-reset.css' layer(reset);
5
13
  @import './variables/index.css';
6
- @import './tools/index.css';
7
14
  @import './generic/index.css';
8
- @import './form/index.css';
9
- @import './components/css/index.css';
10
15
  @import './layouts/index.css';
11
- @import './type/index.css';
12
16
  @import './effects/index.css';
13
- @import './transitions/index.css';
14
- @import './animation/index.css';
17
+ @import './components/css/index.css';
15
18
 
16
19
  /* Addons */
17
20
  /* @import './components/index.css'; */
@@ -0,0 +1,7 @@
1
+ /* Theming layer: the @theme design tokens plus the tools that produce/consume
2
+ them (color, pigment, scaffolds). Full tools is included because pigment
3
+ @applies transition-scaffold / border-scaffold from sibling tool files.
4
+ No reset or generic element styling — safe to drop into an existing project. */
5
+
6
+ @import './variables/index.css';
7
+ @import './tools/index.css';
@@ -14,22 +14,15 @@
14
14
 
15
15
  @custom-variant interact-within {
16
16
  &:hover,
17
- &:focus-visible,
18
- &.selected,
19
- &.checked,
20
- &[aria-current],
21
- &[aria-selected='true'],
22
- &[aria-pressed='true'],
23
- &[aria-expanded='true'],
24
- &:has(:focus-visible),
17
+ &:focus-within,
25
18
  &:has(
26
- .selected,
27
- .checked,
28
- [aria-current],
29
- [aria-selected='true'],
30
- [aria-pressed='true'],
31
- [aria-expanded='true']
32
- ) {
19
+ .selected,
20
+ .checked,
21
+ [aria-current],
22
+ [aria-selected='true'],
23
+ [aria-pressed='true'],
24
+ [aria-expanded='true']
25
+ ) {
33
26
  @slot;
34
27
  }
35
28
  }
@@ -1,5 +1,10 @@
1
- /* Object doesn't work correctly in Safari unless height is given. https://stackoverflow.com/questions/60192601/object-fit-cover-not-working-correctly-on-safari */
1
+ /* Pins an image to fill and cover its positioned parent, so the parent's
2
+ content sets the height. Width/height are needed for object-fit to work in
3
+ Safari: https://stackoverflow.com/questions/60192601/object-fit-cover-not-working-correctly-on-safari */
2
4
  @utility object-background {
5
+ position: absolute;
6
+ z-index: -1;
7
+ inset: 0;
3
8
  width: 100%;
4
9
  height: 100%;
5
10
  object-fit: cover;
@@ -4,29 +4,26 @@
4
4
  *********************/
5
5
 
6
6
  @utility outline-scaffold {
7
- & {
8
- outline: var(--outline-width) var(--outline-style)
9
- var(--outline-color, transparent);
10
- outline-offset: var(--outline-offset);
7
+ outline: var(--outline-width) var(--outline-style)
8
+ var(--outline-color, transparent);
9
+ outline-offset: var(--outline-offset);
11
10
 
12
- &:focus-visible {
13
- outline-color: var(--outline-focus-color);
14
- }
11
+ &:focus-visible {
12
+ outline-color: var(--outline-focus-color);
15
13
  }
16
14
  }
17
15
 
18
16
  @utility focus-within {
19
- & {
20
- outline: var(--outline-width) var(--outline-style) transparent;
21
- outline-offset: var(--outline-offset);
17
+ outline: var(--outline-width) var(--outline-style) transparent;
18
+ outline-offset: var(--outline-offset);
22
19
 
23
- &:focus-within {
24
- outline-color: var(--outline-focus-color);
25
- }
20
+ &:focus-within {
21
+ outline-color: var(--outline-focus-color);
22
+ }
26
23
 
27
- > * {
28
- --outline-color: transparent;
29
- }
24
+ /* Removes all outlines within the element */
25
+ * {
26
+ --outline-focus-color: transparent;
30
27
  }
31
28
  }
32
29
 
@@ -37,9 +34,7 @@
37
34
  - content-box is necessary, if not present, box will be cut on the right side
38
35
  *********************/
39
36
  @utility preserve-outlines {
40
- & {
41
- box-sizing: content-box;
42
- margin: calc(var(--outline-width) * -1);
43
- padding: calc(var(--outline-width));
44
- }
37
+ box-sizing: content-box;
38
+ margin: calc(var(--outline-width) * -1);
39
+ padding: calc(var(--outline-width));
45
40
  }
@@ -30,27 +30,23 @@ Usage with the Fill System
30
30
  * Pigment scaffolds *
31
31
  *********************/
32
32
  @utility pigment-scaffold {
33
- & {
34
- @apply transition-scaffold;
35
- --_bgc: var(--bg-color);
36
- --_tc: var(--text-color, currentcolor);
37
- --_bc: var(--border-color, currentcolor);
38
- border-color: var(--_bc, currentcolor);
39
- color: var(--_tc);
40
- background: var(--_bgc);
41
- }
33
+ @apply transition-scaffold;
34
+ --_bgc: var(--bg-color);
35
+ --_tc: var(--text-color, currentcolor);
36
+ --_bc: var(--border-color, currentcolor);
37
+ border-color: var(--_bc, currentcolor);
38
+ color: var(--_tc);
39
+ background: var(--_bgc);
42
40
  }
43
41
 
44
42
  @utility pigment-svg-scaffold {
45
43
  --_fc: var(--fill-color);
46
44
  --_sc: var(--stroke-color, var(--text-color, currentcolor));
47
45
 
48
- & {
49
- :where(svg path) {
50
- @apply transition-scaffold;
51
- fill: var(--_fc, revert-layer);
52
- stroke: var(--_sc, currentcolor);
53
- }
46
+ :where(svg path) {
47
+ @apply transition-scaffold;
48
+ fill: var(--_fc, revert-layer);
49
+ stroke: var(--_sc, currentcolor);
54
50
  }
55
51
  }
56
52
 
@@ -17,11 +17,14 @@
17
17
  border-radius: var(--radius);
18
18
  }
19
19
 
20
- @utility radius-* {
21
- --radius: --value([length]);
22
- --radius: --spacing(--value(number));
23
- }
24
-
20
+ /* @utility border-* {
21
+ border-width: --spacing(--value(number));
22
+ border-width: --value([length]);
23
+ } */
24
+
25
+ /*********************
26
+ * Rounded *
27
+ *********************/
25
28
  @utility rounded-* {
26
29
  border-radius: --spacing(--value(number));
27
30
  }
@@ -117,3 +120,11 @@
117
120
  border-bottom-right-radius: --spacing(--value(integer));
118
121
  }
119
122
  }
123
+
124
+ /*********************
125
+ * Radius *
126
+ *********************/
127
+ @utility radius-* {
128
+ --radius: --value([length]);
129
+ --radius: --spacing(--value(number));
130
+ }
@@ -11,7 +11,7 @@
11
11
  --transition-values: var(--transition-duration) var(--transition-delay)
12
12
  var(--transition-easing);
13
13
  --transition-props:
14
- background, border-color, color, display, fill, opacity, outline, stroke,
14
+ background-color, border-color, color, fill, stroke, opacity, outline,
15
15
  transform, translate, scale, rotate, skew, perspective;
16
16
  transition: var(--transition-values);
17
17
  transition-property: var(--transition-props);
@@ -20,9 +20,10 @@
20
20
  @utility transition-scaffold-extended {
21
21
  @apply transition-scaffold;
22
22
  --transition-props:
23
- backdrop-filter, background, border-color, color, display, fill, filter,
24
- gap, opacity, outline, overlay, stroke, transform, translate, scale, rotate,
25
- skew, perspective;
23
+ backdrop-filter, background-color, border-color, color, display, fill,
24
+ filter, gap, opacity, outline, overlay, stroke, transform, translate, scale,
25
+ rotate, skew, perspective;
26
+ transition-behavior: allow-discrete;
26
27
  }
27
28
 
28
29
  @utility transition-svg {
@@ -0,0 +1,11 @@
1
+ /* Un-opinionated foundation: every utility group (tools, layouts, effects)
2
+ with no reset or bare-HTML restyle. Same build primitives as base, minus the
3
+ opinionated element styling — powers `utilities + components/*`. Unused
4
+ utilities are tree-shaken. Use base OR utilities, never both. */
5
+
6
+ @import './tools/index.css';
7
+ @import './layouts/index.css';
8
+ @import './effects/index.css';
9
+ /* button is a @utility (foundation-level) so framework components layered on
10
+ this foundation can @apply button-icon. */
11
+ @import './components/css/button.css';
@@ -10,7 +10,7 @@
10
10
  --border-width: 1px;
11
11
  --border-style: solid;
12
12
  --border-color: currentcolor;
13
- --radius: 0.5rem;
13
+ --radius: calc(var(--spacing) * 2);
14
14
 
15
15
  /* Outline */
16
16
  --outline-width: 2px;
@@ -21,7 +21,7 @@
21
21
  /* Transition */
22
22
  --transition-duration: 200ms;
23
23
  --transition-delay: 0ms;
24
- --transition-easing: ease-in-out;
24
+ --transition-easing: ease-out;
25
25
 
26
26
  /* Forms */
27
27
  --input-font: inherit;