@keenmate/pure-admin-core 2.8.0 → 2.9.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.
package/README.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  Lightweight, data-focused CSS/SCSS admin framework with Corporate theme as default.
4
4
 
5
+ ## What's New in 2.9.0-rc01
6
+
7
+ - **`color-scheme` now emitted per theme via the new `$theme-color-scheme` SCSS variable.** Themes signal their colour scheme to the browser so native UA elements (scrollbars, form controls, `<input type="date">`) and the CSS `light-dark()` function resolve correctly. Previously themes applied dark palettes via `--pa-*` / `--base-*` overrides alone, so the browser still saw the host page as `color-scheme: normal` (effectively light) — embedded web components (`web-multiselect`, `web-daterangepicker`) using `light-dark()` for adaptive palettes silently picked the light value on dark themes. Themes set `$theme-color-scheme: dark` (always-dark) or add a one-line `color-scheme: dark;` to their `.pa-mode-dark` block (dual-mode). The unthemed `dist/css/main.css` now ships `color-scheme: light` at `:root`.
8
+ - **Six `--base-*` legacy aliases dropped (breaking for consumers using them directly).** `--base-surface-1`, `--base-surface-2`, `--base-surface-3`, `--base-surface-inverse`, `--base-primary-bg`, `--base-primary-bg-hover` are gone — they aliased to existing semantic tokens (`--base-main-bg` / `--base-page-bg` / `--base-subtle-bg` / `--base-inverse-bg`) with no behavioural difference and added taxonomy confusion. `--base-primary-bg` specifically broke `web-multiselect@1.10.0+` dark-mode hover (its smart `color-mix` fallback was short-circuited by our compile-time `#ffffff` emit). Migration: rename to the matching `--base-*-bg` semantic name; for `--base-primary-bg-hover` consumers, switch to `--base-hover-bg` or compose with `color-mix`.
9
+ - **Profile panel role chip migrated to `.pa-badge` (markup-breaking).** The bespoke `.pa-profile-panel__role` class hardcoded uppercase + letter-spacing and pointed at `--pa-header-profile-name-color`, which rendered as black-on-dark in panel context. Replaced with the standard `.pa-badge` component (theme-tuned for both modes). Snippet markup updated: `<span class="pa-profile-panel__role">…</span>` → `<span class="pa-badge">…</span>`. Use `.pa-badge--light` / `--primary` / `--info` / `--success` / `--warning` / `--danger` for variants.
10
+ - **Coloured card variants no longer leak white pixels around the header chrome.** Two independent causes addressed together — corner-radius mismatch at the header's TOP corners (header's 8px curved more than the card's effective 7px inner radius, exposing a thin slice of card bg) and a gray hairline along the header's BOTTOM edge (border-bottom stayed `--pa-border-color` on coloured variants). The header now omits `border-top-*-radius` (card's `overflow: hidden` clips it) and each variant overrides `border-bottom-color` to match its background. Affects `.pa-card--primary` / `--success` / `--warning` / `--danger` and `.pa-card--color-1` through `--color-9`.
11
+
5
12
  ## What's New in 2.8.0
6
13
 
7
14
  - **CSS variable defaults now ship at `:root` in `dist/css/main.css`.** The unthemed bundle previously had no `--pa-*` / `--base-*` values — they were emitted only by theme stylesheets, so consuming `@keenmate/pure-admin-core/css` standalone (or any page before its theme link resolved) left tokens unresolved and components rendered with broken fallbacks (KPI sparklines and deltas in near-black via inherited text colour, web components reverting to hardcoded literals). `main.scss` now emits `output-base-css-variables`, `output-pa-css-variables`, and `output-pa-alert-variables-light` at `:root` for a complete neutral default. Themes are unaffected — they emit their own `:root` from their theme file and all 15 themes rebuild byte-identical. Supersedes the partial 2.7.1-era sentiment-scale fallback patch.
@@ -10,14 +17,6 @@ Lightweight, data-focused CSS/SCSS admin framework with Corporate theme as defau
10
17
  - **`.pa-kpi-terminal` view-mode toggle generalised to a tab strip (Visual breaking).** `__viewtoggle`/`__viewbtn` renamed to `__tabs`/`__tab`; `data-view` attribute on the root is gone in favour of `data-tab` on tabs and panes; the per-tile `__value[data-mode]` triple-value mechanism is removed. Each tab now swaps in a separate `__pane` with its own tile set and grid layout — authors can put a different number of tiles (and a different grid modifier) behind each tab. JS contract: `initTerminalViewToggle` → `initTerminalTabs`.
11
18
  - **`.pa-kpi-strip` column toggles extended to a composable 2–5 column family.** Three independently composable toggle modifiers (`--no-prev`, `--no-delta`, `--no-target`) replace the previous fixed 4/5-col shapes, yielding eight visible-column combinations. Per-column header classes (`__head--metric`/`--now`/`--prev`/`--delta`/`--target`) keep the header row in sync with the data rows. Track widths lifted to local SCSS variables so the eight precomputed templates share one source of truth.
12
19
 
13
- ## What's New in 2.7.1
14
-
15
- - **KPI showcases promoted to permanent core components.** The seven showcase designs (terminal grid, sparkline list, comparison gauges, hero + supporting, bento, numeric strip, editorial minimal) graduate from demo-inline `<style>`/`<script>` blocks into framework components — ~500 lines of CSS and ~350 lines of JS now live in shared sources instead of duplicated inline blocks.
16
- - **Eight new core SCSS partials** under `core-components/`. `_kpi-base.scss` carries the chrome shared across all seven designs (`pa-kpi-header`, `pa-kpi-live` + pulse animation, `pa-kpi-footer`, `pa-kpi-detail` hover popover, `pa-kpi-spark-dot`/`-spark-wrap`, `pa-kpi-sectionhead`); seven design-specific files carry per-design layout + typography. All wired into `_core.scss` after `data-viz`.
17
- - **All `kpi-*` classes renamed to `pa-kpi-*`** to match the framework's BEM prefix rule. Element (`__header`, `__live`, `__footer`, `__detail`) and modifier (`--positive`, `--negative`, `--neutral`, `--up-strong`, `--down-strong`) structures preserved 1:1.
18
- - **Per-component cascade variables namespace-prefixed.** `--kpi-accent` → `--pa-kpi-accent`, `--kpi-bar-color` → `--pa-kpi-bar-color`. Gauge tick knobs (`--pa-kpi-gauge-tick-pos`, `--pa-kpi-gauge-tick-color`) keep their gauge-specific names.
19
- - **No new framework tokens.** All sentiment, popover-chrome, sparkline-geometry, contrast-tier, and surface tokens were already emitted by `_base-css-variables.scss` from the 2.6.0 consolidation — this release reuses them.
20
-
21
20
  ## Installation
22
21
 
23
22
  ```bash
package/dist/css/main.css CHANGED
@@ -5425,8 +5425,6 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5425
5425
  .pa-card__header {
5426
5426
  padding: 0.5rem 1rem;
5427
5427
  min-height: 4rem;
5428
- border-top-left-radius: 8px;
5429
- border-top-right-radius: 8px;
5430
5428
  border-bottom: 1px solid var(--pa-border-color);
5431
5429
  background: var(--pa-card-header-bg);
5432
5430
  display: flex;
@@ -5604,6 +5602,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5604
5602
  }
5605
5603
  .pa-card--primary .pa-card__header {
5606
5604
  background-color: var(--pa-accent);
5605
+ border-bottom-color: var(--pa-accent);
5607
5606
  color: var(--pa-btn-primary-text);
5608
5607
  }
5609
5608
  .pa-card--primary .pa-card__header h1,
@@ -5619,6 +5618,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5619
5618
  }
5620
5619
  .pa-card--success .pa-card__header {
5621
5620
  background-color: var(--pa-success-bg);
5621
+ border-bottom-color: var(--pa-success-bg);
5622
5622
  color: var(--pa-btn-success-text);
5623
5623
  }
5624
5624
  .pa-card--success .pa-card__header h1,
@@ -5634,6 +5634,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5634
5634
  }
5635
5635
  .pa-card--warning .pa-card__header {
5636
5636
  background-color: var(--pa-warning-bg);
5637
+ border-bottom-color: var(--pa-warning-bg);
5637
5638
  color: var(--pa-btn-warning-text);
5638
5639
  }
5639
5640
  .pa-card--warning .pa-card__header h1,
@@ -5649,6 +5650,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5649
5650
  }
5650
5651
  .pa-card--danger .pa-card__header {
5651
5652
  background-color: var(--pa-danger-bg);
5653
+ border-bottom-color: var(--pa-danger-bg);
5652
5654
  color: var(--pa-btn-danger-text);
5653
5655
  }
5654
5656
  .pa-card--danger .pa-card__header h1,
@@ -5695,6 +5697,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5695
5697
  }
5696
5698
  .pa-card--color-1 .pa-card__header {
5697
5699
  background-color: var(--pa-color-1);
5700
+ border-bottom-color: var(--pa-color-1);
5698
5701
  color: var(--pa-color-1-text);
5699
5702
  }
5700
5703
  .pa-card--color-1 .pa-card__header h1,
@@ -5710,6 +5713,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5710
5713
  }
5711
5714
  .pa-card--color-2 .pa-card__header {
5712
5715
  background-color: var(--pa-color-2);
5716
+ border-bottom-color: var(--pa-color-2);
5713
5717
  color: var(--pa-color-2-text);
5714
5718
  }
5715
5719
  .pa-card--color-2 .pa-card__header h1,
@@ -5725,6 +5729,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5725
5729
  }
5726
5730
  .pa-card--color-3 .pa-card__header {
5727
5731
  background-color: var(--pa-color-3);
5732
+ border-bottom-color: var(--pa-color-3);
5728
5733
  color: var(--pa-color-3-text);
5729
5734
  }
5730
5735
  .pa-card--color-3 .pa-card__header h1,
@@ -5740,6 +5745,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5740
5745
  }
5741
5746
  .pa-card--color-4 .pa-card__header {
5742
5747
  background-color: var(--pa-color-4);
5748
+ border-bottom-color: var(--pa-color-4);
5743
5749
  color: var(--pa-color-4-text);
5744
5750
  }
5745
5751
  .pa-card--color-4 .pa-card__header h1,
@@ -5755,6 +5761,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5755
5761
  }
5756
5762
  .pa-card--color-5 .pa-card__header {
5757
5763
  background-color: var(--pa-color-5);
5764
+ border-bottom-color: var(--pa-color-5);
5758
5765
  color: var(--pa-color-5-text);
5759
5766
  }
5760
5767
  .pa-card--color-5 .pa-card__header h1,
@@ -5770,6 +5777,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5770
5777
  }
5771
5778
  .pa-card--color-6 .pa-card__header {
5772
5779
  background-color: var(--pa-color-6);
5780
+ border-bottom-color: var(--pa-color-6);
5773
5781
  color: var(--pa-color-6-text);
5774
5782
  }
5775
5783
  .pa-card--color-6 .pa-card__header h1,
@@ -5785,6 +5793,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5785
5793
  }
5786
5794
  .pa-card--color-7 .pa-card__header {
5787
5795
  background-color: var(--pa-color-7);
5796
+ border-bottom-color: var(--pa-color-7);
5788
5797
  color: var(--pa-color-7-text);
5789
5798
  }
5790
5799
  .pa-card--color-7 .pa-card__header h1,
@@ -5800,6 +5809,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5800
5809
  }
5801
5810
  .pa-card--color-8 .pa-card__header {
5802
5811
  background-color: var(--pa-color-8);
5812
+ border-bottom-color: var(--pa-color-8);
5803
5813
  color: var(--pa-color-8-text);
5804
5814
  }
5805
5815
  .pa-card--color-8 .pa-card__header h1,
@@ -5815,6 +5825,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5815
5825
  }
5816
5826
  .pa-card--color-9 .pa-card__header {
5817
5827
  background-color: var(--pa-color-9);
5828
+ border-bottom-color: var(--pa-color-9);
5818
5829
  color: var(--pa-color-9-text);
5819
5830
  }
5820
5831
  .pa-card--color-9 .pa-card__header h1,
@@ -12264,18 +12275,6 @@ code {
12264
12275
  text-overflow: ellipsis;
12265
12276
  white-space: nowrap;
12266
12277
  }
12267
- .pa-profile-panel__role {
12268
- display: inline-block;
12269
- padding: 0.8rem 1.2rem;
12270
- background-color: var(--pa-accent-light);
12271
- background-color: color-mix(in srgb, var(--pa-header-profile-name-color) 15%, transparent);
12272
- color: var(--pa-header-profile-name-color);
12273
- font-size: 1.2rem;
12274
- font-weight: 500;
12275
- border-radius: var(--pa-border-radius);
12276
- text-transform: uppercase;
12277
- letter-spacing: 0.5px;
12278
- }
12279
12278
  .pa-profile-panel__close {
12280
12279
  position: absolute;
12281
12280
  top: 1.6rem;
@@ -19321,12 +19320,6 @@ html.pa-font-base-12 {
19321
19320
  --base-active-bg: rgb(218.2368421053, 223.25, 228.2631578947);
19322
19321
  --base-disabled-bg: #e9ecef;
19323
19322
  --base-elevated-bg: #f5f5f5;
19324
- --base-surface-1: #ffffff;
19325
- --base-surface-2: #f8f9fa;
19326
- --base-surface-3: #e9ecef;
19327
- --base-surface-inverse: #2c3e50;
19328
- --base-primary-bg: #ffffff;
19329
- --base-primary-bg-hover: rgb(242.25, 242.25, 242.25);
19330
19323
  --base-border-color: #e1e5e9;
19331
19324
  --base-border: 1px solid #e1e5e9;
19332
19325
  --base-input-bg: #ffffff;
@@ -19401,6 +19394,7 @@ html.pa-font-base-12 {
19401
19394
  --base-border-radius-sm: 0.4;
19402
19395
  --base-border-radius-md: 0.6;
19403
19396
  --base-border-radius-lg: 0.8;
19397
+ color-scheme: light;
19404
19398
  --pa-main-bg: #f8f9fa;
19405
19399
  --pa-page-bg: #f8f9fa;
19406
19400
  --pa-subtle-bg: #ffffff;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keenmate/pure-admin-core",
3
- "version": "2.8.0",
3
+ "version": "2.9.0-rc01",
4
4
  "description": "Lightweight, data-focused HTML/CSS admin framework built with PureCSS foundation and comprehensive component system",
5
5
  "style": "dist/css/main.css",
6
6
  "exports": {
@@ -58,7 +58,7 @@ to save horizontal space in the navbar.
58
58
  <!-- title= attrs give a tooltip when the text truncates with ellipsis -->
59
59
  <h3 class="pa-profile-panel__name" title="John Doe">John Doe</h3>
60
60
  <p class="pa-profile-panel__email" title="john.doe@company.com">john.doe@company.com</p>
61
- <span class="pa-profile-panel__role">Administrator</span>
61
+ <span class="pa-badge">Administrator</span>
62
62
  </div>
63
63
  <button class="pa-profile-panel__close" onclick="closeProfilePanel()" aria-label="Close Profile">
64
64
 
@@ -124,7 +124,7 @@ to save horizontal space in the navbar.
124
124
  <div class="pa-profile-panel__info">
125
125
  <h3 class="pa-profile-panel__name">John Doe</h3>
126
126
  <p class="pa-profile-panel__email">john.doe@company.com</p>
127
- <span class="pa-profile-panel__role">Administrator</span>
127
+ <span class="pa-badge">Administrator</span>
128
128
  </div>
129
129
  <button class="pa-profile-panel__close" onclick="closeProfilePanel()" aria-label="Close Profile">✕</button>
130
130
  </div>
@@ -170,7 +170,7 @@ to save horizontal space in the navbar.
170
170
  <div class="pa-profile-panel__info">
171
171
  <h3 class="pa-profile-panel__name">Jane Smith</h3>
172
172
  <p class="pa-profile-panel__email">jane.smith@corp.example</p>
173
- <span class="pa-profile-panel__role">Analyst</span>
173
+ <span class="pa-badge">Analyst</span>
174
174
  </div>
175
175
  <button class="pa-profile-panel__close" onclick="closeProfilePanel()" aria-label="Close Profile">✕</button>
176
176
  </div>
@@ -207,7 +207,7 @@ to save horizontal space in the navbar.
207
207
  <div class="pa-profile-panel__info">
208
208
  <h3 class="pa-profile-panel__name">John Doe</h3>
209
209
  <p class="pa-profile-panel__email">john.doe@company.com</p>
210
- <span class="pa-profile-panel__role">Administrator</span>
210
+ <span class="pa-badge">Administrator</span>
211
211
  </div>
212
212
  <button class="pa-profile-panel__close" onclick="closeProfilePanel()" aria-label="Close Profile">✕</button>
213
213
  </div>
@@ -425,7 +425,10 @@ HEADER:
425
425
  - .pa-profile-panel__info Text column (name + email + role).
426
426
  - .pa-profile-panel__name User name (ellipsis on overflow).
427
427
  - .pa-profile-panel__email Email (ellipsis on overflow).
428
- - .pa-profile-panel__role Role badge (uppercase, tinted bg).
428
+ - .pa-badge Role chip (standard badge component;
429
+ add `.pa-badge--primary` / `--info` /
430
+ `--success` / `--warning` / `--danger`
431
+ / `--light` for variant styling).
429
432
  - .pa-profile-panel__close Close button (top-end corner).
430
433
 
431
434
  Theme-colour design choices (why they're like this):
@@ -433,11 +436,13 @@ Theme-colour design choices (why they're like this):
433
436
  colour the header uses for the user's name. This guarantees contrast
434
437
  against dark / coloured header backgrounds across all themes (body
435
438
  text colours would read wrong on a dark header).
436
- - __role paints its background with color-mix(in srgb,
437
- var(--pa-header-profile-name-color) 15%, transparent) so the tint is
438
- derived from the header colour and works on any theme. An older
439
- --pa-accent-light fallback is declared first for browsers without
440
- color-mix.
439
+ - Role uses the standard `.pa-badge` component (var(--pa-btn-secondary-bg)
440
+ / -text by default), which themes already tune for both light and dark
441
+ modes. Previously this was a custom `.pa-profile-panel__role` element
442
+ coupled to --pa-header-profile-name-color that token is sized for the
443
+ header (e.g. black on yellow in Express) and went invisible on dark
444
+ panel bodies. Migrated to `.pa-badge` in 2.9.0; older snippet markup
445
+ using `pa-profile-panel__role` needs the class swap.
441
446
 
442
447
  TABS (optional — sits between __header and __body):
443
448
  - .pa-profile-panel__tabs Tabs container (border-bottom + header-bg).
@@ -47,14 +47,6 @@
47
47
  --base-disabled-bg: #{$base-disabled-bg};
48
48
  --base-elevated-bg: #{$base-elevated-bg};
49
49
 
50
- // === Background Colors (legacy aliases) ===
51
- --base-surface-1: #{$base-surface-1};
52
- --base-surface-2: #{$base-surface-2};
53
- --base-surface-3: #{$base-surface-3};
54
- --base-surface-inverse: #{$base-surface-inverse};
55
- --base-primary-bg: #{$base-primary-bg};
56
- --base-primary-bg-hover: #{$base-primary-bg-hover};
57
-
58
50
  // === Border Colors ===
59
51
  --base-border-color: #{$base-border-color};
60
52
  --base-border: #{$base-border};
@@ -265,6 +257,18 @@
265
257
  // ============================================================================
266
258
 
267
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
+
268
272
  // =========================================================================
269
273
  // CORE COLORS
270
274
  // =========================================================================
@@ -23,8 +23,13 @@
23
23
  &__header {
24
24
  padding: $card-header-padding-v $card-header-padding-h;
25
25
  min-height: $card-header-min-height;
26
- border-top-left-radius: $card-border-radius;
27
- border-top-right-radius: $card-border-radius;
26
+ // No own border-top-radius — the card's `overflow: hidden` + outer
27
+ // border-radius clips the header's square top corners to match. Setting
28
+ // a radius here makes the header curve at 8px while the card's INNER
29
+ // corner is ~7px (outer 8px minus the 1px border), leaving a thin
30
+ // wedge of card background visible at each top corner — most obvious
31
+ // on coloured variants (--primary/--success/--warning/--danger/--color-*)
32
+ // where the wedge shows as a white sliver against the variant colour.
28
33
  border-bottom: $border-width-base solid var(--pa-border-color);
29
34
  background: var(--pa-card-header-bg);
30
35
  display: flex;
@@ -240,11 +245,15 @@
240
245
  }
241
246
 
242
247
  // Card variants
248
+ // Coloured variants override the header's border-bottom-color to match the
249
+ // variant — otherwise the default light-gray hairline shows as a visible
250
+ // strip against the coloured surroundings (header bg + card border above).
243
251
  &--primary {
244
252
  border-color: var(--pa-accent);
245
253
 
246
254
  .pa-card__header {
247
255
  background-color: var(--pa-accent);
256
+ border-bottom-color: var(--pa-accent);
248
257
  color: var(--pa-btn-primary-text);
249
258
 
250
259
  h1,
@@ -263,6 +272,7 @@
263
272
 
264
273
  .pa-card__header {
265
274
  background-color: var(--pa-success-bg);
275
+ border-bottom-color: var(--pa-success-bg);
266
276
  color: var(--pa-btn-success-text);
267
277
 
268
278
  h1,
@@ -281,6 +291,7 @@
281
291
 
282
292
  .pa-card__header {
283
293
  background-color: var(--pa-warning-bg);
294
+ border-bottom-color: var(--pa-warning-bg);
284
295
  color: var(--pa-btn-warning-text);
285
296
 
286
297
  h1,
@@ -299,6 +310,7 @@
299
310
 
300
311
  .pa-card__header {
301
312
  background-color: var(--pa-danger-bg);
313
+ border-bottom-color: var(--pa-danger-bg);
302
314
  color: var(--pa-btn-danger-text);
303
315
 
304
316
  h1,
@@ -366,6 +378,7 @@
366
378
 
367
379
  .pa-card__header {
368
380
  background-color: var(--pa-color-#{$i});
381
+ border-bottom-color: var(--pa-color-#{$i});
369
382
  color: var(--pa-color-#{$i}-text);
370
383
 
371
384
  h1,
@@ -162,20 +162,12 @@
162
162
  white-space: nowrap;
163
163
  }
164
164
 
165
- &__role {
166
- display: inline-block;
167
- padding: $btn-padding-v $btn-padding-h;
168
- // Tinted bg derived from the header's name color so it reads on any
169
- // header dark or light. Fallback kept for older browsers.
170
- background-color: var(--pa-accent-light);
171
- background-color: color-mix(in srgb, var(--pa-header-profile-name-color) 15%, transparent);
172
- color: var(--pa-header-profile-name-color);
173
- font-size: $font-size-xs;
174
- font-weight: $font-weight-medium;
175
- border-radius: var(--pa-border-radius);
176
- text-transform: uppercase;
177
- letter-spacing: $profile-role-letter-spacing;
178
- }
165
+ // Role badge: use the standard `.pa-badge` component in markup instead of
166
+ // a custom `__role` element. Previously this declared its own bg/colour/
167
+ // padding/uppercase styling — duplicating badge work that already existed
168
+ // in the framework, and coupling to `--pa-header-profile-name-color` which
169
+ // went invisible inside dark-mode panel bodies. Snippets and demo markup
170
+ // updated accordingly in 2.9.0.
179
171
 
180
172
  &__close {
181
173
  position: absolute;
@@ -50,14 +50,6 @@ $base-hover-bg: $base-subtle-bg !default; // Hover state background
50
50
  $base-active-bg: color.adjust($base-subtle-bg, $lightness: -5%) !default; // Active/pressed state
51
51
  $base-disabled-bg: $base-subtle-bg !default; // Disabled element background
52
52
 
53
- // Legacy aliases (backward compatibility)
54
- $base-surface-1: $base-main-bg !default;
55
- $base-surface-2: $base-page-bg !default;
56
- $base-surface-3: $base-subtle-bg !default;
57
- $base-surface-inverse: $base-inverse-bg !default;
58
- $base-primary-bg: $base-main-bg !default;
59
- $base-primary-bg-hover: color.adjust($base-main-bg, $lightness: -5%) !default;
60
-
61
53
  // =============================================================================
62
54
  // BORDER COLORS
63
55
  // Border colors and shorthand
@@ -71,7 +63,7 @@ $base-border: 1px solid $base-border-color !default;
71
63
  // Input field styling and states
72
64
  // =============================================================================
73
65
 
74
- $base-input-bg: $base-surface-1 !default;
66
+ $base-input-bg: $base-main-bg !default;
75
67
  $base-input-color: #495057 !default;
76
68
  $base-input-border: 1px solid #ced4da !default;
77
69
  $base-input-border-hover: 1px solid #b8bfc6 !default;
@@ -91,7 +83,7 @@ $base-input-size-xl-height: 4.1 !default; // 41px
91
83
  // Floating element styling
92
84
  // =============================================================================
93
85
 
94
- $base-dropdown-bg: $base-surface-1 !default;
86
+ $base-dropdown-bg: $base-main-bg !default;
95
87
  $base-dropdown-border: 1px solid $base-border-color !default;
96
88
  $base-dropdown-box-shadow: 0 8px 16px $base-shadow-color !default;
97
89
 
@@ -100,7 +92,7 @@ $base-dropdown-box-shadow: 0 8px 16px $base-shadow-color !default;
100
92
  // Tooltip styling
101
93
  // =============================================================================
102
94
 
103
- $base-tooltip-bg: $base-surface-inverse !default;
95
+ $base-tooltip-bg: $base-inverse-bg !default;
104
96
  $base-tooltip-text-color: #ffffff !default;
105
97
 
106
98
  // =============================================================================
@@ -20,23 +20,23 @@ $text-color-2: $base-text-color-2 !default;
20
20
  $border-color: $base-border-color !default;
21
21
 
22
22
  // Header colors
23
- $header-bg: $base-surface-1 !default;
23
+ $header-bg: $base-main-bg !default;
24
24
  $header-border-color: $base-border-color !default;
25
25
  $header-text: $base-text-color-1 !default;
26
26
  $header-text-secondary: $base-text-color-2 !default;
27
27
  $header-profile-name-color: $base-text-color-1 !default;
28
28
 
29
29
  // Sidebar colors
30
- $sidebar-bg: $base-surface-2 !default;
30
+ $sidebar-bg: $base-page-bg !default;
31
31
  $sidebar-text: $base-text-color-1 !default;
32
32
  $sidebar-text-secondary: $base-text-color-2 !default;
33
- $sidebar-submenu-bg: $base-surface-3 !default;
34
- $sidebar-submenu-hover-bg: color.adjust($base-surface-3, $lightness: -5%) !default;
35
- $sidebar-submenu-active-bg: color.adjust($base-surface-3, $lightness: -10%) !default;
33
+ $sidebar-submenu-bg: $base-subtle-bg !default;
34
+ $sidebar-submenu-hover-bg: color.adjust($base-subtle-bg, $lightness: -5%) !default;
35
+ $sidebar-submenu-active-bg: color.adjust($base-subtle-bg, $lightness: -10%) !default;
36
36
  $sidebar-submenu-active-text: $sidebar-text !default;
37
37
 
38
38
  // Footer colors
39
- $footer-bg: $base-surface-1 !default;
39
+ $footer-bg: $base-main-bg !default;
40
40
  $footer-border-color: $base-border-color !default;
41
41
 
42
42
  // Accent colors (derived from base)
@@ -48,10 +48,10 @@ $accent-light: $base-accent-color-light !default;
48
48
  // CARD COLORS (derived from base surfaces)
49
49
  // =============================================================================
50
50
 
51
- $card-bg: $base-surface-1 !default;
52
- $card-header-bg: $base-surface-2 !default;
53
- $card-footer-bg: $base-surface-1 !default;
54
- $card-tabs-bg: $base-surface-2 !default;
51
+ $card-bg: $base-main-bg !default;
52
+ $card-header-bg: $base-page-bg !default;
53
+ $card-footer-bg: $base-main-bg !default;
54
+ $card-tabs-bg: $base-page-bg !default;
55
55
 
56
56
  // =============================================================================
57
57
  // INPUT COLORS (derived from base input vars)
@@ -65,10 +65,10 @@ $input-text: $base-input-color !default;
65
65
  // TABLE COLORS (derived from base surfaces)
66
66
  // =============================================================================
67
67
 
68
- $table-stripe: $base-surface-2 !default;
69
- $table-bg: $base-surface-1 !default;
70
- $table-header-bg: $base-surface-2 !default;
71
- $table-hover-bg: $base-surface-2 !default;
68
+ $table-stripe: $base-page-bg !default;
69
+ $table-bg: $base-main-bg !default;
70
+ $table-header-bg: $base-page-bg !default;
71
+ $table-hover-bg: $base-page-bg !default;
72
72
 
73
73
  // Table row hover accent (border)
74
74
  $table-hover-accent-width: 0 !default;
@@ -111,8 +111,8 @@ $btn-info-bg-hover: $base-info-color-hover !default;
111
111
  $btn-info-text: $base-text-on-info !default;
112
112
 
113
113
  // Light button
114
- $btn-light-bg: $base-surface-2 !default;
115
- $btn-light-bg-hover: $base-surface-3 !default;
114
+ $btn-light-bg: $base-page-bg !default;
115
+ $btn-light-bg-hover: $base-subtle-bg !default;
116
116
  $btn-light-text: $base-text-color-1 !default;
117
117
 
118
118
  // Dark button
@@ -164,9 +164,9 @@ $info-text-light: $base-info-text-light !default;
164
164
  $secondary-bg: $btn-secondary-bg !default;
165
165
  $secondary-bg-hover: $btn-secondary-bg-hover !default;
166
166
  $secondary-text: #383d41 !default;
167
- $secondary-light-bg: $base-surface-3 !default;
167
+ $secondary-light-bg: $base-subtle-bg !default;
168
168
  $secondary-light-text: $base-text-color-1 !default;
169
- $secondary-lighter-bg: $base-surface-3 !default;
169
+ $secondary-lighter-bg: $base-subtle-bg !default;
170
170
 
171
171
  // =============================================================================
172
172
  // TOOLTIP & POPOVER COLORS (derived from base)
@@ -177,7 +177,7 @@ $tooltip-text: $base-tooltip-text-color !default;
177
177
 
178
178
  $popover-text-light: #ffffff !default;
179
179
  $popover-text-dark: #000000 !default;
180
- $popover-content-bg: $base-surface-1 !default;
180
+ $popover-content-bg: $base-main-bg !default;
181
181
 
182
182
  // =============================================================================
183
183
  // CODE LANGUAGE COLORS (standalone - not themed)
@@ -143,7 +143,6 @@ $profile-section-gap: $spacing-xl !default;
143
143
  $profile-overlay-bg: rgba(0, 0, 0, 0.3) !default;
144
144
  $profile-button-padding-v: $spacing-sm !default;
145
145
  $profile-button-padding-h: $spacing-md !default;
146
- $profile-role-letter-spacing: 0.5px !default;
147
146
  $profile-panel-mobile-max-width: 40rem !default; // 400px (was 25rem)
148
147
  $profile-panel-content-padding: 1.6rem !default; // Matches sidebar-padding horizontal (16px)
149
148
 
@@ -3,6 +3,14 @@
3
3
  // Z-index, opacity, transitions, animations, shadows
4
4
  // ============================================================================
5
5
 
6
+ // Theme color-scheme signal to the browser. Drives native UA elements
7
+ // (scrollbars, form controls) and the `light-dark()` CSS function. Themes
8
+ // override BEFORE `@import variables/index`. Values: `light`, `dark`,
9
+ // `light dark` (let OS preference decide), or `only light` / `only dark`
10
+ // to ignore OS preference. Per-mode overrides (e.g. `color-scheme: dark;`
11
+ // inside a `.pa-mode-dark` block) take precedence via the cascade.
12
+ $theme-color-scheme: light !default;
13
+
6
14
  // Z-index scale (increments of 1000 for easy adjustment)
7
15
  $z-index-base: 0 !default;
8
16
  $z-index-content: 1000 !default;
@@ -1,11 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(mkdir:*)",
5
- "Read(//c/Git/KM/pure-admin/pure-admin-visual/**)",
6
- "Bash(npm run build-all:*)"
7
- ],
8
- "deny": [],
9
- "ask": []
10
- }
11
- }