@phcdevworks/spectre-ui 1.1.0 β 1.1.2
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/LICENSE +12 -13
- package/README.md +149 -71
- package/dist/base.css +375 -0
- package/dist/components.css +469 -30
- package/dist/index.cjs +54 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +268 -204
- package/dist/index.d.cts +84 -20
- package/dist/index.d.ts +84 -20
- package/dist/index.js +54 -14
- package/dist/index.js.map +1 -1
- package/dist/tailwind/index.cjs +19 -22
- package/dist/tailwind/index.cjs.map +1 -1
- package/dist/tailwind/index.js +19 -22
- package/dist/tailwind/index.js.map +1 -1
- package/dist/utilities.css +375 -0
- package/package.json +22 -19
package/LICENSE
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2026 PHCDevworks
|
|
4
4
|
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
+
subject to the following conditions:
|
|
11
11
|
|
|
12
12
|
The above copyright notice and this permission notice shall be included in all
|
|
13
13
|
copies or substantial portions of the Software.
|
|
14
14
|
|
|
15
15
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
SOFTWARE.
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,120 +1,198 @@
|
|
|
1
1
|
# @phcdevworks/spectre-ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/phcdevworks/spectre-ui/issues)
|
|
4
|
+
[](https://github.com/phcdevworks/spectre-ui/pulls)
|
|
5
|
+
[](LICENSE)
|
|
4
6
|
|
|
5
|
-
`@phcdevworks/spectre-ui` is the
|
|
7
|
+
`@phcdevworks/spectre-ui` is the implementation layer between
|
|
8
|
+
[`@phcdevworks/spectre-tokens`](https://github.com/phcdevworks/spectre-tokens)
|
|
9
|
+
and downstream adapters or apps.
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
Maintained by PHCDevworks, it turns Spectre tokens into reusable CSS bundles,
|
|
12
|
+
Tailwind tooling, and type-safe class recipes. It is framework-agnostic,
|
|
13
|
+
token-driven, and follows a strict zero-hex policy so visual values do not drift
|
|
14
|
+
locally.
|
|
8
15
|
|
|
9
|
-
|
|
16
|
+
[Contributing](CONTRIBUTING.md) | [Changelog](CHANGELOG.md) |
|
|
17
|
+
[Security Policy](SECURITY.md)
|
|
10
18
|
|
|
11
|
-
##
|
|
19
|
+
## Key capabilities
|
|
12
20
|
|
|
13
|
-
|
|
21
|
+
- Ships precompiled CSS: `index.css`, `base.css`, `components.css`, and
|
|
22
|
+
`utilities.css`
|
|
23
|
+
- Provides Tailwind theme and preset helpers built from Spectre tokens
|
|
24
|
+
- Exports type-safe class recipes for shared UI patterns
|
|
25
|
+
- Keeps CSS classes and recipe APIs aligned
|
|
26
|
+
- Gives adapters and apps a stable styling contract instead of re-implementing
|
|
27
|
+
classes
|
|
28
|
+
- Enforces a zero-hex approach so visual values stay tied to
|
|
29
|
+
`@phcdevworks/spectre-tokens`
|
|
14
30
|
|
|
15
|
-
|
|
16
|
-
- π¦ **Precompiled CSS**: Ships `base`, `components`, and `utilities` bundles.
|
|
17
|
-
- π§ͺ **Type-Safe Recipes**: Pure JS/TS functions for generating framework-agnostic class strings.
|
|
18
|
-
- πͺοΈ **Tailwind Preset**: Mirrors the design scale into the Tailwind utility engine.
|
|
31
|
+
## Installation
|
|
19
32
|
|
|
20
|
-
|
|
33
|
+
```bash
|
|
34
|
+
npm install @phcdevworks/spectre-ui
|
|
35
|
+
```
|
|
21
36
|
|
|
22
|
-
##
|
|
37
|
+
## Quick start
|
|
23
38
|
|
|
24
|
-
###
|
|
39
|
+
### CSS import
|
|
25
40
|
|
|
26
|
-
|
|
27
|
-
|
|
41
|
+
Import the full stylesheet:
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import '@phcdevworks/spectre-ui/index.css'
|
|
28
45
|
```
|
|
29
46
|
|
|
30
|
-
|
|
31
|
-
For most applications, importing the unified `index.css` is recommended.
|
|
47
|
+
Or import the bundles separately:
|
|
32
48
|
|
|
33
49
|
```ts
|
|
34
|
-
import
|
|
50
|
+
import '@phcdevworks/spectre-ui/base.css'
|
|
51
|
+
import '@phcdevworks/spectre-ui/components.css'
|
|
52
|
+
import '@phcdevworks/spectre-ui/utilities.css'
|
|
35
53
|
```
|
|
36
54
|
|
|
37
|
-
###
|
|
38
|
-
|
|
55
|
+
### Tailwind preset usage
|
|
56
|
+
|
|
57
|
+
Use Spectre tokens as the source of truth for your Tailwind theme:
|
|
39
58
|
|
|
40
59
|
```ts
|
|
41
60
|
// tailwind.config.ts
|
|
42
|
-
import {
|
|
43
|
-
import {
|
|
61
|
+
import type { Config } from 'tailwindcss'
|
|
62
|
+
import { createSpectreTailwindPreset } from '@phcdevworks/spectre-ui/tailwind'
|
|
63
|
+
import tokens from '@phcdevworks/spectre-tokens'
|
|
44
64
|
|
|
45
|
-
const
|
|
65
|
+
const config: Config = {
|
|
66
|
+
content: ['./src/**/*.{ts,tsx,js,jsx,html}'],
|
|
67
|
+
presets: [createSpectreTailwindPreset({ tokens })]
|
|
68
|
+
}
|
|
46
69
|
|
|
47
|
-
export default
|
|
48
|
-
content: ["./src/**/*.{js,ts,jsx,tsx}"],
|
|
49
|
-
presets: [spectrePreset],
|
|
50
|
-
};
|
|
70
|
+
export default config
|
|
51
71
|
```
|
|
52
72
|
|
|
53
|
-
|
|
73
|
+
### Class recipe usage
|
|
54
74
|
|
|
55
|
-
|
|
75
|
+
Class recipes are the stable styling API for adapters and apps. They return
|
|
76
|
+
predictable class strings and keep behavior consistent across frameworks.
|
|
56
77
|
|
|
57
|
-
|
|
78
|
+
```ts
|
|
79
|
+
import {
|
|
80
|
+
getBadgeClasses,
|
|
81
|
+
getButtonClasses,
|
|
82
|
+
getPricingCardClasses
|
|
83
|
+
} from '@phcdevworks/spectre-ui'
|
|
84
|
+
|
|
85
|
+
const cta = getButtonClasses({ variant: 'primary', size: 'lg' })
|
|
86
|
+
const badge = getBadgeClasses({ variant: 'success', size: 'sm' })
|
|
87
|
+
const pricingCard = getPricingCardClasses({ featured: true })
|
|
88
|
+
```
|
|
58
89
|
|
|
59
|
-
|
|
60
|
-
| Recipe | Primary Variants | Sizes |
|
|
61
|
-
| :--- | :--- | :--- |
|
|
62
|
-
| `getButtonClasses` | `primary`, `secondary`, `ghost`, `danger`, `success` | `sm`, `md`, `lg` |
|
|
63
|
-
| `getBadgeClasses` | `primary`, `success`, `warning`, `danger` | `sm`, `md`, `lg` |
|
|
64
|
-
| `getCardClasses` | `elevated`, `outline`, `ghost` | `padded` |
|
|
65
|
-
| `getInputClasses` | `default`, `error`, `success` | `sm`, `md`, `lg` |
|
|
66
|
-
| `getIconBoxClasses` | `primary`, `success`, `warning`, `danger`, `info` | `sm`, `md`, `lg` |
|
|
90
|
+
## What this package owns
|
|
67
91
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
| `getRatingClasses` | Layout recipes for star ratings and count labels. |
|
|
92
|
+
- Token-driven CSS implementation
|
|
93
|
+
- Precompiled CSS bundles and utility classes
|
|
94
|
+
- Tailwind helpers and preset generation
|
|
95
|
+
- Type-safe class recipes for shared UI contracts
|
|
96
|
+
- Stable styling behavior consumed by downstream adapters and apps
|
|
74
97
|
|
|
75
|
-
|
|
76
|
-
import { getButtonClasses, getPricingCardClasses } from "@phcdevworks/spectre-ui";
|
|
98
|
+
Golden rule: consume tokens, do not redefine them.
|
|
77
99
|
|
|
78
|
-
|
|
79
|
-
const cta = getButtonClasses({ variant: "primary", size: "lg" });
|
|
80
|
-
// Result: "sp-btn sp-btn--primary sp-btn--lg"
|
|
100
|
+
## What this package does not own
|
|
81
101
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
102
|
+
- Design values or semantic meaning That belongs to
|
|
103
|
+
`@phcdevworks/spectre-tokens`.
|
|
104
|
+
- Framework-specific component delivery Adapters and apps consume
|
|
105
|
+
`@phcdevworks/spectre-ui`; they do not recreate its styling logic.
|
|
106
|
+
- Local visual values outside the token contract Hardcoded hex, spacing, or
|
|
107
|
+
shadow values are drift unless clearly intentional and documented.
|
|
85
108
|
|
|
86
|
-
|
|
109
|
+
## Package exports / API surface
|
|
87
110
|
|
|
88
|
-
|
|
111
|
+
### Root package
|
|
89
112
|
|
|
90
|
-
|
|
113
|
+
Exports CSS path constants and class recipes, including:
|
|
91
114
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
115
|
+
- `spectreStyles`
|
|
116
|
+
- `getButtonClasses`
|
|
117
|
+
- `getBadgeClasses`
|
|
118
|
+
- `getCardClasses`
|
|
119
|
+
- `getInputClasses`
|
|
120
|
+
- `getIconBoxClasses`
|
|
121
|
+
- `getPricingCardClasses`
|
|
122
|
+
- `getTestimonialClasses`
|
|
123
|
+
- `getRatingClasses`
|
|
95
124
|
|
|
96
|
-
|
|
125
|
+
Recipes also export their related TypeScript option and variant types.
|
|
97
126
|
|
|
98
|
-
|
|
127
|
+
### Tailwind entry point
|
|
99
128
|
|
|
100
|
-
|
|
129
|
+
`@phcdevworks/spectre-ui/tailwind` exports:
|
|
101
130
|
|
|
102
|
-
|
|
103
|
-
|
|
131
|
+
- `createSpectreTailwindPreset`
|
|
132
|
+
- `createSpectreTailwindTheme`
|
|
104
133
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
134
|
+
### CSS entry points
|
|
135
|
+
|
|
136
|
+
- `@phcdevworks/spectre-ui/index.css`
|
|
137
|
+
- `@phcdevworks/spectre-ui/base.css`
|
|
138
|
+
- `@phcdevworks/spectre-ui/components.css`
|
|
139
|
+
- `@phcdevworks/spectre-ui/utilities.css`
|
|
108
140
|
|
|
109
|
-
|
|
110
|
-
|
|
141
|
+
## Relationship to the rest of Spectre
|
|
142
|
+
|
|
143
|
+
Spectre keeps responsibilities separate:
|
|
144
|
+
|
|
145
|
+
- [`@phcdevworks/spectre-tokens`](https://github.com/phcdevworks/spectre-tokens)
|
|
146
|
+
defines design values and semantic meaning
|
|
147
|
+
- `@phcdevworks/spectre-ui` turns those tokens into reusable CSS, Tailwind
|
|
148
|
+
tooling, and type-safe class recipes
|
|
149
|
+
- Adapters and apps consume `@phcdevworks/spectre-ui` instead of re-implementing
|
|
150
|
+
its styling layer
|
|
151
|
+
|
|
152
|
+
That separation keeps recipe behavior consistent across frameworks and reduces
|
|
153
|
+
implementation drift.
|
|
154
|
+
|
|
155
|
+
## Development
|
|
156
|
+
|
|
157
|
+
Install dependencies, then run the package checks:
|
|
111
158
|
|
|
112
159
|
```bash
|
|
160
|
+
npm run build
|
|
113
161
|
npm test
|
|
114
162
|
```
|
|
115
163
|
|
|
116
|
-
|
|
164
|
+
Key source areas:
|
|
165
|
+
|
|
166
|
+
- `src/styles/` for source CSS
|
|
167
|
+
- `src/recipes/` for class recipes
|
|
168
|
+
- `src/tailwind/` for Tailwind helpers
|
|
169
|
+
- `tests/` for contract and regression coverage
|
|
170
|
+
- `examples/` for visual demos and verification fixtures
|
|
171
|
+
|
|
172
|
+
## Examples
|
|
173
|
+
|
|
174
|
+
Use [`examples/examples.html`](examples/examples.html) as the visual index for
|
|
175
|
+
the package demos.
|
|
176
|
+
|
|
177
|
+
Available examples include:
|
|
178
|
+
|
|
179
|
+
- `vanilla.html` for the broad component showcase
|
|
180
|
+
- `showroom.html` for a richer marketing-style composition
|
|
181
|
+
- `verification.html` and focused verification fixtures for regression checks
|
|
182
|
+
|
|
183
|
+
## Contributing
|
|
184
|
+
|
|
185
|
+
PHCDevworks maintains this package as part of the Spectre suite.
|
|
186
|
+
|
|
187
|
+
When contributing:
|
|
188
|
+
|
|
189
|
+
- keep styling token-driven
|
|
190
|
+
- keep recipe APIs and CSS classes in sync
|
|
191
|
+
- avoid local visual values unless clearly intentional
|
|
192
|
+
- run `npm run build` and `npm test` before opening a pull request
|
|
193
|
+
|
|
194
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow.
|
|
117
195
|
|
|
118
|
-
##
|
|
196
|
+
## License
|
|
119
197
|
|
|
120
|
-
|
|
198
|
+
MIT Β© PHCDevworks. See [LICENSE](LICENSE).
|
package/dist/base.css
CHANGED
|
@@ -1,3 +1,378 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--sp-surface-page: #f7f8fb;
|
|
3
|
+
--sp-surface-card: #ffffff;
|
|
4
|
+
--sp-surface-input: #ffffff;
|
|
5
|
+
--sp-surface-overlay: rgba(20, 27, 36, 0.6);
|
|
6
|
+
--sp-surface-hero: linear-gradient(135deg, #5b6ee1 0%, #6f3fd7 100%);
|
|
7
|
+
--sp-text-on-page-default: #141b24;
|
|
8
|
+
--sp-text-on-page-muted: #4b576a;
|
|
9
|
+
--sp-text-on-page-subtle: #657287;
|
|
10
|
+
--sp-text-on-page-meta: #657287;
|
|
11
|
+
--sp-text-on-surface-default: #141b24;
|
|
12
|
+
--sp-text-on-surface-muted: #4b576a;
|
|
13
|
+
--sp-text-on-surface-subtle: #657287;
|
|
14
|
+
--sp-text-on-surface-meta: #657287;
|
|
15
|
+
--sp-component-card-text: #141b24;
|
|
16
|
+
--sp-component-card-text-muted: #657287;
|
|
17
|
+
--sp-component-input-text: #141b24;
|
|
18
|
+
--sp-component-input-placeholder: #657287;
|
|
19
|
+
--sp-button-text-default: #141b24;
|
|
20
|
+
--sp-button-text-on-primary: #ffffff;
|
|
21
|
+
--sp-badge-neutral-bg: #eef1f6;
|
|
22
|
+
--sp-badge-neutral-text: #374253;
|
|
23
|
+
--sp-badge-info-bg: #e0f2fe;
|
|
24
|
+
--sp-badge-info-text: #075985;
|
|
25
|
+
--sp-badge-success-bg: #dcfce7;
|
|
26
|
+
--sp-badge-success-text: #15803d;
|
|
27
|
+
--sp-badge-warning-bg: #fff1c2;
|
|
28
|
+
--sp-badge-warning-text: #8f5200;
|
|
29
|
+
--sp-badge-danger-bg: #fee2e2;
|
|
30
|
+
--sp-badge-danger-text: #b91c1c;
|
|
31
|
+
--sp-icon-box-bg: #ffffff;
|
|
32
|
+
--sp-icon-box-border: #d9dfeb;
|
|
33
|
+
--sp-icon-box-icon-default: #0369a1;
|
|
34
|
+
--sp-icon-box-icon-success: #16a34a;
|
|
35
|
+
--sp-icon-box-icon-warning: #d48806;
|
|
36
|
+
--sp-icon-box-icon-danger: #dc2626;
|
|
37
|
+
--sp-color-brand-50: #eef4ff;
|
|
38
|
+
--sp-color-brand-100: #d9e7ff;
|
|
39
|
+
--sp-color-brand-200: #b9d2ff;
|
|
40
|
+
--sp-color-brand-300: #8ab6ff;
|
|
41
|
+
--sp-color-brand-400: #5a92ff;
|
|
42
|
+
--sp-color-brand-500: #336df4;
|
|
43
|
+
--sp-color-brand-600: #1f57db;
|
|
44
|
+
--sp-color-brand-700: #1946b4;
|
|
45
|
+
--sp-color-brand-800: #173b8f;
|
|
46
|
+
--sp-color-brand-900: #16336f;
|
|
47
|
+
--sp-color-neutral-50: #f7f8fb;
|
|
48
|
+
--sp-color-neutral-100: #eef1f6;
|
|
49
|
+
--sp-color-neutral-200: #d9dfeb;
|
|
50
|
+
--sp-color-neutral-300: #b7c1d4;
|
|
51
|
+
--sp-color-neutral-400: #8a96ad;
|
|
52
|
+
--sp-color-neutral-500: #657287;
|
|
53
|
+
--sp-color-neutral-600: #4b576a;
|
|
54
|
+
--sp-color-neutral-700: #374253;
|
|
55
|
+
--sp-color-neutral-800: #222b38;
|
|
56
|
+
--sp-color-neutral-900: #141b24;
|
|
57
|
+
--sp-color-accent-50: #f6f2ff;
|
|
58
|
+
--sp-color-accent-100: #eee5ff;
|
|
59
|
+
--sp-color-accent-200: #ddccff;
|
|
60
|
+
--sp-color-accent-300: #c3a7ff;
|
|
61
|
+
--sp-color-accent-400: #a279ff;
|
|
62
|
+
--sp-color-accent-500: #854ff7;
|
|
63
|
+
--sp-color-accent-600: #7135dd;
|
|
64
|
+
--sp-color-accent-700: #5d28b8;
|
|
65
|
+
--sp-color-accent-800: #4d2393;
|
|
66
|
+
--sp-color-accent-900: #401f75;
|
|
67
|
+
--sp-color-success-50: #f0fdf4;
|
|
68
|
+
--sp-color-success-100: #dcfce7;
|
|
69
|
+
--sp-color-success-200: #bbf7d0;
|
|
70
|
+
--sp-color-success-300: #86efac;
|
|
71
|
+
--sp-color-success-400: #4ade80;
|
|
72
|
+
--sp-color-success-500: #22c55e;
|
|
73
|
+
--sp-color-success-600: #16a34a;
|
|
74
|
+
--sp-color-success-700: #15803d;
|
|
75
|
+
--sp-color-success-800: #166534;
|
|
76
|
+
--sp-color-success-900: #14532d;
|
|
77
|
+
--sp-color-warning-50: #fffbea;
|
|
78
|
+
--sp-color-warning-100: #fff1c2;
|
|
79
|
+
--sp-color-warning-200: #ffe08a;
|
|
80
|
+
--sp-color-warning-300: #ffd24d;
|
|
81
|
+
--sp-color-warning-400: #ffc21a;
|
|
82
|
+
--sp-color-warning-500: #f5ad00;
|
|
83
|
+
--sp-color-warning-600: #d48806;
|
|
84
|
+
--sp-color-warning-700: #ad6800;
|
|
85
|
+
--sp-color-warning-800: #8f5200;
|
|
86
|
+
--sp-color-warning-900: #734000;
|
|
87
|
+
--sp-color-error-50: #fef2f2;
|
|
88
|
+
--sp-color-error-100: #fee2e2;
|
|
89
|
+
--sp-color-error-200: #fecaca;
|
|
90
|
+
--sp-color-error-300: #fca5a5;
|
|
91
|
+
--sp-color-error-400: #f87171;
|
|
92
|
+
--sp-color-error-500: #ef4444;
|
|
93
|
+
--sp-color-error-600: #dc2626;
|
|
94
|
+
--sp-color-error-700: #b91c1c;
|
|
95
|
+
--sp-color-error-800: #991b1b;
|
|
96
|
+
--sp-color-error-900: #7f1d1d;
|
|
97
|
+
--sp-color-info-50: #f0f9ff;
|
|
98
|
+
--sp-color-info-100: #e0f2fe;
|
|
99
|
+
--sp-color-info-200: #bae6fd;
|
|
100
|
+
--sp-color-info-300: #7dd3fc;
|
|
101
|
+
--sp-color-info-400: #38bdf8;
|
|
102
|
+
--sp-color-info-500: #0ea5e9;
|
|
103
|
+
--sp-color-info-600: #0369a1;
|
|
104
|
+
--sp-color-info-700: #075985;
|
|
105
|
+
--sp-color-info-800: #0c4a6e;
|
|
106
|
+
--sp-color-info-900: #082f49;
|
|
107
|
+
--sp-color-indigo-500: #5b6ee1;
|
|
108
|
+
--sp-color-indigo-600: #4d61db;
|
|
109
|
+
--sp-color-violet-600: #6f3fd7;
|
|
110
|
+
--sp-color-focus-primary: #336df4;
|
|
111
|
+
--sp-color-focus-error: #ef4444;
|
|
112
|
+
--sp-color-focus-info: #0369a1;
|
|
113
|
+
--sp-color-white-0: #;
|
|
114
|
+
--sp-color-white-1: f;
|
|
115
|
+
--sp-color-white-2: f;
|
|
116
|
+
--sp-color-white-3: f;
|
|
117
|
+
--sp-color-white-4: f;
|
|
118
|
+
--sp-color-white-5: f;
|
|
119
|
+
--sp-color-white-6: f;
|
|
120
|
+
--sp-color-black-0: #;
|
|
121
|
+
--sp-color-black-1: 0;
|
|
122
|
+
--sp-color-black-2: 0;
|
|
123
|
+
--sp-color-black-3: 0;
|
|
124
|
+
--sp-color-black-4: 0;
|
|
125
|
+
--sp-color-black-5: 0;
|
|
126
|
+
--sp-color-black-6: 0;
|
|
127
|
+
--sp-space-0: 0rem;
|
|
128
|
+
--sp-space-4: 0.25rem;
|
|
129
|
+
--sp-space-8: 0.5rem;
|
|
130
|
+
--sp-space-12: 0.75rem;
|
|
131
|
+
--sp-space-16: 1rem;
|
|
132
|
+
--sp-space-20: 1.25rem;
|
|
133
|
+
--sp-space-24: 1.5rem;
|
|
134
|
+
--sp-space-32: 2rem;
|
|
135
|
+
--sp-space-40: 2.5rem;
|
|
136
|
+
--sp-space-48: 3rem;
|
|
137
|
+
--sp-space-56: 3.5rem;
|
|
138
|
+
--sp-space-64: 4rem;
|
|
139
|
+
--sp-space-80: 5rem;
|
|
140
|
+
--sp-space-96: 6rem;
|
|
141
|
+
--sp-layout-section-padding-sm: 1.5rem;
|
|
142
|
+
--sp-layout-section-padding-md: 2rem;
|
|
143
|
+
--sp-layout-section-padding-lg: 3rem;
|
|
144
|
+
--sp-layout-section-gap-sm: 1rem;
|
|
145
|
+
--sp-layout-section-gap-md: 1.5rem;
|
|
146
|
+
--sp-layout-section-gap-lg: 2rem;
|
|
147
|
+
--sp-layout-stack-gap-sm: 0.5rem;
|
|
148
|
+
--sp-layout-stack-gap-md: 0.75rem;
|
|
149
|
+
--sp-layout-stack-gap-lg: 1rem;
|
|
150
|
+
--sp-layout-container-padding-inline-sm: 1rem;
|
|
151
|
+
--sp-layout-container-padding-inline-md: 1.5rem;
|
|
152
|
+
--sp-layout-container-padding-inline-lg: 2rem;
|
|
153
|
+
--sp-layout-container-max-width: 72rem;
|
|
154
|
+
--sp-border-width-base: 1px;
|
|
155
|
+
--sp-border-width-thick: 2px;
|
|
156
|
+
--sp-radius-none: 0;
|
|
157
|
+
--sp-radius-sm: 2px;
|
|
158
|
+
--sp-radius-md: 4px;
|
|
159
|
+
--sp-radius-lg: 8px;
|
|
160
|
+
--sp-radius-pill: 999px;
|
|
161
|
+
--sp-font-family-sans: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
|
|
162
|
+
--sp-font-family-serif: 'Times New Roman', Times, serif;
|
|
163
|
+
--sp-font-family-mono: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
|
|
164
|
+
--sp-font-xs-size: 0.75rem;
|
|
165
|
+
--sp-font-xs-line-height: 1.25rem;
|
|
166
|
+
--sp-font-xs-weight: 400;
|
|
167
|
+
--sp-font-sm-size: 0.875rem;
|
|
168
|
+
--sp-font-sm-line-height: 1.5rem;
|
|
169
|
+
--sp-font-sm-weight: 400;
|
|
170
|
+
--sp-font-md-size: 1rem;
|
|
171
|
+
--sp-font-md-line-height: 1.75rem;
|
|
172
|
+
--sp-font-md-weight: 500;
|
|
173
|
+
--sp-font-lg-size: 1.25rem;
|
|
174
|
+
--sp-font-lg-line-height: 2rem;
|
|
175
|
+
--sp-font-lg-weight: 500;
|
|
176
|
+
--sp-font-xl-size: 1.5rem;
|
|
177
|
+
--sp-font-xl-line-height: 2.125rem;
|
|
178
|
+
--sp-font-xl-weight: 600;
|
|
179
|
+
--sp-font-2xl-size: 1.875rem;
|
|
180
|
+
--sp-font-2xl-line-height: 2.5rem;
|
|
181
|
+
--sp-font-2xl-weight: 600;
|
|
182
|
+
--sp-font-xs-letter-spacing: 0.02em;
|
|
183
|
+
--sp-text-on-page-default: #141b24;
|
|
184
|
+
--sp-text-on-page-muted: #4b576a;
|
|
185
|
+
--sp-text-on-page-subtle: #657287;
|
|
186
|
+
--sp-text-on-page-meta: #657287;
|
|
187
|
+
--sp-text-on-surface-default: #141b24;
|
|
188
|
+
--sp-text-on-surface-muted: #4b576a;
|
|
189
|
+
--sp-text-on-surface-subtle: #657287;
|
|
190
|
+
--sp-text-on-surface-meta: #657287;
|
|
191
|
+
--sp-badge-neutral-bg: #eef1f6;
|
|
192
|
+
--sp-badge-neutral-text: #374253;
|
|
193
|
+
--sp-badge-info-bg: #e0f2fe;
|
|
194
|
+
--sp-badge-info-text: #075985;
|
|
195
|
+
--sp-badge-success-bg: #dcfce7;
|
|
196
|
+
--sp-badge-success-text: #166534;
|
|
197
|
+
--sp-badge-warning-bg: #fff1c2;
|
|
198
|
+
--sp-badge-warning-text: #8f5200;
|
|
199
|
+
--sp-badge-danger-bg: #fee2e2;
|
|
200
|
+
--sp-badge-danger-text: #991b1b;
|
|
201
|
+
--sp-icon-box-bg: #ffffff;
|
|
202
|
+
--sp-icon-box-border: #d9dfeb;
|
|
203
|
+
--sp-icon-box-icon-default: #0369a1;
|
|
204
|
+
--sp-icon-box-icon-success: #16a34a;
|
|
205
|
+
--sp-icon-box-icon-warning: #d48806;
|
|
206
|
+
--sp-icon-box-icon-danger: #dc2626;
|
|
207
|
+
--sp-shadow-none: none;
|
|
208
|
+
--sp-shadow-sm: 0 1px 2px 0 rgba(34, 43, 56, 0.06);
|
|
209
|
+
--sp-shadow-md: 0 2px 6px -1px rgba(34, 43, 56, 0.08);
|
|
210
|
+
--sp-shadow-lg: 0 6px 16px -4px rgba(34, 43, 56, 0.12);
|
|
211
|
+
--sp-breakpoint-sm: 640px;
|
|
212
|
+
--sp-breakpoint-md: 768px;
|
|
213
|
+
--sp-breakpoint-lg: 1024px;
|
|
214
|
+
--sp-breakpoint-xl: 1280px;
|
|
215
|
+
--sp-breakpoint-2xl: 1536px;
|
|
216
|
+
--sp-z-index-base: 0;
|
|
217
|
+
--sp-z-index-dropdown: 1000;
|
|
218
|
+
--sp-z-index-sticky: 1100;
|
|
219
|
+
--sp-z-index-fixed: 1200;
|
|
220
|
+
--sp-z-index-overlay: 1300;
|
|
221
|
+
--sp-z-index-modal: 1400;
|
|
222
|
+
--sp-z-index-popover: 1500;
|
|
223
|
+
--sp-z-index-tooltip: 1600;
|
|
224
|
+
--sp-duration-instant: 75ms;
|
|
225
|
+
--sp-duration-fast: 150ms;
|
|
226
|
+
--sp-duration-base: 200ms;
|
|
227
|
+
--sp-duration-moderate: 300ms;
|
|
228
|
+
--sp-duration-slow: 500ms;
|
|
229
|
+
--sp-duration-slower: 700ms;
|
|
230
|
+
--sp-easing-linear: linear;
|
|
231
|
+
--sp-easing-in: cubic-bezier(0.4, 0, 1, 1);
|
|
232
|
+
--sp-easing-out: cubic-bezier(0, 0, 0.2, 1);
|
|
233
|
+
--sp-easing-inout: cubic-bezier(0.4, 0, 0.2, 1);
|
|
234
|
+
--sp-easing-spring: cubic-bezier(0.4, 0, 0.2, 1);
|
|
235
|
+
--sp-opacity-disabled: 0.38;
|
|
236
|
+
--sp-opacity-hover: 0.92;
|
|
237
|
+
--sp-opacity-active: 0.84;
|
|
238
|
+
--sp-opacity-focus: 1;
|
|
239
|
+
--sp-opacity-overlay: 0.5;
|
|
240
|
+
--sp-opacity-tooltip: 0.95;
|
|
241
|
+
--sp-focus-ring-width: 2px;
|
|
242
|
+
--sp-focus-ring-offset: 2px;
|
|
243
|
+
--sp-focus-ring-style: solid;
|
|
244
|
+
--sp-min-touch-target: 44px;
|
|
245
|
+
--sp-min-text-size: 16px;
|
|
246
|
+
--sp-button-primary-bg: #0369a1;
|
|
247
|
+
--sp-button-primary-bghover: #075985;
|
|
248
|
+
--sp-button-primary-bgactive: #0c4a6e;
|
|
249
|
+
--sp-button-primary-bgdisabled: #d9dfeb;
|
|
250
|
+
--sp-button-primary-text: #ffffff;
|
|
251
|
+
--sp-button-primary-textdisabled: #8a96ad;
|
|
252
|
+
--sp-button-primary-focusring: rgba(14, 165, 233, 0.4);
|
|
253
|
+
--sp-button-secondary-bg: #ffffff;
|
|
254
|
+
--sp-button-secondary-bghover: #f7f8fb;
|
|
255
|
+
--sp-button-secondary-bgactive: #eef1f6;
|
|
256
|
+
--sp-button-secondary-bgdisabled: #f7f8fb;
|
|
257
|
+
--sp-button-secondary-text: #075985;
|
|
258
|
+
--sp-button-secondary-textdisabled: #8a96ad;
|
|
259
|
+
--sp-button-secondary-border: #075985;
|
|
260
|
+
--sp-button-secondary-borderdisabled: #d9dfeb;
|
|
261
|
+
--sp-button-secondary-focusring: rgba(14, 165, 233, 0.4);
|
|
262
|
+
--sp-button-ghost-bg: transparent;
|
|
263
|
+
--sp-button-ghost-bghover: #f0f9ff;
|
|
264
|
+
--sp-button-ghost-bgactive: #e0f2fe;
|
|
265
|
+
--sp-button-ghost-bgdisabled: transparent;
|
|
266
|
+
--sp-button-ghost-text: #075985;
|
|
267
|
+
--sp-button-ghost-textdisabled: #8a96ad;
|
|
268
|
+
--sp-button-ghost-focusring: rgba(14, 165, 233, 0.4);
|
|
269
|
+
--sp-button-danger-bg: #dc2626;
|
|
270
|
+
--sp-button-danger-bghover: #b91c1c;
|
|
271
|
+
--sp-button-danger-bgactive: #991b1b;
|
|
272
|
+
--sp-button-danger-bgdisabled: #fecaca;
|
|
273
|
+
--sp-button-danger-text: #ffffff;
|
|
274
|
+
--sp-button-danger-textdisabled: #8a96ad;
|
|
275
|
+
--sp-button-danger-focusring: rgba(239, 68, 68, 0.4);
|
|
276
|
+
--sp-button-success-bg: #15803d;
|
|
277
|
+
--sp-button-success-bghover: #166534;
|
|
278
|
+
--sp-button-success-bgactive: #14532d;
|
|
279
|
+
--sp-button-success-bgdisabled: #bbf7d0;
|
|
280
|
+
--sp-button-success-text: #ffffff;
|
|
281
|
+
--sp-button-success-textdisabled: #8a96ad;
|
|
282
|
+
--sp-button-success-focusring: rgba(34, 197, 94, 0.4);
|
|
283
|
+
--sp-button-cta-bg: #1f57db;
|
|
284
|
+
--sp-button-cta-bghover: #1946b4;
|
|
285
|
+
--sp-button-cta-bgactive: #173b8f;
|
|
286
|
+
--sp-button-cta-bgdisabled: #b9d2ff;
|
|
287
|
+
--sp-button-cta-text: #ffffff;
|
|
288
|
+
--sp-button-cta-textdisabled: #8a96ad;
|
|
289
|
+
--sp-button-cta-shadow: 0 4px 14px 0 rgba(51, 109, 244, 0.39);
|
|
290
|
+
--sp-button-cta-focusring: rgba(51, 109, 244, 0.4);
|
|
291
|
+
--sp-button-accent-bg: #7135dd;
|
|
292
|
+
--sp-button-accent-bghover: #5d28b8;
|
|
293
|
+
--sp-button-accent-bgactive: #4d2393;
|
|
294
|
+
--sp-button-accent-bgdisabled: #ddccff;
|
|
295
|
+
--sp-button-accent-text: #ffffff;
|
|
296
|
+
--sp-button-accent-textdisabled: #8a96ad;
|
|
297
|
+
--sp-button-accent-focusring: rgba(133, 79, 247, 0.4);
|
|
298
|
+
--sp-form-default-bg: #ffffff;
|
|
299
|
+
--sp-form-default-border: #b7c1d4;
|
|
300
|
+
--sp-form-default-text: #141b24;
|
|
301
|
+
--sp-form-default-placeholder: #657287;
|
|
302
|
+
--sp-form-hover-border: #0ea5e9;
|
|
303
|
+
--sp-form-focus-border: #0ea5e9;
|
|
304
|
+
--sp-form-focus-ring: #0ea5e9;
|
|
305
|
+
--sp-form-valid-border: #22c55e;
|
|
306
|
+
--sp-form-valid-bg: #f0fdf4;
|
|
307
|
+
--sp-form-valid-text: #15803d;
|
|
308
|
+
--sp-form-invalid-border: #ef4444;
|
|
309
|
+
--sp-form-invalid-bg: #fef2f2;
|
|
310
|
+
--sp-form-invalid-text: #b91c1c;
|
|
311
|
+
--sp-form-disabled-bg: #f7f8fb;
|
|
312
|
+
--sp-form-disabled-border: #d9dfeb;
|
|
313
|
+
--sp-form-disabled-text: #8a96ad;
|
|
314
|
+
--sp-animation-fadein-duration: 200ms;
|
|
315
|
+
--sp-animation-fadein-easing: cubic-bezier(0, 0, 0.2, 1);
|
|
316
|
+
--sp-animation-fadein-keyframes: fade-in;
|
|
317
|
+
--sp-animation-fadeout-duration: 150ms;
|
|
318
|
+
--sp-animation-fadeout-easing: cubic-bezier(0.4, 0, 1, 1);
|
|
319
|
+
--sp-animation-fadeout-keyframes: fade-out;
|
|
320
|
+
--sp-animation-slideup-duration: 300ms;
|
|
321
|
+
--sp-animation-slideup-easing: cubic-bezier(0, 0, 0.2, 1);
|
|
322
|
+
--sp-animation-slideup-keyframes: slide-up;
|
|
323
|
+
--sp-animation-slidedown-duration: 300ms;
|
|
324
|
+
--sp-animation-slidedown-easing: cubic-bezier(0, 0, 0.2, 1);
|
|
325
|
+
--sp-animation-slidedown-keyframes: slide-down;
|
|
326
|
+
--sp-animation-scalein-duration: 200ms;
|
|
327
|
+
--sp-animation-scalein-easing: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
328
|
+
--sp-animation-scalein-keyframes: scale-in;
|
|
329
|
+
--sp-animation-bounce-duration: 300ms;
|
|
330
|
+
--sp-animation-bounce-easing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
331
|
+
--sp-animation-bounce-keyframes: bounce;
|
|
332
|
+
--sp-animation-shake-duration: 250ms;
|
|
333
|
+
--sp-animation-shake-easing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
334
|
+
--sp-animation-shake-keyframes: shake;
|
|
335
|
+
--sp-animation-pulse-duration: 1200ms;
|
|
336
|
+
--sp-animation-pulse-easing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
337
|
+
--sp-animation-pulse-keyframes: pulse;
|
|
338
|
+
}
|
|
339
|
+
:root[data-spectre-theme="dark"] {
|
|
340
|
+
--sp-surface-page: #141b24;
|
|
341
|
+
--sp-surface-card: #222b38;
|
|
342
|
+
--sp-surface-input: #374253;
|
|
343
|
+
--sp-surface-overlay: #222b38;
|
|
344
|
+
--sp-surface-hero: linear-gradient(135deg, #401f75 0%, #5d28b8 100%);
|
|
345
|
+
--sp-text-on-page-default: #f7f8fb;
|
|
346
|
+
--sp-text-on-page-muted: #b7c1d4;
|
|
347
|
+
--sp-text-on-page-subtle: #8a96ad;
|
|
348
|
+
--sp-text-on-page-meta: #8a96ad;
|
|
349
|
+
--sp-text-on-surface-default: #eef1f6;
|
|
350
|
+
--sp-text-on-surface-muted: #b7c1d4;
|
|
351
|
+
--sp-text-on-surface-subtle: #8a96ad;
|
|
352
|
+
--sp-text-on-surface-meta: #8a96ad;
|
|
353
|
+
--sp-component-card-text: #eef1f6;
|
|
354
|
+
--sp-component-card-text-muted: #b7c1d4;
|
|
355
|
+
--sp-component-input-text: #eef1f6;
|
|
356
|
+
--sp-component-input-placeholder: #b7c1d4;
|
|
357
|
+
--sp-button-text-default: #eef1f6;
|
|
358
|
+
--sp-button-text-on-primary: #ffffff;
|
|
359
|
+
--sp-badge-neutral-bg: #374253;
|
|
360
|
+
--sp-badge-neutral-text: #eef1f6;
|
|
361
|
+
--sp-badge-info-bg: #0c4a6e;
|
|
362
|
+
--sp-badge-info-text: #e0f2fe;
|
|
363
|
+
--sp-badge-success-bg: #166534;
|
|
364
|
+
--sp-badge-success-text: #dcfce7;
|
|
365
|
+
--sp-badge-warning-bg: #8f5200;
|
|
366
|
+
--sp-badge-warning-text: #fff1c2;
|
|
367
|
+
--sp-badge-danger-bg: #991b1b;
|
|
368
|
+
--sp-badge-danger-text: #fee2e2;
|
|
369
|
+
--sp-icon-box-bg: #222b38;
|
|
370
|
+
--sp-icon-box-border: #374253;
|
|
371
|
+
--sp-icon-box-icon-default: #7dd3fc;
|
|
372
|
+
--sp-icon-box-icon-success: #4ade80;
|
|
373
|
+
--sp-icon-box-icon-warning: #ffc21a;
|
|
374
|
+
--sp-icon-box-icon-danger: #f87171;
|
|
375
|
+
}
|
|
1
376
|
@layer base {
|
|
2
377
|
|
|
3
378
|
*,
|