@keenmate/pure-css 1.0.0-rc01

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.
@@ -0,0 +1,648 @@
1
+ // ============================================================================
2
+ // BASE CSS VARIABLES OUTPUT MIXIN
3
+ // ============================================================================
4
+ // This mixin outputs all $base-* SCSS variables as --base-* CSS custom properties.
5
+ // Include this in themes to enable web component theming.
6
+ //
7
+ // Usage in theme file:
8
+ // @import '../base-css-variables';
9
+ // :root {
10
+ // @include output-base-css-variables;
11
+ // }
12
+ //
13
+ // Web components consume these via fallback chains:
14
+ // --ms-accent-color: var(--base-accent-color, #3b82f6);
15
+ // ============================================================================
16
+
17
+ // Make variables resolvable when this file is loaded as a @use module
18
+ // (e.g. from main.scss). Legacy @import callers (themes) are unaffected —
19
+ // Sass places @use'd members into the importing file's global scope, where
20
+ // theme-set overrides already live.
21
+ @use 'variables/index' as *;
22
+
23
+ @mixin output-base-css-variables {
24
+ // === Accent Colors ===
25
+ --base-accent-color: #{$base-accent-color};
26
+ --base-accent-color-hover: #{$base-accent-color-hover};
27
+ --base-accent-color-active: #{$base-accent-color-active};
28
+ --base-accent-color-light: #{$base-accent-color-light};
29
+ --base-accent-color-light-hover: #{$base-accent-color-light-hover};
30
+
31
+ // === Text Colors ===
32
+ --base-text-color-1: #{$base-text-color-1};
33
+ --base-text-color-2: #{$base-text-color-2};
34
+ --base-text-color-3: #{$base-text-color-3};
35
+ --base-text-color-4: #{$base-text-color-4};
36
+ --base-text-color-on-accent: #{$base-text-color-on-accent};
37
+
38
+ // === Background Colors (semantic) ===
39
+ --base-main-bg: #{$base-main-bg};
40
+ --base-page-bg: #{$base-page-bg};
41
+ --base-subtle-bg: #{$base-subtle-bg};
42
+ --base-inverse-bg: #{$base-inverse-bg};
43
+ --base-overlay-bg: #{$base-overlay-bg};
44
+ --base-shadow-color: #{$base-shadow-color};
45
+ --base-hover-bg: #{$base-hover-bg};
46
+ --base-active-bg: #{$base-active-bg};
47
+ --base-disabled-bg: #{$base-disabled-bg};
48
+ --base-elevated-bg: #{$base-elevated-bg};
49
+
50
+ // === Border Colors ===
51
+ --base-border-color: #{$base-border-color};
52
+ --base-border: #{$base-border};
53
+
54
+ // === Input Fields ===
55
+ --base-input-bg: #{$base-input-bg};
56
+ --base-input-color: #{$base-input-color};
57
+ --base-input-border: #{$base-input-border};
58
+ --base-input-border-hover: #{$base-input-border-hover};
59
+ --base-input-border-focus: #{$base-input-border-focus};
60
+ --base-input-placeholder-color: #{$base-input-placeholder-color};
61
+ --base-input-bg-disabled: #{$base-input-bg-disabled};
62
+
63
+ // === Input Size Heights ===
64
+ --base-input-size-xs-height: #{$base-input-size-xs-height};
65
+ --base-input-size-sm-height: #{$base-input-size-sm-height};
66
+ --base-input-size-md-height: #{$base-input-size-md-height};
67
+ --base-input-size-lg-height: #{$base-input-size-lg-height};
68
+ --base-input-size-xl-height: #{$base-input-size-xl-height};
69
+
70
+ // === Dropdown/Popover ===
71
+ --base-dropdown-bg: #{$base-dropdown-bg};
72
+ --base-dropdown-border: #{$base-dropdown-border};
73
+ --base-dropdown-box-shadow: #{$base-dropdown-box-shadow};
74
+
75
+ // === Tooltip ===
76
+ --base-tooltip-bg: #{$base-tooltip-bg};
77
+ --base-tooltip-text-color: #{$base-tooltip-text-color};
78
+
79
+ // === Contextual Colors - Success ===
80
+ --base-success-color: #{$base-success-color};
81
+ --base-success-color-hover: #{$base-success-color-hover};
82
+ --base-success-bg-light: #{$base-success-bg-light};
83
+ --base-success-bg-subtle: #{$base-success-bg-subtle};
84
+ --base-success-border: #{$base-success-border};
85
+ --base-success-text: #{$base-success-text};
86
+ --base-success-text-light: #{$base-success-text-light};
87
+ --base-text-on-success: #{$base-text-on-success};
88
+
89
+ // === Contextual Colors - Danger ===
90
+ --base-danger-color: #{$base-danger-color};
91
+ --base-danger-color-hover: #{$base-danger-color-hover};
92
+ --base-danger-bg-light: #{$base-danger-bg-light};
93
+ --base-danger-bg-subtle: #{$base-danger-bg-subtle};
94
+ --base-danger-border: #{$base-danger-border};
95
+ --base-danger-text: #{$base-danger-text};
96
+ --base-danger-text-light: #{$base-danger-text-light};
97
+ --base-text-on-danger: #{$base-text-on-danger};
98
+
99
+ // === Contextual Colors - Warning ===
100
+ --base-warning-color: #{$base-warning-color};
101
+ --base-warning-color-hover: #{$base-warning-color-hover};
102
+ --base-warning-bg-light: #{$base-warning-bg-light};
103
+ --base-warning-bg-subtle: #{$base-warning-bg-subtle};
104
+ --base-warning-border: #{$base-warning-border};
105
+ --base-warning-text: #{$base-warning-text};
106
+ --base-warning-text-light: #{$base-warning-text-light};
107
+ --base-text-on-warning: #{$base-text-on-warning};
108
+
109
+ // === Contextual Colors - Info ===
110
+ --base-info-color: #{$base-info-color};
111
+ --base-info-color-hover: #{$base-info-color-hover};
112
+ --base-info-bg-light: #{$base-info-bg-light};
113
+ --base-info-bg-subtle: #{$base-info-bg-subtle};
114
+ --base-info-border: #{$base-info-border};
115
+ --base-info-text: #{$base-info-text};
116
+ --base-info-text-light: #{$base-info-text-light};
117
+ --base-text-on-info: #{$base-text-on-info};
118
+
119
+ // === Interactive States ===
120
+ --base-hover-overlay: #{$base-hover-overlay};
121
+ --base-active-overlay: #{$base-active-overlay};
122
+ --base-focus-ring-color: #{$base-focus-ring-color};
123
+ --base-focus-ring-width: #{$base-focus-ring-width};
124
+
125
+ // === Typography ===
126
+ --base-font-family: #{$base-font-family};
127
+ --base-font-family-mono: #{$base-font-family-mono};
128
+ --base-font-size-2xs: #{$base-font-size-2xs};
129
+ --base-font-size-xs: #{$base-font-size-xs};
130
+ --base-font-size-sm: #{$base-font-size-sm};
131
+ --base-font-size-base: #{$base-font-size-base};
132
+ --base-font-size-lg: #{$base-font-size-lg};
133
+ --base-font-size-xl: #{$base-font-size-xl};
134
+ --base-font-size-2xl: #{$base-font-size-2xl};
135
+ --base-font-weight-normal: #{$base-font-weight-normal};
136
+ --base-font-weight-medium: #{$base-font-weight-medium};
137
+ --base-font-weight-semibold: #{$base-font-weight-semibold};
138
+ --base-font-weight-bold: #{$base-font-weight-bold};
139
+ --base-line-height-tight: #{$base-line-height-tight};
140
+ --base-line-height-normal: #{$base-line-height-normal};
141
+ --base-line-height-relaxed: #{$base-line-height-relaxed};
142
+
143
+ // === Border Radius ===
144
+ --base-border-radius-sm: #{$base-border-radius-sm};
145
+ --base-border-radius-md: #{$base-border-radius-md};
146
+ --base-border-radius-lg: #{$base-border-radius-lg};
147
+ }
148
+
149
+ // ============================================================================
150
+ // ALERT COLOR DERIVATION MIXINS
151
+ // ============================================================================
152
+ // These mixins use color-mix() to automatically derive alert colors from
153
+ // semantic base colors (--pa-success-bg, --pa-danger-bg, etc.)
154
+ //
155
+ // Light mode: dark text on subtle backgrounds
156
+ // Dark mode: light text on tinted backgrounds
157
+ //
158
+ // Themes call the appropriate mixin instead of hardcoding 12+ CSS variables.
159
+ // Override specific variables after the mixin call if needed.
160
+ // ============================================================================
161
+
162
+ // Light mode: dark text on subtle backgrounds
163
+ @mixin output-pa-alert-variables-light {
164
+ // Success
165
+ --pa-alert-success-text: color-mix(in srgb, var(--pa-success-bg) #{$alert-text-mix-light}, black);
166
+ --pa-alert-success-bg: color-mix(in srgb, var(--pa-success-bg) #{$alert-bg-opacity-light}%, transparent);
167
+ --pa-alert-success-border: color-mix(in srgb, var(--pa-success-bg) #{$alert-border-opacity-light}%, transparent);
168
+
169
+ // Danger
170
+ --pa-alert-danger-text: color-mix(in srgb, var(--pa-danger-bg) #{$alert-text-mix-light}, black);
171
+ --pa-alert-danger-bg: color-mix(in srgb, var(--pa-danger-bg) #{$alert-bg-opacity-light}%, transparent);
172
+ --pa-alert-danger-border: color-mix(in srgb, var(--pa-danger-bg) #{$alert-border-opacity-light}%, transparent);
173
+
174
+ // Warning
175
+ --pa-alert-warning-text: color-mix(in srgb, var(--pa-warning-bg) #{$alert-text-mix-light}, black);
176
+ --pa-alert-warning-bg: color-mix(in srgb, var(--pa-warning-bg) #{$alert-bg-opacity-light}%, transparent);
177
+ --pa-alert-warning-border: color-mix(in srgb, var(--pa-warning-bg) #{$alert-border-opacity-light}%, transparent);
178
+
179
+ // Info
180
+ --pa-alert-info-text: color-mix(in srgb, var(--pa-info-bg) #{$alert-text-mix-light}, black);
181
+ --pa-alert-info-bg: color-mix(in srgb, var(--pa-info-bg) #{$alert-bg-opacity-light}%, transparent);
182
+ --pa-alert-info-border: color-mix(in srgb, var(--pa-info-bg) #{$alert-border-opacity-light}%, transparent);
183
+ }
184
+
185
+ // Dark mode: white text on tinted backgrounds (white text is always readable)
186
+ @mixin output-pa-alert-variables-dark {
187
+ // Success
188
+ --pa-alert-success-text: #ffffff;
189
+ --pa-alert-success-bg: color-mix(in srgb, var(--pa-success-bg) #{$alert-bg-opacity-dark}%, transparent);
190
+ --pa-alert-success-border: color-mix(in srgb, var(--pa-success-bg) #{$alert-border-opacity-dark}%, transparent);
191
+
192
+ // Danger
193
+ --pa-alert-danger-text: #ffffff;
194
+ --pa-alert-danger-bg: color-mix(in srgb, var(--pa-danger-bg) #{$alert-bg-opacity-dark}%, transparent);
195
+ --pa-alert-danger-border: color-mix(in srgb, var(--pa-danger-bg) #{$alert-border-opacity-dark}%, transparent);
196
+
197
+ // Warning
198
+ --pa-alert-warning-text: #ffffff;
199
+ --pa-alert-warning-bg: color-mix(in srgb, var(--pa-warning-bg) #{$alert-bg-opacity-dark}%, transparent);
200
+ --pa-alert-warning-border: color-mix(in srgb, var(--pa-warning-bg) #{$alert-border-opacity-dark}%, transparent);
201
+
202
+ // Info
203
+ --pa-alert-info-text: #ffffff;
204
+ --pa-alert-info-bg: color-mix(in srgb, var(--pa-info-bg) #{$alert-bg-opacity-dark}%, transparent);
205
+ --pa-alert-info-border: color-mix(in srgb, var(--pa-info-bg) #{$alert-border-opacity-dark}%, transparent);
206
+ }
207
+
208
+ // ============================================================================
209
+ // DERIVED TOKENS — TEXT CONTRAST TIERS + SURFACE TINTS
210
+ // ============================================================================
211
+ // These tokens use `color-mix(... var(--pa-text-color-1) ...)` to derive
212
+ // theme-aware contrast levels. They MUST be emitted at every selector that
213
+ // could carry an override of --pa-text-color-1, because CSS custom property
214
+ // substitution bakes nested var() references at the *defining element*, not
215
+ // the using element. If we only defined these at `:root, .pa-mode-light`,
216
+ // the light-mode text colour would be frozen into the value, and elements
217
+ // inside `.pa-mode-dark` (which overrides --pa-text-color-1 at body) would
218
+ // inherit the light-mode-baked tier values → low contrast on dark surfaces.
219
+ //
220
+ // Emitting at all three selectors causes each scope to recompute the tiers
221
+ // against its own --pa-text-color-1. The selector list `:root, .pa-mode-light,
222
+ // .pa-mode-dark` covers html, body in light mode, and body in dark mode —
223
+ // regardless of which class layout each theme uses for mode switching.
224
+ //
225
+ // This is a TOP-LEVEL rule (not inside the mixin) because themes only call
226
+ // the mixin from their light-mode block; they don't call it again in the
227
+ // dark-mode block. Emitting at framework level means themes get correct
228
+ // dark-mode tiers without changing any theme code.
229
+ //
230
+ // Override these per-theme by redefining them in the same scope you
231
+ // override --pa-text-color-1.
232
+ // ============================================================================
233
+
234
+ :root,
235
+ .pa-mode-light,
236
+ .pa-mode-dark {
237
+ --pa-text-strong: color-mix(in srgb, var(--pa-text-color-1) 85%, transparent);
238
+ --pa-text-secondary: color-mix(in srgb, var(--pa-text-color-1) 70%, transparent);
239
+ --pa-text-tertiary: color-mix(in srgb, var(--pa-text-color-1) 55%, transparent);
240
+ --pa-surface-hover: color-mix(in srgb, var(--pa-text-color-1) 4%, transparent);
241
+ --pa-surface-track: color-mix(in srgb, var(--pa-text-color-1) 12%, transparent);
242
+ }
243
+
244
+ // ============================================================================
245
+ // PURE ADMIN THEME CSS VARIABLES OUTPUT MIXIN
246
+ // ============================================================================
247
+ // This mixin outputs all themeable SCSS variables as --pa-* CSS custom properties.
248
+ // Components use var(--pa-*) for runtime theme switching capability.
249
+ //
250
+ // Usage in theme file:
251
+ // :root, .theme-light {
252
+ // @include output-pa-css-variables;
253
+ // }
254
+ // .theme-dark {
255
+ // @include output-pa-css-variables;
256
+ // }
257
+ // ============================================================================
258
+
259
+ @mixin output-pa-css-variables {
260
+ // =========================================================================
261
+ // COLOR SCHEME SIGNAL
262
+ // Tells the browser whether this scope is light or dark so native UA
263
+ // elements (scrollbars, form controls) and `light-dark()` resolve
264
+ // correctly. Drives web components (e.g. <web-multiselect>) that ship
265
+ // adaptive palettes via `light-dark()`. Override $theme-color-scheme
266
+ // before importing variables for always-dark themes; for dual-mode
267
+ // themes leave default `light` here and add `color-scheme: dark;` to
268
+ // the `.pa-mode-dark` block.
269
+ // =========================================================================
270
+ color-scheme: #{$theme-color-scheme};
271
+
272
+ // =========================================================================
273
+ // CORE COLORS
274
+ // =========================================================================
275
+
276
+ // Background colors
277
+ --pa-main-bg: #{$main-bg};
278
+ --pa-page-bg: #{$page-bg};
279
+ --pa-subtle-bg: #{$subtle-bg};
280
+
281
+ // Text colors
282
+ --pa-text-color-1: #{$text-color-1};
283
+ --pa-text-color-2: #{$text-color-2};
284
+
285
+ // Accent colors
286
+ --pa-accent: #{$accent-color};
287
+ --pa-accent-hover: #{$accent-hover};
288
+ // -light derives from --pa-accent at runtime so theme overrides cascade.
289
+ // SCSS-only consumers still get $accent-light from variables/_base.scss via the !default chain.
290
+ --pa-accent-light: color-mix(in srgb, var(--pa-accent) 5%, transparent);
291
+
292
+ // Links — derive from accent so theme overrides cascade automatically.
293
+ // Hover mixes 25% toward currentColor (inherited text colour at the use site),
294
+ // so it auto-darkens on light themes and auto-lightens on dark themes
295
+ // without per-mode declarations.
296
+ --pa-link-color: var(--pa-accent);
297
+ --pa-link-color-hover: color-mix(in srgb, var(--pa-link-color), currentColor 50%);
298
+ --pa-link-color-visited: var(--pa-link-color);
299
+
300
+ // Border. A pure pass-through of the base border colour — emit it as a live reference to
301
+ // --base-border-color (not a baked literal) so it follows a RUNTIME --base-* override (a
302
+ // theme toggling --base-border-color at :root/.pa-mode-dark), while the build-time value
303
+ // stays the fallback. Keeps utilities/components that read --pa-border-color theme-responsive.
304
+ --pa-border-color: var(--base-border-color, #{$border-color});
305
+
306
+ // =========================================================================
307
+ // ROLE COLORS — single source of truth for the four semantic roles.
308
+ // Button surfaces (--pa-btn-{success,warning,danger,info}-bg) and
309
+ // contextual surfaces (--pa-{success,warning,danger,info}-bg) below
310
+ // both reference these via var() so a theme can override one place
311
+ // and the change cascades everywhere.
312
+ //
313
+ // --pa-warning here is also the "off-target / approaching-limit" axis
314
+ // colour used by KPI components — orange-500, deliberately distinct
315
+ // from the previous Bootstrap yellow.
316
+ // =========================================================================
317
+
318
+ --pa-success: #{$base-success-color};
319
+ --pa-warning: #{$base-warning-color};
320
+ --pa-danger: #{$base-danger-color};
321
+ --pa-info: #{$base-info-color};
322
+
323
+ // =========================================================================
324
+ // SENTIMENT SCALE — 5-step direction-of-change.
325
+ // Used by KPI / data-display components for indicating directional
326
+ // movement (delta colours, sparkline trend colours, etc.).
327
+ // The middle three values alias the role colours so a theme that
328
+ // retunes --pa-success / --pa-danger automatically retunes the
329
+ // matching sentiment positions; the outliers (very-positive /
330
+ // very-negative) are explicit darker shades.
331
+ //
332
+ // Sentiment is on a *different axis* from role colours — direction
333
+ // (ordinal: -2 to +2) vs. urgency (categorical: success / warning /
334
+ // danger / info). They coexist intentionally.
335
+ // =========================================================================
336
+
337
+ --pa-very-positive: #{$base-very-positive};
338
+ --pa-positive: var(--pa-success);
339
+ --pa-neutral: #{$base-neutral};
340
+ --pa-negative: var(--pa-danger);
341
+ --pa-very-negative: #{$base-very-negative};
342
+
343
+ // (Text contrast tiers and surface tints are emitted as a top-level rule
344
+ // OUTSIDE this mixin — see below — because their values use
345
+ // `var(--pa-text-color-1)` and CSS custom property substitution bakes
346
+ // nested var() at the *defining element*, not the using element. That
347
+ // means tier vars defined here at `:root, .pa-mode-light` would freeze
348
+ // the light-mode text colour into them; under `.pa-mode-dark` (which
349
+ // overrides --pa-text-color-1 at body) the tiers would still resolve
350
+ // against the light value. Emitting them at all three selectors
351
+ // simultaneously fixes the substitution scope.)
352
+
353
+ // =========================================================================
354
+ // CHART / SPARKLINE
355
+ // =========================================================================
356
+ // Single height token used by every KPI showcase that renders a sparkline
357
+ // / trendline (terminal grid, sparkline list, hero+supporting, bento).
358
+ // Centralised so the line proportions stay consistent across designs;
359
+ // override globally for taller or shorter trendlines, or per-component
360
+ // if a particular layout (e.g. a "hero" pattern) wants a different size.
361
+
362
+ --pa-chart-trendline-height: 3rem;
363
+ --pa-chart-trendline-stroke: 2.1; // SVG user-space units (viewBox-relative)
364
+
365
+ // =========================================================================
366
+ // DETAIL POPOVER — Bloomberg-dark by default, regardless of host
367
+ // theme, for the terminal/data-dashboard aesthetic. Override the
368
+ // five tokens to adopt a theme-aware popover instead.
369
+ // =========================================================================
370
+
371
+ --pa-detail-bg: rgba(15, 17, 21, 0.97);
372
+ --pa-detail-text: #ffffff;
373
+ --pa-detail-row-label: rgba(255, 255, 255, 0.75);
374
+ --pa-detail-title: rgba(255, 255, 255, 0.55);
375
+ --pa-detail-shadow: 0 1.4rem 3.6rem rgba(0, 0, 0, 0.55);
376
+
377
+ // =========================================================================
378
+ // LAYOUT COLORS
379
+ // =========================================================================
380
+
381
+ // Header
382
+ --pa-header-bg: #{$header-bg};
383
+ --pa-header-border-color: #{$header-border-color};
384
+ --pa-header-text: #{$header-text};
385
+ --pa-header-text-secondary: #{$header-text-secondary};
386
+ --pa-header-profile-name-color: #{$header-profile-name-color};
387
+
388
+ // Sidebar
389
+ --pa-sidebar-bg: #{$sidebar-bg};
390
+ --pa-sidebar-text: #{$sidebar-text};
391
+ --pa-sidebar-text-secondary: #{$sidebar-text-secondary};
392
+ --pa-sidebar-submenu-bg: #{$sidebar-submenu-bg};
393
+ --pa-sidebar-submenu-hover-bg: #{$sidebar-submenu-hover-bg};
394
+ --pa-sidebar-submenu-active-bg: #{$sidebar-submenu-active-bg};
395
+ --pa-sidebar-submenu-active-text: #{$sidebar-submenu-active-text};
396
+
397
+ // Footer
398
+ --pa-footer-bg: #{$footer-bg};
399
+ --pa-footer-border-color: #{$footer-border-color};
400
+
401
+ // =========================================================================
402
+ // BUTTON COLORS
403
+ // =========================================================================
404
+
405
+ // Primary (uses accent color)
406
+ --pa-btn-primary-bg: #{$btn-primary-bg};
407
+ --pa-btn-primary-bg-hover: #{$btn-primary-bg-hover};
408
+ // -light derives from --pa-btn-primary-bg at runtime so theme overrides cascade.
409
+ --pa-btn-primary-bg-light: color-mix(in srgb, var(--pa-btn-primary-bg) 5%, transparent);
410
+ --pa-btn-primary-text: #{$btn-primary-text};
411
+
412
+ // Secondary
413
+ --pa-btn-secondary-bg: #{$btn-secondary-bg};
414
+ --pa-btn-secondary-bg-hover: #{$btn-secondary-bg-hover};
415
+ --pa-btn-secondary-text: #{$btn-secondary-text};
416
+ // Outline-variant border + text colour. Defaults to --pa-btn-secondary-bg
417
+ // so the resting outline matches the colour the hover fill animates to.
418
+ // Was previously $btn-secondary-text (#ffffff) which rendered invisible on
419
+ // any light theme — pre-existing bug, not a 2.7.0 regression.
420
+ --pa-btn-secondary-outline-color: var(--pa-btn-secondary-bg);
421
+
422
+ // Success — bg references role colour for runtime cascade
423
+ --pa-btn-success-bg: var(--pa-success);
424
+ --pa-btn-success-bg-hover: #{$btn-success-bg-hover};
425
+ --pa-btn-success-text: #{$btn-success-text};
426
+
427
+ // Danger — bg references role colour for runtime cascade
428
+ --pa-btn-danger-bg: var(--pa-danger);
429
+ --pa-btn-danger-bg-hover: #{$btn-danger-bg-hover};
430
+ --pa-btn-danger-text: #{$btn-danger-text};
431
+
432
+ // Warning — bg references role colour for runtime cascade
433
+ --pa-btn-warning-bg: var(--pa-warning);
434
+ --pa-btn-warning-bg-hover: #{$btn-warning-bg-hover};
435
+ --pa-btn-warning-text: #{$btn-warning-text};
436
+
437
+ // Info — bg references role colour for runtime cascade
438
+ --pa-btn-info-bg: var(--pa-info);
439
+ --pa-btn-info-bg-hover: #{$btn-info-bg-hover};
440
+ --pa-btn-info-text: #{$btn-info-text};
441
+
442
+ // Light
443
+ --pa-btn-light-bg: #{$btn-light-bg};
444
+ --pa-btn-light-bg-hover: #{$btn-light-bg-hover};
445
+ --pa-btn-light-text: #{$btn-light-text};
446
+
447
+ // Dark
448
+ --pa-btn-dark-bg: #{$btn-dark-bg};
449
+ --pa-btn-dark-bg-hover: #{$btn-dark-bg-hover};
450
+ --pa-btn-dark-text: #{$btn-dark-text};
451
+
452
+ // =========================================================================
453
+ // CONTEXTUAL/SEMANTIC COLORS
454
+ // =========================================================================
455
+
456
+ // Success — bg references role colour for runtime cascade.
457
+ // -light/-subtle/-border derive from --pa-success at runtime so theme overrides cascade.
458
+ // -hover stays compile-time (color.adjust-derived darker shade, not opacity-based).
459
+ --pa-success-bg: var(--pa-success);
460
+ --pa-success-bg-hover: #{$success-bg-hover};
461
+ --pa-success-bg-light: color-mix(in srgb, var(--pa-success) 10%, transparent);
462
+ --pa-success-bg-subtle: color-mix(in srgb, var(--pa-success) 8%, transparent);
463
+ --pa-success-border: color-mix(in srgb, var(--pa-success) 20%, transparent);
464
+ --pa-success-text: #{$success-text};
465
+ --pa-success-text-light: #{$success-text-light};
466
+
467
+ // Danger — bg references role colour for runtime cascade.
468
+ --pa-danger-bg: var(--pa-danger);
469
+ --pa-danger-bg-hover: #{$danger-bg-hover};
470
+ --pa-danger-bg-light: color-mix(in srgb, var(--pa-danger) 10%, transparent);
471
+ --pa-danger-bg-subtle: color-mix(in srgb, var(--pa-danger) 8%, transparent);
472
+ --pa-danger-border: color-mix(in srgb, var(--pa-danger) 20%, transparent);
473
+ --pa-danger-text: #{$danger-text};
474
+ --pa-danger-text-light: #{$danger-text-light};
475
+
476
+ // Warning — bg references role colour for runtime cascade.
477
+ --pa-warning-bg: var(--pa-warning);
478
+ --pa-warning-bg-hover: #{$warning-bg-hover};
479
+ --pa-warning-bg-light: color-mix(in srgb, var(--pa-warning) 10%, transparent);
480
+ --pa-warning-bg-subtle: color-mix(in srgb, var(--pa-warning) 8%, transparent);
481
+ --pa-warning-border: color-mix(in srgb, var(--pa-warning) 20%, transparent);
482
+ --pa-warning-text: #{$warning-text};
483
+ --pa-warning-text-light: #{$warning-text-light};
484
+
485
+ // Info — bg references role colour for runtime cascade.
486
+ --pa-info-bg: var(--pa-info);
487
+ --pa-info-bg-hover: #{$info-bg-hover};
488
+ --pa-info-bg-light: color-mix(in srgb, var(--pa-info) 10%, transparent);
489
+ --pa-info-bg-subtle: color-mix(in srgb, var(--pa-info) 8%, transparent);
490
+ --pa-info-border: color-mix(in srgb, var(--pa-info) 20%, transparent);
491
+ --pa-info-text: #{$info-text};
492
+ --pa-info-text-light: #{$info-text-light};
493
+
494
+ // =========================================================================
495
+ // CARD COLORS
496
+ // =========================================================================
497
+ --pa-card-bg: #{$card-bg};
498
+ --pa-card-header-bg: #{$card-header-bg};
499
+ --pa-card-footer-bg: #{$card-footer-bg};
500
+ --pa-card-tabs-bg: #{$card-tabs-bg};
501
+
502
+ // =========================================================================
503
+ // INPUT/FORM COLORS
504
+ // =========================================================================
505
+ --pa-input-bg: #{$input-bg};
506
+ --pa-input-border: #{$input-border};
507
+ --pa-input-text: #{$input-text};
508
+ --pa-input-focus-border-color: #{$input-focus-border-color};
509
+ --pa-select-focus-border-color: #{$select-focus-border-color};
510
+ --pa-textarea-focus-border-color: #{$textarea-focus-border-color};
511
+
512
+ // Checkbox
513
+ --pa-checkbox-border-color: #{$checkbox-border-color};
514
+ --pa-checkbox-border-color-hover: #{$checkbox-border-color-hover};
515
+ --pa-checkbox-border-color-checked: #{$checkbox-border-color-checked};
516
+ --pa-checkbox-bg: #{$checkbox-bg};
517
+ --pa-checkbox-bg-checked: #{$checkbox-bg-checked};
518
+ --pa-checkbox-bg-indeterminate: #{$checkbox-bg-indeterminate};
519
+ --pa-checkbox-checkmark-color: #{$checkbox-checkmark-color};
520
+ --pa-checkbox-focus-shadow: #{$checkbox-focus-shadow};
521
+
522
+ // Input group
523
+ --pa-input-group-prepend-bg: #{$input-group-prepend-bg};
524
+ --pa-input-group-prepend-text: #{$input-group-prepend-text};
525
+ --pa-input-group-append-bg: #{$input-group-append-bg};
526
+ --pa-input-group-append-text: #{$input-group-append-text};
527
+
528
+ // =========================================================================
529
+ // TABLE COLORS
530
+ // =========================================================================
531
+ --pa-table-bg: #{$table-bg};
532
+ --pa-table-header-bg: #{$table-header-bg};
533
+ --pa-table-stripe: #{$table-stripe};
534
+ --pa-table-hover-bg: #{$table-hover-bg};
535
+ --pa-table-hover-accent-color: #{$table-hover-accent-color};
536
+
537
+ // =========================================================================
538
+ // MODAL COLORS
539
+ // =========================================================================
540
+ --pa-modal-overlay-bg: #{$modal-overlay-bg};
541
+ --pa-modal-content-bg: #{$modal-content-bg};
542
+
543
+ // =========================================================================
544
+ // ALERT COLORS - Now derived via output-pa-alert-variables-light/dark mixins
545
+ // Themes must call the appropriate mixin after output-pa-css-variables
546
+ // =========================================================================
547
+
548
+ // =========================================================================
549
+ // BADGE COLORS
550
+ // =========================================================================
551
+ --pa-badge-success-bg: #{$badge-success-bg};
552
+ --pa-badge-success-text: #{$badge-success-text};
553
+ --pa-badge-warning-bg: #{$badge-warning-bg};
554
+ --pa-badge-warning-text: #{$badge-warning-text};
555
+ --pa-badge-info-bg: #{$badge-info-bg};
556
+ --pa-badge-info-text: #{$badge-info-text};
557
+ --pa-badge-danger-bg: #{$badge-danger-bg};
558
+ --pa-badge-danger-text: #{$badge-danger-text};
559
+
560
+ // Composite badge
561
+ --pa-composite-badge-icon-bg: #{$composite-badge-icon-bg};
562
+ --pa-composite-badge-label-bg: #{$composite-badge-label-bg};
563
+ --pa-composite-badge-label-text: #{$composite-badge-label-text};
564
+ --pa-composite-badge-label-hover-bg: #{$composite-badge-label-hover-bg};
565
+
566
+ // =========================================================================
567
+ // TOOLTIP & POPOVER COLORS
568
+ // =========================================================================
569
+ --pa-tooltip-bg: #{$tooltip-bg};
570
+ --pa-tooltip-text: #{$tooltip-text};
571
+ --pa-popover-content-bg: #{$popover-content-bg};
572
+ --pa-popover-text-light: #{$popover-text-light};
573
+ --pa-popover-text-dark: #{$popover-text-dark};
574
+
575
+ // =========================================================================
576
+ // LOADER COLORS
577
+ // =========================================================================
578
+ --pa-loader-overlay-bg: #{$loader-overlay-bg};
579
+
580
+ // =========================================================================
581
+ // PROFILE PANEL COLORS
582
+ // =========================================================================
583
+ --pa-profile-overlay-bg: #{$profile-overlay-bg};
584
+
585
+ // =========================================================================
586
+ // DETAIL PANEL COLORS
587
+ // =========================================================================
588
+ --pa-detail-panel-overlay-bg: #{$detail-panel-overlay-bg};
589
+ --pa-detail-panel-selected-bg: #{$detail-panel-selected-bg};
590
+ --pa-detail-panel-z-index: #{$detail-panel-z-index};
591
+
592
+ // =========================================================================
593
+ // COMMAND PALETTE COLORS
594
+ // =========================================================================
595
+ --pa-command-palette-backdrop-bg: #{$command-palette-backdrop-bg};
596
+ --pa-command-palette-item-hover-bg: #{$command-palette-item-hover-bg};
597
+ --pa-command-palette-item-active-bg: #{$command-palette-item-active-bg};
598
+ --pa-command-palette-highlight-bg: #{$command-palette-highlight-bg};
599
+ --pa-command-palette-highlight-text: #{$command-palette-highlight-text};
600
+ --pa-command-palette-key-bg: #{$subtle-bg};
601
+ --pa-command-palette-key-text: #{$text-color-1};
602
+ --pa-command-palette-key-font-size: #{$font-size-xs};
603
+ --pa-command-palette-key-font-weight: #{$font-weight-semibold};
604
+
605
+ // =========================================================================
606
+ // MULTISELECT COLORS
607
+ // =========================================================================
608
+ --pa-multiselect-dropdown-bg: #{$multiselect-dropdown-bg};
609
+ --pa-multiselect-dropdown-border: #{$multiselect-dropdown-border};
610
+ --pa-multiselect-dropdown-text: #{$multiselect-dropdown-text};
611
+ --pa-multiselect-hint-bg: #{$multiselect-hint-bg};
612
+ --pa-multiselect-hint-border: #{$multiselect-hint-border};
613
+ --pa-multiselect-option-hover-bg: #{$multiselect-option-hover-bg};
614
+ --pa-multiselect-pill-bg: #{$multiselect-pill-bg};
615
+ --pa-multiselect-pill-border: #{$multiselect-pill-border};
616
+
617
+ // =========================================================================
618
+ // CUSTOM THEME COLORS (1-9)
619
+ // Themes can override $color-1 through $color-9 to define branded colors
620
+ // =========================================================================
621
+ --pa-color-1: #{$color-1};
622
+ --pa-color-2: #{$color-2};
623
+ --pa-color-3: #{$color-3};
624
+ --pa-color-4: #{$color-4};
625
+ --pa-color-5: #{$color-5};
626
+ --pa-color-6: #{$color-6};
627
+ --pa-color-7: #{$color-7};
628
+ --pa-color-8: #{$color-8};
629
+ --pa-color-9: #{$color-9};
630
+
631
+ // Theme color slots - text/contrast colors
632
+ --pa-color-1-text: #{$color-1-text};
633
+ --pa-color-2-text: #{$color-2-text};
634
+ --pa-color-3-text: #{$color-3-text};
635
+ --pa-color-4-text: #{$color-4-text};
636
+ --pa-color-5-text: #{$color-5-text};
637
+ --pa-color-6-text: #{$color-6-text};
638
+ --pa-color-7-text: #{$color-7-text};
639
+ --pa-color-8-text: #{$color-8-text};
640
+ --pa-color-9-text: #{$color-9-text};
641
+
642
+ // =========================================================================
643
+ // STRUCTURAL (themeable via CSS variables)
644
+ // =========================================================================
645
+ --pa-border-radius-sm: #{$border-radius-sm};
646
+ --pa-border-radius: #{$border-radius};
647
+ --pa-border-radius-lg: #{$border-radius-lg};
648
+ }
@@ -0,0 +1,37 @@
1
+ /* Pure Admin Visual Framework - Default Font Definitions */
2
+
3
+ // Default framework fonts - themes can override these
4
+ // Note: Font size classes for <html> are in _utilities.scss (use px values for correct rem scaling)
5
+
6
+ // Font family classes with system defaults
7
+ .font-family-system {
8
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
9
+
10
+ *, h1, h2, h3, h4, h5, h6, p, div, span, button, input, textarea, select {
11
+ font-family: inherit;
12
+ }
13
+ }
14
+
15
+ .font-family-sans {
16
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
17
+
18
+ *, h1, h2, h3, h4, h5, h6, p, div, span, button, input, textarea, select {
19
+ font-family: inherit;
20
+ }
21
+ }
22
+
23
+ .font-family-serif {
24
+ font-family: Georgia, "Times New Roman", Times, serif;
25
+
26
+ *, h1, h2, h3, h4, h5, h6, p, div, span, button, input, textarea, select {
27
+ font-family: inherit;
28
+ }
29
+ }
30
+
31
+ .font-family-mono {
32
+ font-family: "Courier New", Courier, monospace;
33
+
34
+ *, h1, h2, h3, h4, h5, h6, p, div, span, button, input, textarea, select {
35
+ font-family: inherit;
36
+ }
37
+ }