rizzo-css 0.0.20 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +1 -1
  2. package/bin/rizzo-css.js +106 -27
  3. package/dist/fonts/.gitkeep +0 -0
  4. package/dist/fonts/GeistMono/GeistMonoVF.ttf +0 -0
  5. package/dist/fonts/GeistMono/GeistMonoVF.woff +0 -0
  6. package/dist/fonts/GeistMono/GeistMonoVF.woff2 +0 -0
  7. package/dist/fonts/GeistMono/LICENSE.TXT +92 -0
  8. package/dist/fonts/GeistSans/GeistVF.ttf +0 -0
  9. package/dist/fonts/GeistSans/GeistVF.woff +0 -0
  10. package/dist/fonts/GeistSans/GeistVF.woff2 +0 -0
  11. package/dist/fonts/GeistSans/LICENSE.TXT +92 -0
  12. package/dist/rizzo.min.css +1 -1
  13. package/package.json +1 -1
  14. package/scaffold/astro-minimal/README.md +1 -0
  15. package/scaffold/astro-minimal/src/layouts/Layout.astro +3 -4
  16. package/scaffold/vanilla/README.md +1 -1
  17. package/scaffold/vanilla/components/accordion.html +8 -0
  18. package/scaffold/vanilla/components/alert.html +8 -0
  19. package/scaffold/vanilla/components/avatar.html +8 -0
  20. package/scaffold/vanilla/components/badge.html +8 -0
  21. package/scaffold/vanilla/components/breadcrumb.html +8 -0
  22. package/scaffold/vanilla/components/button.html +8 -0
  23. package/scaffold/vanilla/components/cards.html +8 -0
  24. package/scaffold/vanilla/components/copy-to-clipboard.html +8 -0
  25. package/scaffold/vanilla/components/divider.html +8 -0
  26. package/scaffold/vanilla/components/dropdown.html +8 -0
  27. package/scaffold/vanilla/components/forms.html +8 -0
  28. package/scaffold/vanilla/components/icons.html +8 -0
  29. package/scaffold/vanilla/components/index.html +8 -0
  30. package/scaffold/vanilla/components/modal.html +8 -0
  31. package/scaffold/vanilla/components/navbar.html +8 -0
  32. package/scaffold/vanilla/components/pagination.html +8 -0
  33. package/scaffold/vanilla/components/progress-bar.html +8 -0
  34. package/scaffold/vanilla/components/search.html +8 -0
  35. package/scaffold/vanilla/components/settings.html +8 -0
  36. package/scaffold/vanilla/components/spinner.html +8 -0
  37. package/scaffold/vanilla/components/table.html +8 -0
  38. package/scaffold/vanilla/components/tabs.html +8 -0
  39. package/scaffold/vanilla/components/theme-switcher.html +8 -0
  40. package/scaffold/vanilla/components/toast.html +8 -0
  41. package/scaffold/vanilla/components/tooltip.html +8 -0
  42. package/scaffold/vanilla/index.html +8 -0
package/README.md CHANGED
@@ -56,7 +56,7 @@ import 'rizzo-css';
56
56
  **Without a bundler (plain HTML):** Use a CDN. Both unpkg and jsDelivr resolve the package root to the built CSS (via the `unpkg` / `jsdelivr` fields in this package). For reliability or to pin a version, use the explicit path:
57
57
 
58
58
  ```html
59
- <!-- unpkg (pin version: replace @latest with @0.0.20 or any version) -->
59
+ <!-- unpkg (pin version: replace @latest with @0.0.21 or any version) -->
60
60
  <link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />
61
61
 
62
62
  <!-- or jsDelivr -->
package/bin/rizzo-css.js CHANGED
@@ -9,6 +9,8 @@ const RIZZO_CONFIG_FILE = 'rizzo-css.json';
9
9
 
10
10
  const COMMANDS = ['init', 'add', 'theme', 'help'];
11
11
  const FRAMEWORKS = ['vanilla', 'astro', 'svelte'];
12
+ /** Supported package managers: detection, install/add commands, and --package-manager override. */
13
+ const VALID_PACKAGE_MANAGERS = ['npm', 'pnpm', 'yarn', 'bun'];
12
14
 
13
15
  /** Full = everything we ship. Minimal = recommended starting set. Manual = you choose. */
14
16
  const TEMPLATES = {
@@ -138,6 +140,24 @@ function getCssPath() {
138
140
  return join(getPackageRoot(), 'dist', 'rizzo.min.css');
139
141
  }
140
142
 
143
+ /** Copy package dist/fonts into <cssTargetDir>/fonts so CSS url(./fonts/...) resolves. cssTargetDir is framework-specific (public/css | static/css | css). */
144
+ function copyRizzoFonts(cssTargetDir) {
145
+ const fontsSrc = join(getPackageRoot(), 'dist', 'fonts');
146
+ if (!existsSync(fontsSrc)) return;
147
+ const dest = join(cssTargetDir, 'fonts');
148
+ mkdirSync(dest, { recursive: true });
149
+ const entries = readdirSync(fontsSrc, { withFileTypes: true });
150
+ for (const e of entries) {
151
+ const srcPath = join(fontsSrc, e.name);
152
+ const destPath = join(dest, e.name);
153
+ if (e.isDirectory()) {
154
+ copyDirRecursive(srcPath, destPath);
155
+ } else {
156
+ copyFileSync(srcPath, destPath);
157
+ }
158
+ }
159
+ }
160
+
141
161
  /** Copy the package LICENSE into the project dir. Call after every scaffold so every install includes a license. */
142
162
  function copyPackageLicense(projectDir) {
143
163
  const licensePath = join(getPackageRoot(), 'LICENSE');
@@ -187,6 +207,13 @@ function getFlagValue(argv, flag) {
187
207
  return i !== -1 && argv[i + 1] != null ? argv[i + 1] : null;
188
208
  }
189
209
 
210
+ /** Parse --package-manager value; returns npm|pnpm|yarn|bun or null if invalid/absent. */
211
+ function parsePackageManager(value) {
212
+ if (!value || typeof value !== 'string') return null;
213
+ const v = value.toLowerCase().trim();
214
+ return VALID_PACKAGE_MANAGERS.includes(v) ? v : null;
215
+ }
216
+
190
217
  /** Get positional args for a command (excludes --flag and --flag value). Used for e.g. add Button ThemeSwitcher. */
191
218
  function getPositionalArgs(argv) {
192
219
  const positionals = [];
@@ -251,13 +278,16 @@ function getCreateProjectExample(pm, framework) {
251
278
  return 'npm create ' + framework + '@latest my-app';
252
279
  }
253
280
 
254
- /** Prompt user to select package manager (npm, pnpm, yarn, bun). Puts detected first with "(detected)" label. Returns agent string. */
281
+ /** Prompt user to select package manager (npm, pnpm, yarn, bun). Shows "(detected)" only when we actually found a lockfile or packageManager; for new projects with no detection, user chooses. Returns agent string. */
255
282
  async function promptPackageManager(projectDir) {
256
- const detected = resolvePackageManager(projectDir, process.cwd());
283
+ const actuallyDetected = detectPackageManager(projectDir) || detectPackageManager(process.cwd());
284
+ const resolved = actuallyDetected
285
+ ? getPackageManagerCommands(actuallyDetected)
286
+ : null;
257
287
  const agents = ['npm', 'pnpm', 'yarn', 'bun'];
258
288
  const options = agents.map((a) => ({
259
289
  value: a,
260
- label: a === detected.agent ? a + ' (detected)' : a,
290
+ label: (resolved && a === resolved.agent) ? a + ' (detected)' : a,
261
291
  }));
262
292
  return selectMenu(options, '? Package manager (for install and run commands)');
263
293
  }
@@ -278,6 +308,12 @@ function question(prompt) {
278
308
  });
279
309
  }
280
310
 
311
+ /** Prompt yes/no; default yes. Returns true to run, false to skip. */
312
+ async function confirmRunInstall(pm) {
313
+ const answer = await question('\nRun ' + pm.install + ' now? (Y/n) ');
314
+ return answer === '' || /^y(es)?$/i.test(answer);
315
+ }
316
+
281
317
  /** Format label with optional ANSI color (item.color). */
282
318
  function formatLabel(item) {
283
319
  const text = item.label || item.value;
@@ -558,16 +594,21 @@ Options (init):
558
594
  --yes Non-interactive: scaffold new in cwd with defaults (framework: astro, template: full)
559
595
  --framework <fw> vanilla | astro | svelte (with --yes; otherwise first prompt)
560
596
  --template <t> full | minimal | manual (all frameworks); with --yes defaults to full
561
- --install After scaffolding, run package manager install (new project)
562
- --no-install Do not run install
563
- --write-config Write rizzo-css.json (targetDir, framework, packageManager) in the project
597
+ --package-manager <pm> npm | pnpm | yarn | bun (with --yes, or skip PM prompt when interactive)
598
+ --install After scaffolding, run package manager install (no prompt)
599
+ --no-install Do not run install and do not prompt
600
+ (rizzo-css.json is always written for new and existing projects; interactive run prompts "Run install now? (Y/n)" for Astro/Svelte.)
564
601
 
565
602
  Options (add):
566
603
  --path <dir> Target directory for rizzo.min.css (overrides config and framework default)
567
604
  --framework <fw> vanilla | astro | svelte (overrides config and detection)
605
+ --package-manager <pm> npm | pnpm | yarn | bun (override detection for install/print commands)
568
606
  --install-package After copying CSS, run package manager add rizzo-css
569
607
  --no-install Do not run install or add (overrides --install-package)
570
608
 
609
+ Package managers:
610
+ Supported: npm, pnpm, yarn, bun. Detection: lockfiles (pnpm-lock.yaml, yarn.lock, bun.lockb, package-lock.json) or package.json "packageManager"/"devEngines.packageManager". Use --package-manager to override.
611
+
571
612
  Config:
572
613
  Optional rizzo-css.json in project root: { "targetDir", "framework", "packageManager" }.
573
614
  Used by add and init when present. Detection: lockfiles and packageManager field in package.json.
@@ -585,9 +626,11 @@ Use framework CLI first, then add Rizzo CSS (match your package manager):
585
626
 
586
627
  Examples:
587
628
  npx rizzo-css init
588
- npx rizzo-css init --yes --framework astro --install --write-config
629
+ npx rizzo-css init --yes --framework astro --install
630
+ npx rizzo-css init --yes --framework astro --package-manager pnpm --install
589
631
  npx rizzo-css init --yes --framework vanilla
590
632
  npx rizzo-css init --yes --framework svelte --template full
633
+ npx rizzo-css add --package-manager yarn --install-package
591
634
  npx rizzo-css add
592
635
  npx rizzo-css add Button
593
636
  npx rizzo-css add Button ThemeSwitcher --path public/css --framework svelte
@@ -667,11 +710,20 @@ function detectFramework(cwd) {
667
710
  return null;
668
711
  }
669
712
 
670
- /** Default CSS directory and link href for a framework (for add command). */
713
+ /**
714
+ * Framework-specific paths for CSS and static assets. Use these so fonts, sounds, images
715
+ * go in the right place per framework (Astro: public/, SvelteKit: static/, Vanilla: project root).
716
+ * - targetDir: where rizzo.min.css is copied (fonts go in targetDir/fonts so CSS ./fonts/ resolves).
717
+ * - assetsRoot: root for other static assets (sounds, images); use assetsRoot + '/sounds' etc. when we ship them.
718
+ */
671
719
  function getFrameworkCssPaths(framework) {
672
- if (framework === 'svelte') return { targetDir: 'static/css', linkHref: '/css/rizzo.min.css' };
673
- if (framework === 'astro') return { targetDir: 'public/css', linkHref: '/css/rizzo.min.css' };
674
- return { targetDir: 'css', linkHref: 'css/rizzo.min.css' };
720
+ if (framework === 'svelte') {
721
+ return { targetDir: 'static/css', linkHref: '/css/rizzo.min.css', fontsDir: 'static/css/fonts', assetsRoot: 'static' };
722
+ }
723
+ if (framework === 'astro') {
724
+ return { targetDir: 'public/css', linkHref: '/css/rizzo.min.css', fontsDir: 'public/css/fonts', assetsRoot: 'public' };
725
+ }
726
+ return { targetDir: 'css', linkHref: 'css/rizzo.min.css', fontsDir: 'css/fonts', assetsRoot: '' };
675
727
  }
676
728
 
677
729
  /**
@@ -702,16 +754,20 @@ async function cmdAdd(argv) {
702
754
 
703
755
  const cwd = process.cwd();
704
756
  const config = readRizzoConfig(cwd);
757
+ const pmOverride = parsePackageManager(getFlagValue(argv, '--package-manager'));
705
758
  const options = {
706
759
  config,
707
760
  targetDir: customPath || (config && config.targetDir) || undefined,
761
+ packageManager: pmOverride || undefined,
708
762
  preselectedComponents: positionals.length > 0 ? positionals : undefined,
709
763
  };
710
764
  await runAddToExisting(explicitFramework, options);
711
765
  if (installPackage && !noInstall) {
712
- const pm = (config && config.packageManager)
713
- ? getPackageManagerCommands({ agent: config.packageManager, command: config.packageManager })
714
- : resolvePackageManager(cwd);
766
+ const pm = (pmOverride
767
+ ? getPackageManagerCommands({ agent: pmOverride, command: pmOverride })
768
+ : (config && config.packageManager)
769
+ ? getPackageManagerCommands({ agent: config.packageManager, command: config.packageManager })
770
+ : resolvePackageManager(cwd));
715
771
  const addPkg = pm.add('rizzo-css');
716
772
  console.log('\nRunning: ' + addPkg);
717
773
  const code = runInDir(cwd, addPkg);
@@ -1027,6 +1083,7 @@ async function runAddToExisting(frameworkOverride, options) {
1027
1083
  const cssTarget = join(targetDir, 'rizzo.min.css');
1028
1084
  mkdirSync(targetDir, { recursive: true });
1029
1085
  copyFileSync(cssSource, cssTarget);
1086
+ copyRizzoFonts(targetDir);
1030
1087
 
1031
1088
  copyRizzoIcons(cwd, framework);
1032
1089
  if (framework === 'svelte' && selectedComponents.length > 0) {
@@ -1040,12 +1097,17 @@ async function runAddToExisting(frameworkOverride, options) {
1040
1097
  }
1041
1098
 
1042
1099
  const linkHref = (options && options.targetDir) ? getLinkHrefForTargetDir(framework, options.targetDir) : paths.linkHref;
1043
- const pm = (config && config.packageManager)
1044
- ? getPackageManagerCommands({ agent: config.packageManager, command: config.packageManager })
1045
- : resolvePackageManager(cwd);
1100
+ const pmFromOption = options && options.packageManager && VALID_PACKAGE_MANAGERS.includes(options.packageManager);
1101
+ const pm = pmFromOption
1102
+ ? getPackageManagerCommands({ agent: options.packageManager, command: options.packageManager })
1103
+ : (config && config.packageManager)
1104
+ ? getPackageManagerCommands({ agent: config.packageManager, command: config.packageManager })
1105
+ : resolvePackageManager(cwd);
1046
1106
  const cliExample = pm.dlx('rizzo-css theme');
1107
+ writeRizzoConfig(cwd, { targetDir: targetDirRaw, framework, packageManager: pm.agent });
1047
1108
  console.log('\n✓ Rizzo CSS added to your existing project');
1048
1109
  console.log(' - ' + cssTarget);
1110
+ console.log(' - Wrote ' + RIZZO_CONFIG_FILE);
1049
1111
  console.log('\nYou must add the stylesheet link yourself — it is not added automatically.');
1050
1112
  if (framework === 'svelte') {
1051
1113
  console.log('\nIn your root layout (e.g. src/app.html), add:');
@@ -1081,7 +1143,6 @@ async function cmdInit(argv) {
1081
1143
  const yes = hasFlag(argv, '--yes');
1082
1144
  const runInstallAfterScaffold = hasFlag(argv, '--install');
1083
1145
  const noInstall = hasFlag(argv, '--no-install');
1084
- const writeConfig = hasFlag(argv, '--write-config');
1085
1146
  const cwd = process.cwd();
1086
1147
  const config = readRizzoConfig(cwd);
1087
1148
 
@@ -1107,7 +1168,8 @@ async function cmdInit(argv) {
1107
1168
  }
1108
1169
  const projectDir = cwd;
1109
1170
  const resolved = resolvePackageManager(projectDir, cwd);
1110
- selectedPm = (config && config.packageManager) || resolved.agent || 'npm';
1171
+ const pmArg = getFlagValue(argv, '--package-manager');
1172
+ selectedPm = parsePackageManager(pmArg) || (config && config.packageManager) || resolved.agent || 'npm';
1111
1173
  theme = 'system';
1112
1174
  defaultDark = DARK_THEMES[0];
1113
1175
  defaultLight = LIGHT_THEMES[0];
@@ -1168,7 +1230,8 @@ async function cmdInit(argv) {
1168
1230
  }
1169
1231
 
1170
1232
  const projectDirForPm = name ? join(cwd, name) : cwd;
1171
- selectedPm = await promptPackageManager(projectDirForPm);
1233
+ const pmArg = getFlagValue(argv, '--package-manager');
1234
+ selectedPm = parsePackageManager(pmArg) || await promptPackageManager(projectDirForPm);
1172
1235
  }
1173
1236
 
1174
1237
  const projectDir = name ? join(cwd, name) : cwd;
@@ -1226,6 +1289,7 @@ async function cmdInit(argv) {
1226
1289
  mkdirSync(join(projectDir, 'public', 'css'), { recursive: true });
1227
1290
  cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
1228
1291
  copyFileSync(cssSource, cssTarget);
1292
+ copyRizzoFonts(dirname(cssTarget));
1229
1293
  if (statSync(cssTarget).size < 5000) {
1230
1294
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
1231
1295
  }
@@ -1240,6 +1304,7 @@ async function cmdInit(argv) {
1240
1304
  mkdirSync(join(projectDir, 'public', 'css'), { recursive: true });
1241
1305
  cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
1242
1306
  copyFileSync(cssSource, cssTarget);
1307
+ copyRizzoFonts(dirname(cssTarget));
1243
1308
  if (statSync(cssTarget).size < 5000) {
1244
1309
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
1245
1310
  }
@@ -1254,6 +1319,7 @@ async function cmdInit(argv) {
1254
1319
  mkdirSync(join(projectDir, 'static', 'css'), { recursive: true });
1255
1320
  cssTarget = join(projectDir, 'static', 'css', 'rizzo.min.css');
1256
1321
  copyFileSync(cssSource, cssTarget);
1322
+ copyRizzoFonts(dirname(cssTarget));
1257
1323
  if (statSync(cssTarget).size < 5000) {
1258
1324
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
1259
1325
  }
@@ -1268,6 +1334,7 @@ async function cmdInit(argv) {
1268
1334
  mkdirSync(join(projectDir, 'static', 'css'), { recursive: true });
1269
1335
  cssTarget = join(projectDir, 'static', 'css', 'rizzo.min.css');
1270
1336
  copyFileSync(cssSource, cssTarget);
1337
+ copyRizzoFonts(dirname(cssTarget));
1271
1338
  if (statSync(cssTarget).size < 5000) {
1272
1339
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
1273
1340
  }
@@ -1282,6 +1349,7 @@ async function cmdInit(argv) {
1282
1349
  const linkHref = 'css/rizzo.min.css';
1283
1350
  mkdirSync(cssDir, { recursive: true });
1284
1351
  copyFileSync(cssSource, cssTarget);
1352
+ copyRizzoFonts(dirname(cssTarget));
1285
1353
  if (statSync(cssTarget).size < 5000) {
1286
1354
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
1287
1355
  }
@@ -1314,6 +1382,7 @@ async function cmdInit(argv) {
1314
1382
  cssTarget = join(cssDir, 'rizzo.min.css');
1315
1383
  mkdirSync(cssDir, { recursive: true });
1316
1384
  copyFileSync(cssSource, cssTarget);
1385
+ copyRizzoFonts(dirname(cssTarget));
1317
1386
  if (statSync(cssTarget).size < 5000) {
1318
1387
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
1319
1388
  }
@@ -1337,6 +1406,7 @@ async function cmdInit(argv) {
1337
1406
  cssTarget = join(cssDir, 'rizzo.min.css');
1338
1407
  mkdirSync(cssDir, { recursive: true });
1339
1408
  copyFileSync(cssSource, cssTarget);
1409
+ copyRizzoFonts(dirname(cssTarget));
1340
1410
  if (statSync(cssTarget).size < 5000) {
1341
1411
  console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
1342
1412
  }
@@ -1387,19 +1457,28 @@ async function cmdInit(argv) {
1387
1457
  const pm = getPackageManagerCommands({ agent: selectedPm, command: selectedPm });
1388
1458
  const nextStep = pm.install + ' && ' + pm.run('dev');
1389
1459
  const runPrefix = name ? 'cd ' + name + ' && ' : '';
1460
+ const hasPackageJson = useHandpickAstro || useHandpickSvelte || useAstroBase || useSvelteBase;
1390
1461
 
1391
- if (runInstallAfterScaffold && !noInstall && (useHandpickAstro || useHandpickSvelte || useAstroBase || useSvelteBase)) {
1462
+ // Always write rizzo-css.json for new projects (targetDir, framework, packageManager).
1463
+ const pathsForConfig = getFrameworkCssPaths(framework);
1464
+ writeRizzoConfig(projectDir, { targetDir: pathsForConfig.targetDir, framework, packageManager: selectedPm });
1465
+ console.log(' - Wrote ' + RIZZO_CONFIG_FILE);
1466
+
1467
+ if (runInstallAfterScaffold && !noInstall && hasPackageJson) {
1392
1468
  console.log('\nRunning: ' + pm.install);
1393
1469
  const code = runInDir(projectDir, pm.install);
1394
1470
  if (code !== 0) {
1395
1471
  console.error('\nInstall failed (exit ' + code + '). Run manually: ' + runPrefix + pm.install);
1396
1472
  }
1397
- }
1398
-
1399
- if (writeConfig) {
1400
- const pathsForConfig = getFrameworkCssPaths(framework);
1401
- writeRizzoConfig(projectDir, { targetDir: pathsForConfig.targetDir, framework, packageManager: selectedPm });
1402
- console.log('\n - Wrote ' + RIZZO_CONFIG_FILE);
1473
+ } else if (!yes && !noInstall && hasPackageJson) {
1474
+ const shouldRun = await confirmRunInstall(pm);
1475
+ if (shouldRun) {
1476
+ console.log('\nRunning: ' + pm.install);
1477
+ const code = runInDir(projectDir, pm.install);
1478
+ if (code !== 0) {
1479
+ console.error('\nInstall failed (exit ' + code + '). Run manually: ' + runPrefix + pm.install);
1480
+ }
1481
+ }
1403
1482
  }
1404
1483
 
1405
1484
  if (useHandpickAstro || useHandpickSvelte) {
File without changes
@@ -0,0 +1,92 @@
1
+ Geist Sans and Geist Mono Font
2
+ (C) 2023 Vercel, made in collaboration with basement.studio
3
+
4
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
5
+ This license is available with a FAQ at: http://scripts.sil.org/OFL and copied below
6
+
7
+ -----------------------------------------------------------
8
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
9
+ -----------------------------------------------------------
10
+
11
+ PREAMBLE
12
+ The goals of the Open Font License (OFL) are to stimulate worldwide
13
+ development of collaborative font projects, to support the font creation
14
+ efforts of academic and linguistic communities, and to provide a free and
15
+ open framework in which fonts may be shared and improved in partnership
16
+ with others.
17
+
18
+ The OFL allows the licensed fonts to be used, studied, modified and
19
+ redistributed freely as long as they are not sold by themselves. The
20
+ fonts, including any derivative works, can be bundled, embedded,
21
+ redistributed and/or sold with any software provided that any reserved
22
+ names are not used by derivative works. The fonts and derivatives,
23
+ however, cannot be released under any other type of license. The
24
+ requirement for fonts to remain under this license does not apply
25
+ to any document created using the fonts or their derivatives.
26
+
27
+ DEFINITIONS
28
+ "Font Software" refers to the set of files released by the Copyright
29
+ Holder(s) under this license and clearly marked as such. This may
30
+ include source files, build scripts and documentation.
31
+
32
+ "Reserved Font Name" refers to any names specified as such after the
33
+ copyright statement(s).
34
+
35
+ "Original Version" refers to the collection of Font Software components as
36
+ distributed by the Copyright Holder(s).
37
+
38
+ "Modified Version" refers to any derivative made by adding to, deleting,
39
+ or substituting -- in part or in whole -- any of the components of the
40
+ Original Version, by changing formats or by porting the Font Software to a
41
+ new environment.
42
+
43
+ "Author" refers to any designer, engineer, programmer, technical
44
+ writer or other person who contributed to the Font Software.
45
+
46
+ PERMISSION AND CONDITIONS
47
+ Permission is hereby granted, free of charge, to any person obtaining
48
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
49
+ redistribute, and sell modified and unmodified copies of the Font
50
+ Software, subject to the following conditions:
51
+
52
+ 1) Neither the Font Software nor any of its individual components,
53
+ in Original or Modified Versions, may be sold by itself.
54
+
55
+ 2) Original or Modified Versions of the Font Software may be bundled,
56
+ redistributed and/or sold with any software, provided that each copy
57
+ contains the above copyright notice and this license. These can be
58
+ included either as stand-alone text files, human-readable headers or
59
+ in the appropriate machine-readable metadata fields within text or
60
+ binary files as long as those fields can be easily viewed by the user.
61
+
62
+ 3) No Modified Version of the Font Software may use the Reserved Font
63
+ Name(s) unless explicit written permission is granted by the corresponding
64
+ Copyright Holder. This restriction only applies to the primary font name as
65
+ presented to the users.
66
+
67
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
68
+ Software shall not be used to promote, endorse or advertise any
69
+ Modified Version, except to acknowledge the contribution(s) of the
70
+ Copyright Holder(s) and the Author(s) or with their explicit written
71
+ permission.
72
+
73
+ 5) The Font Software, modified or unmodified, in part or in whole,
74
+ must be distributed entirely under this license, and must not be
75
+ distributed under any other license. The requirement for fonts to
76
+ remain under this license does not apply to any document created
77
+ using the Font Software.
78
+
79
+ TERMINATION
80
+ This license becomes null and void if any of the above conditions are
81
+ not met.
82
+
83
+ DISCLAIMER
84
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
86
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
87
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
88
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
89
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
90
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
91
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
92
+ OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file
@@ -0,0 +1,92 @@
1
+ Geist Sans and Geist Mono Font
2
+ (C) 2023 Vercel, made in collaboration with basement.studio
3
+
4
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
5
+ This license is available with a FAQ at: http://scripts.sil.org/OFL and copied below
6
+
7
+ -----------------------------------------------------------
8
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
9
+ -----------------------------------------------------------
10
+
11
+ PREAMBLE
12
+ The goals of the Open Font License (OFL) are to stimulate worldwide
13
+ development of collaborative font projects, to support the font creation
14
+ efforts of academic and linguistic communities, and to provide a free and
15
+ open framework in which fonts may be shared and improved in partnership
16
+ with others.
17
+
18
+ The OFL allows the licensed fonts to be used, studied, modified and
19
+ redistributed freely as long as they are not sold by themselves. The
20
+ fonts, including any derivative works, can be bundled, embedded,
21
+ redistributed and/or sold with any software provided that any reserved
22
+ names are not used by derivative works. The fonts and derivatives,
23
+ however, cannot be released under any other type of license. The
24
+ requirement for fonts to remain under this license does not apply
25
+ to any document created using the fonts or their derivatives.
26
+
27
+ DEFINITIONS
28
+ "Font Software" refers to the set of files released by the Copyright
29
+ Holder(s) under this license and clearly marked as such. This may
30
+ include source files, build scripts and documentation.
31
+
32
+ "Reserved Font Name" refers to any names specified as such after the
33
+ copyright statement(s).
34
+
35
+ "Original Version" refers to the collection of Font Software components as
36
+ distributed by the Copyright Holder(s).
37
+
38
+ "Modified Version" refers to any derivative made by adding to, deleting,
39
+ or substituting -- in part or in whole -- any of the components of the
40
+ Original Version, by changing formats or by porting the Font Software to a
41
+ new environment.
42
+
43
+ "Author" refers to any designer, engineer, programmer, technical
44
+ writer or other person who contributed to the Font Software.
45
+
46
+ PERMISSION AND CONDITIONS
47
+ Permission is hereby granted, free of charge, to any person obtaining
48
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
49
+ redistribute, and sell modified and unmodified copies of the Font
50
+ Software, subject to the following conditions:
51
+
52
+ 1) Neither the Font Software nor any of its individual components,
53
+ in Original or Modified Versions, may be sold by itself.
54
+
55
+ 2) Original or Modified Versions of the Font Software may be bundled,
56
+ redistributed and/or sold with any software, provided that each copy
57
+ contains the above copyright notice and this license. These can be
58
+ included either as stand-alone text files, human-readable headers or
59
+ in the appropriate machine-readable metadata fields within text or
60
+ binary files as long as those fields can be easily viewed by the user.
61
+
62
+ 3) No Modified Version of the Font Software may use the Reserved Font
63
+ Name(s) unless explicit written permission is granted by the corresponding
64
+ Copyright Holder. This restriction only applies to the primary font name as
65
+ presented to the users.
66
+
67
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
68
+ Software shall not be used to promote, endorse or advertise any
69
+ Modified Version, except to acknowledge the contribution(s) of the
70
+ Copyright Holder(s) and the Author(s) or with their explicit written
71
+ permission.
72
+
73
+ 5) The Font Software, modified or unmodified, in part or in whole,
74
+ must be distributed entirely under this license, and must not be
75
+ distributed under any other license. The requirement for fonts to
76
+ remain under this license does not apply to any document created
77
+ using the Font Software.
78
+
79
+ TERMINATION
80
+ This license becomes null and void if any of the above conditions are
81
+ not met.
82
+
83
+ DISCLAIMER
84
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
86
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
87
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
88
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
89
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
90
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
91
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
92
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -1,4 +1,4 @@
1
- @font-face{font-display:swap;font-family:Geist Sans;font-style:normal;font-weight:100 900;src:url(../assets/fonts/GeistSans/GeistVF.woff2) format("woff2"),url(../assets/fonts/GeistSans/GeistVF.woff) format("woff")}:root{--primary-color:oklch(45.2% 0.198 250.1deg);--secondary-color:oklch(25.1% 0 0deg);--font-family-sans:"Geist Sans",system-ui,-apple-system,blinkmacsystemfont,"Segoe UI",roboto,"Helvetica Neue",arial,sans-serif;--font-family-serif:georgia,"Times New Roman",times,serif;--font-family-mono:"SF Mono",monaco,"Cascadia Code","Roboto Mono",consolas,"Courier New",monospace;--font-family:var(--font-family-sans);--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-size-scale:1;--font-size-xs:calc(0.75rem*var(--font-size-scale));--font-size-sm:calc(0.875rem*var(--font-size-scale));--font-size-base:calc(1rem*var(--font-size-scale));--font-size-lg:calc(1.125rem*var(--font-size-scale));--font-size-xl:calc(1.25rem*var(--font-size-scale));--font-size-2xl:calc(1.5rem*var(--font-size-scale));--font-size-3xl:calc(1.875rem*var(--font-size-scale));--font-size-4xl:calc(2.25rem*var(--font-size-scale));--font-size-5xl:calc(3rem*var(--font-size-scale));--font-size-6xl:calc(3.75rem*var(--font-size-scale));--line-height-tight:1.25;--line-height-snug:1.375;--line-height-normal:1.5;--line-height-relaxed:1.625;--line-height-loose:2;--letter-spacing-tighter:-0.05em;--letter-spacing-tight:-0.025em;--letter-spacing-normal:0;--letter-spacing-wide:0.025em;--letter-spacing-wider:0.05em;--letter-spacing-widest:0.1em;--spacing-0:0;--spacing-1:0.25rem;--spacing-2:0.5rem;--spacing-3:0.75rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-8:2rem;--spacing-10:2.5rem;--spacing-12:3rem;--spacing-16:4rem;--spacing-20:5rem;--spacing-24:6rem;--spacing-0-125:0.125rem;--spacing-0-375:0.375rem;--spacing-0-625:0.625rem;--spacing-0-875:0.875rem;--spacing-28:7rem;--spacing-32:8rem;--spacing-36:9rem;--spacing-40:10rem;--spacing-48:12rem;--spacing-56:14rem;--spacing-64:16rem;--spacing-72:18rem;--spacing-80:20rem;--spacing-96:24rem;--spacing-50:12.5rem;--spacing-100:25rem;--spacing-150:37.5rem;--spacing-14:3.5rem;--spacing-15:3.75rem;--spacing-75:18.75rem;--spacing-175:43.75rem;--spacing-70:17.5rem;--spacing-105:26.25rem;--spacing-2500:2500rem;--radius-none:0;--radius-sm:0.125rem;--radius:0.25rem;--radius-md:0.375rem;--radius-lg:0.5rem;--radius-xl:0.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--radius-full:9999px;--radius-circle:50%;--z-base:0;--z-1:1;--z-2:2;--z-3:3;--z-10:10;--z-dropdown:10;--z-dropdown-submenu:11;--z-sticky:50;--z-fixed:100;--z-search-overlay:98;--z-search-panel:99;--z-modal-backdrop:1999;--z-modal:2000;--z-tooltip:3000;--z-toast:4000;--z-settings:10000;--z-navbar:5000;--toast-top-offset:calc(var(--spacing-16) + var(--spacing-4));--z-navbar-mobile-menu-open:5100;--z-skip-link:10001;--z-navbar-mobile-menu:101;--z-navbar-search-overlay:98;--z-navbar-search-panel:99;--z-navbar-mobile-search-overlay:101;--z-navbar-mobile-search-panel:102;--transition-fast:150ms;--transition-base:200ms;--transition-slow:300ms;--transition-slower:350ms;--transition-slowest:400ms;--transition-ease-out:300ms ease-out;--transition-ease-in:300ms ease-in;--theme-transition-duration:0.2s;--blur-sm:4px;--blur:8px;--blur-md:12px;--blur-lg:16px;--outline-width:2px;--outline-offset:2px;--container-sm:640px;--container-md:768px;--container-lg:1024px;--container-xl:1280px;--container-2xl:1536px;--container-default:1200px;--vh-70:70vh;--vh-80:80vh;--vh-90:90vh;--touch-target-min:3rem;--theme-switcher-width:var(--spacing-96);--max-height-dropdown:600px;--max-height-modal:32rem;--max-width-modal-lg:48rem;--max-height-navbar-submenu:2000px;--ease-in-out-cubic:cubic-bezier(0.4,0,0.2,1);--scale-80:0.8;--scale-95:0.95;--scale-100:1;--scale-110:1.1;--border-width:1px;--border-width-2:2px;--border-width-3:3px;--border-width-4:4px;--border-width-arrow:6px;--border-width-accent:3px;--opacity-0:0;--opacity-50:0.5;--opacity-60:0.6;--opacity-70:0.7;--opacity-80:0.8;--opacity-90:0.9;--opacity-100:1;--background:oklch(100% 0 0deg);--background-alt:oklch(96.9% 0 0deg);--text:oklch(25.1% 0 0deg);--text-dim:oklch(50.2% 0 0deg);--icon:var(--text);--icon-dim:var(--text-dim);--border:oklch(90.2% 0 0deg);--accent:oklch(45.2% 0.198 250.1deg);--accent-hover:oklch(40.2% 0.198 250.1deg);--accent-text:oklch(100% 0 0deg);--accent-text-on-hover:var(--accent-text);--success:oklch(60.2% 0.182 145.1deg);--success-hover:oklch(70% 0.16 145deg);--success-text:oklch(20% 0 0deg);--success-text-on-solid:var(--success-text);--warning:oklch(80.2% 0.152 90.1deg);--warning-hover:oklch(88% 0.12 90deg);--warning-text:oklch(100% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 90deg);--text-on-solid-hover:oklch(22% 0.02 0deg);--error:oklch(55.2% 0.218 25.1deg);--error-hover:oklch(65% 0.18 25deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:var(--error-text);--info:oklch(60.2% 0.118 210.1deg);--info-hover:oklch(70% 0.1 210deg);--info-text:oklch(20% 0 0deg);--info-text-on-solid:var(--info-text);--selection:oklch(70% 0.15 250deg);--color-neutral-50:oklch(98% 0 0deg);--color-neutral-100:oklch(96% 0.005 264deg);--color-neutral-200:oklch(91% 0.008 264deg);--color-neutral-300:oklch(84% 0.01 264deg);--color-neutral-400:oklch(63% 0.012 264deg);--color-neutral-500:oklch(50% 0.014 264deg);--color-neutral-600:oklch(40% 0.012 264deg);--color-neutral-700:oklch(32% 0.01 264deg);--color-neutral-800:oklch(24% 0.008 264deg);--color-neutral-900:oklch(16% 0.006 264deg);--color-neutral-950:oklch(10% 0.004 264deg);--color-accent-50:oklch(from var(--accent) 0.97deg 0.03 h);--color-accent-100:oklch(from var(--accent) 0.93deg 0.06 h);--color-accent-200:oklch(from var(--accent) 0.88deg 0.1 h);--color-accent-300:oklch(from var(--accent) 0.78deg 0.14 h);--color-accent-400:oklch(from var(--accent) 0.65deg 0.16 h);--color-accent-500:var(--accent);--color-accent-600:oklch(from var(--accent) 0.45deg 0.18 h);--color-accent-700:oklch(from var(--accent) 0.38deg 0.16 h);--color-accent-800:oklch(from var(--accent) 0.3deg 0.12 h);--color-accent-900:oklch(from var(--accent) 0.22deg 0.08 h);--color-accent-950:oklch(from var(--accent) 0.15deg 0.05 h);--color-success-50:oklch(from var(--success) 0.97deg 0.03 h);--color-success-100:oklch(from var(--success) 0.93deg 0.06 h);--color-success-200:oklch(from var(--success) 0.88deg 0.1 h);--color-success-300:oklch(from var(--success) 0.78deg 0.14 h);--color-success-400:oklch(from var(--success) 0.65deg 0.16 h);--color-success-500:var(--success);--color-success-600:oklch(from var(--success) 0.45deg 0.18 h);--color-success-700:oklch(from var(--success) 0.38deg 0.16 h);--color-success-800:oklch(from var(--success) 0.3deg 0.12 h);--color-success-900:oklch(from var(--success) 0.22deg 0.08 h);--color-success-950:oklch(from var(--success) 0.15deg 0.05 h);--color-warning-50:oklch(from var(--warning) 0.97deg 0.03 h);--color-warning-100:oklch(from var(--warning) 0.93deg 0.06 h);--color-warning-200:oklch(from var(--warning) 0.88deg 0.1 h);--color-warning-300:oklch(from var(--warning) 0.82deg 0.12 h);--color-warning-400:oklch(from var(--warning) 0.75deg 0.14 h);--color-warning-500:var(--warning);--color-warning-600:oklch(from var(--warning) 0.55deg 0.14 h);--color-warning-700:oklch(from var(--warning) 0.45deg 0.12 h);--color-warning-800:oklch(from var(--warning) 0.35deg 0.1 h);--color-warning-900:oklch(from var(--warning) 0.25deg 0.06 h);--color-warning-950:oklch(from var(--warning) 0.18deg 0.04 h);--color-error-50:oklch(from var(--error) 0.97deg 0.03 h);--color-error-100:oklch(from var(--error) 0.93deg 0.06 h);--color-error-200:oklch(from var(--error) 0.88deg 0.1 h);--color-error-300:oklch(from var(--error) 0.78deg 0.14 h);--color-error-400:oklch(from var(--error) 0.65deg 0.18 h);--color-error-500:var(--error);--color-error-600:oklch(from var(--error) 0.45deg 0.2 h);--color-error-700:oklch(from var(--error) 0.38deg 0.18 h);--color-error-800:oklch(from var(--error) 0.3deg 0.14 h);--color-error-900:oklch(from var(--error) 0.22deg 0.1 h);--color-error-950:oklch(from var(--error) 0.15deg 0.06 h);--color-info-50:oklch(from var(--info) 0.97deg 0.03 h);--color-info-100:oklch(from var(--info) 0.93deg 0.06 h);--color-info-200:oklch(from var(--info) 0.88deg 0.08 h);--color-info-300:oklch(from var(--info) 0.78deg 0.1 h);--color-info-400:oklch(from var(--info) 0.65deg 0.12 h);--color-info-500:var(--info);--color-info-600:oklch(from var(--info) 0.45deg 0.12 h);--color-info-700:oklch(from var(--info) 0.38deg 0.1 h);--color-info-800:oklch(from var(--info) 0.3deg 0.08 h);--color-info-900:oklch(from var(--info) 0.22deg 0.06 h);--color-info-950:oklch(from var(--info) 0.15deg 0.04 h);--alert-bg:oklch(from var(--background-alt) calc(l * 0.92) c h);--alert-success-bg:var(--color-success-200);--alert-error-bg:var(--color-error-200);--alert-warning-bg:var(--color-warning-200);--alert-info-bg:var(--color-info-200);--shadow-color:oklch(0% 0 0deg);--shadow-sm:0 1px 2px 0 oklch(from var(--shadow-color) l c h/5%);--shadow:0 1px 3px 0 oklch(from var(--shadow-color) l c h/10%),0 1px 2px -1px oklch(from var(--shadow-color) l c h/10%);--shadow-md:0 4px 6px -1px oklch(from var(--shadow-color) l c h/10%),0 2px 4px -2px oklch(from var(--shadow-color) l c h/6%);--shadow-lg:0 10px 15px -3px oklch(from var(--shadow-color) l c h/10%),0 4px 6px -4px oklch(from var(--shadow-color) l c h/5%);--shadow-xl:0 20px 25px -5px oklch(from var(--shadow-color) l c h/10%),0 8px 10px -6px oklch(from var(--shadow-color) l c h/4%);--overlay:oklch(from var(--shadow-color) l c h/50%);--shadow-inset-sm:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%);--shadow-inset:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%)}*, *::after, *::before{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;margin:0;max-width:100%;padding:0} blockquote,body, dd, dl,
1
+ @font-face{font-display:swap;font-family:Geist Sans;font-style:normal;font-weight:100 900;src:url('./fonts/GeistSans/GeistVF.woff2) format("woff2"),url('./fonts/GeistSans/GeistVF.woff) format("woff")}:root{--primary-color:oklch(45.2% 0.198 250.1deg);--secondary-color:oklch(25.1% 0 0deg);--font-family-sans:"Geist Sans",system-ui,-apple-system,blinkmacsystemfont,"Segoe UI",roboto,"Helvetica Neue",arial,sans-serif;--font-family-serif:georgia,"Times New Roman",times,serif;--font-family-mono:"SF Mono",monaco,"Cascadia Code","Roboto Mono",consolas,"Courier New",monospace;--font-family:var(--font-family-sans);--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-size-scale:1;--font-size-xs:calc(0.75rem*var(--font-size-scale));--font-size-sm:calc(0.875rem*var(--font-size-scale));--font-size-base:calc(1rem*var(--font-size-scale));--font-size-lg:calc(1.125rem*var(--font-size-scale));--font-size-xl:calc(1.25rem*var(--font-size-scale));--font-size-2xl:calc(1.5rem*var(--font-size-scale));--font-size-3xl:calc(1.875rem*var(--font-size-scale));--font-size-4xl:calc(2.25rem*var(--font-size-scale));--font-size-5xl:calc(3rem*var(--font-size-scale));--font-size-6xl:calc(3.75rem*var(--font-size-scale));--line-height-tight:1.25;--line-height-snug:1.375;--line-height-normal:1.5;--line-height-relaxed:1.625;--line-height-loose:2;--letter-spacing-tighter:-0.05em;--letter-spacing-tight:-0.025em;--letter-spacing-normal:0;--letter-spacing-wide:0.025em;--letter-spacing-wider:0.05em;--letter-spacing-widest:0.1em;--spacing-0:0;--spacing-1:0.25rem;--spacing-2:0.5rem;--spacing-3:0.75rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-8:2rem;--spacing-10:2.5rem;--spacing-12:3rem;--spacing-16:4rem;--spacing-20:5rem;--spacing-24:6rem;--spacing-0-125:0.125rem;--spacing-0-375:0.375rem;--spacing-0-625:0.625rem;--spacing-0-875:0.875rem;--spacing-28:7rem;--spacing-32:8rem;--spacing-36:9rem;--spacing-40:10rem;--spacing-48:12rem;--spacing-56:14rem;--spacing-64:16rem;--spacing-72:18rem;--spacing-80:20rem;--spacing-96:24rem;--spacing-50:12.5rem;--spacing-100:25rem;--spacing-150:37.5rem;--spacing-14:3.5rem;--spacing-15:3.75rem;--spacing-75:18.75rem;--spacing-175:43.75rem;--spacing-70:17.5rem;--spacing-105:26.25rem;--spacing-2500:2500rem;--radius-none:0;--radius-sm:0.125rem;--radius:0.25rem;--radius-md:0.375rem;--radius-lg:0.5rem;--radius-xl:0.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--radius-full:9999px;--radius-circle:50%;--z-base:0;--z-1:1;--z-2:2;--z-3:3;--z-10:10;--z-dropdown:10;--z-dropdown-submenu:11;--z-sticky:50;--z-fixed:100;--z-search-overlay:98;--z-search-panel:99;--z-modal-backdrop:1999;--z-modal:2000;--z-tooltip:3000;--z-toast:4000;--z-settings:10000;--z-navbar:5000;--toast-top-offset:calc(var(--spacing-16) + var(--spacing-4));--z-navbar-mobile-menu-open:5100;--z-skip-link:10001;--z-navbar-mobile-menu:101;--z-navbar-search-overlay:98;--z-navbar-search-panel:99;--z-navbar-mobile-search-overlay:101;--z-navbar-mobile-search-panel:102;--transition-fast:150ms;--transition-base:200ms;--transition-slow:300ms;--transition-slower:350ms;--transition-slowest:400ms;--transition-ease-out:300ms ease-out;--transition-ease-in:300ms ease-in;--theme-transition-duration:0.2s;--blur-sm:4px;--blur:8px;--blur-md:12px;--blur-lg:16px;--outline-width:2px;--outline-offset:2px;--container-sm:640px;--container-md:768px;--container-lg:1024px;--container-xl:1280px;--container-2xl:1536px;--container-default:1200px;--vh-70:70vh;--vh-80:80vh;--vh-90:90vh;--touch-target-min:3rem;--theme-switcher-width:var(--spacing-96);--max-height-dropdown:600px;--max-height-modal:32rem;--max-width-modal-lg:48rem;--max-height-navbar-submenu:2000px;--ease-in-out-cubic:cubic-bezier(0.4,0,0.2,1);--scale-80:0.8;--scale-95:0.95;--scale-100:1;--scale-110:1.1;--border-width:1px;--border-width-2:2px;--border-width-3:3px;--border-width-4:4px;--border-width-arrow:6px;--border-width-accent:3px;--opacity-0:0;--opacity-50:0.5;--opacity-60:0.6;--opacity-70:0.7;--opacity-80:0.8;--opacity-90:0.9;--opacity-100:1;--background:oklch(100% 0 0deg);--background-alt:oklch(96.9% 0 0deg);--text:oklch(25.1% 0 0deg);--text-dim:oklch(50.2% 0 0deg);--icon:var(--text);--icon-dim:var(--text-dim);--border:oklch(90.2% 0 0deg);--accent:oklch(45.2% 0.198 250.1deg);--accent-hover:oklch(40.2% 0.198 250.1deg);--accent-text:oklch(100% 0 0deg);--accent-text-on-hover:var(--accent-text);--success:oklch(60.2% 0.182 145.1deg);--success-hover:oklch(70% 0.16 145deg);--success-text:oklch(20% 0 0deg);--success-text-on-solid:var(--success-text);--warning:oklch(80.2% 0.152 90.1deg);--warning-hover:oklch(88% 0.12 90deg);--warning-text:oklch(100% 0 0deg);--warning-text-on-solid:oklch(22% 0.02 90deg);--text-on-solid-hover:oklch(22% 0.02 0deg);--error:oklch(55.2% 0.218 25.1deg);--error-hover:oklch(65% 0.18 25deg);--error-text:oklch(100% 0 0deg);--error-text-on-solid:var(--error-text);--info:oklch(60.2% 0.118 210.1deg);--info-hover:oklch(70% 0.1 210deg);--info-text:oklch(20% 0 0deg);--info-text-on-solid:var(--info-text);--selection:oklch(70% 0.15 250deg);--color-neutral-50:oklch(98% 0 0deg);--color-neutral-100:oklch(96% 0.005 264deg);--color-neutral-200:oklch(91% 0.008 264deg);--color-neutral-300:oklch(84% 0.01 264deg);--color-neutral-400:oklch(63% 0.012 264deg);--color-neutral-500:oklch(50% 0.014 264deg);--color-neutral-600:oklch(40% 0.012 264deg);--color-neutral-700:oklch(32% 0.01 264deg);--color-neutral-800:oklch(24% 0.008 264deg);--color-neutral-900:oklch(16% 0.006 264deg);--color-neutral-950:oklch(10% 0.004 264deg);--color-accent-50:oklch(from var(--accent) 0.97deg 0.03 h);--color-accent-100:oklch(from var(--accent) 0.93deg 0.06 h);--color-accent-200:oklch(from var(--accent) 0.88deg 0.1 h);--color-accent-300:oklch(from var(--accent) 0.78deg 0.14 h);--color-accent-400:oklch(from var(--accent) 0.65deg 0.16 h);--color-accent-500:var(--accent);--color-accent-600:oklch(from var(--accent) 0.45deg 0.18 h);--color-accent-700:oklch(from var(--accent) 0.38deg 0.16 h);--color-accent-800:oklch(from var(--accent) 0.3deg 0.12 h);--color-accent-900:oklch(from var(--accent) 0.22deg 0.08 h);--color-accent-950:oklch(from var(--accent) 0.15deg 0.05 h);--color-success-50:oklch(from var(--success) 0.97deg 0.03 h);--color-success-100:oklch(from var(--success) 0.93deg 0.06 h);--color-success-200:oklch(from var(--success) 0.88deg 0.1 h);--color-success-300:oklch(from var(--success) 0.78deg 0.14 h);--color-success-400:oklch(from var(--success) 0.65deg 0.16 h);--color-success-500:var(--success);--color-success-600:oklch(from var(--success) 0.45deg 0.18 h);--color-success-700:oklch(from var(--success) 0.38deg 0.16 h);--color-success-800:oklch(from var(--success) 0.3deg 0.12 h);--color-success-900:oklch(from var(--success) 0.22deg 0.08 h);--color-success-950:oklch(from var(--success) 0.15deg 0.05 h);--color-warning-50:oklch(from var(--warning) 0.97deg 0.03 h);--color-warning-100:oklch(from var(--warning) 0.93deg 0.06 h);--color-warning-200:oklch(from var(--warning) 0.88deg 0.1 h);--color-warning-300:oklch(from var(--warning) 0.82deg 0.12 h);--color-warning-400:oklch(from var(--warning) 0.75deg 0.14 h);--color-warning-500:var(--warning);--color-warning-600:oklch(from var(--warning) 0.55deg 0.14 h);--color-warning-700:oklch(from var(--warning) 0.45deg 0.12 h);--color-warning-800:oklch(from var(--warning) 0.35deg 0.1 h);--color-warning-900:oklch(from var(--warning) 0.25deg 0.06 h);--color-warning-950:oklch(from var(--warning) 0.18deg 0.04 h);--color-error-50:oklch(from var(--error) 0.97deg 0.03 h);--color-error-100:oklch(from var(--error) 0.93deg 0.06 h);--color-error-200:oklch(from var(--error) 0.88deg 0.1 h);--color-error-300:oklch(from var(--error) 0.78deg 0.14 h);--color-error-400:oklch(from var(--error) 0.65deg 0.18 h);--color-error-500:var(--error);--color-error-600:oklch(from var(--error) 0.45deg 0.2 h);--color-error-700:oklch(from var(--error) 0.38deg 0.18 h);--color-error-800:oklch(from var(--error) 0.3deg 0.14 h);--color-error-900:oklch(from var(--error) 0.22deg 0.1 h);--color-error-950:oklch(from var(--error) 0.15deg 0.06 h);--color-info-50:oklch(from var(--info) 0.97deg 0.03 h);--color-info-100:oklch(from var(--info) 0.93deg 0.06 h);--color-info-200:oklch(from var(--info) 0.88deg 0.08 h);--color-info-300:oklch(from var(--info) 0.78deg 0.1 h);--color-info-400:oklch(from var(--info) 0.65deg 0.12 h);--color-info-500:var(--info);--color-info-600:oklch(from var(--info) 0.45deg 0.12 h);--color-info-700:oklch(from var(--info) 0.38deg 0.1 h);--color-info-800:oklch(from var(--info) 0.3deg 0.08 h);--color-info-900:oklch(from var(--info) 0.22deg 0.06 h);--color-info-950:oklch(from var(--info) 0.15deg 0.04 h);--alert-bg:oklch(from var(--background-alt) calc(l * 0.92) c h);--alert-success-bg:var(--color-success-200);--alert-error-bg:var(--color-error-200);--alert-warning-bg:var(--color-warning-200);--alert-info-bg:var(--color-info-200);--shadow-color:oklch(0% 0 0deg);--shadow-sm:0 1px 2px 0 oklch(from var(--shadow-color) l c h/5%);--shadow:0 1px 3px 0 oklch(from var(--shadow-color) l c h/10%),0 1px 2px -1px oklch(from var(--shadow-color) l c h/10%);--shadow-md:0 4px 6px -1px oklch(from var(--shadow-color) l c h/10%),0 2px 4px -2px oklch(from var(--shadow-color) l c h/6%);--shadow-lg:0 10px 15px -3px oklch(from var(--shadow-color) l c h/10%),0 4px 6px -4px oklch(from var(--shadow-color) l c h/5%);--shadow-xl:0 20px 25px -5px oklch(from var(--shadow-color) l c h/10%),0 8px 10px -6px oklch(from var(--shadow-color) l c h/4%);--overlay:oklch(from var(--shadow-color) l c h/50%);--shadow-inset-sm:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%);--shadow-inset:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%)}*, *::after, *::before{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;margin:0;max-width:100%;padding:0} blockquote,body, dd, dl,
2
2
  figure, h1, h2, h3, h4, h5, h6, p{margin-block-end:0}
3
3
  ol[role="list"],ul[role="list"]{list-style:none}body{line-height:1.5;margin:0;max-width:100%;min-height:100vh;padding:0}
4
4
  button,h1, h2, h3, h4, h5, h6, input, label{line-height:1.1}h1, h2, h3, h4, h5, h6{text-wrap:balance}a:not([class]){-webkit-text-decoration-skip:ink;color:currentcolor;text-decoration-skip-ink:auto}img,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rizzo-css",
3
- "version": "0.0.20",
3
+ "version": "0.0.21",
4
4
  "scripts": {
5
5
  "prepublishOnly": "cd ../.. && pnpm run lint:css:fix && pnpm run build:css && node scripts/copy-scaffold.js && node scripts/prepare-vanilla-scaffold.js"
6
6
  },
@@ -22,6 +22,7 @@ Minimal Astro project with Rizzo CSS. Scaffolded with `npx rizzo-css init --fram
22
22
 
23
23
  ## Project structure
24
24
 
25
+ - `.gitignore` — Astro default values (same as `create-astro`): dist/, .astro/, node_modules/, .env, logs, .DS_Store, .idea/
25
26
  - `astro.config.mjs` — Astro configuration
26
27
  - `src/layouts/Layout.astro` — Layout with Rizzo CSS and theme (edit `data-theme` for default)
27
28
  - `src/pages/index.astro` — Home page
@@ -2,13 +2,12 @@
2
2
  /* Placeholders replaced by rizzo-css CLI when scaffolding */
3
3
  const DATA_THEME = '{{DATA_THEME}}';
4
4
  const THEME_LIST_COMMENT = '{{THEME_LIST_COMMENT}}';
5
- interface Props {
6
- title?: string;
7
- }
5
+ /** @type {{ title?: string }} */
8
6
  const { title = '{{TITLE}}' } = Astro.props;
9
7
  ---
10
8
  <!doctype html>
11
- <html lang="en" data-theme={DATA_THEME}>{THEME_LIST_COMMENT}
9
+ <html lang="en" data-theme={DATA_THEME}>
10
+ {THEME_LIST_COMMENT}
12
11
  <head>
13
12
  <meta charset="UTF-8" />
14
13
  <meta name="viewport" content="width=device-width, initial-scale=1" />
@@ -13,7 +13,7 @@ If you prefer to load CSS from a CDN instead of the local file, replace the `<li
13
13
  - `<link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />`
14
14
  - Or jsDelivr: `https://cdn.jsdelivr.net/npm/rizzo-css@latest/dist/rizzo.min.css`
15
15
 
16
- (Replace `@latest` with a specific version, e.g. `@0.0.20`, in production.)
16
+ (Replace `@latest` with a specific version, e.g. `@0.0.21`, in production.)
17
17
 
18
18
  The CLI replaces placeholders in `index.html` (e.g. `{{DATA_THEME}}`, `{{TITLE}}`) when you run `rizzo-css init`. The theme selected during init is used on first load when you have no saved preference in the browser.
19
19