From 4adcb8c938cdc9775c135ecee4a8759a3ea4be02 Mon Sep 17 00:00:00 2001
From: Cory LaViska <cory@abeautifulsite.net>
Date: Tue, 25 Jan 2022 17:09:53 -0500
Subject: [PATCH] fixes #571

---
 docs/resources/changelog.md    |   1 +
 scripts/build.js               |   4 +-
 scripts/make-css.js            |  42 ---
 scripts/make-themes.js         |  62 ++++
 src/styles/component.styles.ts |   6 -
 src/styles/utility.styles.ts   |  23 --
 src/themes/_utility.css        |  25 ++
 src/themes/dark.css            | 522 ++++++++++++++++++++++++++++++++
 src/themes/dark.styles.ts      | 524 ---------------------------------
 src/themes/light.css           | 522 ++++++++++++++++++++++++++++++++
 src/themes/light.styles.ts     | 524 ---------------------------------
 11 files changed, 1134 insertions(+), 1121 deletions(-)
 delete mode 100644 scripts/make-css.js
 create mode 100644 scripts/make-themes.js
 delete mode 100644 src/styles/utility.styles.ts
 create mode 100644 src/themes/_utility.css
 create mode 100644 src/themes/dark.css
 delete mode 100644 src/themes/dark.styles.ts
 create mode 100644 src/themes/light.css
 delete mode 100644 src/themes/light.styles.ts

diff --git a/docs/resources/changelog.md b/docs/resources/changelog.md
index e247d2e9..c0e03e47 100644
--- a/docs/resources/changelog.md
+++ b/docs/resources/changelog.md
@@ -11,6 +11,7 @@ _During the beta period, these restrictions may be relaxed in the event of a mis
 - Fixed a bug that caused `<sl-progress-ring>` to render the wrong size when `--track-width` was increased [#656](https://github.com/shoelace-style/shoelace/issues/656)
 - Implemented stricter linting to improve consistency and reduce errors, which resulted in many small refactors throughout the codebase [#647](https://github.com/shoelace-style/shoelace/pull/647)
 - Improved accessibility of `<sl-dialog>` and `<sl-drawer>` by making the title an `<h2>` and adding a label to the close button
+- Refactored themes so utility styles are no longer injected as `<style>` elements to support stricter CSP rules [#571](https://github.com/shoelace-style/shoelace/issues/571)
 - Restored the nicer animation on `<sl-spinner>` and verified it works in Safari
 - Updated minimum Node version to 14.17
 
diff --git a/scripts/build.js b/scripts/build.js
index d95ca8c0..ab0ee87b 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -29,7 +29,7 @@ fs.mkdirSync(outdir, { recursive: true });
     execSync(`node scripts/make-search.js --outdir "${outdir}"`, { stdio: 'inherit' });
     execSync(`node scripts/make-react.js`, { stdio: 'inherit' });
     execSync(`node scripts/make-vscode-data.js --outdir "${outdir}"`, { stdio: 'inherit' });
-    execSync(`node scripts/make-css.js --outdir "${outdir}"`, { stdio: 'inherit' });
+    execSync(`node scripts/make-themes.js --outdir "${outdir}"`, { stdio: 'inherit' });
     execSync(`node scripts/make-icons.js --outdir "${outdir}"`, { stdio: 'inherit' });
     if (types) execSync(`tsc --project ./tsconfig.prod.json --outdir "${outdir}"`, { stdio: 'inherit' });
   } catch (err) {
@@ -155,7 +155,7 @@ fs.mkdirSync(outdir, { recursive: true });
         .then(() => {
           // Rebuild stylesheets when a theme file changes
           if (/^src\/themes/.test(filename)) {
-            execSync(`node scripts/make-css.js --outdir "${outdir}"`, { stdio: 'inherit' });
+            execSync(`node scripts/make-themes.js --outdir "${outdir}"`, { stdio: 'inherit' });
           }
         })
         .then(() => {
diff --git a/scripts/make-css.js b/scripts/make-css.js
deleted file mode 100644
index 028a800c..00000000
--- a/scripts/make-css.js
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// This script generates stylesheets from all *.styles.ts files in src/themes
-//
-import chalk from 'chalk';
-import commandLineArgs from 'command-line-args';
-import fs from 'fs/promises';
-import { mkdirSync } from 'fs';
-import { globbySync } from 'globby';
-import path from 'path';
-import prettier from 'prettier';
-import stripComments from 'strip-css-comments';
-
-const { outdir } = commandLineArgs({ name: 'outdir', type: String });
-const files = globbySync('./src/themes/**/*.styles.ts');
-const themesDir = path.join(outdir, 'themes');
-
-console.log('Generating stylesheets');
-
-mkdirSync(themesDir, { recursive: true });
-
-try {
-  files.map(async file => {
-    const source = await fs.readFile(file, 'utf8');
-    const css = source.match(/export default css`(.*?)`;/s)[1];
-
-    // We're currently scraping for CSS with a regex, so we can't use interpolation at the moment
-    if (css.includes('${')) {
-      console.error(
-        chalk.red(`Template literal expressions are not currently supported in theme stylesheets: ${file}`)
-      );
-      process.exit(1);
-    }
-
-    const formattedStyles = prettier.format(stripComments(css), { parser: 'css' });
-    const filename = path.basename(file).replace('.styles.ts', '.css');
-    const outFile = path.join(themesDir, filename);
-    await fs.writeFile(outFile, formattedStyles, 'utf8');
-  });
-} catch (err) {
-  console.error(chalk.red('Error generating stylesheets!'));
-  console.error(err);
-}
diff --git a/scripts/make-themes.js b/scripts/make-themes.js
new file mode 100644
index 00000000..9d266967
--- /dev/null
+++ b/scripts/make-themes.js
@@ -0,0 +1,62 @@
+//
+// This script bakes and copies themes, then generates a corresponding Lit stylesheet in dist/themes
+//
+import chalk from 'chalk';
+import commandLineArgs from 'command-line-args';
+import fs from 'fs';
+import { mkdirSync } from 'fs';
+import { globbySync } from 'globby';
+import path from 'path';
+import prettier from 'prettier';
+import stripComments from 'strip-css-comments';
+
+const { outdir } = commandLineArgs({ name: 'outdir', type: String });
+const files = globbySync('./src/themes/**/[!_]*.css');
+const filesToEmbed = globbySync('./src/themes/**/_*.css');
+const themesDir = path.join(outdir, 'themes');
+const embeds = {};
+
+console.log('Generating stylesheets');
+
+mkdirSync(themesDir, { recursive: true });
+
+try {
+  // Gather an object containing the source of all files named "_filename.css" so we can embed them later
+  filesToEmbed.forEach(file => {
+    embeds[path.basename(file)] = fs.readFileSync(file, 'utf8');
+  });
+
+  // Loop through each theme file, copying the .css and generating a .js version for Lit users
+  files.forEach(file => {
+    let source = fs.readFileSync(file, 'utf8');
+
+    // If the source has "/* _filename.css */" in it, replace it with the embedded styles
+    Object.keys(embeds).forEach(key => {
+      source = source.replace(`/* ${key} */`, embeds[key]);
+    });
+
+    const css = prettier.format(stripComments(source), {
+      parser: 'css'
+    });
+
+    let js = prettier.format(
+      `
+      import { css } from 'lit';
+
+      export default css\`
+        ${css}
+      \`;
+    `,
+      { parser: 'babel-ts' }
+    );
+
+    const cssFile = path.join(themesDir, path.basename(file));
+    const jsFile = path.join(themesDir, path.basename(file).replace('.css', '.styles.js'));
+
+    fs.writeFileSync(cssFile, css, 'utf8');
+    fs.writeFileSync(jsFile, js, 'utf8');
+  });
+} catch (err) {
+  console.error(chalk.red('Error generating stylesheets!'));
+  console.error(err);
+}
diff --git a/src/styles/component.styles.ts b/src/styles/component.styles.ts
index b9ce5a7e..6c4bcff0 100644
--- a/src/styles/component.styles.ts
+++ b/src/styles/component.styles.ts
@@ -1,5 +1,4 @@
 import { css } from 'lit';
-import utilityStyles from '~/styles/utility.styles';
 
 export default css`
   :host {
@@ -16,8 +15,3 @@ export default css`
     display: none !important;
   }
 `;
-
-// All components import this file, so it's a good place to ensure utility styles are applied to the light DOM
-const style = document.createElement('style');
-style.textContent = utilityStyles.toString();
-document.head.append(style);
diff --git a/src/styles/utility.styles.ts b/src/styles/utility.styles.ts
deleted file mode 100644
index 3758b3c4..00000000
--- a/src/styles/utility.styles.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { css } from 'lit';
-
-export default css`
-  .sl-scroll-lock {
-    overflow: hidden !important;
-  }
-
-  .sl-toast-stack {
-    position: fixed;
-    top: 0;
-    right: 0;
-    z-index: var(--sl-z-index-toast);
-    width: 28rem;
-    max-width: 100%;
-    max-height: 100%;
-    overflow: auto;
-  }
-
-  .sl-toast-stack sl-alert {
-    --box-shadow: var(--sl-shadow-large);
-    margin: var(--sl-spacing-medium);
-  }
-`;
diff --git a/src/themes/_utility.css b/src/themes/_utility.css
new file mode 100644
index 00000000..4562b89a
--- /dev/null
+++ b/src/themes/_utility.css
@@ -0,0 +1,25 @@
+/*
+ * This file contains utility classes that can't be contained in a component and must be applied to the light DOM. None
+ * of the rules in this stylesheet should target component tags or HTML tags, and all classes *must* start with ".sl-"
+ * to reduce the possibility of collisions.
+ */
+
+.sl-scroll-lock {
+  overflow: hidden !important;
+}
+
+.sl-toast-stack {
+  position: fixed;
+  top: 0;
+  right: 0;
+  z-index: var(--sl-z-index-toast);
+  width: 28rem;
+  max-width: 100%;
+  max-height: 100%;
+  overflow: auto;
+}
+
+.sl-toast-stack sl-alert {
+  --box-shadow: var(--sl-shadow-large);
+  margin: var(--sl-spacing-medium);
+}
diff --git a/src/themes/dark.css b/src/themes/dark.css
new file mode 100644
index 00000000..cc3a07b6
--- /dev/null
+++ b/src/themes/dark.css
@@ -0,0 +1,522 @@
+:host,
+.sl-theme-dark {
+  /*
+   * Color Primitives
+   */
+
+  /* Gray */
+  --sl-color-gray-50: hsl(240 5.1% 15%);
+  --sl-color-gray-100: hsl(240 5.7% 18.2%);
+  --sl-color-gray-200: hsl(240 4.6% 22%);
+  --sl-color-gray-300: hsl(240 5% 27.6%);
+  --sl-color-gray-400: hsl(240 5% 35.5%);
+  --sl-color-gray-500: hsl(240 3.7% 44%);
+  --sl-color-gray-600: hsl(240 5.3% 58%);
+  --sl-color-gray-700: hsl(240 5.6% 73%);
+  --sl-color-gray-800: hsl(240 7.3% 84%);
+  --sl-color-gray-900: hsl(240 9.1% 91.8%);
+  --sl-color-gray-950: hsl(0 0% 95%);
+
+  /* Red */
+  --sl-color-red-50: hsl(0 56% 23.9%);
+  --sl-color-red-100: hsl(0.6 60% 33.9%);
+  --sl-color-red-200: hsl(0.9 67.2% 37.1%);
+  --sl-color-red-300: hsl(1.1 71.3% 43.7%);
+  --sl-color-red-400: hsl(1 76% 52.5%);
+  --sl-color-red-500: hsl(0.7 89.6% 57.2%);
+  --sl-color-red-600: hsl(0 98.6% 67.9%);
+  --sl-color-red-700: hsl(0 100% 72.3%);
+  --sl-color-red-800: hsl(0 100% 85.6%);
+  --sl-color-red-900: hsl(0 100% 90.3%);
+  --sl-color-red-950: hsl(0 100% 95.9%);
+
+  /* Orange */
+  --sl-color-orange-50: hsl(15 64.2% 23.3%);
+  --sl-color-orange-100: hsl(15.1 70.9% 31.1%);
+  --sl-color-orange-200: hsl(15.3 75.7% 35.5%);
+  --sl-color-orange-300: hsl(17.1 83.5% 42.7%);
+  --sl-color-orange-400: hsl(20.1 88% 50.8%);
+  --sl-color-orange-500: hsl(24.3 100% 50.5%);
+  --sl-color-orange-600: hsl(27.2 100% 57.7%);
+  --sl-color-orange-700: hsl(31.3 100% 68.7%);
+  --sl-color-orange-800: hsl(33.8 100% 79.3%);
+  --sl-color-orange-900: hsl(38.9 100% 87.7%);
+  --sl-color-orange-950: hsl(46.2 100% 95%);
+
+  /* Amber */
+  --sl-color-amber-50: hsl(21.9 66.3% 21.1%);
+  --sl-color-amber-100: hsl(21.5 73.6% 29.7%);
+  --sl-color-amber-200: hsl(22.3 77.6% 33.3%);
+  --sl-color-amber-300: hsl(25.4 84.2% 39.6%);
+  --sl-color-amber-400: hsl(31.4 87.4% 46.7%);
+  --sl-color-amber-500: hsl(37 96.6% 48.3%);
+  --sl-color-amber-600: hsl(43.3 100% 53.4%);
+  --sl-color-amber-700: hsl(46.5 100% 61.1%);
+  --sl-color-amber-800: hsl(49.3 100% 73%);
+  --sl-color-amber-900: hsl(51.8 100% 85%);
+  --sl-color-amber-950: hsl(60 100% 94.6%);
+
+  /* Yellow */
+  --sl-color-yellow-50: hsl(32.5 60% 18.2%);
+  --sl-color-yellow-100: hsl(28.1 68.6% 29%);
+  --sl-color-yellow-200: hsl(31.3 75.8% 30.8%);
+  --sl-color-yellow-300: hsl(34.7 84.4% 35.3%);
+  --sl-color-yellow-400: hsl(40.1 87.3% 43.3%);
+  --sl-color-yellow-500: hsl(44.7 88% 46%);
+  --sl-color-yellow-600: hsl(47.7 100% 50.9%);
+  --sl-color-yellow-700: hsl(51.3 100% 59.9%);
+  --sl-color-yellow-800: hsl(54.6 100% 73%);
+  --sl-color-yellow-900: hsl(58.9 100% 84.2%);
+  --sl-color-yellow-950: hsl(60 100% 94%);
+
+  /* Lime */
+  --sl-color-lime-50: hsl(86.5 54.4% 18%);
+  --sl-color-lime-100: hsl(87.6 56.8% 23.3%);
+  --sl-color-lime-200: hsl(85.8 63.2% 24.5%);
+  --sl-color-lime-300: hsl(86.1 72% 29.4%);
+  --sl-color-lime-400: hsl(85.5 76.8% 37.3%);
+  --sl-color-lime-500: hsl(84.3 74.2% 42.1%);
+  --sl-color-lime-600: hsl(82.8 81.5% 52.6%);
+  --sl-color-lime-700: hsl(82 89.9% 64%);
+  --sl-color-lime-800: hsl(80.9 97.9% 76.6%);
+  --sl-color-lime-900: hsl(77.9 100% 85.8%);
+  --sl-color-lime-950: hsl(69.5 100% 93.8%);
+
+  /* Green */
+  --sl-color-green-50: hsl(144.3 53.6% 16%);
+  --sl-color-green-100: hsl(143.2 55.4% 23.5%);
+  --sl-color-green-200: hsl(141.5 58.2% 26.3%);
+  --sl-color-green-300: hsl(140.8 64.2% 31.8%);
+  --sl-color-green-400: hsl(140.3 68% 39.2%);
+  --sl-color-green-500: hsl(141.1 64.9% 43%);
+  --sl-color-green-600: hsl(141.6 72.4% 55.2%);
+  --sl-color-green-700: hsl(141.7 82.7% 70.1%);
+  --sl-color-green-800: hsl(141 90.9% 82.1%);
+  --sl-color-green-900: hsl(142 100% 89.1%);
+  --sl-color-green-950: hsl(144 100% 95.5%);
+
+  /* Emerald */
+  --sl-color-emerald-50: hsl(164.3 75% 13.5%);
+  --sl-color-emerald-100: hsl(163.5 72.6% 20.1%);
+  --sl-color-emerald-200: hsl(162.1 73.7% 22.4%);
+  --sl-color-emerald-300: hsl(161.3 77.3% 27.6%);
+  --sl-color-emerald-400: hsl(159.6 77.1% 34.3%);
+  --sl-color-emerald-500: hsl(159.1 73.5% 37.9%);
+  --sl-color-emerald-600: hsl(157.8 66.8% 48.9%);
+  --sl-color-emerald-700: hsl(156.2 76.1% 63.8%);
+  --sl-color-emerald-800: hsl(152.4 84.4% 77.4%);
+  --sl-color-emerald-900: hsl(149.3 100% 87%);
+  --sl-color-emerald-950: hsl(158.6 100% 94.8%);
+
+  /* Teal */
+  --sl-color-teal-50: hsl(176.5 51.5% 15.4%);
+  --sl-color-teal-100: hsl(175.9 54.7% 22.3%);
+  --sl-color-teal-200: hsl(175.9 60.7% 23.9%);
+  --sl-color-teal-300: hsl(174.5 67.3% 28.8%);
+  --sl-color-teal-400: hsl(174.4 71.9% 34.9%);
+  --sl-color-teal-500: hsl(173.1 71% 38.3%);
+  --sl-color-teal-600: hsl(172.3 68.2% 48.1%);
+  --sl-color-teal-700: hsl(170.5 81.3% 61.5%);
+  --sl-color-teal-800: hsl(168.4 92.1% 75.2%);
+  --sl-color-teal-900: hsl(168.3 100% 86%);
+  --sl-color-teal-950: hsl(180 100% 95.5%);
+
+  /* Cyan */
+  --sl-color-cyan-50: hsl(197.1 53.8% 20.3%);
+  --sl-color-cyan-100: hsl(196.8 57.3% 27.2%);
+  --sl-color-cyan-200: hsl(195.3 62.7% 29.4%);
+  --sl-color-cyan-300: hsl(193.5 71.3% 34.1%);
+  --sl-color-cyan-400: hsl(192.5 76.8% 40.6%);
+  --sl-color-cyan-500: hsl(189.4 78.6% 42.6%);
+  --sl-color-cyan-600: hsl(188.2 89.1% 51.7%);
+  --sl-color-cyan-700: hsl(187 98.6% 66.2%);
+  --sl-color-cyan-800: hsl(184.9 100% 78.3%);
+  --sl-color-cyan-900: hsl(180 100% 86.6%);
+  --sl-color-cyan-950: hsl(180 100% 94.8%);
+
+  /* Sky */
+  --sl-color-sky-50: hsl(203 63.8% 20.9%);
+  --sl-color-sky-100: hsl(203.4 70.4% 28%);
+  --sl-color-sky-200: hsl(202.7 75.8% 30.8%);
+  --sl-color-sky-300: hsl(203.1 80.4% 36.1%);
+  --sl-color-sky-400: hsl(202.1 80.5% 44.3%);
+  --sl-color-sky-500: hsl(199.7 85.9% 47.7%);
+  --sl-color-sky-600: hsl(198.7 97.9% 57.2%);
+  --sl-color-sky-700: hsl(198.7 100% 70.5%);
+  --sl-color-sky-800: hsl(198.8 100% 82.5%);
+  --sl-color-sky-900: hsl(198.5 100% 89.9%);
+  --sl-color-sky-950: hsl(186 100% 95.5%);
+
+  /* Blue */
+  --sl-color-blue-50: hsl(227.1 49.5% 22.7%);
+  --sl-color-blue-100: hsl(225.8 58.9% 36.8%);
+  --sl-color-blue-200: hsl(227.7 64.4% 42.9%);
+  --sl-color-blue-300: hsl(226.1 72.7% 51.2%);
+  --sl-color-blue-400: hsl(222.6 86.5% 56.3%);
+  --sl-color-blue-500: hsl(217.8 95.8% 57.4%);
+  --sl-color-blue-600: hsl(213.3 100% 65%);
+  --sl-color-blue-700: hsl(210.9 100% 74.8%);
+  --sl-color-blue-800: hsl(211.5 100% 83.4%);
+  --sl-color-blue-900: hsl(211 100% 88.9%);
+  --sl-color-blue-950: hsl(201.8 100% 95.3%);
+
+  /* Indigo */
+  --sl-color-indigo-50: hsl(243.5 40.8% 27%);
+  --sl-color-indigo-100: hsl(242.9 45.7% 37.6%);
+  --sl-color-indigo-200: hsl(244.7 52.7% 43.1%);
+  --sl-color-indigo-300: hsl(245.3 60.5% 52.4%);
+  --sl-color-indigo-400: hsl(244.1 79.2% 60.4%);
+  --sl-color-indigo-500: hsl(239.6 88.7% 63.8%);
+  --sl-color-indigo-600: hsl(234.5 96.7% 70.9%);
+  --sl-color-indigo-700: hsl(229.4 100% 78.3%);
+  --sl-color-indigo-800: hsl(227.1 100% 85%);
+  --sl-color-indigo-900: hsl(223.8 100% 89.9%);
+  --sl-color-indigo-950: hsl(220 100% 95.1%);
+
+  /* Violet */
+  --sl-color-violet-50: hsl(265.1 57.3% 25.4%);
+  --sl-color-violet-100: hsl(263.5 63.8% 39.4%);
+  --sl-color-violet-200: hsl(263.4 66.2% 44.1%);
+  --sl-color-violet-300: hsl(263.7 72.8% 52.4%);
+  --sl-color-violet-400: hsl(262.5 87.3% 59.8%);
+  --sl-color-violet-500: hsl(258.3 95.1% 63.2%);
+  --sl-color-violet-600: hsl(255.1 100% 67.2%);
+  --sl-color-violet-700: hsl(253 100% 81.5%);
+  --sl-color-violet-800: hsl(251.7 100% 87.9%);
+  --sl-color-violet-900: hsl(254.1 100% 91.7%);
+  --sl-color-violet-950: hsl(257.1 100% 96.1%);
+
+  /* Purple */
+  --sl-color-purple-50: hsl(276 54.3% 20.5%);
+  --sl-color-purple-100: hsl(273.6 61.8% 35.4%);
+  --sl-color-purple-200: hsl(272.9 64% 41.4%);
+  --sl-color-purple-300: hsl(271.9 68.1% 49.2%);
+  --sl-color-purple-400: hsl(271.5 85.1% 57.8%);
+  --sl-color-purple-500: hsl(270.7 96.4% 62.1%);
+  --sl-color-purple-600: hsl(270.5 100% 71.9%);
+  --sl-color-purple-700: hsl(270.9 100% 81.3%);
+  --sl-color-purple-800: hsl(272.4 100% 87.7%);
+  --sl-color-purple-900: hsl(276.7 100% 91.5%);
+  --sl-color-purple-950: hsl(300 100% 96.5%);
+
+  /* Fuchsia */
+
+  --sl-color-fuchsia-50: hsl(297.1 51.2% 18.6%);
+  --sl-color-fuchsia-100: hsl(296.7 59.5% 31.5%);
+  --sl-color-fuchsia-200: hsl(295.4 65.4% 35.1%);
+  --sl-color-fuchsia-300: hsl(294.6 67.4% 42.2%);
+  --sl-color-fuchsia-400: hsl(293.3 68.7% 51.2%);
+  --sl-color-fuchsia-500: hsl(292.1 88.4% 57.7%);
+  --sl-color-fuchsia-600: hsl(292 98.5% 59.5%);
+  --sl-color-fuchsia-700: hsl(292.4 100% 79.5%);
+  --sl-color-fuchsia-800: hsl(292.9 100% 86.8%);
+  --sl-color-fuchsia-900: hsl(300 100% 91.5%);
+  --sl-color-fuchsia-950: hsl(300 100% 96.3%);
+
+  /* Pink */
+  --sl-color-pink-50: hsl(336.2 59.6% 20%);
+  --sl-color-pink-100: hsl(336.8 63.9% 34%);
+  --sl-color-pink-200: hsl(336.8 68.7% 37.6%);
+  --sl-color-pink-300: hsl(336.1 71.8% 44.5%);
+  --sl-color-pink-400: hsl(333.9 74.9% 53.1%);
+  --sl-color-pink-500: hsl(330.7 86.3% 57.7%);
+  --sl-color-pink-600: hsl(328.6 91.5% 67.2%);
+  --sl-color-pink-700: hsl(327.4 97.6% 78.7%);
+  --sl-color-pink-800: hsl(325.1 100% 86.6%);
+  --sl-color-pink-900: hsl(322.1 100% 91.3%);
+  --sl-color-pink-950: hsl(315 100% 95.9%);
+
+  /* Rose */
+  --sl-color-rose-50: hsl(342.3 62.9% 21.5%);
+  --sl-color-rose-100: hsl(342.8 68.9% 34.2%);
+  --sl-color-rose-200: hsl(344.8 72.6% 37.3%);
+  --sl-color-rose-300: hsl(346.9 75.8% 43.7%);
+  --sl-color-rose-400: hsl(348.2 80.1% 52.7%);
+  --sl-color-rose-500: hsl(350.4 94.8% 57.5%);
+  --sl-color-rose-600: hsl(351.2 100% 58.1%);
+  --sl-color-rose-700: hsl(352.3 100% 78.1%);
+  --sl-color-rose-800: hsl(352 100% 86.2%);
+  --sl-color-rose-900: hsl(354.5 100% 90.7%);
+  --sl-color-rose-950: hsl(353.3 100% 95.7%);
+
+  /*
+   * Theme Tokens
+   */
+
+  /* Primary */
+  --sl-color-primary-50: var(--sl-color-sky-50);
+  --sl-color-primary-100: var(--sl-color-sky-100);
+  --sl-color-primary-200: var(--sl-color-sky-200);
+  --sl-color-primary-300: var(--sl-color-sky-300);
+  --sl-color-primary-400: var(--sl-color-sky-400);
+  --sl-color-primary-500: var(--sl-color-sky-500);
+  --sl-color-primary-600: var(--sl-color-sky-600);
+  --sl-color-primary-700: var(--sl-color-sky-700);
+  --sl-color-primary-800: var(--sl-color-sky-800);
+  --sl-color-primary-900: var(--sl-color-sky-900);
+  --sl-color-primary-950: var(--sl-color-sky-950);
+
+  /* Success */
+  --sl-color-success-50: var(--sl-color-green-50);
+  --sl-color-success-100: var(--sl-color-green-100);
+  --sl-color-success-200: var(--sl-color-green-200);
+  --sl-color-success-300: var(--sl-color-green-300);
+  --sl-color-success-400: var(--sl-color-green-400);
+  --sl-color-success-500: var(--sl-color-green-500);
+  --sl-color-success-600: var(--sl-color-green-600);
+  --sl-color-success-700: var(--sl-color-green-700);
+  --sl-color-success-800: var(--sl-color-green-800);
+  --sl-color-success-900: var(--sl-color-green-900);
+  --sl-color-success-950: var(--sl-color-green-950);
+
+  /* Warning */
+  --sl-color-warning-50: var(--sl-color-amber-50);
+  --sl-color-warning-100: var(--sl-color-amber-100);
+  --sl-color-warning-200: var(--sl-color-amber-200);
+  --sl-color-warning-300: var(--sl-color-amber-300);
+  --sl-color-warning-400: var(--sl-color-amber-400);
+  --sl-color-warning-500: var(--sl-color-amber-500);
+  --sl-color-warning-600: var(--sl-color-amber-600);
+  --sl-color-warning-700: var(--sl-color-amber-700);
+  --sl-color-warning-800: var(--sl-color-amber-800);
+  --sl-color-warning-900: var(--sl-color-amber-900);
+  --sl-color-warning-950: var(--sl-color-amber-950);
+
+  /* Danger */
+  --sl-color-danger-50: var(--sl-color-red-50);
+  --sl-color-danger-100: var(--sl-color-red-100);
+  --sl-color-danger-200: var(--sl-color-red-200);
+  --sl-color-danger-300: var(--sl-color-red-300);
+  --sl-color-danger-400: var(--sl-color-red-400);
+  --sl-color-danger-500: var(--sl-color-red-500);
+  --sl-color-danger-600: var(--sl-color-red-600);
+  --sl-color-danger-700: var(--sl-color-red-700);
+  --sl-color-danger-800: var(--sl-color-red-800);
+  --sl-color-danger-900: var(--sl-color-red-900);
+  --sl-color-danger-950: var(--sl-color-red-950);
+
+  /* Neutral */
+  --sl-color-neutral-50: var(--sl-color-gray-50);
+  --sl-color-neutral-100: var(--sl-color-gray-100);
+  --sl-color-neutral-200: var(--sl-color-gray-200);
+  --sl-color-neutral-300: var(--sl-color-gray-300);
+  --sl-color-neutral-400: var(--sl-color-gray-400);
+  --sl-color-neutral-500: var(--sl-color-gray-500);
+  --sl-color-neutral-600: var(--sl-color-gray-600);
+  --sl-color-neutral-700: var(--sl-color-gray-700);
+  --sl-color-neutral-800: var(--sl-color-gray-800);
+  --sl-color-neutral-900: var(--sl-color-gray-900);
+  --sl-color-neutral-950: var(--sl-color-gray-950);
+
+  /* Neutral one-offs */
+  --sl-color-neutral-0: hsl(240, 5.9%, 11%);
+  --sl-color-neutral-1000: hsl(0, 0%, 100%);
+
+  /*
+   * Border radii
+   */
+
+  --sl-border-radius-small: 0.1875rem; /* 3px */
+  --sl-border-radius-medium: 0.25rem; /* 4px */
+  --sl-border-radius-large: 0.5rem; /* 8px */
+  --sl-border-radius-x-large: 1rem; /* 16px */
+
+  --sl-border-radius-circle: 50%;
+  --sl-border-radius-pill: 9999px;
+
+  /*
+   * Elevations
+   */
+
+  --sl-shadow-x-small: 0 1px 2px rgb(0 0 0 / 18%);
+  --sl-shadow-small: 0 1px 2px rgb(0 0 0 / 24%);
+  --sl-shadow-medium: 0 2px 4px rgb(0 0 0 / 24%);
+  --sl-shadow-large: 0 2px 8px rgb(0 0 0 / 24%);
+  --sl-shadow-x-large: 0 4px 16px rgb(0 0 0 / 24%);
+
+  /*
+   * Spacings
+   */
+
+  --sl-spacing-3x-small: 0.125rem; /* 2px */
+  --sl-spacing-2x-small: 0.25rem; /* 4px */
+  --sl-spacing-x-small: 0.5rem; /* 8px */
+  --sl-spacing-small: 0.75rem; /* 12px */
+  --sl-spacing-medium: 1rem; /* 16px */
+  --sl-spacing-large: 1.25rem; /* 20px */
+  --sl-spacing-x-large: 1.75rem; /* 28px */
+  --sl-spacing-2x-large: 2.25rem; /* 36px */
+  --sl-spacing-3x-large: 3rem; /* 48px */
+  --sl-spacing-4x-large: 4.5rem; /* 72px */
+
+  /*
+   * Transitions
+   */
+
+  --sl-transition-x-slow: 1000ms;
+  --sl-transition-slow: 500ms;
+  --sl-transition-medium: 250ms;
+  --sl-transition-fast: 150ms;
+  --sl-transition-x-fast: 50ms;
+
+  /*
+   * Typography
+   */
+
+  /* Fonts */
+  --sl-font-mono: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;
+  --sl-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
+    'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
+  --sl-font-serif: Georgia, 'Times New Roman', serif;
+
+  /* Font sizes */
+  --sl-font-size-2x-small: 0.625rem; /* 10px */
+  --sl-font-size-x-small: 0.75rem; /* 12px */
+  --sl-font-size-small: 0.875rem; /* 14px */
+  --sl-font-size-medium: 1rem; /* 16px */
+  --sl-font-size-large: 1.25rem; /* 20px */
+  --sl-font-size-x-large: 1.5rem; /* 24px */
+  --sl-font-size-2x-large: 2.25rem; /* 36px */
+  --sl-font-size-3x-large: 3rem; /* 48px */
+  --sl-font-size-4x-large: 4.5rem; /* 72px */
+
+  /* Font weights */
+  --sl-font-weight-light: 300;
+  --sl-font-weight-normal: 400;
+  --sl-font-weight-semibold: 500;
+  --sl-font-weight-bold: 700;
+
+  /* Letter spacings */
+  --sl-letter-spacing-denser: -0.03em;
+  --sl-letter-spacing-dense: -0.015em;
+  --sl-letter-spacing-normal: normal;
+  --sl-letter-spacing-loose: 0.075em;
+  --sl-letter-spacing-looser: 0.15em;
+
+  /* Line heights */
+  --sl-line-height-denser: 1;
+  --sl-line-height-dense: 1.4;
+  --sl-line-height-normal: 1.8;
+  --sl-line-height-loose: 2.2;
+  --sl-line-height-looser: 2.6;
+
+  /*
+   * Forms
+   */
+
+  /* Focus ring */
+  --sl-focus-ring-alpha: 45%;
+  --sl-focus-ring-width: 3px;
+  --sl-focus-ring: 0 0 0 var(--sl-focus-ring-width) hsl(198.6 88.7% 48.4% / var(--sl-focus-ring-alpha));
+
+  /* Buttons */
+  --sl-button-font-size-small: var(--sl-font-size-x-small);
+  --sl-button-font-size-medium: var(--sl-font-size-small);
+  --sl-button-font-size-large: var(--sl-font-size-medium);
+
+  /* Inputs */
+  --sl-input-height-small: 1.875rem; /* 30px */
+  --sl-input-height-medium: 2.5rem; /* 40px */
+  --sl-input-height-large: 3.125rem; /* 50px */
+
+  --sl-input-background-color: var(--sl-color-neutral-0);
+  --sl-input-background-color-hover: var(--sl-input-background-color);
+  --sl-input-background-color-focus: var(--sl-input-background-color);
+  --sl-input-background-color-disabled: var(--sl-color-neutral-100);
+  --sl-input-border-color: var(--sl-color-neutral-300);
+  --sl-input-border-color-hover: var(--sl-color-neutral-400);
+  --sl-input-border-color-focus: var(--sl-color-primary-500);
+  --sl-input-border-color-disabled: var(--sl-color-neutral-300);
+  --sl-input-border-width: 1px;
+
+  --sl-input-border-radius-small: var(--sl-border-radius-medium);
+  --sl-input-border-radius-medium: var(--sl-border-radius-medium);
+  --sl-input-border-radius-large: var(--sl-border-radius-medium);
+
+  --sl-input-font-family: var(--sl-font-sans);
+  --sl-input-font-weight: var(--sl-font-weight-normal);
+  --sl-input-font-size-small: var(--sl-font-size-small);
+  --sl-input-font-size-medium: var(--sl-font-size-medium);
+  --sl-input-font-size-large: var(--sl-font-size-large);
+  --sl-input-letter-spacing: var(--sl-letter-spacing-normal);
+
+  --sl-input-color: var(--sl-color-neutral-700);
+  --sl-input-color-hover: var(--sl-color-neutral-700);
+  --sl-input-color-focus: var(--sl-color-neutral-700);
+  --sl-input-color-disabled: var(--sl-color-neutral-900);
+  --sl-input-icon-color: var(--sl-color-neutral-500);
+  --sl-input-icon-color-hover: var(--sl-color-neutral-600);
+  --sl-input-icon-color-focus: var(--sl-color-neutral-600);
+  --sl-input-placeholder-color: var(--sl-color-neutral-500);
+  --sl-input-placeholder-color-disabled: var(--sl-color-neutral-600);
+  --sl-input-spacing-small: var(--sl-spacing-small);
+  --sl-input-spacing-medium: var(--sl-spacing-medium);
+  --sl-input-spacing-large: var(--sl-spacing-large);
+
+  --sl-input-filled-background-color: var(--sl-color-neutral-100);
+  --sl-input-filled-background-color-hover: var(--sl-color-neutral-100);
+  --sl-input-filled-background-color-focus: var(--sl-color-neutral-100);
+  --sl-input-filled-background-color-disabled: var(--sl-color-neutral-100);
+  --sl-input-filled-color: var(--sl-color-neutral-800);
+  --sl-input-filled-color-hover: var(--sl-color-neutral-800);
+  --sl-input-filled-color-focus: var(--sl-color-neutral-700);
+  --sl-input-filled-color-disabled: var(--sl-color-neutral-800);
+
+  /* Labels */
+  --sl-input-label-font-size-small: var(--sl-font-size-small);
+  --sl-input-label-font-size-medium: var(--sl-font-size-medium);
+  --sl-input-label-font-size-large: var(--sl-font-size-large);
+
+  --sl-input-label-color: inherit;
+
+  /* Help text */
+  --sl-input-help-text-font-size-small: var(--sl-font-size-x-small);
+  --sl-input-help-text-font-size-medium: var(--sl-font-size-small);
+  --sl-input-help-text-font-size-large: var(--sl-font-size-medium);
+
+  --sl-input-help-text-color: var(--sl-color-neutral-500);
+
+  /* Toggles (checkboxes, radios, switches) */
+  --sl-toggle-size: 1rem;
+
+  /*
+   * Overlays
+   */
+
+  --sl-overlay-background-color: hsl(0 0% 0% / 43%);
+
+  /*
+   * Panels
+   */
+
+  --sl-panel-background-color: var(--sl-color-neutral-50);
+  --sl-panel-border-color: var(--sl-color-neutral-200);
+  --sl-panel-border-width: 1px;
+
+  /*
+   * Tooltips
+   */
+
+  --sl-tooltip-border-radius: var(--sl-border-radius-medium);
+  --sl-tooltip-background-color: var(--sl-color-neutral-800);
+  --sl-tooltip-color: var(--sl-color-neutral-0);
+  --sl-tooltip-font-family: var(--sl-font-sans);
+  --sl-tooltip-font-weight: var(--sl-font-weight-normal);
+  --sl-tooltip-font-size: var(--sl-font-size-small);
+  --sl-tooltip-line-height: var(--sl-line-height-dense);
+  --sl-tooltip-padding: var(--sl-spacing-2x-small) var(--sl-spacing-x-small);
+  --sl-tooltip-arrow-size: 5px;
+  --sl-tooltip-arrow-start-end-offset: 8px;
+
+  /*
+   * Z-indexes
+   */
+
+  --sl-z-index-drawer: 700;
+  --sl-z-index-dialog: 800;
+  --sl-z-index-dropdown: 900;
+  --sl-z-index-toast: 950;
+  --sl-z-index-tooltip: 1000;
+}
+
+/* _utility.css */
diff --git a/src/themes/dark.styles.ts b/src/themes/dark.styles.ts
deleted file mode 100644
index d2971357..00000000
--- a/src/themes/dark.styles.ts
+++ /dev/null
@@ -1,524 +0,0 @@
-import { css } from 'lit';
-
-export default css`
-  :host,
-  .sl-theme-dark {
-    /*
-     * Color Primitives
-     */
-
-    /* Gray */
-    --sl-color-gray-50: hsl(240 5.1% 15%);
-    --sl-color-gray-100: hsl(240 5.7% 18.2%);
-    --sl-color-gray-200: hsl(240 4.6% 22%);
-    --sl-color-gray-300: hsl(240 5% 27.6%);
-    --sl-color-gray-400: hsl(240 5% 35.5%);
-    --sl-color-gray-500: hsl(240 3.7% 44%);
-    --sl-color-gray-600: hsl(240 5.3% 58%);
-    --sl-color-gray-700: hsl(240 5.6% 73%);
-    --sl-color-gray-800: hsl(240 7.3% 84%);
-    --sl-color-gray-900: hsl(240 9.1% 91.8%);
-    --sl-color-gray-950: hsl(0 0% 95%);
-
-    /* Red */
-    --sl-color-red-50: hsl(0 56% 23.9%);
-    --sl-color-red-100: hsl(0.6 60% 33.9%);
-    --sl-color-red-200: hsl(0.9 67.2% 37.1%);
-    --sl-color-red-300: hsl(1.1 71.3% 43.7%);
-    --sl-color-red-400: hsl(1 76% 52.5%);
-    --sl-color-red-500: hsl(0.7 89.6% 57.2%);
-    --sl-color-red-600: hsl(0 98.6% 67.9%);
-    --sl-color-red-700: hsl(0 100% 72.3%);
-    --sl-color-red-800: hsl(0 100% 85.6%);
-    --sl-color-red-900: hsl(0 100% 90.3%);
-    --sl-color-red-950: hsl(0 100% 95.9%);
-
-    /* Orange */
-    --sl-color-orange-50: hsl(15 64.2% 23.3%);
-    --sl-color-orange-100: hsl(15.1 70.9% 31.1%);
-    --sl-color-orange-200: hsl(15.3 75.7% 35.5%);
-    --sl-color-orange-300: hsl(17.1 83.5% 42.7%);
-    --sl-color-orange-400: hsl(20.1 88% 50.8%);
-    --sl-color-orange-500: hsl(24.3 100% 50.5%);
-    --sl-color-orange-600: hsl(27.2 100% 57.7%);
-    --sl-color-orange-700: hsl(31.3 100% 68.7%);
-    --sl-color-orange-800: hsl(33.8 100% 79.3%);
-    --sl-color-orange-900: hsl(38.9 100% 87.7%);
-    --sl-color-orange-950: hsl(46.2 100% 95%);
-
-    /* Amber */
-    --sl-color-amber-50: hsl(21.9 66.3% 21.1%);
-    --sl-color-amber-100: hsl(21.5 73.6% 29.7%);
-    --sl-color-amber-200: hsl(22.3 77.6% 33.3%);
-    --sl-color-amber-300: hsl(25.4 84.2% 39.6%);
-    --sl-color-amber-400: hsl(31.4 87.4% 46.7%);
-    --sl-color-amber-500: hsl(37 96.6% 48.3%);
-    --sl-color-amber-600: hsl(43.3 100% 53.4%);
-    --sl-color-amber-700: hsl(46.5 100% 61.1%);
-    --sl-color-amber-800: hsl(49.3 100% 73%);
-    --sl-color-amber-900: hsl(51.8 100% 85%);
-    --sl-color-amber-950: hsl(60 100% 94.6%);
-
-    /* Yellow */
-    --sl-color-yellow-50: hsl(32.5 60% 18.2%);
-    --sl-color-yellow-100: hsl(28.1 68.6% 29%);
-    --sl-color-yellow-200: hsl(31.3 75.8% 30.8%);
-    --sl-color-yellow-300: hsl(34.7 84.4% 35.3%);
-    --sl-color-yellow-400: hsl(40.1 87.3% 43.3%);
-    --sl-color-yellow-500: hsl(44.7 88% 46%);
-    --sl-color-yellow-600: hsl(47.7 100% 50.9%);
-    --sl-color-yellow-700: hsl(51.3 100% 59.9%);
-    --sl-color-yellow-800: hsl(54.6 100% 73%);
-    --sl-color-yellow-900: hsl(58.9 100% 84.2%);
-    --sl-color-yellow-950: hsl(60 100% 94%);
-
-    /* Lime */
-    --sl-color-lime-50: hsl(86.5 54.4% 18%);
-    --sl-color-lime-100: hsl(87.6 56.8% 23.3%);
-    --sl-color-lime-200: hsl(85.8 63.2% 24.5%);
-    --sl-color-lime-300: hsl(86.1 72% 29.4%);
-    --sl-color-lime-400: hsl(85.5 76.8% 37.3%);
-    --sl-color-lime-500: hsl(84.3 74.2% 42.1%);
-    --sl-color-lime-600: hsl(82.8 81.5% 52.6%);
-    --sl-color-lime-700: hsl(82 89.9% 64%);
-    --sl-color-lime-800: hsl(80.9 97.9% 76.6%);
-    --sl-color-lime-900: hsl(77.9 100% 85.8%);
-    --sl-color-lime-950: hsl(69.5 100% 93.8%);
-
-    /* Green */
-    --sl-color-green-50: hsl(144.3 53.6% 16%);
-    --sl-color-green-100: hsl(143.2 55.4% 23.5%);
-    --sl-color-green-200: hsl(141.5 58.2% 26.3%);
-    --sl-color-green-300: hsl(140.8 64.2% 31.8%);
-    --sl-color-green-400: hsl(140.3 68% 39.2%);
-    --sl-color-green-500: hsl(141.1 64.9% 43%);
-    --sl-color-green-600: hsl(141.6 72.4% 55.2%);
-    --sl-color-green-700: hsl(141.7 82.7% 70.1%);
-    --sl-color-green-800: hsl(141 90.9% 82.1%);
-    --sl-color-green-900: hsl(142 100% 89.1%);
-    --sl-color-green-950: hsl(144 100% 95.5%);
-
-    /* Emerald */
-    --sl-color-emerald-50: hsl(164.3 75% 13.5%);
-    --sl-color-emerald-100: hsl(163.5 72.6% 20.1%);
-    --sl-color-emerald-200: hsl(162.1 73.7% 22.4%);
-    --sl-color-emerald-300: hsl(161.3 77.3% 27.6%);
-    --sl-color-emerald-400: hsl(159.6 77.1% 34.3%);
-    --sl-color-emerald-500: hsl(159.1 73.5% 37.9%);
-    --sl-color-emerald-600: hsl(157.8 66.8% 48.9%);
-    --sl-color-emerald-700: hsl(156.2 76.1% 63.8%);
-    --sl-color-emerald-800: hsl(152.4 84.4% 77.4%);
-    --sl-color-emerald-900: hsl(149.3 100% 87%);
-    --sl-color-emerald-950: hsl(158.6 100% 94.8%);
-
-    /* Teal */
-    --sl-color-teal-50: hsl(176.5 51.5% 15.4%);
-    --sl-color-teal-100: hsl(175.9 54.7% 22.3%);
-    --sl-color-teal-200: hsl(175.9 60.7% 23.9%);
-    --sl-color-teal-300: hsl(174.5 67.3% 28.8%);
-    --sl-color-teal-400: hsl(174.4 71.9% 34.9%);
-    --sl-color-teal-500: hsl(173.1 71% 38.3%);
-    --sl-color-teal-600: hsl(172.3 68.2% 48.1%);
-    --sl-color-teal-700: hsl(170.5 81.3% 61.5%);
-    --sl-color-teal-800: hsl(168.4 92.1% 75.2%);
-    --sl-color-teal-900: hsl(168.3 100% 86%);
-    --sl-color-teal-950: hsl(180 100% 95.5%);
-
-    /* Cyan */
-    --sl-color-cyan-50: hsl(197.1 53.8% 20.3%);
-    --sl-color-cyan-100: hsl(196.8 57.3% 27.2%);
-    --sl-color-cyan-200: hsl(195.3 62.7% 29.4%);
-    --sl-color-cyan-300: hsl(193.5 71.3% 34.1%);
-    --sl-color-cyan-400: hsl(192.5 76.8% 40.6%);
-    --sl-color-cyan-500: hsl(189.4 78.6% 42.6%);
-    --sl-color-cyan-600: hsl(188.2 89.1% 51.7%);
-    --sl-color-cyan-700: hsl(187 98.6% 66.2%);
-    --sl-color-cyan-800: hsl(184.9 100% 78.3%);
-    --sl-color-cyan-900: hsl(180 100% 86.6%);
-    --sl-color-cyan-950: hsl(180 100% 94.8%);
-
-    /* Sky */
-    --sl-color-sky-50: hsl(203 63.8% 20.9%);
-    --sl-color-sky-100: hsl(203.4 70.4% 28%);
-    --sl-color-sky-200: hsl(202.7 75.8% 30.8%);
-    --sl-color-sky-300: hsl(203.1 80.4% 36.1%);
-    --sl-color-sky-400: hsl(202.1 80.5% 44.3%);
-    --sl-color-sky-500: hsl(199.7 85.9% 47.7%);
-    --sl-color-sky-600: hsl(198.7 97.9% 57.2%);
-    --sl-color-sky-700: hsl(198.7 100% 70.5%);
-    --sl-color-sky-800: hsl(198.8 100% 82.5%);
-    --sl-color-sky-900: hsl(198.5 100% 89.9%);
-    --sl-color-sky-950: hsl(186 100% 95.5%);
-
-    /* Blue */
-    --sl-color-blue-50: hsl(227.1 49.5% 22.7%);
-    --sl-color-blue-100: hsl(225.8 58.9% 36.8%);
-    --sl-color-blue-200: hsl(227.7 64.4% 42.9%);
-    --sl-color-blue-300: hsl(226.1 72.7% 51.2%);
-    --sl-color-blue-400: hsl(222.6 86.5% 56.3%);
-    --sl-color-blue-500: hsl(217.8 95.8% 57.4%);
-    --sl-color-blue-600: hsl(213.3 100% 65%);
-    --sl-color-blue-700: hsl(210.9 100% 74.8%);
-    --sl-color-blue-800: hsl(211.5 100% 83.4%);
-    --sl-color-blue-900: hsl(211 100% 88.9%);
-    --sl-color-blue-950: hsl(201.8 100% 95.3%);
-
-    /* Indigo */
-    --sl-color-indigo-50: hsl(243.5 40.8% 27%);
-    --sl-color-indigo-100: hsl(242.9 45.7% 37.6%);
-    --sl-color-indigo-200: hsl(244.7 52.7% 43.1%);
-    --sl-color-indigo-300: hsl(245.3 60.5% 52.4%);
-    --sl-color-indigo-400: hsl(244.1 79.2% 60.4%);
-    --sl-color-indigo-500: hsl(239.6 88.7% 63.8%);
-    --sl-color-indigo-600: hsl(234.5 96.7% 70.9%);
-    --sl-color-indigo-700: hsl(229.4 100% 78.3%);
-    --sl-color-indigo-800: hsl(227.1 100% 85%);
-    --sl-color-indigo-900: hsl(223.8 100% 89.9%);
-    --sl-color-indigo-950: hsl(220 100% 95.1%);
-
-    /* Violet */
-    --sl-color-violet-50: hsl(265.1 57.3% 25.4%);
-    --sl-color-violet-100: hsl(263.5 63.8% 39.4%);
-    --sl-color-violet-200: hsl(263.4 66.2% 44.1%);
-    --sl-color-violet-300: hsl(263.7 72.8% 52.4%);
-    --sl-color-violet-400: hsl(262.5 87.3% 59.8%);
-    --sl-color-violet-500: hsl(258.3 95.1% 63.2%);
-    --sl-color-violet-600: hsl(255.1 100% 67.2%);
-    --sl-color-violet-700: hsl(253 100% 81.5%);
-    --sl-color-violet-800: hsl(251.7 100% 87.9%);
-    --sl-color-violet-900: hsl(254.1 100% 91.7%);
-    --sl-color-violet-950: hsl(257.1 100% 96.1%);
-
-    /* Purple */
-    --sl-color-purple-50: hsl(276 54.3% 20.5%);
-    --sl-color-purple-100: hsl(273.6 61.8% 35.4%);
-    --sl-color-purple-200: hsl(272.9 64% 41.4%);
-    --sl-color-purple-300: hsl(271.9 68.1% 49.2%);
-    --sl-color-purple-400: hsl(271.5 85.1% 57.8%);
-    --sl-color-purple-500: hsl(270.7 96.4% 62.1%);
-    --sl-color-purple-600: hsl(270.5 100% 71.9%);
-    --sl-color-purple-700: hsl(270.9 100% 81.3%);
-    --sl-color-purple-800: hsl(272.4 100% 87.7%);
-    --sl-color-purple-900: hsl(276.7 100% 91.5%);
-    --sl-color-purple-950: hsl(300 100% 96.5%);
-
-    /* Fuchsia */
-
-    --sl-color-fuchsia-50: hsl(297.1 51.2% 18.6%);
-    --sl-color-fuchsia-100: hsl(296.7 59.5% 31.5%);
-    --sl-color-fuchsia-200: hsl(295.4 65.4% 35.1%);
-    --sl-color-fuchsia-300: hsl(294.6 67.4% 42.2%);
-    --sl-color-fuchsia-400: hsl(293.3 68.7% 51.2%);
-    --sl-color-fuchsia-500: hsl(292.1 88.4% 57.7%);
-    --sl-color-fuchsia-600: hsl(292 98.5% 59.5%);
-    --sl-color-fuchsia-700: hsl(292.4 100% 79.5%);
-    --sl-color-fuchsia-800: hsl(292.9 100% 86.8%);
-    --sl-color-fuchsia-900: hsl(300 100% 91.5%);
-    --sl-color-fuchsia-950: hsl(300 100% 96.3%);
-
-    /* Pink */
-    --sl-color-pink-50: hsl(336.2 59.6% 20%);
-    --sl-color-pink-100: hsl(336.8 63.9% 34%);
-    --sl-color-pink-200: hsl(336.8 68.7% 37.6%);
-    --sl-color-pink-300: hsl(336.1 71.8% 44.5%);
-    --sl-color-pink-400: hsl(333.9 74.9% 53.1%);
-    --sl-color-pink-500: hsl(330.7 86.3% 57.7%);
-    --sl-color-pink-600: hsl(328.6 91.5% 67.2%);
-    --sl-color-pink-700: hsl(327.4 97.6% 78.7%);
-    --sl-color-pink-800: hsl(325.1 100% 86.6%);
-    --sl-color-pink-900: hsl(322.1 100% 91.3%);
-    --sl-color-pink-950: hsl(315 100% 95.9%);
-
-    /* Rose */
-    --sl-color-rose-50: hsl(342.3 62.9% 21.5%);
-    --sl-color-rose-100: hsl(342.8 68.9% 34.2%);
-    --sl-color-rose-200: hsl(344.8 72.6% 37.3%);
-    --sl-color-rose-300: hsl(346.9 75.8% 43.7%);
-    --sl-color-rose-400: hsl(348.2 80.1% 52.7%);
-    --sl-color-rose-500: hsl(350.4 94.8% 57.5%);
-    --sl-color-rose-600: hsl(351.2 100% 58.1%);
-    --sl-color-rose-700: hsl(352.3 100% 78.1%);
-    --sl-color-rose-800: hsl(352 100% 86.2%);
-    --sl-color-rose-900: hsl(354.5 100% 90.7%);
-    --sl-color-rose-950: hsl(353.3 100% 95.7%);
-
-    /*
-     * Theme Tokens
-     */
-
-    /* Primary */
-    --sl-color-primary-50: var(--sl-color-sky-50);
-    --sl-color-primary-100: var(--sl-color-sky-100);
-    --sl-color-primary-200: var(--sl-color-sky-200);
-    --sl-color-primary-300: var(--sl-color-sky-300);
-    --sl-color-primary-400: var(--sl-color-sky-400);
-    --sl-color-primary-500: var(--sl-color-sky-500);
-    --sl-color-primary-600: var(--sl-color-sky-600);
-    --sl-color-primary-700: var(--sl-color-sky-700);
-    --sl-color-primary-800: var(--sl-color-sky-800);
-    --sl-color-primary-900: var(--sl-color-sky-900);
-    --sl-color-primary-950: var(--sl-color-sky-950);
-
-    /* Success */
-    --sl-color-success-50: var(--sl-color-green-50);
-    --sl-color-success-100: var(--sl-color-green-100);
-    --sl-color-success-200: var(--sl-color-green-200);
-    --sl-color-success-300: var(--sl-color-green-300);
-    --sl-color-success-400: var(--sl-color-green-400);
-    --sl-color-success-500: var(--sl-color-green-500);
-    --sl-color-success-600: var(--sl-color-green-600);
-    --sl-color-success-700: var(--sl-color-green-700);
-    --sl-color-success-800: var(--sl-color-green-800);
-    --sl-color-success-900: var(--sl-color-green-900);
-    --sl-color-success-950: var(--sl-color-green-950);
-
-    /* Warning */
-    --sl-color-warning-50: var(--sl-color-amber-50);
-    --sl-color-warning-100: var(--sl-color-amber-100);
-    --sl-color-warning-200: var(--sl-color-amber-200);
-    --sl-color-warning-300: var(--sl-color-amber-300);
-    --sl-color-warning-400: var(--sl-color-amber-400);
-    --sl-color-warning-500: var(--sl-color-amber-500);
-    --sl-color-warning-600: var(--sl-color-amber-600);
-    --sl-color-warning-700: var(--sl-color-amber-700);
-    --sl-color-warning-800: var(--sl-color-amber-800);
-    --sl-color-warning-900: var(--sl-color-amber-900);
-    --sl-color-warning-950: var(--sl-color-amber-950);
-
-    /* Danger */
-    --sl-color-danger-50: var(--sl-color-red-50);
-    --sl-color-danger-100: var(--sl-color-red-100);
-    --sl-color-danger-200: var(--sl-color-red-200);
-    --sl-color-danger-300: var(--sl-color-red-300);
-    --sl-color-danger-400: var(--sl-color-red-400);
-    --sl-color-danger-500: var(--sl-color-red-500);
-    --sl-color-danger-600: var(--sl-color-red-600);
-    --sl-color-danger-700: var(--sl-color-red-700);
-    --sl-color-danger-800: var(--sl-color-red-800);
-    --sl-color-danger-900: var(--sl-color-red-900);
-    --sl-color-danger-950: var(--sl-color-red-950);
-
-    /* Neutral */
-    --sl-color-neutral-50: var(--sl-color-gray-50);
-    --sl-color-neutral-100: var(--sl-color-gray-100);
-    --sl-color-neutral-200: var(--sl-color-gray-200);
-    --sl-color-neutral-300: var(--sl-color-gray-300);
-    --sl-color-neutral-400: var(--sl-color-gray-400);
-    --sl-color-neutral-500: var(--sl-color-gray-500);
-    --sl-color-neutral-600: var(--sl-color-gray-600);
-    --sl-color-neutral-700: var(--sl-color-gray-700);
-    --sl-color-neutral-800: var(--sl-color-gray-800);
-    --sl-color-neutral-900: var(--sl-color-gray-900);
-    --sl-color-neutral-950: var(--sl-color-gray-950);
-
-    /* Neutral one-offs */
-    --sl-color-neutral-0: hsl(240, 5.9%, 11%);
-    --sl-color-neutral-1000: hsl(0, 0%, 100%);
-
-    /*
-     * Border radii
-     */
-
-    --sl-border-radius-small: 0.1875rem; /* 3px */
-    --sl-border-radius-medium: 0.25rem; /* 4px */
-    --sl-border-radius-large: 0.5rem; /* 8px */
-    --sl-border-radius-x-large: 1rem; /* 16px */
-
-    --sl-border-radius-circle: 50%;
-    --sl-border-radius-pill: 9999px;
-
-    /*
-     * Elevations
-     */
-
-    --sl-shadow-x-small: 0 1px 2px rgb(0 0 0 / 18%);
-    --sl-shadow-small: 0 1px 2px rgb(0 0 0 / 24%);
-    --sl-shadow-medium: 0 2px 4px rgb(0 0 0 / 24%);
-    --sl-shadow-large: 0 2px 8px rgb(0 0 0 / 24%);
-    --sl-shadow-x-large: 0 4px 16px rgb(0 0 0 / 24%);
-
-    /*
-     * Spacings
-     */
-
-    --sl-spacing-3x-small: 0.125rem; /* 2px */
-    --sl-spacing-2x-small: 0.25rem; /* 4px */
-    --sl-spacing-x-small: 0.5rem; /* 8px */
-    --sl-spacing-small: 0.75rem; /* 12px */
-    --sl-spacing-medium: 1rem; /* 16px */
-    --sl-spacing-large: 1.25rem; /* 20px */
-    --sl-spacing-x-large: 1.75rem; /* 28px */
-    --sl-spacing-2x-large: 2.25rem; /* 36px */
-    --sl-spacing-3x-large: 3rem; /* 48px */
-    --sl-spacing-4x-large: 4.5rem; /* 72px */
-
-    /*
-     * Transitions
-     */
-
-    --sl-transition-x-slow: 1000ms;
-    --sl-transition-slow: 500ms;
-    --sl-transition-medium: 250ms;
-    --sl-transition-fast: 150ms;
-    --sl-transition-x-fast: 50ms;
-
-    /*
-     * Typography
-     */
-
-    /* Fonts */
-    --sl-font-mono: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;
-    --sl-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
-      'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
-    --sl-font-serif: Georgia, 'Times New Roman', serif;
-
-    /* Font sizes */
-    --sl-font-size-2x-small: 0.625rem; /* 10px */
-    --sl-font-size-x-small: 0.75rem; /* 12px */
-    --sl-font-size-small: 0.875rem; /* 14px */
-    --sl-font-size-medium: 1rem; /* 16px */
-    --sl-font-size-large: 1.25rem; /* 20px */
-    --sl-font-size-x-large: 1.5rem; /* 24px */
-    --sl-font-size-2x-large: 2.25rem; /* 36px */
-    --sl-font-size-3x-large: 3rem; /* 48px */
-    --sl-font-size-4x-large: 4.5rem; /* 72px */
-
-    /* Font weights */
-    --sl-font-weight-light: 300;
-    --sl-font-weight-normal: 400;
-    --sl-font-weight-semibold: 500;
-    --sl-font-weight-bold: 700;
-
-    /* Letter spacings */
-    --sl-letter-spacing-denser: -0.03em;
-    --sl-letter-spacing-dense: -0.015em;
-    --sl-letter-spacing-normal: normal;
-    --sl-letter-spacing-loose: 0.075em;
-    --sl-letter-spacing-looser: 0.15em;
-
-    /* Line heights */
-    --sl-line-height-denser: 1;
-    --sl-line-height-dense: 1.4;
-    --sl-line-height-normal: 1.8;
-    --sl-line-height-loose: 2.2;
-    --sl-line-height-looser: 2.6;
-
-    /*
-     * Forms
-     */
-
-    /* Focus ring */
-    --sl-focus-ring-alpha: 45%;
-    --sl-focus-ring-width: 3px;
-    --sl-focus-ring: 0 0 0 var(--sl-focus-ring-width) hsl(198.6 88.7% 48.4% / var(--sl-focus-ring-alpha));
-
-    /* Buttons */
-    --sl-button-font-size-small: var(--sl-font-size-x-small);
-    --sl-button-font-size-medium: var(--sl-font-size-small);
-    --sl-button-font-size-large: var(--sl-font-size-medium);
-
-    /* Inputs */
-    --sl-input-height-small: 1.875rem; /* 30px */
-    --sl-input-height-medium: 2.5rem; /* 40px */
-    --sl-input-height-large: 3.125rem; /* 50px */
-
-    --sl-input-background-color: var(--sl-color-neutral-0);
-    --sl-input-background-color-hover: var(--sl-input-background-color);
-    --sl-input-background-color-focus: var(--sl-input-background-color);
-    --sl-input-background-color-disabled: var(--sl-color-neutral-100);
-    --sl-input-border-color: var(--sl-color-neutral-300);
-    --sl-input-border-color-hover: var(--sl-color-neutral-400);
-    --sl-input-border-color-focus: var(--sl-color-primary-500);
-    --sl-input-border-color-disabled: var(--sl-color-neutral-300);
-    --sl-input-border-width: 1px;
-
-    --sl-input-border-radius-small: var(--sl-border-radius-medium);
-    --sl-input-border-radius-medium: var(--sl-border-radius-medium);
-    --sl-input-border-radius-large: var(--sl-border-radius-medium);
-
-    --sl-input-font-family: var(--sl-font-sans);
-    --sl-input-font-weight: var(--sl-font-weight-normal);
-    --sl-input-font-size-small: var(--sl-font-size-small);
-    --sl-input-font-size-medium: var(--sl-font-size-medium);
-    --sl-input-font-size-large: var(--sl-font-size-large);
-    --sl-input-letter-spacing: var(--sl-letter-spacing-normal);
-
-    --sl-input-color: var(--sl-color-neutral-700);
-    --sl-input-color-hover: var(--sl-color-neutral-700);
-    --sl-input-color-focus: var(--sl-color-neutral-700);
-    --sl-input-color-disabled: var(--sl-color-neutral-900);
-    --sl-input-icon-color: var(--sl-color-neutral-500);
-    --sl-input-icon-color-hover: var(--sl-color-neutral-600);
-    --sl-input-icon-color-focus: var(--sl-color-neutral-600);
-    --sl-input-placeholder-color: var(--sl-color-neutral-500);
-    --sl-input-placeholder-color-disabled: var(--sl-color-neutral-600);
-    --sl-input-spacing-small: var(--sl-spacing-small);
-    --sl-input-spacing-medium: var(--sl-spacing-medium);
-    --sl-input-spacing-large: var(--sl-spacing-large);
-
-    --sl-input-filled-background-color: var(--sl-color-neutral-100);
-    --sl-input-filled-background-color-hover: var(--sl-color-neutral-100);
-    --sl-input-filled-background-color-focus: var(--sl-color-neutral-100);
-    --sl-input-filled-background-color-disabled: var(--sl-color-neutral-100);
-    --sl-input-filled-color: var(--sl-color-neutral-800);
-    --sl-input-filled-color-hover: var(--sl-color-neutral-800);
-    --sl-input-filled-color-focus: var(--sl-color-neutral-700);
-    --sl-input-filled-color-disabled: var(--sl-color-neutral-800);
-
-    /* Labels */
-    --sl-input-label-font-size-small: var(--sl-font-size-small);
-    --sl-input-label-font-size-medium: var(--sl-font-size-medium);
-    --sl-input-label-font-size-large: var(--sl-font-size-large);
-
-    --sl-input-label-color: inherit;
-
-    /* Help text */
-    --sl-input-help-text-font-size-small: var(--sl-font-size-x-small);
-    --sl-input-help-text-font-size-medium: var(--sl-font-size-small);
-    --sl-input-help-text-font-size-large: var(--sl-font-size-medium);
-
-    --sl-input-help-text-color: var(--sl-color-neutral-500);
-
-    /* Toggles (checkboxes, radios, switches) */
-    --sl-toggle-size: 1rem;
-
-    /*
-     * Overlays
-     */
-
-    --sl-overlay-background-color: hsl(0 0% 0% / 43%);
-
-    /*
-     * Panels
-     */
-
-    --sl-panel-background-color: var(--sl-color-neutral-50);
-    --sl-panel-border-color: var(--sl-color-neutral-200);
-    --sl-panel-border-width: 1px;
-
-    /*
-     * Tooltips
-     */
-
-    --sl-tooltip-border-radius: var(--sl-border-radius-medium);
-    --sl-tooltip-background-color: var(--sl-color-neutral-800);
-    --sl-tooltip-color: var(--sl-color-neutral-0);
-    --sl-tooltip-font-family: var(--sl-font-sans);
-    --sl-tooltip-font-weight: var(--sl-font-weight-normal);
-    --sl-tooltip-font-size: var(--sl-font-size-small);
-    --sl-tooltip-line-height: var(--sl-line-height-dense);
-    --sl-tooltip-padding: var(--sl-spacing-2x-small) var(--sl-spacing-x-small);
-    --sl-tooltip-arrow-size: 5px;
-    --sl-tooltip-arrow-start-end-offset: 8px;
-
-    /*
-     * Z-indexes
-     */
-
-    --sl-z-index-drawer: 700;
-    --sl-z-index-dialog: 800;
-    --sl-z-index-dropdown: 900;
-    --sl-z-index-toast: 950;
-    --sl-z-index-tooltip: 1000;
-  }
-`;
diff --git a/src/themes/light.css b/src/themes/light.css
new file mode 100644
index 00000000..acbfc3eb
--- /dev/null
+++ b/src/themes/light.css
@@ -0,0 +1,522 @@
+:root,
+:host,
+.sl-theme-light {
+  /*
+   * Color Primitives
+   */
+
+  /* Gray */
+  --sl-color-gray-50: hsl(0 0% 97.5%);
+  --sl-color-gray-100: hsl(240 4.8% 95.9%);
+  --sl-color-gray-200: hsl(240 5.9% 90%);
+  --sl-color-gray-300: hsl(240 4.9% 83.9%);
+  --sl-color-gray-400: hsl(240 5% 64.9%);
+  --sl-color-gray-500: hsl(240 3.8% 46.1%);
+  --sl-color-gray-600: hsl(240 5.2% 33.9%);
+  --sl-color-gray-700: hsl(240 5.3% 26.1%);
+  --sl-color-gray-800: hsl(240 3.7% 15.9%);
+  --sl-color-gray-900: hsl(240 5.9% 10%);
+  --sl-color-gray-950: hsl(240 7.3% 8%);
+
+  /* Red */
+  --sl-color-red-50: hsl(0 85.7% 97.3%);
+  --sl-color-red-100: hsl(0 93.3% 94.1%);
+  --sl-color-red-200: hsl(0 96.3% 89.4%);
+  --sl-color-red-300: hsl(0 93.5% 81.8%);
+  --sl-color-red-400: hsl(0 90.6% 70.8%);
+  --sl-color-red-500: hsl(0 84.2% 60.2%);
+  --sl-color-red-600: hsl(0 72.2% 50.6%);
+  --sl-color-red-700: hsl(0 73.7% 41.8%);
+  --sl-color-red-800: hsl(0 70% 35.3%);
+  --sl-color-red-900: hsl(0 62.8% 30.6%);
+  --sl-color-red-950: hsl(0 60% 19.6%);
+
+  /* Orange */
+  --sl-color-orange-50: hsl(33.3 100% 96.5%);
+  --sl-color-orange-100: hsl(34.3 100% 91.8%);
+  --sl-color-orange-200: hsl(32.1 97.7% 83.1%);
+  --sl-color-orange-300: hsl(30.7 97.2% 72.4%);
+  --sl-color-orange-400: hsl(27 96% 61%);
+  --sl-color-orange-500: hsl(24.6 95% 53.1%);
+  --sl-color-orange-600: hsl(20.5 90.2% 48.2%);
+  --sl-color-orange-700: hsl(17.5 88.3% 40.4%);
+  --sl-color-orange-800: hsl(15 79.1% 33.7%);
+  --sl-color-orange-900: hsl(15.3 74.6% 27.8%);
+  --sl-color-orange-950: hsl(15.2 69.1% 19%);
+
+  /* Amber */
+  --sl-color-amber-50: hsl(48 100% 96.1%);
+  --sl-color-amber-100: hsl(48 96.5% 88.8%);
+  --sl-color-amber-200: hsl(48 96.6% 76.7%);
+  --sl-color-amber-300: hsl(45.9 96.7% 64.5%);
+  --sl-color-amber-400: hsl(43.3 96.4% 56.3%);
+  --sl-color-amber-500: hsl(37.7 92.1% 50.2%);
+  --sl-color-amber-600: hsl(32.1 94.6% 43.7%);
+  --sl-color-amber-700: hsl(26 90.5% 37.1%);
+  --sl-color-amber-800: hsl(22.7 82.5% 31.4%);
+  --sl-color-amber-900: hsl(21.7 77.8% 26.5%);
+  --sl-color-amber-950: hsl(22.9 74.1% 16.7%);
+
+  /* Yellow */
+  --sl-color-yellow-50: hsl(54.5 91.7% 95.3%);
+  --sl-color-yellow-100: hsl(54.9 96.7% 88%);
+  --sl-color-yellow-200: hsl(52.8 98.3% 76.9%);
+  --sl-color-yellow-300: hsl(50.4 97.8% 63.5%);
+  --sl-color-yellow-400: hsl(47.9 95.8% 53.1%);
+  --sl-color-yellow-500: hsl(45.4 93.4% 47.5%);
+  --sl-color-yellow-600: hsl(40.6 96.1% 40.4%);
+  --sl-color-yellow-700: hsl(35.5 91.7% 32.9%);
+  --sl-color-yellow-800: hsl(31.8 81% 28.8%);
+  --sl-color-yellow-900: hsl(28.4 72.5% 25.7%);
+  --sl-color-yellow-950: hsl(33.1 69% 13.9%);
+
+  /* Lime */
+  --sl-color-lime-50: hsl(78.3 92% 95.1%);
+  --sl-color-lime-100: hsl(79.6 89.1% 89.2%);
+  --sl-color-lime-200: hsl(80.9 88.5% 79.6%);
+  --sl-color-lime-300: hsl(82 84.5% 67.1%);
+  --sl-color-lime-400: hsl(82.7 78% 55.5%);
+  --sl-color-lime-500: hsl(83.7 80.5% 44.3%);
+  --sl-color-lime-600: hsl(84.8 85.2% 34.5%);
+  --sl-color-lime-700: hsl(85.9 78.4% 27.3%);
+  --sl-color-lime-800: hsl(86.3 69% 22.7%);
+  --sl-color-lime-900: hsl(87.6 61.2% 20.2%);
+  --sl-color-lime-950: hsl(86.5 60.6% 13.9%);
+
+  /* Green */
+  --sl-color-green-50: hsl(138.5 76.5% 96.7%);
+  --sl-color-green-100: hsl(140.6 84.2% 92.5%);
+  --sl-color-green-200: hsl(141 78.9% 85.1%);
+  --sl-color-green-300: hsl(141.7 76.6% 73.1%);
+  --sl-color-green-400: hsl(141.9 69.2% 58%);
+  --sl-color-green-500: hsl(142.1 70.6% 45.3%);
+  --sl-color-green-600: hsl(142.1 76.2% 36.3%);
+  --sl-color-green-700: hsl(142.4 71.8% 29.2%);
+  --sl-color-green-800: hsl(142.8 64.2% 24.1%);
+  --sl-color-green-900: hsl(143.8 61.2% 20.2%);
+  --sl-color-green-950: hsl(144.3 60.7% 12%);
+
+  /* Emerald */
+  --sl-color-emerald-50: hsl(151.8 81% 95.9%);
+  --sl-color-emerald-100: hsl(149.3 80.4% 90%);
+  --sl-color-emerald-200: hsl(152.4 76% 80.4%);
+  --sl-color-emerald-300: hsl(156.2 71.6% 66.9%);
+  --sl-color-emerald-400: hsl(158.1 64.4% 51.6%);
+  --sl-color-emerald-500: hsl(160.1 84.1% 39.4%);
+  --sl-color-emerald-600: hsl(161.4 93.5% 30.4%);
+  --sl-color-emerald-700: hsl(162.9 93.5% 24.3%);
+  --sl-color-emerald-800: hsl(163.1 88.1% 19.8%);
+  --sl-color-emerald-900: hsl(164.2 85.7% 16.5%);
+  --sl-color-emerald-950: hsl(164.3 87.5% 9.4%);
+
+  /* Teal */
+  --sl-color-teal-50: hsl(166.2 76.5% 96.7%);
+  --sl-color-teal-100: hsl(167.2 85.5% 89.2%);
+  --sl-color-teal-200: hsl(168.4 83.8% 78.2%);
+  --sl-color-teal-300: hsl(170.6 76.9% 64.3%);
+  --sl-color-teal-400: hsl(172.5 66% 50.4%);
+  --sl-color-teal-500: hsl(173.4 80.4% 40%);
+  --sl-color-teal-600: hsl(174.7 83.9% 31.6%);
+  --sl-color-teal-700: hsl(175.3 77.4% 26.1%);
+  --sl-color-teal-800: hsl(176.1 69.4% 21.8%);
+  --sl-color-teal-900: hsl(175.9 60.8% 19%);
+  --sl-color-teal-950: hsl(176.5 58.6% 11.4%);
+
+  /* Cyan */
+  --sl-color-cyan-50: hsl(183.2 100% 96.3%);
+  --sl-color-cyan-100: hsl(185.1 95.9% 90.4%);
+  --sl-color-cyan-200: hsl(186.2 93.5% 81.8%);
+  --sl-color-cyan-300: hsl(187 92.4% 69%);
+  --sl-color-cyan-400: hsl(187.9 85.7% 53.3%);
+  --sl-color-cyan-500: hsl(188.7 94.5% 42.7%);
+  --sl-color-cyan-600: hsl(191.6 91.4% 36.5%);
+  --sl-color-cyan-700: hsl(192.9 82.3% 31%);
+  --sl-color-cyan-800: hsl(194.4 69.6% 27.1%);
+  --sl-color-cyan-900: hsl(196.4 63.6% 23.7%);
+  --sl-color-cyan-950: hsl(196.8 61% 16.1%);
+
+  /* Sky */
+  --sl-color-sky-50: hsl(204 100% 97.1%);
+  --sl-color-sky-100: hsl(204 93.8% 93.7%);
+  --sl-color-sky-200: hsl(200.6 94.4% 86.1%);
+  --sl-color-sky-300: hsl(199.4 95.5% 73.9%);
+  --sl-color-sky-400: hsl(198.4 93.2% 59.6%);
+  --sl-color-sky-500: hsl(198.6 88.7% 48.4%);
+  --sl-color-sky-600: hsl(200.4 98% 39.4%);
+  --sl-color-sky-700: hsl(201.3 96.3% 32.2%);
+  --sl-color-sky-800: hsl(201 90% 27.5%);
+  --sl-color-sky-900: hsl(202 80.3% 23.9%);
+  --sl-color-sky-950: hsl(202.3 73.8% 16.5%);
+
+  /* Blue */
+  --sl-color-blue-50: hsl(213.8 100% 96.9%);
+  --sl-color-blue-100: hsl(214.3 94.6% 92.7%);
+  --sl-color-blue-200: hsl(213.3 96.9% 87.3%);
+  --sl-color-blue-300: hsl(211.7 96.4% 78.4%);
+  --sl-color-blue-400: hsl(213.1 93.9% 67.8%);
+  --sl-color-blue-500: hsl(217.2 91.2% 59.8%);
+  --sl-color-blue-600: hsl(221.2 83.2% 53.3%);
+  --sl-color-blue-700: hsl(224.3 76.3% 48%);
+  --sl-color-blue-800: hsl(225.9 70.7% 40.2%);
+  --sl-color-blue-900: hsl(224.4 64.3% 32.9%);
+  --sl-color-blue-950: hsl(226.2 55.3% 18.4%);
+
+  /* Indigo */
+  --sl-color-indigo-50: hsl(225.9 100% 96.7%);
+  --sl-color-indigo-100: hsl(226.5 100% 93.9%);
+  --sl-color-indigo-200: hsl(228 96.5% 88.8%);
+  --sl-color-indigo-300: hsl(229.7 93.5% 81.8%);
+  --sl-color-indigo-400: hsl(234.5 89.5% 73.9%);
+  --sl-color-indigo-500: hsl(238.7 83.5% 66.7%);
+  --sl-color-indigo-600: hsl(243.4 75.4% 58.6%);
+  --sl-color-indigo-700: hsl(244.5 57.9% 50.6%);
+  --sl-color-indigo-800: hsl(243.7 54.5% 41.4%);
+  --sl-color-indigo-900: hsl(242.2 47.4% 34.3%);
+  --sl-color-indigo-950: hsl(243.5 43.6% 22.9%);
+
+  /* Violet */
+  --sl-color-violet-50: hsl(250 100% 97.6%);
+  --sl-color-violet-100: hsl(251.4 91.3% 95.5%);
+  --sl-color-violet-200: hsl(250.5 95.2% 91.8%);
+  --sl-color-violet-300: hsl(252.5 94.7% 85.1%);
+  --sl-color-violet-400: hsl(255.1 91.7% 76.3%);
+  --sl-color-violet-500: hsl(258.3 89.5% 66.3%);
+  --sl-color-violet-600: hsl(262.1 83.3% 57.8%);
+  --sl-color-violet-700: hsl(263.4 70% 50.4%);
+  --sl-color-violet-800: hsl(263.4 69.3% 42.2%);
+  --sl-color-violet-900: hsl(263.5 67.4% 34.9%);
+  --sl-color-violet-950: hsl(265.1 61.5% 21.4%);
+
+  /* Purple */
+  --sl-color-purple-50: hsl(270 100% 98%);
+  --sl-color-purple-100: hsl(268.7 100% 95.5%);
+  --sl-color-purple-200: hsl(268.6 100% 91.8%);
+  --sl-color-purple-300: hsl(269.2 97.4% 85.1%);
+  --sl-color-purple-400: hsl(270 95.2% 75.3%);
+  --sl-color-purple-500: hsl(270.7 91% 65.1%);
+  --sl-color-purple-600: hsl(271.5 81.3% 55.9%);
+  --sl-color-purple-700: hsl(272.1 71.7% 47.1%);
+  --sl-color-purple-800: hsl(272.9 67.2% 39.4%);
+  --sl-color-purple-900: hsl(273.6 65.6% 32%);
+  --sl-color-purple-950: hsl(276 59.5% 16.5%);
+
+  /* Fuchsia */
+  --sl-color-fuchsia-50: hsl(289.1 100% 97.8%);
+  --sl-color-fuchsia-100: hsl(287 100% 95.5%);
+  --sl-color-fuchsia-200: hsl(288.3 95.8% 90.6%);
+  --sl-color-fuchsia-300: hsl(291.1 93.1% 82.9%);
+  --sl-color-fuchsia-400: hsl(292 91.4% 72.5%);
+  --sl-color-fuchsia-500: hsl(292.2 84.1% 60.6%);
+  --sl-color-fuchsia-600: hsl(293.4 69.5% 48.8%);
+  --sl-color-fuchsia-700: hsl(294.7 72.4% 39.8%);
+  --sl-color-fuchsia-800: hsl(295.4 70.2% 32.9%);
+  --sl-color-fuchsia-900: hsl(296.7 63.6% 28%);
+  --sl-color-fuchsia-950: hsl(297.1 56.8% 14.5%);
+
+  /* Pink */
+  --sl-color-pink-50: hsl(327.3 73.3% 97.1%);
+  --sl-color-pink-100: hsl(325.7 77.8% 94.7%);
+  --sl-color-pink-200: hsl(325.9 84.6% 89.8%);
+  --sl-color-pink-300: hsl(327.4 87.1% 81.8%);
+  --sl-color-pink-400: hsl(328.6 85.5% 70.2%);
+  --sl-color-pink-500: hsl(330.4 81.2% 60.4%);
+  --sl-color-pink-600: hsl(333.3 71.4% 50.6%);
+  --sl-color-pink-700: hsl(335.1 77.6% 42%);
+  --sl-color-pink-800: hsl(335.8 74.4% 35.3%);
+  --sl-color-pink-900: hsl(335.9 69% 30.4%);
+  --sl-color-pink-950: hsl(336.2 65.4% 15.9%);
+
+  /* Rose */
+  --sl-color-rose-50: hsl(355.7 100% 97.3%);
+  --sl-color-rose-100: hsl(355.6 100% 94.7%);
+  --sl-color-rose-200: hsl(352.7 96.1% 90%);
+  --sl-color-rose-300: hsl(352.6 95.7% 81.8%);
+  --sl-color-rose-400: hsl(351.3 94.5% 71.4%);
+  --sl-color-rose-500: hsl(349.7 89.2% 60.2%);
+  --sl-color-rose-600: hsl(346.8 77.2% 49.8%);
+  --sl-color-rose-700: hsl(345.3 82.7% 40.8%);
+  --sl-color-rose-800: hsl(343.4 79.7% 34.7%);
+  --sl-color-rose-900: hsl(341.5 75.5% 30.4%);
+  --sl-color-rose-950: hsl(341.3 70.1% 17.1%);
+
+  /*
+   * Theme Tokens
+   */
+
+  /* Primary */
+  --sl-color-primary-50: var(--sl-color-sky-50);
+  --sl-color-primary-100: var(--sl-color-sky-100);
+  --sl-color-primary-200: var(--sl-color-sky-200);
+  --sl-color-primary-300: var(--sl-color-sky-300);
+  --sl-color-primary-400: var(--sl-color-sky-400);
+  --sl-color-primary-500: var(--sl-color-sky-500);
+  --sl-color-primary-600: var(--sl-color-sky-600);
+  --sl-color-primary-700: var(--sl-color-sky-700);
+  --sl-color-primary-800: var(--sl-color-sky-800);
+  --sl-color-primary-900: var(--sl-color-sky-900);
+  --sl-color-primary-950: var(--sl-color-sky-950);
+
+  /* Success */
+  --sl-color-success-50: var(--sl-color-green-50);
+  --sl-color-success-100: var(--sl-color-green-100);
+  --sl-color-success-200: var(--sl-color-green-200);
+  --sl-color-success-300: var(--sl-color-green-300);
+  --sl-color-success-400: var(--sl-color-green-400);
+  --sl-color-success-500: var(--sl-color-green-500);
+  --sl-color-success-600: var(--sl-color-green-600);
+  --sl-color-success-700: var(--sl-color-green-700);
+  --sl-color-success-800: var(--sl-color-green-800);
+  --sl-color-success-900: var(--sl-color-green-900);
+  --sl-color-success-950: var(--sl-color-green-950);
+
+  /* Warning */
+  --sl-color-warning-50: var(--sl-color-amber-50);
+  --sl-color-warning-100: var(--sl-color-amber-100);
+  --sl-color-warning-200: var(--sl-color-amber-200);
+  --sl-color-warning-300: var(--sl-color-amber-300);
+  --sl-color-warning-400: var(--sl-color-amber-400);
+  --sl-color-warning-500: var(--sl-color-amber-500);
+  --sl-color-warning-600: var(--sl-color-amber-600);
+  --sl-color-warning-700: var(--sl-color-amber-700);
+  --sl-color-warning-800: var(--sl-color-amber-800);
+  --sl-color-warning-900: var(--sl-color-amber-900);
+  --sl-color-warning-950: var(--sl-color-amber-950);
+
+  /* Danger */
+  --sl-color-danger-50: var(--sl-color-red-50);
+  --sl-color-danger-100: var(--sl-color-red-100);
+  --sl-color-danger-200: var(--sl-color-red-200);
+  --sl-color-danger-300: var(--sl-color-red-300);
+  --sl-color-danger-400: var(--sl-color-red-400);
+  --sl-color-danger-500: var(--sl-color-red-500);
+  --sl-color-danger-600: var(--sl-color-red-600);
+  --sl-color-danger-700: var(--sl-color-red-700);
+  --sl-color-danger-800: var(--sl-color-red-800);
+  --sl-color-danger-900: var(--sl-color-red-900);
+  --sl-color-danger-950: var(--sl-color-red-950);
+
+  /* Neutral */
+  --sl-color-neutral-50: var(--sl-color-gray-50);
+  --sl-color-neutral-100: var(--sl-color-gray-100);
+  --sl-color-neutral-200: var(--sl-color-gray-200);
+  --sl-color-neutral-300: var(--sl-color-gray-300);
+  --sl-color-neutral-400: var(--sl-color-gray-400);
+  --sl-color-neutral-500: var(--sl-color-gray-500);
+  --sl-color-neutral-600: var(--sl-color-gray-600);
+  --sl-color-neutral-700: var(--sl-color-gray-700);
+  --sl-color-neutral-800: var(--sl-color-gray-800);
+  --sl-color-neutral-900: var(--sl-color-gray-900);
+  --sl-color-neutral-950: var(--sl-color-gray-950);
+
+  /* Neutral one-offs */
+  --sl-color-neutral-0: hsl(0, 0%, 100%);
+  --sl-color-neutral-1000: hsl(0, 0%, 0%);
+
+  /*
+   * Border radii
+   */
+
+  --sl-border-radius-small: 0.1875rem; /* 3px */
+  --sl-border-radius-medium: 0.25rem; /* 4px */
+  --sl-border-radius-large: 0.5rem; /* 8px */
+  --sl-border-radius-x-large: 1rem; /* 16px */
+
+  --sl-border-radius-circle: 50%;
+  --sl-border-radius-pill: 9999px;
+
+  /*
+   * Elevations
+   */
+
+  --sl-shadow-x-small: 0 1px 2px hsl(240 3.8% 46.1% / 6%);
+  --sl-shadow-small: 0 1px 2px hsl(240 3.8% 46.1% / 12%);
+  --sl-shadow-medium: 0 2px 4px hsl(240 3.8% 46.1% / 12%);
+  --sl-shadow-large: 0 2px 8px hsl(240 3.8% 46.1% / 12%);
+  --sl-shadow-x-large: 0 4px 16px hsl(240 3.8% 46.1% / 12%);
+
+  /*
+   * Spacings
+   */
+
+  --sl-spacing-3x-small: 0.125rem; /* 2px */
+  --sl-spacing-2x-small: 0.25rem; /* 4px */
+  --sl-spacing-x-small: 0.5rem; /* 8px */
+  --sl-spacing-small: 0.75rem; /* 12px */
+  --sl-spacing-medium: 1rem; /* 16px */
+  --sl-spacing-large: 1.25rem; /* 20px */
+  --sl-spacing-x-large: 1.75rem; /* 28px */
+  --sl-spacing-2x-large: 2.25rem; /* 36px */
+  --sl-spacing-3x-large: 3rem; /* 48px */
+  --sl-spacing-4x-large: 4.5rem; /* 72px */
+
+  /*
+   * Transitions
+   */
+
+  --sl-transition-x-slow: 1000ms;
+  --sl-transition-slow: 500ms;
+  --sl-transition-medium: 250ms;
+  --sl-transition-fast: 150ms;
+  --sl-transition-x-fast: 50ms;
+
+  /*
+   * Typography
+   */
+
+  /* Fonts */
+  --sl-font-mono: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;
+  --sl-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
+    'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
+  --sl-font-serif: Georgia, 'Times New Roman', serif;
+
+  /* Font sizes */
+  --sl-font-size-2x-small: 0.625rem; /* 10px */
+  --sl-font-size-x-small: 0.75rem; /* 12px */
+  --sl-font-size-small: 0.875rem; /* 14px */
+  --sl-font-size-medium: 1rem; /* 16px */
+  --sl-font-size-large: 1.25rem; /* 20px */
+  --sl-font-size-x-large: 1.5rem; /* 24px */
+  --sl-font-size-2x-large: 2.25rem; /* 36px */
+  --sl-font-size-3x-large: 3rem; /* 48px */
+  --sl-font-size-4x-large: 4.5rem; /* 72px */
+
+  /* Font weights */
+  --sl-font-weight-light: 300;
+  --sl-font-weight-normal: 400;
+  --sl-font-weight-semibold: 500;
+  --sl-font-weight-bold: 700;
+
+  /* Letter spacings */
+  --sl-letter-spacing-denser: -0.03em;
+  --sl-letter-spacing-dense: -0.015em;
+  --sl-letter-spacing-normal: normal;
+  --sl-letter-spacing-loose: 0.075em;
+  --sl-letter-spacing-looser: 0.15em;
+
+  /* Line heights */
+  --sl-line-height-denser: 1;
+  --sl-line-height-dense: 1.4;
+  --sl-line-height-normal: 1.8;
+  --sl-line-height-loose: 2.2;
+  --sl-line-height-looser: 2.6;
+
+  /*
+   * Forms
+   */
+
+  /* Focus rings */
+  --sl-focus-ring-alpha: 40%;
+  --sl-focus-ring-width: 3px;
+  --sl-focus-ring: 0 0 0 var(--sl-focus-ring-width) hsl(198.6 88.7% 48.4% / var(--sl-focus-ring-alpha));
+
+  /* Buttons */
+  --sl-button-font-size-small: var(--sl-font-size-x-small);
+  --sl-button-font-size-medium: var(--sl-font-size-small);
+  --sl-button-font-size-large: var(--sl-font-size-medium);
+
+  /* Inputs */
+  --sl-input-height-small: 1.875rem; /* 30px */
+  --sl-input-height-medium: 2.5rem; /* 40px */
+  --sl-input-height-large: 3.125rem; /* 50px */
+
+  --sl-input-background-color: var(--sl-color-neutral-0);
+  --sl-input-background-color-hover: var(--sl-input-background-color);
+  --sl-input-background-color-focus: var(--sl-input-background-color);
+  --sl-input-background-color-disabled: var(--sl-color-neutral-100);
+  --sl-input-border-color: var(--sl-color-neutral-300);
+  --sl-input-border-color-hover: var(--sl-color-neutral-400);
+  --sl-input-border-color-focus: var(--sl-color-primary-500);
+  --sl-input-border-color-disabled: var(--sl-color-neutral-300);
+  --sl-input-border-width: 1px;
+
+  --sl-input-border-radius-small: var(--sl-border-radius-medium);
+  --sl-input-border-radius-medium: var(--sl-border-radius-medium);
+  --sl-input-border-radius-large: var(--sl-border-radius-medium);
+
+  --sl-input-font-family: var(--sl-font-sans);
+  --sl-input-font-weight: var(--sl-font-weight-normal);
+  --sl-input-font-size-small: var(--sl-font-size-small);
+  --sl-input-font-size-medium: var(--sl-font-size-medium);
+  --sl-input-font-size-large: var(--sl-font-size-large);
+  --sl-input-letter-spacing: var(--sl-letter-spacing-normal);
+
+  --sl-input-color: var(--sl-color-neutral-700);
+  --sl-input-color-hover: var(--sl-color-neutral-700);
+  --sl-input-color-focus: var(--sl-color-neutral-700);
+  --sl-input-color-disabled: var(--sl-color-neutral-900);
+  --sl-input-icon-color: var(--sl-color-neutral-500);
+  --sl-input-icon-color-hover: var(--sl-color-neutral-600);
+  --sl-input-icon-color-focus: var(--sl-color-neutral-600);
+  --sl-input-placeholder-color: var(--sl-color-neutral-500);
+  --sl-input-placeholder-color-disabled: var(--sl-color-neutral-600);
+  --sl-input-spacing-small: var(--sl-spacing-small);
+  --sl-input-spacing-medium: var(--sl-spacing-medium);
+  --sl-input-spacing-large: var(--sl-spacing-large);
+
+  --sl-input-filled-background-color: var(--sl-color-neutral-100);
+  --sl-input-filled-background-color-hover: var(--sl-color-neutral-100);
+  --sl-input-filled-background-color-focus: var(--sl-color-neutral-100);
+  --sl-input-filled-background-color-disabled: var(--sl-color-neutral-100);
+  --sl-input-filled-color: var(--sl-color-neutral-800);
+  --sl-input-filled-color-hover: var(--sl-color-neutral-800);
+  --sl-input-filled-color-focus: var(--sl-color-neutral-700);
+  --sl-input-filled-color-disabled: var(--sl-color-neutral-800);
+
+  /* Labels */
+  --sl-input-label-font-size-small: var(--sl-font-size-small);
+  --sl-input-label-font-size-medium: var(--sl-font-size-medium);
+  --sl-input-label-font-size-large: var(--sl-font-size-large);
+
+  --sl-input-label-color: inherit;
+
+  /* Help text */
+  --sl-input-help-text-font-size-small: var(--sl-font-size-x-small);
+  --sl-input-help-text-font-size-medium: var(--sl-font-size-small);
+  --sl-input-help-text-font-size-large: var(--sl-font-size-medium);
+
+  --sl-input-help-text-color: var(--sl-color-neutral-500);
+
+  /* Toggles (checkboxes, radios, switches) */
+  --sl-toggle-size: 1rem;
+
+  /*
+   * Overlays
+   */
+
+  --sl-overlay-background-color: hsl(240 3.8% 46.1% / 33%);
+
+  /*
+   * Panels
+   */
+
+  --sl-panel-background-color: var(--sl-color-neutral-0);
+  --sl-panel-border-color: var(--sl-color-neutral-200);
+  --sl-panel-border-width: 1px;
+
+  /*
+   * Tooltips
+   */
+
+  --sl-tooltip-border-radius: var(--sl-border-radius-medium);
+  --sl-tooltip-background-color: var(--sl-color-neutral-800);
+  --sl-tooltip-color: var(--sl-color-neutral-0);
+  --sl-tooltip-font-family: var(--sl-font-sans);
+  --sl-tooltip-font-weight: var(--sl-font-weight-normal);
+  --sl-tooltip-font-size: var(--sl-font-size-small);
+  --sl-tooltip-line-height: var(--sl-line-height-dense);
+  --sl-tooltip-padding: var(--sl-spacing-2x-small) var(--sl-spacing-x-small);
+  --sl-tooltip-arrow-size: 5px;
+  --sl-tooltip-arrow-start-end-offset: 8px;
+
+  /*
+   * Z-indexes
+   */
+
+  --sl-z-index-drawer: 700;
+  --sl-z-index-dialog: 800;
+  --sl-z-index-dropdown: 900;
+  --sl-z-index-toast: 950;
+  --sl-z-index-tooltip: 1000;
+}
+
+/* _utility.css */
diff --git a/src/themes/light.styles.ts b/src/themes/light.styles.ts
deleted file mode 100644
index f06b0c5c..00000000
--- a/src/themes/light.styles.ts
+++ /dev/null
@@ -1,524 +0,0 @@
-import { css } from 'lit';
-
-export default css`
-  :root,
-  :host,
-  .sl-theme-light {
-    /*
-     * Color Primitives
-     */
-
-    /* Gray */
-    --sl-color-gray-50: hsl(0 0% 97.5%);
-    --sl-color-gray-100: hsl(240 4.8% 95.9%);
-    --sl-color-gray-200: hsl(240 5.9% 90%);
-    --sl-color-gray-300: hsl(240 4.9% 83.9%);
-    --sl-color-gray-400: hsl(240 5% 64.9%);
-    --sl-color-gray-500: hsl(240 3.8% 46.1%);
-    --sl-color-gray-600: hsl(240 5.2% 33.9%);
-    --sl-color-gray-700: hsl(240 5.3% 26.1%);
-    --sl-color-gray-800: hsl(240 3.7% 15.9%);
-    --sl-color-gray-900: hsl(240 5.9% 10%);
-    --sl-color-gray-950: hsl(240 7.3% 8%);
-
-    /* Red */
-    --sl-color-red-50: hsl(0 85.7% 97.3%);
-    --sl-color-red-100: hsl(0 93.3% 94.1%);
-    --sl-color-red-200: hsl(0 96.3% 89.4%);
-    --sl-color-red-300: hsl(0 93.5% 81.8%);
-    --sl-color-red-400: hsl(0 90.6% 70.8%);
-    --sl-color-red-500: hsl(0 84.2% 60.2%);
-    --sl-color-red-600: hsl(0 72.2% 50.6%);
-    --sl-color-red-700: hsl(0 73.7% 41.8%);
-    --sl-color-red-800: hsl(0 70% 35.3%);
-    --sl-color-red-900: hsl(0 62.8% 30.6%);
-    --sl-color-red-950: hsl(0 60% 19.6%);
-
-    /* Orange */
-    --sl-color-orange-50: hsl(33.3 100% 96.5%);
-    --sl-color-orange-100: hsl(34.3 100% 91.8%);
-    --sl-color-orange-200: hsl(32.1 97.7% 83.1%);
-    --sl-color-orange-300: hsl(30.7 97.2% 72.4%);
-    --sl-color-orange-400: hsl(27 96% 61%);
-    --sl-color-orange-500: hsl(24.6 95% 53.1%);
-    --sl-color-orange-600: hsl(20.5 90.2% 48.2%);
-    --sl-color-orange-700: hsl(17.5 88.3% 40.4%);
-    --sl-color-orange-800: hsl(15 79.1% 33.7%);
-    --sl-color-orange-900: hsl(15.3 74.6% 27.8%);
-    --sl-color-orange-950: hsl(15.2 69.1% 19%);
-
-    /* Amber */
-    --sl-color-amber-50: hsl(48 100% 96.1%);
-    --sl-color-amber-100: hsl(48 96.5% 88.8%);
-    --sl-color-amber-200: hsl(48 96.6% 76.7%);
-    --sl-color-amber-300: hsl(45.9 96.7% 64.5%);
-    --sl-color-amber-400: hsl(43.3 96.4% 56.3%);
-    --sl-color-amber-500: hsl(37.7 92.1% 50.2%);
-    --sl-color-amber-600: hsl(32.1 94.6% 43.7%);
-    --sl-color-amber-700: hsl(26 90.5% 37.1%);
-    --sl-color-amber-800: hsl(22.7 82.5% 31.4%);
-    --sl-color-amber-900: hsl(21.7 77.8% 26.5%);
-    --sl-color-amber-950: hsl(22.9 74.1% 16.7%);
-
-    /* Yellow */
-    --sl-color-yellow-50: hsl(54.5 91.7% 95.3%);
-    --sl-color-yellow-100: hsl(54.9 96.7% 88%);
-    --sl-color-yellow-200: hsl(52.8 98.3% 76.9%);
-    --sl-color-yellow-300: hsl(50.4 97.8% 63.5%);
-    --sl-color-yellow-400: hsl(47.9 95.8% 53.1%);
-    --sl-color-yellow-500: hsl(45.4 93.4% 47.5%);
-    --sl-color-yellow-600: hsl(40.6 96.1% 40.4%);
-    --sl-color-yellow-700: hsl(35.5 91.7% 32.9%);
-    --sl-color-yellow-800: hsl(31.8 81% 28.8%);
-    --sl-color-yellow-900: hsl(28.4 72.5% 25.7%);
-    --sl-color-yellow-950: hsl(33.1 69% 13.9%);
-
-    /* Lime */
-    --sl-color-lime-50: hsl(78.3 92% 95.1%);
-    --sl-color-lime-100: hsl(79.6 89.1% 89.2%);
-    --sl-color-lime-200: hsl(80.9 88.5% 79.6%);
-    --sl-color-lime-300: hsl(82 84.5% 67.1%);
-    --sl-color-lime-400: hsl(82.7 78% 55.5%);
-    --sl-color-lime-500: hsl(83.7 80.5% 44.3%);
-    --sl-color-lime-600: hsl(84.8 85.2% 34.5%);
-    --sl-color-lime-700: hsl(85.9 78.4% 27.3%);
-    --sl-color-lime-800: hsl(86.3 69% 22.7%);
-    --sl-color-lime-900: hsl(87.6 61.2% 20.2%);
-    --sl-color-lime-950: hsl(86.5 60.6% 13.9%);
-
-    /* Green */
-    --sl-color-green-50: hsl(138.5 76.5% 96.7%);
-    --sl-color-green-100: hsl(140.6 84.2% 92.5%);
-    --sl-color-green-200: hsl(141 78.9% 85.1%);
-    --sl-color-green-300: hsl(141.7 76.6% 73.1%);
-    --sl-color-green-400: hsl(141.9 69.2% 58%);
-    --sl-color-green-500: hsl(142.1 70.6% 45.3%);
-    --sl-color-green-600: hsl(142.1 76.2% 36.3%);
-    --sl-color-green-700: hsl(142.4 71.8% 29.2%);
-    --sl-color-green-800: hsl(142.8 64.2% 24.1%);
-    --sl-color-green-900: hsl(143.8 61.2% 20.2%);
-    --sl-color-green-950: hsl(144.3 60.7% 12%);
-
-    /* Emerald */
-    --sl-color-emerald-50: hsl(151.8 81% 95.9%);
-    --sl-color-emerald-100: hsl(149.3 80.4% 90%);
-    --sl-color-emerald-200: hsl(152.4 76% 80.4%);
-    --sl-color-emerald-300: hsl(156.2 71.6% 66.9%);
-    --sl-color-emerald-400: hsl(158.1 64.4% 51.6%);
-    --sl-color-emerald-500: hsl(160.1 84.1% 39.4%);
-    --sl-color-emerald-600: hsl(161.4 93.5% 30.4%);
-    --sl-color-emerald-700: hsl(162.9 93.5% 24.3%);
-    --sl-color-emerald-800: hsl(163.1 88.1% 19.8%);
-    --sl-color-emerald-900: hsl(164.2 85.7% 16.5%);
-    --sl-color-emerald-950: hsl(164.3 87.5% 9.4%);
-
-    /* Teal */
-    --sl-color-teal-50: hsl(166.2 76.5% 96.7%);
-    --sl-color-teal-100: hsl(167.2 85.5% 89.2%);
-    --sl-color-teal-200: hsl(168.4 83.8% 78.2%);
-    --sl-color-teal-300: hsl(170.6 76.9% 64.3%);
-    --sl-color-teal-400: hsl(172.5 66% 50.4%);
-    --sl-color-teal-500: hsl(173.4 80.4% 40%);
-    --sl-color-teal-600: hsl(174.7 83.9% 31.6%);
-    --sl-color-teal-700: hsl(175.3 77.4% 26.1%);
-    --sl-color-teal-800: hsl(176.1 69.4% 21.8%);
-    --sl-color-teal-900: hsl(175.9 60.8% 19%);
-    --sl-color-teal-950: hsl(176.5 58.6% 11.4%);
-
-    /* Cyan */
-    --sl-color-cyan-50: hsl(183.2 100% 96.3%);
-    --sl-color-cyan-100: hsl(185.1 95.9% 90.4%);
-    --sl-color-cyan-200: hsl(186.2 93.5% 81.8%);
-    --sl-color-cyan-300: hsl(187 92.4% 69%);
-    --sl-color-cyan-400: hsl(187.9 85.7% 53.3%);
-    --sl-color-cyan-500: hsl(188.7 94.5% 42.7%);
-    --sl-color-cyan-600: hsl(191.6 91.4% 36.5%);
-    --sl-color-cyan-700: hsl(192.9 82.3% 31%);
-    --sl-color-cyan-800: hsl(194.4 69.6% 27.1%);
-    --sl-color-cyan-900: hsl(196.4 63.6% 23.7%);
-    --sl-color-cyan-950: hsl(196.8 61% 16.1%);
-
-    /* Sky */
-    --sl-color-sky-50: hsl(204 100% 97.1%);
-    --sl-color-sky-100: hsl(204 93.8% 93.7%);
-    --sl-color-sky-200: hsl(200.6 94.4% 86.1%);
-    --sl-color-sky-300: hsl(199.4 95.5% 73.9%);
-    --sl-color-sky-400: hsl(198.4 93.2% 59.6%);
-    --sl-color-sky-500: hsl(198.6 88.7% 48.4%);
-    --sl-color-sky-600: hsl(200.4 98% 39.4%);
-    --sl-color-sky-700: hsl(201.3 96.3% 32.2%);
-    --sl-color-sky-800: hsl(201 90% 27.5%);
-    --sl-color-sky-900: hsl(202 80.3% 23.9%);
-    --sl-color-sky-950: hsl(202.3 73.8% 16.5%);
-
-    /* Blue */
-    --sl-color-blue-50: hsl(213.8 100% 96.9%);
-    --sl-color-blue-100: hsl(214.3 94.6% 92.7%);
-    --sl-color-blue-200: hsl(213.3 96.9% 87.3%);
-    --sl-color-blue-300: hsl(211.7 96.4% 78.4%);
-    --sl-color-blue-400: hsl(213.1 93.9% 67.8%);
-    --sl-color-blue-500: hsl(217.2 91.2% 59.8%);
-    --sl-color-blue-600: hsl(221.2 83.2% 53.3%);
-    --sl-color-blue-700: hsl(224.3 76.3% 48%);
-    --sl-color-blue-800: hsl(225.9 70.7% 40.2%);
-    --sl-color-blue-900: hsl(224.4 64.3% 32.9%);
-    --sl-color-blue-950: hsl(226.2 55.3% 18.4%);
-
-    /* Indigo */
-    --sl-color-indigo-50: hsl(225.9 100% 96.7%);
-    --sl-color-indigo-100: hsl(226.5 100% 93.9%);
-    --sl-color-indigo-200: hsl(228 96.5% 88.8%);
-    --sl-color-indigo-300: hsl(229.7 93.5% 81.8%);
-    --sl-color-indigo-400: hsl(234.5 89.5% 73.9%);
-    --sl-color-indigo-500: hsl(238.7 83.5% 66.7%);
-    --sl-color-indigo-600: hsl(243.4 75.4% 58.6%);
-    --sl-color-indigo-700: hsl(244.5 57.9% 50.6%);
-    --sl-color-indigo-800: hsl(243.7 54.5% 41.4%);
-    --sl-color-indigo-900: hsl(242.2 47.4% 34.3%);
-    --sl-color-indigo-950: hsl(243.5 43.6% 22.9%);
-
-    /* Violet */
-    --sl-color-violet-50: hsl(250 100% 97.6%);
-    --sl-color-violet-100: hsl(251.4 91.3% 95.5%);
-    --sl-color-violet-200: hsl(250.5 95.2% 91.8%);
-    --sl-color-violet-300: hsl(252.5 94.7% 85.1%);
-    --sl-color-violet-400: hsl(255.1 91.7% 76.3%);
-    --sl-color-violet-500: hsl(258.3 89.5% 66.3%);
-    --sl-color-violet-600: hsl(262.1 83.3% 57.8%);
-    --sl-color-violet-700: hsl(263.4 70% 50.4%);
-    --sl-color-violet-800: hsl(263.4 69.3% 42.2%);
-    --sl-color-violet-900: hsl(263.5 67.4% 34.9%);
-    --sl-color-violet-950: hsl(265.1 61.5% 21.4%);
-
-    /* Purple */
-    --sl-color-purple-50: hsl(270 100% 98%);
-    --sl-color-purple-100: hsl(268.7 100% 95.5%);
-    --sl-color-purple-200: hsl(268.6 100% 91.8%);
-    --sl-color-purple-300: hsl(269.2 97.4% 85.1%);
-    --sl-color-purple-400: hsl(270 95.2% 75.3%);
-    --sl-color-purple-500: hsl(270.7 91% 65.1%);
-    --sl-color-purple-600: hsl(271.5 81.3% 55.9%);
-    --sl-color-purple-700: hsl(272.1 71.7% 47.1%);
-    --sl-color-purple-800: hsl(272.9 67.2% 39.4%);
-    --sl-color-purple-900: hsl(273.6 65.6% 32%);
-    --sl-color-purple-950: hsl(276 59.5% 16.5%);
-
-    /* Fuchsia */
-    --sl-color-fuchsia-50: hsl(289.1 100% 97.8%);
-    --sl-color-fuchsia-100: hsl(287 100% 95.5%);
-    --sl-color-fuchsia-200: hsl(288.3 95.8% 90.6%);
-    --sl-color-fuchsia-300: hsl(291.1 93.1% 82.9%);
-    --sl-color-fuchsia-400: hsl(292 91.4% 72.5%);
-    --sl-color-fuchsia-500: hsl(292.2 84.1% 60.6%);
-    --sl-color-fuchsia-600: hsl(293.4 69.5% 48.8%);
-    --sl-color-fuchsia-700: hsl(294.7 72.4% 39.8%);
-    --sl-color-fuchsia-800: hsl(295.4 70.2% 32.9%);
-    --sl-color-fuchsia-900: hsl(296.7 63.6% 28%);
-    --sl-color-fuchsia-950: hsl(297.1 56.8% 14.5%);
-
-    /* Pink */
-    --sl-color-pink-50: hsl(327.3 73.3% 97.1%);
-    --sl-color-pink-100: hsl(325.7 77.8% 94.7%);
-    --sl-color-pink-200: hsl(325.9 84.6% 89.8%);
-    --sl-color-pink-300: hsl(327.4 87.1% 81.8%);
-    --sl-color-pink-400: hsl(328.6 85.5% 70.2%);
-    --sl-color-pink-500: hsl(330.4 81.2% 60.4%);
-    --sl-color-pink-600: hsl(333.3 71.4% 50.6%);
-    --sl-color-pink-700: hsl(335.1 77.6% 42%);
-    --sl-color-pink-800: hsl(335.8 74.4% 35.3%);
-    --sl-color-pink-900: hsl(335.9 69% 30.4%);
-    --sl-color-pink-950: hsl(336.2 65.4% 15.9%);
-
-    /* Rose */
-    --sl-color-rose-50: hsl(355.7 100% 97.3%);
-    --sl-color-rose-100: hsl(355.6 100% 94.7%);
-    --sl-color-rose-200: hsl(352.7 96.1% 90%);
-    --sl-color-rose-300: hsl(352.6 95.7% 81.8%);
-    --sl-color-rose-400: hsl(351.3 94.5% 71.4%);
-    --sl-color-rose-500: hsl(349.7 89.2% 60.2%);
-    --sl-color-rose-600: hsl(346.8 77.2% 49.8%);
-    --sl-color-rose-700: hsl(345.3 82.7% 40.8%);
-    --sl-color-rose-800: hsl(343.4 79.7% 34.7%);
-    --sl-color-rose-900: hsl(341.5 75.5% 30.4%);
-    --sl-color-rose-950: hsl(341.3 70.1% 17.1%);
-
-    /*
-     * Theme Tokens
-     */
-
-    /* Primary */
-    --sl-color-primary-50: var(--sl-color-sky-50);
-    --sl-color-primary-100: var(--sl-color-sky-100);
-    --sl-color-primary-200: var(--sl-color-sky-200);
-    --sl-color-primary-300: var(--sl-color-sky-300);
-    --sl-color-primary-400: var(--sl-color-sky-400);
-    --sl-color-primary-500: var(--sl-color-sky-500);
-    --sl-color-primary-600: var(--sl-color-sky-600);
-    --sl-color-primary-700: var(--sl-color-sky-700);
-    --sl-color-primary-800: var(--sl-color-sky-800);
-    --sl-color-primary-900: var(--sl-color-sky-900);
-    --sl-color-primary-950: var(--sl-color-sky-950);
-
-    /* Success */
-    --sl-color-success-50: var(--sl-color-green-50);
-    --sl-color-success-100: var(--sl-color-green-100);
-    --sl-color-success-200: var(--sl-color-green-200);
-    --sl-color-success-300: var(--sl-color-green-300);
-    --sl-color-success-400: var(--sl-color-green-400);
-    --sl-color-success-500: var(--sl-color-green-500);
-    --sl-color-success-600: var(--sl-color-green-600);
-    --sl-color-success-700: var(--sl-color-green-700);
-    --sl-color-success-800: var(--sl-color-green-800);
-    --sl-color-success-900: var(--sl-color-green-900);
-    --sl-color-success-950: var(--sl-color-green-950);
-
-    /* Warning */
-    --sl-color-warning-50: var(--sl-color-amber-50);
-    --sl-color-warning-100: var(--sl-color-amber-100);
-    --sl-color-warning-200: var(--sl-color-amber-200);
-    --sl-color-warning-300: var(--sl-color-amber-300);
-    --sl-color-warning-400: var(--sl-color-amber-400);
-    --sl-color-warning-500: var(--sl-color-amber-500);
-    --sl-color-warning-600: var(--sl-color-amber-600);
-    --sl-color-warning-700: var(--sl-color-amber-700);
-    --sl-color-warning-800: var(--sl-color-amber-800);
-    --sl-color-warning-900: var(--sl-color-amber-900);
-    --sl-color-warning-950: var(--sl-color-amber-950);
-
-    /* Danger */
-    --sl-color-danger-50: var(--sl-color-red-50);
-    --sl-color-danger-100: var(--sl-color-red-100);
-    --sl-color-danger-200: var(--sl-color-red-200);
-    --sl-color-danger-300: var(--sl-color-red-300);
-    --sl-color-danger-400: var(--sl-color-red-400);
-    --sl-color-danger-500: var(--sl-color-red-500);
-    --sl-color-danger-600: var(--sl-color-red-600);
-    --sl-color-danger-700: var(--sl-color-red-700);
-    --sl-color-danger-800: var(--sl-color-red-800);
-    --sl-color-danger-900: var(--sl-color-red-900);
-    --sl-color-danger-950: var(--sl-color-red-950);
-
-    /* Neutral */
-    --sl-color-neutral-50: var(--sl-color-gray-50);
-    --sl-color-neutral-100: var(--sl-color-gray-100);
-    --sl-color-neutral-200: var(--sl-color-gray-200);
-    --sl-color-neutral-300: var(--sl-color-gray-300);
-    --sl-color-neutral-400: var(--sl-color-gray-400);
-    --sl-color-neutral-500: var(--sl-color-gray-500);
-    --sl-color-neutral-600: var(--sl-color-gray-600);
-    --sl-color-neutral-700: var(--sl-color-gray-700);
-    --sl-color-neutral-800: var(--sl-color-gray-800);
-    --sl-color-neutral-900: var(--sl-color-gray-900);
-    --sl-color-neutral-950: var(--sl-color-gray-950);
-
-    /* Neutral one-offs */
-    --sl-color-neutral-0: hsl(0, 0%, 100%);
-    --sl-color-neutral-1000: hsl(0, 0%, 0%);
-
-    /*
-     * Border radii
-     */
-
-    --sl-border-radius-small: 0.1875rem; /* 3px */
-    --sl-border-radius-medium: 0.25rem; /* 4px */
-    --sl-border-radius-large: 0.5rem; /* 8px */
-    --sl-border-radius-x-large: 1rem; /* 16px */
-
-    --sl-border-radius-circle: 50%;
-    --sl-border-radius-pill: 9999px;
-
-    /*
-     * Elevations
-     */
-
-    --sl-shadow-x-small: 0 1px 2px hsl(240 3.8% 46.1% / 6%);
-    --sl-shadow-small: 0 1px 2px hsl(240 3.8% 46.1% / 12%);
-    --sl-shadow-medium: 0 2px 4px hsl(240 3.8% 46.1% / 12%);
-    --sl-shadow-large: 0 2px 8px hsl(240 3.8% 46.1% / 12%);
-    --sl-shadow-x-large: 0 4px 16px hsl(240 3.8% 46.1% / 12%);
-
-    /*
-     * Spacings
-     */
-
-    --sl-spacing-3x-small: 0.125rem; /* 2px */
-    --sl-spacing-2x-small: 0.25rem; /* 4px */
-    --sl-spacing-x-small: 0.5rem; /* 8px */
-    --sl-spacing-small: 0.75rem; /* 12px */
-    --sl-spacing-medium: 1rem; /* 16px */
-    --sl-spacing-large: 1.25rem; /* 20px */
-    --sl-spacing-x-large: 1.75rem; /* 28px */
-    --sl-spacing-2x-large: 2.25rem; /* 36px */
-    --sl-spacing-3x-large: 3rem; /* 48px */
-    --sl-spacing-4x-large: 4.5rem; /* 72px */
-
-    /*
-     * Transitions
-     */
-
-    --sl-transition-x-slow: 1000ms;
-    --sl-transition-slow: 500ms;
-    --sl-transition-medium: 250ms;
-    --sl-transition-fast: 150ms;
-    --sl-transition-x-fast: 50ms;
-
-    /*
-     * Typography
-     */
-
-    /* Fonts */
-    --sl-font-mono: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;
-    --sl-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
-      'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
-    --sl-font-serif: Georgia, 'Times New Roman', serif;
-
-    /* Font sizes */
-    --sl-font-size-2x-small: 0.625rem; /* 10px */
-    --sl-font-size-x-small: 0.75rem; /* 12px */
-    --sl-font-size-small: 0.875rem; /* 14px */
-    --sl-font-size-medium: 1rem; /* 16px */
-    --sl-font-size-large: 1.25rem; /* 20px */
-    --sl-font-size-x-large: 1.5rem; /* 24px */
-    --sl-font-size-2x-large: 2.25rem; /* 36px */
-    --sl-font-size-3x-large: 3rem; /* 48px */
-    --sl-font-size-4x-large: 4.5rem; /* 72px */
-
-    /* Font weights */
-    --sl-font-weight-light: 300;
-    --sl-font-weight-normal: 400;
-    --sl-font-weight-semibold: 500;
-    --sl-font-weight-bold: 700;
-
-    /* Letter spacings */
-    --sl-letter-spacing-denser: -0.03em;
-    --sl-letter-spacing-dense: -0.015em;
-    --sl-letter-spacing-normal: normal;
-    --sl-letter-spacing-loose: 0.075em;
-    --sl-letter-spacing-looser: 0.15em;
-
-    /* Line heights */
-    --sl-line-height-denser: 1;
-    --sl-line-height-dense: 1.4;
-    --sl-line-height-normal: 1.8;
-    --sl-line-height-loose: 2.2;
-    --sl-line-height-looser: 2.6;
-
-    /*
-     * Forms
-     */
-
-    /* Focus rings */
-    --sl-focus-ring-alpha: 40%;
-    --sl-focus-ring-width: 3px;
-    --sl-focus-ring: 0 0 0 var(--sl-focus-ring-width) hsl(198.6 88.7% 48.4% / var(--sl-focus-ring-alpha));
-
-    /* Buttons */
-    --sl-button-font-size-small: var(--sl-font-size-x-small);
-    --sl-button-font-size-medium: var(--sl-font-size-small);
-    --sl-button-font-size-large: var(--sl-font-size-medium);
-
-    /* Inputs */
-    --sl-input-height-small: 1.875rem; /* 30px */
-    --sl-input-height-medium: 2.5rem; /* 40px */
-    --sl-input-height-large: 3.125rem; /* 50px */
-
-    --sl-input-background-color: var(--sl-color-neutral-0);
-    --sl-input-background-color-hover: var(--sl-input-background-color);
-    --sl-input-background-color-focus: var(--sl-input-background-color);
-    --sl-input-background-color-disabled: var(--sl-color-neutral-100);
-    --sl-input-border-color: var(--sl-color-neutral-300);
-    --sl-input-border-color-hover: var(--sl-color-neutral-400);
-    --sl-input-border-color-focus: var(--sl-color-primary-500);
-    --sl-input-border-color-disabled: var(--sl-color-neutral-300);
-    --sl-input-border-width: 1px;
-
-    --sl-input-border-radius-small: var(--sl-border-radius-medium);
-    --sl-input-border-radius-medium: var(--sl-border-radius-medium);
-    --sl-input-border-radius-large: var(--sl-border-radius-medium);
-
-    --sl-input-font-family: var(--sl-font-sans);
-    --sl-input-font-weight: var(--sl-font-weight-normal);
-    --sl-input-font-size-small: var(--sl-font-size-small);
-    --sl-input-font-size-medium: var(--sl-font-size-medium);
-    --sl-input-font-size-large: var(--sl-font-size-large);
-    --sl-input-letter-spacing: var(--sl-letter-spacing-normal);
-
-    --sl-input-color: var(--sl-color-neutral-700);
-    --sl-input-color-hover: var(--sl-color-neutral-700);
-    --sl-input-color-focus: var(--sl-color-neutral-700);
-    --sl-input-color-disabled: var(--sl-color-neutral-900);
-    --sl-input-icon-color: var(--sl-color-neutral-500);
-    --sl-input-icon-color-hover: var(--sl-color-neutral-600);
-    --sl-input-icon-color-focus: var(--sl-color-neutral-600);
-    --sl-input-placeholder-color: var(--sl-color-neutral-500);
-    --sl-input-placeholder-color-disabled: var(--sl-color-neutral-600);
-    --sl-input-spacing-small: var(--sl-spacing-small);
-    --sl-input-spacing-medium: var(--sl-spacing-medium);
-    --sl-input-spacing-large: var(--sl-spacing-large);
-
-    --sl-input-filled-background-color: var(--sl-color-neutral-100);
-    --sl-input-filled-background-color-hover: var(--sl-color-neutral-100);
-    --sl-input-filled-background-color-focus: var(--sl-color-neutral-100);
-    --sl-input-filled-background-color-disabled: var(--sl-color-neutral-100);
-    --sl-input-filled-color: var(--sl-color-neutral-800);
-    --sl-input-filled-color-hover: var(--sl-color-neutral-800);
-    --sl-input-filled-color-focus: var(--sl-color-neutral-700);
-    --sl-input-filled-color-disabled: var(--sl-color-neutral-800);
-
-    /* Labels */
-    --sl-input-label-font-size-small: var(--sl-font-size-small);
-    --sl-input-label-font-size-medium: var(--sl-font-size-medium);
-    --sl-input-label-font-size-large: var(--sl-font-size-large);
-
-    --sl-input-label-color: inherit;
-
-    /* Help text */
-    --sl-input-help-text-font-size-small: var(--sl-font-size-x-small);
-    --sl-input-help-text-font-size-medium: var(--sl-font-size-small);
-    --sl-input-help-text-font-size-large: var(--sl-font-size-medium);
-
-    --sl-input-help-text-color: var(--sl-color-neutral-500);
-
-    /* Toggles (checkboxes, radios, switches) */
-    --sl-toggle-size: 1rem;
-
-    /*
-     * Overlays
-     */
-
-    --sl-overlay-background-color: hsl(240 3.8% 46.1% / 33%);
-
-    /*
-     * Panels
-     */
-
-    --sl-panel-background-color: var(--sl-color-neutral-0);
-    --sl-panel-border-color: var(--sl-color-neutral-200);
-    --sl-panel-border-width: 1px;
-
-    /*
-     * Tooltips
-     */
-
-    --sl-tooltip-border-radius: var(--sl-border-radius-medium);
-    --sl-tooltip-background-color: var(--sl-color-neutral-800);
-    --sl-tooltip-color: var(--sl-color-neutral-0);
-    --sl-tooltip-font-family: var(--sl-font-sans);
-    --sl-tooltip-font-weight: var(--sl-font-weight-normal);
-    --sl-tooltip-font-size: var(--sl-font-size-small);
-    --sl-tooltip-line-height: var(--sl-line-height-dense);
-    --sl-tooltip-padding: var(--sl-spacing-2x-small) var(--sl-spacing-x-small);
-    --sl-tooltip-arrow-size: 5px;
-    --sl-tooltip-arrow-start-end-offset: 8px;
-
-    /*
-     * Z-indexes
-     */
-
-    --sl-z-index-drawer: 700;
-    --sl-z-index-dialog: 800;
-    --sl-z-index-dropdown: 900;
-    --sl-z-index-toast: 950;
-    --sl-z-index-tooltip: 1000;
-  }
-`;