rizzo-css 0.0.6 → 0.0.8
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 +1 -1
- package/bin/rizzo-css.js +109 -16
- package/dist/rizzo.min.css +1 -1
- package/package.json +1 -1
- package/scaffold/astro-app/package.json +1 -13
- package/scaffold/astro-app/src/layouts/Layout.astro +8 -0
- package/scaffold/astro-app/src/pages/index.astro +23 -8
- package/scaffold/svelte-app/package.json +13 -11
- package/scaffold/svelte-app/src/app.html +8 -1
- package/scaffold/svelte-app/src/routes/+layout.svelte +5 -0
- package/scaffold/svelte-app/src/routes/+page.svelte +27 -8
- package/scaffold/svelte-app/static/robots.txt +3 -0
- package/scaffold/svelte-app/svelte.config.js +6 -4
- package/scaffold/svelte-app/tsconfig.json +19 -13
- package/scaffold/vanilla/index.html +441 -54
- /package/scaffold/svelte-app/{static → src/lib/assets}/favicon.svg +0 -0
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ import 'rizzo-css';
|
|
|
41
41
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/rizzo-css@latest" />
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
Use the same class names and HTML structure as in the [component docs](https://rizzo-css.vercel.app/docs/components). **Vanilla JS**, Astro, and Svelte all use the same CSS and BEM markup; Astro/Svelte add framework component files for convenience.
|
|
44
|
+
Use the same class names and HTML structure as in the [component docs](https://rizzo-css.vercel.app/docs/components). **Vanilla JS**, Astro, and Svelte all use the same CSS and BEM markup; Astro/Svelte add framework component files for convenience. The **Vanilla** scaffold includes a full Settings panel and toast; **Astro** and **Svelte** scaffold layouts include theme persistence and toast (`showToast`, `removeToast`, `removeAllToasts`).
|
|
45
45
|
|
|
46
46
|
## Themes
|
|
47
47
|
|
package/bin/rizzo-css.js
CHANGED
|
@@ -154,13 +154,28 @@ function selectMenu(options, title) {
|
|
|
154
154
|
});
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
/**
|
|
157
|
+
/** Index of first "real" option when using all/none sentinels (0=Select all, 1=Select none, 2+=real). */
|
|
158
|
+
const SENTINEL_ALL = '__all__';
|
|
159
|
+
const SENTINEL_NONE = '__none__';
|
|
160
|
+
|
|
161
|
+
function hasAllNoneSentinels(items) {
|
|
162
|
+
return items.length >= 2 && items[0].value === SENTINEL_ALL && items[1].value === SENTINEL_NONE;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function getRealValues(items) {
|
|
166
|
+
if (hasAllNoneSentinels(items)) return items.slice(2).map((i) => i.value);
|
|
167
|
+
return items.map((i) => i.value);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Multi-select menu: circles ○/●, Space toggles, Enter confirms. Optional first two options: Select all / Select none (value __all__ / __none__). Returns array of selected values. */
|
|
158
171
|
function multiSelectMenu(options, title) {
|
|
159
172
|
const items = options.map((o) => (typeof o === 'string' ? { value: o, label: o } : o));
|
|
160
173
|
const isTty = process.stdin.isTTY && process.stdout.isTTY;
|
|
174
|
+
const withSentinels = hasAllNoneSentinels(items);
|
|
175
|
+
const realValues = getRealValues(items);
|
|
161
176
|
|
|
162
177
|
if (!isTty) {
|
|
163
|
-
console.log('\n' + (title || 'Choose (space to toggle, enter when done') + ':');
|
|
178
|
+
console.log('\n' + (title || 'Choose (space to toggle, enter when done)') + ':');
|
|
164
179
|
items.forEach((item, i) => console.log(' ' + (i + 1) + '. ' + (item.label || item.value)));
|
|
165
180
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
166
181
|
return new Promise((resolve) => {
|
|
@@ -168,7 +183,15 @@ function multiSelectMenu(options, title) {
|
|
|
168
183
|
rl.close();
|
|
169
184
|
const s = (answer || '').trim().toLowerCase();
|
|
170
185
|
if (s === 'all' || s === 'a') {
|
|
171
|
-
resolve(
|
|
186
|
+
resolve(realValues);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (withSentinels && s === '1') {
|
|
190
|
+
resolve(realValues);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (withSentinels && (s === '2' || s === 'none' || s === 'n')) {
|
|
194
|
+
resolve([]);
|
|
172
195
|
return;
|
|
173
196
|
}
|
|
174
197
|
const parts = s.split(/[\s,]+/).filter(Boolean);
|
|
@@ -177,7 +200,19 @@ function multiSelectMenu(options, title) {
|
|
|
177
200
|
const n = parseInt(p, 10);
|
|
178
201
|
if (n >= 1 && n <= items.length) indices.add(n - 1);
|
|
179
202
|
}
|
|
180
|
-
|
|
203
|
+
if (withSentinels && indices.has(0)) {
|
|
204
|
+
resolve(realValues);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (withSentinels && indices.has(1)) {
|
|
208
|
+
resolve([]);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const result = Array.from(indices)
|
|
212
|
+
.sort((a, b) => a - b)
|
|
213
|
+
.filter((i) => !withSentinels || (i !== 0 && i !== 1))
|
|
214
|
+
.map((i) => items[i].value);
|
|
215
|
+
resolve(result);
|
|
181
216
|
});
|
|
182
217
|
});
|
|
183
218
|
}
|
|
@@ -186,11 +221,30 @@ function multiSelectMenu(options, title) {
|
|
|
186
221
|
let index = 0;
|
|
187
222
|
const selected = new Set();
|
|
188
223
|
const lineCount = (title ? 1 : 0) + items.length + 1;
|
|
224
|
+
const realStart = withSentinels ? 2 : 0;
|
|
225
|
+
|
|
226
|
+
const finish = () => {
|
|
227
|
+
if (withSentinels && index === 0) {
|
|
228
|
+
resolve(realValues);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (withSentinels && index === 1) {
|
|
232
|
+
resolve([]);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
resolve(
|
|
236
|
+
Array.from(selected)
|
|
237
|
+
.filter((i) => i >= realStart)
|
|
238
|
+
.sort((a, b) => a - b)
|
|
239
|
+
.map((i) => items[i].value)
|
|
240
|
+
);
|
|
241
|
+
};
|
|
189
242
|
|
|
190
243
|
const render = (first) => {
|
|
191
244
|
const lines = (title ? [title] : []).concat(
|
|
192
245
|
items.map((item, i) => {
|
|
193
|
-
const
|
|
246
|
+
const isAction = withSentinels && (i === 0 || i === 1);
|
|
247
|
+
const circle = isAction ? CIRCLE_EMPTY : selected.has(i) ? CIRCLE_FILLED : CIRCLE_EMPTY;
|
|
194
248
|
const prefix = i === index ? C.cyan + '>' + C.reset + ' ' : ' ';
|
|
195
249
|
return prefix + circle + formatLabel(item);
|
|
196
250
|
})
|
|
@@ -222,13 +276,36 @@ function multiSelectMenu(options, title) {
|
|
|
222
276
|
process.stdin.removeListener('data', onData);
|
|
223
277
|
process.stdin.pause();
|
|
224
278
|
process.stdout.write('\n');
|
|
225
|
-
|
|
279
|
+
if (withSentinels && (index === 0 || index === 1)) {
|
|
280
|
+
if (index === 0) resolve(realValues);
|
|
281
|
+
else resolve([]);
|
|
282
|
+
} else {
|
|
283
|
+
finish();
|
|
284
|
+
}
|
|
226
285
|
return;
|
|
227
286
|
}
|
|
228
287
|
if (ch === ' ') {
|
|
229
288
|
buf = '';
|
|
230
|
-
if (
|
|
231
|
-
|
|
289
|
+
if (withSentinels && index === 0) {
|
|
290
|
+
for (let i = realStart; i < items.length; i++) selected.add(i);
|
|
291
|
+
} else if (withSentinels && index === 1) {
|
|
292
|
+
for (let i = realStart; i < items.length; i++) selected.delete(i);
|
|
293
|
+
} else {
|
|
294
|
+
if (selected.has(index)) selected.delete(index);
|
|
295
|
+
else selected.add(index);
|
|
296
|
+
}
|
|
297
|
+
render(false);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
if (ch === 'a' || ch === 'A') {
|
|
301
|
+
buf = '';
|
|
302
|
+
for (let i = realStart; i < items.length; i++) selected.add(i);
|
|
303
|
+
render(false);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (ch === 'n' || ch === 'N') {
|
|
307
|
+
buf = '';
|
|
308
|
+
for (let i = realStart; i < items.length; i++) selected.delete(i);
|
|
232
309
|
render(false);
|
|
233
310
|
return;
|
|
234
311
|
}
|
|
@@ -521,8 +598,12 @@ async function runAddToExisting() {
|
|
|
521
598
|
const framework = await selectMenu(frameworkOptions, frameworkPrompt);
|
|
522
599
|
|
|
523
600
|
const selectedThemes = await multiSelectMenu(
|
|
524
|
-
|
|
525
|
-
|
|
601
|
+
[
|
|
602
|
+
{ value: SENTINEL_ALL, label: 'Select all themes' },
|
|
603
|
+
{ value: SENTINEL_NONE, label: 'Select no themes' },
|
|
604
|
+
...THEMES.map((t) => ({ value: t, label: t })),
|
|
605
|
+
],
|
|
606
|
+
'? Themes — pick individuals (Space to toggle) or choose Select all/none below. Enter=confirm'
|
|
526
607
|
);
|
|
527
608
|
const themeList = selectedThemes.length > 0 ? selectedThemes : [THEMES[0]];
|
|
528
609
|
const suggestedTheme = THEMES.includes(themeList[0]) ? themeList[0] : THEMES[0];
|
|
@@ -540,8 +621,12 @@ async function runAddToExisting() {
|
|
|
540
621
|
);
|
|
541
622
|
if (includeChoice === 'pick') {
|
|
542
623
|
selectedComponents = await multiSelectMenu(
|
|
543
|
-
|
|
544
|
-
|
|
624
|
+
[
|
|
625
|
+
{ value: SENTINEL_ALL, label: 'Select all components' },
|
|
626
|
+
{ value: SENTINEL_NONE, label: 'Select no components' },
|
|
627
|
+
...componentList.map((c) => ({ value: c, label: c })),
|
|
628
|
+
],
|
|
629
|
+
'? Components — pick individuals (Space to toggle) or choose Select all/none below. Enter=confirm'
|
|
545
630
|
);
|
|
546
631
|
}
|
|
547
632
|
}
|
|
@@ -623,8 +708,12 @@ async function cmdInit() {
|
|
|
623
708
|
);
|
|
624
709
|
|
|
625
710
|
const selectedThemes = await multiSelectMenu(
|
|
626
|
-
|
|
627
|
-
|
|
711
|
+
[
|
|
712
|
+
{ value: SENTINEL_ALL, label: 'Select all themes' },
|
|
713
|
+
{ value: SENTINEL_NONE, label: 'Select no themes' },
|
|
714
|
+
...THEMES.map((t) => ({ value: t, label: t })),
|
|
715
|
+
],
|
|
716
|
+
'? Themes — pick individuals (Space to toggle) or choose Select all/none below. Enter=confirm'
|
|
628
717
|
);
|
|
629
718
|
const themeList = selectedThemes.length > 0 ? selectedThemes : [THEMES[0]];
|
|
630
719
|
const theme = THEMES.includes(themeList[0]) ? themeList[0] : THEMES[0];
|
|
@@ -642,8 +731,12 @@ async function cmdInit() {
|
|
|
642
731
|
);
|
|
643
732
|
if (includeChoice === 'pick') {
|
|
644
733
|
selectedComponents = await multiSelectMenu(
|
|
645
|
-
|
|
646
|
-
|
|
734
|
+
[
|
|
735
|
+
{ value: SENTINEL_ALL, label: 'Select all components' },
|
|
736
|
+
{ value: SENTINEL_NONE, label: 'Select no components' },
|
|
737
|
+
...componentList.map((c) => ({ value: c, label: c })),
|
|
738
|
+
],
|
|
739
|
+
'? Components — pick individuals (Space to toggle) or choose Select all/none below. Enter=confirm'
|
|
647
740
|
);
|
|
648
741
|
}
|
|
649
742
|
}
|
package/dist/rizzo.min.css
CHANGED
|
@@ -133,5 +133,5 @@ div.navbar__link{background:none;border:none;cursor:pointer;font:inherit;text-al
|
|
|
133
133
|
.accordion__panel-content :global(ol:first-child),.accordion__panel-content :global(p:first-child),
|
|
134
134
|
.accordion__panel-content :global(ul:first-child){margin-top:0}
|
|
135
135
|
.accordion__panel-content :global(ol:last-child),.accordion__panel-content :global(p:last-child),
|
|
136
|
-
.accordion__panel-content :global(ul:last-child){margin-bottom:0}.accordion__slot-content{display:none}.tabs{width:100%}.tabs__list{border-bottom:var(--outline-width) solid var(--border);display:flex;gap:var(--spacing-1);margin-bottom:var(--spacing-6);overflow-x:auto;scrollbar-width:thin;-webkit-overflow-scrolling:touch}.tabs__list::-webkit-scrollbar{height:var(--spacing-0-125)}.tabs__list::-webkit-scrollbar-track{background:var(--background-alt)}.tabs__list::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius)}.tabs__tab{align-items:center;background:transparent;border:none;border-bottom:calc(var(--outline-width)*2) solid transparent;border-radius:var(--radius-md) var(--radius-md) 0 0;color:var(--text-dim);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);justify-content:center;margin-bottom:calc(var(--outline-width)*-1*2);min-height:var(--touch-target-min);outline:none;padding:var(--spacing-3) var(--spacing-5);position:relative;transition:color var(--transition-base),border-color var(--transition-base),background-color var(--transition-base);white-space:nowrap}.tabs__tab:hover:not(.tabs__tab--active){background-color:var(--background-alt);color:var(--text)}.tabs__tab:focus-visible{border-radius:var(--radius-md) var(--radius-md) 0 0;outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.tabs__tab--active{border-bottom-color:var(--accent);border-bottom-width:calc(var(--outline-width)*3);font-weight:var(--font-weight-semibold)}.tabs__tab--active,.tabs__tab--active:hover{background-color:var(--background-alt);color:var(--accent)}.tabs__tab--active:hover{border-bottom-color:var(--accent)}.tabs__panels-wrapper{width:100%}.tabs__panel{display:none;min-height:var(--spacing-20);padding:var(--spacing-6) 0;width:100%}.tabs__panel--active{animation:fadeIn var(--transition-base);display:block}.tabs__panel-content{width:100%}@keyframes fade-in{from{opacity:0;transform:translateY(var(--spacing-1))}to{opacity:1;transform:translateY(0)}}.tabs__slot-content{display:none}.tabs--pills .tabs__list{border-bottom:none;gap:var(--spacing-2)}.tabs--pills .tabs__tab{border-bottom:none;border-radius:var(--radius-md);margin-bottom:0}.tabs--pills .tabs__tab--active{background-color:var(--accent);border-bottom-color:transparent;color:var(--accent-text)}.tabs--pills .tabs__tab--active:hover{background-color:var(--accent-hover);color:var(--accent-text)}.tabs--underline .tabs__list{border-bottom:var(--outline-width) solid var(--border)}.tabs--underline .tabs__tab{border-bottom:var(--outline-width) solid transparent;padding-bottom:var(--spacing-3)}.tabs--underline .tabs__tab--active{border-bottom-color:var(--accent);border-bottom-width:calc(var(--outline-width)*2)}@media (width <= 640px){.tabs__list{gap:var(--spacing-1)}.tabs__tab{font-size:var(--font-size-sm);padding:var(--spacing-2) var(--spacing-3)}.tabs__panel{padding:var(--spacing-3) 0}}@media (prefers-reduced-motion:reduce){.tabs__tab{transition:none}.tabs__panel--active{animation:none}}.progress{display:flex;flex-direction:column;gap:var(--spacing-2);width:100%}.progress__track{background-color:var(--background-alt);border:var(--border-width) solid var(--border);overflow:hidden;width:100%}.progress__bar,.progress__track{border-radius:var(--radius-full)}.progress__bar{flex-shrink:0;height:100%;min-height:var(--spacing-2);transition:width var(--transition-slow) var(--ease-in-out-cubic)}.progress--sm .progress__track{height:var(--spacing-1)}.progress--sm .progress__bar{min-height:var(--spacing-1)}.progress--md .progress__track{height:var(--spacing-2)}.progress--md .progress__bar{min-height:var(--spacing-2)}.progress--lg .progress__track{height:var(--spacing-3)}.progress--lg .progress__bar{min-height:var(--spacing-3)}.progress--primary .progress__bar{background-color:var(--accent)}.progress--success .progress__bar{background-color:var(--success)}.progress--warning .progress__bar{background-color:var(--warning)}.progress--error .progress__bar{background-color:var(--error)}.progress--info .progress__bar{background-color:var(--info)}.progress__label{color:var(--text-dim);font-size:var(--font-size-sm);text-align:right}.progress--indeterminate .progress__bar{animation:progress-indeterminate 1.5s ease-in-out infinite;min-width:30%;width:30%!important}@keyframes progress-indeterminate{0%{transform:translateX(-100%)}100%{transform:translateX(233.333%)}}@media (prefers-reduced-motion:reduce){.progress__bar{transition:none}.progress--indeterminate .progress__bar{animation:none;opacity:.7;width:50%!important}}.spinner{align-items:center;display:inline-flex;justify-content:center;vertical-align:middle}.spinner__ring{animation:spinner-rotate .8s linear infinite;border-color:var(--border);border-radius:var(--radius-full);border-style:solid;border-top-color:currentcolor;display:block}.spinner--sm .spinner__ring{border-width:var(--border-width-2);height:var(--spacing-4);width:var(--spacing-4)}.spinner--md .spinner__ring{border-width:var(--border-width-3);height:var(--spacing-6);width:var(--spacing-6)}.spinner--lg .spinner__ring{border-width:var(--border-width-4);height:var(--spacing-8);width:var(--spacing-8)}.spinner--primary{color:var(--accent)}.spinner--success{color:var(--success)}.spinner--warning{color:var(--warning)}.spinner--error{color:var(--error)}.spinner--info{color:var(--info)}@keyframes spinner-rotate{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.spinner__ring{animation:none;border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent}}.avatar{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);color:var(--text-dim);display:inline-flex;flex-shrink:0;font-size:inherit;font-weight:var(--font-weight-semibold);justify-content:center;line-height:1;overflow:hidden}.avatar__img{display:block;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.avatar__initials{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.avatar--sm{font-size:var(--font-size-xs);height:var(--spacing-8);width:var(--spacing-8)}.avatar--md{font-size:var(--font-size-sm);height:var(--spacing-10);width:var(--spacing-10)}.avatar--lg{font-size:var(--font-size-base);height:var(--spacing-12);width:var(--spacing-12)}.avatar--circle{border-radius:var(--radius-full)}.avatar--square{border-radius:var(--radius-md)}.divider{align-items:center;color:var(--text-dim);display:flex;font-size:var(--font-size-sm);gap:var(--spacing-3)}.divider__line{border:none;border-left:none;border-top:var(--border-width) solid var(--border);flex:1;min-height:0;min-width:0}.divider__label{flex-shrink:0;padding:0 var(--spacing-2);white-space:nowrap}.divider--horizontal{width:100%}.divider--horizontal .divider__line{border-left:none;border-top:var(--border-width) solid var(--border)}.divider--vertical{flex-direction:column;height:100%;min-height:var(--spacing-8);width:auto}.divider--vertical .divider__line{border-left:var(--border-width) solid var(--border);border-top:none;flex:1;min-height:var(--spacing-4);width:0}.table{display:flex;flex-direction:column;gap:var(--spacing-3);width:100%}.table__filter-wrap{align-items:center;display:flex;flex-shrink:0;position:relative}.table__filter-icon{align-items:center;color:var(--icon-dim);display:flex;justify-content:center;left:var(--spacing-3);pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.table__filter-icon-svg{color:currentcolor;height:var(--table-filter-icon-size,1.25rem);width:var(--table-filter-icon-size,1.25rem)}.table__filter-wrap:focus-within .table__filter-icon{color:var(--accent)}.table__filter-wrap .table__filter{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);font-family:var(--font-family);font-size:var(--font-size-base);max-width:var(--spacing-80);padding-bottom:var(--spacing-2);padding-left:3.5rem;padding-right:var(--spacing-3);padding-top:var(--spacing-2);width:100%}.table__filter-wrap .table__filter::-moz-placeholder{color:var(--text-dim)}.table__filter-wrap .table__filter::placeholder{color:var(--text-dim)}.table__filter-wrap .table__filter:focus{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.table__wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch}.table__table{border-collapse:collapse;border-spacing:0;font-size:var(--font-size-sm);width:100%}.table__caption{color:var(--text);font-weight:var(--font-weight-semibold);padding:var(--spacing-2) 0;text-align:left}.table__head .table__row{border-bottom:var(--border-width-2) solid var(--border)}.table__cell{border-bottom:var(--border-width) solid var(--border);color:var(--text);padding:var(--spacing-3) var(--spacing-4);text-align:left}.table__cell--head{color:var(--text);font-weight:var(--font-weight-semibold);white-space:nowrap}.table__sort-trigger{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:inline-flex;font:inherit;font-weight:var(--font-weight-semibold);padding:0;text-align:left;transition:background-color var(--transition-fast),color var(--transition-fast);width:100%}.table__sort-trigger:hover{background-color:var(--background-alt);color:var(--text)}.table__sort-trigger:hover .table__sort-icon-svg{color:var(--accent)}.table__sort-trigger:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.table--sortable .table__cell--head{padding:0}.table--sortable .table__cell--head .table__sort-trigger{padding:var(--spacing-3) var(--spacing-4)}.table__cell-content{display:inline-block}.table__sort-icon{align-items:center;display:inline-flex;flex-shrink:0;justify-content:center;margin-left:var(--spacing-2)}.table__sort-icon-svg{color:var(--icon-dim);height:var(--table-sort-icon-size,1.25rem);transition:color var(--transition-fast);width:var(--table-sort-icon-size,1.25rem)}.table__body .table__row:hover{background-color:var(--background-alt)}.table__body .table__row:hover .table__cell{color:var(--text)}.table--striped .table__body .table__row:nth-child(even){background-color:var(--background-alt)}.table--striped .table__body .table__row:nth-child(even):hover{background-color:var(--background)}.table--striped .table__body .table__row:nth-child(even):hover .table__cell{color:var(--text)}.table__body .table__row[hidden]{display:none}@media (prefers-reduced-motion:reduce){.table__sort-icon-svg,.table__sort-trigger{transition:none}}.home{padding:var(--spacing-8) var(--spacing-4)}.home__container{margin:0 auto;max-width:var(--container-default);padding:0 var(--spacing-4)}.home__hero{margin-bottom:var(--spacing-16);padding:var(--spacing-16) 0;text-align:center}.home__title{color:var(--text);font-size:var(--font-size-5xl);font-weight:var(--font-weight-extrabold);line-height:var(--line-height-tight);margin:0 0 var(--spacing-6) 0}.home__subtitle{color:var(--text-dim);font-size:var(--font-size-xl);line-height:var(--line-height-relaxed);margin:0 auto;max-width:var(--spacing-175)}.home__section-title{color:var(--text);font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);margin-bottom:var(--spacing-8);text-align:center}.home__grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(var(--spacing-75),1fr));margin-bottom:var(--spacing-16)}.home__card{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);color:var(--text);padding:var(--spacing-6)}.home__card h3{color:var(--text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-3) 0}.home__card p{color:var(--text-dim);line-height:var(--line-height-relaxed);margin:0}.home__examples{margin-bottom:var(--spacing-16)}.home__example{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);margin-bottom:var(--spacing-8);padding:var(--spacing-8)}.home__example h3{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-4) 0}.home__example p{color:var(--text-dim);margin-bottom:var(--spacing-4)}.home__button-group{display:flex;flex-wrap:wrap;gap:var(--spacing-3)}.home__theme-demo{max-width:var(--spacing-75)}.home__theme-demo .theme-switcher{position:relative;width:100%;z-index:var(--z-dropdown)}.home__theme-demo .theme-switcher__menu{z-index:var(--z-dropdown)}.home__docs{margin-bottom:var(--spacing-8)}.home__docs-grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(var(--spacing-70),1fr))}.home__doc-card{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);color:var(--text);display:block;padding:var(--spacing-6);text-decoration:none;transition:border-color var(--transition-base),transform var(--transition-base),box-shadow var(--transition-base)}.home__doc-card:hover{border-color:var(--accent);box-shadow:var(--shadow-md);transform:translateY(calc(var(--spacing-0-125)*-1))}.home__doc-card:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.home__doc-card h3{color:var(--accent);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-2) 0}.home__doc-card p{color:var(--text-dim);line-height:var(--line-height-relaxed);margin:0}@media (width <= 640px){.home__title{font-size:var(--font-size-4xl)}.home__subtitle{font-size:var(--font-size-lg)}
|
|
136
|
+
.accordion__panel-content :global(ul:last-child){margin-bottom:0}.accordion__slot-content{display:none}.tabs{width:100%}.tabs__list{border-bottom:var(--outline-width) solid var(--border);display:flex;gap:var(--spacing-1);margin-bottom:var(--spacing-6);overflow-x:auto;scrollbar-width:thin;-webkit-overflow-scrolling:touch}.tabs__list::-webkit-scrollbar{height:var(--spacing-0-125)}.tabs__list::-webkit-scrollbar-track{background:var(--background-alt)}.tabs__list::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius)}.tabs__tab{align-items:center;background:transparent;border:none;border-bottom:calc(var(--outline-width)*2) solid transparent;border-radius:var(--radius-md) var(--radius-md) 0 0;color:var(--text-dim);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);justify-content:center;margin-bottom:calc(var(--outline-width)*-1*2);min-height:var(--touch-target-min);outline:none;padding:var(--spacing-3) var(--spacing-5);position:relative;transition:color var(--transition-base),border-color var(--transition-base),background-color var(--transition-base);white-space:nowrap}.tabs__tab:hover:not(.tabs__tab--active){background-color:var(--background-alt);color:var(--text)}.tabs__tab:focus-visible{border-radius:var(--radius-md) var(--radius-md) 0 0;outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.tabs__tab--active{border-bottom-color:var(--accent);border-bottom-width:calc(var(--outline-width)*3);font-weight:var(--font-weight-semibold)}.tabs__tab--active,.tabs__tab--active:hover{background-color:var(--background-alt);color:var(--accent)}.tabs__tab--active:hover{border-bottom-color:var(--accent)}.tabs__panels-wrapper{width:100%}.tabs__panel{display:none;min-height:var(--spacing-20);padding:var(--spacing-6) 0;width:100%}.tabs__panel--active{animation:fadeIn var(--transition-base);display:block}.tabs__panel-content{width:100%}@keyframes fade-in{from{opacity:0;transform:translateY(var(--spacing-1))}to{opacity:1;transform:translateY(0)}}.tabs__slot-content{display:none}.tabs--pills .tabs__list{border-bottom:none;gap:var(--spacing-2)}.tabs--pills .tabs__tab{border-bottom:none;border-radius:var(--radius-md);margin-bottom:0}.tabs--pills .tabs__tab--active{background-color:var(--accent);border-bottom-color:transparent;color:var(--accent-text)}.tabs--pills .tabs__tab--active:hover{background-color:var(--accent-hover);color:var(--accent-text)}.tabs--underline .tabs__list{border-bottom:var(--outline-width) solid var(--border)}.tabs--underline .tabs__tab{border-bottom:var(--outline-width) solid transparent;padding-bottom:var(--spacing-3)}.tabs--underline .tabs__tab--active{border-bottom-color:var(--accent);border-bottom-width:calc(var(--outline-width)*2)}@media (width <= 640px){.tabs__list{gap:var(--spacing-1)}.tabs__tab{font-size:var(--font-size-sm);padding:var(--spacing-2) var(--spacing-3)}.tabs__panel{padding:var(--spacing-3) 0}}@media (prefers-reduced-motion:reduce){.tabs__tab{transition:none}.tabs__panel--active{animation:none}}.progress{display:flex;flex-direction:column;gap:var(--spacing-2);width:100%}.progress__track{background-color:var(--background-alt);border:var(--border-width) solid var(--border);overflow:hidden;width:100%}.progress__bar,.progress__track{border-radius:var(--radius-full)}.progress__bar{flex-shrink:0;height:100%;min-height:var(--spacing-2);transition:width var(--transition-slow) var(--ease-in-out-cubic)}.progress--sm .progress__track{height:var(--spacing-1)}.progress--sm .progress__bar{min-height:var(--spacing-1)}.progress--md .progress__track{height:var(--spacing-2)}.progress--md .progress__bar{min-height:var(--spacing-2)}.progress--lg .progress__track{height:var(--spacing-3)}.progress--lg .progress__bar{min-height:var(--spacing-3)}.progress--primary .progress__bar{background-color:var(--accent)}.progress--success .progress__bar{background-color:var(--success)}.progress--warning .progress__bar{background-color:var(--warning)}.progress--error .progress__bar{background-color:var(--error)}.progress--info .progress__bar{background-color:var(--info)}.progress__label{color:var(--text-dim);font-size:var(--font-size-sm);text-align:right}.progress--indeterminate .progress__bar{animation:progress-indeterminate 1.5s ease-in-out infinite;min-width:30%;width:30%!important}@keyframes progress-indeterminate{0%{transform:translateX(-100%)}100%{transform:translateX(233.333%)}}@media (prefers-reduced-motion:reduce){.progress__bar{transition:none}.progress--indeterminate .progress__bar{animation:none;opacity:.7;width:50%!important}}.spinner{align-items:center;display:inline-flex;justify-content:center;vertical-align:middle}.spinner__ring{animation:spinner-rotate .8s linear infinite;border-color:var(--border);border-radius:var(--radius-full);border-style:solid;border-top-color:currentcolor;display:block}.spinner--sm .spinner__ring{border-width:var(--border-width-2);height:var(--spacing-4);width:var(--spacing-4)}.spinner--md .spinner__ring{border-width:var(--border-width-3);height:var(--spacing-6);width:var(--spacing-6)}.spinner--lg .spinner__ring{border-width:var(--border-width-4);height:var(--spacing-8);width:var(--spacing-8)}.spinner--primary{color:var(--accent)}.spinner--success{color:var(--success)}.spinner--warning{color:var(--warning)}.spinner--error{color:var(--error)}.spinner--info{color:var(--info)}@keyframes spinner-rotate{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.spinner__ring{animation:none;border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent}}.avatar{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);color:var(--text-dim);display:inline-flex;flex-shrink:0;font-size:inherit;font-weight:var(--font-weight-semibold);justify-content:center;line-height:1;overflow:hidden}.avatar__img{display:block;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.avatar__initials{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.avatar--sm{font-size:var(--font-size-xs);height:var(--spacing-8);width:var(--spacing-8)}.avatar--md{font-size:var(--font-size-sm);height:var(--spacing-10);width:var(--spacing-10)}.avatar--lg{font-size:var(--font-size-base);height:var(--spacing-12);width:var(--spacing-12)}.avatar--circle{border-radius:var(--radius-full)}.avatar--square{border-radius:var(--radius-md)}.divider{align-items:center;color:var(--text-dim);display:flex;font-size:var(--font-size-sm);gap:var(--spacing-3)}.divider__line{border:none;border-left:none;border-top:var(--border-width) solid var(--border);flex:1;min-height:0;min-width:0}.divider__label{flex-shrink:0;padding:0 var(--spacing-2);white-space:nowrap}.divider--horizontal{width:100%}.divider--horizontal .divider__line{border-left:none;border-top:var(--border-width) solid var(--border)}.divider--vertical{flex-direction:column;height:100%;min-height:var(--spacing-8);width:auto}.divider--vertical .divider__line{border-left:var(--border-width) solid var(--border);border-top:none;flex:1;min-height:var(--spacing-4);width:0}.table{display:flex;flex-direction:column;gap:var(--spacing-3);width:100%}.table__filter-wrap{align-items:center;display:flex;flex-shrink:0;position:relative}.table__filter-icon{align-items:center;color:var(--icon-dim);display:flex;justify-content:center;left:var(--spacing-3);pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.table__filter-icon-svg{color:currentcolor;height:var(--table-filter-icon-size,1.25rem);width:var(--table-filter-icon-size,1.25rem)}.table__filter-wrap:focus-within .table__filter-icon{color:var(--accent)}.table__filter-wrap .table__filter{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);font-family:var(--font-family);font-size:var(--font-size-base);max-width:var(--spacing-80);padding-bottom:var(--spacing-2);padding-left:3.5rem;padding-right:var(--spacing-3);padding-top:var(--spacing-2);width:100%}.table__filter-wrap .table__filter::-moz-placeholder{color:var(--text-dim)}.table__filter-wrap .table__filter::placeholder{color:var(--text-dim)}.table__filter-wrap .table__filter:focus{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.table__wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch}.table__table{border-collapse:collapse;border-spacing:0;font-size:var(--font-size-sm);width:100%}.table__caption{color:var(--text);font-weight:var(--font-weight-semibold);padding:var(--spacing-2) 0;text-align:left}.table__head .table__row{border-bottom:var(--border-width-2) solid var(--border)}.table__cell{border-bottom:var(--border-width) solid var(--border);color:var(--text);padding:var(--spacing-3) var(--spacing-4);text-align:left}.table__cell--head{color:var(--text);font-weight:var(--font-weight-semibold);white-space:nowrap}.table__sort-trigger{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:inline-flex;font:inherit;font-weight:var(--font-weight-semibold);padding:0;text-align:left;transition:background-color var(--transition-fast),color var(--transition-fast);width:100%}.table__sort-trigger:hover{background-color:var(--background-alt);color:var(--text)}.table__sort-trigger:hover .table__sort-icon-svg{color:var(--accent)}.table__sort-trigger:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.table--sortable .table__cell--head{padding:0}.table--sortable .table__cell--head .table__sort-trigger{padding:var(--spacing-3) var(--spacing-4)}.table__cell-content{display:inline-block}.table__sort-icon{align-items:center;display:inline-flex;flex-shrink:0;justify-content:center;margin-left:var(--spacing-2)}.table__sort-icon-svg{color:var(--icon-dim);height:var(--table-sort-icon-size,1.25rem);transition:color var(--transition-fast);width:var(--table-sort-icon-size,1.25rem)}.table__body .table__row:hover{background-color:var(--background-alt)}.table__body .table__row:hover .table__cell{color:var(--text)}.table--striped .table__body .table__row:nth-child(even){background-color:var(--background-alt)}.table--striped .table__body .table__row:nth-child(even):hover{background-color:var(--background)}.table--striped .table__body .table__row:nth-child(even):hover .table__cell{color:var(--text)}.table__body .table__row[hidden]{display:none}@media (prefers-reduced-motion:reduce){.table__sort-icon-svg,.table__sort-trigger{transition:none}}.home{padding:var(--spacing-8) var(--spacing-4)}.home__container{margin:0 auto;max-width:var(--container-default);padding:0 var(--spacing-4)}.home__hero{margin-bottom:var(--spacing-16);padding:var(--spacing-16) 0;text-align:center}.home__title{color:var(--text);font-size:var(--font-size-5xl);font-weight:var(--font-weight-extrabold);line-height:var(--line-height-tight);margin:0 0 var(--spacing-6) 0}.home__subtitle{color:var(--text-dim);font-size:var(--font-size-xl);line-height:var(--line-height-relaxed);margin:0 auto;max-width:var(--spacing-175)}.home__section-title{color:var(--text);font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);margin-bottom:var(--spacing-8);text-align:center}.home__install{margin-bottom:var(--spacing-16)}.home__install-grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--spacing-100)),1fr));margin:0 auto;max-width:var(--spacing-175)}.home__install-block{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);padding:var(--spacing-5)}.home__install-label{color:var(--text-dim);font-size:var(--font-size-sm);margin:0 0 var(--spacing-3) 0}.home__install-copy{display:block;max-width:100%;width:100%}.home__install-copy .copy-to-clipboard__text{white-space:normal;word-break:break-all}.home__grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(var(--spacing-75),1fr));margin-bottom:var(--spacing-16)}.home__card{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);color:var(--text);padding:var(--spacing-6)}.home__card h3{color:var(--text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-3) 0}.home__card p{color:var(--text-dim);line-height:var(--line-height-relaxed);margin:0}.home__examples{margin-bottom:var(--spacing-16)}.home__example{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);margin-bottom:var(--spacing-8);padding:var(--spacing-8)}.home__example h3{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-4) 0}.home__example p{color:var(--text-dim);margin-bottom:var(--spacing-4)}.home__button-group{display:flex;flex-wrap:wrap;gap:var(--spacing-3)}.home__theme-demo{max-width:var(--spacing-75)}.home__theme-demo .theme-switcher{position:relative;width:100%;z-index:var(--z-dropdown)}.home__theme-demo .theme-switcher__menu{z-index:var(--z-dropdown)}.home__docs{margin-bottom:var(--spacing-8)}.home__docs-grid{display:grid;gap:var(--spacing-6);grid-template-columns:repeat(auto-fit,minmax(var(--spacing-70),1fr))}.home__doc-card{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);color:var(--text);display:block;padding:var(--spacing-6);text-decoration:none;transition:border-color var(--transition-base),transform var(--transition-base),box-shadow var(--transition-base)}.home__doc-card:hover{border-color:var(--accent);box-shadow:var(--shadow-md);transform:translateY(calc(var(--spacing-0-125)*-1))}.home__doc-card:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.home__doc-card h3{color:var(--accent);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-2) 0}.home__doc-card p{color:var(--text-dim);line-height:var(--line-height-relaxed);margin:0}@media (width <= 640px){.home__title{font-size:var(--font-size-4xl)}.home__subtitle{font-size:var(--font-size-lg)}
|
|
137
137
|
.home__docs-grid,.home__grid{grid-template-columns:1fr}}.theming-page .card a{color:var(--text);text-decoration:none;transition:color var(--transition-base)}.theming-page .card a:hover{color:var(--accent)}.theming-page .card:hover{transform:translateY(calc(var(--spacing-0-125)*-1));transition:transform var(--transition-base)}.reduced-motion .theming-page .card:hover{transform:none}.theme-by{color:var(--text-dim);font-size:var(--font-size-sm);margin:0 0 var(--spacing-4) 0}.theme-by a{color:var(--accent);text-decoration:none;transition:color var(--transition-base)}.theme-by a:hover{color:var(--accent-hover);text-decoration:underline}[data-theme="github-dark-classic"]{--bg:oklch(18% 0.012 264deg);--bg-alt:oklch(15% 0.01 264deg);--current-line:oklch(20% 0.012 264deg);--selection:oklch(28% 0.08 255deg);--fg:oklch(91% 0.004 264deg);--fg-dim:oklch(66% 0.01 264deg);--comment:oklch(52% 0.015 264deg);--cyan:oklch(72% 0.12 250deg);--green:oklch(72% 0.19 145deg);--orange:oklch(78% 0.12 55deg);--pink:oklch(68% 0.14 15deg);--purple:oklch(68% 0.14 300deg);--red:oklch(68% 0.16 15deg);--yellow:oklch(88% 0.12 95deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--icon:var(--fg);--icon-dim:oklch(75% 0.01 264deg);--border:oklch(13% 0.01 264deg);--accent:var(--cyan);--accent-hover:oklch(78% 0.12 250deg);--accent-text:oklch(100% 0 0deg);--accent-text-on-hover:oklch(22% 0.03 250deg);--success:var(--green);--success-hover:oklch(78% 0.16 145deg);--success-text:oklch(100% 0 0deg);--success-text-on-solid:oklch(22% 0.03 145deg);--warning:var(--orange);--warning-hover:oklch(85% 0.1 55deg);--warning-text:oklch(100% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 55deg);--error:var(--red);--error-hover:oklch(75% 0.14 15deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 25deg);--info:var(--cyan);--info-hover:oklch(78% 0.1 250deg);--info-text:oklch(100% 0 0deg);--info-text-on-solid:oklch(22% 0.03 250deg)}[data-theme="shades-of-purple"]{--bg:oklch(18% 0.08 290deg);--bg-alt:oklch(15% 0.08 290deg);--current-line:oklch(25% 0.10 290deg);--selection:oklch(30% 0.12 290deg);--fg:oklch(95% 0.01 300deg);--fg-dim:oklch(75% 0.05 300deg);--comment:oklch(55.% 0.08 280deg);--cyan:oklch(75% 0.15 220deg);--green:oklch(70% 0.20 150deg);--orange:oklch(75% 0.18 60deg);--pink:oklch(75% 0.22 340deg);--purple:oklch(65% 0.25 290deg);--red:oklch(65% 0.22 25deg);--yellow:oklch(85% 0.18 100deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--icon:var(--fg);--icon-dim:oklch(80% 0.05 300deg);--border:var(--current-line);--accent:var(--purple);--accent-hover:var(--pink);--accent-text:oklch(100% 0 0deg);--accent-text-on-hover:oklch(22% 0.03 300deg);--success:var(--green);--success-hover:oklch(78% 0.16 145deg);--success-text:oklch(100% 0 0deg);--success-text-on-solid:oklch(22% 0.03 145deg);--warning:var(--yellow);--warning-hover:oklch(92% 0.1 95deg);--warning-text:oklch(100% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 95deg);--error:var(--red);--error-hover:oklch(75% 0.14 15deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 15deg);--info:var(--cyan);--info-hover:oklch(78% 0.1 250deg);--info-text:oklch(100% 0 0deg);--info-text-on-solid:oklch(22% 0.03 250deg)}[data-theme="sandstorm-classic"]{--bg:oklch(16% 0.025 25deg);--bg-alt:oklch(13% 0.02 25deg);--current-line:oklch(20% 0.025 25deg);--selection:oklch(28% 0.06 25deg);--fg:oklch(90% 0.01 25deg);--fg-dim:oklch(62% 0.02 25deg);--comment:oklch(52% 0.03 25deg);--cyan:oklch(68% 0.12 220deg);--green:oklch(68% 0.18 145deg);--orange:oklch(72% 0.14 55deg);--pink:oklch(65% 0.16 350deg);--purple:oklch(62% 0.14 300deg);--red:oklch(58% 0.18 25deg);--yellow:oklch(82% 0.12 95deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--icon:var(--fg);--icon-dim:oklch(72% 0.02 25deg);--border:oklch(22% 0.02 25deg);--accent:var(--red);--accent-hover:oklch(62% 0.16 25deg);--accent-text:oklch(100% 0 0deg);--accent-text-on-hover:oklch(22% 0.03 25deg);--success:var(--green);--success-hover:oklch(74% 0.16 145deg);--success-text:oklch(100% 0 0deg);--success-text-on-solid:oklch(22% 0.03 145deg);--warning:var(--orange);--warning-hover:oklch(78% 0.12 55deg);--warning-text:oklch(98% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 55deg);--error:var(--red);--error-hover:oklch(65% 0.16 25deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 25deg);--info:var(--cyan);--info-hover:oklch(74% 0.1 220deg);--info-text:oklch(100% 0 0deg);--info-text-on-solid:oklch(22% 0.03 220deg)}[data-theme="rocky-blood-orange"]{--bg:oklch(16% 0.03 45deg);--bg-alt:oklch(13% 0.025 45deg);--current-line:oklch(20% 0.03 45deg);--selection:oklch(28% 0.06 45deg);--fg:oklch(90% 0.01 45deg);--fg-dim:oklch(60% 0.02 45deg);--comment:oklch(52% 0.03 45deg);--cyan:oklch(68% 0.12 220deg);--green:oklch(68% 0.18 145deg);--orange:oklch(62% 0.16 55deg);--pink:oklch(65% 0.16 350deg);--purple:oklch(62% 0.14 300deg);--red:oklch(58% 0.18 25deg);--yellow:oklch(82% 0.12 95deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--icon:var(--fg);--icon-dim:oklch(72% 0.02 45deg);--border:oklch(22% 0.02 45deg);--accent:var(--orange);--accent-hover:oklch(68% 0.14 55deg);--accent-text:oklch(100% 0 0deg);--accent-text-on-hover:oklch(22% 0.03 55deg);--success:var(--green);--success-hover:oklch(74% 0.16 145deg);--success-text:oklch(100% 0 0deg);--success-text-on-solid:oklch(22% 0.03 145deg);--warning:var(--orange);--warning-hover:oklch(72% 0.14 55deg);--warning-text:oklch(98% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 55deg);--error:var(--red);--error-hover:oklch(65% 0.16 25deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 25deg);--info:var(--cyan);--info-hover:oklch(74% 0.1 220deg);--info-text:oklch(100% 0 0deg);--info-text-on-solid:oklch(22% 0.03 220deg)}[data-theme="minimal-dark-neon-yellow"]{--bg:oklch(14% 0.01 95deg);--bg-alt:oklch(11% 0.008 95deg);--current-line:oklch(18% 0.015 95deg);--selection:oklch(25% 0.08 95deg);--fg:oklch(92% 0.02 95deg);--fg-dim:oklch(65% 0.02 95deg);--comment:oklch(50% 0.02 95deg);--icon:var(--fg);--icon-dim:oklch(72% 0.02 95deg);--cyan:oklch(72% 0.12 220deg);--green:oklch(72% 0.18 145deg);--orange:oklch(78% 0.14 55deg);--pink:oklch(68% 0.16 350deg);--purple:oklch(65% 0.14 300deg);--red:oklch(62% 0.18 25deg);--yellow:oklch(88% 0.18 95deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(20% 0.02 95deg);--accent:var(--yellow);--accent-hover:oklch(90% 0.16 95deg);--accent-text:oklch(12% 0.02 95deg);--accent-text-on-hover:oklch(22% 0.03 95deg);--success:var(--green);--success-hover:oklch(78% 0.16 145deg);--success-text:oklch(100% 0 0deg);--success-text-on-solid:oklch(22% 0.03 145deg);--warning:var(--orange);--warning-hover:oklch(85% 0.12 55deg);--warning-text:oklch(98% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 55deg);--error:var(--red);--error-hover:oklch(68% 0.16 25deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 25deg);--info:var(--cyan);--info-hover:oklch(78% 0.1 220deg);--info-text:oklch(100% 0 0deg);--info-text-on-solid:oklch(22% 0.03 220deg)}[data-theme="hack-the-box"]{--bg:oklch(16% 0.03 255deg);--bg-alt:oklch(13% 0.025 255deg);--current-line:oklch(20% 0.03 255deg);--selection:oklch(55% 0.08 255deg);--fg:oklch(82% 0.03 255deg);--fg-dim:oklch(62% 0.04 255deg);--comment:oklch(55% 0.03 255deg);--icon:var(--fg);--icon-dim:oklch(70% 0.04 255deg);--cyan:oklch(78% 0.12 175deg);--green:oklch(88% 0.22 130deg);--orange:oklch(78% 0.14 75deg);--pink:oklch(65% 0.18 340deg);--purple:oklch(65% 0.22 300deg);--red:oklch(65% 0.22 25deg);--yellow:oklch(82% 0.16 95deg);--background:var(--bg);--background-alt:oklch(14% 0.028 255deg);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(20% 0.03 255deg);--accent:var(--green);--accent-hover:oklch(85% 0.2 125deg);--accent-text:oklch(12% 0.02 255deg);--accent-text-on-hover:oklch(22% 0.03 130deg);--success:var(--green);--success-hover:oklch(90% 0.18 130deg);--success-text:oklch(98% 0 0deg);--success-text-on-solid:oklch(22% 0.03 130deg);--warning:var(--yellow);--warning-hover:oklch(92% 0.14 95deg);--warning-text:oklch(98% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 95deg);--error:var(--red);--error-hover:oklch(72% 0.18 25deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 25deg);--info:oklch(68% 0.14 240deg);--info-hover:oklch(75% 0.12 240deg);--info-text:oklch(100% 0 0deg);--info-text-on-solid:oklch(22% 0.03 240deg)}[data-theme="pink-cat-boo"]{--bg:oklch(18% 0.03 280deg);--bg-alt:oklch(22% 0.04 280deg);--current-line:oklch(28% 0.06 320deg);--selection:oklch(28% 0.06 320deg);--fg:oklch(98% 0.01 350deg);--fg-dim:oklch(65% 0.04 280deg);--comment:oklch(55% 0.03 160deg);--cyan:oklch(72% 0.1 220deg);--green:oklch(72% 0.14 165deg);--orange:oklch(72% 0.14 75deg);--pink:oklch(78% 0.12 350deg);--purple:oklch(72% 0.14 300deg);--red:oklch(72% 0.18 350deg);--yellow:oklch(78% 0.14 85deg);--background:var(--bg);--background-alt:oklch(20% 0.035 280deg);--text:var(--fg);--text-dim:var(--fg-dim);--icon:var(--fg);--icon-dim:oklch(75% 0.04 280deg);--border:oklch(35% 0.04 280deg);--accent:var(--pink);--accent-hover:oklch(82% 0.1 350deg);--accent-text:oklch(18% 0.02 280deg);--accent-text-on-hover:oklch(22% 0.03 350deg);--success:var(--green);--success-hover:oklch(78% 0.12 165deg);--success-text:oklch(98% 0 0deg);--success-text-on-solid:oklch(22% 0.03 165deg);--warning:var(--yellow);--warning-hover:oklch(85% 0.12 85deg);--warning-text:oklch(98% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 85deg);--error:var(--red);--error-hover:oklch(78% 0.14 350deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:oklch(22% 0.03 15deg);--info:var(--cyan);--info-hover:oklch(78% 0.1 220deg);--info-text:oklch(98% 0 0deg);--info-text-on-solid:oklch(22% 0.03 220deg)}[data-theme="github-light"]{--bg:oklch(100% 0 0deg);--bg-alt:oklch(97% 0.005 264deg);--current-line:oklch(95% 0.008 264deg);--selection:oklch(88% 0.06 255deg);--fg:oklch(18% 0.02 264deg);--fg-dim:oklch(52% 0.02 264deg);--comment:oklch(58% 0.02 264deg);--cyan:oklch(55% 0.18 255deg);--green:oklch(48% 0.16 145deg);--orange:oklch(65% 0.14 75deg);--pink:oklch(55% 0.18 340deg);--purple:oklch(50% 0.18 290deg);--red:oklch(50% 0.2 25deg);--yellow:oklch(75% 0.14 90deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(86% 0.01 264deg);--accent:var(--cyan);--accent-hover:oklch(38% 0.18 255deg);--accent-text:oklch(100% 0 0deg);--success:var(--green);--success-hover:oklch(55% 0.14 145deg);--success-text:oklch(20% 0 0deg);--warning:var(--yellow);--warning-hover:oklch(82% 0.12 90deg);--warning-text:oklch(20% 0 0deg);--error:var(--red);--error-hover:oklch(62% 0.18 25deg);--error-text:oklch(100% 0 0deg);--info:var(--cyan);--info-hover:oklch(65% 0.1 210deg);--info-text:oklch(20% 0 0deg)}[data-theme="red-velvet-cupcake"]{--bg:oklch(99% 0.005 25deg);--bg-alt:oklch(96% 0.01 25deg);--current-line:oklch(94% 0.015 25deg);--selection:oklch(92% 0.04 25deg);--fg:oklch(28% 0.02 250deg);--fg-dim:oklch(48% 0.02 250deg);--comment:oklch(55% 0.02 250deg);--cyan:oklch(55% 0.12 220deg);--green:oklch(50% 0.16 145deg);--orange:oklch(62% 0.14 55deg);--pink:oklch(58% 0.16 350deg);--purple:oklch(52% 0.16 290deg);--red:oklch(55% 0.17 25deg);--yellow:oklch(75% 0.12 95deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(88% 0.015 25deg);--accent:var(--red);--accent-hover:oklch(48% 0.18 25deg);--accent-text:oklch(100% 0 0deg);--success:var(--green);--success-hover:oklch(54% 0.14 145deg);--success-text:oklch(20% 0 0deg);--warning:var(--orange);--warning-hover:oklch(70% 0.12 55deg);--warning-text:oklch(20% 0 0deg);--error:var(--red);--error-hover:oklch(60% 0.16 25deg);--error-text:oklch(100% 0 0deg);--info:var(--cyan);--info-hover:oklch(58% 0.1 220deg);--info-text:oklch(20% 0 0deg)}[data-theme="orangy-one-light"]{--bg:oklch(99% 0.008 70deg);--bg-alt:oklch(96% 0.012 70deg);--current-line:oklch(94% 0.015 70deg);--selection:oklch(92% 0.05 70deg);--fg:oklch(22% 0.02 70deg);--fg-dim:oklch(48% 0.02 70deg);--comment:oklch(55% 0.02 70deg);--cyan:oklch(55% 0.12 220deg);--green:oklch(50% 0.16 145deg);--orange:oklch(58% 0.16 55deg);--pink:oklch(58% 0.16 350deg);--purple:oklch(52% 0.16 290deg);--red:oklch(52% 0.18 25deg);--yellow:oklch(75% 0.14 90deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(88% 0.02 70deg);--accent:var(--orange);--accent-hover:oklch(50% 0.18 55deg);--accent-text:oklch(100% 0 0deg);--success:var(--green);--success-hover:oklch(55% 0.14 145deg);--success-text:oklch(20% 0 0deg);--warning:var(--orange);--warning-hover:oklch(72% 0.12 55deg);--warning-text:oklch(20% 0 0deg);--error:var(--red);--error-hover:oklch(58% 0.16 25deg);--error-text:oklch(100% 0 0deg);--info:var(--cyan);--info-hover:oklch(62% 0.1 220deg);--info-text:oklch(20% 0 0deg)}[data-theme="sunflower"]{--bg:oklch(98% 0.03 95deg);--bg-alt:oklch(95% 0.04 95deg);--current-line:oklch(92% 0.05 95deg);--selection:oklch(88% 0.08 95deg);--fg:oklch(22% 0.03 95deg);--fg-dim:oklch(45% 0.03 95deg);--comment:oklch(52% 0.03 95deg);--cyan:oklch(55% 0.12 220deg);--green:oklch(50% 0.16 145deg);--orange:oklch(62% 0.14 55deg);--pink:oklch(58% 0.16 350deg);--purple:oklch(52% 0.16 290deg);--red:oklch(52% 0.18 25deg);--yellow:oklch(75% 0.16 95deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(85% 0.04 95deg);--accent:var(--yellow);--accent-hover:oklch(65% 0.18 95deg);--accent-text:oklch(15% 0.02 95deg);--accent-text-on-hover:oklch(22% 0.02 95deg);--success:var(--green);--success-hover:oklch(55% 0.14 145deg);--success-text:oklch(20% 0 0deg);--warning:var(--orange);--warning-hover:oklch(70% 0.12 55deg);--warning-text:oklch(20% 0 0deg);--error:var(--red);--error-hover:oklch(60% 0.16 25deg);--error-text:oklch(100% 0 0deg);--info:var(--cyan);--info-hover:oklch(62% 0.1 220deg);--info-text:oklch(20% 0 0deg)}[data-theme="green-breeze-light"]{--bg:oklch(98% 0.008 140deg);--bg-alt:oklch(96% 0.01 140deg);--current-line:oklch(94% 0.012 140deg);--selection:oklch(88% 0.06 200deg);--fg:oklch(20% 0.02 80deg);--fg-dim:oklch(45% 0.02 80deg);--comment:oklch(55% 0.02 80deg);--cyan:oklch(58% 0.14 205deg);--green:oklch(42% 0.14 145deg);--orange:oklch(62% 0.12 65deg);--pink:oklch(55% 0.12 340deg);--purple:oklch(55% 0.12 290deg);--red:oklch(45% 0.18 25deg);--yellow:oklch(75% 0.14 90deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(88% 0.02 140deg);--accent:oklch(48% 0.16 155deg);--accent-hover:oklch(38% 0.16 155deg);--accent-text:oklch(100% 0 0deg);--success:var(--green);--success-hover:oklch(55% 0.14 145deg);--success-text:oklch(20% 0 0deg);--warning:var(--yellow);--warning-hover:oklch(82% 0.12 95deg);--warning-text:oklch(20% 0 0deg);--error:var(--red);--error-hover:oklch(58% 0.16 25deg);--error-text:oklch(100% 0 0deg);--info:var(--cyan);--info-hover:oklch(65% 0.1 210deg);--info-text:oklch(20% 0 0deg)}[data-theme="cute-pink"]{--bg:oklch(100% 0 0deg);--bg-alt:oklch(98% 0.02 350deg);--current-line:oklch(96% 0.03 350deg);--selection:oklch(78% 0.12 350deg);--fg:oklch(25% 0.01 0deg);--fg-dim:oklch(50% 0.02 0deg);--comment:oklch(55% 0.02 0deg);--cyan:oklch(55% 0.1 220deg);--green:oklch(48% 0.12 145deg);--orange:oklch(65% 0.12 65deg);--pink:oklch(62% 0.2 350deg);--purple:oklch(42% 0.18 300deg);--red:oklch(55% 0.2 25deg);--yellow:oklch(75% 0.14 90deg);--background:var(--bg);--background-alt:oklch(98% 0.025 350deg);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(88% 0.06 350deg);--accent:oklch(62% 0.22 350deg);--accent-hover:oklch(55% 0.22 350deg);--accent-text:oklch(100% 0 0deg);--success:var(--green);--success-hover:oklch(58% 0.14 145deg);--success-text:oklch(20% 0 0deg);--warning:var(--yellow);--warning-hover:oklch(80% 0.14 90deg);--warning-text:oklch(20% 0 0deg);--error:var(--red);--error-hover:oklch(60% 0.18 25deg);--error-text:oklch(100% 0 0deg);--info:var(--cyan);--info-hover:oklch(65% 0.1 220deg);--info-text:oklch(20% 0 0deg)}[data-theme="semi-light-purple"]{--bg:oklch(96% 0.02 290deg);--bg-alt:oklch(94% 0.03 290deg);--current-line:oklch(91% 0.04 290deg);--selection:oklch(88% 0.06 290deg);--fg:oklch(25% 0.02 290deg);--fg-dim:oklch(48% 0.03 290deg);--comment:oklch(55% 0.04 280deg);--cyan:oklch(58% 0.12 220deg);--green:oklch(50% 0.14 150deg);--orange:oklch(65% 0.12 60deg);--pink:oklch(62% 0.16 340deg);--purple:oklch(52% 0.2 290deg);--red:oklch(52% 0.18 25deg);--yellow:oklch(75% 0.14 90deg);--background:var(--bg);--background-alt:var(--bg-alt);--text:var(--fg);--text-dim:var(--fg-dim);--border:oklch(86% 0.05 290deg);--accent:var(--purple);--accent-hover:oklch(45% 0.2 290deg);--accent-text:oklch(100% 0 0deg);--success:var(--green);--success-hover:oklch(55% 0.14 145deg);--success-text:oklch(20% 0 0deg);--warning:var(--yellow);--warning-hover:oklch(82% 0.12 90deg);--warning-text:oklch(20% 0 0deg);--error:var(--red);--error-hover:oklch(58% 0.16 25deg);--error-text:oklch(100% 0 0deg);--info:var(--cyan);--info-hover:oklch(62% 0.1 220deg);--info-text:oklch(20% 0 0deg)}
|
package/package.json
CHANGED
|
@@ -1,13 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{PROJECT_NAME}}",
|
|
3
|
-
"type": "module",
|
|
4
|
-
"version": "0.0.1",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"dev": "astro dev",
|
|
7
|
-
"build": "astro build",
|
|
8
|
-
"preview": "astro preview"
|
|
9
|
-
},
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"astro": "^5.0.0"
|
|
12
|
-
}
|
|
13
|
-
}
|
|
1
|
+
{"name":"{{PROJECT_NAME}}","type":"module","version":"0.0.1","scripts":{"dev":"astro dev","build":"astro build","preview":"astro preview"},"devDependencies":{"astro":"^5.0.0"}}
|
|
@@ -11,6 +11,14 @@ const { title = '{{TITLE}}' } = Astro.props;
|
|
|
11
11
|
<meta charset="UTF-8" />
|
|
12
12
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
13
13
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
14
|
+
<!-- Theme flash prevention + accessibility (same as main site) -->
|
|
15
|
+
<script is:inline>
|
|
16
|
+
(function(){try{var s=localStorage.getItem('theme');var d='github-dark-classic';var l='github-light';var r=!s?(matchMedia('(prefers-color-scheme: dark)').matches?d:l):s==='system'?(matchMedia('(prefers-color-scheme: dark)').matches?d:l):s;document.documentElement.setAttribute('data-theme',r);var f=localStorage.getItem('fontSizeScale');if(f)document.documentElement.style.setProperty('--font-size-scale',f);if(localStorage.getItem('reducedMotion')==='true')document.documentElement.classList.add('reduced-motion');if(localStorage.getItem('highContrast')==='true')document.documentElement.classList.add('high-contrast');var b=localStorage.getItem('scrollbarStyle')||'thin';if(b==='thick')document.documentElement.classList.add('scrollbar-thick');else if(b==='hidden')document.documentElement.classList.add('scrollbar-hidden','hide-scrollbars');}catch(e){}})();
|
|
17
|
+
</script>
|
|
18
|
+
<!-- Toast: showToast, removeToast, removeAllToasts -->
|
|
19
|
+
<script is:inline>
|
|
20
|
+
(function(){if(typeof window==='undefined'||window.showToast)return;function t(m,o){if(!m)return null;o=o||{};var v=o.variant||'info',p=o.position||'top-right',a=o.autoDismiss!==undefined?o.autoDismiss:5000,d=o.dismissible!==undefined?o.dismissible:true,i='toast-'+Math.random().toString(36).substr(2,9);function c(){if(!document.body)return;var cn=document.getElementById('toast-container-'+p);if(!cn){cn=document.createElement('div');cn.id='toast-container-'+p;cn.className='toast-container toast-container--'+p;cn.style.cssText='display:flex;visibility:visible;z-index:1100';document.body.appendChild(cn);}var to=document.createElement('div');to.id=i;to.className='alert alert--'+v;to.setAttribute('role','alert');to.setAttribute('aria-live','polite');to.style.cssText='display:flex;visibility:visible;opacity:0;transition:opacity .3s ease-out,transform .3s ease-out';var ir=p.indexOf('right')!==-1,il=p.indexOf('left')!==-1;to.style.transform=ir?'translateX(100%)':il?'translateX(-100%)':'translateY(-100%)';var co=document.createElement('div');co.className='alert__content';co.textContent=m;to.appendChild(co);if(d){var cb=document.createElement('button');cb.type='button';cb.className='alert__close';cb.setAttribute('aria-label','Dismiss toast');cb.innerHTML='<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="4" x2="12" y2="12"></line><line x1="12" y1="4" x2="4" y2="12"></line></svg>';to.appendChild(cb);cb.onclick=function(){to.style.opacity='0';to.style.transform=ir?'translateX(100%)':il?'translateX(-100%)':'translateY(-100%)';setTimeout(function(){if(to.parentNode)to.remove();if(cn.children.length===0)cn.remove();},300);};}cn.appendChild(to);requestAnimationFrame(function(){to.offsetHeight;setTimeout(function(){requestAnimationFrame(function(){to.style.opacity='1';to.style.transform=ir||il?'translateX(0)':'translateY(0)';});},10);});if(a>0)setTimeout(function(){if(to.parentNode){to.style.opacity='0';to.style.transform=ir?'translateX(100%)':il?'translateX(-100%)':'translateY(-100%)';setTimeout(function(){if(to.parentNode)to.remove();if(cn.children.length===0)cn.remove();},300);}},a);return i;}document.body?c():document.addEventListener('DOMContentLoaded',c);return i;}function r(i){var to=document.getElementById(i);if(to){var cn=to.parentElement;to.style.opacity='0';to.style.transform='translateY(-10px)';setTimeout(function(){if(to.parentNode)to.remove();if(cn&&cn.classList.contains('toast-container')&&!cn.children.length)cn.remove();},300);}}function ra(){document.querySelectorAll('.toast-container').forEach(function(c){c.querySelectorAll('.alert').forEach(function(t){t.style.opacity='0';t.style.transform='translateY(-10px)';});setTimeout(function(){c.remove();},300);});}window.showToast=t;window.removeToast=r;window.removeAllToasts=ra;})();
|
|
21
|
+
</script>
|
|
14
22
|
<!-- Rizzo CSS: full bundle (reset + base + components + themes) -->
|
|
15
23
|
<link rel="stylesheet" href="/css/rizzo.min.css" />
|
|
16
24
|
<title>{title}</title>
|
|
@@ -1,13 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
import Layout from '../layouts/Layout.astro';
|
|
3
3
|
---
|
|
4
|
-
<Layout>
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
</
|
|
4
|
+
<Layout title="{{TITLE}}">
|
|
5
|
+
<a href="#main-content" class="skip-link">Skip to main content</a>
|
|
6
|
+
<header class="container flex flex-wrap items-center justify-between gap-4" style="padding-top: var(--spacing-4); padding-bottom: var(--spacing-4); border-bottom: 1px solid var(--border);">
|
|
7
|
+
<a href="/" class="font-semibold" style="font-size: var(--font-size-lg); color: var(--text); text-decoration: none;">{{TITLE}}</a>
|
|
8
|
+
<a href="https://rizzo-css.vercel.app/docs/getting-started" class="btn btn-outline" target="_blank" rel="noopener noreferrer">Docs</a>
|
|
9
|
+
</header>
|
|
10
|
+
<main id="main-content" class="flex flex-col items-center justify-center text-center min-h-screen" style="padding: var(--spacing-12) var(--spacing-4); min-height: calc(100vh - 4rem);">
|
|
11
|
+
<span class="badge badge--primary badge--sm mb-4">Astro + Rizzo CSS</span>
|
|
12
|
+
<h1 style="font-size: clamp(2.5rem, 8vw, 4rem); font-weight: 800; line-height: 1.1; margin: 0 0 var(--spacing-4) 0; color: var(--text);">Build something great</h1>
|
|
13
|
+
<p style="font-size: var(--font-size-xl); color: var(--text-dim); max-width: 42ch; margin: 0 0 var(--spacing-8) 0; line-height: var(--line-height-relaxed);">Same design system as Vanilla JS and Svelte — 14 themes, 24 components, full keyboard and screen reader support.</p>
|
|
14
|
+
<div class="flex flex-wrap justify-center gap-4 mb-12">
|
|
15
|
+
<a href="https://rizzo-css.vercel.app/docs/getting-started" class="btn btn-primary" target="_blank" rel="noopener noreferrer">Get started</a>
|
|
16
|
+
<a href="https://rizzo-css.vercel.app/docs/components" class="btn btn-outline" target="_blank" rel="noopener noreferrer">Components</a>
|
|
17
|
+
<button type="button" class="btn btn-outline" onclick="window.showToast && window.showToast('Hello from Rizzo!', { variant: 'success' })">Show toast</button>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="flex flex-wrap justify-center gap-3 mb-16">
|
|
20
|
+
<span class="badge badge--info">14 themes</span>
|
|
21
|
+
<span class="badge badge--info">24 components</span>
|
|
22
|
+
<span class="badge badge--info">WCAG AA</span>
|
|
23
|
+
</div>
|
|
24
|
+
<footer style="margin-top: auto; padding-top: var(--spacing-8); color: var(--text-dim); font-size: var(--font-size-sm);">
|
|
25
|
+
<a href="https://rizzo-css.vercel.app" style="color: var(--accent);">Rizzo CSS</a> — design system for the web
|
|
26
|
+
</footer>
|
|
12
27
|
</main>
|
|
13
28
|
</Layout>
|
|
@@ -3,18 +3,20 @@
|
|
|
3
3
|
"type": "module",
|
|
4
4
|
"version": "0.0.1",
|
|
5
5
|
"scripts": {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
"dev": "vite dev",
|
|
7
|
+
"build": "vite build",
|
|
8
|
+
"preview": "vite preview",
|
|
9
|
+
"prepare": "svelte-kit sync || echo ''",
|
|
10
|
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
11
|
+
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
"@sveltejs/adapter-auto": "^7.0.0",
|
|
15
|
+
"@sveltejs/kit": "^2.50.2",
|
|
16
|
+
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
17
|
+
"svelte": "^5.49.2",
|
|
18
|
+
"svelte-check": "^4.3.6",
|
|
19
|
+
"typescript": "^5.9.3",
|
|
20
|
+
"vite": "^7.3.1"
|
|
19
21
|
}
|
|
20
22
|
}
|
|
@@ -3,7 +3,14 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
|
|
6
|
+
<!-- Theme flash prevention + accessibility (same as main site) -->
|
|
7
|
+
<script>
|
|
8
|
+
(function(){try{var s=localStorage.getItem('theme');var d='github-dark-classic';var l='github-light';var r=!s?(matchMedia('(prefers-color-scheme: dark)').matches?d:l):s==='system'?(matchMedia('(prefers-color-scheme: dark)').matches?d:l):s;document.documentElement.setAttribute('data-theme',r);var f=localStorage.getItem('fontSizeScale');if(f)document.documentElement.style.setProperty('--font-size-scale',f);if(localStorage.getItem('reducedMotion')==='true')document.documentElement.classList.add('reduced-motion');if(localStorage.getItem('highContrast')==='true')document.documentElement.classList.add('high-contrast');var b=localStorage.getItem('scrollbarStyle')||'thin';if(b==='thick')document.documentElement.classList.add('scrollbar-thick');else if(b==='hidden')document.documentElement.classList.add('scrollbar-hidden','hide-scrollbars');}catch(e){}})();
|
|
9
|
+
</script>
|
|
10
|
+
<!-- Toast: showToast, removeToast, removeAllToasts -->
|
|
11
|
+
<script>
|
|
12
|
+
(function(){if(typeof window==='undefined'||window.showToast)return;function t(m,o){if(!m)return null;o=o||{};var v=o.variant||'info',p=o.position||'top-right',a=o.autoDismiss!==undefined?o.autoDismiss:5000,d=o.dismissible!==undefined?o.dismissible:true,i='toast-'+Math.random().toString(36).substr(2,9);function c(){if(!document.body)return;var cn=document.getElementById('toast-container-'+p);if(!cn){cn=document.createElement('div');cn.id='toast-container-'+p;cn.className='toast-container toast-container--'+p;cn.style.cssText='display:flex;visibility:visible;z-index:1100';document.body.appendChild(cn);}var to=document.createElement('div');to.id=i;to.className='alert alert--'+v;to.setAttribute('role','alert');to.setAttribute('aria-live','polite');to.style.cssText='display:flex;visibility:visible;opacity:0;transition:opacity .3s ease-out,transform .3s ease-out';var ir=p.indexOf('right')!==-1,il=p.indexOf('left')!==-1;to.style.transform=ir?'translateX(100%)':il?'translateX(-100%)':'translateY(-100%)';var co=document.createElement('div');co.className='alert__content';co.textContent=m;to.appendChild(co);if(d){var cb=document.createElement('button');cb.type='button';cb.className='alert__close';cb.setAttribute('aria-label','Dismiss toast');cb.innerHTML='<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="4" x2="12" y2="12"></line><line x1="12" y1="4" x2="4" y2="12"></line></svg>';to.appendChild(cb);cb.onclick=function(){to.style.opacity='0';to.style.transform=ir?'translateX(100%)':il?'translateX(-100%)':'translateY(-100%)';setTimeout(function(){if(to.parentNode)to.remove();if(cn.children.length===0)cn.remove();},300);};}cn.appendChild(to);requestAnimationFrame(function(){to.offsetHeight;setTimeout(function(){requestAnimationFrame(function(){to.style.opacity='1';to.style.transform=ir||il?'translateX(0)':'translateY(0)';});},10);});if(a>0)setTimeout(function(){if(to.parentNode){to.style.opacity='0';to.style.transform=ir?'translateX(100%)':il?'translateX(-100%)':'translateY(-100%)';setTimeout(function(){if(to.parentNode)to.remove();if(cn.children.length===0)cn.remove();},300);}},a);return i;}document.body?c():document.addEventListener('DOMContentLoaded',c);return i;}function r(i){var to=document.getElementById(i);if(to){var cn=to.parentElement;to.style.opacity='0';to.style.transform='translateY(-10px)';setTimeout(function(){if(to.parentNode)to.remove();if(cn&&cn.classList.contains('toast-container')&&!cn.children.length)cn.remove();},300);}}function ra(){document.querySelectorAll('.toast-container').forEach(function(c){c.querySelectorAll('.alert').forEach(function(t){t.style.opacity='0';t.style.transform='translateY(-10px)';});setTimeout(function(){c.remove();},300);});}window.showToast=t;window.removeToast=r;window.removeAllToasts=ra;})();
|
|
13
|
+
</script>
|
|
7
14
|
<!-- Rizzo CSS: full bundle (reset + base + components + themes) -->
|
|
8
15
|
<link rel="stylesheet" href="/css/rizzo.min.css" />
|
|
9
16
|
%sveltekit.head%
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
|
|
2
|
+
function showDemoToast() {
|
|
3
|
+
if (typeof window !== 'undefined' && window.showToast) {
|
|
4
|
+
window.showToast('Hello from Rizzo!', { variant: 'success' });
|
|
5
|
+
}
|
|
6
|
+
}
|
|
3
7
|
</script>
|
|
4
8
|
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
</
|
|
9
|
+
<a href="#main-content" class="skip-link">Skip to main content</a>
|
|
10
|
+
<header class="container flex flex-wrap items-center justify-between gap-4" style="padding-top: var(--spacing-4); padding-bottom: var(--spacing-4); border-bottom: 1px solid var(--border);">
|
|
11
|
+
<a href="/" class="font-semibold" style="font-size: var(--font-size-lg); color: var(--text); text-decoration: none;">{{TITLE}}</a>
|
|
12
|
+
<a href="https://rizzo-css.vercel.app/docs/getting-started" class="btn btn-outline" target="_blank" rel="noopener noreferrer">Docs</a>
|
|
13
|
+
</header>
|
|
14
|
+
<main id="main-content" class="flex flex-col items-center justify-center text-center min-h-screen" style="padding: var(--spacing-12) var(--spacing-4); min-height: calc(100vh - 4rem);">
|
|
15
|
+
<span class="badge badge--primary badge--sm mb-4">Svelte + Rizzo CSS</span>
|
|
16
|
+
<h1 style="font-size: clamp(2.5rem, 8vw, 4rem); font-weight: 800; line-height: 1.1; margin: 0 0 var(--spacing-4) 0; color: var(--text);">Build something great</h1>
|
|
17
|
+
<p style="font-size: var(--font-size-xl); color: var(--text-dim); max-width: 42ch; margin: 0 0 var(--spacing-8) 0; line-height: var(--line-height-relaxed);">Same design system as Vanilla JS and Astro — 14 themes, 24 components, full keyboard and screen reader support.</p>
|
|
18
|
+
<div class="flex flex-wrap justify-center gap-4 mb-12">
|
|
19
|
+
<a href="https://rizzo-css.vercel.app/docs/getting-started" class="btn btn-primary" target="_blank" rel="noopener noreferrer">Get started</a>
|
|
20
|
+
<a href="https://rizzo-css.vercel.app/docs/components" class="btn btn-outline" target="_blank" rel="noopener noreferrer">Components</a>
|
|
21
|
+
<button type="button" class="btn btn-outline" on:click={showDemoToast}>Show toast</button>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="flex flex-wrap justify-center gap-3 mb-16">
|
|
24
|
+
<span class="badge badge--info">14 themes</span>
|
|
25
|
+
<span class="badge badge--info">24 components</span>
|
|
26
|
+
<span class="badge badge--info">WCAG AA</span>
|
|
27
|
+
</div>
|
|
28
|
+
<footer style="margin-top: auto; padding-top: var(--spacing-8); color: var(--text-dim); font-size: var(--font-size-sm);">
|
|
29
|
+
<a href="https://rizzo-css.vercel.app" style="color: var(--accent);">Rizzo CSS</a> — design system for the web
|
|
30
|
+
</footer>
|
|
12
31
|
</main>
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
// @ts-check
|
|
2
1
|
import adapter from '@sveltejs/adapter-auto';
|
|
3
2
|
|
|
4
3
|
/** @type {import('@sveltejs/kit').Config} */
|
|
5
4
|
const config = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
kit: {
|
|
6
|
+
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
|
|
7
|
+
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
|
|
8
|
+
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
|
|
9
|
+
adapter: adapter()
|
|
10
|
+
}
|
|
9
11
|
};
|
|
10
12
|
|
|
11
13
|
export default config;
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
"extends": "./.svelte-kit/tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"rewriteRelativeImportExtensions": true,
|
|
5
|
+
"allowJs": true,
|
|
6
|
+
"checkJs": true,
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"forceConsistentCasingInFileNames": true,
|
|
9
|
+
"resolveJsonModule": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"sourceMap": true,
|
|
12
|
+
"strict": true,
|
|
13
|
+
"module": "ESNext",
|
|
14
|
+
"moduleResolution": "bundler"
|
|
15
|
+
}
|
|
16
|
+
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
|
17
|
+
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
|
18
|
+
//
|
|
19
|
+
// To make changes to top-level options such as include and exclude, we recommend extending
|
|
20
|
+
// the generated config; see https://svelte.dev/docs/kit/configuration#typescript
|
|
15
21
|
}
|
|
@@ -4,73 +4,460 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>{{TITLE}}</title>
|
|
7
|
+
<!-- Theme flash prevention: apply saved theme/settings before first paint (same as main site) -->
|
|
8
|
+
<script>
|
|
9
|
+
(function() {
|
|
10
|
+
try {
|
|
11
|
+
var savedTheme = localStorage.getItem('theme');
|
|
12
|
+
var defaultDark = 'github-dark-classic';
|
|
13
|
+
var defaultLight = 'github-light';
|
|
14
|
+
var resolvedTheme;
|
|
15
|
+
if (!savedTheme) {
|
|
16
|
+
resolvedTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? defaultDark : defaultLight;
|
|
17
|
+
} else if (savedTheme === 'system') {
|
|
18
|
+
resolvedTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? defaultDark : defaultLight;
|
|
19
|
+
} else {
|
|
20
|
+
resolvedTheme = savedTheme;
|
|
21
|
+
}
|
|
22
|
+
document.documentElement.setAttribute('data-theme', resolvedTheme);
|
|
23
|
+
var savedFontScale = localStorage.getItem('fontSizeScale');
|
|
24
|
+
if (savedFontScale) {
|
|
25
|
+
document.documentElement.style.setProperty('--font-size-scale', savedFontScale);
|
|
26
|
+
}
|
|
27
|
+
if (localStorage.getItem('reducedMotion') === 'true') {
|
|
28
|
+
document.documentElement.classList.add('reduced-motion');
|
|
29
|
+
}
|
|
30
|
+
if (localStorage.getItem('highContrast') === 'true') {
|
|
31
|
+
document.documentElement.classList.add('high-contrast');
|
|
32
|
+
}
|
|
33
|
+
var savedScrollbarStyle = localStorage.getItem('scrollbarStyle') || 'thin';
|
|
34
|
+
if (savedScrollbarStyle === 'thick') {
|
|
35
|
+
document.documentElement.classList.add('scrollbar-thick');
|
|
36
|
+
} else if (savedScrollbarStyle === 'hidden') {
|
|
37
|
+
document.documentElement.classList.add('scrollbar-hidden', 'hide-scrollbars');
|
|
38
|
+
}
|
|
39
|
+
if (!savedScrollbarStyle && localStorage.getItem('hideScrollbars') === 'true') {
|
|
40
|
+
document.documentElement.classList.add('scrollbar-hidden', 'hide-scrollbars');
|
|
41
|
+
localStorage.setItem('scrollbarStyle', 'hidden');
|
|
42
|
+
}
|
|
43
|
+
} catch (e) {}
|
|
44
|
+
})();
|
|
45
|
+
</script>
|
|
46
|
+
<!-- Toast: showToast, removeToast, removeAllToasts (same as main site) -->
|
|
47
|
+
<script>
|
|
48
|
+
(function() {
|
|
49
|
+
if (typeof window === 'undefined' || window.showToast) return;
|
|
50
|
+
function showToast(message, options) {
|
|
51
|
+
if (!message) return null;
|
|
52
|
+
options = options || {};
|
|
53
|
+
var variant = options.variant || 'info';
|
|
54
|
+
var position = options.position || 'top-right';
|
|
55
|
+
var autoDismiss = options.autoDismiss !== undefined ? options.autoDismiss : 5000;
|
|
56
|
+
var dismissible = options.dismissible !== undefined ? options.dismissible : true;
|
|
57
|
+
var toastId = 'toast-' + Math.random().toString(36).substr(2, 9);
|
|
58
|
+
function createToast() {
|
|
59
|
+
if (!document.body) return;
|
|
60
|
+
var containerId = 'toast-container-' + position;
|
|
61
|
+
var container = document.getElementById(containerId);
|
|
62
|
+
if (!container) {
|
|
63
|
+
container = document.createElement('div');
|
|
64
|
+
container.id = containerId;
|
|
65
|
+
container.className = 'toast-container toast-container--' + position;
|
|
66
|
+
container.style.cssText = 'display:flex;visibility:visible;z-index:1100;';
|
|
67
|
+
document.body.appendChild(container);
|
|
68
|
+
}
|
|
69
|
+
var toast = document.createElement('div');
|
|
70
|
+
toast.id = toastId;
|
|
71
|
+
toast.className = 'alert alert--' + variant;
|
|
72
|
+
toast.setAttribute('role', 'alert');
|
|
73
|
+
toast.setAttribute('aria-live', 'polite');
|
|
74
|
+
toast.style.cssText = 'display:flex;visibility:visible;opacity:0;transition:opacity 0.3s ease-out, transform 0.3s ease-out;';
|
|
75
|
+
var isRight = position.indexOf('right') !== -1;
|
|
76
|
+
var isLeft = position.indexOf('left') !== -1;
|
|
77
|
+
toast.style.transform = isRight ? 'translateX(100%)' : isLeft ? 'translateX(-100%)' : 'translateY(-100%)';
|
|
78
|
+
var content = document.createElement('div');
|
|
79
|
+
content.className = 'alert__content';
|
|
80
|
+
content.textContent = message;
|
|
81
|
+
toast.appendChild(content);
|
|
82
|
+
var closeBtn;
|
|
83
|
+
if (dismissible) {
|
|
84
|
+
closeBtn = document.createElement('button');
|
|
85
|
+
closeBtn.type = 'button';
|
|
86
|
+
closeBtn.className = 'alert__close';
|
|
87
|
+
closeBtn.setAttribute('aria-label', 'Dismiss toast');
|
|
88
|
+
closeBtn.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="4" x2="12" y2="12"></line><line x1="12" y1="4" x2="4" y2="12"></line></svg>';
|
|
89
|
+
toast.appendChild(closeBtn);
|
|
90
|
+
closeBtn.addEventListener('click', function() {
|
|
91
|
+
toast.style.opacity = '0';
|
|
92
|
+
toast.style.transform = isRight ? 'translateX(100%)' : isLeft ? 'translateX(-100%)' : 'translateY(-100%)';
|
|
93
|
+
setTimeout(function() {
|
|
94
|
+
if (toast.parentNode) toast.remove();
|
|
95
|
+
if (container.children.length === 0) container.remove();
|
|
96
|
+
}, 300);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
container.appendChild(toast);
|
|
100
|
+
requestAnimationFrame(function() {
|
|
101
|
+
toast.offsetHeight;
|
|
102
|
+
if (variant === 'warning') {
|
|
103
|
+
toast.style.color = 'var(--warning-text)';
|
|
104
|
+
content.style.color = 'var(--warning-text)';
|
|
105
|
+
if (closeBtn) closeBtn.style.color = 'var(--warning-text)';
|
|
106
|
+
}
|
|
107
|
+
setTimeout(function() {
|
|
108
|
+
requestAnimationFrame(function() {
|
|
109
|
+
toast.style.opacity = '1';
|
|
110
|
+
toast.style.transform = isRight || isLeft ? 'translateX(0)' : 'translateY(0)';
|
|
111
|
+
});
|
|
112
|
+
}, 10);
|
|
113
|
+
});
|
|
114
|
+
if (autoDismiss > 0) {
|
|
115
|
+
setTimeout(function() {
|
|
116
|
+
if (toast.parentNode) {
|
|
117
|
+
toast.style.opacity = '0';
|
|
118
|
+
toast.style.transform = isRight ? 'translateX(100%)' : isLeft ? 'translateX(-100%)' : 'translateY(-100%)';
|
|
119
|
+
setTimeout(function() {
|
|
120
|
+
if (toast.parentNode) toast.remove();
|
|
121
|
+
if (container.children.length === 0) container.remove();
|
|
122
|
+
}, 300);
|
|
123
|
+
}
|
|
124
|
+
}, autoDismiss);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (document.body) createToast();
|
|
128
|
+
else document.addEventListener('DOMContentLoaded', createToast);
|
|
129
|
+
return toastId;
|
|
130
|
+
}
|
|
131
|
+
function removeToast(toastId) {
|
|
132
|
+
var toast = document.getElementById(toastId);
|
|
133
|
+
if (toast) {
|
|
134
|
+
var container = toast.parentElement;
|
|
135
|
+
var position = container ? container.id.replace('toast-container-', '') : 'top-right';
|
|
136
|
+
toast.style.opacity = '0';
|
|
137
|
+
toast.style.transform = position.indexOf('right') !== -1 ? 'translateX(100%)' : position.indexOf('left') !== -1 ? 'translateX(-100%)' : 'translateY(-100%)';
|
|
138
|
+
setTimeout(function() {
|
|
139
|
+
if (toast.parentNode) toast.remove();
|
|
140
|
+
if (container && container.classList.contains('toast-container') && container.children.length === 0) container.remove();
|
|
141
|
+
}, 300);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function removeAllToasts() {
|
|
145
|
+
document.querySelectorAll('.toast-container').forEach(function(c) {
|
|
146
|
+
c.querySelectorAll('.alert').forEach(function(t) {
|
|
147
|
+
t.style.opacity = '0';
|
|
148
|
+
t.style.transform = 'translateY(-10px)';
|
|
149
|
+
});
|
|
150
|
+
setTimeout(function() { c.remove(); }, 300);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
window.showToast = showToast;
|
|
154
|
+
window.removeToast = removeToast;
|
|
155
|
+
window.removeAllToasts = removeAllToasts;
|
|
156
|
+
})();
|
|
157
|
+
</script>
|
|
7
158
|
<link rel="stylesheet" href="{{LINK_HREF}}" />
|
|
8
159
|
</head>
|
|
9
160
|
<body>
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
<
|
|
13
|
-
<div
|
|
14
|
-
<label for="theme-select">Theme
|
|
15
|
-
<select id="theme-select" style="width: auto; min-width: 12rem;">
|
|
16
|
-
<option value="
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
<
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
161
|
+
<a href="#main-content" class="skip-link">Skip to main content</a>
|
|
162
|
+
<header class="container flex flex-wrap items-center justify-between gap-4" style="padding-top: var(--spacing-4); padding-bottom: var(--spacing-4); border-bottom: 1px solid var(--border);">
|
|
163
|
+
<a href="#" class="font-semibold" style="font-size: var(--font-size-lg); color: var(--text); text-decoration: none;">{{TITLE}}</a>
|
|
164
|
+
<div class="flex items-center gap-3 flex-wrap">
|
|
165
|
+
<label for="theme-select" class="sr-only">Theme</label>
|
|
166
|
+
<select id="theme-select" class="form-control" style="width: auto; min-width: 12rem;" aria-label="Theme">
|
|
167
|
+
<option value="system">System</option>
|
|
168
|
+
<optgroup label="Dark themes">
|
|
169
|
+
<option value="github-dark-classic">GitHub Dark Classic</option>
|
|
170
|
+
<option value="shades-of-purple">Shades of Purple</option>
|
|
171
|
+
<option value="sandstorm-classic">Sandstorm Classic</option>
|
|
172
|
+
<option value="rocky-blood-orange">Rocky Blood Orange</option>
|
|
173
|
+
<option value="minimal-dark-neon-yellow">Minimal Dark Neon Yellow</option>
|
|
174
|
+
<option value="hack-the-box">Hack The Box</option>
|
|
175
|
+
<option value="pink-cat-boo">Pink Cat Boo</option>
|
|
176
|
+
</optgroup>
|
|
177
|
+
<optgroup label="Light themes">
|
|
178
|
+
<option value="github-light">GitHub Light</option>
|
|
179
|
+
<option value="red-velvet-cupcake">Red Velvet Cupcake</option>
|
|
180
|
+
<option value="orangy-one-light">Orangy One Light</option>
|
|
181
|
+
<option value="sunflower">Sunflower</option>
|
|
182
|
+
<option value="green-breeze-light">Green Breeze Light</option>
|
|
183
|
+
<option value="cute-pink">Cute Pink</option>
|
|
184
|
+
<option value="semi-light-purple">Semi Light Purple</option>
|
|
185
|
+
</optgroup>
|
|
30
186
|
</select>
|
|
187
|
+
<button type="button" class="btn btn-outline" aria-label="Open settings" onclick="window.openSettings && window.openSettings()">Settings</button>
|
|
31
188
|
</div>
|
|
32
189
|
</header>
|
|
33
190
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<div
|
|
37
|
-
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
191
|
+
<!-- Settings panel (same structure as main site; CSS from Rizzo) -->
|
|
192
|
+
<div class="settings" data-settings aria-hidden="true">
|
|
193
|
+
<div class="settings__overlay" data-settings-overlay aria-hidden="true"></div>
|
|
194
|
+
<div class="settings__panel" role="dialog" aria-modal="true" aria-labelledby="settings-title" aria-hidden="true">
|
|
195
|
+
<div class="settings__header">
|
|
196
|
+
<h2 id="settings-title" class="settings__title">Settings</h2>
|
|
197
|
+
<button type="button" class="settings__close" aria-label="Close settings" data-settings-close>
|
|
198
|
+
<svg width="20" height="20" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="4" x2="12" y2="12"></line><line x1="12" y1="4" x2="4" y2="12"></line></svg>
|
|
199
|
+
</button>
|
|
200
|
+
</div>
|
|
201
|
+
<div class="settings__content">
|
|
202
|
+
<section class="settings__section">
|
|
203
|
+
<h3 class="settings__section-title">Theme</h3>
|
|
204
|
+
<div class="settings__control">
|
|
205
|
+
<label for="settings-theme" class="settings__label">Theme</label>
|
|
206
|
+
<select id="settings-theme" class="form-control" aria-label="Theme" data-settings-theme style="width: 100%;">
|
|
207
|
+
<option value="system">System</option>
|
|
208
|
+
<optgroup label="Dark themes">
|
|
209
|
+
<option value="github-dark-classic">GitHub Dark Classic</option>
|
|
210
|
+
<option value="shades-of-purple">Shades of Purple</option>
|
|
211
|
+
<option value="sandstorm-classic">Sandstorm Classic</option>
|
|
212
|
+
<option value="rocky-blood-orange">Rocky Blood Orange</option>
|
|
213
|
+
<option value="minimal-dark-neon-yellow">Minimal Dark Neon Yellow</option>
|
|
214
|
+
<option value="hack-the-box">Hack The Box</option>
|
|
215
|
+
<option value="pink-cat-boo">Pink Cat Boo</option>
|
|
216
|
+
</optgroup>
|
|
217
|
+
<optgroup label="Light themes">
|
|
218
|
+
<option value="github-light">GitHub Light</option>
|
|
219
|
+
<option value="red-velvet-cupcake">Red Velvet Cupcake</option>
|
|
220
|
+
<option value="orangy-one-light">Orangy One Light</option>
|
|
221
|
+
<option value="sunflower">Sunflower</option>
|
|
222
|
+
<option value="green-breeze-light">Green Breeze Light</option>
|
|
223
|
+
<option value="cute-pink">Cute Pink</option>
|
|
224
|
+
<option value="semi-light-purple">Semi Light Purple</option>
|
|
225
|
+
</optgroup>
|
|
226
|
+
</select>
|
|
227
|
+
</div>
|
|
228
|
+
</section>
|
|
229
|
+
<section class="settings__section">
|
|
230
|
+
<h3 class="settings__section-title">Font Size</h3>
|
|
231
|
+
<div class="settings__control">
|
|
232
|
+
<label for="font-size-slider" class="settings__label">
|
|
233
|
+
<span class="settings__label-text">Adjust text size</span>
|
|
234
|
+
<span class="settings__label-value" data-font-size-value>100%</span>
|
|
235
|
+
</label>
|
|
236
|
+
<input type="range" id="font-size-slider" class="settings__slider" min="0.75" max="1.5" step="0.05" value="1" aria-label="Font size" data-font-size-slider style="--slider-progress: 50%;" />
|
|
237
|
+
<div class="settings__slider-labels"><span>Small</span><span>Default</span><span>Large</span></div>
|
|
238
|
+
</div>
|
|
239
|
+
</section>
|
|
240
|
+
<section class="settings__section">
|
|
241
|
+
<h3 class="settings__section-title">Accessibility</h3>
|
|
242
|
+
<div class="settings__control">
|
|
243
|
+
<label class="settings__checkbox-label">
|
|
244
|
+
<input type="checkbox" class="settings__checkbox" data-reduced-motion aria-label="Reduce motion" />
|
|
245
|
+
<span>Reduce motion</span>
|
|
246
|
+
</label>
|
|
247
|
+
<p class="settings__help-text">Minimize animations and transitions</p>
|
|
248
|
+
</div>
|
|
249
|
+
<div class="settings__control">
|
|
250
|
+
<label class="settings__checkbox-label">
|
|
251
|
+
<input type="checkbox" class="settings__checkbox" data-high-contrast aria-label="High contrast" />
|
|
252
|
+
<span>High contrast</span>
|
|
253
|
+
</label>
|
|
254
|
+
<p class="settings__help-text">Increase contrast for better visibility</p>
|
|
255
|
+
</div>
|
|
256
|
+
<div class="settings__control">
|
|
257
|
+
<div class="settings__label"><span class="settings__label-text">Scrollbar style</span></div>
|
|
258
|
+
<div class="settings__radio-group" role="radiogroup" aria-label="Scrollbar style">
|
|
259
|
+
<label class="settings__radio-label">
|
|
260
|
+
<input type="radio" name="scrollbar-style" value="thin" class="settings__radio" data-scrollbar-style aria-label="Thin scrollbar" checked />
|
|
261
|
+
<span>Thin</span>
|
|
262
|
+
</label>
|
|
263
|
+
<label class="settings__radio-label">
|
|
264
|
+
<input type="radio" name="scrollbar-style" value="thick" class="settings__radio" data-scrollbar-style aria-label="Thick scrollbar" />
|
|
265
|
+
<span>Thick</span>
|
|
266
|
+
</label>
|
|
267
|
+
<label class="settings__radio-label">
|
|
268
|
+
<input type="radio" name="scrollbar-style" value="hidden" class="settings__radio" data-scrollbar-style aria-label="Hidden scrollbars" />
|
|
269
|
+
<span>Hidden</span>
|
|
270
|
+
</label>
|
|
271
|
+
</div>
|
|
272
|
+
<p class="settings__help-text">Choose your preferred scrollbar appearance</p>
|
|
273
|
+
</div>
|
|
274
|
+
</section>
|
|
53
275
|
</div>
|
|
54
276
|
</div>
|
|
55
|
-
</
|
|
277
|
+
</div>
|
|
56
278
|
|
|
57
|
-
<
|
|
279
|
+
<main id="main-content" class="flex flex-col items-center justify-center text-center min-h-screen" style="padding: var(--spacing-12) var(--spacing-4); min-height: calc(100vh - 4rem);">
|
|
280
|
+
<span class="badge badge--primary badge--sm mb-4">Vanilla JS + Rizzo CSS</span>
|
|
281
|
+
<h1 style="font-size: clamp(2.5rem, 8vw, 4rem); font-weight: 800; line-height: 1.1; margin: 0 0 var(--spacing-4) 0; color: var(--text);">Build something great</h1>
|
|
282
|
+
<p style="font-size: var(--font-size-xl); color: var(--text-dim); max-width: 42ch; margin: 0 0 var(--spacing-8) 0; line-height: var(--line-height-relaxed);">Same design system as Astro and Svelte — 14 themes, 24 components, full keyboard and screen reader support.</p>
|
|
283
|
+
<div class="flex flex-wrap justify-center gap-4 mb-12">
|
|
284
|
+
<a href="https://rizzo-css.vercel.app/docs/getting-started" class="btn btn-primary" target="_blank" rel="noopener noreferrer">Get started</a>
|
|
285
|
+
<a href="https://rizzo-css.vercel.app/docs/components" class="btn btn-outline" target="_blank" rel="noopener noreferrer">Components</a>
|
|
286
|
+
<button type="button" class="btn btn-outline" onclick="window.showToast && window.showToast('Hello from Rizzo!', { variant: 'success' });">Show toast</button>
|
|
287
|
+
</div>
|
|
288
|
+
<div class="flex flex-wrap justify-center gap-3 mb-16">
|
|
289
|
+
<span class="badge badge--info">14 themes</span>
|
|
290
|
+
<span class="badge badge--info">24 components</span>
|
|
291
|
+
<span class="badge badge--info">WCAG AA</span>
|
|
292
|
+
</div>
|
|
293
|
+
<footer style="margin-top: auto; padding-top: var(--spacing-8); color: var(--text-dim); font-size: var(--font-size-sm);">
|
|
294
|
+
<a href="https://rizzo-css.vercel.app" class="text-accent" style="color: var(--accent);">Rizzo CSS</a> — design system for the web
|
|
295
|
+
</footer>
|
|
296
|
+
</main>
|
|
58
297
|
|
|
59
298
|
<script>
|
|
60
|
-
(function
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var
|
|
299
|
+
(function() {
|
|
300
|
+
var KEY = 'theme';
|
|
301
|
+
var defaultDark = 'github-dark-classic';
|
|
302
|
+
var defaultLight = 'github-light';
|
|
303
|
+
function resolveSystem() {
|
|
304
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches ? defaultDark : defaultLight;
|
|
305
|
+
}
|
|
64
306
|
function applyTheme(value) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
307
|
+
var effective = value === 'system' ? resolveSystem() : value;
|
|
308
|
+
document.documentElement.setAttribute('data-theme', effective);
|
|
309
|
+
try { localStorage.setItem(KEY, value); } catch (e) {}
|
|
310
|
+
var headerSelect = document.getElementById('theme-select');
|
|
311
|
+
var settingsSelect = document.getElementById('settings-theme');
|
|
312
|
+
if (headerSelect && headerSelect.value !== value) headerSelect.value = value;
|
|
313
|
+
if (settingsSelect && settingsSelect.value !== value) settingsSelect.value = value;
|
|
314
|
+
try { window.dispatchEvent(new CustomEvent('rizzo-theme-change', { detail: { themeValue: value, effective: effective } })); } catch (e) {}
|
|
315
|
+
}
|
|
316
|
+
function syncSelects() {
|
|
317
|
+
var stored = null;
|
|
318
|
+
try { stored = localStorage.getItem(KEY); } catch (e) {}
|
|
319
|
+
var value = stored || 'system';
|
|
320
|
+
var headerSelect = document.getElementById('theme-select');
|
|
321
|
+
var settingsSelect = document.getElementById('settings-theme');
|
|
322
|
+
if (headerSelect) headerSelect.value = value;
|
|
323
|
+
if (settingsSelect) settingsSelect.value = value;
|
|
324
|
+
}
|
|
325
|
+
var headerSelect = document.getElementById('theme-select');
|
|
326
|
+
var settingsSelect = document.getElementById('settings-theme');
|
|
327
|
+
if (headerSelect) headerSelect.addEventListener('change', function() { applyTheme(headerSelect.value); });
|
|
328
|
+
if (settingsSelect) settingsSelect.addEventListener('change', function() { applyTheme(settingsSelect.value); });
|
|
329
|
+
syncSelects();
|
|
330
|
+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function() {
|
|
331
|
+
if ((localStorage.getItem(KEY) || 'system') === 'system') applyTheme('system');
|
|
332
|
+
});
|
|
333
|
+
})();
|
|
334
|
+
</script>
|
|
335
|
+
<script>
|
|
336
|
+
(function initSettings() {
|
|
337
|
+
var settings = document.querySelector('[data-settings]');
|
|
338
|
+
if (!settings) return;
|
|
339
|
+
var overlay = settings.querySelector('[data-settings-overlay]');
|
|
340
|
+
var panel = settings.querySelector('.settings__panel');
|
|
341
|
+
var closeBtn = settings.querySelector('[data-settings-close]');
|
|
342
|
+
var fontSizeSlider = settings.querySelector('[data-font-size-slider]');
|
|
343
|
+
var fontSizeValue = settings.querySelector('[data-font-size-value]');
|
|
344
|
+
var reducedMotion = settings.querySelector('[data-reduced-motion]');
|
|
345
|
+
var highContrast = settings.querySelector('[data-high-contrast]');
|
|
346
|
+
var scrollbarStyleRadios = settings.querySelectorAll('[data-scrollbar-style]');
|
|
347
|
+
var html = document.documentElement;
|
|
348
|
+
if (!panel || !overlay || !closeBtn) return;
|
|
349
|
+
function updateSliderProgress(slider) {
|
|
350
|
+
var min = parseFloat(slider.min), max = parseFloat(slider.max), value = parseFloat(slider.value);
|
|
351
|
+
slider.style.setProperty('--slider-progress', ((value - min) / (max - min)) * 100 + '%');
|
|
352
|
+
}
|
|
353
|
+
function applyFontSize(scale) {
|
|
354
|
+
html.style.setProperty('--font-size-scale', scale);
|
|
355
|
+
if (fontSizeValue) fontSizeValue.textContent = Math.round(scale * 100) + '%';
|
|
356
|
+
}
|
|
357
|
+
function applyScrollbarStyle(style) {
|
|
358
|
+
html.classList.remove('scrollbar-thin', 'scrollbar-thick', 'scrollbar-hidden', 'hide-scrollbars');
|
|
359
|
+
if (style === 'thick') html.classList.add('scrollbar-thick');
|
|
360
|
+
else if (style === 'hidden') html.classList.add('scrollbar-hidden', 'hide-scrollbars');
|
|
361
|
+
}
|
|
362
|
+
function loadSettings() {
|
|
363
|
+
var saved = localStorage.getItem('fontSizeScale');
|
|
364
|
+
if (saved && fontSizeSlider) {
|
|
365
|
+
fontSizeSlider.value = saved;
|
|
366
|
+
applyFontSize(parseFloat(saved));
|
|
367
|
+
}
|
|
368
|
+
if (fontSizeSlider) updateSliderProgress(fontSizeSlider);
|
|
369
|
+
if (reducedMotion) {
|
|
370
|
+
reducedMotion.checked = localStorage.getItem('reducedMotion') === 'true';
|
|
371
|
+
html.classList.toggle('reduced-motion', reducedMotion.checked);
|
|
372
|
+
}
|
|
373
|
+
if (highContrast) {
|
|
374
|
+
highContrast.checked = localStorage.getItem('highContrast') === 'true';
|
|
375
|
+
html.classList.toggle('high-contrast', highContrast.checked);
|
|
376
|
+
}
|
|
377
|
+
var scrollbar = localStorage.getItem('scrollbarStyle') || 'thin';
|
|
378
|
+
for (var i = 0; i < scrollbarStyleRadios.length; i++) {
|
|
379
|
+
if (scrollbarStyleRadios[i].value === scrollbar) scrollbarStyleRadios[i].checked = true;
|
|
380
|
+
}
|
|
381
|
+
applyScrollbarStyle(scrollbar);
|
|
382
|
+
}
|
|
383
|
+
function getFocusable(container) {
|
|
384
|
+
var sel = 'button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])';
|
|
385
|
+
return Array.prototype.slice.call(container.querySelectorAll(sel));
|
|
386
|
+
}
|
|
387
|
+
var previousActive = null;
|
|
388
|
+
function openSettings() {
|
|
389
|
+
previousActive = document.activeElement;
|
|
390
|
+
settings.setAttribute('aria-hidden', 'false');
|
|
391
|
+
overlay.setAttribute('aria-hidden', 'false');
|
|
392
|
+
panel.setAttribute('aria-hidden', 'false');
|
|
393
|
+
panel.removeAttribute('data-open');
|
|
394
|
+
void panel.offsetHeight;
|
|
395
|
+
requestAnimationFrame(function() {
|
|
396
|
+
requestAnimationFrame(function() {
|
|
397
|
+
panel.setAttribute('data-open', 'true');
|
|
398
|
+
if (closeBtn) closeBtn.focus();
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
function closeSettings() {
|
|
403
|
+
panel.removeAttribute('data-open');
|
|
404
|
+
var duration = window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 0 : 300;
|
|
405
|
+
setTimeout(function() {
|
|
406
|
+
settings.setAttribute('aria-hidden', 'true');
|
|
407
|
+
overlay.setAttribute('aria-hidden', 'true');
|
|
408
|
+
panel.setAttribute('aria-hidden', 'true');
|
|
409
|
+
if (previousActive) {
|
|
410
|
+
previousActive.focus();
|
|
411
|
+
previousActive = null;
|
|
412
|
+
}
|
|
413
|
+
}, duration);
|
|
414
|
+
}
|
|
415
|
+
closeBtn.addEventListener('click', closeSettings);
|
|
416
|
+
overlay.addEventListener('click', closeSettings);
|
|
417
|
+
document.addEventListener('keydown', function(e) {
|
|
418
|
+
if (panel.getAttribute('data-open') !== 'true') return;
|
|
419
|
+
if (e.key === 'Escape') { e.preventDefault(); closeSettings(); return; }
|
|
420
|
+
if (e.key === 'Tab') {
|
|
421
|
+
var els = getFocusable(panel);
|
|
422
|
+
if (els.length === 0) return;
|
|
423
|
+
var first = els[0], last = els[els.length - 1], active = document.activeElement;
|
|
424
|
+
if (e.shiftKey) {
|
|
425
|
+
if (active === first || !panel.contains(active)) { e.preventDefault(); last.focus(); }
|
|
426
|
+
} else {
|
|
427
|
+
if (active === last || !panel.contains(active)) { e.preventDefault(); first.focus(); }
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
if (fontSizeSlider) {
|
|
432
|
+
fontSizeSlider.addEventListener('input', function() {
|
|
433
|
+
var scale = parseFloat(this.value);
|
|
434
|
+
applyFontSize(scale);
|
|
435
|
+
updateSliderProgress(this);
|
|
436
|
+
localStorage.setItem('fontSizeScale', scale);
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
if (reducedMotion) {
|
|
440
|
+
reducedMotion.addEventListener('change', function() {
|
|
441
|
+
html.classList.toggle('reduced-motion', this.checked);
|
|
442
|
+
localStorage.setItem('reducedMotion', this.checked);
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
if (highContrast) {
|
|
446
|
+
highContrast.addEventListener('change', function() {
|
|
447
|
+
html.classList.toggle('high-contrast', this.checked);
|
|
448
|
+
localStorage.setItem('highContrast', this.checked);
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
for (var j = 0; j < scrollbarStyleRadios.length; j++) {
|
|
452
|
+
scrollbarStyleRadios[j].addEventListener('change', function() {
|
|
453
|
+
if (this.checked) {
|
|
454
|
+
applyScrollbarStyle(this.value);
|
|
455
|
+
localStorage.setItem('scrollbarStyle', this.value);
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
loadSettings();
|
|
460
|
+
window.openSettings = openSettings;
|
|
74
461
|
})();
|
|
75
462
|
</script>
|
|
76
463
|
</body>
|
|
File without changes
|