Compare commits

...

4 Commits

Author SHA1 Message Date
unkn0wn 35b9ca30cd feat: add typography tokens and mixins for consistent styling 2026-05-15 17:44:18 +02:00
unkn0wn a2684476da feat: add base spacing, radius, and border width tokens 2026-05-15 17:27:02 +02:00
unkn0wn cd2e88f20a feat: add semantic color tokens for light and dark themes 2026-05-15 17:24:56 +02:00
unkn0wn 2347af8d0a feat: update package.json and add generate-barrel script
- Set project name to "nova-design-system" and updated version to 0.1.0
- Added description for the project
- Defined exports for the main entry and styles
- Included a new script "barrel" to generate index.ts for components
- Added "sass" as a devDependency

chore: update package-lock.json

- Added "sass" as a devDependency with version ^1.99.0
- Updated dependencies including @parcel/watcher and others

refactor: remove unused assets and Welcome component

- Deleted astro.svg and background.svg assets
- Removed Welcome.astro component as it was no longer needed
2026-05-15 17:24:14 +02:00
9 changed files with 786 additions and 216 deletions
+405
View File
@@ -9,6 +9,9 @@
"dependencies": { "dependencies": {
"astro": "^6.3.3" "astro": "^6.3.3"
}, },
"devDependencies": {
"sass": "^1.99.0"
},
"engines": { "engines": {
"node": ">=22.12.0" "node": ">=22.12.0"
} }
@@ -1075,6 +1078,316 @@
"integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@parcel/watcher": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
"integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"dependencies": {
"detect-libc": "^2.0.3",
"is-glob": "^4.0.3",
"node-addon-api": "^7.0.0",
"picomatch": "^4.0.3"
},
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
"@parcel/watcher-android-arm64": "2.5.6",
"@parcel/watcher-darwin-arm64": "2.5.6",
"@parcel/watcher-darwin-x64": "2.5.6",
"@parcel/watcher-freebsd-x64": "2.5.6",
"@parcel/watcher-linux-arm-glibc": "2.5.6",
"@parcel/watcher-linux-arm-musl": "2.5.6",
"@parcel/watcher-linux-arm64-glibc": "2.5.6",
"@parcel/watcher-linux-arm64-musl": "2.5.6",
"@parcel/watcher-linux-x64-glibc": "2.5.6",
"@parcel/watcher-linux-x64-musl": "2.5.6",
"@parcel/watcher-win32-arm64": "2.5.6",
"@parcel/watcher-win32-ia32": "2.5.6",
"@parcel/watcher-win32-x64": "2.5.6"
}
},
"node_modules/@parcel/watcher-android-arm64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
"integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-darwin-arm64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
"integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-darwin-x64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
"integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-freebsd-x64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
"integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm-glibc": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
"integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm-musl": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
"integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm64-glibc": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
"integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm64-musl": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
"integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-x64-glibc": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
"integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-x64-musl": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
"integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-arm64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
"integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-ia32": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
"integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-x64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
"integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@rollup/pluginutils": { "node_modules/@rollup/pluginutils": {
"version": "5.3.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
@@ -2520,6 +2833,13 @@
"integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
"license": "BSD-2-Clause" "license": "BSD-2-Clause"
}, },
"node_modules/immutable": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz",
"integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==",
"devOptional": true,
"license": "MIT"
},
"node_modules/iron-webcrypto": { "node_modules/iron-webcrypto": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
@@ -2544,6 +2864,31 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"license": "MIT",
"optional": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-inside-container": { "node_modules/is-inside-container": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
@@ -3520,6 +3865,14 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
}, },
"node_modules/node-addon-api": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/node-fetch-native": { "node_modules/node-fetch-native": {
"version": "1.6.7", "version": "1.6.7",
"resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
@@ -4053,6 +4406,58 @@
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/sass": {
"version": "1.99.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz",
"integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==",
"devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^5.1.5",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
"node": ">=14.0.0"
},
"optionalDependencies": {
"@parcel/watcher": "^2.4.1"
}
},
"node_modules/sass/node_modules/chokidar": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"readdirp": "^4.0.1"
},
"engines": {
"node": ">= 14.16.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/sass/node_modules/readdirp": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
"devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 14.18.0"
},
"funding": {
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/sax": { "node_modules/sax": {
"version": "1.6.0", "version": "1.6.0",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
+19 -4
View File
@@ -1,17 +1,32 @@
{ {
"name": "", "name": "nova-design-system",
"type": "module", "type": "module",
"version": "0.0.1", "version": "0.1.0",
"description": "Nova Design System — Astro component library",
"engines": { "engines": {
"node": ">=22.12.0" "node": ">=22.12.0"
}, },
"exports": {
".": "./src/index.ts",
"./styles": "./src/styles/index.scss"
},
"files": [
"src"
],
"scripts": { "scripts": {
"dev": "astro dev", "dev": "astro dev",
"build": "astro build", "build": "astro build",
"preview": "astro preview", "preview": "astro preview",
"astro": "astro" "astro": "astro",
"barrel": "node scripts/generate-barrel.mjs"
},
"peerDependencies": {
"astro": ">=4.0.0"
}, },
"dependencies": { "dependencies": {
"astro": "^6.3.3" "astro": "^6.3.3"
},
"devDependencies": {
"sass": "^1.99.0"
} }
} }
+42
View File
@@ -0,0 +1,42 @@
/**
* Scans src/components/ and regenerates src/components/index.ts.
* Each component folder must have an index.ts that exports the component.
* Run: npm run barrel
*/
import { readdir, writeFile, stat } from 'fs/promises';
import { join, resolve } from 'path';
import { fileURLToPath } from 'url';
const __dirname = fileURLToPath(new URL('.', import.meta.url));
const componentsDir = resolve(__dirname, '../src/components');
const outputFile = join(componentsDir, 'index.ts');
const entries = await readdir(componentsDir);
const componentFolders = (
await Promise.all(
entries.map(async (name) => {
const fullPath = join(componentsDir, name);
const info = await stat(fullPath);
return info.isDirectory() ? name : null;
})
)
).filter(Boolean);
if (componentFolders.length === 0) {
console.log('No component folders found.');
process.exit(0);
}
const lines = [
'// Auto-generated by scripts/generate-barrel.mjs — do not edit manually.',
'',
...componentFolders.map((name) => `export * from './${name}/index.ts';`),
'',
];
await writeFile(outputFile, lines.join('\n'), 'utf-8');
console.log(`Barrel generated with ${componentFolders.length} component(s):`);
componentFolders.forEach((name) => console.log(` - ${name}`));
-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" width="115" height="48"><path fill="#17191E" d="M7.77 36.35C6.4 35.11 6 32.51 6.57 30.62c.99 1.2 2.35 1.57 3.75 1.78 2.18.33 4.31.2 6.33-.78.23-.12.44-.27.7-.42.18.55.23 1.1.17 1.67a4.56 4.56 0 0 1-1.94 3.23c-.43.32-.9.61-1.34.91-1.38.94-1.76 2.03-1.24 3.62l.05.17a3.63 3.63 0 0 1-1.6-1.38 3.87 3.87 0 0 1-.63-2.1c0-.37 0-.74-.05-1.1-.13-.9-.55-1.3-1.33-1.32a1.56 1.56 0 0 0-1.63 1.26c0 .06-.03.12-.05.2Z"/><path fill="url(#a)" d="M7.77 36.35C6.4 35.11 6 32.51 6.57 30.62c.99 1.2 2.35 1.57 3.75 1.78 2.18.33 4.31.2 6.33-.78.23-.12.44-.27.7-.42.18.55.23 1.1.17 1.67a4.56 4.56 0 0 1-1.94 3.23c-.43.32-.9.61-1.34.91-1.38.94-1.76 2.03-1.24 3.62l.05.17a3.63 3.63 0 0 1-1.6-1.38 3.87 3.87 0 0 1-.63-2.1c0-.37 0-.74-.05-1.1-.13-.9-.55-1.3-1.33-1.32a1.56 1.56 0 0 0-1.63 1.26c0 .06-.03.12-.05.2Z"/><path fill="#17191E" d="M.02 30.31s4.02-1.95 8.05-1.95l3.04-9.4c.11-.45.44-.76.82-.76.37 0 .7.31.82.76l3.04 9.4c4.77 0 8.05 1.95 8.05 1.95L17 11.71c-.2-.56-.53-.91-.98-.91H7.83c-.44 0-.76.35-.97.9L.02 30.31Zm42.37-5.97c0 1.64-2.05 2.62-4.88 2.62-1.85 0-2.5-.45-2.5-1.41 0-1 .8-1.49 2.65-1.49 1.67 0 3.09.03 4.73.23v.05Zm.03-2.04a21.37 21.37 0 0 0-4.37-.36c-5.32 0-7.82 1.25-7.82 4.18 0 3.04 1.71 4.2 5.68 4.2 3.35 0 5.63-.84 6.46-2.92h.14c-.03.5-.05 1-.05 1.4 0 1.07.18 1.16 1.06 1.16h4.15a16.9 16.9 0 0 1-.36-4c0-1.67.06-2.93.06-4.62 0-3.45-2.07-5.64-8.56-5.64-2.8 0-5.9.48-8.26 1.19.22.93.54 2.83.7 4.06 2.04-.96 4.95-1.37 7.2-1.37 3.11 0 3.97.71 3.97 2.15v.57Zm11.37 3c-.56.07-1.33.07-2.12.07-.83 0-1.6-.03-2.12-.1l-.02.58c0 2.85 1.87 4.52 8.45 4.52 6.2 0 8.2-1.64 8.2-4.55 0-2.74-1.33-4.09-7.2-4.39-4.58-.2-4.99-.7-4.99-1.28 0-.66.59-1 3.65-1 3.18 0 4.03.43 4.03 1.35v.2a46.13 46.13 0 0 1 4.24.03l.02-.55c0-3.36-2.8-4.46-8.2-4.46-6.08 0-8.13 1.49-8.13 4.39 0 2.6 1.64 4.23 7.48 4.48 4.3.14 4.77.62 4.77 1.28 0 .7-.7 1.03-3.71 1.03-3.47 0-4.35-.48-4.35-1.47v-.13Zm19.82-12.05a17.5 17.5 0 0 1-6.24 3.48c.03.84.03 2.4.03 3.24l1.5.02c-.02 1.63-.04 3.6-.04 4.9 0 3.04 1.6 5.32 6.58 5.32 2.1 0 3.5-.23 5.23-.6a43.77 43.77 0 0 1-.46-4.13c-1.03.34-2.34.53-3.78.53-2 0-2.82-.55-2.82-2.13 0-1.37 0-2.65.03-3.84 2.57.02 5.13.07 6.64.11-.02-1.18.03-2.9.1-4.04-2.2.04-4.65.07-6.68.07l.07-2.93h-.16Zm13.46 6.04a767.33 767.33 0 0 1 .07-3.18H82.6c.07 1.96.07 3.98.07 6.92 0 2.95-.03 4.99-.07 6.93h5.18c-.09-1.37-.11-3.68-.11-5.65 0-3.1 1.26-4 4.12-4 1.33 0 2.28.16 3.1.46.03-1.16.26-3.43.4-4.43-.86-.25-1.81-.41-2.96-.41-2.46-.03-4.26.98-5.1 3.38l-.17-.02Zm22.55 3.65c0 2.5-1.8 3.66-4.64 3.66-2.81 0-4.61-1.1-4.61-3.66s1.82-3.52 4.61-3.52c2.82 0 4.64 1.03 4.64 3.52Zm4.71-.11c0-4.96-3.87-7.18-9.35-7.18-5.5 0-9.23 2.22-9.23 7.18 0 4.94 3.49 7.59 9.21 7.59 5.77 0 9.37-2.65 9.37-7.6Z"/><defs><linearGradient id="a" x1="6.33" x2="19.43" y1="40.8" y2="34.6" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"/><stop offset="1" stop-color="#F041FF"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="1024" fill="none"><path fill="url(#a)" fill-rule="evenodd" d="M-217.58 475.75c91.82-72.02 225.52-29.38 341.2-44.74C240 415.56 372.33 315.14 466.77 384.9c102.9 76.02 44.74 246.76 90.31 366.31 29.83 78.24 90.48 136.14 129.48 210.23 57.92 109.99 169.67 208.23 155.9 331.77-13.52 121.26-103.42 264.33-224.23 281.37-141.96 20.03-232.72-220.96-374.06-196.99-151.7 25.73-172.68 330.24-325.85 315.72-128.6-12.2-110.9-230.73-128.15-358.76-12.16-90.14 65.87-176.25 44.1-264.57-26.42-107.2-167.12-163.46-176.72-273.45-10.15-116.29 33.01-248.75 124.87-320.79Z" clip-rule="evenodd" style="opacity:.154"/><path fill="url(#b)" fill-rule="evenodd" d="M1103.43 115.43c146.42-19.45 275.33-155.84 413.5-103.59 188.09 71.13 409 212.64 407.06 413.88-1.94 201.25-259.28 278.6-414.96 405.96-130 106.35-240.24 294.39-405.6 265.3-163.7-28.8-161.93-274.12-284.34-386.66-134.95-124.06-436-101.46-445.82-284.6-9.68-180.38 247.41-246.3 413.54-316.9 101.01-42.93 207.83 21.06 316.62 6.61Z" clip-rule="evenodd" style="opacity:.154"/><defs><linearGradient id="b" x1="373" x2="1995.44" y1="1100" y2="118.03" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"/><stop offset="1" stop-color="#F041FF"/></linearGradient><linearGradient id="a" x1="107.37" x2="1130.66" y1="1993.35" y2="1026.31" gradientUnits="userSpaceOnUse"><stop stop-color="#3245FF"/><stop offset="1" stop-color="#BC52EE"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

-210
View File
@@ -1,210 +0,0 @@
---
import astroLogo from '../assets/astro.svg';
import background from '../assets/background.svg';
---
<div id="container">
<img id="background" src={background.src} alt="" fetchpriority="high" />
<main>
<section id="hero">
<a href="https://astro.build"
><img src={astroLogo.src} width="115" height="48" alt="Astro Homepage" /></a
>
<h1>
To get started, open the <code><pre>src/pages</pre></code> directory in your project.
</h1>
<section id="links">
<a class="button" href="https://docs.astro.build">Read our docs</a>
<a href="https://astro.build/chat"
>Join our Discord <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"
><path
fill="currentColor"
d="M107.7 8.07A105.15 105.15 0 0 0 81.47 0a72.06 72.06 0 0 0-3.36 6.83 97.68 97.68 0 0 0-29.11 0A72.37 72.37 0 0 0 45.64 0a105.89 105.89 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.73 105.73 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.42 68.42 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.68 68.68 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.25 105.25 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15ZM42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69Zm42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69Z"
></path></svg
>
</a>
</section>
</section>
</main>
<a href="https://astro.build/blog/astro-6-beta/" id="news" class="box">
<svg width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"
><path
d="M24.667 12c1.333 1.414 2 3.192 2 5.334 0 4.62-4.934 5.7-7.334 12C18.444 28.567 18 27.456 18 26c0-4.642 6.667-7.053 6.667-14Zm-5.334-5.333c1.6 1.65 2.4 3.43 2.4 5.333 0 6.602-8.06 7.59-6.4 17.334C13.111 27.787 12 25.564 12 22.666c0-4.434 7.333-8 7.333-16Zm-6-5.333C15.111 3.555 16 5.556 16 7.333c0 8.333-11.333 10.962-5.333 22-3.488-.774-6-4-6-8 0-8.667 8.666-10 8.666-20Z"
fill="#111827"></path></svg
>
<h2>What's New in Astro 6.0?</h2>
<p>
Redesigned dev server, fonts, live collections, built-in CSP support, and more! Click to
explore Astro 6.0's new features.
</p>
</a>
</div>
<style>
#background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
filter: blur(100px);
}
#container {
font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;
height: 100%;
}
main {
height: 100%;
display: flex;
justify-content: center;
}
#hero {
display: flex;
align-items: start;
flex-direction: column;
justify-content: center;
padding: 16px;
}
h1 {
font-size: 22px;
margin-top: 0.25em;
}
#links {
display: flex;
gap: 16px;
}
#links a {
display: flex;
align-items: center;
padding: 10px 12px;
color: #111827;
text-decoration: none;
transition: color 0.2s;
}
#links a:hover {
color: rgb(78, 80, 86);
}
#links a svg {
height: 1em;
margin-left: 8px;
}
#links a.button {
color: white;
background: linear-gradient(83.21deg, #3245ff 0%, #bc52ee 100%);
box-shadow:
inset 0 0 0 1px rgba(255, 255, 255, 0.12),
inset 0 -2px 0 rgba(0, 0, 0, 0.24);
border-radius: 10px;
}
#links a.button:hover {
color: rgb(230, 230, 230);
box-shadow: none;
}
pre {
font-family:
ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono',
monospace;
font-weight: normal;
background: linear-gradient(14deg, #d83333 0%, #f041ff 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin: 0;
}
h2 {
margin: 0 0 1em;
font-weight: normal;
color: #111827;
font-size: 20px;
}
p {
color: #4b5563;
font-size: 16px;
line-height: 24px;
letter-spacing: -0.006em;
margin: 0;
}
code {
display: inline-block;
background:
linear-gradient(66.77deg, #f3cddd 0%, #f5cee7 100%) padding-box,
linear-gradient(155deg, #d83333 0%, #f041ff 18%, #f5cee7 45%) border-box;
border-radius: 8px;
border: 1px solid transparent;
padding: 6px 8px;
}
.box {
padding: 16px;
background: rgba(255, 255, 255, 1);
border-radius: 16px;
border: 1px solid white;
}
#news {
position: absolute;
bottom: 16px;
right: 16px;
max-width: 300px;
text-decoration: none;
transition: background 0.2s;
backdrop-filter: blur(50px);
}
#news:hover {
background: rgba(255, 255, 255, 0.55);
}
@media screen and (max-height: 368px) {
#news {
display: none;
}
}
@media screen and (max-width: 768px) {
#container {
display: flex;
flex-direction: column;
}
#hero {
display: block;
padding-top: 10%;
}
#links {
flex-wrap: wrap;
}
#links a.button {
padding: 14px 18px;
}
#news {
right: 16px;
left: 16px;
bottom: 2.5rem;
max-width: 100%;
}
h1 {
line-height: 1.5;
}
}
</style>
+176
View File
@@ -0,0 +1,176 @@
// ─── Semantic color tokens — Light & Dark ────────────────────────────────────
// Source: Light.tokens.json / Dark.tokens.json (Figma export)
// Usage : --nds-<category>-<variant>
@mixin _light {
// ── Base ──────────────────────────────────────────────────────────────────
--nds-default: #1C1C1A;
--nds-icon: #1C1C1A;
--nds-overlay: rgba(28, 28, 26, 0.60);
--nds-scrim: rgba(28, 28, 26, 0.35);
// ── Brand ─────────────────────────────────────────────────────────────────
--nds-brand-primary: #534AB7;
--nds-brand-high: #3C3489;
--nds-brand-medium: #7F77DD;
--nds-brand-low: #EEEDFE;
// ── Neutral ───────────────────────────────────────────────────────────────
--nds-neutral-high: #2C2C2A;
--nds-neutral-medium: #888780;
--nds-neutral-low: #F1EFE8;
// ── Correct ───────────────────────────────────────────────────────────────
--nds-correct-high: #3B6D11;
--nds-correct-medium: #639922;
--nds-correct-low: #EAF3DE;
// ── Error ─────────────────────────────────────────────────────────────────
--nds-error-high: #A32D2D;
--nds-error-medium: #E24B4A;
--nds-error-low: #FCEBEB;
// ── Warning ───────────────────────────────────────────────────────────────
--nds-warning-high: #854F0B;
--nds-warning-medium: #BA7517;
--nds-warning-low: #FAEEDA;
// ── Info ──────────────────────────────────────────────────────────────────
--nds-info-high: #185FA5;
--nds-info-medium: #378ADD;
--nds-info-low: #E6F1FB;
// ── Interaction ───────────────────────────────────────────────────────────
--nds-interaction-high: #26215C;
--nds-interaction-medium: #534AB7;
--nds-interaction-low: #CECBF6;
// ── Disabled ──────────────────────────────────────────────────────────────
--nds-disabled-high: #B4B2A9;
--nds-disabled-medium: #D3D1C7;
--nds-disabled-low: #F1EFE8;
// ── Overlay (alpha) ───────────────────────────────────────────────────────
--nds-overlay-high: rgba(0, 0, 0, 0.72);
--nds-overlay-medium: rgba(0, 0, 0, 0.40);
--nds-overlay-low: rgba(0, 0, 0, 0.16);
// ── Focus ─────────────────────────────────────────────────────────────────
--nds-focus-ring: #534AB7;
// ── Text ──────────────────────────────────────────────────────────────────
--nds-text-muted: #888780;
--nds-text-placeholder: #B4B2A9;
--nds-text-link: #534AB7;
--nds-text-on-brand: #F4F2EF;
// ── Border colors ─────────────────────────────────────────────────────────
--nds-border-high: #B4B2A9;
--nds-border-medium: #D3D1C7;
--nds-border-low: #F1EFE8;
// ── Component backgrounds ─────────────────────────────────────────────────
--nds-component-low: #ECEAE3;
--nds-component-medium: #F8F7F4;
--nds-component-high: #FFFFFF;
// ── Page backgrounds ──────────────────────────────────────────────────────
--nds-page-low: #F4F2EF;
--nds-page-medium: #ECEAE3;
--nds-page-high: #E4E2DB;
}
@mixin _dark {
// ── Base ──────────────────────────────────────────────────────────────────
--nds-default: #F4F2EF;
--nds-icon: #F4F2EF;
--nds-overlay: rgba(0, 0, 0, 0.75);
--nds-scrim: rgba(0, 0, 0, 0.50);
// ── Brand ─────────────────────────────────────────────────────────────────
--nds-brand-primary: #7F77DD;
--nds-brand-high: #AFA9EC;
--nds-brand-medium: #534AB7;
--nds-brand-low: #26215C;
// ── Neutral ───────────────────────────────────────────────────────────────
--nds-neutral-high: #F1EFE8;
--nds-neutral-medium: #888780;
--nds-neutral-low: #2C2C2A;
// ── Correct ───────────────────────────────────────────────────────────────
--nds-correct-high: #97C459;
--nds-correct-medium: #97C459;
--nds-correct-low: #173404;
// ── Error ─────────────────────────────────────────────────────────────────
--nds-error-high: #F09595;
--nds-error-medium: #A32D2D;
--nds-error-low: #501313;
// ── Warning ───────────────────────────────────────────────────────────────
--nds-warning-high: #EF9F27;
--nds-warning-medium: #EF9F27;
--nds-warning-low: #412402;
// ── Info ──────────────────────────────────────────────────────────────────
--nds-info-high: #85B7EB;
--nds-info-medium: #85B7EB;
--nds-info-low: #042C53;
// ── Interaction ───────────────────────────────────────────────────────────
--nds-interaction-high: #AFA9EC;
--nds-interaction-medium: #7F77DD;
--nds-interaction-low: #26215C;
// ── Disabled ──────────────────────────────────────────────────────────────
--nds-disabled-high: #5F5E5A;
--nds-disabled-medium: #444441;
--nds-disabled-low: #2C2C2A;
// ── Overlay (alpha) ───────────────────────────────────────────────────────
--nds-overlay-high: rgba(255, 255, 255, 0.80);
--nds-overlay-medium: rgba(255, 255, 255, 0.50);
--nds-overlay-low: rgba(255, 255, 255, 0.24);
// ── Focus ─────────────────────────────────────────────────────────────────
--nds-focus-ring: #7F77DD;
// ── Text ──────────────────────────────────────────────────────────────────
--nds-text-muted: #888780;
--nds-text-placeholder: #5F5E5A;
--nds-text-link: #7F77DD;
--nds-text-on-brand: #1C1C1A;
// ── Border colors ─────────────────────────────────────────────────────────
--nds-border-high: #5F5E5A;
--nds-border-medium: #444441;
--nds-border-low: #2C2C2A;
// ── Component backgrounds ─────────────────────────────────────────────────
--nds-component-low: #222220;
--nds-component-medium: #2A2A28;
--nds-component-high: #333330;
// ── Page backgrounds ──────────────────────────────────────────────────────
--nds-page-low: #1C1C1A;
--nds-page-medium: #242422;
--nds-page-high: #2C2C2A;
}
// ─── Apply themes ─────────────────────────────────────────────────────────────
:root,
[data-theme="light"] {
@include _light;
}
[data-theme="dark"] {
@include _dark;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
@include _dark;
}
}
+32
View File
@@ -0,0 +1,32 @@
// ─── Base tokens (theme-independent) ──────────────────────────────────────────
// Source: Light.tokens.json / Dark.tokens.json — Spacing, Radius, Border (same in both themes)
:root {
--nds-none: 0;
// ── Spacing ───────────────────────────────────────────────────────────────
--nds-spacing-3xs: 2px;
--nds-spacing-2xs: 4px;
--nds-spacing-xs: 8px;
--nds-spacing-sm: 12px;
--nds-spacing-md: 16px;
--nds-spacing-lg: 24px;
--nds-spacing-xl: 32px;
--nds-spacing-2xl: 48px;
--nds-spacing-3xl: 64px;
// ── Radius ────────────────────────────────────────────────────────────────
--nds-radius-xs: 2px;
--nds-radius-sm: 4px;
--nds-radius-md: 8px;
--nds-radius-lg: 12px;
--nds-radius-xl: 16px;
--nds-radius-2xl: 24px;
--nds-radius-3xl: 32px;
--nds-radius-full: 9999px;
// ── Border widths ─────────────────────────────────────────────────────────
--nds-border-width-thin: 1px;
--nds-border-width-medium: 2px;
--nds-border-width-thick: 4px;
}
+112
View File
@@ -0,0 +1,112 @@
// ─── Typography tokens ────────────────────────────────────────────────────────
// Font: Geist (Vercel) — https://vercel.com/font
// Values: size in px, line-height in px, letter-spacing as em
:root {
// ── Font families ─────────────────────────────────────────────────────────
--nds-font-family-base: 'Geist', system-ui, -apple-system, sans-serif;
--nds-font-family-mono: 'Geist Mono', 'JetBrains Mono', monospace;
// ── Font weights ──────────────────────────────────────────────────────────
--nds-font-weight-medium: 500;
--nds-font-weight-semibold: 600;
--nds-font-weight-bold: 700;
// ── Body ──────────────────────────────────────────────────────────────────
--nds-type-body-small-size: 12px;
--nds-type-body-small-weight: var(--nds-font-weight-medium);
--nds-type-body-small-line-height: 10px;
--nds-type-body-small-letter-spacing: 0.015em;
--nds-type-body-medium-size: 14px;
--nds-type-body-medium-weight: var(--nds-font-weight-medium);
--nds-type-body-medium-line-height: 10px;
--nds-type-body-medium-letter-spacing: 0.015em;
--nds-type-body-large-size: 16px;
--nds-type-body-large-weight: var(--nds-font-weight-medium);
--nds-type-body-large-line-height: 12px;
--nds-type-body-large-letter-spacing: 0.015em;
// ── Heading ───────────────────────────────────────────────────────────────
--nds-type-heading-small-size: 20px;
--nds-type-heading-small-weight: var(--nds-font-weight-semibold);
--nds-type-heading-small-line-height: 15px;
--nds-type-heading-small-letter-spacing: 0.014em;
--nds-type-heading-medium-size: 24px;
--nds-type-heading-medium-weight: var(--nds-font-weight-semibold);
--nds-type-heading-medium-line-height: 18px;
--nds-type-heading-medium-letter-spacing: 0.013em;
// ── Display ───────────────────────────────────────────────────────────────
--nds-type-display-small-size: 36px;
--nds-type-display-small-weight: var(--nds-font-weight-bold);
--nds-type-display-small-line-height: 30px;
--nds-type-display-small-letter-spacing: 0.012em;
--nds-type-display-medium-size: 48px;
--nds-type-display-medium-weight: var(--nds-font-weight-bold);
--nds-type-display-medium-line-height: 38px;
--nds-type-display-medium-letter-spacing: 0.011em;
}
// ─── SASS mixins ──────────────────────────────────────────────────────────────
// Usage: @use 'path/to/tokens/typography' as typo;
// @include typo.body-small;
@mixin body-small {
font-family: var(--nds-font-family-base);
font-size: var(--nds-type-body-small-size);
font-weight: var(--nds-type-body-small-weight);
line-height: var(--nds-type-body-small-line-height);
letter-spacing: var(--nds-type-body-small-letter-spacing);
}
@mixin body-medium {
font-family: var(--nds-font-family-base);
font-size: var(--nds-type-body-medium-size);
font-weight: var(--nds-type-body-medium-weight);
line-height: var(--nds-type-body-medium-line-height);
letter-spacing: var(--nds-type-body-medium-letter-spacing);
}
@mixin body-large {
font-family: var(--nds-font-family-base);
font-size: var(--nds-type-body-large-size);
font-weight: var(--nds-type-body-large-weight);
line-height: var(--nds-type-body-large-line-height);
letter-spacing: var(--nds-type-body-large-letter-spacing);
}
@mixin heading-small {
font-family: var(--nds-font-family-base);
font-size: var(--nds-type-heading-small-size);
font-weight: var(--nds-type-heading-small-weight);
line-height: var(--nds-type-heading-small-line-height);
letter-spacing: var(--nds-type-heading-small-letter-spacing);
}
@mixin heading-medium {
font-family: var(--nds-font-family-base);
font-size: var(--nds-type-heading-medium-size);
font-weight: var(--nds-type-heading-medium-weight);
line-height: var(--nds-type-heading-medium-line-height);
letter-spacing: var(--nds-type-heading-medium-letter-spacing);
}
@mixin display-small {
font-family: var(--nds-font-family-base);
font-size: var(--nds-type-display-small-size);
font-weight: var(--nds-type-display-small-weight);
line-height: var(--nds-type-display-small-line-height);
letter-spacing: var(--nds-type-display-small-letter-spacing);
}
@mixin display-medium {
font-family: var(--nds-font-family-base);
font-size: var(--nds-type-display-medium-size);
font-weight: var(--nds-type-display-medium-weight);
line-height: var(--nds-type-display-medium-line-height);
letter-spacing: var(--nds-type-display-medium-letter-spacing);
}