@keenmate/pure-admin-core 2.5.0 → 2.7.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.
Files changed (32) hide show
  1. package/README.md +25 -14
  2. package/dist/css/main.css +379 -297
  3. package/package.json +1 -1
  4. package/src/scss/_base-css-variables.scss +157 -32
  5. package/src/scss/core-components/_alerts.scss +2 -2
  6. package/src/scss/core-components/_base.scss +19 -2
  7. package/src/scss/core-components/_buttons.scss +12 -8
  8. package/src/scss/core-components/_callouts.scss +1 -1
  9. package/src/scss/core-components/_cards.scss +4 -4
  10. package/src/scss/core-components/_checkbox-lists.scss +2 -2
  11. package/src/scss/core-components/_comparison.scss +7 -4
  12. package/src/scss/core-components/_data-display.scss +24 -15
  13. package/src/scss/core-components/_data-viz.scss +140 -132
  14. package/src/scss/core-components/_file-selector.scss +34 -34
  15. package/src/scss/core-components/_lists.scss +4 -4
  16. package/src/scss/core-components/_logic-tree.scss +2 -2
  17. package/src/scss/core-components/_modals.scss +69 -0
  18. package/src/scss/core-components/_notifications.scss +17 -17
  19. package/src/scss/core-components/_popconfirm.scss +1 -1
  20. package/src/scss/core-components/_statistics.scss +40 -37
  21. package/src/scss/core-components/_tabs.scss +12 -12
  22. package/src/scss/core-components/_timeline.scss +30 -30
  23. package/src/scss/core-components/badges/_composite-badge-variants.scss +7 -7
  24. package/src/scss/core-components/badges/_composite-badge.scss +1 -1
  25. package/src/scss/core-components/badges/_labels.scss +6 -6
  26. package/src/scss/core-components/forms/_input-wrapper.scss +1 -1
  27. package/src/scss/core-components/forms/_query-editor.scss +10 -10
  28. package/src/scss/core-components/layout/_sidebar-states.scss +1 -0
  29. package/src/scss/core-components/layout/_sidebar.scss +1 -0
  30. package/src/scss/variables/_base.scss +15 -3
  31. package/src/scss/variables/_colors.scss +1 -0
  32. package/src/scss/variables/_components.scss +26 -14
@@ -37,65 +37,65 @@
37
37
  width: $timeline-simple-dot-size;
38
38
  height: $timeline-simple-dot-size;
39
39
  background: var(--pa-main-bg);
40
- border: $timeline-simple-dot-border solid $accent-color;
41
- border-radius: 50%;
42
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($accent-color, $timeline-simple-dot-shadow-opacity);
40
+ border: $timeline-simple-dot-border solid var(--pa-accent);
41
+ border-radius: $timeline-simple-dot-border-radius;
42
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur color-mix(in srgb, var(--pa-accent) #{$timeline-simple-dot-shadow-opacity * 100%}, transparent);
43
43
  }
44
44
 
45
45
  // Marker color modifiers
46
46
  &--primary::before {
47
- border-color: $btn-primary-bg;
48
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($btn-primary-bg, $timeline-simple-dot-shadow-opacity);
47
+ border-color: var(--pa-btn-primary-bg);
48
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur color-mix(in srgb, var(--pa-btn-primary-bg) #{$timeline-simple-dot-shadow-opacity * 100%}, transparent);
49
49
  }
50
50
 
51
51
  &--success::before {
52
- border-color: $success-bg;
53
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($success-bg, $timeline-simple-dot-shadow-opacity);
52
+ border-color: var(--pa-success);
53
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur color-mix(in srgb, var(--pa-success) #{$timeline-simple-dot-shadow-opacity * 100%}, transparent);
54
54
  }
55
55
 
56
56
  &--warning::before {
57
- border-color: $warning-bg;
58
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($warning-bg, $timeline-simple-dot-shadow-opacity);
57
+ border-color: var(--pa-warning);
58
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur color-mix(in srgb, var(--pa-warning) #{$timeline-simple-dot-shadow-opacity * 100%}, transparent);
59
59
  }
60
60
 
61
61
  &--danger::before {
62
- border-color: $danger-bg;
63
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($danger-bg, $timeline-simple-dot-shadow-opacity);
62
+ border-color: var(--pa-danger);
63
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur color-mix(in srgb, var(--pa-danger) #{$timeline-simple-dot-shadow-opacity * 100%}, transparent);
64
64
  }
65
65
 
66
66
  &--info::before {
67
- border-color: $info-bg;
68
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($info-bg, $timeline-simple-dot-shadow-opacity);
67
+ border-color: var(--pa-info);
68
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur color-mix(in srgb, var(--pa-info) #{$timeline-simple-dot-shadow-opacity * 100%}, transparent);
69
69
  }
70
70
 
71
71
  &--secondary::before {
72
72
  border-color: var(--pa-text-color-2);
73
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba(var(--pa-text-color-2), $timeline-simple-dot-shadow-opacity);
73
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur color-mix(in srgb, var(--pa-text-color-2) #{$timeline-simple-dot-shadow-opacity * 100%}, transparent);
74
74
  }
75
75
 
76
76
  // Filled/solid bullet modifier
77
77
  &--filled::before {
78
- background: $accent-color;
78
+ background: var(--pa-accent);
79
79
  }
80
80
 
81
81
  &--filled.pa-timeline__item--primary::before {
82
- background: $btn-primary-bg;
82
+ background: var(--pa-btn-primary-bg);
83
83
  }
84
84
 
85
85
  &--filled.pa-timeline__item--success::before {
86
- background: $success-bg;
86
+ background: var(--pa-success);
87
87
  }
88
88
 
89
89
  &--filled.pa-timeline__item--warning::before {
90
- background: $warning-bg;
90
+ background: var(--pa-warning);
91
91
  }
92
92
 
93
93
  &--filled.pa-timeline__item--danger::before {
94
- background: $danger-bg;
94
+ background: var(--pa-danger);
95
95
  }
96
96
 
97
97
  &--filled.pa-timeline__item--info::before {
98
- background: $info-bg;
98
+ background: var(--pa-info);
99
99
  }
100
100
 
101
101
  &--filled.pa-timeline__item--secondary::before {
@@ -131,7 +131,7 @@
131
131
  content: '';
132
132
  position: absolute;
133
133
  width: $timeline-block-line-width;
134
- background: $accent-color;
134
+ background: var(--pa-accent);
135
135
  top: 0;
136
136
  bottom: 0;
137
137
  left: 50%;
@@ -184,7 +184,7 @@
184
184
  height: $timeline-block-connector-height;
185
185
  top: $timeline-block-connector-top-offset;
186
186
  right: $timeline-block-connector-horizontal-offset;
187
- background: $accent-color;
187
+ background: var(--pa-accent);
188
188
  z-index: 1;
189
189
  }
190
190
  }
@@ -229,7 +229,7 @@
229
229
  height: $timeline-block-connector-height;
230
230
  top: $timeline-block-connector-top-offset;
231
231
  left: $timeline-block-connector-horizontal-offset;
232
- background: $accent-color;
232
+ background: var(--pa-accent);
233
233
  z-index: 1;
234
234
  }
235
235
  }
@@ -242,7 +242,7 @@
242
242
  text-align: center;
243
243
  font-size: $font-size-sm;
244
244
  font-weight: $font-weight-bold;
245
- color: $accent-color;
245
+ color: var(--pa-accent);
246
246
  text-transform: uppercase;
247
247
  letter-spacing: $timeline-block-date-letter-spacing;
248
248
  z-index: 1;
@@ -256,16 +256,16 @@
256
256
  width: $timeline-block-icon-size;
257
257
  height: $timeline-block-icon-size;
258
258
  top: $timeline-block-icon-top-offset;
259
- background: $warning-bg;
260
- border: $timeline-block-icon-border solid $accent-color;
259
+ background: var(--pa-warning);
260
+ border: $timeline-block-icon-border solid var(--pa-accent);
261
261
  border-radius: 50%;
262
262
  font-size: $font-size-lg;
263
- color: $accent-color;
263
+ color: var(--pa-accent);
264
264
  z-index: 1;
265
265
  }
266
266
 
267
267
  .pa-timeline__content {
268
- background: $warning-bg;
268
+ background: var(--pa-warning);
269
269
  position: relative;
270
270
 
271
271
  h3 {
@@ -279,7 +279,7 @@
279
279
  margin: 0;
280
280
  font-size: $font-size-base;
281
281
  line-height: $line-height-relaxed;
282
- color: $warning-text;
282
+ color: var(--pa-warning-text);
283
283
  }
284
284
  }
285
285
 
@@ -475,7 +475,7 @@
475
475
  line-height: $line-height-relaxed;
476
476
 
477
477
  a {
478
- color: $accent-color;
478
+ color: var(--pa-accent);
479
479
  text-decoration: none;
480
480
  font-weight: $font-weight-medium;
481
481
 
@@ -316,7 +316,7 @@
316
316
  }
317
317
 
318
318
  &:focus {
319
- box-shadow: 0 0 0 $focus-outline-width rgba($btn-primary-bg, $btn-focus-ring-opacity);
319
+ box-shadow: 0 0 0 $focus-outline-width color-mix(in srgb, var(--pa-btn-primary-bg) #{$btn-focus-ring-opacity * 100%}, transparent);
320
320
  }
321
321
  }
322
322
 
@@ -328,7 +328,7 @@
328
328
  }
329
329
 
330
330
  &:focus {
331
- box-shadow: 0 0 0 $focus-outline-width rgba($btn-secondary-bg, $btn-focus-ring-opacity);
331
+ box-shadow: 0 0 0 $focus-outline-width color-mix(in srgb, var(--pa-btn-secondary-bg) #{$btn-focus-ring-opacity * 100%}, transparent);
332
332
  }
333
333
  }
334
334
 
@@ -340,7 +340,7 @@
340
340
  }
341
341
 
342
342
  &:focus {
343
- box-shadow: 0 0 0 $focus-outline-width rgba($btn-success-bg, $btn-focus-ring-opacity);
343
+ box-shadow: 0 0 0 $focus-outline-width color-mix(in srgb, var(--pa-success) #{$btn-focus-ring-opacity * 100%}, transparent);
344
344
  }
345
345
  }
346
346
 
@@ -353,7 +353,7 @@
353
353
  }
354
354
 
355
355
  &:focus {
356
- box-shadow: 0 0 0 $focus-outline-width rgba($btn-warning-bg, $btn-focus-ring-opacity);
356
+ box-shadow: 0 0 0 $focus-outline-width color-mix(in srgb, var(--pa-warning) #{$btn-focus-ring-opacity * 100%}, transparent);
357
357
  }
358
358
  }
359
359
 
@@ -365,7 +365,7 @@
365
365
  }
366
366
 
367
367
  &:focus {
368
- box-shadow: 0 0 0 $focus-outline-width rgba($btn-info-bg, $btn-focus-ring-opacity);
368
+ box-shadow: 0 0 0 $focus-outline-width color-mix(in srgb, var(--pa-info) #{$btn-focus-ring-opacity * 100%}, transparent);
369
369
  }
370
370
  }
371
371
 
@@ -378,7 +378,7 @@
378
378
  }
379
379
 
380
380
  &:focus {
381
- box-shadow: 0 0 0 $focus-outline-width rgba($btn-light-bg, $btn-focus-ring-opacity);
381
+ box-shadow: 0 0 0 $focus-outline-width color-mix(in srgb, var(--pa-btn-light-bg) #{$btn-focus-ring-opacity * 100%}, transparent);
382
382
  }
383
383
  }
384
384
 
@@ -390,7 +390,7 @@
390
390
  }
391
391
 
392
392
  &:focus {
393
- box-shadow: 0 0 0 $focus-outline-width rgba($btn-dark-bg, $btn-focus-ring-opacity);
393
+ box-shadow: 0 0 0 $focus-outline-width color-mix(in srgb, var(--pa-btn-dark-bg) #{$btn-focus-ring-opacity * 100%}, transparent);
394
394
  }
395
395
  }
396
396
  }
@@ -64,7 +64,7 @@
64
64
 
65
65
  &:focus {
66
66
  outline: none;
67
- box-shadow: 0 0 0 $focus-outline-width rgba($danger-bg, $btn-focus-ring-opacity);
67
+ box-shadow: 0 0 0 $focus-outline-width color-mix(in srgb, var(--pa-danger) #{$btn-focus-ring-opacity * 100%}, transparent);
68
68
  }
69
69
  }
70
70
  }
@@ -74,17 +74,17 @@
74
74
  }
75
75
 
76
76
  &--secondary {
77
- background-color: rgba($secondary-bg, $opacity-light);
78
- color: $secondary-bg;
79
- border-color: $secondary-bg;
77
+ background-color: color-mix(in srgb, var(--pa-btn-secondary-bg) #{$opacity-light * 100%}, transparent);
78
+ color: var(--pa-btn-secondary-bg);
79
+ border-color: var(--pa-btn-secondary-bg);
80
80
 
81
81
  &.pa-label--outline {
82
82
  background-color: transparent;
83
- color: $secondary-bg;
84
- border-color: $secondary-bg;
83
+ color: var(--pa-btn-secondary-bg);
84
+ border-color: var(--pa-btn-secondary-bg);
85
85
 
86
86
  &:hover {
87
- background-color: rgba($secondary-bg, $opacity-light);
87
+ background-color: color-mix(in srgb, var(--pa-btn-secondary-bg) #{$opacity-light * 100%}, transparent);
88
88
  }
89
89
  }
90
90
  }
@@ -38,7 +38,7 @@
38
38
 
39
39
  &:hover {
40
40
  opacity: 1;
41
- color: $danger-bg;
41
+ color: var(--pa-danger);
42
42
  }
43
43
 
44
44
  &:focus {
@@ -36,8 +36,8 @@
36
36
 
37
37
  &__field {
38
38
  display: inline;
39
- background-color: rgba($accent-color, 0.15);
40
- color: $accent-color;
39
+ background-color: color-mix(in srgb, var(--pa-accent) 15%, transparent);
40
+ color: var(--pa-accent);
41
41
  padding: 0.2rem 0.4rem;
42
42
  border-radius: var(--pa-border-radius-sm);
43
43
  font-weight: $font-weight-medium;
@@ -45,8 +45,8 @@
45
45
 
46
46
  &__operator {
47
47
  display: inline;
48
- background-color: rgba($success-bg, 0.15);
49
- color: $success-bg;
48
+ background-color: color-mix(in srgb, var(--pa-success) 15%, transparent);
49
+ color: var(--pa-success);
50
50
  padding: 0.2rem 0.4rem;
51
51
  border-radius: var(--pa-border-radius-sm);
52
52
  font-weight: $font-weight-medium;
@@ -221,28 +221,28 @@
221
221
  font-weight: $font-weight-medium;
222
222
 
223
223
  &--field {
224
- background-color: rgba($accent-color, 0.15);
224
+ background-color: color-mix(in srgb, var(--pa-accent) 15%, transparent);
225
225
  color: var(--pa-text-color-1);
226
226
 
227
227
  &.pa-inline-query-token--invalid {
228
- background-color: rgba($danger-bg, 0.15);
228
+ background-color: color-mix(in srgb, var(--pa-danger) 15%, transparent);
229
229
  color: var(--pa-text-color-1);
230
230
  text-decoration: wavy underline;
231
231
  }
232
232
  }
233
233
 
234
234
  &--operator {
235
- background-color: rgba(var(--pa-text-color-2), 0.15);
235
+ background-color: color-mix(in srgb, var(--pa-text-color-2) 15%, transparent);
236
236
  color: var(--pa-text-color-1);
237
237
  }
238
238
 
239
239
  &--value {
240
- background-color: rgba($success-bg, 0.15);
240
+ background-color: color-mix(in srgb, var(--pa-success) 15%, transparent);
241
241
  color: var(--pa-text-color-1);
242
242
  }
243
243
 
244
244
  &--keyword {
245
- background-color: rgba($warning-bg, 0.15);
245
+ background-color: color-mix(in srgb, var(--pa-warning) 15%, transparent);
246
246
  color: var(--pa-text-color-1);
247
247
  font-style: italic;
248
248
  }
@@ -304,7 +304,7 @@
304
304
  flex-shrink: 0;
305
305
  font-size: $font-size-xs;
306
306
  padding: 0.2rem 0.6rem;
307
- background-color: rgba(var(--pa-text-color-2), 0.1);
307
+ background-color: color-mix(in srgb, var(--pa-text-color-2) 10%, transparent);
308
308
  color: var(--pa-text-color-2);
309
309
  border-radius: var(--pa-border-radius-sm);
310
310
  font-family: $body-font-family;
@@ -125,6 +125,7 @@
125
125
 
126
126
  &--active {
127
127
  background-color: var(--pa-sidebar-submenu-active-bg);
128
+ color: var(--pa-sidebar-submenu-active-text);
128
129
  }
129
130
  }
130
131
 
@@ -191,6 +191,7 @@ body.pa-layout--sticky .pa-layout__sidebar {
191
191
 
192
192
  &--active {
193
193
  background-color: var(--pa-sidebar-submenu-active-bg);
194
+ color: var(--pa-sidebar-submenu-active-text);
194
195
  border-inline-end-color: var(--pa-accent); // RTL: flips to border-left-color
195
196
  }
196
197
  }
@@ -108,7 +108,7 @@ $base-tooltip-text-color: #ffffff !default;
108
108
  // Success/positive semantic colors
109
109
  // =============================================================================
110
110
 
111
- $base-success-color: #28a745 !default;
111
+ $base-success-color: #22c55e !default; // Tailwind green-500 — aligns with --pa-positive in the sentiment scale
112
112
  $base-success-color-hover: color.adjust($base-success-color, $lightness: -10%) !default;
113
113
  $base-success-bg-light: rgba($base-success-color, 0.1) !default;
114
114
  $base-success-bg-subtle: rgba($base-success-color, 0.08) !default;
@@ -122,7 +122,7 @@ $base-text-on-success: #ffffff !default;
122
122
  // Danger/error semantic colors
123
123
  // =============================================================================
124
124
 
125
- $base-danger-color: #dc3545 !default;
125
+ $base-danger-color: #ef4444 !default; // Tailwind red-500 — aligns with --pa-negative in the sentiment scale
126
126
  $base-danger-color-hover: color.adjust($base-danger-color, $lightness: -10%) !default;
127
127
  $base-danger-bg-light: rgba($base-danger-color, 0.1) !default;
128
128
  $base-danger-bg-subtle: rgba($base-danger-color, 0.08) !default;
@@ -136,7 +136,7 @@ $base-text-on-danger: #ffffff !default;
136
136
  // Warning semantic colors
137
137
  // =============================================================================
138
138
 
139
- $base-warning-color: #ffc107 !default;
139
+ $base-warning-color: #f97316 !default; // Tailwind orange-500 — also serves as the off-target axis in KPI components
140
140
  $base-warning-color-hover: color.adjust($base-warning-color, $lightness: -10%) !default;
141
141
  $base-warning-bg-light: rgba($base-warning-color, 0.1) !default;
142
142
  $base-warning-bg-subtle: rgba($base-warning-color, 0.08) !default;
@@ -159,6 +159,18 @@ $base-info-text: #0c5460 !default;
159
159
  $base-info-text-light: #d1ecf1 !default;
160
160
  $base-text-on-info: #ffffff !default;
161
161
 
162
+ // =============================================================================
163
+ // SENTIMENT SCALE — 5-step direction-of-change
164
+ // Used by KPI / data-display components to indicate movement direction.
165
+ // `--pa-positive` and `--pa-negative` alias the role colours above; the
166
+ // outlier shades (`very-positive` / `very-negative`) are explicit darker
167
+ // stops since they're not derivable cleanly via color.adjust.
168
+ // =============================================================================
169
+
170
+ $base-very-positive: #16a34a !default; // Tailwind green-600 — outlier positive
171
+ $base-very-negative: #dc2626 !default; // Tailwind red-600 — outlier negative
172
+ $base-neutral: #9ca3af !default; // Tailwind gray-400 — "no meaningful change"
173
+
162
174
  // =============================================================================
163
175
  // INTERACTIVE STATES
164
176
  // Generic interaction feedback colors
@@ -33,6 +33,7 @@ $sidebar-text-secondary: $base-text-color-2 !default;
33
33
  $sidebar-submenu-bg: $base-surface-3 !default;
34
34
  $sidebar-submenu-hover-bg: color.adjust($base-surface-3, $lightness: -5%) !default;
35
35
  $sidebar-submenu-active-bg: color.adjust($base-surface-3, $lightness: -10%) !default;
36
+ $sidebar-submenu-active-text: $sidebar-text !default;
36
37
 
37
38
  // Footer colors
38
39
  $footer-bg: $base-surface-1 !default;
@@ -336,15 +336,26 @@ $stat-square-min-size: 12.8rem !default; // 128px (was 8rem)
336
336
  $stat-label-letter-spacing: 0.05em !default;
337
337
  $stat-change-margin-bottom: 0.4rem !default; // 4px (was 0.25rem)
338
338
  $stat-number-margin-bottom: $spacing-xs !default;
339
- $stat-symbol-opacity: $opacity-shadow !default;
340
-
341
- // Stat square clamp values (10px base)
342
- $stat-square-number-min: 4.8rem !default; // 48px (was 3rem)
343
- $stat-square-number-scale: 8vw !default;
344
- $stat-square-number-max: 7.2rem !default; // 72px (was 4.5rem)
345
- $stat-square-symbol-min: 6.4rem !default; // 64px (was 4rem)
346
- $stat-square-symbol-scale: 10vw !default;
347
- $stat-square-symbol-max: 9.6rem !default; // 96px (was 6rem)
339
+ $stat-symbol-opacity: 0.85 !default;
340
+ $stat-square-symbol-gap: 0.15em !default; // tight gap between number and symbol on the same row
341
+
342
+ // Stat square clamp values (10px base).
343
+ // Scale uses `cqi` (container query inline-size, requires `container-type: inline-size`
344
+ // on .pa-stat--square) so font tracks the tile width, not the viewport. Without this,
345
+ // a wide-viewport / narrow-tile combination (e.g. 6 KPIs in a 33% column on 1920px)
346
+ // hits the max font size and overflows multi-character values like "$847K" or "¥12.4M".
347
+ //
348
+ // Sizing budget: a 5-char number ("12.4M") at $stat-square-number-scale plus a 1-char
349
+ // symbol at $stat-square-symbol-scale plus the inter-element gap should fit inside the
350
+ // tile's content area (tile width minus 2× $spacing-lg padding) at typical tile widths
351
+ // (~250–400px). Numbers are sized aggressively so the KPI reads as the dominant element.
352
+ $stat-square-number-min: 3.2rem !default; // 32px floor
353
+ $stat-square-number-scale: 25cqi !default; // 25% of tile width
354
+ $stat-square-number-max: 9.6rem !default; // 96px ceiling (was 7.2/6.4 — bumped so wide tiles render large)
355
+ // Symbol is intentionally smaller than the number (visual hierarchy: number primary, unit secondary).
356
+ $stat-square-symbol-min: 1.6rem !default; // 16px floor (~50% of number-min)
357
+ $stat-square-symbol-scale: 12cqi !default; // 12% of tile width (~48% of number)
358
+ $stat-square-symbol-max: 4.8rem !default; // 48px ceiling (~50% of number-max)
348
359
 
349
360
  // Stat shadow values
350
361
  $stat-text-shadow-1-y: 4px !default;
@@ -507,7 +518,8 @@ $timeline-simple-dot-offset: -30px !default;
507
518
  $timeline-simple-dot-shadow-offset-x: 3px !default;
508
519
  $timeline-simple-dot-shadow-offset-y: 3px !default;
509
520
  $timeline-simple-dot-shadow-blur: 0 !default;
510
- $timeline-simple-dot-shadow-opacity: 0.3 !default;
521
+ $timeline-simple-dot-shadow-opacity: 0.5 !default;
522
+ $timeline-simple-dot-border-radius: 30% !default;
511
523
  $timeline-simple-content-margin-top: 0.6rem !default; // 6px (was 0.4rem)
512
524
  $timeline-simple-scroll-container-max-height: 400px !default;
513
525
  $timeline-simple-scroll-loader-min-height: 60px !default;
@@ -704,7 +716,7 @@ $progress-height: 0.8rem !default; // 8px
704
716
  $progress-height-xs: 0.3rem !default; // 3px
705
717
  $progress-height-sm: 0.5rem !default; // 5px
706
718
  $progress-height-lg: 1.2rem !default; // 12px
707
- $progress-bg: rgba(0, 0, 0, 0.08) !default;
719
+ $progress-bg: color-mix(in srgb, var(--pa-text-color-1) 12%, transparent) !default;
708
720
  $progress-border-radius: $border-radius !default;
709
721
  $progress-stripe-angle: 45deg !default;
710
722
  $progress-stripe-size: 1.6rem !default; // 16px
@@ -723,16 +735,16 @@ $stacked-bar-legend-font-size: $font-size-xs !default;
723
735
  $progress-ring-size: 8rem !default; // 80px
724
736
  $progress-ring-size-sm: 5rem !default; // 50px
725
737
  $progress-ring-size-lg: 11rem !default; // 110px
726
- $progress-ring-track-color: rgba(0, 0, 0, 0.08) !default;
738
+ $progress-ring-track-color: color-mix(in srgb, var(--pa-text-color-1) 12%, transparent) !default;
727
739
  $progress-ring-value-font-size: $font-size-lg !default;
728
740
  $progress-ring-value-font-weight: $font-weight-bold !default;
729
741
  $progress-ring-label-font-size: $font-size-2xs !default;
730
742
 
731
743
  // Gauge (pa-gauge)
732
744
  $gauge-size: 12rem !default; // 120px
733
- $gauge-track-color: rgba(0, 0, 0, 0.08) !default;
745
+ $gauge-track-color: color-mix(in srgb, var(--pa-text-color-1) 12%, transparent) !default;
734
746
  $gauge-label-font-size: $font-size-xs !default;
735
- $gauge-value-font-size: $font-size-2xl !default;
747
+ $gauge-value-font-size: $font-size-3xl !default; // 2.8rem — value gets the whole donut hole (label is now below the gauge)
736
748
  $gauge-value-font-weight: $font-weight-bold !default;
737
749
 
738
750
  // Data bar (pa-data-bar)