@webority/theme 0.0.9
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/LICENSE +5 -0
- package/README.md +33 -0
- package/dist/webority-theme.css +5 -0
- package/package.json +36 -0
- package/scss/_components.scss +720 -0
- package/scss/_tokens.scss +159 -0
- package/scss/_variables.scss +199 -0
- package/scss/_wui-aliases.scss +128 -0
- package/scss/_wui-components.scss +3296 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// =====================================================================
|
|
2
|
+
// Lumex — Custom CSS variables.
|
|
3
|
+
// Things Bootstrap doesn't natively have a slot for: extended brand
|
|
4
|
+
// ramps, gradient definitions, easing curves, etc. Imported AFTER
|
|
5
|
+
// `bootstrap/scss/bootstrap` so we don't clobber its computed values.
|
|
6
|
+
// =====================================================================
|
|
7
|
+
|
|
8
|
+
:root {
|
|
9
|
+
// Extended Lumex primary-blue ramp — used for tints, washes, hovers.
|
|
10
|
+
--wui-primary: #2F50E4;
|
|
11
|
+
--wui-primary-hover: #4A66E8;
|
|
12
|
+
--wui-primary-pressed: #2440C4;
|
|
13
|
+
--wui-primary-50: #97A8F2;
|
|
14
|
+
--wui-primary-30: #C1CBF7;
|
|
15
|
+
--wui-primary-20: #D5DCFA;
|
|
16
|
+
--wui-primary-15: #E0E5FB;
|
|
17
|
+
--wui-primary-10: #EAEEFC;
|
|
18
|
+
--wui-primary-5: #F5F6FE;
|
|
19
|
+
|
|
20
|
+
// Foreground ramp (cool blue-grey neutrals) — for text hierarchy
|
|
21
|
+
// beyond Bootstrap's body-color / body-secondary-color.
|
|
22
|
+
--wui-text-heading: #071437;
|
|
23
|
+
--wui-text-1: #252F4A;
|
|
24
|
+
--wui-text-2: #4B5675;
|
|
25
|
+
--wui-text-3: #78829D;
|
|
26
|
+
--wui-text-4: #99A1B7;
|
|
27
|
+
--wui-text-5: #C4CADA;
|
|
28
|
+
|
|
29
|
+
// Surfaces
|
|
30
|
+
--wui-bg-page: #F4F6F8;
|
|
31
|
+
--wui-bg-light: #FFFFFF;
|
|
32
|
+
--wui-bg-elevated: #F9FBFC;
|
|
33
|
+
--wui-bg-muted: #F5F6FA;
|
|
34
|
+
--wui-border-light: #EBEDF3;
|
|
35
|
+
--wui-border-soft: #F4F6F8;
|
|
36
|
+
|
|
37
|
+
// Gradients (hero, CTA)
|
|
38
|
+
--wui-hero-gradient:
|
|
39
|
+
radial-gradient(ellipse 120% 80% at 50% 30%,
|
|
40
|
+
#6E86F0 0%, #2F50E4 35%, #2440C4 75%, #16297A 100%);
|
|
41
|
+
--wui-cta-gradient:
|
|
42
|
+
radial-gradient(ellipse 120% 100% at 50% 50%,
|
|
43
|
+
#1F2F8C 0%, #0E1450 60%, #04082A 100%);
|
|
44
|
+
|
|
45
|
+
// Easing curves — match locked design's CSS / Framer Motion exports
|
|
46
|
+
--wui-ease-out-quart: cubic-bezier(0.22, 1, 0.36, 1);
|
|
47
|
+
--wui-ease-ui: cubic-bezier(0.32, 0.72, 0, 1);
|
|
48
|
+
|
|
49
|
+
// Elevation — exposes the Bootstrap $box-shadow* SCSS vars (set in
|
|
50
|
+
// _lumex-variables.scss) as CSS vars so inline styles / JS / the portal
|
|
51
|
+
// can reach the same values Bootstrap utilities use.
|
|
52
|
+
--wui-shadow-card: #{$box-shadow-sm};
|
|
53
|
+
--wui-shadow-card-lifted: #{$box-shadow};
|
|
54
|
+
--wui-shadow-card-lifted-hover: #{$box-shadow-lg};
|
|
55
|
+
|
|
56
|
+
// ---- Marketing surface ramp -------------------------------------
|
|
57
|
+
// Soft tints + neutral washes used by mega-menu hover, callout cards,
|
|
58
|
+
// and section accents. Distinct from --wui-bg-* (which are the
|
|
59
|
+
// platform/portal palette).
|
|
60
|
+
--wui-surface-soft: #F2EFFE;
|
|
61
|
+
--wui-surface-blue: #ECE4FE;
|
|
62
|
+
--wui-surface-blue-soft: #FCFCFC;
|
|
63
|
+
--wui-surface-mute: #F9FBFC;
|
|
64
|
+
--wui-ink: #000000;
|
|
65
|
+
|
|
66
|
+
// ---- Foreground ramp aliases -----------------------------------
|
|
67
|
+
// Marketing-side parlance — names mirror the standalone design.
|
|
68
|
+
// These point at the same hex values as --wui-text-* (kept as
|
|
69
|
+
// aliases rather than duplicated literals so a re-tune of the text
|
|
70
|
+
// ramp updates both sides at once).
|
|
71
|
+
--wui-fg-2: var(--wui-text-1);
|
|
72
|
+
--wui-fg-3: var(--wui-text-2);
|
|
73
|
+
--wui-fg-4: var(--wui-text-3);
|
|
74
|
+
--wui-fg-5: var(--wui-text-5);
|
|
75
|
+
|
|
76
|
+
// ---- Neutral ramp ----------------------------------------------
|
|
77
|
+
// Used by table emphasis, dividers, and mega-menu hover surfaces.
|
|
78
|
+
--wui-neutral-border-dark: #EBEDF3;
|
|
79
|
+
--wui-neutral-border-light: #F9FBFC;
|
|
80
|
+
--wui-neutral-bg-dark: #F5F6FA;
|
|
81
|
+
--wui-neutral-bg-light: #F9FBFC;
|
|
82
|
+
|
|
83
|
+
// ---- Accent-dark -----------------------------------------------
|
|
84
|
+
// Link hover, focused button, deep-purple CTA underline. Matches
|
|
85
|
+
// $link-hover-color in _lumex-variables.scss but exposed as a CSS
|
|
86
|
+
// var so JS / inline styles can reach it.
|
|
87
|
+
--wui-accent-dark: #2440C4;
|
|
88
|
+
|
|
89
|
+
// ---- Container width + responsive padding ----------------------
|
|
90
|
+
// The standalone design uses a 1512px max canvas with generous side
|
|
91
|
+
// padding that grows on wider viewports. Pair with .container-cloves.
|
|
92
|
+
--wui-container-max: 1512px;
|
|
93
|
+
--wui-container-pad: 24px;
|
|
94
|
+
|
|
95
|
+
// ---- Semantic status ramps -------------------------------------
|
|
96
|
+
// Canonical info/success/warning/danger scales: `active` (text/icon on
|
|
97
|
+
// light), the base `100` (vivid fills/dots), then tints 50/30/20/10/5.
|
|
98
|
+
// Shared by the portal (aliased to --color-*) and marketing alerts/badges.
|
|
99
|
+
--wui-info-active: #056EE9;
|
|
100
|
+
--wui-info: #1B84FF;
|
|
101
|
+
--wui-info-50: #8DC2FF;
|
|
102
|
+
--wui-info-30: #BBDBFF;
|
|
103
|
+
--wui-info-20: #D1E6FF;
|
|
104
|
+
--wui-info-10: #E9F3FF;
|
|
105
|
+
--wui-info-5: #F3F9FF;
|
|
106
|
+
|
|
107
|
+
--wui-success-active: #04B440;
|
|
108
|
+
--wui-success: #17C653;
|
|
109
|
+
--wui-success-50: #8BE3A9;
|
|
110
|
+
--wui-success-30: #BAEECC;
|
|
111
|
+
--wui-success-20: #D1F4DD;
|
|
112
|
+
--wui-success-10: #E8FAEE;
|
|
113
|
+
--wui-success-5: #F3FCF6;
|
|
114
|
+
|
|
115
|
+
--wui-warning-active: #DFA000;
|
|
116
|
+
--wui-warning: #F6B100;
|
|
117
|
+
--wui-warning-50: #FBD880;
|
|
118
|
+
--wui-warning-30: #FDE8B3;
|
|
119
|
+
--wui-warning-20: #FDEFCC;
|
|
120
|
+
--wui-warning-10: #FFF8E6;
|
|
121
|
+
--wui-warning-5: #FEFBF2;
|
|
122
|
+
|
|
123
|
+
--wui-danger-active: #E82646;
|
|
124
|
+
--wui-danger: #F8285A;
|
|
125
|
+
--wui-danger-50: #FC94AD;
|
|
126
|
+
--wui-danger-30: #FDBFCE;
|
|
127
|
+
--wui-danger-20: #FED4DE;
|
|
128
|
+
--wui-danger-10: #FFEAEF;
|
|
129
|
+
--wui-danger-5: #FEF4F6;
|
|
130
|
+
|
|
131
|
+
// Corner radii (DESIGN.md scale) — portal aliases as --radius-*
|
|
132
|
+
--wui-radius-sm: 6px;
|
|
133
|
+
--wui-radius: 10px;
|
|
134
|
+
--wui-radius-lg: 16px;
|
|
135
|
+
--wui-radius-xl: 24px;
|
|
136
|
+
|
|
137
|
+
// ---- Portal dark palette ----------------------------------------
|
|
138
|
+
// Marketing stays light. Portal flips [data-theme="dark"] and maps
|
|
139
|
+
// --color-* aliases onto these so dark hexes live in theme/, not the app.
|
|
140
|
+
--wui-dark-bg-page: #0f1117;
|
|
141
|
+
--wui-dark-bg-elevated: #0d0f15;
|
|
142
|
+
--wui-dark-bg-muted: #232733;
|
|
143
|
+
--wui-dark-bg-surface: #181b23;
|
|
144
|
+
--wui-dark-border: #2a2f3a;
|
|
145
|
+
--wui-dark-border-strong:#3a414f;
|
|
146
|
+
--wui-dark-text: #e6e8ee;
|
|
147
|
+
--wui-dark-text-muted: #b4b9c6;
|
|
148
|
+
--wui-dark-text-subtle: #8a90a0;
|
|
149
|
+
--wui-dark-primary: #6B83EC;
|
|
150
|
+
--wui-dark-primary-hover:#93A6F2;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Bootstrap md / xl (not invented px)
|
|
154
|
+
@media (min-width: 768px) {
|
|
155
|
+
:root { --wui-container-pad: 64px; }
|
|
156
|
+
}
|
|
157
|
+
@media (min-width: 1200px) {
|
|
158
|
+
:root { --wui-container-pad: 88px; }
|
|
159
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// =====================================================================
|
|
2
|
+
// Lumex — Bootstrap variable overrides.
|
|
3
|
+
// Imported BEFORE `bootstrap/scss/bootstrap` so Bootstrap derives every
|
|
4
|
+
// utility class (.btn-primary, .bg-info, .text-success, etc.) from these
|
|
5
|
+
// values. Shared by Lumex.Web (Razor) and Lumex.Web.Customer.Frontend
|
|
6
|
+
// (React) so the marketing site and portal stay visually identical.
|
|
7
|
+
//
|
|
8
|
+
// Source of truth: docs/DESIGN-SYSTEM.md (mirrors locked palette from
|
|
9
|
+
// Design/Lumex-Updated/src/app/globals.css).
|
|
10
|
+
// =====================================================================
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// ---- Brand colors ---------------------------------------------------
|
|
14
|
+
// Lumex primary blue. The full blue ramp lives in _lumex-tokens.scss as
|
|
15
|
+
// CSS variables since Bootstrap only consumes the named theme colors.
|
|
16
|
+
$primary: #2F50E4;
|
|
17
|
+
$secondary: #4B5675; // foreground-3 — quiet text + secondary buttons
|
|
18
|
+
$success: #04B440;
|
|
19
|
+
$info: #056EE9;
|
|
20
|
+
$warning: #DFA000;
|
|
21
|
+
$danger: #E82646;
|
|
22
|
+
$light: #F9FBFC; // surface-mute
|
|
23
|
+
$dark: #071437; // text-heading
|
|
24
|
+
|
|
25
|
+
// Override `$theme-colors` so Bootstrap's $theme-colors map includes
|
|
26
|
+
// our brand. Anything we add here gets utility classes generated
|
|
27
|
+
// automatically (e.g. adding "accent" gives you bg-accent, text-accent).
|
|
28
|
+
$theme-colors: (
|
|
29
|
+
"primary": $primary,
|
|
30
|
+
"secondary": $secondary,
|
|
31
|
+
"success": $success,
|
|
32
|
+
"info": $info,
|
|
33
|
+
"warning": $warning,
|
|
34
|
+
"danger": $danger,
|
|
35
|
+
"light": $light,
|
|
36
|
+
"dark": $dark,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
// ---- Body / text ----------------------------------------------------
|
|
41
|
+
$body-color: #252F4A; // text-1 from locked palette
|
|
42
|
+
$body-bg: #FFFFFF;
|
|
43
|
+
$body-secondary-color: #4B5675;
|
|
44
|
+
$body-tertiary-color: #78829D;
|
|
45
|
+
$body-secondary-bg: #F9FBFC;
|
|
46
|
+
$body-tertiary-bg: #F5F6FA;
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// ---- Borders --------------------------------------------------------
|
|
50
|
+
$border-color: #EBEDF3;
|
|
51
|
+
$border-color-translucent: rgba(13, 24, 43, 0.08);
|
|
52
|
+
|
|
53
|
+
$border-radius: 0.625rem; // 10px — Bootstrap default 0.375rem felt small for our card chrome
|
|
54
|
+
$border-radius-sm: 0.375rem;
|
|
55
|
+
$border-radius-lg: 1rem;
|
|
56
|
+
$border-radius-xl: 1.5rem;
|
|
57
|
+
$border-radius-2xl: 2rem;
|
|
58
|
+
$border-radius-pill: 9999px;
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
// ---- Typography -----------------------------------------------------
|
|
62
|
+
$font-family-sans-serif: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
63
|
+
$font-family-monospace: 'JetBrains Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
64
|
+
|
|
65
|
+
$font-size-base: 1rem; // 16px
|
|
66
|
+
$line-height-base: 1.55;
|
|
67
|
+
|
|
68
|
+
$font-weight-light: 300;
|
|
69
|
+
$font-weight-normal: 400;
|
|
70
|
+
$font-weight-medium: 500;
|
|
71
|
+
$font-weight-semibold: 600;
|
|
72
|
+
$font-weight-bold: 700;
|
|
73
|
+
|
|
74
|
+
$headings-font-weight: 600;
|
|
75
|
+
$headings-line-height: 1.2;
|
|
76
|
+
$headings-letter-spacing: -0.02em;
|
|
77
|
+
$headings-color: #071437;
|
|
78
|
+
|
|
79
|
+
$display-font-weight: 500;
|
|
80
|
+
$display-line-height: 1.05;
|
|
81
|
+
|
|
82
|
+
$h1-font-size: 2.5rem; // 40px
|
|
83
|
+
$h2-font-size: 2rem; // 32px
|
|
84
|
+
$h3-font-size: 1.5rem; // 24px
|
|
85
|
+
$h4-font-size: 1.25rem; // 20px
|
|
86
|
+
$h5-font-size: 1.125rem; // 18px
|
|
87
|
+
$h6-font-size: 1rem; // 16px
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
// ---- Spacing --------------------------------------------------------
|
|
91
|
+
// Bootstrap default ladder is 0/.25/.5/1/1.5/3rem. We add 6/8/10/12
|
|
92
|
+
// for hero / section padding so utility classes like `py-8` exist.
|
|
93
|
+
$spacer: 1rem;
|
|
94
|
+
$spacers: (
|
|
95
|
+
0: 0,
|
|
96
|
+
1: $spacer * 0.25, // 4px
|
|
97
|
+
2: $spacer * 0.5, // 8px
|
|
98
|
+
3: $spacer, // 16px
|
|
99
|
+
4: $spacer * 1.5, // 24px
|
|
100
|
+
5: $spacer * 3, // 48px
|
|
101
|
+
6: $spacer * 4.5, // 72px
|
|
102
|
+
7: $spacer * 5, // 80px
|
|
103
|
+
8: $spacer * 6, // 96px
|
|
104
|
+
10: $spacer * 8, // 128px
|
|
105
|
+
12: $spacer * 10, // 160px
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
// ---- Container widths -----------------------------------------------
|
|
110
|
+
// The locked design uses a wider canvas (1512px max) with generous side
|
|
111
|
+
// padding. Override Bootstrap's narrower default so marketing layouts
|
|
112
|
+
// breathe properly on large monitors.
|
|
113
|
+
$container-max-widths: (
|
|
114
|
+
sm: 540px,
|
|
115
|
+
md: 720px,
|
|
116
|
+
lg: 960px,
|
|
117
|
+
xl: 1140px,
|
|
118
|
+
xxl: 1320px,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
// ---- Shadows --------------------------------------------------------
|
|
123
|
+
// Mirrors the `card / card-lifted / card-lifted-hover` shadow tokens
|
|
124
|
+
// from the locked design.
|
|
125
|
+
$box-shadow-sm: 0 1px 2px rgba(7, 20, 55, 0.04), 0 4px 12px rgba(7, 20, 55, 0.06);
|
|
126
|
+
$box-shadow: 0 0 2px 0 rgba(145, 158, 171, 0.20), 0 12px 24px -4px rgba(145, 158, 171, 0.12);
|
|
127
|
+
$box-shadow-lg: 0 0 2px 0 rgba(145, 158, 171, 0.20), 0 20px 40px -4px rgba(145, 158, 171, 0.20);
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
// ---- Buttons --------------------------------------------------------
|
|
131
|
+
$btn-font-weight: 500;
|
|
132
|
+
$btn-padding-y: 0.625rem;
|
|
133
|
+
$btn-padding-x: 1.25rem;
|
|
134
|
+
$btn-padding-y-lg: 0.875rem;
|
|
135
|
+
$btn-padding-x-lg: 1.75rem;
|
|
136
|
+
$btn-border-radius: $border-radius-lg;
|
|
137
|
+
$btn-border-radius-sm: $border-radius;
|
|
138
|
+
$btn-border-radius-lg: $border-radius-xl;
|
|
139
|
+
$btn-transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
// ---- Forms ----------------------------------------------------------
|
|
143
|
+
// Matches the reference `<Input>` component spec (5 locked states:
|
|
144
|
+
// default / hover / focus / disabled / error). The border itself is the
|
|
145
|
+
// focus cue — no separate box-shadow glow. Disabled gets a muted bg.
|
|
146
|
+
// Error is driven by `aria-invalid="true"` (no separate .is-invalid
|
|
147
|
+
// class needed for the visual change).
|
|
148
|
+
$input-bg: #FFFFFF;
|
|
149
|
+
$input-disabled-bg: #F5F6FA; // --wui-bg-muted
|
|
150
|
+
$input-border-color: $border-color;
|
|
151
|
+
$input-focus-border-color: $primary;
|
|
152
|
+
$input-focus-box-shadow: none; // border IS the focus cue
|
|
153
|
+
$input-focus-color: $body-color;
|
|
154
|
+
$input-padding-y: 0.5rem; // 8px → 40px total height with 1rem font + 1.5 line-height
|
|
155
|
+
$input-padding-x: 0.875rem; // 14px — comfortable inset for leading icon space
|
|
156
|
+
$input-border-radius: 0.625rem; // 10px — refined from 16px to match reference rounded-lg
|
|
157
|
+
$input-placeholder-color: #99A1B7; // --wui-text-4
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
// ---- Cards ----------------------------------------------------------
|
|
161
|
+
$card-border-color: $border-color;
|
|
162
|
+
$card-border-radius: $border-radius-lg;
|
|
163
|
+
// Flat surfaces — no drop shadow on default .card. Depth is conveyed
|
|
164
|
+
// via background tint + hairline border instead. Use .card-lifted
|
|
165
|
+
// utility (in _lumex-components.scss) only when a card legitimately
|
|
166
|
+
// needs to sit "above" the page (currently disabled — set to `none`).
|
|
167
|
+
$card-box-shadow: none;
|
|
168
|
+
$card-spacer-y: 1.5rem;
|
|
169
|
+
$card-spacer-x: 1.5rem;
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
// ---- Nav / dropdown --------------------------------------------------
|
|
173
|
+
$nav-link-font-weight: 500;
|
|
174
|
+
$dropdown-border-color: $border-color;
|
|
175
|
+
$dropdown-border-radius: $border-radius-lg;
|
|
176
|
+
$dropdown-box-shadow: $box-shadow-lg;
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
// ---- Modals + toasts ------------------------------------------------
|
|
180
|
+
$modal-content-border-color: $border-color;
|
|
181
|
+
$modal-content-border-radius: $border-radius-xl;
|
|
182
|
+
$modal-content-box-shadow-xs: $box-shadow-lg;
|
|
183
|
+
|
|
184
|
+
$toast-border-color: $border-color;
|
|
185
|
+
$toast-border-radius: $border-radius-pill; // pill-shape toast — matches locked Sonner override
|
|
186
|
+
$toast-box-shadow: $box-shadow-lg;
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
// ---- Links ----------------------------------------------------------
|
|
190
|
+
$link-color: $primary;
|
|
191
|
+
$link-hover-color: #2440C4; // accent-dark
|
|
192
|
+
$link-decoration: none;
|
|
193
|
+
$link-hover-decoration: underline;
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
// ---- Focus ring -----------------------------------------------------
|
|
197
|
+
$focus-ring-width: 3px;
|
|
198
|
+
$focus-ring-color: rgba(47, 80, 228, 0.30);
|
|
199
|
+
$focus-ring-blur: 0;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Portal component token aliases.
|
|
2
|
+
//
|
|
3
|
+
// The extracted component CSS (_wui-components.scss) references --color-* /
|
|
4
|
+
// --radius-* / --shadow-* names. Those are aliases onto the canonical --wui-*
|
|
5
|
+
// design tokens, so the component layer is self-contained: a consumer that
|
|
6
|
+
// imports the theme gets the components fully styled, with no app-local token
|
|
7
|
+
// layer required. Alias only — never declare a brand hex here.
|
|
8
|
+
|
|
9
|
+
:root {
|
|
10
|
+
// Surfaces
|
|
11
|
+
--color-bg: var(--wui-bg-page);
|
|
12
|
+
--color-bg-subtle: var(--wui-bg-elevated);
|
|
13
|
+
--color-bg-muted: var(--wui-bg-muted);
|
|
14
|
+
--color-surface: var(--wui-bg-light);
|
|
15
|
+
|
|
16
|
+
// Borders
|
|
17
|
+
--color-border: var(--wui-border-light);
|
|
18
|
+
--color-border-light: var(--wui-border-soft);
|
|
19
|
+
--color-border-strong: var(--wui-text-5);
|
|
20
|
+
|
|
21
|
+
// Text ramp
|
|
22
|
+
--color-text: var(--wui-text-heading);
|
|
23
|
+
--color-text-muted: var(--wui-text-2);
|
|
24
|
+
--color-text-subtle: var(--wui-text-3);
|
|
25
|
+
|
|
26
|
+
// Bootstrap colour vars bridged onto app tokens so un-tokenised BS text
|
|
27
|
+
// flips with data-theme.
|
|
28
|
+
--bs-body-color: var(--color-text);
|
|
29
|
+
--bs-emphasis-color: var(--color-text);
|
|
30
|
+
--bs-secondary-color: var(--color-text-muted);
|
|
31
|
+
--bs-tertiary-color: var(--color-text-subtle);
|
|
32
|
+
--bs-body-bg: var(--color-bg);
|
|
33
|
+
--bs-border-color: var(--color-border);
|
|
34
|
+
|
|
35
|
+
// Brand
|
|
36
|
+
--color-primary: var(--wui-primary);
|
|
37
|
+
--color-primary-hover: var(--wui-primary-pressed);
|
|
38
|
+
--color-primary-soft: var(--wui-primary-10);
|
|
39
|
+
|
|
40
|
+
// Semantic status ramps
|
|
41
|
+
--color-info-active: var(--wui-info-active);
|
|
42
|
+
--color-info: var(--wui-info);
|
|
43
|
+
--color-info-50: var(--wui-info-50);
|
|
44
|
+
--color-info-30: var(--wui-info-30);
|
|
45
|
+
--color-info-20: var(--wui-info-20);
|
|
46
|
+
--color-info-10: var(--wui-info-10);
|
|
47
|
+
--color-info-5: var(--wui-info-5);
|
|
48
|
+
--color-info-strong: var(--color-info-active);
|
|
49
|
+
--color-info-soft: var(--color-info-10);
|
|
50
|
+
|
|
51
|
+
--color-success-active: var(--wui-success-active);
|
|
52
|
+
--color-success: var(--wui-success);
|
|
53
|
+
--color-success-50: var(--wui-success-50);
|
|
54
|
+
--color-success-30: var(--wui-success-30);
|
|
55
|
+
--color-success-20: var(--wui-success-20);
|
|
56
|
+
--color-success-10: var(--wui-success-10);
|
|
57
|
+
--color-success-5: var(--wui-success-5);
|
|
58
|
+
--color-success-strong: var(--color-success-active);
|
|
59
|
+
--color-success-soft: var(--color-success-10);
|
|
60
|
+
|
|
61
|
+
--color-warning-active: var(--wui-warning-active);
|
|
62
|
+
--color-warning: var(--wui-warning);
|
|
63
|
+
--color-warning-50: var(--wui-warning-50);
|
|
64
|
+
--color-warning-30: var(--wui-warning-30);
|
|
65
|
+
--color-warning-20: var(--wui-warning-20);
|
|
66
|
+
--color-warning-10: var(--wui-warning-10);
|
|
67
|
+
--color-warning-5: var(--wui-warning-5);
|
|
68
|
+
--color-warning-strong: var(--color-warning-active);
|
|
69
|
+
--color-warning-soft: var(--color-warning-10);
|
|
70
|
+
|
|
71
|
+
--color-danger-active: var(--wui-danger-active);
|
|
72
|
+
--color-danger: var(--wui-danger);
|
|
73
|
+
--color-danger-50: var(--wui-danger-50);
|
|
74
|
+
--color-danger-30: var(--wui-danger-30);
|
|
75
|
+
--color-danger-20: var(--wui-danger-20);
|
|
76
|
+
--color-danger-10: var(--wui-danger-10);
|
|
77
|
+
--color-danger-5: var(--wui-danger-5);
|
|
78
|
+
--color-danger-strong: var(--color-danger-active);
|
|
79
|
+
--color-danger-soft: var(--color-danger-10);
|
|
80
|
+
|
|
81
|
+
// Accent → warning ramp
|
|
82
|
+
--color-accent: var(--color-warning);
|
|
83
|
+
--color-accent-soft: var(--color-warning-soft);
|
|
84
|
+
|
|
85
|
+
// Scrim — media hover overlays (logo uploader)
|
|
86
|
+
--color-scrim: color-mix(in srgb, var(--wui-text-heading) 62%, transparent);
|
|
87
|
+
--color-on-scrim: var(--wui-bg-light);
|
|
88
|
+
|
|
89
|
+
// Elevation — flat (borders only)
|
|
90
|
+
--shadow-sm: none;
|
|
91
|
+
--shadow-md: none;
|
|
92
|
+
--shadow-lg: none;
|
|
93
|
+
|
|
94
|
+
// Corner radii
|
|
95
|
+
--radius-sm: var(--wui-radius-sm);
|
|
96
|
+
--radius: var(--wui-radius);
|
|
97
|
+
--radius-lg: var(--wui-radius-lg);
|
|
98
|
+
--radius-xl: var(--wui-radius-xl);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
:root[data-theme="dark"] {
|
|
102
|
+
--color-bg: var(--wui-dark-bg-page);
|
|
103
|
+
--color-bg-subtle: var(--wui-dark-bg-elevated);
|
|
104
|
+
--color-bg-muted: var(--wui-dark-bg-muted);
|
|
105
|
+
--color-surface: var(--wui-dark-bg-surface);
|
|
106
|
+
|
|
107
|
+
--color-border: var(--wui-dark-border);
|
|
108
|
+
--color-border-strong: var(--wui-dark-border-strong);
|
|
109
|
+
|
|
110
|
+
--color-text: var(--wui-dark-text);
|
|
111
|
+
--color-text-muted: var(--wui-dark-text-muted);
|
|
112
|
+
--color-text-subtle: var(--wui-dark-text-subtle);
|
|
113
|
+
|
|
114
|
+
--color-primary: var(--wui-dark-primary);
|
|
115
|
+
--color-primary-hover: var(--wui-dark-primary-hover);
|
|
116
|
+
--color-primary-soft: color-mix(in srgb, var(--wui-primary) 20%, transparent);
|
|
117
|
+
|
|
118
|
+
--color-success-soft: color-mix(in srgb, var(--wui-success) 18%, transparent);
|
|
119
|
+
--color-warning-soft: color-mix(in srgb, var(--wui-warning) 18%, transparent);
|
|
120
|
+
--color-danger-soft: color-mix(in srgb, var(--wui-danger) 18%, transparent);
|
|
121
|
+
--color-info-soft: color-mix(in srgb, var(--wui-info) 18%, transparent);
|
|
122
|
+
--color-accent-soft: var(--color-warning-soft);
|
|
123
|
+
|
|
124
|
+
--color-scrim: color-mix(in srgb, black 62%, transparent);
|
|
125
|
+
--color-on-scrim: var(--wui-bg-light);
|
|
126
|
+
|
|
127
|
+
color-scheme: dark;
|
|
128
|
+
}
|