soltana-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.js +7 -0
- package/dist/config/register.d.ts +27 -0
- package/dist/config/stylesheet.d.ts +13 -0
- package/dist/config/types.d.ts +177 -0
- package/dist/config/types.js +7 -0
- package/dist/config/validation.d.ts +29 -0
- package/dist/config/validation.js +59 -0
- package/dist/enhancers/accordion.d.ts +19 -0
- package/dist/enhancers/carousel.d.ts +21 -0
- package/dist/enhancers/collapsible.d.ts +14 -0
- package/dist/enhancers/color-picker.d.ts +20 -0
- package/dist/enhancers/combobox.d.ts +17 -0
- package/dist/enhancers/context-menu.d.ts +19 -0
- package/dist/enhancers/date-picker.d.ts +8 -0
- package/dist/enhancers/drawer.d.ts +11 -0
- package/dist/enhancers/dropdown.d.ts +17 -0
- package/dist/enhancers/hover-card.d.ts +15 -0
- package/dist/enhancers/index.d.ts +42 -0
- package/dist/enhancers/modal.d.ts +16 -0
- package/dist/enhancers/scroll-area.d.ts +14 -0
- package/dist/enhancers/tabs.d.ts +26 -0
- package/dist/enhancers/test-helpers.d.ts +20 -0
- package/dist/enhancers/test-utils.d.ts +10 -0
- package/dist/enhancers/toast.d.ts +24 -0
- package/dist/enhancers/tooltip.d.ts +15 -0
- package/dist/enhancers/tree.d.ts +24 -0
- package/dist/enhancers/utils/click-away.d.ts +7 -0
- package/dist/enhancers/utils/create-overlay-enhancer.d.ts +14 -0
- package/dist/enhancers/utils/focus-trap.d.ts +9 -0
- package/dist/enhancers/utils/generate-id.d.ts +6 -0
- package/dist/enhancers/utils/keyboard-nav.d.ts +21 -0
- package/dist/enhancers/utils/position.d.ts +30 -0
- package/dist/fonts/index.d.ts +20 -0
- package/dist/index.d.ts +9 -0
- package/dist/init.d.ts +16 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/plugins/index.js +1 -0
- package/dist/plugins/postcss-soltana-treeshake.d.ts +10 -0
- package/dist/plugins/postcss-soltana-treeshake.js +149 -0
- package/dist/plugins/types.d.ts +9 -0
- package/dist/plugins/types.js +4 -0
- package/dist/soltana-ui.css +1 -0
- package/dist/soltana-ui.js +1702 -0
- package/dist/soltana-ui.umd.cjs +1 -0
- package/package.json +90 -0
- package/src/styles/_variables.scss +348 -0
- package/src/styles/base/_accessibility.scss +146 -0
- package/src/styles/base/_index.scss +12 -0
- package/src/styles/base/_register.scss +84 -0
- package/src/styles/base/_relief-system.scss +53 -0
- package/src/styles/base/_scrollbar.scss +40 -0
- package/src/styles/base/_transitions.scss +75 -0
- package/src/styles/base/_typography.scss +442 -0
- package/src/styles/components/_alert-dialogs.scss +75 -0
- package/src/styles/components/_badges.scss +215 -0
- package/src/styles/components/_buttons.scss +293 -0
- package/src/styles/components/_callouts.scss +99 -0
- package/src/styles/components/_cards.scss +97 -0
- package/src/styles/components/_carousels.scss +108 -0
- package/src/styles/components/_closes.scss +63 -0
- package/src/styles/components/_code.scss +75 -0
- package/src/styles/components/_collapsibles.scss +61 -0
- package/src/styles/components/_color-pickers.scss +211 -0
- package/src/styles/components/_comboboxes.scss +88 -0
- package/src/styles/components/_context-menus.scss +82 -0
- package/src/styles/components/_date-pickers.scss +165 -0
- package/src/styles/components/_feedback.scss +354 -0
- package/src/styles/components/_figures.scss +52 -0
- package/src/styles/components/_heros.scss +83 -0
- package/src/styles/components/_hover-cards.scss +55 -0
- package/src/styles/components/_images.scss +71 -0
- package/src/styles/components/_index.scss +41 -0
- package/src/styles/components/_indicators.scss +403 -0
- package/src/styles/components/_inputs.scss +409 -0
- package/src/styles/components/_layouts.scss +139 -0
- package/src/styles/components/_lists.scss +135 -0
- package/src/styles/components/_menus.scss +195 -0
- package/src/styles/components/_navigation.scss +325 -0
- package/src/styles/components/_overlays.scss +233 -0
- package/src/styles/components/_scroll-areas.scss +53 -0
- package/src/styles/components/_segmented-controls.scss +75 -0
- package/src/styles/components/_tables.scss +137 -0
- package/src/styles/components/_toasts.scss +111 -0
- package/src/styles/components/_toggles.scss +57 -0
- package/src/styles/components/_trees.scss +123 -0
- package/src/styles/decorative/_classical.scss +196 -0
- package/src/styles/decorative/_index.scss +7 -0
- package/src/styles/finishes/_index.scss +55 -0
- package/src/styles/index.scss +30 -0
- package/src/styles/reliefs/_index.scss +66 -0
- package/src/styles/reliefs/_neumorphic-tables.scss +92 -0
- package/src/styles/themes/_dark.scss +130 -0
- package/src/styles/themes/_index.scss +3 -0
- package/src/styles/themes/_light.scss +122 -0
- package/src/styles/themes/_sepia.scss +121 -0
- package/src/styles/utilities/_index.scss +13 -0
- package/src/styles/utilities/_layout.scss +100 -0
- package/src/styles/utilities/_mixins.scss +410 -0
- package/src/styles/utilities/_responsive.scss +46 -0
- package/src/styles/utilities/_sizing.scss +62 -0
- package/src/styles/utilities/_spacing.scss +12 -0
- package/src/styles/utilities/_visual.scss +436 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Dark Theme
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Deep navy surfaces with warm ivory text and gold accents.
|
|
5
|
+
// Default theme — applied to :root by initSoltana().
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
@use '../variables' as *;
|
|
9
|
+
@use '../base/register' as *;
|
|
10
|
+
|
|
11
|
+
@include register-theme('dark', $include-root: true) {
|
|
12
|
+
color-scheme: dark;
|
|
13
|
+
|
|
14
|
+
// =========================================================================
|
|
15
|
+
// SEMANTIC TOKENS
|
|
16
|
+
// =========================================================================
|
|
17
|
+
|
|
18
|
+
// Surface colors — deep midnight navy (7→13→18→26→34% L)
|
|
19
|
+
--surface-bg: #08091a;
|
|
20
|
+
--surface-1: #101330;
|
|
21
|
+
--surface-2: #1a1e48;
|
|
22
|
+
--surface-3: #262d5c;
|
|
23
|
+
--surface-4: #333c72;
|
|
24
|
+
|
|
25
|
+
// Text colors — warm ivory hierarchy
|
|
26
|
+
--text-primary: #f5f0e6;
|
|
27
|
+
--text-secondary: #c5b99b;
|
|
28
|
+
--text-tertiary: #978b77;
|
|
29
|
+
--text-muted: #897d69;
|
|
30
|
+
--text-inverse: #08091a;
|
|
31
|
+
|
|
32
|
+
// Border colors — neutral alpha for seamless neumorphic blending
|
|
33
|
+
--border-default: rgb(255 255 255 / 6%);
|
|
34
|
+
--border-subtle: rgb(255 255 255 / 3%);
|
|
35
|
+
--border-strong: rgb(255 255 255 / 10%);
|
|
36
|
+
|
|
37
|
+
// Accent colors — seed tokens (user-overridable)
|
|
38
|
+
--accent-primary: #d4a843;
|
|
39
|
+
--accent-primary-hover: color-mix(in oklch, var(--accent-primary), white 15%);
|
|
40
|
+
--accent-primary-active: color-mix(in oklch, var(--accent-primary), black 25%);
|
|
41
|
+
--accent-secondary: #a855f7;
|
|
42
|
+
--accent-secondary-hover: color-mix(in oklch, var(--accent-secondary), white 15%);
|
|
43
|
+
--accent-secondary-active: color-mix(in oklch, var(--accent-secondary), black 25%);
|
|
44
|
+
|
|
45
|
+
// Decorative accent (ornaments, highlights)
|
|
46
|
+
--accent-decorative: #d4a843;
|
|
47
|
+
--accent-decorative-hover: color-mix(in oklch, var(--accent-decorative), white 15%);
|
|
48
|
+
--accent-decorative-subtle: color-mix(in srgb, var(--accent-decorative) 10%, transparent);
|
|
49
|
+
--border-decorative: color-mix(in srgb, var(--accent-decorative) 20%, transparent);
|
|
50
|
+
--border-decorative-strong: color-mix(in srgb, var(--accent-decorative) 35%, transparent);
|
|
51
|
+
|
|
52
|
+
// Semantic colors — jewel-toned
|
|
53
|
+
--color-success: #10b981;
|
|
54
|
+
--color-success-subtle: rgb(16 185 129 / 12%);
|
|
55
|
+
--color-success-text: #34d399;
|
|
56
|
+
--color-warning: #fcd34d;
|
|
57
|
+
--color-warning-subtle: rgb(252 211 77 / 12%);
|
|
58
|
+
--color-warning-text: #fde68a;
|
|
59
|
+
--color-error: #ef4444;
|
|
60
|
+
--color-error-subtle: rgb(239 68 68 / 12%);
|
|
61
|
+
--color-error-text: #f87171;
|
|
62
|
+
--color-info: #3b82f6;
|
|
63
|
+
--color-info-subtle: rgb(59 130 246 / 12%);
|
|
64
|
+
--color-info-text: #60a5fa;
|
|
65
|
+
|
|
66
|
+
// Interactive states — derived from accent-primary
|
|
67
|
+
--state-hover: color-mix(in srgb, var(--accent-primary) 8%, transparent);
|
|
68
|
+
--state-active: color-mix(in srgb, var(--accent-primary) 14%, transparent);
|
|
69
|
+
--state-focus-ring: color-mix(in srgb, var(--accent-primary) 40%, transparent);
|
|
70
|
+
--state-disabled-bg: #1a1e48;
|
|
71
|
+
--state-disabled-text: #897d69;
|
|
72
|
+
|
|
73
|
+
// =========================================================================
|
|
74
|
+
// CHANNEL TOKENS — consumed by _relief-system.scss to derive primitives
|
|
75
|
+
// These are a valid low-level API: components and reliefs use
|
|
76
|
+
// rgb(var(--shadow-color) / <alpha>) to build contextual shadows.
|
|
77
|
+
// =========================================================================
|
|
78
|
+
|
|
79
|
+
--shadow-color: 0 0 0;
|
|
80
|
+
--highlight-color: 255 255 255;
|
|
81
|
+
|
|
82
|
+
// --accent-glow is a JS-only bridge token consumed by runtime registration;
|
|
83
|
+
// not referenced in SCSS.
|
|
84
|
+
--accent-glow: color-mix(in srgb, var(--accent-primary) 15%, transparent);
|
|
85
|
+
--channel-sheen-color: 255 255 255;
|
|
86
|
+
--channel-tint-color: 212 168 67;
|
|
87
|
+
|
|
88
|
+
// =========================================================================
|
|
89
|
+
// BRIDGE TOKENS — per-theme overrides
|
|
90
|
+
// Shared defaults in _relief-system.scss; tokens like --mesh-color-* use
|
|
91
|
+
// var() indirection in :root and resolve correctly for all themes without
|
|
92
|
+
// per-theme declarations. Explicit declarations here for parity with
|
|
93
|
+
// light/sepia.
|
|
94
|
+
// =========================================================================
|
|
95
|
+
|
|
96
|
+
--glass-opacity: 0.5;
|
|
97
|
+
--mesh-color-1: var(--accent-primary);
|
|
98
|
+
--mesh-color-2: var(--accent-secondary);
|
|
99
|
+
--mesh-color-3: var(--accent-decorative);
|
|
100
|
+
--surface-deep: var(--surface-2);
|
|
101
|
+
--neu-shadow: rgb(var(--shadow-color) / 65%);
|
|
102
|
+
--neu-light: rgb(var(--highlight-color) / 12%);
|
|
103
|
+
|
|
104
|
+
// =========================================================================
|
|
105
|
+
// COMPONENT TOKENS
|
|
106
|
+
// =========================================================================
|
|
107
|
+
|
|
108
|
+
@include component-tokens(
|
|
109
|
+
$input-bg: rgb(255 255 255 / 4%),
|
|
110
|
+
$card-bg: rgb(16 19 48 / 60%),
|
|
111
|
+
$tooltip-bg: #08091a,
|
|
112
|
+
$tooltip-text: #f5f0e6,
|
|
113
|
+
$code-bg: #262d5c,
|
|
114
|
+
$input-border: rgb(255 255 255 / 8%),
|
|
115
|
+
$input-placeholder: #897d69,
|
|
116
|
+
$card-border: rgb(255 255 255 / 6%),
|
|
117
|
+
$scrollbar-thumb: rgb(255 255 255 / 12%),
|
|
118
|
+
$scrollbar-track: rgb(255 255 255 / 3%),
|
|
119
|
+
$toast-bg: #101330,
|
|
120
|
+
$toast-text: #f5f0e6,
|
|
121
|
+
$drawer-bg: #101330,
|
|
122
|
+
$popover-bg: #101330,
|
|
123
|
+
$popover-border: rgb(255 255 255 / 8%),
|
|
124
|
+
$kbd-bg: #1a1e48,
|
|
125
|
+
$kbd-border: rgb(255 255 255 / 12%)
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
// Icon data URIs — colors chosen for contrast against accent-primary bg
|
|
129
|
+
--icon-select-chevron: #{icon-chevron(#c5b99b)};
|
|
130
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Light Theme
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Cool white surfaces with blue-gray undertones, slate accents, and
|
|
5
|
+
// muted gold decorative highlights.
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
@use '../variables' as *;
|
|
9
|
+
@use '../base/register' as *;
|
|
10
|
+
|
|
11
|
+
@include register-theme('light') {
|
|
12
|
+
color-scheme: light;
|
|
13
|
+
|
|
14
|
+
// =========================================================================
|
|
15
|
+
// SEMANTIC TOKENS
|
|
16
|
+
// =========================================================================
|
|
17
|
+
|
|
18
|
+
// Surface colors — cool marble with subtle blue-gray undertones
|
|
19
|
+
--surface-bg: #f6f7fa;
|
|
20
|
+
--surface-1: #fff;
|
|
21
|
+
--surface-2: #eef0f5;
|
|
22
|
+
--surface-3: #e2e5ed;
|
|
23
|
+
--surface-4: #d5d9e4;
|
|
24
|
+
|
|
25
|
+
// Text colors — cool slate hierarchy
|
|
26
|
+
--text-primary: #1e2128;
|
|
27
|
+
--text-secondary: #3a3f4c;
|
|
28
|
+
--text-tertiary: #5c6375;
|
|
29
|
+
--text-muted: #6b7280;
|
|
30
|
+
--text-inverse: #eef0f5;
|
|
31
|
+
|
|
32
|
+
// Border colors — cool silver tints
|
|
33
|
+
--border-default: rgb(85 97 120 / 12%);
|
|
34
|
+
--border-subtle: rgb(85 97 120 / 7%);
|
|
35
|
+
--border-strong: rgb(85 97 120 / 20%);
|
|
36
|
+
|
|
37
|
+
// Accent colors — seed tokens (user-overridable)
|
|
38
|
+
--accent-primary: #576378;
|
|
39
|
+
--accent-primary-hover: color-mix(in oklch, var(--accent-primary), black 15%);
|
|
40
|
+
--accent-primary-active: color-mix(in oklch, var(--accent-primary), black 25%);
|
|
41
|
+
--accent-secondary: #6b21a8;
|
|
42
|
+
--accent-secondary-hover: color-mix(in oklch, var(--accent-secondary), black 15%);
|
|
43
|
+
--accent-secondary-active: color-mix(in oklch, var(--accent-secondary), black 25%);
|
|
44
|
+
|
|
45
|
+
// Decorative accent (ornaments, highlights)
|
|
46
|
+
--accent-decorative: #755a00;
|
|
47
|
+
--accent-decorative-hover: color-mix(in oklch, var(--accent-decorative), black 15%);
|
|
48
|
+
--accent-decorative-subtle: color-mix(in srgb, var(--accent-decorative) 12%, transparent);
|
|
49
|
+
--border-decorative: color-mix(in srgb, var(--accent-decorative) 25%, transparent);
|
|
50
|
+
--border-decorative-strong: color-mix(in srgb, var(--accent-decorative) 40%, transparent);
|
|
51
|
+
|
|
52
|
+
// Semantic colors — high contrast for marble background
|
|
53
|
+
--color-success: #0d6b4e;
|
|
54
|
+
--color-success-subtle: rgb(13 107 78 / 8%);
|
|
55
|
+
--color-success-text: #065f46;
|
|
56
|
+
--color-warning: #855c0a;
|
|
57
|
+
--color-warning-subtle: rgb(133 92 10 / 8%);
|
|
58
|
+
--color-warning-text: #6b4a08;
|
|
59
|
+
--color-error: #991b1b;
|
|
60
|
+
--color-error-subtle: rgb(153 27 27 / 8%);
|
|
61
|
+
--color-error-text: #7f1d1d;
|
|
62
|
+
--color-info: #1e40af;
|
|
63
|
+
--color-info-subtle: rgb(30 64 175 / 8%);
|
|
64
|
+
--color-info-text: #1e3a8a;
|
|
65
|
+
|
|
66
|
+
// Interactive states — derived from accent-primary
|
|
67
|
+
--state-hover: color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
68
|
+
--state-active: color-mix(in srgb, var(--accent-primary) 12%, transparent);
|
|
69
|
+
--state-focus-ring: color-mix(in srgb, var(--accent-primary) 35%, transparent);
|
|
70
|
+
--state-disabled-bg: #e2e5ed;
|
|
71
|
+
--state-disabled-text: #6b7280;
|
|
72
|
+
|
|
73
|
+
// =========================================================================
|
|
74
|
+
// CHANNEL TOKENS — consumed by _relief-system.scss to derive primitives
|
|
75
|
+
// =========================================================================
|
|
76
|
+
|
|
77
|
+
--shadow-color: 0 0 0;
|
|
78
|
+
--highlight-color: 255 255 255;
|
|
79
|
+
--accent-glow: color-mix(in srgb, var(--accent-primary) 10%, transparent);
|
|
80
|
+
--channel-sheen-color: 0 0 0;
|
|
81
|
+
--channel-tint-color: 87 99 120;
|
|
82
|
+
|
|
83
|
+
// =========================================================================
|
|
84
|
+
// BRIDGE TOKENS — per-theme overrides
|
|
85
|
+
// Shared defaults in _relief-system.scss
|
|
86
|
+
// =========================================================================
|
|
87
|
+
|
|
88
|
+
--glass-opacity: 0.35;
|
|
89
|
+
--mesh-color-1: var(--accent-secondary);
|
|
90
|
+
--mesh-color-2: var(--color-info);
|
|
91
|
+
--mesh-color-3: var(--color-success);
|
|
92
|
+
--surface-deep: var(--surface-3);
|
|
93
|
+
--neu-shadow: rgb(var(--shadow-color) / 35%);
|
|
94
|
+
--neu-light: rgb(var(--highlight-color) / 88%);
|
|
95
|
+
|
|
96
|
+
// =========================================================================
|
|
97
|
+
// COMPONENT TOKENS
|
|
98
|
+
// =========================================================================
|
|
99
|
+
|
|
100
|
+
@include component-tokens(
|
|
101
|
+
$input-bg: #fff,
|
|
102
|
+
$card-bg: rgb(255 255 255 / 78%),
|
|
103
|
+
$tooltip-bg: #1e2128,
|
|
104
|
+
$tooltip-text: #eef0f5,
|
|
105
|
+
$code-bg: #eef0f5,
|
|
106
|
+
$input-border: rgb(85 97 120 / 14%),
|
|
107
|
+
$input-placeholder: #6b7280,
|
|
108
|
+
$card-border: rgb(85 97 120 / 10%),
|
|
109
|
+
$scrollbar-thumb: rgb(85 97 120 / 15%),
|
|
110
|
+
$scrollbar-track: rgb(85 97 120 / 3%),
|
|
111
|
+
$toast-bg: #fff,
|
|
112
|
+
$toast-text: #1e2128,
|
|
113
|
+
$drawer-bg: #fff,
|
|
114
|
+
$popover-bg: #fff,
|
|
115
|
+
$popover-border: rgb(85 97 120 / 14%),
|
|
116
|
+
$kbd-bg: #eef0f5,
|
|
117
|
+
$kbd-border: rgb(85 97 120 / 20%)
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
// Icon data URIs — colors chosen for contrast against accent-primary bg
|
|
121
|
+
--icon-select-chevron: #{icon-chevron(#3a3f4c)};
|
|
122
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Sepia Theme
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Warm champagne surfaces with espresso text and brown accents.
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
|
|
7
|
+
@use '../variables' as *;
|
|
8
|
+
@use '../base/register' as *;
|
|
9
|
+
|
|
10
|
+
@include register-theme('sepia') {
|
|
11
|
+
color-scheme: light;
|
|
12
|
+
|
|
13
|
+
// =========================================================================
|
|
14
|
+
// SEMANTIC TOKENS
|
|
15
|
+
// =========================================================================
|
|
16
|
+
|
|
17
|
+
// Surface colors — deeper champagne with amber undertones
|
|
18
|
+
--surface-bg: #e8dcc0;
|
|
19
|
+
--surface-1: #f2e8d2;
|
|
20
|
+
--surface-2: #ddd0b0;
|
|
21
|
+
--surface-3: #d0c098;
|
|
22
|
+
--surface-4: #c4b088;
|
|
23
|
+
|
|
24
|
+
// Text colors — rich espresso hierarchy (higher contrast than light)
|
|
25
|
+
--text-primary: #1c1408;
|
|
26
|
+
--text-secondary: #3a2c12;
|
|
27
|
+
--text-tertiary: #5a4b30;
|
|
28
|
+
--text-muted: #6f6045;
|
|
29
|
+
--text-inverse: #f2e8d2;
|
|
30
|
+
|
|
31
|
+
// Border colors — warm bronze tints
|
|
32
|
+
--border-default: rgb(94 63 27 / 18%);
|
|
33
|
+
--border-subtle: rgb(94 63 27 / 10%);
|
|
34
|
+
--border-strong: rgb(94 63 27 / 28%);
|
|
35
|
+
|
|
36
|
+
// Accent colors — seed tokens (user-overridable)
|
|
37
|
+
--accent-primary: #6a4518;
|
|
38
|
+
--accent-primary-hover: color-mix(in oklch, var(--accent-primary), black 15%);
|
|
39
|
+
--accent-primary-active: color-mix(in oklch, var(--accent-primary), black 25%);
|
|
40
|
+
--accent-secondary: #6b21a8;
|
|
41
|
+
--accent-secondary-hover: color-mix(in oklch, var(--accent-secondary), black 15%);
|
|
42
|
+
--accent-secondary-active: color-mix(in oklch, var(--accent-secondary), black 25%);
|
|
43
|
+
|
|
44
|
+
// Decorative accent (ornaments, highlights)
|
|
45
|
+
--accent-decorative: #654a00;
|
|
46
|
+
--accent-decorative-hover: color-mix(in oklch, var(--accent-decorative), black 15%);
|
|
47
|
+
--accent-decorative-subtle: color-mix(in srgb, var(--accent-decorative) 10%, transparent);
|
|
48
|
+
--border-decorative: color-mix(in srgb, var(--accent-decorative) 22%, transparent);
|
|
49
|
+
--border-decorative-strong: color-mix(in srgb, var(--accent-decorative) 38%, transparent);
|
|
50
|
+
|
|
51
|
+
// Semantic colors — warm-shifted, distinct from light
|
|
52
|
+
--color-success: #1a7854;
|
|
53
|
+
--color-success-subtle: rgb(26 120 84 / 12%);
|
|
54
|
+
--color-success-text: #0e5538;
|
|
55
|
+
--color-warning: #8b5e14;
|
|
56
|
+
--color-warning-subtle: rgb(139 94 20 / 12%);
|
|
57
|
+
--color-warning-text: #744d10;
|
|
58
|
+
--color-error: #a02020;
|
|
59
|
+
--color-error-subtle: rgb(160 32 32 / 10%);
|
|
60
|
+
--color-error-text: #882020;
|
|
61
|
+
--color-info: #2a5098;
|
|
62
|
+
--color-info-subtle: rgb(42 80 152 / 10%);
|
|
63
|
+
--color-info-text: #1e3a8a;
|
|
64
|
+
|
|
65
|
+
// Interactive states — derived from accent-primary
|
|
66
|
+
--state-hover: color-mix(in srgb, var(--accent-primary) 8%, transparent);
|
|
67
|
+
--state-active: color-mix(in srgb, var(--accent-primary) 14%, transparent);
|
|
68
|
+
--state-focus-ring: color-mix(in srgb, var(--accent-primary) 38%, transparent);
|
|
69
|
+
--state-disabled-bg: #d0c098;
|
|
70
|
+
--state-disabled-text: #6f6045;
|
|
71
|
+
|
|
72
|
+
// =========================================================================
|
|
73
|
+
// CHANNEL TOKENS — consumed by _relief-system.scss to derive primitives
|
|
74
|
+
// =========================================================================
|
|
75
|
+
|
|
76
|
+
--shadow-color: 0 0 0;
|
|
77
|
+
--highlight-color: 242 232 210;
|
|
78
|
+
--accent-glow: color-mix(in srgb, var(--accent-primary) 12%, transparent);
|
|
79
|
+
--channel-sheen-color: 0 0 0;
|
|
80
|
+
--channel-tint-color: 106 69 24;
|
|
81
|
+
|
|
82
|
+
// =========================================================================
|
|
83
|
+
// BRIDGE TOKENS — per-theme overrides
|
|
84
|
+
// Shared defaults in _relief-system.scss
|
|
85
|
+
// =========================================================================
|
|
86
|
+
|
|
87
|
+
--glass-opacity: 0.35;
|
|
88
|
+
--mesh-color-1: var(--color-error);
|
|
89
|
+
--mesh-color-2: var(--color-info);
|
|
90
|
+
--mesh-color-3: color-mix(in oklch, var(--color-error), var(--color-info));
|
|
91
|
+
--surface-deep: var(--surface-3);
|
|
92
|
+
--neu-shadow: rgb(var(--shadow-color) / 45%);
|
|
93
|
+
--neu-light: rgb(var(--highlight-color) / 82%);
|
|
94
|
+
|
|
95
|
+
// =========================================================================
|
|
96
|
+
// COMPONENT TOKENS
|
|
97
|
+
// =========================================================================
|
|
98
|
+
|
|
99
|
+
@include component-tokens(
|
|
100
|
+
$input-bg: #f2e8d2,
|
|
101
|
+
$card-bg: rgb(242 232 210 / 68%),
|
|
102
|
+
$tooltip-bg: #1c1408,
|
|
103
|
+
$tooltip-text: #f2e8d2,
|
|
104
|
+
$code-bg: #ddd0b0,
|
|
105
|
+
$input-border: rgb(94 63 27 / 16%),
|
|
106
|
+
$input-placeholder: #6f6045,
|
|
107
|
+
$card-border: rgb(94 63 27 / 12%),
|
|
108
|
+
$scrollbar-thumb: rgb(94 63 27 / 22%),
|
|
109
|
+
$scrollbar-track: rgb(94 63 27 / 5%),
|
|
110
|
+
$toast-bg: #f2e8d2,
|
|
111
|
+
$toast-text: #1c1408,
|
|
112
|
+
$drawer-bg: #f2e8d2,
|
|
113
|
+
$popover-bg: #f2e8d2,
|
|
114
|
+
$popover-border: rgb(94 63 27 / 18%),
|
|
115
|
+
$kbd-bg: #ddd0b0,
|
|
116
|
+
$kbd-border: rgb(94 63 27 / 28%)
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
// Icon data URIs — colors chosen for contrast against accent-primary bg
|
|
120
|
+
--icon-select-chevron: #{icon-chevron(#3a2c12)};
|
|
121
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Utilities Index
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Optional general-purpose utility classes (layout, spacing, sizing, visual).
|
|
5
|
+
// Not part of the 3-tier configuration model. Consumers using the SCSS source
|
|
6
|
+
// can exclude this module by omitting `@use 'utilities'` from their entry point.
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
@forward 'layout';
|
|
10
|
+
@forward 'spacing';
|
|
11
|
+
@forward 'sizing';
|
|
12
|
+
@forward 'visual';
|
|
13
|
+
@forward 'responsive';
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Layout Utilities
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Display, flexbox, grid, positioning, and overflow utilities.
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
|
|
7
|
+
@use '../variables' as *;
|
|
8
|
+
@use 'mixins' as gen;
|
|
9
|
+
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// DISPLAY
|
|
12
|
+
// ============================================================================
|
|
13
|
+
|
|
14
|
+
@include gen.generate-display;
|
|
15
|
+
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// FLEXBOX
|
|
18
|
+
// ============================================================================
|
|
19
|
+
|
|
20
|
+
@include gen.generate-flex-direction;
|
|
21
|
+
@include gen.generate-flex-wrap;
|
|
22
|
+
@include gen.generate-flex-sizing;
|
|
23
|
+
@include gen.generate-alignment;
|
|
24
|
+
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// GRID
|
|
27
|
+
// ============================================================================
|
|
28
|
+
|
|
29
|
+
@include gen.generate-grid;
|
|
30
|
+
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// POSITIONING
|
|
33
|
+
// ============================================================================
|
|
34
|
+
|
|
35
|
+
@include gen.generate-position;
|
|
36
|
+
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// TEXT ALIGN
|
|
39
|
+
// ============================================================================
|
|
40
|
+
|
|
41
|
+
@include gen.generate-text-align;
|
|
42
|
+
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// OVERFLOW
|
|
45
|
+
// ============================================================================
|
|
46
|
+
|
|
47
|
+
@include gen.generate-overflow;
|
|
48
|
+
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// ASPECT RATIO
|
|
51
|
+
// ============================================================================
|
|
52
|
+
|
|
53
|
+
$aspect-ratios: (
|
|
54
|
+
auto: auto,
|
|
55
|
+
square: '1 / 1',
|
|
56
|
+
video: '16 / 9',
|
|
57
|
+
photo: '4 / 3',
|
|
58
|
+
portrait: '3 / 4',
|
|
59
|
+
wide: '21 / 9',
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
@each $name, $val in $aspect-ratios {
|
|
63
|
+
.aspect-#{$name} {
|
|
64
|
+
aspect-ratio: #{$val};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// Z-INDEX
|
|
70
|
+
// ============================================================================
|
|
71
|
+
|
|
72
|
+
@each $key, $val in $z-indices {
|
|
73
|
+
.z-#{$key} {
|
|
74
|
+
z-index: $val;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// ORDER
|
|
80
|
+
// ============================================================================
|
|
81
|
+
|
|
82
|
+
@include gen.generate-order;
|
|
83
|
+
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// CONTAINER
|
|
86
|
+
// ============================================================================
|
|
87
|
+
|
|
88
|
+
.container {
|
|
89
|
+
width: 100%;
|
|
90
|
+
margin-left: auto;
|
|
91
|
+
margin-right: auto;
|
|
92
|
+
padding-left: 1rem;
|
|
93
|
+
padding-right: 1rem;
|
|
94
|
+
|
|
95
|
+
@each $key, $val in $breakpoints {
|
|
96
|
+
@media (min-width: #{$val}) {
|
|
97
|
+
max-width: $val;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|