@mars-stack/ui 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-RMD6D5ZT.js +100 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/utils/index.d.ts +33 -0
- package/dist/utils/index.js +3 -0
- package/package.json +12 -5
- package/styles/meta-creative.css +50 -0
- package/styles/meta-dashboard.css +50 -0
- package/styles/meta-enterprise.css +50 -0
- package/styles/meta-minimal.css +50 -0
- package/styles/meta-modern-saas.css +50 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
// src/utils/brand-scale.ts
|
|
3
|
+
var TAILWIND_COLOR_HEX = {
|
|
4
|
+
"blue-600": "#2563eb",
|
|
5
|
+
"indigo-600": "#4f46e5",
|
|
6
|
+
"violet-600": "#7c3aed",
|
|
7
|
+
"emerald-600": "#059669",
|
|
8
|
+
"rose-600": "#e11d48",
|
|
9
|
+
"amber-600": "#d97706",
|
|
10
|
+
"cyan-600": "#0891b2",
|
|
11
|
+
"slate-600": "#475569"
|
|
12
|
+
};
|
|
13
|
+
var DEFAULT_COLOR = "blue-600";
|
|
14
|
+
function srgbToLinear(c) {
|
|
15
|
+
return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
|
|
16
|
+
}
|
|
17
|
+
function linearRgbToOklab(r, g, b) {
|
|
18
|
+
const l_ = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
|
|
19
|
+
const m_ = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
|
|
20
|
+
const s_ = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
|
|
21
|
+
const l = Math.cbrt(l_);
|
|
22
|
+
const m = Math.cbrt(m_);
|
|
23
|
+
const s = Math.cbrt(s_);
|
|
24
|
+
return [
|
|
25
|
+
0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
|
|
26
|
+
1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
|
|
27
|
+
0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
function hexToOklch(hex) {
|
|
31
|
+
const cleaned = hex.replace("#", "");
|
|
32
|
+
const r = parseInt(cleaned.slice(0, 2), 16) / 255;
|
|
33
|
+
const g = parseInt(cleaned.slice(2, 4), 16) / 255;
|
|
34
|
+
const b = parseInt(cleaned.slice(4, 6), 16) / 255;
|
|
35
|
+
const lr = srgbToLinear(r);
|
|
36
|
+
const lg = srgbToLinear(g);
|
|
37
|
+
const lb = srgbToLinear(b);
|
|
38
|
+
const [L, a, bLab] = linearRgbToOklab(lr, lg, lb);
|
|
39
|
+
const c = Math.sqrt(a * a + bLab * bLab);
|
|
40
|
+
let h = Math.atan2(bLab, a) * 180 / Math.PI;
|
|
41
|
+
if (h < 0) h += 360;
|
|
42
|
+
return { l: L, c, h };
|
|
43
|
+
}
|
|
44
|
+
function formatOklch(color) {
|
|
45
|
+
return `oklch(${color.l.toFixed(3)} ${color.c.toFixed(3)} ${color.h.toFixed(0)})`;
|
|
46
|
+
}
|
|
47
|
+
var SCALE_STEPS = [
|
|
48
|
+
{ name: "50", l: 0.97, cScale: 0.07 },
|
|
49
|
+
{ name: "100", l: 0.93, cScale: 0.15 },
|
|
50
|
+
{ name: "200", l: 0.88, cScale: 0.28 },
|
|
51
|
+
{ name: "300", l: 0.81, cScale: 0.5 },
|
|
52
|
+
{ name: "400", l: 0.71, cScale: 0.72 },
|
|
53
|
+
{ name: "500", l: 0.62, cScale: 1 },
|
|
54
|
+
{ name: "600", l: 0.55, cScale: 1 },
|
|
55
|
+
{ name: "700", l: 0.49, cScale: 0.95 },
|
|
56
|
+
{ name: "800", l: 0.42, cScale: 0.82 },
|
|
57
|
+
{ name: "900", l: 0.38, cScale: 0.6 },
|
|
58
|
+
{ name: "950", l: 0.28, cScale: 0.46 }
|
|
59
|
+
];
|
|
60
|
+
function resolveColorPreset(primaryColor) {
|
|
61
|
+
if (primaryColor in TAILWIND_COLOR_HEX) return primaryColor;
|
|
62
|
+
const withShade = `${primaryColor}-600`;
|
|
63
|
+
if (withShade in TAILWIND_COLOR_HEX) return withShade;
|
|
64
|
+
return DEFAULT_COLOR;
|
|
65
|
+
}
|
|
66
|
+
function resolveColorHex(primaryColor) {
|
|
67
|
+
return TAILWIND_COLOR_HEX[resolveColorPreset(primaryColor)];
|
|
68
|
+
}
|
|
69
|
+
function generateBrandScale(primaryColor) {
|
|
70
|
+
const hex = resolveColorHex(primaryColor);
|
|
71
|
+
const base = hexToOklch(hex);
|
|
72
|
+
const maxChroma = Math.max(base.c, 0.05);
|
|
73
|
+
const scale = {};
|
|
74
|
+
for (const step of SCALE_STEPS) {
|
|
75
|
+
const chroma = maxChroma * step.cScale;
|
|
76
|
+
scale[step.name] = formatOklch({ l: step.l, c: chroma, h: base.h });
|
|
77
|
+
}
|
|
78
|
+
return scale;
|
|
79
|
+
}
|
|
80
|
+
function effectiveColorLabel(primaryColor) {
|
|
81
|
+
const preset = resolveColorPreset(primaryColor);
|
|
82
|
+
const usedFallback = preset === DEFAULT_COLOR && primaryColor !== DEFAULT_COLOR && primaryColor !== "blue";
|
|
83
|
+
if (usedFallback) {
|
|
84
|
+
return `${primaryColor} (unrecognized, using default ${DEFAULT_COLOR})`;
|
|
85
|
+
}
|
|
86
|
+
return primaryColor;
|
|
87
|
+
}
|
|
88
|
+
function generateBrandCss(primaryColor) {
|
|
89
|
+
const scale = generateBrandScale(primaryColor);
|
|
90
|
+
const lines = Object.entries(scale).map(([step, value]) => ` --brand-${step}: ${value};`).join("\n");
|
|
91
|
+
const label = effectiveColorLabel(primaryColor);
|
|
92
|
+
return `/* Generated by Mars \u2014 brand palette derived from ${label} */
|
|
93
|
+
|
|
94
|
+
:root {
|
|
95
|
+
${lines}
|
|
96
|
+
}
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { generateBrandCss, generateBrandScale, resolveColorHex };
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OKLCH brand scale generator.
|
|
3
|
+
*
|
|
4
|
+
* Maps Tailwind color preset names (e.g. "indigo-600") to a full 11-stop
|
|
5
|
+
* OKLCH brand palette used in brand.css. Ported from the playground's
|
|
6
|
+
* color-utils.ts; kept dependency-free so the CLI can bundle it.
|
|
7
|
+
*/
|
|
8
|
+
interface OklchColor {
|
|
9
|
+
l: number;
|
|
10
|
+
c: number;
|
|
11
|
+
h: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a color preset string to a hex value. Handles both the new
|
|
15
|
+
* format (`"indigo-600"`) and legacy shorthand (`"indigo"`).
|
|
16
|
+
*/
|
|
17
|
+
declare function resolveColorHex(primaryColor: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate an 11-stop OKLCH brand scale from a Tailwind color preset name.
|
|
20
|
+
* Keeps the hue fixed and fans out lightness/chroma.
|
|
21
|
+
*
|
|
22
|
+
* @returns Record mapping step names ("50"–"950") to `oklch(...)` CSS values.
|
|
23
|
+
*/
|
|
24
|
+
declare function generateBrandScale(primaryColor: string): Record<string, string>;
|
|
25
|
+
/**
|
|
26
|
+
* Generate the full `brand.css` file content for a given primary color.
|
|
27
|
+
*
|
|
28
|
+
* @param primaryColor - A Tailwind color preset (e.g. "indigo-600" or "indigo").
|
|
29
|
+
* @returns CSS string with `:root` block defining `--brand-50` through `--brand-950`.
|
|
30
|
+
*/
|
|
31
|
+
declare function generateBrandCss(primaryColor: string): string;
|
|
32
|
+
|
|
33
|
+
export { type OklchColor, generateBrandCss, generateBrandScale, resolveColorHex };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mars-stack/ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,17 +19,24 @@
|
|
|
19
19
|
"exports": {
|
|
20
20
|
".": {
|
|
21
21
|
"types": "./dist/index.d.ts",
|
|
22
|
-
"import": "./dist/index.js"
|
|
22
|
+
"import": "./dist/index.js",
|
|
23
|
+
"default": "./dist/index.js"
|
|
23
24
|
},
|
|
24
25
|
"./hooks": {
|
|
25
26
|
"types": "./dist/hooks/index.d.ts",
|
|
26
|
-
"import": "./dist/hooks/index.js"
|
|
27
|
+
"import": "./dist/hooks/index.js",
|
|
28
|
+
"default": "./dist/hooks/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./utils": {
|
|
31
|
+
"types": "./dist/utils/index.d.ts",
|
|
32
|
+
"import": "./dist/utils/index.js",
|
|
33
|
+
"default": "./dist/utils/index.js"
|
|
27
34
|
},
|
|
28
35
|
"./styles/*": "./styles/*"
|
|
29
36
|
},
|
|
30
37
|
"sideEffects": false,
|
|
31
38
|
"publishConfig": {
|
|
32
|
-
"access": "
|
|
39
|
+
"access": "public"
|
|
33
40
|
},
|
|
34
41
|
"files": [
|
|
35
42
|
"dist",
|
|
@@ -43,7 +50,7 @@
|
|
|
43
50
|
"prepublishOnly": "yarn build"
|
|
44
51
|
},
|
|
45
52
|
"peerDependencies": {
|
|
46
|
-
"@mars-stack/core": ">=0.
|
|
53
|
+
"@mars-stack/core": ">=1.0.2",
|
|
47
54
|
"clsx": ">=2",
|
|
48
55
|
"next": ">=14",
|
|
49
56
|
"react": ">=18"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* MARS Meta-Theme: Creative
|
|
2
|
+
* Layer 2 — structural overrides. Does NOT touch --color-* or --brand-*.
|
|
3
|
+
* Large radii, bold shadows, looser spacing, expressive typography scale. */
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--radius-sm: 0.375rem;
|
|
7
|
+
--radius-md: 0.625rem;
|
|
8
|
+
--radius-lg: 0.875rem;
|
|
9
|
+
--radius-xl: 1.25rem;
|
|
10
|
+
--radius-2xl: 1.5rem;
|
|
11
|
+
|
|
12
|
+
--space-1: 0.3125rem;
|
|
13
|
+
--space-2: 0.625rem;
|
|
14
|
+
--space-3: 0.9375rem;
|
|
15
|
+
--space-4: 1.25rem;
|
|
16
|
+
--space-5: 1.5rem;
|
|
17
|
+
--space-6: 1.875rem;
|
|
18
|
+
--space-8: 2.5rem;
|
|
19
|
+
--space-10: 3rem;
|
|
20
|
+
--space-12: 3.75rem;
|
|
21
|
+
--space-16: 5rem;
|
|
22
|
+
|
|
23
|
+
--shadow-xs: 0 1px 3px 0 rgb(0 0 0 / 0.08);
|
|
24
|
+
--shadow-sm: 0 2px 6px 0 rgb(0 0 0 / 0.1), 0 1px 3px -1px rgb(0 0 0 / 0.08);
|
|
25
|
+
--shadow-md: 0 6px 12px -2px rgb(0 0 0 / 0.12), 0 3px 6px -3px rgb(0 0 0 / 0.08);
|
|
26
|
+
--shadow-lg: 0 14px 24px -4px rgb(0 0 0 / 0.14), 0 6px 10px -6px rgb(0 0 0 / 0.1);
|
|
27
|
+
--shadow-xl: 0 24px 40px -8px rgb(0 0 0 / 0.16), 0 10px 16px -8px rgb(0 0 0 / 0.1);
|
|
28
|
+
|
|
29
|
+
--text-xs: 0.75rem;
|
|
30
|
+
--text-sm: 0.875rem;
|
|
31
|
+
--text-base: 1.0625rem;
|
|
32
|
+
--text-lg: 1.25rem;
|
|
33
|
+
--text-xl: 1.5rem;
|
|
34
|
+
--text-2xl: 1.875rem;
|
|
35
|
+
--text-3xl: 2.25rem;
|
|
36
|
+
--text-4xl: 3rem;
|
|
37
|
+
|
|
38
|
+
--leading-tight: 1.2;
|
|
39
|
+
--leading-normal: 1.55;
|
|
40
|
+
--leading-relaxed: 1.7;
|
|
41
|
+
|
|
42
|
+
--tracking-tight: -0.03em;
|
|
43
|
+
--tracking-normal: 0;
|
|
44
|
+
--tracking-wide: 0.04em;
|
|
45
|
+
|
|
46
|
+
--font-weight-normal: 400;
|
|
47
|
+
--font-weight-medium: 500;
|
|
48
|
+
--font-weight-semibold: 650;
|
|
49
|
+
--font-weight-bold: 800;
|
|
50
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* MARS Meta-Theme: Dashboard
|
|
2
|
+
* Layer 2 — structural overrides. Does NOT touch --color-* or --brand-*.
|
|
3
|
+
* Medium radii, compact spacing for data density, subtle shadows, monospace-friendly sizing. */
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--radius-sm: 0.1875rem;
|
|
7
|
+
--radius-md: 0.3125rem;
|
|
8
|
+
--radius-lg: 0.4375rem;
|
|
9
|
+
--radius-xl: 0.625rem;
|
|
10
|
+
--radius-2xl: 0.75rem;
|
|
11
|
+
|
|
12
|
+
--space-1: 0.1875rem;
|
|
13
|
+
--space-2: 0.375rem;
|
|
14
|
+
--space-3: 0.5625rem;
|
|
15
|
+
--space-4: 0.75rem;
|
|
16
|
+
--space-5: 1rem;
|
|
17
|
+
--space-6: 1.25rem;
|
|
18
|
+
--space-8: 1.75rem;
|
|
19
|
+
--space-10: 2.25rem;
|
|
20
|
+
--space-12: 2.75rem;
|
|
21
|
+
--space-16: 3.5rem;
|
|
22
|
+
|
|
23
|
+
--shadow-xs: 0 1px 1px 0 rgb(0 0 0 / 0.03);
|
|
24
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05), 0 1px 1px -1px rgb(0 0 0 / 0.03);
|
|
25
|
+
--shadow-md: 0 2px 4px -1px rgb(0 0 0 / 0.06), 0 1px 2px -1px rgb(0 0 0 / 0.03);
|
|
26
|
+
--shadow-lg: 0 6px 10px -3px rgb(0 0 0 / 0.07), 0 3px 4px -3px rgb(0 0 0 / 0.04);
|
|
27
|
+
--shadow-xl: 0 12px 20px -5px rgb(0 0 0 / 0.08), 0 5px 8px -5px rgb(0 0 0 / 0.04);
|
|
28
|
+
|
|
29
|
+
--text-xs: 0.6875rem;
|
|
30
|
+
--text-sm: 0.8125rem;
|
|
31
|
+
--text-base: 0.875rem;
|
|
32
|
+
--text-lg: 1rem;
|
|
33
|
+
--text-xl: 1.125rem;
|
|
34
|
+
--text-2xl: 1.3125rem;
|
|
35
|
+
--text-3xl: 1.625rem;
|
|
36
|
+
--text-4xl: 2rem;
|
|
37
|
+
|
|
38
|
+
--leading-tight: 1.2;
|
|
39
|
+
--leading-normal: 1.4;
|
|
40
|
+
--leading-relaxed: 1.55;
|
|
41
|
+
|
|
42
|
+
--tracking-tight: -0.015em;
|
|
43
|
+
--tracking-normal: 0;
|
|
44
|
+
--tracking-wide: 0.02em;
|
|
45
|
+
|
|
46
|
+
--font-weight-normal: 400;
|
|
47
|
+
--font-weight-medium: 500;
|
|
48
|
+
--font-weight-semibold: 600;
|
|
49
|
+
--font-weight-bold: 700;
|
|
50
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* MARS Meta-Theme: Enterprise
|
|
2
|
+
* Layer 2 — structural overrides. Does NOT touch --color-* or --brand-*.
|
|
3
|
+
* Square/very small radii, dense spacing, conservative shadows, tabular-friendly typography. */
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--radius-sm: 0.125rem;
|
|
7
|
+
--radius-md: 0.1875rem;
|
|
8
|
+
--radius-lg: 0.25rem;
|
|
9
|
+
--radius-xl: 0.375rem;
|
|
10
|
+
--radius-2xl: 0.5rem;
|
|
11
|
+
|
|
12
|
+
--space-1: 0.1875rem;
|
|
13
|
+
--space-2: 0.375rem;
|
|
14
|
+
--space-3: 0.5rem;
|
|
15
|
+
--space-4: 0.75rem;
|
|
16
|
+
--space-5: 0.875rem;
|
|
17
|
+
--space-6: 1.125rem;
|
|
18
|
+
--space-8: 1.5rem;
|
|
19
|
+
--space-10: 2rem;
|
|
20
|
+
--space-12: 2.5rem;
|
|
21
|
+
--space-16: 3.25rem;
|
|
22
|
+
|
|
23
|
+
--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.04);
|
|
24
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.06), 0 1px 1px -1px rgb(0 0 0 / 0.04);
|
|
25
|
+
--shadow-md: 0 2px 4px -1px rgb(0 0 0 / 0.07), 0 1px 2px -1px rgb(0 0 0 / 0.04);
|
|
26
|
+
--shadow-lg: 0 4px 8px -2px rgb(0 0 0 / 0.08), 0 2px 4px -2px rgb(0 0 0 / 0.04);
|
|
27
|
+
--shadow-xl: 0 8px 16px -4px rgb(0 0 0 / 0.08), 0 4px 6px -4px rgb(0 0 0 / 0.04);
|
|
28
|
+
|
|
29
|
+
--text-xs: 0.6875rem;
|
|
30
|
+
--text-sm: 0.8125rem;
|
|
31
|
+
--text-base: 0.9375rem;
|
|
32
|
+
--text-lg: 1.0625rem;
|
|
33
|
+
--text-xl: 1.1875rem;
|
|
34
|
+
--text-2xl: 1.375rem;
|
|
35
|
+
--text-3xl: 1.6875rem;
|
|
36
|
+
--text-4xl: 2rem;
|
|
37
|
+
|
|
38
|
+
--leading-tight: 1.2;
|
|
39
|
+
--leading-normal: 1.45;
|
|
40
|
+
--leading-relaxed: 1.55;
|
|
41
|
+
|
|
42
|
+
--tracking-tight: -0.015em;
|
|
43
|
+
--tracking-normal: 0;
|
|
44
|
+
--tracking-wide: 0.02em;
|
|
45
|
+
|
|
46
|
+
--font-weight-normal: 400;
|
|
47
|
+
--font-weight-medium: 500;
|
|
48
|
+
--font-weight-semibold: 600;
|
|
49
|
+
--font-weight-bold: 700;
|
|
50
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* MARS Meta-Theme: Minimal
|
|
2
|
+
* Layer 2 — structural overrides. Does NOT touch --color-* or --brand-*.
|
|
3
|
+
* Very small radii, no/minimal shadows, tighter spacing, reduced typography scale. */
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--radius-sm: 0.125rem;
|
|
7
|
+
--radius-md: 0.1875rem;
|
|
8
|
+
--radius-lg: 0.25rem;
|
|
9
|
+
--radius-xl: 0.375rem;
|
|
10
|
+
--radius-2xl: 0.5rem;
|
|
11
|
+
|
|
12
|
+
--space-1: 0.1875rem;
|
|
13
|
+
--space-2: 0.375rem;
|
|
14
|
+
--space-3: 0.5625rem;
|
|
15
|
+
--space-4: 0.75rem;
|
|
16
|
+
--space-5: 1rem;
|
|
17
|
+
--space-6: 1.25rem;
|
|
18
|
+
--space-8: 1.75rem;
|
|
19
|
+
--space-10: 2.25rem;
|
|
20
|
+
--space-12: 2.75rem;
|
|
21
|
+
--space-16: 3.5rem;
|
|
22
|
+
|
|
23
|
+
--shadow-xs: none;
|
|
24
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.04);
|
|
25
|
+
--shadow-md: 0 2px 4px -1px rgb(0 0 0 / 0.06);
|
|
26
|
+
--shadow-lg: 0 4px 8px -2px rgb(0 0 0 / 0.06);
|
|
27
|
+
--shadow-xl: 0 8px 16px -4px rgb(0 0 0 / 0.06);
|
|
28
|
+
|
|
29
|
+
--text-xs: 0.6875rem;
|
|
30
|
+
--text-sm: 0.8125rem;
|
|
31
|
+
--text-base: 0.9375rem;
|
|
32
|
+
--text-lg: 1.0625rem;
|
|
33
|
+
--text-xl: 1.1875rem;
|
|
34
|
+
--text-2xl: 1.375rem;
|
|
35
|
+
--text-3xl: 1.6875rem;
|
|
36
|
+
--text-4xl: 2rem;
|
|
37
|
+
|
|
38
|
+
--leading-tight: 1.3;
|
|
39
|
+
--leading-normal: 1.5;
|
|
40
|
+
--leading-relaxed: 1.6;
|
|
41
|
+
|
|
42
|
+
--tracking-tight: -0.02em;
|
|
43
|
+
--tracking-normal: 0;
|
|
44
|
+
--tracking-wide: 0.015em;
|
|
45
|
+
|
|
46
|
+
--font-weight-normal: 400;
|
|
47
|
+
--font-weight-medium: 450;
|
|
48
|
+
--font-weight-semibold: 550;
|
|
49
|
+
--font-weight-bold: 650;
|
|
50
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* MARS Meta-Theme: Modern SaaS (baseline)
|
|
2
|
+
* Layer 2 — structural overrides. Does NOT touch --color-* or --brand-*.
|
|
3
|
+
* Slightly rounded corners, medium shadows, balanced spacing, standard typography. */
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--radius-sm: 0.25rem;
|
|
7
|
+
--radius-md: 0.375rem;
|
|
8
|
+
--radius-lg: 0.5rem;
|
|
9
|
+
--radius-xl: 0.75rem;
|
|
10
|
+
--radius-2xl: 1rem;
|
|
11
|
+
|
|
12
|
+
--space-1: 0.25rem;
|
|
13
|
+
--space-2: 0.5rem;
|
|
14
|
+
--space-3: 0.75rem;
|
|
15
|
+
--space-4: 1rem;
|
|
16
|
+
--space-5: 1.25rem;
|
|
17
|
+
--space-6: 1.5rem;
|
|
18
|
+
--space-8: 2rem;
|
|
19
|
+
--space-10: 2.5rem;
|
|
20
|
+
--space-12: 3rem;
|
|
21
|
+
--space-16: 4rem;
|
|
22
|
+
|
|
23
|
+
--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
24
|
+
--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
|
25
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
26
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
27
|
+
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
28
|
+
|
|
29
|
+
--text-xs: 0.75rem;
|
|
30
|
+
--text-sm: 0.875rem;
|
|
31
|
+
--text-base: 1rem;
|
|
32
|
+
--text-lg: 1.125rem;
|
|
33
|
+
--text-xl: 1.25rem;
|
|
34
|
+
--text-2xl: 1.5rem;
|
|
35
|
+
--text-3xl: 1.875rem;
|
|
36
|
+
--text-4xl: 2.25rem;
|
|
37
|
+
|
|
38
|
+
--leading-tight: 1.25;
|
|
39
|
+
--leading-normal: 1.5;
|
|
40
|
+
--leading-relaxed: 1.625;
|
|
41
|
+
|
|
42
|
+
--tracking-tight: -0.025em;
|
|
43
|
+
--tracking-normal: 0;
|
|
44
|
+
--tracking-wide: 0.025em;
|
|
45
|
+
|
|
46
|
+
--font-weight-normal: 400;
|
|
47
|
+
--font-weight-medium: 500;
|
|
48
|
+
--font-weight-semibold: 600;
|
|
49
|
+
--font-weight-bold: 700;
|
|
50
|
+
}
|