@leftium/nimble.css 0.1.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.
- package/LICENSE +21 -0
- package/README.md +128 -0
- package/dist/nimble-base.css +286 -0
- package/dist/nimble-base.min.css +1 -0
- package/dist/nimble-reset.css +120 -0
- package/dist/nimble-reset.min.css +1 -0
- package/dist/nimble-utilities.css +40 -0
- package/dist/nimble-utilities.min.css +1 -0
- package/dist/nimble.css +618 -0
- package/dist/nimble.min.css +1 -0
- package/package.json +40 -0
- package/src/_buttons.scss +123 -0
- package/src/_code.scss +37 -0
- package/src/_colors.scss +124 -0
- package/src/_config.scss +53 -0
- package/src/_details.scss +29 -0
- package/src/_dialog.scss +26 -0
- package/src/_document.scss +41 -0
- package/src/_forms.scss +130 -0
- package/src/_layers-base.scss +1 -0
- package/src/_layers-reset.scss +1 -0
- package/src/_layers-utilities.scss +1 -0
- package/src/_layers.scss +6 -0
- package/src/_links.scss +29 -0
- package/src/_media.scss +26 -0
- package/src/_print.scss +41 -0
- package/src/_reset.scss +183 -0
- package/src/_tables.scss +34 -0
- package/src/_typography.scss +135 -0
- package/src/_utilities.scss +73 -0
- package/src/nimble-base.scss +11 -0
- package/src/nimble-reset.scss +8 -0
- package/src/nimble-utilities.scss +8 -0
- package/src/nimble.scss +30 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Leftium
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
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
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# nimble.css
|
|
2
|
+
|
|
3
|
+
A minimal class/classless CSS library. Drop it in and your semantic HTML looks good — no classes required. ~3 KB gzipped.
|
|
4
|
+
|
|
5
|
+
- **Classless by default** — style every standard HTML element with zero markup changes
|
|
6
|
+
- **Automatic dark mode** — via `prefers-color-scheme` and `light-dark()`
|
|
7
|
+
- **OKLCH color system** — perceptually uniform, fully customizable via SCSS config
|
|
8
|
+
- **Cascade layers** — plays nicely alongside your own styles
|
|
9
|
+
- **Tiny** — 11.9 KB minified, ~3.1 KB gzipped
|
|
10
|
+
|
|
11
|
+
## Demos
|
|
12
|
+
|
|
13
|
+
- [HTML5 Test Page](https://leftium.github.io/nimble.css/demo/) — every standard HTML element
|
|
14
|
+
- [Extended Demo](https://leftium.github.io/nimble.css/demo/extended.html) — layouts, utilities, button variants, forms, dark mode toggle
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
### CDN
|
|
19
|
+
|
|
20
|
+
```html
|
|
21
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Leftium/nimble.css@main/dist/nimble.min.css">
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
That's it. Write semantic HTML and it just works.
|
|
25
|
+
|
|
26
|
+
### Sub-bundles
|
|
27
|
+
|
|
28
|
+
Pick only what you need:
|
|
29
|
+
|
|
30
|
+
| Bundle | Minified | Contents |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| `nimble.min.css` | 11.9 KB | Everything |
|
|
33
|
+
| `nimble-base.min.css` | 5.2 KB | Reset + colors + document + typography |
|
|
34
|
+
| `nimble-reset.min.css` | 1.7 KB | Modern CSS reset only |
|
|
35
|
+
| `nimble-utilities.min.css` | 572 B | Utility classes only |
|
|
36
|
+
|
|
37
|
+
```html
|
|
38
|
+
<!-- Just the classless core, no element styles or utilities -->
|
|
39
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Leftium/nimble.css@main/dist/nimble-base.min.css">
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Download
|
|
43
|
+
|
|
44
|
+
Grab [`nimble.min.css`](dist/nimble.min.css) from this repo and include it locally:
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<link rel="stylesheet" href="nimble.min.css">
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Utility Classes
|
|
51
|
+
|
|
52
|
+
Content is centered at `720px` by default — no class needed. These opt-in utilities handle the rest. Disable all with `$enable-utilities: false`.
|
|
53
|
+
|
|
54
|
+
| Class | Description |
|
|
55
|
+
|---|---|
|
|
56
|
+
| `.fluid` | Full viewport width with padding (opt out of centering) |
|
|
57
|
+
| `.container` | Re-center content inside a `.fluid` layout |
|
|
58
|
+
| `.full-bleed` | Break out of centered layout to full width |
|
|
59
|
+
| `.wide` | Break out to wide max-width (1200px) |
|
|
60
|
+
| `.striped` | Striped table rows (apply to table wrapper) |
|
|
61
|
+
| `.visually-hidden` | Hidden visually, accessible to screen readers |
|
|
62
|
+
| `.overflow-auto` | Scrollable container |
|
|
63
|
+
|
|
64
|
+
## Customization
|
|
65
|
+
|
|
66
|
+
nimble.css is built with SCSS. Override any config variable:
|
|
67
|
+
|
|
68
|
+
```scss
|
|
69
|
+
@use 'nimble' with (
|
|
70
|
+
$primary-hue: 150,
|
|
71
|
+
$primary-chroma: 0.15,
|
|
72
|
+
$radius: 0.5rem,
|
|
73
|
+
$content-width: 960px,
|
|
74
|
+
$enable-dialog: false,
|
|
75
|
+
);
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Config Variables
|
|
79
|
+
|
|
80
|
+
| Variable | Default | Description |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `$prefix` | `'--nc-'` | CSS custom property prefix |
|
|
83
|
+
| `$primary-hue` | `250` | Primary accent hue (OKLCH) |
|
|
84
|
+
| `$primary-chroma` | `0.2` | Primary accent chroma |
|
|
85
|
+
| `$primary-lightness` | `0.50` | Primary accent lightness |
|
|
86
|
+
| `$secondary-hue` | `250` | Secondary accent hue |
|
|
87
|
+
| `$secondary-chroma` | `0.05` | Secondary accent chroma |
|
|
88
|
+
| `$secondary-lightness` | `0.45` | Secondary accent lightness |
|
|
89
|
+
| `$surface-hue` | `250` | Background surface hue |
|
|
90
|
+
| `$font-sans` | `system-ui, sans-serif` | Body font stack |
|
|
91
|
+
| `$font-mono` | `ui-monospace, ...` | Code font stack |
|
|
92
|
+
| `$spacing` | `1rem` | Base spacing unit |
|
|
93
|
+
| `$radius` | `0.25rem` | Border radius |
|
|
94
|
+
| `$content-width` | `720px` | Max content width |
|
|
95
|
+
| `$wide-width` | `1200px` | Wide layout max-width |
|
|
96
|
+
| `$enable-utilities` | `true` | Include utility classes |
|
|
97
|
+
| `$enable-dialog` | `true` | Include dialog styles |
|
|
98
|
+
| `$enable-switch` | `true` | Include switch toggle |
|
|
99
|
+
| `$enable-details` | `true` | Include details/summary |
|
|
100
|
+
|
|
101
|
+
## Design Lineage
|
|
102
|
+
|
|
103
|
+
nimble.css combines [Open Props](https://open-props.style/)'s design token philosophy with [PicoCSS](https://picocss.com/)'s classless aesthetics. Key concepts borrowed from Open Props:
|
|
104
|
+
|
|
105
|
+
- **Surface hierarchy** (`surface-1` through `surface-4`) — layered backgrounds for page, card, input, and overlay contexts. Defined in `_colors.scss` from OKLCH parameters rather than imported at runtime.
|
|
106
|
+
- **Text hierarchy** (`text-1`, `text-2`) — primary and muted text colors, same naming convention as Open Props.
|
|
107
|
+
- **OKLCH color space** — perceptually uniform color system. Change `$primary-hue` and the entire palette regenerates consistently.
|
|
108
|
+
- **Curated scale values** — `$spacing: 1rem` (~Open Props `size-3`) and `$radius: 0.25rem` (~Open Props `radius-2`) are sourced from Open Props' scales.
|
|
109
|
+
- **Minimal DevTools pollution** — ~20 semantic custom properties on `:root` plus scoped `--_` internals per component, rather than dumping hundreds of variables globally.
|
|
110
|
+
|
|
111
|
+
The key architectural difference: nimble.css is self-contained SCSS with no runtime dependency on Open Props. Token values are baked in at compile time, and the SCSS parametric layer (change one hue, regenerate everything) goes beyond what pure CSS custom properties can offer.
|
|
112
|
+
|
|
113
|
+
## Building from Source
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pnpm install
|
|
117
|
+
node build.js
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Output goes to `dist/`. Use `--prefix` to set a custom CSS property prefix:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
node build.js --prefix '--my-'
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
MIT
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
@layer nimble.reset, nimble.base;
|
|
2
|
+
@layer nimble.reset {
|
|
3
|
+
:where(*),
|
|
4
|
+
:where(*::before),
|
|
5
|
+
:where(*::after) {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
background-repeat: no-repeat;
|
|
8
|
+
}
|
|
9
|
+
:where(html) {
|
|
10
|
+
line-height: 1.5;
|
|
11
|
+
-webkit-text-size-adjust: 100%;
|
|
12
|
+
tab-size: 4;
|
|
13
|
+
}
|
|
14
|
+
:where(body) {
|
|
15
|
+
margin: 0;
|
|
16
|
+
}
|
|
17
|
+
:where(h1) {
|
|
18
|
+
font-size: 2em;
|
|
19
|
+
margin-block: 0.67em;
|
|
20
|
+
}
|
|
21
|
+
:where(hr) {
|
|
22
|
+
height: 0;
|
|
23
|
+
color: inherit;
|
|
24
|
+
}
|
|
25
|
+
:where(nav) :where(ol, ul) {
|
|
26
|
+
list-style-type: none;
|
|
27
|
+
padding: 0;
|
|
28
|
+
}
|
|
29
|
+
:where(pre) {
|
|
30
|
+
font-family: monospace, monospace;
|
|
31
|
+
font-size: 1em;
|
|
32
|
+
}
|
|
33
|
+
:where(abbr[title]) {
|
|
34
|
+
text-decoration: underline dotted;
|
|
35
|
+
}
|
|
36
|
+
:where(b, strong) {
|
|
37
|
+
font-weight: bolder;
|
|
38
|
+
}
|
|
39
|
+
:where(code, kbd, samp) {
|
|
40
|
+
font-family: monospace, monospace;
|
|
41
|
+
font-size: 1em;
|
|
42
|
+
}
|
|
43
|
+
:where(small) {
|
|
44
|
+
font-size: 80%;
|
|
45
|
+
}
|
|
46
|
+
:where(sub, sup) {
|
|
47
|
+
font-size: 75%;
|
|
48
|
+
line-height: 0;
|
|
49
|
+
position: relative;
|
|
50
|
+
vertical-align: baseline;
|
|
51
|
+
}
|
|
52
|
+
:where(sub) {
|
|
53
|
+
bottom: -0.25em;
|
|
54
|
+
}
|
|
55
|
+
:where(sup) {
|
|
56
|
+
top: -0.5em;
|
|
57
|
+
}
|
|
58
|
+
:where(iframe) {
|
|
59
|
+
border-style: none;
|
|
60
|
+
}
|
|
61
|
+
:where(table) {
|
|
62
|
+
border-collapse: collapse;
|
|
63
|
+
border-color: currentColor;
|
|
64
|
+
text-indent: 0;
|
|
65
|
+
}
|
|
66
|
+
:where(button, input, select, textarea) {
|
|
67
|
+
font: inherit;
|
|
68
|
+
letter-spacing: inherit;
|
|
69
|
+
}
|
|
70
|
+
:where(button, [type=button], [type=reset], [type=submit]) {
|
|
71
|
+
-webkit-appearance: button;
|
|
72
|
+
}
|
|
73
|
+
:where(fieldset) {
|
|
74
|
+
border: 1px solid #a0a0a0;
|
|
75
|
+
}
|
|
76
|
+
:where(progress) {
|
|
77
|
+
vertical-align: baseline;
|
|
78
|
+
}
|
|
79
|
+
:where(textarea) {
|
|
80
|
+
resize: vertical;
|
|
81
|
+
overflow: auto;
|
|
82
|
+
}
|
|
83
|
+
:where([type=search]) {
|
|
84
|
+
-webkit-appearance: textfield;
|
|
85
|
+
outline-offset: -2px;
|
|
86
|
+
}
|
|
87
|
+
:where(::-webkit-search-decoration) {
|
|
88
|
+
-webkit-appearance: none;
|
|
89
|
+
}
|
|
90
|
+
:where(::-webkit-inner-spin-button),
|
|
91
|
+
:where(::-webkit-outer-spin-button) {
|
|
92
|
+
height: auto;
|
|
93
|
+
}
|
|
94
|
+
:where(::-webkit-file-upload-button) {
|
|
95
|
+
-webkit-appearance: button;
|
|
96
|
+
font: inherit;
|
|
97
|
+
}
|
|
98
|
+
:where(summary) {
|
|
99
|
+
display: list-item;
|
|
100
|
+
}
|
|
101
|
+
:where(a, area, button, input, label, select, summary, textarea, [tabindex]) {
|
|
102
|
+
touch-action: manipulation;
|
|
103
|
+
}
|
|
104
|
+
:where([aria-busy=true]) {
|
|
105
|
+
cursor: progress;
|
|
106
|
+
}
|
|
107
|
+
:where([aria-disabled=true], [disabled]) {
|
|
108
|
+
cursor: not-allowed;
|
|
109
|
+
}
|
|
110
|
+
@media (prefers-reduced-motion: reduce) {
|
|
111
|
+
:where(*),
|
|
112
|
+
:where(*::before),
|
|
113
|
+
:where(*::after) {
|
|
114
|
+
animation-duration: 0.01ms !important;
|
|
115
|
+
animation-iteration-count: 1 !important;
|
|
116
|
+
transition-duration: 0.01ms !important;
|
|
117
|
+
scroll-behavior: auto !important;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
@layer nimble.base {
|
|
122
|
+
:root {
|
|
123
|
+
color-scheme: light dark;
|
|
124
|
+
--nc-surface-1: light-dark(oklch(0.985 0.002 250), oklch(0.17 0.005 260));
|
|
125
|
+
--nc-surface-2: light-dark(oklch(0.955 0.002 250), oklch(0.2 0.005 260));
|
|
126
|
+
--nc-surface-3: light-dark(oklch(0.925 0.002 250), oklch(0.23 0.005 260));
|
|
127
|
+
--nc-surface-4: light-dark(oklch(0.885 0.002 250), oklch(0.27 0.005 260));
|
|
128
|
+
--nc-text-1: light-dark(oklch(0.28 0.005 250), oklch(0.86 0.005 250));
|
|
129
|
+
--nc-text-2: light-dark(oklch(0.58 0.005 250), oklch(0.65 0.005 250));
|
|
130
|
+
--nc-border: light-dark(oklch(0.83 0.005 250), oklch(0.28 0.005 260));
|
|
131
|
+
--nc-primary: light-dark(oklch(0.5 0.2 250), oklch(0.6 0.2 250));
|
|
132
|
+
--nc-primary-hover: light-dark(oklch(0.4 0.2 250), oklch(0.7 0.2 250));
|
|
133
|
+
--nc-primary-focus: oklch(0.5 0.2 250 / 0.4);
|
|
134
|
+
--nc-primary-contrast: light-dark(#fff, oklch(0.15 0.005 250));
|
|
135
|
+
--nc-secondary: light-dark(oklch(0.45 0.05 250), oklch(0.6 0.05 250));
|
|
136
|
+
--nc-secondary-hover: light-dark(oklch(0.35 0.05 250), oklch(0.7 0.05 250));
|
|
137
|
+
--nc-secondary-focus: oklch(0.45 0.05 250 / 0.3);
|
|
138
|
+
--nc-secondary-contrast: light-dark(#fff, oklch(0.15 0.005 250));
|
|
139
|
+
--nc-valid: light-dark(oklch(0.52 0.17 145), oklch(0.65 0.2 145));
|
|
140
|
+
--nc-invalid: light-dark(oklch(0.55 0.22 25), oklch(0.65 0.22 25));
|
|
141
|
+
--nc-font-sans: system-ui, sans-serif;
|
|
142
|
+
--nc-font-mono: ui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospace;
|
|
143
|
+
--nc-spacing: 1rem;
|
|
144
|
+
--nc-radius: 0.25rem;
|
|
145
|
+
--nc-content-width: 720px;
|
|
146
|
+
}
|
|
147
|
+
[data-theme=dark] {
|
|
148
|
+
color-scheme: dark;
|
|
149
|
+
}
|
|
150
|
+
[data-theme=light] {
|
|
151
|
+
color-scheme: light;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
@layer nimble.base {
|
|
155
|
+
html {
|
|
156
|
+
font-family: var(--nc-font-sans);
|
|
157
|
+
font-size: 100%;
|
|
158
|
+
line-height: 1.5;
|
|
159
|
+
color: var(--nc-text-1);
|
|
160
|
+
background-color: var(--nc-surface-1);
|
|
161
|
+
}
|
|
162
|
+
body {
|
|
163
|
+
display: grid;
|
|
164
|
+
grid-template-columns: 1fr min(var(--nc-content-width), calc(100% - 2 * var(--nc-spacing))) 1fr;
|
|
165
|
+
min-height: 100dvh;
|
|
166
|
+
}
|
|
167
|
+
body > * {
|
|
168
|
+
grid-column: 2;
|
|
169
|
+
}
|
|
170
|
+
::selection {
|
|
171
|
+
background-color: var(--nc-primary-focus);
|
|
172
|
+
color: var(--nc-text-1);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
@layer nimble.base {
|
|
176
|
+
h1 {
|
|
177
|
+
font-size: 2rem;
|
|
178
|
+
line-height: 1.1;
|
|
179
|
+
margin-top: 0;
|
|
180
|
+
margin-bottom: var(--nc-spacing);
|
|
181
|
+
font-weight: 700;
|
|
182
|
+
text-wrap: balance;
|
|
183
|
+
}
|
|
184
|
+
h2 {
|
|
185
|
+
font-size: 1.75rem;
|
|
186
|
+
line-height: 1.15;
|
|
187
|
+
margin-top: 0;
|
|
188
|
+
margin-bottom: var(--nc-spacing);
|
|
189
|
+
font-weight: 700;
|
|
190
|
+
text-wrap: balance;
|
|
191
|
+
}
|
|
192
|
+
h3 {
|
|
193
|
+
font-size: 1.5rem;
|
|
194
|
+
line-height: 1.2;
|
|
195
|
+
margin-top: 0;
|
|
196
|
+
margin-bottom: var(--nc-spacing);
|
|
197
|
+
font-weight: 700;
|
|
198
|
+
text-wrap: balance;
|
|
199
|
+
}
|
|
200
|
+
h4 {
|
|
201
|
+
font-size: 1.25rem;
|
|
202
|
+
line-height: 1.3;
|
|
203
|
+
margin-top: 0;
|
|
204
|
+
margin-bottom: var(--nc-spacing);
|
|
205
|
+
font-weight: 700;
|
|
206
|
+
text-wrap: balance;
|
|
207
|
+
}
|
|
208
|
+
h5 {
|
|
209
|
+
font-size: 1.125rem;
|
|
210
|
+
line-height: 1.4;
|
|
211
|
+
margin-top: 0;
|
|
212
|
+
margin-bottom: var(--nc-spacing);
|
|
213
|
+
font-weight: 700;
|
|
214
|
+
text-wrap: balance;
|
|
215
|
+
}
|
|
216
|
+
h6 {
|
|
217
|
+
font-size: 1rem;
|
|
218
|
+
line-height: 1.5;
|
|
219
|
+
margin-top: 0;
|
|
220
|
+
margin-bottom: var(--nc-spacing);
|
|
221
|
+
font-weight: 700;
|
|
222
|
+
text-wrap: balance;
|
|
223
|
+
}
|
|
224
|
+
@media (max-width: 720px) {
|
|
225
|
+
h1 {
|
|
226
|
+
font-size: 1.75rem;
|
|
227
|
+
}
|
|
228
|
+
h2 {
|
|
229
|
+
font-size: 1.5rem;
|
|
230
|
+
}
|
|
231
|
+
h3 {
|
|
232
|
+
font-size: 1.3rem;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
p, ul, ol, dl, blockquote, pre, table, figure, form, fieldset {
|
|
236
|
+
margin-top: 0;
|
|
237
|
+
margin-bottom: var(--nc-spacing);
|
|
238
|
+
}
|
|
239
|
+
:where(p, ul, ol, dl, blockquote, pre, table, figure, form) + :is(h1, h2, h3, h4, h5, h6) {
|
|
240
|
+
margin-top: calc(var(--nc-spacing) * 2);
|
|
241
|
+
}
|
|
242
|
+
ul, ol {
|
|
243
|
+
padding-inline-start: 1.5em;
|
|
244
|
+
}
|
|
245
|
+
li {
|
|
246
|
+
margin-bottom: 0.25em;
|
|
247
|
+
}
|
|
248
|
+
:where(li) > :where(ul, ol) {
|
|
249
|
+
margin-bottom: 0;
|
|
250
|
+
}
|
|
251
|
+
dt {
|
|
252
|
+
font-weight: 600;
|
|
253
|
+
}
|
|
254
|
+
dd {
|
|
255
|
+
margin-inline-start: 1.5em;
|
|
256
|
+
margin-bottom: 0.5em;
|
|
257
|
+
}
|
|
258
|
+
blockquote {
|
|
259
|
+
margin-block: var(--nc-spacing);
|
|
260
|
+
margin-inline: 0;
|
|
261
|
+
padding: 0.25em var(--nc-spacing);
|
|
262
|
+
border-inline-start: 0.25rem solid var(--nc-border);
|
|
263
|
+
font-style: italic;
|
|
264
|
+
}
|
|
265
|
+
:where(blockquote) footer,
|
|
266
|
+
:where(blockquote) cite {
|
|
267
|
+
font-style: normal;
|
|
268
|
+
font-size: 0.9em;
|
|
269
|
+
color: var(--nc-text-2);
|
|
270
|
+
}
|
|
271
|
+
hr {
|
|
272
|
+
border: none;
|
|
273
|
+
height: 1px;
|
|
274
|
+
background-color: color-mix(in oklch, var(--nc-border), transparent 40%);
|
|
275
|
+
margin: calc(var(--nc-spacing) * 2) 0;
|
|
276
|
+
}
|
|
277
|
+
mark {
|
|
278
|
+
padding: 0.1em 0.25em;
|
|
279
|
+
background-color: light-dark(#fde68a, oklch(0.55 0.12 85));
|
|
280
|
+
color: light-dark(inherit, oklch(0.95 0.01 85));
|
|
281
|
+
border-radius: 2px;
|
|
282
|
+
}
|
|
283
|
+
address {
|
|
284
|
+
font-style: normal;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer nimble.reset{:where(*),:where(),:where(){box-sizing:border-box;background-repeat:no-repeat}:where(html){-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5}:where(body){margin:0}:where(h1){margin-block:.67em;font-size:2em}:where(hr){height:0;color:inherit}:where(nav) :where(ol,ul){padding:0;list-style-type:none}:where(pre){font-family:monospace;font-size:1em}:where(abbr[title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace;font-size:1em}:where(small){font-size:80%}:where(sub,sup){vertical-align:baseline;font-size:75%;line-height:0;position:relative}:where(sub){bottom:-.25em}:where(sup){top:-.5em}:where(iframe){border-style:none}:where(table){border-collapse:collapse;text-indent:0;border-color:currentColor}:where(button,input,select,textarea){font:inherit;letter-spacing:inherit}:where(button,[type=button],[type=reset],[type=submit]){-webkit-appearance:button}:where(fieldset){border:1px solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){resize:vertical;overflow:auto}:where([type=search]){-webkit-appearance:textfield;outline-offset:-2px}:where(){-webkit-appearance:none}:where(),:where(){height:auto}:where(){-webkit-appearance:button;font:inherit}:where(summary){display:list-item}:where(a,area,button,input,label,select,summary,textarea,[tabindex]){touch-action:manipulation}:where([aria-busy=true]){cursor:progress}:where([aria-disabled=true],[disabled]){cursor:not-allowed}@media (prefers-reduced-motion:reduce){:where(*),:where(),:where(){scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer nimble.base{:root{color-scheme:light dark;--nc-surface-1:light-dark(oklch(98.5% .002 250),oklch(17% .005 260));--nc-surface-2:light-dark(oklch(95.5% .002 250),oklch(20% .005 260));--nc-surface-3:light-dark(oklch(92.5% .002 250),oklch(23% .005 260));--nc-surface-4:light-dark(oklch(88.5% .002 250),oklch(27% .005 260));--nc-text-1:light-dark(oklch(28% .005 250),oklch(86% .005 250));--nc-text-2:light-dark(oklch(58% .005 250),oklch(65% .005 250));--nc-border:light-dark(oklch(83% .005 250),oklch(28% .005 260));--nc-primary:light-dark(oklch(50% .2 250),oklch(60% .2 250));--nc-primary-hover:light-dark(oklch(40% .2 250),oklch(70% .2 250));--nc-primary-focus:oklch(50% .2 250/.4);--nc-primary-contrast:light-dark(#fff,oklch(15% .005 250));--nc-secondary:light-dark(oklch(45% .05 250),oklch(60% .05 250));--nc-secondary-hover:light-dark(oklch(35% .05 250),oklch(70% .05 250));--nc-secondary-focus:oklch(45% .05 250/.3);--nc-secondary-contrast:light-dark(#fff,oklch(15% .005 250));--nc-valid:light-dark(oklch(52% .17 145),oklch(65% .2 145));--nc-invalid:light-dark(oklch(55% .22 25),oklch(65% .22 25));--nc-font-sans:system-ui, sans-serif;--nc-font-mono:ui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospace;--nc-spacing:1rem;--nc-radius:.25rem;--nc-content-width:720px}[data-theme=dark]{color-scheme:dark}[data-theme=light]{color-scheme:light}html{font-family:var(--nc-font-sans);color:var(--nc-text-1);background-color:var(--nc-surface-1);font-size:100%;line-height:1.5}body{grid-template-columns:1fr min(var(--nc-content-width), calc(100% - 2 * var(--nc-spacing))) 1fr;min-height:100dvh;display:grid}body>*{grid-column:2}::selection{background-color:var(--nc-primary-focus);color:var(--nc-text-1)}h1{margin-top:0;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:2rem;font-weight:700;line-height:1.1}h2{margin-top:0;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.75rem;font-weight:700;line-height:1.15}h3{margin-top:0;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.5rem;font-weight:700;line-height:1.2}h4{margin-top:0;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.25rem;font-weight:700;line-height:1.3}h5{margin-top:0;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.125rem;font-weight:700;line-height:1.4}h6{margin-top:0;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1rem;font-weight:700;line-height:1.5}@media (width<=720px){h1{font-size:1.75rem}h2{font-size:1.5rem}h3{font-size:1.3rem}}p,ul,ol,dl,blockquote,pre,table,figure,form,fieldset{margin-top:0;margin-bottom:var(--nc-spacing)}:where(p,ul,ol,dl,blockquote,pre,table,figure,form)+:is(h1,h2,h3,h4,h5,h6){margin-top:calc(var(--nc-spacing) * 2)}ul,ol{padding-inline-start:1.5em}li{margin-bottom:.25em}:where(li)>:where(ul,ol){margin-bottom:0}dt{font-weight:600}dd{margin-inline-start:1.5em;margin-bottom:.5em}blockquote{margin-block:var(--nc-spacing);padding:.25em var(--nc-spacing);border-inline-start:.25rem solid var(--nc-border);margin-inline:0;font-style:italic}:where(blockquote) footer,:where(blockquote) cite{color:var(--nc-text-2);font-size:.9em;font-style:normal}hr{background-color:color-mix(in oklch, var(--nc-border), transparent 40%);height:1px;margin:calc(var(--nc-spacing) * 2) 0;border:none}mark{color:light-dark(inherit,oklch(95% .01 85));background-color:light-dark(#fde68a,oklch(55% .12 85));border-radius:2px;padding:.1em .25em}address{font-style:normal}}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
@layer nimble.reset;
|
|
2
|
+
@layer nimble.reset {
|
|
3
|
+
:where(*),
|
|
4
|
+
:where(*::before),
|
|
5
|
+
:where(*::after) {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
background-repeat: no-repeat;
|
|
8
|
+
}
|
|
9
|
+
:where(html) {
|
|
10
|
+
line-height: 1.5;
|
|
11
|
+
-webkit-text-size-adjust: 100%;
|
|
12
|
+
tab-size: 4;
|
|
13
|
+
}
|
|
14
|
+
:where(body) {
|
|
15
|
+
margin: 0;
|
|
16
|
+
}
|
|
17
|
+
:where(h1) {
|
|
18
|
+
font-size: 2em;
|
|
19
|
+
margin-block: 0.67em;
|
|
20
|
+
}
|
|
21
|
+
:where(hr) {
|
|
22
|
+
height: 0;
|
|
23
|
+
color: inherit;
|
|
24
|
+
}
|
|
25
|
+
:where(nav) :where(ol, ul) {
|
|
26
|
+
list-style-type: none;
|
|
27
|
+
padding: 0;
|
|
28
|
+
}
|
|
29
|
+
:where(pre) {
|
|
30
|
+
font-family: monospace, monospace;
|
|
31
|
+
font-size: 1em;
|
|
32
|
+
}
|
|
33
|
+
:where(abbr[title]) {
|
|
34
|
+
text-decoration: underline dotted;
|
|
35
|
+
}
|
|
36
|
+
:where(b, strong) {
|
|
37
|
+
font-weight: bolder;
|
|
38
|
+
}
|
|
39
|
+
:where(code, kbd, samp) {
|
|
40
|
+
font-family: monospace, monospace;
|
|
41
|
+
font-size: 1em;
|
|
42
|
+
}
|
|
43
|
+
:where(small) {
|
|
44
|
+
font-size: 80%;
|
|
45
|
+
}
|
|
46
|
+
:where(sub, sup) {
|
|
47
|
+
font-size: 75%;
|
|
48
|
+
line-height: 0;
|
|
49
|
+
position: relative;
|
|
50
|
+
vertical-align: baseline;
|
|
51
|
+
}
|
|
52
|
+
:where(sub) {
|
|
53
|
+
bottom: -0.25em;
|
|
54
|
+
}
|
|
55
|
+
:where(sup) {
|
|
56
|
+
top: -0.5em;
|
|
57
|
+
}
|
|
58
|
+
:where(iframe) {
|
|
59
|
+
border-style: none;
|
|
60
|
+
}
|
|
61
|
+
:where(table) {
|
|
62
|
+
border-collapse: collapse;
|
|
63
|
+
border-color: currentColor;
|
|
64
|
+
text-indent: 0;
|
|
65
|
+
}
|
|
66
|
+
:where(button, input, select, textarea) {
|
|
67
|
+
font: inherit;
|
|
68
|
+
letter-spacing: inherit;
|
|
69
|
+
}
|
|
70
|
+
:where(button, [type=button], [type=reset], [type=submit]) {
|
|
71
|
+
-webkit-appearance: button;
|
|
72
|
+
}
|
|
73
|
+
:where(fieldset) {
|
|
74
|
+
border: 1px solid #a0a0a0;
|
|
75
|
+
}
|
|
76
|
+
:where(progress) {
|
|
77
|
+
vertical-align: baseline;
|
|
78
|
+
}
|
|
79
|
+
:where(textarea) {
|
|
80
|
+
resize: vertical;
|
|
81
|
+
overflow: auto;
|
|
82
|
+
}
|
|
83
|
+
:where([type=search]) {
|
|
84
|
+
-webkit-appearance: textfield;
|
|
85
|
+
outline-offset: -2px;
|
|
86
|
+
}
|
|
87
|
+
:where(::-webkit-search-decoration) {
|
|
88
|
+
-webkit-appearance: none;
|
|
89
|
+
}
|
|
90
|
+
:where(::-webkit-inner-spin-button),
|
|
91
|
+
:where(::-webkit-outer-spin-button) {
|
|
92
|
+
height: auto;
|
|
93
|
+
}
|
|
94
|
+
:where(::-webkit-file-upload-button) {
|
|
95
|
+
-webkit-appearance: button;
|
|
96
|
+
font: inherit;
|
|
97
|
+
}
|
|
98
|
+
:where(summary) {
|
|
99
|
+
display: list-item;
|
|
100
|
+
}
|
|
101
|
+
:where(a, area, button, input, label, select, summary, textarea, [tabindex]) {
|
|
102
|
+
touch-action: manipulation;
|
|
103
|
+
}
|
|
104
|
+
:where([aria-busy=true]) {
|
|
105
|
+
cursor: progress;
|
|
106
|
+
}
|
|
107
|
+
:where([aria-disabled=true], [disabled]) {
|
|
108
|
+
cursor: not-allowed;
|
|
109
|
+
}
|
|
110
|
+
@media (prefers-reduced-motion: reduce) {
|
|
111
|
+
:where(*),
|
|
112
|
+
:where(*::before),
|
|
113
|
+
:where(*::after) {
|
|
114
|
+
animation-duration: 0.01ms !important;
|
|
115
|
+
animation-iteration-count: 1 !important;
|
|
116
|
+
transition-duration: 0.01ms !important;
|
|
117
|
+
scroll-behavior: auto !important;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer nimble.reset{:where(*),:where(),:where(){box-sizing:border-box;background-repeat:no-repeat}:where(html){-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5}:where(body){margin:0}:where(h1){margin-block:.67em;font-size:2em}:where(hr){height:0;color:inherit}:where(nav) :where(ol,ul){padding:0;list-style-type:none}:where(pre){font-family:monospace;font-size:1em}:where(abbr[title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace;font-size:1em}:where(small){font-size:80%}:where(sub,sup){vertical-align:baseline;font-size:75%;line-height:0;position:relative}:where(sub){bottom:-.25em}:where(sup){top:-.5em}:where(iframe){border-style:none}:where(table){border-collapse:collapse;text-indent:0;border-color:currentColor}:where(button,input,select,textarea){font:inherit;letter-spacing:inherit}:where(button,[type=button],[type=reset],[type=submit]){-webkit-appearance:button}:where(fieldset){border:1px solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){resize:vertical;overflow:auto}:where([type=search]){-webkit-appearance:textfield;outline-offset:-2px}:where(){-webkit-appearance:none}:where(),:where(){height:auto}:where(){-webkit-appearance:button;font:inherit}:where(summary){display:list-item}:where(a,area,button,input,label,select,summary,textarea,[tabindex]){touch-action:manipulation}:where([aria-busy=true]){cursor:progress}:where([aria-disabled=true],[disabled]){cursor:not-allowed}@media (prefers-reduced-motion:reduce){:where(*),:where(),:where(){scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
@layer nimble.utilities;
|
|
2
|
+
@layer nimble.utilities {
|
|
3
|
+
.container {
|
|
4
|
+
max-width: var(--nc-content-width);
|
|
5
|
+
margin-inline: auto;
|
|
6
|
+
padding-inline: var(--nc-spacing);
|
|
7
|
+
}
|
|
8
|
+
.fluid {
|
|
9
|
+
display: block;
|
|
10
|
+
max-width: none;
|
|
11
|
+
padding-inline: var(--nc-spacing);
|
|
12
|
+
}
|
|
13
|
+
.full-bleed {
|
|
14
|
+
grid-column: 1/-1;
|
|
15
|
+
}
|
|
16
|
+
.wide {
|
|
17
|
+
grid-column: 1/-1;
|
|
18
|
+
width: 100%;
|
|
19
|
+
max-width: 1200px;
|
|
20
|
+
margin-inline: auto;
|
|
21
|
+
padding-inline: var(--nc-spacing);
|
|
22
|
+
}
|
|
23
|
+
.striped :where(tbody tr:nth-child(even)) {
|
|
24
|
+
background-color: var(--nc-surface-2);
|
|
25
|
+
}
|
|
26
|
+
.visually-hidden {
|
|
27
|
+
position: absolute;
|
|
28
|
+
width: 1px;
|
|
29
|
+
height: 1px;
|
|
30
|
+
padding: 0;
|
|
31
|
+
margin: -1px;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
clip-path: inset(50%);
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
border: 0;
|
|
36
|
+
}
|
|
37
|
+
.overflow-auto {
|
|
38
|
+
overflow: auto;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer nimble.utilities{.container{max-width:var(--nc-content-width);padding-inline:var(--nc-spacing);margin-inline:auto}.fluid{max-width:none;padding-inline:var(--nc-spacing);display:block}.full-bleed{grid-column:1/-1}.wide{width:100%;max-width:1200px;padding-inline:var(--nc-spacing);grid-column:1/-1;margin-inline:auto}.striped :where(tbody tr:nth-child(2n)){background-color:var(--nc-surface-2)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.overflow-auto{overflow:auto}}
|