actual-css 0.3.1 → 0.4.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 (203) hide show
  1. package/CHANGELOG.md +67 -3
  2. package/README.md +35 -30
  3. package/dist/actual.css +73 -4946
  4. package/dist/actual.full.css +7090 -0
  5. package/dist/actual.full.js +1 -0
  6. package/dist/actual.full.min.css +1 -0
  7. package/dist/actual.js +1 -1
  8. package/dist/actual.min.css +1 -1
  9. package/docs/design-notes/cascade-layer.md +34 -13
  10. package/docs/design-notes/column-layout.md +677 -0
  11. package/docs/design-notes/forced-colors.md +3 -0
  12. package/docs/design-notes/grid.md +612 -0
  13. package/docs/design-notes/naming.md +15 -0
  14. package/docs/design-notes/widget-primitives.md +1 -0
  15. package/docs/navigation.json +5 -1
  16. package/docs/pages/components/alert.md +16 -14
  17. package/docs/pages/components/aura.md +1 -1
  18. package/docs/pages/components/avatar.md +6 -6
  19. package/docs/pages/components/badge.md +7 -7
  20. package/docs/pages/components/button.md +16 -16
  21. package/docs/pages/components/card.md +13 -9
  22. package/docs/pages/components/chat.md +8 -8
  23. package/docs/pages/components/dialog.md +7 -7
  24. package/docs/pages/components/drawer.md +3 -3
  25. package/docs/pages/components/fab.md +7 -7
  26. package/docs/pages/components/navbar.md +9 -8
  27. package/docs/pages/components/pagination.md +4 -3
  28. package/docs/pages/components/skeleton.md +4 -4
  29. package/docs/pages/components/spinner.md +5 -5
  30. package/docs/pages/components/table.md +30 -5
  31. package/docs/pages/enhancements/flyout.md +13 -13
  32. package/docs/pages/enhancements/overview.md +1 -1
  33. package/docs/pages/enhancements/scrollspy.md +6 -6
  34. package/docs/pages/enhancements/status-bar.md +5 -1
  35. package/docs/pages/enhancements/tabs.md +6 -6
  36. package/docs/pages/enhancements/tooltip.md +1 -1
  37. package/docs/pages/examples/overview.md +39 -22
  38. package/docs/pages/forms/choice-cards.md +11 -6
  39. package/docs/pages/forms/controls.md +1 -1
  40. package/docs/pages/forms/detached-actions.md +1 -1
  41. package/docs/pages/forms/floating-field.md +10 -5
  42. package/docs/pages/forms/form-actions.md +1 -1
  43. package/docs/pages/forms/input-policy.md +1 -1
  44. package/docs/pages/forms/joined-controls.md +4 -4
  45. package/docs/pages/forms/labels.md +6 -6
  46. package/docs/pages/forms/otp.md +1 -1
  47. package/docs/pages/forms/overview.md +19 -19
  48. package/docs/pages/forms/password.md +1 -1
  49. package/docs/pages/forms/range.md +1 -1
  50. package/docs/pages/forms/states-and-sizes.md +41 -45
  51. package/docs/pages/forms/sticky-actions.md +3 -3
  52. package/docs/pages/forms/switch.md +110 -2
  53. package/docs/pages/forms/validation.md +9 -9
  54. package/docs/pages/foundations/philosophy.md +1 -1
  55. package/docs/pages/foundations/theming.md +17 -2
  56. package/docs/pages/foundations/tokens.md +22 -10
  57. package/docs/pages/foundations/typography.md +50 -20
  58. package/docs/pages/guides/bootstrap.md +11 -11
  59. package/docs/pages/guides/integrating-actual-css.md +186 -0
  60. package/docs/pages/guides/introduction.md +23 -26
  61. package/docs/pages/guides/modular-import.md +173 -0
  62. package/docs/pages/guides/progressive-enhancement.md +81 -78
  63. package/docs/pages/guides/tailwind.md +6 -8
  64. package/docs/pages/layout/app-shell.md +1 -1
  65. package/docs/pages/layout/center.md +1 -1
  66. package/docs/pages/layout/choosing.md +39 -0
  67. package/docs/pages/layout/column-layout.md +206 -0
  68. package/docs/pages/layout/frame.md +6 -1
  69. package/docs/pages/layout/grid.md +100 -102
  70. package/docs/pages/layout/list.md +1 -1
  71. package/docs/pages/layout/media.md +1 -1
  72. package/docs/pages/layout/overview.md +15 -2
  73. package/docs/pages/layout/scroll-snap.md +2 -2
  74. package/docs/pages/layout/scroll-target.md +45 -0
  75. package/docs/pages/layout/sidebar-layout.md +20 -19
  76. package/docs/pages/layout/stack.md +53 -1
  77. package/docs/pages/layout/switcher.md +10 -26
  78. package/docs/pages/layout/topbar.md +2 -2
  79. package/docs/pages/patterns/actions.md +1 -1
  80. package/docs/pages/patterns/code-block.md +1 -1
  81. package/docs/pages/patterns/exclusive-accordion.md +1 -1
  82. package/docs/pages/patterns/hierarchical-nav.md +1 -1
  83. package/docs/pages/patterns/icon-input.md +1 -1
  84. package/docs/pages/patterns/intent-nesting.md +1 -1
  85. package/docs/pages/patterns/navigation-list.md +1 -1
  86. package/docs/pages/patterns/overview.md +1 -1
  87. package/docs/pages/patterns/structured-lists.md +1 -1
  88. package/docs/pages/utilities/accessibility.md +3 -3
  89. package/docs/pages/utilities/flex.md +15 -15
  90. package/docs/pages/utilities/links.md +4 -4
  91. package/docs/pages/utilities/list.md +8 -8
  92. package/docs/pages/utilities/overflow.md +8 -8
  93. package/docs/pages/utilities/overview.md +1 -1
  94. package/docs/pages/utilities/shape.md +3 -3
  95. package/docs/pages/utilities/sizing-wrapping.md +23 -16
  96. package/docs/pages/utilities/spacing.md +20 -20
  97. package/docs/pages/utilities/text.md +10 -10
  98. package/llms.txt +46 -4
  99. package/package.json +42 -13
  100. package/scripts/reserved-classes.json +261 -0
  101. package/src/cli/actual-css.js +133 -0
  102. package/src/css/actual.css +1 -31
  103. package/src/css/actual.full.css +11 -2
  104. package/src/css/components/alert.css +17 -4
  105. package/src/css/components/badge.css +18 -6
  106. package/src/css/components/breadcrumb.css +1 -1
  107. package/src/css/components/button.css +19 -1
  108. package/src/css/components/card.css +27 -2
  109. package/src/css/components/drawer.css +27 -2
  110. package/src/css/components/flyout.css +5 -0
  111. package/src/css/components/index.css +32 -27
  112. package/src/css/components/join.css +8 -1
  113. package/src/css/components/key.css +2 -0
  114. package/src/css/components/menu.css +11 -1
  115. package/src/css/components/meter.css +4 -1
  116. package/src/css/components/modal.css +5 -0
  117. package/src/css/components/pagination.css +11 -0
  118. package/src/css/components/spinner.css +5 -0
  119. package/src/css/components/status-bar.css +5 -0
  120. package/src/css/components/surface.css +5 -0
  121. package/src/css/components/table.css +6 -0
  122. package/src/css/components/tooltip.css +5 -0
  123. package/src/css/core/index.css +9 -0
  124. package/src/css/core/print.css +18 -0
  125. package/src/css/{theme.css → core/theme.css} +20 -10
  126. package/src/css/{tokens.css → core/tokens.css} +15 -2
  127. package/src/css/{variants.css → core/variants.css} +3 -2
  128. package/src/css/effects/index.css +2 -0
  129. package/src/css/forms/base.css +8 -0
  130. package/src/css/forms/choice-card.css +5 -4
  131. package/src/css/forms/choice.css +49 -37
  132. package/src/css/forms/control.css +4 -1
  133. package/src/css/forms/custom-select.css +2 -0
  134. package/src/css/{optional → forms}/floating-field.css +25 -7
  135. package/src/css/forms/index.css +10 -13
  136. package/src/css/forms/native.css +15 -2
  137. package/src/css/{optional → forms}/otp.css +20 -16
  138. package/src/css/forms/switch.css +31 -29
  139. package/src/css/layout/app-shell.css +6 -0
  140. package/src/css/layout/center.css +13 -0
  141. package/src/css/layout/cluster.css +21 -0
  142. package/src/css/layout/column-layout.css +144 -0
  143. package/src/css/layout/container-query.css +13 -0
  144. package/src/css/layout/frame.css +19 -0
  145. package/src/css/layout/grid.css +141 -0
  146. package/src/css/layout/index.css +42 -0
  147. package/src/css/layout/measure.css +9 -0
  148. package/src/css/layout/media.css +10 -0
  149. package/src/css/layout/scroll-target.css +15 -0
  150. package/src/css/layout/scroller.css +41 -0
  151. package/src/css/layout/sidebar-layout.css +31 -0
  152. package/src/css/layout/stack.css +21 -0
  153. package/src/css/layout/switcher.css +23 -0
  154. package/src/css/{optional/layout-extra.css → layout/topbar.css} +0 -20
  155. package/src/css/typography/index.css +5 -0
  156. package/src/css/typography/lead.css +7 -0
  157. package/src/css/{components → typography}/overline.css +2 -2
  158. package/src/css/{prose.css → typography/prose.css} +53 -38
  159. package/src/css/{utilities.css → utilities/base.css} +2 -0
  160. package/src/css/utilities/index.css +3 -0
  161. package/src/js/escape.js +36 -0
  162. package/src/js/flyout.js +22 -12
  163. package/src/js/full.js +26 -0
  164. package/src/js/index.js +5 -21
  165. package/src/js/surface.js +1 -31
  166. package/src/js/tooltip.js +46 -18
  167. package/src/js/validation.js +1 -1
  168. package/src/tooling/css-bundle.js +308 -0
  169. package/dist/actual-themes.min.css +0 -1
  170. package/dist/optional.css +0 -1048
  171. package/dist/optional.min.css +0 -1
  172. package/docs/pages/guides/optional-components.md +0 -33
  173. package/src/css/grid.css +0 -109
  174. package/src/css/layout.css +0 -123
  175. package/src/css/optional/index.css +0 -10
  176. package/src/css/optional/scroller.css +0 -63
  177. package/src/css/print.css +0 -47
  178. package/src/css/themes/corporate.css +0 -60
  179. package/src/css/themes/cyberpunk.css +0 -60
  180. package/src/css/themes/dim.css +0 -33
  181. package/src/css/themes/edge.css +0 -117
  182. package/src/css/themes/forest.css +0 -65
  183. package/src/css/themes/gradient.css +0 -97
  184. package/src/css/themes/index.css +0 -47
  185. package/src/css/themes/indigo.css +0 -33
  186. package/src/css/themes/lavender.css +0 -66
  187. package/src/css/themes/mono.css +0 -60
  188. package/src/css/themes/neon.css +0 -66
  189. package/src/css/themes/ocean.css +0 -60
  190. package/src/css/themes/petrol.css +0 -64
  191. package/src/css/themes/spruce.css +0 -64
  192. package/src/css/themes/square.css +0 -65
  193. package/src/css/themes/sunset.css +0 -66
  194. /package/src/css/{optional → components}/chat.css +0 -0
  195. /package/src/css/{optional → components}/fab.css +0 -0
  196. /package/src/css/{base.css → core/base.css} +0 -0
  197. /package/src/css/{focus.css → core/focus.css} +0 -0
  198. /package/src/css/{intents.css → core/intents.css} +0 -0
  199. /package/src/css/{reset.css → core/reset.css} +0 -0
  200. /package/src/css/{optional → effects}/aura.css +0 -0
  201. /package/src/css/{optional → layout}/scroll-snap.css +0 -0
  202. /package/src/css/{optional/typography-fluid.css → typography/fluid.css} +0 -0
  203. /package/src/css/{optional/utilities-extra.css → utilities/extra.css} +0 -0
@@ -16,18 +16,18 @@
16
16
 
17
17
  ## Class reference
18
18
 
19
- | Class | Kind | Description |
20
- |---|---|---|
21
- | `.alert` | Component | Inline status surface; soft by default. |
22
- | `.alert-icon` | Composition | Decorative leading icon; pins to the first grid column. |
23
- | `.alert-dismiss` | Modifier | Compact dismiss button using the `--icon-close` mask and the `--dismiss` command. |
24
- | `.callout` | Variant | Neutral panel with a thick accent border on the leading edge. |
25
- | `.admonition` | Variant | Structured box with a tinted title bar and body on the page surface. |
26
- | `.alert-title` | Composition | Admonition title bar; hosts the dismiss button. |
27
- | `.alert-body` | Composition | Admonition body resting on the page surface. |
28
- | Shared intents | Intent | `.primary`, `.secondary`, `.success`, `.warning`, `.danger`. |
29
- | Shared variants | Variant | `.solid` and `.outline` emphasis. |
30
- | `.sm` / `.lg` | Size | Density; inline padding stays stable. |
19
+ | Class | Kind | Description |
20
+ |------------------|-------------|-----------------------------------------------------------------------------------|
21
+ | `.alert` | Component | Inline status surface; soft by default. |
22
+ | `.alert-icon` | Composition | Decorative leading icon; pins to the first grid column. |
23
+ | `.alert-dismiss` | Modifier | Compact dismiss button using the `--icon-close` mask and the `--dismiss` command. |
24
+ | `.callout` | Variant | Neutral panel with a thick accent border on the leading edge. |
25
+ | `.admonition` | Variant | Structured box with a tinted title bar and body on the page surface. |
26
+ | `.alert-title` | Composition | Admonition title bar; hosts the dismiss button. |
27
+ | `.alert-body` | Composition | Admonition body resting on the page surface. |
28
+ | Shared intents | Intent | `.primary`, `.secondary`, `.success`, `.warning`, `.danger`. |
29
+ | Shared variants | Variant | `.solid` and `.outline` emphasis. |
30
+ | `.sm` / `.lg` | Size | Density; inline padding stays stable. |
31
31
 
32
32
  ## Basic usage
33
33
 
@@ -70,8 +70,10 @@
70
70
  <i class="ti ti-alert-triangle alert-icon" aria-hidden="true"></i>
71
71
 
72
72
  <div class="stack">
73
- <strong>Payment failed.</strong>
74
- <p>Check your billing details or try another card.</p>
73
+ <div class="stack" style="--gap: var(--space-10)">
74
+ <strong>Payment failed.</strong>
75
+ <p>Check your billing details or try another card.</p>
76
+ </div>
75
77
 
76
78
  <menu class="actions cluster">
77
79
  <li><a class="btn danger sm" href="/billing">Update billing</a></li>
@@ -1,6 +1,6 @@
1
1
  # Aura
2
2
 
3
- > **Optional** — import `actual-css/css/optional/aura` or `actual-css/css/optional/index`.
3
+ > **Module** — import `actual-css/css/effects/aura` or `actual-css/css/effects`.
4
4
 
5
5
  Aura adds a decorative intent-colored border and halo around one direct child.
6
6
  It is visual emphasis only and does not change the child's semantics.
@@ -12,12 +12,12 @@
12
12
 
13
13
  ## Class reference
14
14
 
15
- | Class | Kind | Description |
16
- |---|---|---|
17
- | `.avatar` | Component | Initials or image in a circular box; works on `div`, `a`, and `button`. |
18
- | `.avatar-stack` | Composition | Overlapping avatar group. |
19
- | `.badge:empty` (inside `.avatar`) | Composition | Status dot at the bottom-end corner; give it an `aria-label`. |
20
- | `.sm` / `.lg` | Size | Density; also rescales the whole `.avatar-stack`. |
15
+ | Class | Kind | Description |
16
+ |-----------------------------------|-------------|-------------------------------------------------------------------------|
17
+ | `.avatar` | Component | Initials or image in a circular box; works on `div`, `a`, and `button`. |
18
+ | `.avatar-stack` | Composition | Overlapping avatar group. |
19
+ | `.badge:empty` (inside `.avatar`) | Composition | Status dot at the bottom-end corner; give it an `aria-label`. |
20
+ | `.sm` / `.lg` | Size | Density; also rescales the whole `.avatar-stack`. |
21
21
 
22
22
  ## Basic usage
23
23
 
@@ -18,13 +18,13 @@ full-width badge is intentional.
18
18
 
19
19
  ## Class reference
20
20
 
21
- | Class | Kind | Description |
22
- |---|---|---|
23
- | `.badge` | Component | Compact label; soft by default. |
24
- | `.badge:empty` | Composition | Truly-empty badge renders as a solid dot. |
25
- | Shared intents | Intent | `.primary`, `.secondary`, `.success`, `.warning`, `.danger`. |
26
- | Shared variants | Variant | `.solid` (filled) and `.outline` (bordered) emphasis. |
27
- | `.sm` / `.lg` | Size | Compact density. |
21
+ | Class | Kind | Description |
22
+ |-----------------|-------------|--------------------------------------------------------------|
23
+ | `.badge` | Component | Compact label; soft by default. |
24
+ | `.badge:empty` | Composition | Truly-empty badge renders as a solid dot. |
25
+ | Shared intents | Intent | `.primary`, `.secondary`, `.success`, `.warning`, `.danger`. |
26
+ | Shared variants | Variant | `.solid` (filled) and `.outline` (bordered) emphasis. |
27
+ | `.sm` / `.lg` | Size | Compact density. |
28
28
 
29
29
  ## Basic usage
30
30
 
@@ -4,22 +4,22 @@ Actions and navigation with shared intents, variants, sizes, and loading, presse
4
4
 
5
5
  ## Class reference
6
6
 
7
- | Class | Kind | Description |
8
- |---|---|---|
9
- | `.btn` | Component | Base button. Solid by default; works on `<button>`, `<a href>`, and button-like `<input>`. |
10
- | `.primary` | Intent | Primary action. |
11
- | `.secondary` | Intent | Secondary action. |
12
- | `.success` | Intent | Positive outcome. |
13
- | `.warning` | Intent | Caution. |
14
- | `.danger` | Intent | Destructive action. |
15
- | `.neutral` | Intent | Neutral tone (the `.btn` default). |
16
- | `.soft` | Variant | Muted intent-tinted surface. |
17
- | `.outline` | Variant | Transparent with an intent-colored border. |
18
- | `.solid` | Variant | Filled intent background — the `.btn` default. |
19
- | `.ghost` | Variant | Borderless text button (button-only). |
20
- | `.link` | Variant | Underlined text button (button-only). |
21
- | `.sm` / `.lg` | Size | Compact or large control height. |
22
- | `.icon-only` | Variant | Square icon button sized to the control height. |
7
+ | Class | Kind | Description |
8
+ |---------------|-----------|--------------------------------------------------------------------------------------------|
9
+ | `.btn` | Component | Base button. Solid by default; works on `<button>`, `<a href>`, and button-like `<input>`. |
10
+ | `.primary` | Intent | Primary action. |
11
+ | `.secondary` | Intent | Secondary action. |
12
+ | `.success` | Intent | Positive outcome. |
13
+ | `.warning` | Intent | Caution. |
14
+ | `.danger` | Intent | Destructive action. |
15
+ | `.neutral` | Intent | Neutral tone (the `.btn` default). |
16
+ | `.soft` | Variant | Muted intent-tinted surface. |
17
+ | `.outline` | Variant | Transparent with an intent-colored border. |
18
+ | `.solid` | Variant | Filled intent background — the `.btn` default. |
19
+ | `.ghost` | Variant | Borderless text button (button-only). |
20
+ | `.link` | Variant | Underlined text button (button-only). |
21
+ | `.sm` / `.lg` | Size | Compact or large control height. |
22
+ | `.icon-only` | Variant | Square icon button sized to the control height. |
23
23
 
24
24
  ## Basic usage
25
25
 
@@ -4,19 +4,21 @@ Flexible content container with optional header, body, and footer regions, plus
4
4
 
5
5
  ## Class reference
6
6
 
7
- | Class | Kind | Description |
8
- |---|---|---|
9
- | `.card` | Component | Neutral raised surface for grouped content. |
10
- | `.raised` | Variant | Elevated surface with a soft shadow. |
11
- | `.subtle` | Variant | Lower contrast against the page surface. |
7
+ | Class | Kind | Description |
8
+ |-------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
9
+ | `.card` | Component | Neutral raised surface for grouped content. |
10
+ | `.raised` | Variant | Elevated surface with a soft shadow. |
11
+ | `.subtle` | Variant | Lower contrast against the page surface. |
12
12
  | `.inverted` | Surface modifier | Inverse surface treatment: paints `--surface-solid` and swaps the foreground to `--surface`, so it inverts in dark themes instead of always reading as dark. Apply as `class="card inverted"`, or on any block. |
13
- | `.compact` | Variant | Tighter padding for dense contexts. |
13
+ | `.compact` | Variant | Tighter padding for dense contexts. |
14
14
 
15
15
  ## Basic usage
16
16
 
17
17
  Use semantic elements inside the card. A direct `<header>` or `<footer>` is the
18
- card's structural slot. Cards do not own page spacing — compose them with
19
- layout primitives like `.grid`.
18
+ card's structural slot. A direct `<footer>` is anchored to the bottom of the
19
+ card when extra block space is available, so prices and actions line up across
20
+ equal-height cards. Cards do not own page spacing — compose them with layout
21
+ primitives like `.grid`.
20
22
 
21
23
  ```html demo
22
24
  <div style="max-inline-size: 32rem">
@@ -95,7 +97,9 @@ colored headers, or footers.
95
97
 
96
98
  ## In grids
97
99
 
98
- Cards display nicely in grids with equal-height behavior.
100
+ Cards display nicely in grids with equal-height behavior. Each card in a row
101
+ stretches to the row height, and a direct `<footer>` anchors to the bottom, so
102
+ all footers in the row line up regardless of body length.
99
103
 
100
104
  ```html demo
101
105
  <section class="grid">
@@ -1,6 +1,6 @@
1
1
  # Chat
2
2
 
3
- > **Optional** — import `actual-css/css/optional/chat` or `actual-css/css/optional/index`.
3
+ > **Module** — import `actual-css/css/components/chat` or `actual-css/css/components`.
4
4
 
5
5
  Chat lays out message metadata, an optional avatar, and a content-sized bubble
6
6
  at either edge of a conversation.
@@ -36,13 +36,13 @@ put `role="log"` on individual messages.
36
36
 
37
37
  ## Class reference
38
38
 
39
- | Class | Description |
40
- |---|---|
41
- | `.chat` | Message row grid. |
42
- | `.chat-start` / `.chat-end` | Logical inline placement. |
43
- | `.chat-avatar` | Avatar grid slot; compose it with `.avatar`. |
44
- | `.chat-header` / `.chat-footer` | Muted message metadata. |
45
- | `.chat-bubble` | Content-sized message surface. |
39
+ | Class | Description |
40
+ |---------------------------------|----------------------------------------------|
41
+ | `.chat` | Message row grid. |
42
+ | `.chat-start` / `.chat-end` | Logical inline placement. |
43
+ | `.chat-avatar` | Avatar grid slot; compose it with `.avatar`. |
44
+ | `.chat-header` / `.chat-footer` | Muted message metadata. |
45
+ | `.chat-bubble` | Content-sized message surface. |
46
46
 
47
47
  ## CSS hooks
48
48
 
@@ -4,13 +4,13 @@
4
4
 
5
5
  ## Class reference
6
6
 
7
- | Class | Kind | Description |
8
- |---|---|---|
9
- | `.modal` | Component | Centered modal surface built on the native `<dialog>` element. |
10
- | `.scrollable` | Variant | Keeps the header and footer visible while the dialog body scrolls. |
11
- | `.dialog-confirmation` | Variant | Separates a confirmation message from its full-width action band. |
12
- | `.dialog-icon` | Component | Circular intent-aware icon well for confirmation messages. |
13
- | `.dialog-close` | Component | Icon-only close button anchored to the modal's top end, out of the content flow. |
7
+ | Class | Kind | Description |
8
+ |------------------------|-----------|----------------------------------------------------------------------------------|
9
+ | `.modal` | Component | Centered modal surface built on the native `<dialog>` element. |
10
+ | `.scrollable` | Variant | Keeps the header and footer visible while the dialog body scrolls. |
11
+ | `.dialog-confirmation` | Variant | Separates a confirmation message from its full-width action band. |
12
+ | `.dialog-icon` | Component | Circular intent-aware icon well for confirmation messages. |
13
+ | `.dialog-close` | Component | Icon-only close button anchored to the modal's top end, out of the content flow. |
14
14
 
15
15
  ## Usage
16
16
 
@@ -4,9 +4,9 @@
4
4
 
5
5
  ## Class reference
6
6
 
7
- | Class | Kind | Description |
8
- |---|---|---|
9
- | `.drawer` | Component | Modal side-sheet built on the native `<dialog>` element. |
7
+ | Class | Kind | Description |
8
+ |-----------------|-----------|------------------------------------------------------------|
9
+ | `.drawer` | Component | Modal side-sheet built on the native `<dialog>` element. |
10
10
  | `.drawer-close` | Component | Icon-only close button that sits inside the drawer header. |
11
11
 
12
12
  ## Usage
@@ -1,6 +1,6 @@
1
1
  # Floating action button
2
2
 
3
- > **Optional** — import `actual-css/css/optional/fab` or `actual-css/css/optional/index`.
3
+ > **Module** — import `actual-css/css/components/fab` or `actual-css/css/components`.
4
4
 
5
5
  FAB fixes a primary action near the viewport's block-end and inline-end edges.
6
6
  The existing button component owns its size, shape, intent, and interaction.
@@ -102,12 +102,12 @@ the open state so a plus naturally becomes a close symbol.
102
102
 
103
103
  ## Class reference
104
104
 
105
- | Class | Description |
106
- |---|---|
107
- | `.fab` | Fixed viewport placement; use `details` for a speed dial. |
108
- | `.fab-actions` | Collapsible vertical action list. |
109
- | `.fab-action` | One horizontal label-and-button unit. |
110
- | `.fab-label` | Compact floating label for an action. |
105
+ | Class | Description |
106
+ |----------------|-----------------------------------------------------------|
107
+ | `.fab` | Fixed viewport placement; use `details` for a speed dial. |
108
+ | `.fab-actions` | Collapsible vertical action list. |
109
+ | `.fab-action` | One horizontal label-and-button unit. |
110
+ | `.fab-label` | Compact floating label for an action. |
111
111
 
112
112
  ## CSS hooks
113
113
 
@@ -14,13 +14,13 @@ flex list, `.nav-list` a vertical grid. Putting both on one element resolves to
14
14
 
15
15
  ## Class reference
16
16
 
17
- | Class | Kind | Description |
18
- |---|---|---|
19
- | `.navbar` | Component | Horizontal bar shell. |
20
- | `.navbar-brand` | Composition | Brand link at the inline start. |
21
- | `.navbar-nav` | Composition | Horizontal link list. |
22
- | `.nav-link` | Component | A link item; current page via `aria-current="page"`. |
23
- | `.nav-list` | Component | Shared vertical navigation list, reused by `.drawer`. |
17
+ | Class | Kind | Description |
18
+ |-----------------|-------------|-------------------------------------------------------|
19
+ | `.navbar` | Component | Horizontal bar shell. |
20
+ | `.navbar-brand` | Composition | Brand link at the inline start. |
21
+ | `.navbar-nav` | Composition | Horizontal link list. |
22
+ | `.nav-link` | Component | A link item; current page via `aria-current="page"`. |
23
+ | `.nav-list` | Component | Shared vertical navigation list, reused by `.drawer`. |
24
24
 
25
25
  ## Basic usage
26
26
 
@@ -42,7 +42,8 @@ For a vertical sidebar nav, use `.nav-list` inside the drawer or sidebar.
42
42
  There is no collapse/toggler mechanism. For a responsive navigation, keep the
43
43
  horizontal `.navbar` for the desktop bar and compose the mobile experience from
44
44
  a `.drawer` with a vertical `.nav-list`, opened by a `command="show-modal"` /
45
- `commandfor` trigger.
45
+ `commandfor` trigger. Keep that trigger outside the `<nav>` subtree you hide at
46
+ narrow widths, or hiding the nav hides the control that opens it.
46
47
 
47
48
  ```html demo
48
49
  <nav class="navbar" aria-label="Main">
@@ -9,14 +9,15 @@
9
9
  - Numeric links may use `aria-label="Page N"` for clearer screen reader output.
10
10
  - Prefer text labels for Previous and Next. Icon-only controls need an accessible name.
11
11
  - Page links can compose with `.btn` for button-like hit targets.
12
+ - Arrows, page numbers, and truncation ellipses share one geometric system: every item gets the same minimum footprint, and wider content (100, 1000, text labels) grows past it naturally.
12
13
  - Truncated ranges are plain text with `.muted` and `aria-hidden="true"`, not `.btn` — they are decorative, not actionable.
13
14
 
14
15
  ## Class reference
15
16
 
16
- | Class | Kind | Description |
17
- |---|---|---|
17
+ | Class | Kind | Description |
18
+ |---------------|-----------|--------------------------------|
18
19
  | `.pagination` | Component | Ordered list of page controls. |
19
- | `.sm` / `.lg` | Size | Control density. |
20
+ | `.sm` / `.lg` | Size | Control density. |
20
21
 
21
22
  ## Basic usage
22
23
 
@@ -10,10 +10,10 @@
10
10
 
11
11
  ## Class reference
12
12
 
13
- | Class | Kind | Description |
14
- |---|---|---|
15
- | `.skeleton` | Component | Animated placeholder shape. |
16
- | `data-shape` | Modifier | Geometry presets: `text`, `title`, `avatar`, `box`. |
13
+ | Class | Kind | Description |
14
+ |--------------|-----------|-----------------------------------------------------|
15
+ | `.skeleton` | Component | Animated placeholder shape. |
16
+ | `data-shape` | Modifier | Geometry presets: `text`, `title`, `avatar`, `box`. |
17
17
 
18
18
  ## Basic usage
19
19
 
@@ -12,11 +12,11 @@
12
12
 
13
13
  ## Class reference
14
14
 
15
- | Class | Kind | Description |
16
- |---|---|---|
17
- | `.spinner` | Component | Circular loading indicator using `currentColor`. |
18
- | `.sm` / `.lg` | Size | Smaller (`0.75em`) or larger (`2rem`) spinner. |
19
- | Shared intents | Intent | `.primary`, `.secondary`, `.success`, `.warning`, `.danger` color. |
15
+ | Class | Kind | Description |
16
+ |----------------|-----------|--------------------------------------------------------------------|
17
+ | `.spinner` | Component | Circular loading indicator using `currentColor`. |
18
+ | `.sm` / `.lg` | Size | Smaller (`0.75em`) or larger (`2rem`) spinner. |
19
+ | Shared intents | Intent | `.primary`, `.secondary`, `.success`, `.warning`, `.danger` color. |
20
20
 
21
21
  ## Basic usage
22
22
 
@@ -11,10 +11,11 @@
11
11
 
12
12
  ## Class reference
13
13
 
14
- | Class | Kind | Description |
15
- |---|---|---|
16
- | `.table-wrap` | Component | Scroll container and outer chrome (surface, border, radius). |
17
- | `.table` | Component | The table itself; row and cell rules. |
14
+ | Class | Kind | Description |
15
+ |-----------------|-----------|--------------------------------------------------------------|
16
+ | `.table-wrap` | Component | Scroll container and outer chrome (surface, border, radius). |
17
+ | `.table` | Component | The table itself; row and cell rules. |
18
+ | `.table.compact`| Density | Tighter cell padding; typography is unchanged. |
18
19
 
19
20
  ## Basic usage
20
21
 
@@ -96,7 +97,31 @@ table width before the wrapper scrolls horizontally.
96
97
  </div>
97
98
  ```
98
99
 
100
+ ## Compact tables
101
+
102
+ `.compact` lowers the cell padding only — density never changes typography.
103
+ It is the same vocabulary as `.card.compact`.
104
+
105
+ ```html demo
106
+ <div class="table-wrap">
107
+ <table class="table compact">
108
+ <caption>Standings by position</caption>
109
+ <thead>
110
+ <tr>
111
+ <th scope="col">Pos</th>
112
+ <th scope="col">Name</th>
113
+ </tr>
114
+ </thead>
115
+ <tbody>
116
+ <tr><td>1</td><td>John Nemo</td></tr>
117
+ <tr><td>2</td><td>Jane Doe</td></tr>
118
+ <tr><td>3</td><td>Ada Morgan</td></tr>
119
+ </tbody>
120
+ </table>
121
+ </div>
122
+ ```
123
+
99
124
  ## CSS hooks
100
125
 
101
- - `--table-cell-pad` — cell padding.
126
+ - `--table-cell-pad` — cell padding; `.compact` re-declares it tighter.
102
127
  - `--table-min` — minimum table width before `.table-wrap` scrolls horizontally.
@@ -4,19 +4,19 @@
4
4
 
5
5
  ## Class reference
6
6
 
7
- | Class | Kind | Description |
8
- |---|---|---|
9
- | `.flyout-trigger` | Composition | Positioning wrapper for a trigger and its panel; gives the flyout a local absolute-position fallback before JavaScript positions it. |
10
- | `.stretch` | Modifier | Stretches a `.flyout-trigger` to span its container, e.g. the last row of a full-width sidebar nav list. |
11
- | `.flyout` | Component | Floating action or nav surface, positioned by JavaScript. |
12
- | `.menu` | Component | Action-list primitive with strict `.menu > li > .menu-item` anatomy. |
13
- | `.menu-item` | Component | One action row; participates in roving focus. |
14
- | `.menu-item-icon` | Slot | Fixed leading column for a decorative icon. |
15
- | `.menu-item-text` | Slot | Flexible label column; truncates when the row is constrained. |
16
- | `.menu-item-end` | Slot | Trailing metadata such as a shortcut, badge, or status. |
17
- | `.menu-label` | Variant | Muted section heading inside a menu; not interactive. |
18
- | `.menu-separator` | Variant | Divider between menu groups (`<hr role="separator">`). |
19
- | `.sm` / `.lg` | Variant | Compact or large density. |
7
+ | Class | Kind | Description |
8
+ |-------------------|-------------|----------------------------------------------------------------------|
9
+ | `.flyout-trigger` | Composition | Positioning wrapper for a trigger and its panel. |
10
+ | `.stretch` | Modifier | Stretches a `.flyout-trigger` to span its container. |
11
+ | `.flyout` | Component | Floating action or nav surface, positioned by JavaScript. |
12
+ | `.menu` | Component | Action-list primitive with strict `.menu > li > .menu-item` anatomy. |
13
+ | `.menu-item` | Component | One action row; participates in roving focus. |
14
+ | `.menu-item-icon` | Slot | Fixed leading column for a decorative icon. |
15
+ | `.menu-item-text` | Slot | Flexible label column; truncates when the row is constrained. |
16
+ | `.menu-item-end` | Slot | Trailing metadata such as a shortcut, badge, or status. |
17
+ | `.menu-label` | Variant | Muted section heading inside a menu; not interactive. |
18
+ | `.menu-separator` | Variant | Divider between menu groups (`<hr role="separator">`). |
19
+ | `.sm` / `.lg` | Variant | Compact or large density. |
20
20
 
21
21
  ## Usage
22
22
 
@@ -33,4 +33,4 @@ is a no-op until the module is loaded again with a DOM.
33
33
  Each interactive component has its own page documenting the exact markup its
34
34
  enhancement expects: Dialog, Drawer, Flyout, Tooltip, Tabs, Scrollspy, and
35
35
  Status Bar. The default runtime is loaded on the docs pages, so the examples
36
- work with the documented markup alone.
36
+ work with the documented markup alone.
@@ -8,11 +8,11 @@ or style `[aria-current]` yourself.
8
8
 
9
9
  ## Class reference
10
10
 
11
- | Class | Kind | Description |
12
- |---|---|---|
13
- | `.scrollspy` | Component | Marks the nav region for the enhancer; adds no visual styles. |
14
- | `.nav-list` | Composition | Vertical list of navigation links. |
15
- | `.nav-link` | Component | Navigation link whose active state comes from `[aria-current]`. |
11
+ | Class | Kind | Description |
12
+ |--------------|-------------|-----------------------------------------------------------------|
13
+ | `.scrollspy` | Component | Marks the nav region for the enhancer; adds no visual styles. |
14
+ | `.nav-list` | Composition | Vertical list of navigation links. |
15
+ | `.nav-link` | Component | Navigation link whose active state comes from `[aria-current]`. |
16
16
 
17
17
  ## Usage
18
18
 
@@ -68,4 +68,4 @@ without JavaScript.
68
68
  ```
69
69
 
70
70
  Keep this as progressive enhancement. The JavaScript enhancement remains the
71
- portable fallback — the same markup serves both paths.
71
+ portable fallback — the same markup serves both paths.
@@ -2,6 +2,10 @@
2
2
 
3
3
  > Singleton floating area for short, non-critical, transient feedback.
4
4
 
5
+ `status-bar` is for transient feedback, not persistent application status. For
6
+ persistent status, metrics, or operational state, compose regular content
7
+ primitives such as cards, badges, and clusters.
8
+
5
9
  A status bar is a single live region, not a stacked toaster. New messages
6
10
  replace the previous one. Keep one element in the HTML, styled with
7
11
  `.status-bar` and carrying the `[data-status][role="status"]` contract that the
@@ -69,4 +73,4 @@ document.dispatchEvent(new CustomEvent("actual:status", {
69
73
  - `--status-bg` — bar background.
70
74
  - `--status-fg` — bar text color.
71
75
 
72
- Prefer an intent class over setting these directly.
76
+ Prefer an intent class over setting these directly.
@@ -4,11 +4,11 @@
4
4
 
5
5
  ## Class reference
6
6
 
7
- | Class | Kind | Description |
8
- |---|---|---|
9
- | `.tabs` | Component | Tab strip; pairs with `role="tablist"`. |
10
- | `.tab` | Component | One tab trigger; pairs with `role="tab"`. |
11
- | `.primary` | Intent | Tints the selected tab's indicator and text. |
7
+ | Class | Kind | Description |
8
+ |------------|-----------|----------------------------------------------|
9
+ | `.tabs` | Component | Tab strip; pairs with `role="tablist"`. |
10
+ | `.tab` | Component | One tab trigger; pairs with `role="tab"`. |
11
+ | `.primary` | Intent | Tints the selected tab's indicator and text. |
12
12
 
13
13
  ## Usage
14
14
 
@@ -77,4 +77,4 @@ JavaScript involved:
77
77
 
78
78
  ## CSS hooks
79
79
 
80
- - `--tab-gap` — space between an icon and the label text (default `0.375em`).
80
+ - `--tab-gap` — space between an icon and the label text (default `0.375em`).
@@ -127,4 +127,4 @@ and solid colors both work.
127
127
  - `--tooltip-arrow-size` — arrow size.
128
128
 
129
129
  `--arrow-x` and `--arrow-y` are written by the positioner at runtime, not set by
130
- the author. See the JavaScript runtime documentation.
130
+ the author. See the JavaScript runtime documentation.
@@ -1,28 +1,10 @@
1
1
  # Examples
2
2
 
3
- > Real pages built with Actual CSS - an admin application and a set of standalone templates - to see the primitives, components, and patterns composed the way they are meant to be used.
3
+ > Real pages built with Actual CSS to see the primitives, components, and patterns composed the way they are meant to be used.
4
4
 
5
- The examples live in the repository under `demo/` and load the shipped bundles
6
- from `dist/` (`actual.css`, `optional.css`, `actual-themes.min.css`,
7
- `actual.js`), referenced with stable URLs.
8
-
9
- ## Admin application
10
-
11
- `demo/admini/` is a complete admin interface: application shell, navigation,
12
- tables, forms, dialogs, and feedback states.
13
-
14
- - [Dashboard](../../demo/admini/index.html) - app shell, navbar, stat cards, charts, recent activity
15
- - [Login](../../demo/admini/login.html) - centered auth card with social actions
16
- - [Forms](../../demo/admini/forms.html) - inputs, choice cards, validation, joined controls, sticky actions
17
- - [Tables](../../demo/admini/tables.html) - data tables, status badges, bulk actions
18
- - [Kanban](../../demo/admini/kanban.html) - drag-free column layout with cards
19
- - [Chat](../../demo/admini/chat.html) - conversation list, message thread, composer
20
- - [Calendar](../../demo/admini/calendar.html) - month grid with event cards
21
- - [Invoice](../../demo/admini/invoice.html) - structured document layout
22
- - [Profile](../../demo/admini/profile.html) - avatar, tabs, settings rows
23
- - [Settings](../../demo/admini/settings.html) - grouped settings with switches
24
- - [User grid](../../demo/admini/user-grid.html) - avatar grid, filters, pagination
25
- - [404](../../demo/admini/404.html) - empty state
5
+ The examples live in the repository under `demo/` and load `actual.full.css`
6
+ and `actual.full.js` from `dist/`, plus the theme palettes bundle from
7
+ `demo/assets/` (`bun run build:themes`).
26
8
 
27
9
  ## Templates
28
10
 
@@ -37,7 +19,42 @@ tables, forms, dialogs, and feedback states.
37
19
  - [Blog](../../demo/templates/blog.html) - article page with prose
38
20
  - [Blocks](../../demo/templates/blocks.html) - layout building blocks
39
21
  - [Layout reference](../../demo/templates/layouts.html) - canonical compositions built only with the layout primitives
22
+ - [Grid density](../../demo/templates/grid.html) - the grid contracts on resizable stages, with the pitfalls called out
40
23
  - [Density](../../demo/templates/density.html) - compact control density
41
24
 
25
+ ## Sites
26
+
27
+ Full sites demo living in `demo/sites`.
28
+
29
+ ### Admin application
30
+
31
+ `demo/sites/admini/` is a complete admin interface: application shell, navigation,
32
+ tables, forms, dialogs, and feedback states.
33
+
34
+ - [Dashboard](../../demo/sites/admini/index.html) - app shell, navbar, stat cards, quota meter, recent activity
35
+ - [Login](../../demo/sites/admini/login.html) - centered auth card with social actions
36
+ - [Forms](../../demo/sites/admini/forms.html) - inputs, choice cards, validation, joined controls
37
+ - [Tables](../../demo/sites/admini/tables.html) - data tables, status badges, right-click row actions
38
+ - [Kanban](../../demo/sites/admini/kanban.html) - drag-and-drop columns with card context menus
39
+ - [Chat](../../demo/sites/admini/chat.html) - conversation list, message thread, composer
40
+ - [Calendar](../../demo/sites/admini/calendar.html) - month grid with event chips and month navigation
41
+ - [Invoice](../../demo/sites/admini/invoice.html) - structured document layout, print styles
42
+ - [Profile](../../demo/sites/admini/profile.html) - avatar header, tabs, activity feed
43
+ - [Settings](../../demo/sites/admini/settings.html) - vertical tabs, validation, confirmation dialog
44
+ - [User grid](../../demo/sites/admini/user-grid.html) - avatar grid with live search and role filter
45
+ - [404](../../demo/sites/admini/404.html) - error state
46
+
47
+ ### Neon ramen
48
+
49
+ `demo/sites/neon-ramen/` is a complete restaurant storefront: campaign home,
50
+ menu browsing, item customization, locations, and checkout validation flow.
51
+
52
+ - [Home](../../demo/sites/neon-ramen/index.html) - campaign landing, hero story, live cart summary
53
+ - [Menu](../../demo/sites/neon-ramen/menu.html) - tabbed categories with equal-height product cards
54
+ - [Item](../../demo/sites/neon-ramen/item.html) - product configurator with choice cards and form controls
55
+ - [Locations](../../demo/sites/neon-ramen/locations.html) - responsive shop list with practical location metadata
56
+ - [Order](../../demo/sites/neon-ramen/order.html) - checkout form with validation feedback states
57
+
58
+
42
59
  > Note: the examples reference the repository's source files, so they open from
43
60
  > the checkout, not from a standalone copy of `site`.