@redspartanlabs/spartacss 0.0.0-stage → 1.0.4

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 (60) hide show
  1. package/CHANGELOG.md +528 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +123 -0
  4. package/README.md +287 -2
  5. package/RELEASING.md +314 -0
  6. package/dist/sparta-all.css +5566 -0
  7. package/dist/sparta-all.min.css +1 -0
  8. package/dist/sparta-icons.css +953 -0
  9. package/dist/sparta-icons.min.css +1 -0
  10. package/dist/sparta-notifications.css +607 -0
  11. package/dist/sparta-notifications.min.css +1 -0
  12. package/dist/sparta.css +851 -0
  13. package/dist/sparta.min.css +1 -0
  14. package/dist/spartacss.css +4325 -0
  15. package/dist/spartacss.min.css +1 -0
  16. package/docs/README.md +126 -0
  17. package/docs/accessibility.md +125 -0
  18. package/docs/accordion.md +79 -0
  19. package/docs/adr/0001-package-architecture.md +56 -0
  20. package/docs/adr/0002-versioning-and-stability-policy.md +104 -0
  21. package/docs/adr/0003-independent-iconography-system.md +154 -0
  22. package/docs/adr/0004-git-tag-artifact-distribution.md +146 -0
  23. package/docs/adr/0005-canonical-ui-component-standard.md +306 -0
  24. package/docs/adr/0006-npm-registry-distribution.md +112 -0
  25. package/docs/adr/0007-documentation-preview-contract.md +106 -0
  26. package/docs/alert.md +75 -0
  27. package/docs/app-shell.md +97 -0
  28. package/docs/avatar.md +105 -0
  29. package/docs/badge.md +120 -0
  30. package/docs/breadcrumbs.md +69 -0
  31. package/docs/button.md +92 -0
  32. package/docs/card.md +79 -0
  33. package/docs/code.md +88 -0
  34. package/docs/design/component-standard.md +814 -0
  35. package/docs/design/icon-provenance-inventory.md +171 -0
  36. package/docs/design/icon-standard.md +365 -0
  37. package/docs/divider.md +78 -0
  38. package/docs/drawer.md +114 -0
  39. package/docs/dropdown.md +93 -0
  40. package/docs/empty-state.md +64 -0
  41. package/docs/extraction-plan.md +116 -0
  42. package/docs/forms.md +207 -0
  43. package/docs/icons.md +94 -0
  44. package/docs/kbd.md +52 -0
  45. package/docs/layout.md +102 -0
  46. package/docs/link.md +93 -0
  47. package/docs/list.md +68 -0
  48. package/docs/modal.md +94 -0
  49. package/docs/motion.md +98 -0
  50. package/docs/notifications.md +188 -0
  51. package/docs/page-header.md +88 -0
  52. package/docs/pagination.md +71 -0
  53. package/docs/progress.md +136 -0
  54. package/docs/stat.md +92 -0
  55. package/docs/table.md +80 -0
  56. package/docs/tabs.md +71 -0
  57. package/docs/theming.md +55 -0
  58. package/docs/tokens.md +167 -0
  59. package/docs/tooltip.md +58 -0
  60. package/package.json +52 -4
package/CHANGELOG.md ADDED
@@ -0,0 +1,528 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
7
+ per ADR-0001.
8
+
9
+ ## [1.0.4] - 2026-10-09
10
+
11
+ ### Added
12
+
13
+ - [ADR-0007](docs/adr/0007-documentation-preview-contract.md), which defines
14
+ how a documentation page designates one HTML example for optional live
15
+ rendering: the fence info string `html preview`. The marker grants
16
+ permission and requires nothing of a consumer, a page has at most one, and
17
+ consumers must not infer a live example any other way.
18
+ - Section 15.8 of the component standard, stating the authoring rule for the
19
+ marker.
20
+ - `scripts/verify-docs-preview.mjs`, run by `npm run verify`, which checks the
21
+ marker, the one-per-page limit and the content rules. `RELEASING.md` runs it
22
+ against the extracted release package.
23
+
24
+ ### Changed
25
+
26
+ - The Size example on the Button page carries the marker. The page renders as
27
+ before.
28
+ - The Decisions table in the documentation index now lists ADR-0005, ADR-0006
29
+ and ADR-0007.
30
+
31
+ This release changes documentation and the release procedure only. No public
32
+ class selector, modifier, design token, markup contract or `exports` entry
33
+ point changed, no shipped CSS output changed, and the package whitelist is
34
+ unchanged — a non-breaking, patch-level change per ADR-0002. The package gains
35
+ ADR-0007 under `docs/adr/`.
36
+
37
+ ## [1.0.3] - 2026-10-09
38
+
39
+ ### Added
40
+
41
+ - [ADR-0006](docs/adr/0006-npm-registry-distribution.md), which records npm
42
+ (the public registry) as SpartaCSS's intended registry under the name
43
+ `@redspartanlabs/spartacss`, GitHub as the canonical home for source, tags
44
+ and releases, publication as a manual and irreversible step, and `1.0.2` as
45
+ a GitHub-only release. Git-tag installation remains supported.
46
+ - A "Publishing to npm" procedure in `RELEASING.md`: preflight checks for the
47
+ release tag and commit, name and version, rebuild and verification, package
48
+ inventory and integrity, registry target, authentication and access, and
49
+ version availability; publication of the verified tarball with
50
+ `--access public`; and verification of the published metadata, contents and
51
+ a clean consumer install.
52
+
53
+ ### Changed
54
+
55
+ - The README now names npm as the intended distribution channel and no longer
56
+ says registry selection is pending. It does not claim that any version is
57
+ available on npm.
58
+ - [ADR-0001](docs/adr/0001-package-architecture.md) and
59
+ [ADR-0004](docs/adr/0004-git-tag-artifact-distribution.md) gained
60
+ cross-references to ADR-0006. Their decisions are unchanged.
61
+
62
+ This release changes documentation and the release procedure only. No public
63
+ class selector, modifier, design token, markup contract or `exports` entry
64
+ point changed, no shipped CSS output changed, and the package whitelist is
65
+ unchanged — a non-breaking, patch-level change per ADR-0002. The package gains
66
+ ADR-0006 under `docs/adr/`.
67
+
68
+ ## [1.0.2] - 2026-10-09
69
+
70
+ ### Changed
71
+
72
+ - The package now includes its documentation. `package.json`'s `files` list
73
+ adds `docs/`, `CHANGELOG.md` and `RELEASING.md`, so the documentation
74
+ index, the component and foundation pages, the `docs/adr/` and
75
+ `docs/design/` material, and the files that the README and the
76
+ documentation link to are present in an installed package. No shipped CSS,
77
+ `exports` entry or package behavior changes. The `files` change was checked
78
+ against [ADR-0004](docs/adr/0004-git-tag-artifact-distribution.md)
79
+ Decisions 2 and 8: Decision 2 names the release contents as sitting
80
+ "alongside" the whitelisted files and does not make that list exclusive, and
81
+ Decision 8's `exports` map is unchanged.
82
+ - Reworded the sentence in
83
+ [ADR-0005](docs/adr/0005-canonical-ui-component-standard.md) that describes
84
+ how RedSpartan HQ presents SpartaCSS. The record remains `Proposed`.
85
+
86
+ ## [1.0.1] - 2026-08-13
87
+
88
+ ### Fixed
89
+
90
+ - Corrected the Git-tag distribution architecture: removed the `prepare`
91
+ lifecycle script so `npm install github:redspartanlabs/spartacss#<tag>`
92
+ no longer executes SpartaCSS's build on the consumer's machine. Release
93
+ tags now carry the prebuilt `dist/` artifacts directly (see
94
+ [ADR-0004](docs/adr/0004-git-tag-artifact-distribution.md)).
95
+ - Replaced POSIX-only build/clean scripts (`rm -rf`, `mkdir -p`, `cp`) with
96
+ cross-platform Node equivalents, and replaced the Bash-only
97
+ `verify-legacy-bundle.sh` with `scripts/verify-legacy-bundle.mjs`, so the
98
+ maintainer build works under Windows `cmd.exe`, not only POSIX shells.
99
+ - Added `.gitattributes` (`*.css text eol=lf`) so committed CSS artifacts
100
+ have stable line endings independent of the checkout platform's
101
+ `core.autocrlf` setting.
102
+
103
+ ### Added
104
+
105
+ - `npm run verify:artifact` (`scripts/verify-release-artifact.mjs`), which
106
+ checks that every `package.json` `exports` entry resolves to a built,
107
+ non-empty `dist/` file — the mechanical release-artifact check
108
+ referenced by `RELEASING.md` and
109
+ [ADR-0004](docs/adr/0004-git-tag-artifact-distribution.md).
110
+ - `allowScripts` in `package.json`, explicitly approving
111
+ `lightningcss-cli@1.33.0`'s install script under npm 12's
112
+ script-approval policy, so the maintainer build's Lightning CSS binary
113
+ stages correctly.
114
+
115
+ This release changes SpartaCSS's build tooling and Git-tag distribution
116
+ mechanism only. No public class selector, modifier, design token,
117
+ markup contract, or `exports` entry point changed, and no shipped CSS
118
+ output changed — a non-breaking, patch-level change per ADR-0002.
119
+
120
+ ## [1.0.0] - 2026-08-12
121
+
122
+ ### Changed
123
+
124
+ - Replaced inherited Feather/Lucide geometry with original RedSpartan
125
+ construction, per [ADR-0003](docs/adr/0003-independent-iconography-system.md)
126
+ and [`docs/design/icon-standard.md`](docs/design/icon-standard.md), for
127
+ the 11 frozen foundational icons: `check`, `chevron-down`, `arrow-right`,
128
+ `sort-asc`, `sort-desc`, `x`, `plus`, `minus`, `search`, `settings`,
129
+ `user`. This includes the two consumers that source shared foundational
130
+ geometry outside the `.sp-icon-*` class system —
131
+ `--sp-icon-bg-check-white` (checkbox/list checkmark) and the local
132
+ `.sp-select` chevron in `sparta-form.css` — both now match their
133
+ respective frozen constructions.
134
+ - **Visible identity change:** `settings` changed from a gear glyph to a
135
+ sliders glyph (three horizontal tracks with filled thumbs) as part of
136
+ the frozen-geometry replacement above. Consumers styling or measuring
137
+ the `.sp-icon-settings` shape specifically, rather than treating it as
138
+ an opaque icon, should verify their usage against the new construction.
139
+
140
+ ## [0.9.2] - 2026-08-07
141
+
142
+ ### Fixed
143
+
144
+ - Restored `@layer components` placement for `src/core/sparta-utilities.css`,
145
+ the same correction applied to the icons and notifications modules in
146
+ `0.9.1`. This file was unlayered with no documented rationale; two of
147
+ its selectors (`.sp-navbar__toggle`, `.sp-alert__icon`) are the sole
148
+ source of that property for their component, making this the same
149
+ category of undocumented cascade-precedence gap ADR-0002 was written
150
+ to close. No selector, declaration, value, or ordering changed — only
151
+ cascade-layer membership was corrected.
152
+ - `package.json` `version` corrected to `0.9.2`. The `0.9.1` release was
153
+ published with `package.json` still reading `"version": "0.9.0"` — a
154
+ release-process metadata error (see the `0.9.1` entry below). This
155
+ release restores agreement between the package version, the CHANGELOG,
156
+ the git tag, and the GitHub release, per `RELEASING.md`.
157
+
158
+ ### Added
159
+
160
+ - `RELEASING.md` — the operational release checklist, kept separate from
161
+ `docs/adr/0002-versioning-and-stability-policy.md` (which defines what
162
+ counts as a breaking change, not how to execute a release).
163
+
164
+ ## [0.9.1] - 2026-08-07
165
+
166
+ ### Fixed
167
+
168
+ - Restored `@layer components` placement for `sparta-icons.css` and
169
+ `sparta-notifications.css`. Both modules were unlayered from
170
+ extraction through `0.9.0` — an undocumented oversight, not a
171
+ deliberate design choice (the pre-extraction monolith's rules
172
+ originated inside `@layer components`; see `docs/extraction-plan.md`).
173
+ No selector, declaration, value, or ordering changed — only
174
+ cascade-layer membership was corrected.
175
+ - Added the missing `--sp-shadow-xl` design token. It was referenced by
176
+ the Confirm/Dialog component's `box-shadow` but never defined, which
177
+ silently dropped the shadow entirely. The token now resolves correctly
178
+ across the default, light, and dark themes.
179
+
180
+ ### Added
181
+
182
+ - `Source:` footers to `docs/app-shell.md`, `docs/layout.md`, and
183
+ `docs/theming.md`, bringing them in line with the documentation
184
+ convention established in `0.8.0`/`0.9.0`.
185
+ - `docs/adr/0002-versioning-and-stability-policy.md` — defines what
186
+ constitutes a breaking change for SpartaCSS ahead of `1.0.0`, using
187
+ the `@layer` correction above as its founding precedent.
188
+
189
+ ### Known issue
190
+
191
+ - This release was published with `package.json` still reading
192
+ `"version": "0.9.0"` instead of `0.9.1` — a release-process metadata
193
+ error, not a CSS API change. The published `v0.9.1` git tag and GitHub
194
+ release are unaffected and remain the authoritative historical
195
+ artifacts for this version; they have not been modified. The version
196
+ field was corrected in `0.9.2`.
197
+
198
+ ## [0.9.0] - 2026-08-07
199
+
200
+ ### Added
201
+
202
+ - Component and module documentation completing the coverage started in
203
+ `0.8.0`, using the established consumer-facing template and the
204
+ combine-when-shared-source-file convention:
205
+ - `docs/drawer.md` — including the `.sp-backdrop` relationship and the
206
+ consumer responsibility around toggling it alongside `--open`.
207
+ - `docs/dropdown.md`
208
+ - `docs/table.md`
209
+ - `docs/tabs.md`
210
+ - `docs/pagination.md`
211
+ - `docs/breadcrumbs.md`
212
+ - `docs/stat.md`
213
+ - `docs/avatar.md` (`.sp-avatar` + `.sp-avatar-group`)
214
+ - `docs/progress.md` (Spinner, Progress Bar, and Skeleton)
215
+ - `docs/list.md`
216
+ - `docs/link.md`
217
+ - `docs/divider.md`
218
+ - `docs/kbd.md`
219
+ - `docs/empty-state.md`
220
+ - `docs/code.md` (inline code, code blocks, and syntax tokens)
221
+ - `docs/page-header.md`
222
+ - `docs/icons.md`
223
+ - `docs/notifications.md` (Toast, Alert Banner, and Confirm/Dialog)
224
+ - `--sp-ease-in` and `--sp-ease-back` in `sparta-tokens.css` — previously
225
+ referenced by the notifications module's Toast exit, Dialog overlay
226
+ exit, and Dialog entrance animations but never defined, which silently
227
+ dropped all three animations. Purely additive; no existing token
228
+ changed.
229
+ - `.sp-modal--closing` support for the supported Modal API
230
+ (`.sp-modal__overlay` / `.sp-modal__content`), mirroring the exit
231
+ transition the frozen legacy API (`.sp-modal-backdrop` /
232
+ `.sp-modal__dialog`) already had — closing a parity gap named at
233
+ `0.6.0`. Legacy behavior is unchanged.
234
+
235
+ ### Changed
236
+
237
+ - `docs/tooltip.md`, `docs/accordion.md`, `docs/modal.md` now link to
238
+ `docs/motion.md` and `docs/accessibility.md` for reduced-motion and
239
+ CSS-vs-JavaScript responsibility guidance instead of only stating it
240
+ inline.
241
+ - `docs/modal.md` updated to reflect that `.sp-modal--closing` is now
242
+ supported by both the current and legacy Modal APIs.
243
+
244
+ ## [0.8.0] - 2026-08-06
245
+
246
+ ### Added
247
+
248
+ - Foundation documentation:
249
+ - `docs/tokens.md` — token naming conventions, the color system,
250
+ typography tokens, the spacing scale, and reference-vs-override
251
+ guidance.
252
+ - `docs/motion.md` — transition tokens, the animation layer, and the
253
+ `prefers-reduced-motion` contract.
254
+ - `docs/accessibility.md` — CSS vs. JavaScript responsibility, keyboard
255
+ and focus expectations, ARIA responsibility boundaries, and semantic
256
+ HTML expectations.
257
+ - Component documentation, using the established consumer-facing template
258
+ (Purpose, Usage, Class API, Variants, State modifiers, Accessibility,
259
+ Source reference):
260
+ - `docs/button.md`
261
+ - `docs/forms.md`
262
+ - `docs/card.md`
263
+ - `docs/badge.md`
264
+ - `docs/alert.md`
265
+
266
+ ### Changed
267
+
268
+ - Documentation is now organized around a clear separation of concerns:
269
+ repository Markdown as the source of truth, foundation guidance (tokens,
270
+ motion, accessibility) separated from component API usage, and
271
+ accessibility responsibilities documented centrally rather than repeated
272
+ per component.
273
+
274
+ ## [0.7.0] - 2026-08-04
275
+
276
+ ### Changed
277
+
278
+ - Package maturity work: `package.json` `version` bumped `0.2.0` → `0.7.0`.
279
+ - `package.json` `description` replaced with a framework-agnostic tagline:
280
+ "A framework-agnostic CSS design system built for systems that must
281
+ last."
282
+ - Removed `"private": true` from `package.json` — SpartaCSS is now intended
283
+ for public npm distribution rather than being flagged as an internal
284
+ package.
285
+
286
+ ### Added
287
+
288
+ - `homepage` field in `package.json`, pointing at the repository's README.
289
+ - `keywords` field in `package.json` (`css`, `design-system`,
290
+ `framework-agnostic`, `frontend`, `web-development`) for registry
291
+ discoverability.
292
+
293
+ ## [0.6.0] - 2026-08-02
294
+
295
+ ### Added
296
+
297
+ - `--sp-bg-inverse` in `sparta-tokens.css` — a theme-invariant surface
298
+ token (`:root` only, not overridden per theme), mirroring the existing
299
+ theme-invariant `--sp-text-inverse`. Needed because every other
300
+ `--sp-bg-*` token flips per theme, but inverse-context UI (Tooltip's
301
+ surface) needs a background that stays dark regardless of the active
302
+ theme so its `--sp-text-inverse` text stays legible. Verified no
303
+ existing token already covered this before adding it.
304
+ - `docs/tooltip.md`, `docs/accordion.md`, `docs/modal.md` — the first
305
+ usage documentation for these three components, each naming the
306
+ supported and documented selector set and pointing at its frozen
307
+ legacy counterpart.
308
+
309
+ ### Changed
310
+
311
+ - `.sp-tooltip__text` (`sparta-tooltip.css`) now sources its background
312
+ from `--sp-bg-inverse` instead of a hardcoded `#111111` literal.
313
+ Value-for-value substitution only — no visual change in either theme,
314
+ since the supported tooltip API never varied by theme to begin with.
315
+ - `.sp-tooltip__text` now respects `prefers-reduced-motion: reduce`,
316
+ disabling its show/hide transition — ported from the legacy
317
+ `[data-tooltip]` implementation, which already had this and the
318
+ supported one didn't.
319
+ - `.sp-tooltip`/`.sp-tooltip__text`, `.sp-accordion__header`/
320
+ `.sp-accordion__icon`, and `.sp-modal__overlay`/`.sp-modal__content`
321
+ are now explicitly designated the supported, documented API for
322
+ Tooltip, Accordion, and Modal respectively. Their legacy counterparts
323
+ (`[data-tooltip]`/`.sp-tooltip--visible`, `.sp-accordion__trigger`/
324
+ `.sp-accordion__content--animated`, `.sp-modal-backdrop`/
325
+ `.sp-modal__dialog`) are now explicitly marked frozen in source
326
+ comments — same convention as `.sp-flex`/atomic utilities since
327
+ `0.4.0`. This closes debt named at extraction (see `0.2.0`'s
328
+ "Unchanged (verified)" section and ADR-0001) but never resolved.
329
+
330
+ ### Unchanged (verified)
331
+
332
+ - No legacy selector was removed, renamed, or had its computed output
333
+ changed. `[data-tooltip]`, `.sp-tooltip--visible`,
334
+ `.sp-accordion__trigger`, `.sp-accordion__content--animated`,
335
+ `.sp-modal-backdrop`, and `.sp-modal__dialog` render identically to
336
+ `0.5.0` — confirmed via baseline diff showing zero lines touched in
337
+ any of their rules.
338
+ - No new components. No `.sp-sidebar` work — still deferred per `0.5.0`.
339
+ - Modal's legacy-only `--closing` exit-transition state was not ported
340
+ to the supported and documented API — a real feature gap, but out of
341
+ scope for this consolidation release; tracked as future work.
342
+ - Accordion's legacy `::after`-mask chevron approach was not ported to
343
+ the supported and documented API — a design choice (DOM child vs.
344
+ pseudo-element icon), not a bug.
345
+ - No JavaScript shipped.
346
+
347
+ ## [0.5.0] - 2026-07-30
348
+
349
+ ### Added
350
+
351
+ - `.sp-navbar` component (`src/components/sparta-navbar.css`) —
352
+ `__brand`/`__links`/`__link`/`__actions`/`__toggle` slots, `--open` state
353
+ modifier for a mobile-collapsed menu below the existing `768px`
354
+ breakpoint. Resolves the dangling `.sp-navbar__toggle` icon-color rules
355
+ (`sparta-utilities.css`, `sparta-icons.css`) and the `.sp-navbar` print
356
+ rule (`sparta-accessibility.css`) that have existed with no component
357
+ behind them since before the modular architecture split.
358
+ - `.sp-app-shell` pattern (`src/patterns/sparta-app-shell.css`) — a thin
359
+ page-level wrapper composing Navbar with the existing `.sp-container`/
360
+ `.sp-stack` primitives. Two rules only (`.sp-app-shell`,
361
+ `.sp-app-shell__main`); the composition itself is documented, not
362
+ reimplemented as new layout CSS.
363
+ - `docs/app-shell.md` — Navbar API reference, the `--open` state contract
364
+ (no JS shipped, consumer-toggled, same convention as `.sp-modal--open`/
365
+ `.sp-accordion__item--open`), and the App Shell composition guide with
366
+ starter markup.
367
+
368
+ ### Unchanged (verified)
369
+
370
+ - No Sidebar component or sidebar-based shell was added. The `.sp-sidebar`
371
+ reference in `sparta-accessibility.css`'s print rule remains
372
+ unimplemented — deferred, not resolved by this release.
373
+ - No new utility classes; `.sp-container`/`.sp-stack`/`.sp-cluster`/
374
+ `.sp-grid` and the frozen `.sp-flex`/atomic utility layer are unchanged.
375
+ - No JavaScript shipped.
376
+
377
+ ## [0.4.0] - 2026-07-29
378
+
379
+ ### Added
380
+
381
+ - `.sp-cluster` in `sparta-layout.css` — a wrapping horizontal composition
382
+ primitive (`--center`, `--sm`/`--lg`/`--xl` gap, `--justify-between`/
383
+ `--justify-end`). No default cross-axis alignment: centering is opt-in via
384
+ `--center` rather than assumed.
385
+ - `.sp-grid--auto` — an intrinsically responsive grid mode
386
+ (`repeat(auto-fit, minmax(15rem, 1fr))`) requiring no breakpoint, alongside
387
+ the existing explicit `--cols-N` variants.
388
+ - `--sp-container-base`/`--sp-container-sm`/`--sp-container-md`/
389
+ `--sp-container-lg` tokens in `sparta-tokens.css`, plus a comment
390
+ documenting the two canonical breakpoints (`640px`, `768px`) already in
391
+ use across `sparta-layout.css`'s media queries.
392
+ - `docs/layout.md` — documents the four supported layout primitives
393
+ (`.sp-container`, `.sp-stack`, `.sp-cluster`, `.sp-grid`), the breakpoint
394
+ scale, and the legacy status of `.sp-flex`/atomic utilities.
395
+
396
+ ### Changed
397
+
398
+ - `.sp-container` and its `--sm`/`--md`/`--lg` modifiers now source their
399
+ max-width from the new container tokens instead of inline pixel literals.
400
+ Value-for-value substitution only — no visual change.
401
+ - `.sp-flex` and the atomic spacing/sizing/display utility classes
402
+ (`.sp-p-*`, `.sp-m-*`, `.sp-w-*`, `.sp-h-*`, display helpers, etc.) are now
403
+ explicitly documented as frozen/legacy in both `sparta-layout.css` and
404
+ `docs/layout.md`. Not removed, not modified — retained for backward
405
+ compatibility, but will not receive new variants going forward.
406
+
407
+ ### Unchanged (verified)
408
+
409
+ - `.sp-container`, `.sp-stack`, `.sp-flex`, and every atomic utility class
410
+ render identically to `0.3.0`. This release is additive curation, not a
411
+ rewrite — no existing selector was renamed or removed.
412
+
413
+ ## [0.3.0] - 2026-07-29
414
+
415
+ ### Added
416
+
417
+ - `data-theme="dark"` / `.sp-dark` — explicit dark-mode override in
418
+ `sparta-tokens.css`, for consumers who want to state their theme choice
419
+ explicitly rather than relying on the implicit default. Functionally
420
+ equivalent to the default; added purely for API symmetry with the existing
421
+ `data-theme="light"` / `.sp-light` opt-in.
422
+ - `.sp-field--warning` (and `.sp-field__warning`) in `sparta-form.css` — a
423
+ third field-validation state alongside the existing `--error`/`--success`
424
+ modifiers, giving forms a complete error/warning/success trio. Modeled
425
+ structurally on `.sp-field--error`.
426
+ - `docs/theming.md` — documents the theming precedence contract (default,
427
+ explicit dark, explicit light) and which tokens are theme-dependent.
428
+
429
+ ### Unchanged (verified)
430
+
431
+ - Dark remains the unconditional default theme when no explicit override is
432
+ set. SpartaCSS does not read `prefers-color-scheme` and will not switch
433
+ themes based on OS/browser preference — this was evaluated during
434
+ development and deliberately rejected to preserve SpartaCSS's dark-first
435
+ product direction. Existing consumers see no behavior change.
436
+
437
+ ## [0.2.0] - 2026-07-28
438
+
439
+ ### Added
440
+
441
+ - Modular `src/` architecture: the single-file `spartacss.css` source has
442
+ been split into `core/` (tokens, reset, base, layout, utilities,
443
+ animations, accessibility), `components/`, `modules/` (`overlay/`,
444
+ `data/`, `docs/`, `feedback/`, `icons/`), and `patterns/` directories.
445
+ - New `sparta.css` entry point — core only (tokens, reset, base, layout,
446
+ utilities), for consumers who only want the foundation without any
447
+ components.
448
+ - New `sparta-all.css` entry point — the full framework in one file,
449
+ including the icon and notifications modules that were previously only
450
+ available as separate imports.
451
+ - Corresponding new `package.json` exports: `./sparta.css`,
452
+ `./sparta.min.css`, `./sparta-all.css`, `./sparta-all.min.css`.
453
+ - `.github/workflows/ci.yml` — GitHub Actions workflow that runs on pushes
454
+ and pull requests targeting `main`, installing dependencies and running
455
+ `npm run build`. Node version is loaded from `.nvmrc` (via
456
+ `node-version-file`) rather than hardcoded, so CI and local development
457
+ can't drift apart.
458
+ - `.nvmrc` pinning local/CI Node version to 22.
459
+ - Legacy bundle regression verification: `npm run verify`
460
+ (`scripts/verify-legacy-bundle.sh`) diffs the freshly built
461
+ `dist/spartacss.css` against a committed baseline snapshot
462
+ (`test/baseline/spartacss.css`) and fails the build if the legacy default
463
+ bundle's output has drifted. Wired into CI as a step that runs after
464
+ `npm run build`, so any unintentional change to the legacy bundle's
465
+ contents fails CI rather than shipping silently.
466
+
467
+ ### Changed
468
+
469
+ - Build pipeline now bundles each entry point (`sparta.css`, `spartacss.css`,
470
+ `sparta-all.css`) independently via Lightning CSS's `--bundle` mode,
471
+ resolving each file's own `@import` graph, rather than copying a single
472
+ source file directly into `dist/`.
473
+ - `spartacss.css` is now an explicit source entry point in `src/` (importing
474
+ `sparta.css` plus components/modules/patterns, excluding icons and
475
+ notifications) rather than the single monolithic source file it was
476
+ before.
477
+
478
+ ### Unchanged (verified)
479
+
480
+ - `dist/spartacss.css` — the existing default (`.` / `./spartacss.css`)
481
+ export — was verified content-equivalent (identical normalized rule set)
482
+ to its pre-refactor output. No public class was renamed, no component
483
+ behavior changed, and the legacy bundle's scope (core + components +
484
+ modules excluding icons/notifications + patterns) is unchanged.
485
+ - `dist/sparta-icons.css` and `dist/sparta-notifications.css` remain
486
+ byte-identical plain copies of their source files.
487
+ - All existing duplicate implementations preserved as-is (e.g. two tooltip
488
+ APIs, two accordion-trigger APIs) — consolidating them is deliberately
489
+ out of scope for this release; tracked as future work.
490
+
491
+ ## [0.1.0] - 2026-07-23
492
+
493
+ ### Added
494
+
495
+ - Initial extraction of SpartaCSS as an independent package: core stylesheet
496
+ (tokens, reset, layout, components), icon system (`sparta-icons.css`), and
497
+ notifications module (`sparta-notifications.css`).
498
+ - `package.json` with Lightning CSS build pipeline (`npm run build`
499
+ producing unminified and minified variants of each file into `dist/`).
500
+ - Public package exports for core, icon, and notifications stylesheets
501
+ (unminified and minified).
502
+
503
+ ### Fixed
504
+
505
+ - Resolved Toast implementation duplication between core and the
506
+ notifications module; the notifications module's Toast is the canonical
507
+ implementation, with no public class renamed and no behavior changed.
508
+ - Resolved `.sp-icon` "ICON SLOTS" duplication between core and the icon
509
+ system; ownership confirmed as belonging to the icon system, duplicate
510
+ block removed from core.
511
+
512
+ [Unreleased]: https://github.com/redspartanlabs/spartacss/compare/v1.0.4...HEAD
513
+ [1.0.4]: https://github.com/redspartanlabs/spartacss/compare/v1.0.3...v1.0.4
514
+ [1.0.3]: https://github.com/redspartanlabs/spartacss/compare/v1.0.2...v1.0.3
515
+ [1.0.2]: https://github.com/redspartanlabs/spartacss/compare/v1.0.1...v1.0.2
516
+ [1.0.1]: https://github.com/redspartanlabs/spartacss/compare/v1.0.0...v1.0.1
517
+ [1.0.0]: https://github.com/redspartanlabs/spartacss/compare/v0.9.2...v1.0.0
518
+ [0.9.2]: https://github.com/redspartanlabs/spartacss/compare/v0.9.1...v0.9.2
519
+ [0.9.1]: https://github.com/redspartanlabs/spartacss/compare/v0.9.0...v0.9.1
520
+ [0.9.0]: https://github.com/redspartanlabs/spartacss/compare/v0.8.0...v0.9.0
521
+ [0.8.0]: https://github.com/redspartanlabs/spartacss/compare/v0.7.0...v0.8.0
522
+ [0.7.0]: https://github.com/redspartanlabs/spartacss/compare/v0.6.0...v0.7.0
523
+ [0.6.0]: https://github.com/redspartanlabs/spartacss/compare/v0.5.0...v0.6.0
524
+ [0.5.0]: https://github.com/redspartanlabs/spartacss/compare/v0.4.0...v0.5.0
525
+ [0.4.0]: https://github.com/redspartanlabs/spartacss/compare/v0.3.0...v0.4.0
526
+ [0.3.0]: https://github.com/redspartanlabs/spartacss/compare/v0.2.0...v0.3.0
527
+ [0.2.0]: https://github.com/redspartanlabs/spartacss/compare/v0.1.0...v0.2.0
528
+ [0.1.0]: https://github.com/redspartanlabs/spartacss/releases/tag/v0.1.0