@skellvin/casca 1.0.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,30 +1,79 @@
1
- # Casca
1
+ <div align="center">
2
+ <img src="https://codeberg.org/skell/casca/raw/branch/main/img/casca-px-header-128.png" alt="Casca" width="378" height="128">
3
+ <br>
4
+ <a href="https://www.npmjs.com/package/@skellvin/casca"><img src="https://img.shields.io/npm/v/@skellvin/casca" alt="npm"></a>
5
+ <a href="https://codeberg.org/skell/casca/src/branch/main/LICENSE"><img src="https://img.shields.io/npm/l/@skellvin/casca" alt="license"></a>
6
+ <a href="#why-casca"><img src="https://img.shields.io/badge/dependencies-0-brightgreen" alt="dependencies"></a>
7
+ <a href="#why-casca"><img src="https://img.shields.io/badge/runtime%20JS-0%20bytes-orange" alt="runtime JS"></a>
8
+ <br>
9
+ <a href="https://skell.codeberg.page/casca/"><strong>Live Gallery</strong></a> · <a href="#documentation"><strong>Documentation</strong></a> · <a href="https://www.npmjs.com/package/@skellvin/casca"><strong>npm</strong></a>
10
+ </div>
11
+
12
+ ---
2
13
 
3
- > CSS-first, no-JS data components — charts, tables, dashboards, KPIs and controls, with zero dependencies, zero JavaScript, and zero global side effects.
14
+ ## What's inside
4
15
 
5
- [![npm](https://img.shields.io/npm/v/@skellvin/casca)](https://www.npmjs.com/package/@skellvin/casca)
6
- [![license](https://img.shields.io/npm/l/@skellvin/casca)](LICENSE)
7
- [![dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](#why-casca)
8
- [![runtime JS](https://img.shields.io/badge/runtime%20JS-0%20bytes-orange)](#why-casca)
16
+ > CSS-first, no-JS data, accessibility-forward components: charts, tables, dashboards, KPIs, and controls. Zero dependencies, zero JavaScript, zero global side effects.
9
17
 
10
- **[Live demo](https://skell.codeberg.page/casca/)** · **[Documentation](#documentation)** · **[npm](https://www.npmjs.com/package/@skellvin/casca)**
18
+ | | |
19
+ |---|---|
20
+ | **[Charts](https://skell.codeberg.page/casca/#charts)** | bar, line, area, pie/donut, progress/gauge, heatmap, scatter, waterfall, radar, candlestick |
21
+ | **[Controls](https://skell.codeberg.page/casca/#controls)** | switch, tabs, disclosure, filter, series toggle, range slider, slot grid, pager. Native form controls + `:has()`, no JS |
22
+ | **[Components](https://skell.codeberg.page/casca/#components)** | stat cards, data table (sort / filter / row-select), chips, legend, card, card-grid, toolbar, anchor-nav, toggle |
23
+ | **[Themes](https://skell.codeberg.page/casca/#themes)** | default, high-contrast, muted, vibrant. Swap one `<link>` to recolor everything |
11
24
 
12
- Casca is a CSS toolkit for **server-rendered, no-JavaScript dashboards**: the charts you'd expect (bar, line, area, pie, gauge, heatmap, scatter, waterfall, radar, candlestick) **plus** the interactive data components around them — a form-aware slot grid, a sortable/filterable/selectable data table, a range slider, KPI stat cards, and interaction primitives (toggle, switch, disclosure, filter). Everything is plain HTML styled by CSS. No runtime, no build step required to use it, and not a single global side effect — every rule is scoped to `.casca-*` and every custom property is prefixed `--casca-*`.
25
+ **[Browse the live gallery](https://skell.codeberg.page/casca/)**, where every element on the page (even its own chrome) is real Casca, with copy-paste markup.
13
26
 
14
- ## Quick start
27
+ ## Why Casca
28
+
29
+ - ⚡ **Zero JavaScript.** Every feature works with JS disabled. Interactivity rides on native form controls, `:checked`, `:has()`, and a server round-trip.
30
+ - 📦 **Zero dependencies.** A self-contained design system with nothing to audit.
31
+ - 🛡️ **Zero global side effects.** Scoped to `.casca-*`, with no host-page resets, no `:root { color-scheme }`, and no naming collisions. Enforced by a CSS-contract linter.
32
+ - 📋 **Vendorable.** It is one dependency-free CSS file. Copy it into your repo, pin the bytes, and there is no supply chain to worry about.
33
+ - ♿ **Accessible by default.** WCAG 2.1 AA target: semantic HTML, keyboard support, forced-colors and reduced-motion handling, and meaning never carried by color alone.
34
+
35
+ ## Get it
36
+
37
+ ### Vendor it (recommended)
38
+
39
+ Casca is a single, dependency-free stylesheet, so the most robust path is to copy it straight into your project. Every release attaches the bundles plus a `SHA256SUMS` to the [Codeberg release](https://codeberg.org/skell/casca/releases), so you can fetch and verify the exact bytes with no npm client and no build step:
40
+
41
+ ```bash
42
+ ver=v1.2.0
43
+ curl -LO "https://codeberg.org/skell/casca/releases/download/$ver/casca.css"
44
+ curl -LO "https://codeberg.org/skell/casca/releases/download/$ver/SHA256SUMS"
45
+ sha256sum --ignore-missing -c SHA256SUMS # verify what you fetched
46
+ ```
47
+
48
+ Drop `casca.css` into your assets, link it, and commit it. No package manager, no runtime CDN, no build, and the version is pinned in your own history. Reach for `casca-core.css` instead if you want the lean, bring-your-own-theme build.
49
+
50
+ ```html
51
+ <link rel="stylesheet" href="/assets/casca.css">
52
+ ```
53
+
54
+ ### npm
15
55
 
16
56
  ```bash
17
57
  npm install @skellvin/casca
18
- # or just drop a file in: https://cdn.jsdelivr.net/npm/@skellvin/casca/dist/casca.css
19
58
  ```
20
59
 
21
- Rather not use npmjs.com? The same package is published to **[Codeberg Packages](https://codeberg.org/skell/-/packages)** — point the scope at Codeberg's registry and install as usual:
60
+ Rather not use npmjs.com? The same package is published to **[Codeberg Packages](https://codeberg.org/skell/-/packages)**:
22
61
 
23
62
  ```bash
24
63
  echo '@skellvin:registry=https://codeberg.org/api/packages/skell/npm/' >> .npmrc
25
64
  npm install @skellvin/casca
26
65
  ```
27
66
 
67
+ ### CDN
68
+
69
+ ```html
70
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@skellvin/casca/dist/casca.css">
71
+ ```
72
+
73
+ ## Quick start
74
+
75
+ Link a bundle, then write plain HTML. This is a bar chart:
76
+
28
77
  ```html
29
78
  <link rel="stylesheet" href="casca.css">
30
79
 
@@ -34,83 +83,54 @@ npm install @skellvin/casca
34
83
  <div class="casca-bar-group">
35
84
  <div class="casca-bar-item"><div class="casca-bar-value" style="--value: 60%; --color: var(--casca-color-1)"></div></div>
36
85
  <div class="casca-bar-item"><div class="casca-bar-value" style="--value: 80%; --color: var(--casca-color-1)"></div></div>
37
- <div class="casca-bar-item"><div class="casca-bar-value" style="--value: 45%; --color: var(--casca-color-1)"></div></div>
38
86
  </div>
39
87
  </div>
40
88
  </div>
41
89
  ```
42
90
 
43
- That renders a bar chart with no JavaScript. For the accessible pattern (pair the visual with a `.casca-data` table), see the [Accessibility guide](docs/ACCESSIBILITY.md).
44
-
45
- ## What's inside
46
-
47
- | | |
48
- |---|---|
49
- | **Charts** | bar, line, area, pie/donut, progress/gauge, heatmap, scatter, waterfall, radar, candlestick |
50
- | **Data display** | [stat cards](examples/stat-card.html), [data table](examples/data-table.html) (sort / filter / row select), [chips](examples/chips.html), [legend](examples/legend.html) |
51
- | **Interactions** | [series toggle](examples/series-toggle.html), [switch](examples/switch.html), [disclosure](examples/disclosure.html), [filter](examples/filter.html), [range slider](examples/range-slider.html), [slot grid](examples/slot-grid.html) (no-JS booking), [pager](examples/pager.html) — native HTML + `:has()`, no JS |
52
- | **Themes** | default, high-contrast, minimal, vibrant — swap one `<link>` |
53
-
54
- Browse the **[component gallery](examples/index.html)** for live demos and copy-paste markup.
55
-
56
- ## Why Casca
57
-
58
- - **🚫 Zero JavaScript** — every core feature works with JS disabled; interactivity uses native form controls + a server round-trip.
59
- - **📦 Zero dependencies** — a self-contained design system, no external libraries.
60
- - **🎯 Zero global side effects** — scoped to `.casca-*`; no host-page resets, no `:root { color-scheme }`, no naming conflicts. Enforced by a CSS-contract linter.
61
- - **♿ Accessible by default** — WCAG 2.1 AA target, semantic HTML, keyboard support, forced-colors, reduced-motion, and meaning never carried by color alone.
91
+ Pair any visual chart with a `.casca-data` table for the accessible text alternative; see the [Accessibility guide](https://codeberg.org/skell/casca/src/branch/main/docs/ACCESSIBILITY.md).
62
92
 
63
93
  ## Builds
64
94
 
65
- Two axes, all contract-clean: pick a **build** (what's included), then a tiny **theme** overlay (the palette).
95
+ Easily use the all-in-one `casca.css` with everything included (~10KB gzipped), or optimize with `casca-core.css` plus desired extensions and theme.
66
96
 
67
97
  | Import | File | What |
68
98
  |--------|------|------|
69
- | `@skellvin/casca` | `casca.css` | **All-in-one** core + both extensions + default theme. One `<link>`, everything. |
70
- | `@skellvin/casca/core` | `casca-core.css` | **Lean core** (~9 KB gzip) base + bar, line, area, pie/donut, progress/gauge, KPI stat cards, data table. No theme. |
99
+ | `@skellvin/casca` | `casca.css` | **All-in-one**: core + every extension + the default theme. One `<link>`, everything. |
100
+ | `@skellvin/casca/core` | `casca-core.css` | **Lean core** (~9 KB gzip): the base layer (container, titles, chips, legend, pager) plus bar, line, area, pie/donut, progress/gauge, KPI stat cards, and the data table. No theme. |
71
101
  | `@skellvin/casca/extended-charts` | `casca-extended-charts.css` | Add-on: heatmap, scatter, waterfall, radar, candlestick. |
72
- | `@skellvin/casca/extended-controls` | `casca-extended-controls.css` | Add-on: slot grid, range slider, toggle, switch, disclosure, filter. |
73
- | `@skellvin/casca/theme-default` · `/theme-high-contrast` · `/theme-muted` · `/theme-vibrant` | `casca-theme-*.css` | Tiny (~1 KB) `--casca-*` palette overlays. Load one over `core`. |
74
-
75
- Extensions and themes layer on top of `casca-core.css`; `casca.css` bundles everything. Host apps with an existing design system should use **`@skellvin/casca/core`** and map their tokens into `--casca-*` — see the [Adoption guide](docs/ADOPTION.md).
102
+ | `@skellvin/casca/extended-controls` | `casca-extended-controls.css` | Add-on: switch, tabs, disclosure, filter, series toggle, toggle, range slider, slot grid. |
103
+ | `@skellvin/casca/extended-layout` | `casca-extended-layout.css` | Add-on: the page shell, card, card-grid, toolbar, anchor-nav. |
104
+ | `@skellvin/casca/theme-default` · `/theme-high-contrast` · `/theme-muted` · `/theme-vibrant` | `casca-theme-*.css` | Tiny (~1 KB) `--casca-*` palette overlays. Load one over `casca-core.css`. |
76
105
 
77
- ### Verifiable downloads (no npm)
78
-
79
- Every release attaches the six bundles plus a `SHA256SUMS` to the [Codeberg release](https://codeberg.org/skell/casca/releases), so you can fetch and verify the exact CSS without an npm client or a local build — handy for vendoring into a hermetic build:
80
-
81
- ```bash
82
- ver=v1.0.1
83
- curl -LO "https://codeberg.org/skell/casca/releases/download/$ver/casca-core.css"
84
- curl -LO "https://codeberg.org/skell/casca/releases/download/$ver/SHA256SUMS"
85
- sha256sum --ignore-missing -c SHA256SUMS # verifies just the files you fetched
86
- ```
106
+ Extensions and themes layer on top of `casca-core.css`; `casca.css` bundles them all. Want a custom theme? Use **`@skellvin/casca/core`** and map tokens into `--casca-*`. See the [Adoption guide](https://codeberg.org/skell/casca/src/branch/main/docs/ADOPTION.md).
87
107
 
88
108
  ## Browser support
89
109
 
90
- Modern CSS `:has()`, container queries, `@property`, `color-mix()`, `accent-color`. Chrome/Edge 105+, Safari 16+, Firefox 121+, with documented graceful degradation on older versions. Full matrix in [COMPATIBILITY.md](docs/COMPATIBILITY.md).
110
+ Modern CSS: `:has()`, container queries, `@property`, `color-mix()`, `accent-color`. Chrome/Edge 105+, Safari 16+, Firefox 121+, with documented graceful degradation on older versions. Full matrix in [COMPATIBILITY.md](https://codeberg.org/skell/casca/src/branch/main/docs/COMPATIBILITY.md).
91
111
 
92
112
  ## Documentation
93
113
 
94
- - **[API Reference](docs/API.md)** every component, class, attribute, and custom property
95
- - **[Adoption Guide](docs/ADOPTION.md)** which build to use, bring-your-own-theme, when *not* to use Casca
96
- - **[Integration Guide](docs/INTEGRATION.md)** static no-JS render recipe + a server-render [security contract](docs/INTEGRATION.md#server-render-security-contract); optional Go templates + htmx for live updates
97
- - **[Accessibility Guide](docs/ACCESSIBILITY.md)** the a11y contract for charts, controls, and interactions
98
- - **[Compatibility](docs/COMPATIBILITY.md)** browser support matrix and fallbacks
99
- - **[Changelog](CHANGELOG.md)** release history
114
+ - **[API Reference](https://codeberg.org/skell/casca/src/branch/main/docs/API.md)**: every component, class, attribute, and custom property
115
+ - **[Adoption Guide](https://codeberg.org/skell/casca/src/branch/main/docs/ADOPTION.md)**: which build to use, bring-your-own-theme, when *not* to use Casca
116
+ - **[Integration Guide](https://codeberg.org/skell/casca/src/branch/main/docs/INTEGRATION.md)**: static no-JS render recipe plus a server-render [security contract](https://codeberg.org/skell/casca/src/branch/main/docs/INTEGRATION.md#server-render-security-contract); optional Go templates + htmx for live updates
117
+ - **[Accessibility Guide](https://codeberg.org/skell/casca/src/branch/main/docs/ACCESSIBILITY.md)**: the a11y contract for charts, controls, and components
118
+ - **[Compatibility](https://codeberg.org/skell/casca/src/branch/main/docs/COMPATIBILITY.md)**: browser support matrix and fallbacks
119
+ - **[Changelog](https://codeberg.org/skell/casca/src/branch/main/CHANGELOG.md)**: release history
100
120
 
101
121
  ## Development
102
122
 
103
123
  ```bash
104
- bun install # dependencies (lightningcss)
105
- bun run build # build all 6 bundles into dist/
106
- bun run lint:all # verify the scoped-CSS contract on every bundle
107
- bun run dev # watch + serve examples/
124
+ npm install # dependencies (lightningcss)
125
+ npm run build # build all bundles into dist/
126
+ npm run lint:all # verify the scoped-CSS contract on every bundle
127
+ npm run dev # watch + serve examples/
108
128
  ```
109
129
 
110
130
  ## Contributing
111
131
 
112
- Issues and pull requests welcome at [codeberg.org/skell/casca](https://codeberg.org/skell/casca). New primitives need docs (`docs/API.md`), an example, and passing `lint:all` on all bundles — see [CLAUDE.md](CLAUDE.md) for the working contract.
132
+ Issues and pull requests welcome at [codeberg.org/skell/casca](https://codeberg.org/skell/casca). New primitives need docs (`docs/API.md`), an example, and passing `lint:all` on all bundles.
113
133
 
114
134
  ## License
115
135
 
116
- [MIT](LICENSE) © skell
136
+ [MIT](https://codeberg.org/skell/casca/src/branch/main/LICENSE) © skell
package/README.md.orig ADDED
@@ -0,0 +1,136 @@
1
+ <div align="center">
2
+ <img src="img/casca-px-header-128.png" alt="Casca" width="378" height="128">
3
+ <br>
4
+ <a href="https://www.npmjs.com/package/@skellvin/casca"><img src="https://img.shields.io/npm/v/@skellvin/casca" alt="npm"></a>
5
+ <a href="LICENSE"><img src="https://img.shields.io/npm/l/@skellvin/casca" alt="license"></a>
6
+ <a href="#why-casca"><img src="https://img.shields.io/badge/dependencies-0-brightgreen" alt="dependencies"></a>
7
+ <a href="#why-casca"><img src="https://img.shields.io/badge/runtime%20JS-0%20bytes-orange" alt="runtime JS"></a>
8
+ <br>
9
+ <a href="https://skell.codeberg.page/casca/"><strong>Live Gallery</strong></a> · <a href="#documentation"><strong>Documentation</strong></a> · <a href="https://www.npmjs.com/package/@skellvin/casca"><strong>npm</strong></a>
10
+ </div>
11
+
12
+ ---
13
+
14
+ ## What's inside
15
+
16
+ > CSS-first, no-JS data, accessibility-forward components: charts, tables, dashboards, KPIs, and controls. Zero dependencies, zero JavaScript, zero global side effects.
17
+
18
+ | | |
19
+ |---|---|
20
+ | **[Charts](https://skell.codeberg.page/casca/#charts)** | bar, line, area, pie/donut, progress/gauge, heatmap, scatter, waterfall, radar, candlestick |
21
+ | **[Controls](https://skell.codeberg.page/casca/#controls)** | switch, tabs, disclosure, filter, series toggle, range slider, slot grid, pager. Native form controls + `:has()`, no JS |
22
+ | **[Components](https://skell.codeberg.page/casca/#components)** | stat cards, data table (sort / filter / row-select), chips, legend, card, card-grid, toolbar, anchor-nav, toggle |
23
+ | **[Themes](https://skell.codeberg.page/casca/#themes)** | default, high-contrast, muted, vibrant. Swap one `<link>` to recolor everything |
24
+
25
+ **[Browse the live gallery](https://skell.codeberg.page/casca/)**, where every element on the page (even its own chrome) is real Casca, with copy-paste markup.
26
+
27
+ ## Why Casca
28
+
29
+ - ⚡ **Zero JavaScript.** Every feature works with JS disabled. Interactivity rides on native form controls, `:checked`, `:has()`, and a server round-trip.
30
+ - 📦 **Zero dependencies.** A self-contained design system with nothing to audit.
31
+ - 🛡️ **Zero global side effects.** Scoped to `.casca-*`, with no host-page resets, no `:root { color-scheme }`, and no naming collisions. Enforced by a CSS-contract linter.
32
+ - 📋 **Vendorable.** It is one dependency-free CSS file. Copy it into your repo, pin the bytes, and there is no supply chain to worry about.
33
+ - ♿ **Accessible by default.** WCAG 2.1 AA target: semantic HTML, keyboard support, forced-colors and reduced-motion handling, and meaning never carried by color alone.
34
+
35
+ ## Get it
36
+
37
+ ### Vendor it (recommended)
38
+
39
+ Casca is a single, dependency-free stylesheet, so the most robust path is to copy it straight into your project. Every release attaches the bundles plus a `SHA256SUMS` to the [Codeberg release](https://codeberg.org/skell/casca/releases), so you can fetch and verify the exact bytes with no npm client and no build step:
40
+
41
+ ```bash
42
+ ver=v1.2.0
43
+ curl -LO "https://codeberg.org/skell/casca/releases/download/$ver/casca.css"
44
+ curl -LO "https://codeberg.org/skell/casca/releases/download/$ver/SHA256SUMS"
45
+ sha256sum --ignore-missing -c SHA256SUMS # verify what you fetched
46
+ ```
47
+
48
+ Drop `casca.css` into your assets, link it, and commit it. No package manager, no runtime CDN, no build, and the version is pinned in your own history. Reach for `casca-core.css` instead if you want the lean, bring-your-own-theme build.
49
+
50
+ ```html
51
+ <link rel="stylesheet" href="/assets/casca.css">
52
+ ```
53
+
54
+ ### npm
55
+
56
+ ```bash
57
+ npm install @skellvin/casca
58
+ ```
59
+
60
+ Rather not use npmjs.com? The same package is published to **[Codeberg Packages](https://codeberg.org/skell/-/packages)**:
61
+
62
+ ```bash
63
+ echo '@skellvin:registry=https://codeberg.org/api/packages/skell/npm/' >> .npmrc
64
+ npm install @skellvin/casca
65
+ ```
66
+
67
+ ### CDN
68
+
69
+ ```html
70
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@skellvin/casca/dist/casca.css">
71
+ ```
72
+
73
+ ## Quick start
74
+
75
+ Link a bundle, then write plain HTML. This is a bar chart:
76
+
77
+ ```html
78
+ <link rel="stylesheet" href="casca.css">
79
+
80
+ <div class="casca">
81
+ <div class="casca-title">Revenue by quarter</div>
82
+ <div class="casca-bar">
83
+ <div class="casca-bar-group">
84
+ <div class="casca-bar-item"><div class="casca-bar-value" style="--value: 60%; --color: var(--casca-color-1)"></div></div>
85
+ <div class="casca-bar-item"><div class="casca-bar-value" style="--value: 80%; --color: var(--casca-color-1)"></div></div>
86
+ </div>
87
+ </div>
88
+ </div>
89
+ ```
90
+
91
+ Pair any visual chart with a `.casca-data` table for the accessible text alternative; see the [Accessibility guide](docs/ACCESSIBILITY.md).
92
+
93
+ ## Builds
94
+
95
+ Easily use the all-in-one `casca.css` with everything included (~10KB gzipped), or optimize with `casca-core.css` plus desired extensions and theme.
96
+
97
+ | Import | File | What |
98
+ |--------|------|------|
99
+ | `@skellvin/casca` | `casca.css` | **All-in-one**: core + every extension + the default theme. One `<link>`, everything. |
100
+ | `@skellvin/casca/core` | `casca-core.css` | **Lean core** (~9 KB gzip): the base layer (container, titles, chips, legend, pager) plus bar, line, area, pie/donut, progress/gauge, KPI stat cards, and the data table. No theme. |
101
+ | `@skellvin/casca/extended-charts` | `casca-extended-charts.css` | Add-on: heatmap, scatter, waterfall, radar, candlestick. |
102
+ | `@skellvin/casca/extended-controls` | `casca-extended-controls.css` | Add-on: switch, tabs, disclosure, filter, series toggle, toggle, range slider, slot grid. |
103
+ | `@skellvin/casca/extended-layout` | `casca-extended-layout.css` | Add-on: the page shell, card, card-grid, toolbar, anchor-nav. |
104
+ | `@skellvin/casca/theme-default` · `/theme-high-contrast` · `/theme-muted` · `/theme-vibrant` | `casca-theme-*.css` | Tiny (~1 KB) `--casca-*` palette overlays. Load one over `casca-core.css`. |
105
+
106
+ Extensions and themes layer on top of `casca-core.css`; `casca.css` bundles them all. Want a custom theme? Use **`@skellvin/casca/core`** and map tokens into `--casca-*`. See the [Adoption guide](docs/ADOPTION.md).
107
+
108
+ ## Browser support
109
+
110
+ Modern CSS: `:has()`, container queries, `@property`, `color-mix()`, `accent-color`. Chrome/Edge 105+, Safari 16+, Firefox 121+, with documented graceful degradation on older versions. Full matrix in [COMPATIBILITY.md](docs/COMPATIBILITY.md).
111
+
112
+ ## Documentation
113
+
114
+ - **[API Reference](docs/API.md)**: every component, class, attribute, and custom property
115
+ - **[Adoption Guide](docs/ADOPTION.md)**: which build to use, bring-your-own-theme, when *not* to use Casca
116
+ - **[Integration Guide](docs/INTEGRATION.md)**: static no-JS render recipe plus a server-render [security contract](docs/INTEGRATION.md#server-render-security-contract); optional Go templates + htmx for live updates
117
+ - **[Accessibility Guide](docs/ACCESSIBILITY.md)**: the a11y contract for charts, controls, and components
118
+ - **[Compatibility](docs/COMPATIBILITY.md)**: browser support matrix and fallbacks
119
+ - **[Changelog](CHANGELOG.md)**: release history
120
+
121
+ ## Development
122
+
123
+ ```bash
124
+ npm install # dependencies (lightningcss)
125
+ npm run build # build all bundles into dist/
126
+ npm run lint:all # verify the scoped-CSS contract on every bundle
127
+ npm run dev # watch + serve examples/
128
+ ```
129
+
130
+ ## Contributing
131
+
132
+ Issues and pull requests welcome at [codeberg.org/skell/casca](https://codeberg.org/skell/casca). New primitives need docs (`docs/API.md`), an example, and passing `lint:all` on all bundles.
133
+
134
+ ## License
135
+
136
+ [MIT](LICENSE) © skell