actual-css 0.7.0 → 0.9.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 (144) hide show
  1. package/CHANGELOG.md +217 -0
  2. package/README.md +13 -11
  3. package/components.json +668 -0
  4. package/dist/actual.css +166 -37
  5. package/dist/actual.full.css +1087 -643
  6. package/dist/actual.full.js +1 -1
  7. package/dist/actual.full.min.css +1 -1
  8. package/dist/actual.js +1 -1
  9. package/dist/actual.min.css +1 -1
  10. package/docs/design-notes/accessibility-decisions.md +33 -0
  11. package/docs/design-notes/browser-support.md +62 -30
  12. package/docs/design-notes/column-layout.md +3 -3
  13. package/docs/design-notes/css-anchor.md +75 -21
  14. package/docs/design-notes/enhancement-contract.md +14 -6
  15. package/docs/design-notes/grid.md +4 -4
  16. package/docs/design-notes/naming.md +6 -1
  17. package/docs/design-notes/platform-alignment.md +53 -7
  18. package/docs/design-notes/popover-manual-poc.md +105 -25
  19. package/docs/design-notes/surface-reparenting.md +56 -47
  20. package/docs/design-notes/tooltip-coordinate-space.md +132 -0
  21. package/docs/design-notes/widget-primitives.md +7 -4
  22. package/docs/pages/components/accordion.md +41 -2
  23. package/docs/pages/components/alert.md +85 -30
  24. package/docs/pages/components/app-navigation.md +6 -0
  25. package/docs/pages/components/avatar.md +6 -6
  26. package/docs/pages/components/badge.md +101 -16
  27. package/docs/pages/components/button.md +16 -8
  28. package/docs/pages/components/card.md +10 -10
  29. package/docs/pages/components/dialog.md +21 -6
  30. package/docs/pages/components/drawer.md +13 -0
  31. package/docs/pages/components/fab.md +4 -3
  32. package/docs/pages/components/list.md +42 -4
  33. package/docs/pages/components/navbar.md +17 -1
  34. package/docs/pages/components/pagination.md +2 -2
  35. package/docs/pages/components/skeleton.md +3 -1
  36. package/docs/pages/components/steps.md +19 -0
  37. package/docs/pages/components/table.md +3 -2
  38. package/docs/pages/enhancements/flyout.md +82 -38
  39. package/docs/pages/enhancements/overview.md +25 -0
  40. package/docs/pages/enhancements/status-bar.md +1 -1
  41. package/docs/pages/enhancements/tabs.md +45 -37
  42. package/docs/pages/enhancements/tooltip.md +36 -10
  43. package/docs/pages/examples/overview.md +38 -5
  44. package/docs/pages/forms/choice-cards.md +11 -6
  45. package/docs/pages/forms/combobox.md +1 -1
  46. package/docs/pages/forms/floating-field.md +4 -3
  47. package/docs/pages/forms/joined-controls.md +22 -0
  48. package/docs/pages/forms/otp.md +2 -1
  49. package/docs/pages/forms/overview.md +1 -1
  50. package/docs/pages/forms/states-and-sizes.md +16 -18
  51. package/docs/pages/forms/sticky-actions.md +2 -2
  52. package/docs/pages/forms/switch.md +1 -1
  53. package/docs/pages/foundations/philosophy.md +57 -26
  54. package/docs/pages/foundations/theming.md +2 -2
  55. package/docs/pages/foundations/tokens.md +118 -21
  56. package/docs/pages/foundations/typography.md +35 -14
  57. package/docs/pages/guides/introduction.md +11 -9
  58. package/docs/pages/guides/progressive-enhancement.md +115 -30
  59. package/docs/pages/guides/tailwind.md +3 -2
  60. package/docs/pages/layout/media.md +1 -1
  61. package/docs/pages/layout/overview.md +11 -1
  62. package/docs/pages/layout/scroll-snap.md +3 -3
  63. package/docs/pages/layout/stack.md +17 -9
  64. package/docs/pages/patterns/icon-input.md +4 -2
  65. package/docs/pages/patterns/icon-slot.md +2 -0
  66. package/docs/pages/patterns/intent-nesting.md +1 -1
  67. package/docs/pages/utilities/overview.md +23 -2
  68. package/docs/pages/utilities/sizing-wrapping.md +1 -1
  69. package/docs/pages/utilities/spacing.md +10 -8
  70. package/llms.txt +2 -1
  71. package/package.json +159 -149
  72. package/{scripts/reserved-classes.json → reserved-classes.json} +4 -6
  73. package/src/css/components/accordion.css +42 -3
  74. package/src/css/components/alert.css +25 -13
  75. package/src/css/components/app-nav.css +18 -8
  76. package/src/css/components/avatar.css +13 -1
  77. package/src/css/components/badge.css +78 -12
  78. package/src/css/components/breadcrumb.css +2 -3
  79. package/src/css/components/button.css +9 -16
  80. package/src/css/components/card.css +9 -2
  81. package/src/css/components/chat.css +1 -0
  82. package/src/css/components/data-list.css +1 -1
  83. package/src/css/components/drawer.css +101 -32
  84. package/src/css/components/fab.css +0 -6
  85. package/src/css/components/flyout.css +35 -98
  86. package/src/css/components/index.css +0 -1
  87. package/src/css/components/indicator.css +21 -0
  88. package/src/css/components/key.css +10 -0
  89. package/src/css/components/list.css +40 -4
  90. package/src/css/components/menu.css +2 -1
  91. package/src/css/components/modal.css +48 -33
  92. package/src/css/components/navbar.css +37 -4
  93. package/src/css/components/pagination.css +1 -0
  94. package/src/css/components/skeleton.css +15 -4
  95. package/src/css/components/spinner.css +6 -6
  96. package/src/css/components/status-bar.css +0 -5
  97. package/src/css/components/steps.css +45 -59
  98. package/src/css/components/tab.css +29 -9
  99. package/src/css/components/table.css +13 -5
  100. package/src/css/components/tooltip.css +36 -40
  101. package/src/css/core/base.css +23 -1
  102. package/src/css/core/intents.css +17 -6
  103. package/src/css/core/theme.css +27 -0
  104. package/src/css/core/tokens.css +35 -15
  105. package/src/css/core/variants.css +64 -15
  106. package/src/css/forms/choice-card.css +4 -4
  107. package/src/css/forms/choice.css +76 -29
  108. package/src/css/forms/control.css +2 -1
  109. package/src/css/forms/floating-field.css +3 -3
  110. package/src/css/forms/form.css +4 -3
  111. package/src/css/forms/input-icon.css +20 -14
  112. package/src/css/forms/native.css +6 -1
  113. package/src/css/forms/otp.css +9 -1
  114. package/src/css/forms/range.css +2 -0
  115. package/src/css/forms/select.css +29 -9
  116. package/src/css/forms/switch.css +28 -8
  117. package/src/css/layout/app-layout.css +1 -1
  118. package/src/css/layout/grid.css +50 -76
  119. package/src/css/layout/scroll-snap.css +11 -7
  120. package/src/css/layout/scroller.css +3 -4
  121. package/src/css/layout/stack.css +2 -2
  122. package/src/css/typography/fluid.css +4 -3
  123. package/src/css/typography/prose.css +6 -5
  124. package/src/css/utilities/base.css +2 -1
  125. package/src/css/utilities/extra.css +20 -17
  126. package/src/js/context-menu.js +27 -26
  127. package/src/js/dialog.js +2 -1
  128. package/src/js/dismiss.js +5 -0
  129. package/src/js/enhance.js +34 -2
  130. package/src/js/enhancement-loader.js +36 -43
  131. package/src/js/events.js +0 -3
  132. package/src/js/filter.js +0 -1
  133. package/src/js/floating-space.js +42 -0
  134. package/src/js/flyout.js +9 -44
  135. package/src/js/focus-group.js +7 -0
  136. package/src/js/focus.js +6 -0
  137. package/src/js/menu.js +10 -1
  138. package/src/js/selectors.js +5 -9
  139. package/src/js/status.js +6 -5
  140. package/src/js/surface.js +97 -139
  141. package/src/js/tab.js +6 -1
  142. package/src/js/tooltip.js +150 -51
  143. package/src/js/validation.js +1 -1
  144. package/src/css/components/surface.css +0 -49
package/package.json CHANGED
@@ -1,149 +1,159 @@
1
- {
2
- "name": "actual-css",
3
- "version": "0.7.0",
4
- "description": "Plain CSS component framework with semantic classes, universal variants, small tokens, theme hooks, and progressive enhancements.",
5
- "type": "module",
6
- "packageManager": "bun@1.4.1",
7
- "license": "MIT",
8
- "author": "Thomas <thomas@lekoala.be>",
9
- "repository": {
10
- "type": "git",
11
- "url": "https://github.com/lekoala/actual-css.git"
12
- },
13
- "homepage": "https://github.com/lekoala/actual-css",
14
- "bugs": {
15
- "url": "https://github.com/lekoala/actual-css/issues"
16
- },
17
- "keywords": [
18
- "css",
19
- "css-framework",
20
- "component-library",
21
- "semantic",
22
- "accessibility",
23
- "dark-mode",
24
- "themable",
25
- "no-build",
26
- "progressive-enhancement"
27
- ],
28
- "exports": {
29
- ".": "./dist/actual.min.css",
30
- "./full": "./dist/actual.full.min.css",
31
- "./css": "./src/css/actual.css",
32
- "./css/components": "./src/css/components/index.css",
33
- "./css/components/*": "./src/css/components/*.css",
34
- "./css/effects": "./src/css/effects/index.css",
35
- "./css/effects/*": "./src/css/effects/*.css",
36
- "./css/forms": "./src/css/forms/base.css",
37
- "./css/forms/all": "./src/css/forms/index.css",
38
- "./css/forms/*": "./src/css/forms/*.css",
39
- "./css/full": "./src/css/actual.full.css",
40
- "./css/layer": "./src/css/actual.layer.css",
41
- "./css/layout": "./src/css/layout/index.css",
42
- "./css/layout/*": "./src/css/layout/*.css",
43
- "./css/themes": null,
44
- "./css/themes/*": null,
45
- "./css/typography": "./src/css/typography/index.css",
46
- "./css/typography/*": "./src/css/typography/*.css",
47
- "./css/utilities": "./src/css/utilities/index.css",
48
- "./css/utilities/*": "./src/css/utilities/*.css",
49
- "./js": "./src/js/index.js",
50
- "./js/full": "./src/js/full.js",
51
- "./js/command": "./src/js/command.js",
52
- "./js/context-menu": "./src/js/context-menu.js",
53
- "./js/dialog": "./src/js/dialog.js",
54
- "./js/dismiss": "./src/js/dismiss.js",
55
- "./js/escape": "./src/js/escape.js",
56
- "./js/enhance": "./src/js/enhance.js",
57
- "./js/enhancement-loader": "./src/js/enhancement-loader.js",
58
- "./js/parse-config": "./src/js/parse-config.js",
59
- "./js/events": "./src/js/events.js",
60
- "./js/filter": "./src/js/filter.js",
61
- "./js/flyout": "./src/js/flyout.js",
62
- "./js/focus": "./src/js/focus.js",
63
- "./js/focus-group": "./src/js/focus-group.js",
64
- "./js/input": "./src/js/input.js",
65
- "./js/keys": "./src/js/keys.js",
66
- "./js/mask": "./src/js/mask.js",
67
- "./js/menu": "./src/js/menu.js",
68
- "./js/password": "./src/js/password.js",
69
- "./js/scrollspy": "./src/js/scrollspy.js",
70
- "./js/selectors": "./src/js/selectors.js",
71
- "./js/tab": "./src/js/tab.js",
72
- "./js/tooltip": "./src/js/tooltip.js",
73
- "./js/validation": "./src/js/validation.js",
74
- "./js/status": "./src/js/status.js",
75
- "./js/surface": "./src/js/surface.js",
76
- "./reserved-classes.json": "./scripts/reserved-classes.json",
77
- "./package.json": "./package.json"
78
- },
79
- "bin": {
80
- "actual-css": "./src/cli/actual-css.js"
81
- },
82
- "main": "./dist/actual.js",
83
- "style": "./dist/actual.min.css",
84
- "unpkg": "./dist/actual.min.css",
85
- "jsdelivr": "./dist/actual.min.css",
86
- "sideEffects": true,
87
- "files": [
88
- "dist",
89
- "src/css/*.css",
90
- "src/css/core",
91
- "src/css/layout",
92
- "src/css/typography",
93
- "src/css/forms",
94
- "src/css/components",
95
- "src/css/effects",
96
- "src/css/utilities",
97
- "src/cli",
98
- "src/js",
99
- "src/tooling",
100
- "scripts/reserved-classes.json",
101
- "docs",
102
- "CHANGELOG.md",
103
- "llms.txt",
104
- "LICENSE",
105
- "README.md"
106
- ],
107
- "engines": {
108
- "bun": ">=1.4.0",
109
- "node": ">=18"
110
- },
111
- "scripts": {
112
- "lint": "biome check",
113
- "lint:fix": "biome check --write",
114
- "build:docs": "bun run build:themes && bun scripts/build-docs.js",
115
- "watch:docs": "bun run build:themes && bun scripts/build-docs.js --watch",
116
- "check:docs": "bun scripts/check-docs.js",
117
- "format:docs": "bun scripts/format-doc-tables.js",
118
- "check:doc-classes": "bun scripts/check-doc-classes.js",
119
- "check:compat": "bun scripts/check-compat.js",
120
- "check:css-api": "bun scripts/check-css-api.js",
121
- "check:color-space": "bun scripts/check-color-space.js",
122
- "check:architecture": "bun scripts/check-css-architecture.js",
123
- "build:dist": "bun scripts/build-dist.js",
124
- "build:js": "bun scripts/build-js.js",
125
- "build:themes": "bun scripts/build-themes.js",
126
- "build:size": "bun scripts/build-size.js",
127
- "check:enhance": "bun run scripts/check-enhance.js",
128
- "generate:reserved": "bun scripts/generate-reserved-classes.js",
129
- "check:reserved": "bun scripts/check-reserved.js",
130
- "check:links": "bun scripts/check-doc-links.js",
131
- "check:templates": "bun scripts/check-templates.js",
132
- "shot:forced": "bun scripts/forced-colors-shot.js",
133
- "shot:multi": "bun scripts/multi-shot.js",
134
- "shot:page": "bun scripts/page-shot.js",
135
- "probe": "bun scripts/probe.js",
136
- "check:sync": "bun scripts/check-sync.js",
137
- "test": "bun test",
138
- "test:changed": "bun test --changed=master",
139
- "build:all": "bun run lint && bun run build:dist && bun run build:js && bun run format:docs && bun run build:docs && bun run check:docs && bun run check:doc-classes && bun run check:compat && bun run check:css-api && bun run check:color-space && bun run check:architecture && bun run check:enhance && bun run generate:reserved && bun run check:reserved && bun run check:sync && bun run check:links && bun run check:templates && bun run test && bun run build:size",
140
- "prepublishOnly": "bun run build:all"
141
- },
142
- "devDependencies": {
143
- "@biomejs/biome": "^2.5",
144
- "happy-dom": "^20.11"
145
- },
146
- "dependencies": {
147
- "@lekoala/floating": "^0.1.0"
148
- }
149
- }
1
+ {
2
+ "name": "actual-css",
3
+ "version": "0.9.0",
4
+ "description": "Plain CSS component framework with semantic classes, universal variants, small tokens, theme hooks, and progressive enhancements.",
5
+ "type": "module",
6
+ "packageManager": "bun@1.4.2",
7
+ "license": "MIT",
8
+ "author": "Thomas <thomas@lekoala.be>",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/lekoala/actual-css.git"
12
+ },
13
+ "homepage": "https://github.com/lekoala/actual-css",
14
+ "bugs": {
15
+ "url": "https://github.com/lekoala/actual-css/issues"
16
+ },
17
+ "keywords": [
18
+ "css",
19
+ "css-framework",
20
+ "component-library",
21
+ "semantic",
22
+ "accessibility",
23
+ "dark-mode",
24
+ "themable",
25
+ "no-build",
26
+ "progressive-enhancement"
27
+ ],
28
+ "exports": {
29
+ ".": "./dist/actual.min.css",
30
+ "./full": "./dist/actual.full.min.css",
31
+ "./css": "./src/css/actual.css",
32
+ "./css/components": "./src/css/components/index.css",
33
+ "./css/components/*": "./src/css/components/*.css",
34
+ "./css/effects": "./src/css/effects/index.css",
35
+ "./css/effects/*": "./src/css/effects/*.css",
36
+ "./css/forms": "./src/css/forms/base.css",
37
+ "./css/forms/all": "./src/css/forms/index.css",
38
+ "./css/forms/*": "./src/css/forms/*.css",
39
+ "./css/full": "./src/css/actual.full.css",
40
+ "./css/layer": "./src/css/actual.layer.css",
41
+ "./css/layout": "./src/css/layout/index.css",
42
+ "./css/layout/*": "./src/css/layout/*.css",
43
+ "./css/themes": null,
44
+ "./css/themes/*": null,
45
+ "./css/typography": "./src/css/typography/index.css",
46
+ "./css/typography/*": "./src/css/typography/*.css",
47
+ "./css/utilities": "./src/css/utilities/index.css",
48
+ "./css/utilities/*": "./src/css/utilities/*.css",
49
+ "./js": "./src/js/index.js",
50
+ "./js/full": "./src/js/full.js",
51
+ "./js/command": "./src/js/command.js",
52
+ "./js/context-menu": "./src/js/context-menu.js",
53
+ "./js/dialog": "./src/js/dialog.js",
54
+ "./js/dismiss": "./src/js/dismiss.js",
55
+ "./js/escape": "./src/js/escape.js",
56
+ "./js/enhance": "./src/js/enhance.js",
57
+ "./js/enhancement-loader": "./src/js/enhancement-loader.js",
58
+ "./js/parse-config": "./src/js/parse-config.js",
59
+ "./js/events": "./src/js/events.js",
60
+ "./js/filter": "./src/js/filter.js",
61
+ "./js/flyout": "./src/js/flyout.js",
62
+ "./js/focus": "./src/js/focus.js",
63
+ "./js/focus-group": "./src/js/focus-group.js",
64
+ "./js/input": "./src/js/input.js",
65
+ "./js/keys": "./src/js/keys.js",
66
+ "./js/mask": "./src/js/mask.js",
67
+ "./js/menu": "./src/js/menu.js",
68
+ "./js/password": "./src/js/password.js",
69
+ "./js/scrollspy": "./src/js/scrollspy.js",
70
+ "./js/selectors": "./src/js/selectors.js",
71
+ "./js/tab": "./src/js/tab.js",
72
+ "./js/tooltip": "./src/js/tooltip.js",
73
+ "./js/validation": "./src/js/validation.js",
74
+ "./js/status": "./src/js/status.js",
75
+ "./js/surface": "./src/js/surface.js",
76
+ "./reserved-classes.json": "./reserved-classes.json",
77
+ "./components.json": "./components.json",
78
+ "./package.json": "./package.json"
79
+ },
80
+ "bin": {
81
+ "actual-css": "./src/cli/actual-css.js"
82
+ },
83
+ "main": "./dist/actual.js",
84
+ "style": "./dist/actual.min.css",
85
+ "unpkg": "./dist/actual.min.css",
86
+ "jsdelivr": "./dist/actual.min.css",
87
+ "sideEffects": true,
88
+ "files": [
89
+ "dist",
90
+ "src/css/*.css",
91
+ "src/css/core",
92
+ "src/css/layout",
93
+ "src/css/typography",
94
+ "src/css/forms",
95
+ "src/css/components",
96
+ "src/css/effects",
97
+ "src/css/utilities",
98
+ "src/cli",
99
+ "src/js",
100
+ "src/tooling",
101
+ "reserved-classes.json",
102
+ "components.json",
103
+ "docs",
104
+ "CHANGELOG.md",
105
+ "llms.txt",
106
+ "LICENSE",
107
+ "README.md"
108
+ ],
109
+ "engines": {
110
+ "bun": ">=1.4.0",
111
+ "node": ">=18"
112
+ },
113
+ "scripts": {
114
+ "lint": "biome check",
115
+ "lint:fix": "biome check --write",
116
+ "build:docs": "bun run build:themes && bun scripts/build-docs.js",
117
+ "watch:docs": "bun run build:themes && bun scripts/build-docs.js --watch",
118
+ "check:docs": "bun scripts/check-docs.js",
119
+ "format:docs": "bun scripts/format-doc-tables.js",
120
+ "check:doc-classes": "bun scripts/check-doc-classes.js",
121
+ "check:compat": "bun scripts/check-compat.js",
122
+ "check:css-api": "bun scripts/check-css-api.js",
123
+ "check:color-space": "bun scripts/check-color-space.js",
124
+ "report:theme-contrast": "bun scripts/report-theme-contrast.js",
125
+ "report:neutral-ramp": "bun scripts/report-neutral-ramp.js",
126
+ "report:dead-css": "bun scripts/report-dead-css.js",
127
+ "report:overflow": "bun scripts/report-overflow.js",
128
+ "check:architecture": "bun scripts/check-css-architecture.js",
129
+ "build:dist": "bun scripts/build-dist.js",
130
+ "build:js": "bun scripts/build-js.js",
131
+ "build:themes": "bun scripts/build-themes.js",
132
+ "build:size": "bun scripts/build-size.js",
133
+ "check:enhance": "bun run scripts/check-enhance.js",
134
+ "generate:reserved": "bun scripts/generate-reserved-classes.js",
135
+ "check:reserved": "bun scripts/check-reserved.js",
136
+ "generate:catalog": "bun scripts/build-catalog.js",
137
+ "check:catalog": "bun scripts/check-catalog.js",
138
+ "check:links": "bun scripts/check-doc-links.js",
139
+ "check:templates": "bun scripts/check-templates.js",
140
+ "check:markup": "bun scripts/check-markup.js",
141
+ "shot:forced": "bun scripts/forced-colors-shot.js",
142
+ "shot:multi": "bun scripts/multi-shot.js",
143
+ "shot:page": "bun scripts/page-shot.js",
144
+ "probe": "bun scripts/probe.js",
145
+ "serve": "bun scripts/serve.js",
146
+ "check:sync": "bun scripts/check-sync.js",
147
+ "test": "bun test",
148
+ "test:changed": "bun test --changed=master",
149
+ "build:all": "bun run lint && bun run build:dist && bun run build:js && bun run build:size && bun run format:docs && bun run build:docs && bun run check:docs && bun run check:doc-classes && bun run check:compat && bun run check:css-api && bun run check:color-space && bun run check:architecture && bun run check:enhance && bun run generate:reserved && bun run check:reserved && bun run generate:catalog && bun run check:catalog && bun run check:sync && bun run check:links && bun run check:templates && bun run check:markup && bun run test",
150
+ "prepublishOnly": "bun run build:all"
151
+ },
152
+ "devDependencies": {
153
+ "@biomejs/biome": "^2.5.12",
154
+ "happy-dom": "^20.14.0"
155
+ },
156
+ "dependencies": {
157
+ "@lekoala/floating": "^0.2.0"
158
+ }
159
+ }
@@ -106,19 +106,17 @@
106
106
  "flex-nowrap",
107
107
  "flex-wrap",
108
108
  "floating-field",
109
+ "flush",
109
110
  "flyout",
110
111
  "flyout-trigger",
111
112
  "font-weight-bold",
112
113
  "font-weight-medium",
113
114
  "font-weight-normal",
114
- "font-weight-strong",
115
+ "font-weight-semibold",
115
116
  "form-actions",
116
117
  "frame",
117
118
  "gap-context",
118
- "gap-lg",
119
- "gap-md",
120
119
  "gap-none",
121
- "gap-sm",
122
120
  "ghost",
123
121
  "grid",
124
122
  "grid-2",
@@ -137,7 +135,6 @@
137
135
  "intent-color",
138
136
  "inverted",
139
137
  "is-open",
140
- "is-sheet",
141
138
  "is-static",
142
139
  "items-center",
143
140
  "items-end",
@@ -229,6 +226,7 @@
229
226
  "scrollspy",
230
227
  "secondary",
231
228
  "select",
229
+ "separated",
232
230
  "shadow-context",
233
231
  "shadow-popout-context",
234
232
  "sidebar-layout",
@@ -236,6 +234,7 @@
236
234
  "sm",
237
235
  "soft",
238
236
  "solid",
237
+ "spacious",
239
238
  "spinner",
240
239
  "sr-only",
241
240
  "stable-gutter",
@@ -252,7 +251,6 @@
252
251
  "subtle",
253
252
  "success",
254
253
  "surface",
255
- "surface-backdrop",
256
254
  "switch",
257
255
  "switcher",
258
256
  "tab",
@@ -5,6 +5,12 @@
5
5
  * or demo styles. Decorative palettes and custom markers belong outside the
6
6
  * base component.
7
7
  *
8
+ * Container treatments (structural chrome, not skins):
9
+ * - default — the common raised shell;
10
+ * - .flush — the shell removed, only the item separators remain, so the group
11
+ * can sit directly inside an existing surface (card, drawer, page section);
12
+ * - .separated — each item becomes its own card.
13
+ *
8
14
  * Public hooks:
9
15
  * --accordion-radius
10
16
  * --accordion-marker-color
@@ -30,11 +36,14 @@
30
36
  list-style: none;
31
37
  padding: var(--space-40);
32
38
  color: var(--text);
33
- font-weight: var(--font-weight-bold);
39
+ font-weight: var(--font-weight-medium);
34
40
  }
35
41
 
36
- .accordion summary:hover {
37
- color: var(--primary);
42
+ .accordion summary:hover::after {
43
+ /* The whole row is one focus target; reinforcing only the end marker keeps
44
+ the affordance on the disclosure control instead of making the whole
45
+ label read as a link. */
46
+ --accordion-marker-color: currentColor;
38
47
  }
39
48
 
40
49
  .accordion summary::-webkit-details-marker {
@@ -78,6 +87,36 @@
78
87
  padding-inline-start: 2rem;
79
88
  }
80
89
 
90
+ /* Flush — the shell is dropped and only the shared item separators remain.
91
+ Zero inline padding puts the group edge to edge inside the surface that
92
+ already frames it, so no override is repeated per embedding. */
93
+ .accordion.flush {
94
+ border: 0;
95
+ border-radius: 0;
96
+ background: transparent;
97
+ }
98
+
99
+ .accordion.flush summary,
100
+ .accordion.flush details > summary + * {
101
+ padding-inline: 0;
102
+ }
103
+
104
+ /* Separated — each item owns a full card. The item's own border beats the
105
+ shared details + details separator on specificity alone, so nothing needs
106
+ undoing for the second item onwards. */
107
+ .accordion.separated {
108
+ display: grid;
109
+ gap: var(--space-20);
110
+ border: 0;
111
+ background: transparent;
112
+ }
113
+
114
+ .accordion.separated > details {
115
+ border: var(--border-width) solid var(--border);
116
+ border-radius: var(--accordion-radius);
117
+ background: var(--surface-raised);
118
+ }
119
+
81
120
  @media (forced-colors: active) {
82
121
  .accordion {
83
122
  --accordion-marker-color: CanvasText;
@@ -32,6 +32,7 @@
32
32
  :where(.alert) {
33
33
  --intent: initial;
34
34
  --intent-fg: initial;
35
+ --intent-soft-fg: initial;
35
36
  --ui-bg: initial;
36
37
  --ui-fg: initial;
37
38
  --ui-border: initial;
@@ -64,12 +65,23 @@
64
65
  min-inline-size: 0;
65
66
  }
66
67
 
67
- .alert > :first-child {
68
- margin-block-start: 0;
68
+ /* The alert owns the block spacing between its direct content blocks, the way
69
+ .stack and .prose own theirs, so a title and a description are plain
70
+ siblings instead of a wrapper carrying an inline --gap. What made that pair
71
+ read as detached is the UA paragraph margin: trimming only the outer edges
72
+ left it in place between them. Content keeps its own internal rhythm — a
73
+ nested list keeps its bullets and padding, a .prose child keeps its flow.
74
+ The slots are excluded because they are anatomy, not content: an
75
+ admonition's title bar has to stay flush against its body. The list follows
76
+ the anatomy, so it grows with it. */
77
+ .alert > :not(:where(.alert-icon, .alert-dismiss, .alert-title, .alert-body)) {
78
+ margin-block: 0;
69
79
  }
70
80
 
71
- .alert > :last-child {
72
- margin-block-end: 0;
81
+ .alert
82
+ > :not(:where(.alert-icon, .alert-dismiss, .alert-title, .alert-body))
83
+ + :not(:where(.alert-icon, .alert-dismiss, .alert-title, .alert-body)) {
84
+ margin-block-start: var(--space-10);
73
85
  }
74
86
 
75
87
  /* Alerts are soft by default. The recipe writes local defaults rather than
@@ -87,10 +99,9 @@
87
99
  var(--surface) var(--soft-border-mix),
88
100
  var(--intent, var(--neutral))
89
101
  );
90
- --alert-default-fg: color-mix(
91
- in oklab,
92
- var(--text),
93
- var(--intent, var(--text)) var(--soft-fg-mix)
102
+ --alert-default-fg: var(
103
+ --intent-soft-fg,
104
+ color-mix(in oklab, var(--text), var(--intent, var(--text)) var(--soft-fg-mix))
94
105
  );
95
106
  /* @sync soft-recipe */
96
107
  }
@@ -191,7 +202,7 @@
191
202
  /* Links */
192
203
  .alert :where(a:not(.btn)) {
193
204
  color: inherit;
194
- font-weight: var(--font-weight-strong);
205
+ font-weight: var(--font-weight-semibold);
195
206
  }
196
207
 
197
208
  /* Forced colors: no override needed. The always-on border gets a forced
@@ -199,11 +210,12 @@
199
210
  Canvas backplate (unreadable) — so .solid intentionally falls back to the
200
211
  default look. */
201
212
 
202
- /* Callout — neutral surface with a thick accent border on the leading edge.
203
- The thickness follows the shared --alert-border-inline-start-width hook. */
213
+ /* Callout — leading-edge flag treatment. It owns the border geometry only, so
214
+ the surface and the ink stay with the alert's own intent and shared
215
+ treatment: bare is the soft panel, .surface the page surface, .solid a
216
+ filled one, and .outline has no fill and no other side. Thickness and color
217
+ follow the --alert-border-inline-start-* hooks. */
204
218
  .alert.callout {
205
- --alert-bg: var(--surface-subtle);
206
- --alert-fg: var(--text);
207
219
  border: 0;
208
220
  border-inline-start: var(--alert-border-inline-start-width, 4px) solid
209
221
  var(--alert-border-inline-start-color, var(--intent, var(--neutral)));
@@ -6,8 +6,12 @@
6
6
  * Public hooks:
7
7
  * --app-nav-size
8
8
  * --app-nav-gap
9
+ * --app-nav-icon-size
9
10
  */
10
11
  :where(.app-nav) {
12
+ --intent: initial;
13
+ --intent-fg: initial;
14
+ --intent-soft-fg: initial;
11
15
  --ui-bg: initial;
12
16
  --ui-fg: initial;
13
17
  --ui-border: initial;
@@ -16,6 +20,7 @@
16
20
  .app-nav {
17
21
  --app-nav-size: 4rem;
18
22
  --app-nav-gap: var(--space-10);
23
+ --app-nav-icon-size: 1.5rem;
19
24
 
20
25
  position: sticky;
21
26
  inset-block-end: 0;
@@ -52,9 +57,9 @@
52
57
  }
53
58
 
54
59
  .app-nav > a > :where(svg, img, [aria-hidden="true"]) {
55
- inline-size: 1.5rem;
56
- block-size: 1.5rem;
57
- font-size: 1.5rem;
60
+ inline-size: var(--app-nav-icon-size);
61
+ block-size: var(--app-nav-icon-size);
62
+ font-size: var(--app-nav-icon-size);
58
63
  line-height: 1;
59
64
  }
60
65
 
@@ -63,14 +68,19 @@
63
68
  color: var(--text);
64
69
  }
65
70
 
66
- .app-nav > a:where([aria-current]:not([aria-current="false"])) {
71
+ /* Current tile is already a full selected surface. Selection never changes
72
+ text metrics: the shared medium weight is kept, no permanent indicator is
73
+ added here. */
74
+ .app-nav > a[aria-current="page"] {
67
75
  background: var(--state-selected);
68
76
  color: var(--state-selected-fg);
69
- font-weight: var(--font-weight-bold);
70
77
  }
71
78
 
72
- @media print {
73
- .app-nav {
74
- display: none;
79
+ @media (forced-colors: active) {
80
+ /* --state-selected flattens to a UA color that no longer distinguishes the
81
+ current tile from the rest of the bar, so paint the system Highlight pair. */
82
+ .app-nav > a[aria-current="page"] {
83
+ background: Highlight;
84
+ color: HighlightText;
75
85
  }
76
86
  }
@@ -46,7 +46,7 @@
46
46
  color: var(--avatar-fg);
47
47
  font: inherit;
48
48
  font-size: var(--avatar-font-size);
49
- font-weight: var(--font-weight-strong);
49
+ font-weight: var(--font-weight-semibold);
50
50
  line-height: 1;
51
51
  text-decoration: none;
52
52
  vertical-align: middle;
@@ -160,6 +160,18 @@ a.avatar[aria-disabled="true"] {
160
160
  transform: translate(var(--avatar-status-translate-x), 50%);
161
161
  }
162
162
 
163
+ /* Safari before 16.4 has no :dir(); the ancestor-attribute path is the
164
+ Degraded-tier fallback and the :dir() rules are dropped on their own there.
165
+ :dir() follows inherited directionality, so the explicit ltr rule
166
+ neutralizes an outer RTL fallback for a nested direction change. */
167
+ [dir="rtl"] .avatar > .badge:empty {
168
+ --avatar-status-translate-x: -50%;
169
+ }
170
+
171
+ .avatar:dir(ltr) > .badge:empty {
172
+ --avatar-status-translate-x: 50%;
173
+ }
174
+
163
175
  .avatar:dir(rtl) > .badge:empty {
164
176
  --avatar-status-translate-x: -50%;
165
177
  }