@keenmate/pure-admin-core 1.1.2 → 1.1.3

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
@@ -151,6 +151,10 @@ This enables dark mode support for web components like `@keenmate/web-grid` that
151
151
  - `.pa-card__header` - Card header
152
152
  - `.pa-card__body` - Card body
153
153
  - `.pa-card__footer` - Card footer
154
+ - **Semantic variants:** `.pa-card--primary/success/danger/warning`
155
+ - **Theme color variants:** `.pa-card--color-1` through `.pa-card--color-9`
156
+ - Uses `--pa-color-N` for header background and border
157
+ - Text color automatically adjusts via `--pa-color-N-text` for readability
154
158
 
155
159
  ### Layout & Sidebar
156
160
  - `.pa-layout` - Main layout container
@@ -230,7 +234,9 @@ This enables dark mode support for web components like `@keenmate/web-grid` that
230
234
  ### Tooltips & Popovers
231
235
  - `.pa-tooltip` - Base tooltip (pure CSS, no JS required)
232
236
  - `.pa-tooltip--top/right/bottom/left` - Positioning
233
- - `.pa-tooltip--primary/success/warning/danger` - Variants
237
+ - `.pa-tooltip--primary/success/warning/danger` - Semantic variants
238
+ - `.pa-tooltip--color-1` through `.pa-tooltip--color-9` - Theme color variants
239
+ - Text color automatically adjusts via `--pa-color-N-text` for readability
234
240
  - `.pa-tooltip--multiline` - Multiline tooltips
235
241
  - `.pa-popover` - Base popover (requires JavaScript)
236
242
  - `.pa-popover--sm/md/lg` - Sizes
@@ -342,12 +348,16 @@ This enables dark mode support for web components like `@keenmate/web-grid` that
342
348
  - `.pa-bg-color-1` through `.pa-bg-color-9` - Background color slots
343
349
  - `.pa-text-color-1` through `.pa-text-color-9` - Text color slots
344
350
  - `.pa-border-color-1` through `.pa-border-color-9` - Border color slots
351
+ - **CSS Variables:**
352
+ - `--pa-color-1` through `--pa-color-9` - Background colors (theme-defined)
353
+ - `--pa-color-1-text` through `--pa-color-9-text` - Contrast text colors for readability on colored backgrounds
345
354
 
346
355
  ## SCSS Variables
347
356
 
348
357
  All components use SCSS variables with `!default` flags, making them fully customizable:
349
358
 
350
359
  - **Colors**: `$main-bg`, `$page-bg`, `$subtle-bg`, `$accent-color`, `$text-color-1`, `$text-color-2`, etc.
360
+ - **Theme Color Slots**: `$color-1` through `$color-9` (background colors), `$color-1-text` through `$color-9-text` (contrast text colors)
351
361
  - **Spacing**: `$spacing-xs` through `$spacing-2xl`
352
362
  - **Typography**: `$font-size-*`, `$line-height-*`, `$font-weight-*`
353
363
  - **Components**: `$btn-*`, `$card-*`, `$table-*`, etc.
package/dist/css/main.css CHANGED
@@ -5385,6 +5385,141 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5385
5385
  .pa-card--stat .pa-card__body {
5386
5386
  padding: 2.4rem 1.6rem;
5387
5387
  }
5388
+ .pa-card--color-1 {
5389
+ border-color: var(--pa-color-1);
5390
+ }
5391
+ .pa-card--color-1 .pa-card__header {
5392
+ background-color: var(--pa-color-1);
5393
+ color: var(--pa-color-1-text);
5394
+ }
5395
+ .pa-card--color-1 .pa-card__header h1,
5396
+ .pa-card--color-1 .pa-card__header h2,
5397
+ .pa-card--color-1 .pa-card__header h3,
5398
+ .pa-card--color-1 .pa-card__header h4,
5399
+ .pa-card--color-1 .pa-card__header h5,
5400
+ .pa-card--color-1 .pa-card__header h6 {
5401
+ color: var(--pa-color-1-text);
5402
+ }
5403
+ .pa-card--color-2 {
5404
+ border-color: var(--pa-color-2);
5405
+ }
5406
+ .pa-card--color-2 .pa-card__header {
5407
+ background-color: var(--pa-color-2);
5408
+ color: var(--pa-color-2-text);
5409
+ }
5410
+ .pa-card--color-2 .pa-card__header h1,
5411
+ .pa-card--color-2 .pa-card__header h2,
5412
+ .pa-card--color-2 .pa-card__header h3,
5413
+ .pa-card--color-2 .pa-card__header h4,
5414
+ .pa-card--color-2 .pa-card__header h5,
5415
+ .pa-card--color-2 .pa-card__header h6 {
5416
+ color: var(--pa-color-2-text);
5417
+ }
5418
+ .pa-card--color-3 {
5419
+ border-color: var(--pa-color-3);
5420
+ }
5421
+ .pa-card--color-3 .pa-card__header {
5422
+ background-color: var(--pa-color-3);
5423
+ color: var(--pa-color-3-text);
5424
+ }
5425
+ .pa-card--color-3 .pa-card__header h1,
5426
+ .pa-card--color-3 .pa-card__header h2,
5427
+ .pa-card--color-3 .pa-card__header h3,
5428
+ .pa-card--color-3 .pa-card__header h4,
5429
+ .pa-card--color-3 .pa-card__header h5,
5430
+ .pa-card--color-3 .pa-card__header h6 {
5431
+ color: var(--pa-color-3-text);
5432
+ }
5433
+ .pa-card--color-4 {
5434
+ border-color: var(--pa-color-4);
5435
+ }
5436
+ .pa-card--color-4 .pa-card__header {
5437
+ background-color: var(--pa-color-4);
5438
+ color: var(--pa-color-4-text);
5439
+ }
5440
+ .pa-card--color-4 .pa-card__header h1,
5441
+ .pa-card--color-4 .pa-card__header h2,
5442
+ .pa-card--color-4 .pa-card__header h3,
5443
+ .pa-card--color-4 .pa-card__header h4,
5444
+ .pa-card--color-4 .pa-card__header h5,
5445
+ .pa-card--color-4 .pa-card__header h6 {
5446
+ color: var(--pa-color-4-text);
5447
+ }
5448
+ .pa-card--color-5 {
5449
+ border-color: var(--pa-color-5);
5450
+ }
5451
+ .pa-card--color-5 .pa-card__header {
5452
+ background-color: var(--pa-color-5);
5453
+ color: var(--pa-color-5-text);
5454
+ }
5455
+ .pa-card--color-5 .pa-card__header h1,
5456
+ .pa-card--color-5 .pa-card__header h2,
5457
+ .pa-card--color-5 .pa-card__header h3,
5458
+ .pa-card--color-5 .pa-card__header h4,
5459
+ .pa-card--color-5 .pa-card__header h5,
5460
+ .pa-card--color-5 .pa-card__header h6 {
5461
+ color: var(--pa-color-5-text);
5462
+ }
5463
+ .pa-card--color-6 {
5464
+ border-color: var(--pa-color-6);
5465
+ }
5466
+ .pa-card--color-6 .pa-card__header {
5467
+ background-color: var(--pa-color-6);
5468
+ color: var(--pa-color-6-text);
5469
+ }
5470
+ .pa-card--color-6 .pa-card__header h1,
5471
+ .pa-card--color-6 .pa-card__header h2,
5472
+ .pa-card--color-6 .pa-card__header h3,
5473
+ .pa-card--color-6 .pa-card__header h4,
5474
+ .pa-card--color-6 .pa-card__header h5,
5475
+ .pa-card--color-6 .pa-card__header h6 {
5476
+ color: var(--pa-color-6-text);
5477
+ }
5478
+ .pa-card--color-7 {
5479
+ border-color: var(--pa-color-7);
5480
+ }
5481
+ .pa-card--color-7 .pa-card__header {
5482
+ background-color: var(--pa-color-7);
5483
+ color: var(--pa-color-7-text);
5484
+ }
5485
+ .pa-card--color-7 .pa-card__header h1,
5486
+ .pa-card--color-7 .pa-card__header h2,
5487
+ .pa-card--color-7 .pa-card__header h3,
5488
+ .pa-card--color-7 .pa-card__header h4,
5489
+ .pa-card--color-7 .pa-card__header h5,
5490
+ .pa-card--color-7 .pa-card__header h6 {
5491
+ color: var(--pa-color-7-text);
5492
+ }
5493
+ .pa-card--color-8 {
5494
+ border-color: var(--pa-color-8);
5495
+ }
5496
+ .pa-card--color-8 .pa-card__header {
5497
+ background-color: var(--pa-color-8);
5498
+ color: var(--pa-color-8-text);
5499
+ }
5500
+ .pa-card--color-8 .pa-card__header h1,
5501
+ .pa-card--color-8 .pa-card__header h2,
5502
+ .pa-card--color-8 .pa-card__header h3,
5503
+ .pa-card--color-8 .pa-card__header h4,
5504
+ .pa-card--color-8 .pa-card__header h5,
5505
+ .pa-card--color-8 .pa-card__header h6 {
5506
+ color: var(--pa-color-8-text);
5507
+ }
5508
+ .pa-card--color-9 {
5509
+ border-color: var(--pa-color-9);
5510
+ }
5511
+ .pa-card--color-9 .pa-card__header {
5512
+ background-color: var(--pa-color-9);
5513
+ color: var(--pa-color-9-text);
5514
+ }
5515
+ .pa-card--color-9 .pa-card__header h1,
5516
+ .pa-card--color-9 .pa-card__header h2,
5517
+ .pa-card--color-9 .pa-card__header h3,
5518
+ .pa-card--color-9 .pa-card__header h4,
5519
+ .pa-card--color-9 .pa-card__header h5,
5520
+ .pa-card--color-9 .pa-card__header h6 {
5521
+ color: var(--pa-color-9-text);
5522
+ }
5388
5523
  .pa-card__tabs {
5389
5524
  display: flex;
5390
5525
  border-bottom: 1px solid var(--pa-border-color);
@@ -7590,6 +7725,7 @@ a.pa-card p {
7590
7725
  }
7591
7726
  .pa-tooltip--color-1::before {
7592
7727
  background-color: var(--pa-color-1);
7728
+ color: var(--pa-color-1-text);
7593
7729
  }
7594
7730
  .pa-tooltip--color-1::after {
7595
7731
  border-top-color: var(--pa-color-1);
@@ -7608,6 +7744,7 @@ a.pa-card p {
7608
7744
  }
7609
7745
  .pa-tooltip--color-2::before {
7610
7746
  background-color: var(--pa-color-2);
7747
+ color: var(--pa-color-2-text);
7611
7748
  }
7612
7749
  .pa-tooltip--color-2::after {
7613
7750
  border-top-color: var(--pa-color-2);
@@ -7626,6 +7763,7 @@ a.pa-card p {
7626
7763
  }
7627
7764
  .pa-tooltip--color-3::before {
7628
7765
  background-color: var(--pa-color-3);
7766
+ color: var(--pa-color-3-text);
7629
7767
  }
7630
7768
  .pa-tooltip--color-3::after {
7631
7769
  border-top-color: var(--pa-color-3);
@@ -7644,6 +7782,7 @@ a.pa-card p {
7644
7782
  }
7645
7783
  .pa-tooltip--color-4::before {
7646
7784
  background-color: var(--pa-color-4);
7785
+ color: var(--pa-color-4-text);
7647
7786
  }
7648
7787
  .pa-tooltip--color-4::after {
7649
7788
  border-top-color: var(--pa-color-4);
@@ -7662,6 +7801,7 @@ a.pa-card p {
7662
7801
  }
7663
7802
  .pa-tooltip--color-5::before {
7664
7803
  background-color: var(--pa-color-5);
7804
+ color: var(--pa-color-5-text);
7665
7805
  }
7666
7806
  .pa-tooltip--color-5::after {
7667
7807
  border-top-color: var(--pa-color-5);
@@ -7680,6 +7820,7 @@ a.pa-card p {
7680
7820
  }
7681
7821
  .pa-tooltip--color-6::before {
7682
7822
  background-color: var(--pa-color-6);
7823
+ color: var(--pa-color-6-text);
7683
7824
  }
7684
7825
  .pa-tooltip--color-6::after {
7685
7826
  border-top-color: var(--pa-color-6);
@@ -7698,6 +7839,7 @@ a.pa-card p {
7698
7839
  }
7699
7840
  .pa-tooltip--color-7::before {
7700
7841
  background-color: var(--pa-color-7);
7842
+ color: var(--pa-color-7-text);
7701
7843
  }
7702
7844
  .pa-tooltip--color-7::after {
7703
7845
  border-top-color: var(--pa-color-7);
@@ -7716,6 +7858,7 @@ a.pa-card p {
7716
7858
  }
7717
7859
  .pa-tooltip--color-8::before {
7718
7860
  background-color: var(--pa-color-8);
7861
+ color: var(--pa-color-8-text);
7719
7862
  }
7720
7863
  .pa-tooltip--color-8::after {
7721
7864
  border-top-color: var(--pa-color-8);
@@ -7734,6 +7877,7 @@ a.pa-card p {
7734
7877
  }
7735
7878
  .pa-tooltip--color-9::before {
7736
7879
  background-color: var(--pa-color-9);
7880
+ color: var(--pa-color-9-text);
7737
7881
  }
7738
7882
  .pa-tooltip--color-9::after {
7739
7883
  border-top-color: var(--pa-color-9);
@@ -7966,30 +8110,39 @@ a.pa-card p {
7966
8110
  }
7967
8111
  .pa-tooltip-floating.pa-tooltip--color-1 {
7968
8112
  background-color: var(--pa-color-1);
8113
+ color: var(--pa-color-1-text);
7969
8114
  }
7970
8115
  .pa-tooltip-floating.pa-tooltip--color-2 {
7971
8116
  background-color: var(--pa-color-2);
8117
+ color: var(--pa-color-2-text);
7972
8118
  }
7973
8119
  .pa-tooltip-floating.pa-tooltip--color-3 {
7974
8120
  background-color: var(--pa-color-3);
8121
+ color: var(--pa-color-3-text);
7975
8122
  }
7976
8123
  .pa-tooltip-floating.pa-tooltip--color-4 {
7977
8124
  background-color: var(--pa-color-4);
8125
+ color: var(--pa-color-4-text);
7978
8126
  }
7979
8127
  .pa-tooltip-floating.pa-tooltip--color-5 {
7980
8128
  background-color: var(--pa-color-5);
8129
+ color: var(--pa-color-5-text);
7981
8130
  }
7982
8131
  .pa-tooltip-floating.pa-tooltip--color-6 {
7983
8132
  background-color: var(--pa-color-6);
8133
+ color: var(--pa-color-6-text);
7984
8134
  }
7985
8135
  .pa-tooltip-floating.pa-tooltip--color-7 {
7986
8136
  background-color: var(--pa-color-7);
8137
+ color: var(--pa-color-7-text);
7987
8138
  }
7988
8139
  .pa-tooltip-floating.pa-tooltip--color-8 {
7989
8140
  background-color: var(--pa-color-8);
8141
+ color: var(--pa-color-8-text);
7990
8142
  }
7991
8143
  .pa-tooltip-floating.pa-tooltip--color-9 {
7992
8144
  background-color: var(--pa-color-9);
8145
+ color: var(--pa-color-9-text);
7993
8146
  }
7994
8147
 
7995
8148
  /* ========================================
@@ -8710,6 +8863,7 @@ a.pa-card p {
8710
8863
  .pa-input-group__prepend {
8711
8864
  background-color: var(--pa-input-group-prepend-bg);
8712
8865
  color: var(--pa-input-group-prepend-text);
8866
+ border-color: var(--pa-input-group-prepend-bg);
8713
8867
  border-right: none;
8714
8868
  }
8715
8869
  .pa-input-group__prepend:first-child {
@@ -8719,6 +8873,7 @@ a.pa-card p {
8719
8873
  .pa-input-group__append {
8720
8874
  background-color: var(--pa-input-group-append-bg);
8721
8875
  color: var(--pa-input-group-append-text);
8876
+ border-color: var(--pa-input-group-append-bg);
8722
8877
  border-left: none;
8723
8878
  }
8724
8879
  .pa-input-group__append:last-child {
@@ -8726,10 +8881,10 @@ a.pa-card p {
8726
8881
  border-bottom-right-radius: 4px;
8727
8882
  }
8728
8883
  .pa-input-group__prepend + .pa-input-group__prepend {
8729
- border-left: 1px solid var(--pa-border-color);
8884
+ border-left: 1px solid var(--pa-input-group-prepend-bg);
8730
8885
  }
8731
8886
  .pa-input-group__append + .pa-input-group__append {
8732
- border-left: 1px solid var(--pa-border-color);
8887
+ border-left: 1px solid var(--pa-input-group-append-bg);
8733
8888
  }
8734
8889
  .pa-input-group:has(.pa-input:focus) .pa-input-group__prepend {
8735
8890
  border-right: 1px solid var(--pa-input-focus-border-color);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keenmate/pure-admin-core",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
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": {
@@ -148,6 +148,65 @@
148
148
  --base-border-radius-lg: #{$base-border-radius-lg};
149
149
  }
150
150
 
151
+ // ============================================================================
152
+ // ALERT COLOR DERIVATION MIXINS
153
+ // ============================================================================
154
+ // These mixins use color-mix() to automatically derive alert colors from
155
+ // semantic base colors (--pa-success-bg, --pa-danger-bg, etc.)
156
+ //
157
+ // Light mode: dark text on subtle backgrounds
158
+ // Dark mode: light text on tinted backgrounds
159
+ //
160
+ // Themes call the appropriate mixin instead of hardcoding 12+ CSS variables.
161
+ // Override specific variables after the mixin call if needed.
162
+ // ============================================================================
163
+
164
+ // Light mode: dark text on subtle backgrounds
165
+ @mixin output-pa-alert-variables-light {
166
+ // Success
167
+ --pa-alert-success-text: color-mix(in srgb, var(--pa-success-bg) #{$alert-text-mix-light}, black);
168
+ --pa-alert-success-bg: color-mix(in srgb, var(--pa-success-bg) #{$alert-bg-opacity-light}%, transparent);
169
+ --pa-alert-success-border: color-mix(in srgb, var(--pa-success-bg) #{$alert-border-opacity-light}%, transparent);
170
+
171
+ // Danger
172
+ --pa-alert-danger-text: color-mix(in srgb, var(--pa-danger-bg) #{$alert-text-mix-light}, black);
173
+ --pa-alert-danger-bg: color-mix(in srgb, var(--pa-danger-bg) #{$alert-bg-opacity-light}%, transparent);
174
+ --pa-alert-danger-border: color-mix(in srgb, var(--pa-danger-bg) #{$alert-border-opacity-light}%, transparent);
175
+
176
+ // Warning
177
+ --pa-alert-warning-text: color-mix(in srgb, var(--pa-warning-bg) #{$alert-text-mix-light}, black);
178
+ --pa-alert-warning-bg: color-mix(in srgb, var(--pa-warning-bg) #{$alert-bg-opacity-light}%, transparent);
179
+ --pa-alert-warning-border: color-mix(in srgb, var(--pa-warning-bg) #{$alert-border-opacity-light}%, transparent);
180
+
181
+ // Info
182
+ --pa-alert-info-text: color-mix(in srgb, var(--pa-info-bg) #{$alert-text-mix-light}, black);
183
+ --pa-alert-info-bg: color-mix(in srgb, var(--pa-info-bg) #{$alert-bg-opacity-light}%, transparent);
184
+ --pa-alert-info-border: color-mix(in srgb, var(--pa-info-bg) #{$alert-border-opacity-light}%, transparent);
185
+ }
186
+
187
+ // Dark mode: white text on tinted backgrounds (white text is always readable)
188
+ @mixin output-pa-alert-variables-dark {
189
+ // Success
190
+ --pa-alert-success-text: #ffffff;
191
+ --pa-alert-success-bg: color-mix(in srgb, var(--pa-success-bg) #{$alert-bg-opacity-dark}%, transparent);
192
+ --pa-alert-success-border: color-mix(in srgb, var(--pa-success-bg) #{$alert-border-opacity-dark}%, transparent);
193
+
194
+ // Danger
195
+ --pa-alert-danger-text: #ffffff;
196
+ --pa-alert-danger-bg: color-mix(in srgb, var(--pa-danger-bg) #{$alert-bg-opacity-dark}%, transparent);
197
+ --pa-alert-danger-border: color-mix(in srgb, var(--pa-danger-bg) #{$alert-border-opacity-dark}%, transparent);
198
+
199
+ // Warning
200
+ --pa-alert-warning-text: #ffffff;
201
+ --pa-alert-warning-bg: color-mix(in srgb, var(--pa-warning-bg) #{$alert-bg-opacity-dark}%, transparent);
202
+ --pa-alert-warning-border: color-mix(in srgb, var(--pa-warning-bg) #{$alert-border-opacity-dark}%, transparent);
203
+
204
+ // Info
205
+ --pa-alert-info-text: #ffffff;
206
+ --pa-alert-info-bg: color-mix(in srgb, var(--pa-info-bg) #{$alert-bg-opacity-dark}%, transparent);
207
+ --pa-alert-info-border: color-mix(in srgb, var(--pa-info-bg) #{$alert-border-opacity-dark}%, transparent);
208
+ }
209
+
151
210
  // ============================================================================
152
211
  // PURE ADMIN THEME CSS VARIABLES OUTPUT MIXIN
153
212
  // ============================================================================
@@ -343,20 +402,9 @@
343
402
  --pa-modal-content-bg: #{$modal-content-bg};
344
403
 
345
404
  // =========================================================================
346
- // ALERT COLORS
405
+ // ALERT COLORS - Now derived via output-pa-alert-variables-light/dark mixins
406
+ // Themes must call the appropriate mixin after output-pa-css-variables
347
407
  // =========================================================================
348
- --pa-alert-success-bg: #{$alert-success-bg};
349
- --pa-alert-success-border: #{$alert-success-border};
350
- --pa-alert-success-text: #{$alert-success-text};
351
- --pa-alert-danger-bg: #{$alert-danger-bg};
352
- --pa-alert-danger-border: #{$alert-danger-border};
353
- --pa-alert-danger-text: #{$alert-danger-text};
354
- --pa-alert-warning-bg: #{$alert-warning-bg};
355
- --pa-alert-warning-border: #{$alert-warning-border};
356
- --pa-alert-warning-text: #{$alert-warning-text};
357
- --pa-alert-info-bg: #{$alert-info-bg};
358
- --pa-alert-info-border: #{$alert-info-border};
359
- --pa-alert-info-text: #{$alert-info-text};
360
408
 
361
409
  // =========================================================================
362
410
  // BADGE COLORS
@@ -429,4 +477,15 @@
429
477
  --pa-color-7: #{$color-7};
430
478
  --pa-color-8: #{$color-8};
431
479
  --pa-color-9: #{$color-9};
480
+
481
+ // Theme color slots - text/contrast colors
482
+ --pa-color-1-text: #{$color-1-text};
483
+ --pa-color-2-text: #{$color-2-text};
484
+ --pa-color-3-text: #{$color-3-text};
485
+ --pa-color-4-text: #{$color-4-text};
486
+ --pa-color-5-text: #{$color-5-text};
487
+ --pa-color-6-text: #{$color-6-text};
488
+ --pa-color-7-text: #{$color-7-text};
489
+ --pa-color-8-text: #{$color-8-text};
490
+ --pa-color-9-text: #{$color-9-text};
432
491
  }
@@ -213,6 +213,28 @@
213
213
  }
214
214
  }
215
215
 
216
+ // Theme color variants (color-1 through color-9)
217
+ // These use theme-customizable colors from --pa-color-* CSS variables
218
+ @for $i from 1 through 9 {
219
+ &--color-#{$i} {
220
+ border-color: var(--pa-color-#{$i});
221
+
222
+ .pa-card__header {
223
+ background-color: var(--pa-color-#{$i});
224
+ color: var(--pa-color-#{$i}-text);
225
+
226
+ h1,
227
+ h2,
228
+ h3,
229
+ h4,
230
+ h5,
231
+ h6 {
232
+ color: var(--pa-color-#{$i}-text);
233
+ }
234
+ }
235
+ }
236
+ }
237
+
216
238
  // Card tabs
217
239
  &__tabs {
218
240
  display: flex;
@@ -242,6 +242,7 @@
242
242
  @for $i from 1 through 9 {
243
243
  &--color-#{$i}::before {
244
244
  background-color: var(--pa-color-#{$i});
245
+ color: var(--pa-color-#{$i}-text);
245
246
  }
246
247
  &--color-#{$i}::after {
247
248
  border-top-color: var(--pa-color-#{$i});
@@ -538,6 +539,7 @@
538
539
  @for $i from 1 through 9 {
539
540
  &.pa-tooltip--color-#{$i} {
540
541
  background-color: var(--pa-color-#{$i});
542
+ color: var(--pa-color-#{$i}-text);
541
543
  }
542
544
  }
543
545
  }
@@ -47,6 +47,7 @@
47
47
  &__prepend {
48
48
  background-color: var(--pa-input-group-prepend-bg);
49
49
  color: var(--pa-input-group-prepend-text);
50
+ border-color: var(--pa-input-group-prepend-bg);
50
51
  border-right: none;
51
52
 
52
53
  &:first-child {
@@ -58,6 +59,7 @@
58
59
  &__append {
59
60
  background-color: var(--pa-input-group-append-bg);
60
61
  color: var(--pa-input-group-append-text);
62
+ border-color: var(--pa-input-group-append-bg);
61
63
  border-left: none;
62
64
 
63
65
  &:last-child {
@@ -68,11 +70,11 @@
68
70
 
69
71
  // Adjacent prepends/appends need borders between them
70
72
  &__prepend + &__prepend {
71
- border-left: $border-width-base solid var(--pa-border-color);
73
+ border-left: $border-width-base solid var(--pa-input-group-prepend-bg);
72
74
  }
73
75
 
74
76
  &__append + &__append {
75
- border-left: $border-width-base solid var(--pa-border-color);
77
+ border-left: $border-width-base solid var(--pa-input-group-append-bg);
76
78
  }
77
79
 
78
80
  // When input is focused, show focus border on adjacent prepend/append
@@ -213,3 +213,16 @@ $base-border-radius-lg: 0.8 !default; // 8px
213
213
 
214
214
  // Command palette input height (must be after $base-input-size-* variables)
215
215
  $command-palette-input-height: #{$base-input-size-lg-height}rem !default;
216
+
217
+ // =============================================================================
218
+ // ALERT COLOR DERIVATION PARAMETERS
219
+ // Used by color-mix() mixins to derive alert colors from semantic base colors
220
+ // Themes can override these to customize alert appearance
221
+ // =============================================================================
222
+
223
+ $alert-bg-opacity-light: 15 !default; // Light mode: subtle bg (%)
224
+ $alert-bg-opacity-dark: 45 !default; // Dark mode: punchy, vibrant bg (%)
225
+ $alert-border-opacity-light: 30 !default; // Light mode border (%)
226
+ $alert-border-opacity-dark: 70 !default; // Dark mode border - more visible (%)
227
+ $alert-text-mix-light: 60% !default; // Mix with black for dark text
228
+ $alert-text-mix-dark: 80% !default; // Mix with white for light text
@@ -216,3 +216,15 @@ $color-6: transparent !default;
216
216
  $color-7: transparent !default;
217
217
  $color-8: transparent !default;
218
218
  $color-9: transparent !default;
219
+
220
+ // Theme color slots - text/contrast colors
221
+ // These define the text color to use when color-N is used as a background
222
+ $color-1-text: #ffffff !default;
223
+ $color-2-text: #ffffff !default;
224
+ $color-3-text: #ffffff !default;
225
+ $color-4-text: #ffffff !default;
226
+ $color-5-text: #ffffff !default;
227
+ $color-6-text: #ffffff !default;
228
+ $color-7-text: #ffffff !default;
229
+ $color-8-text: #ffffff !default;
230
+ $color-9-text: #ffffff !default;
@@ -283,24 +283,11 @@ $alert-icon-margin: $spacing-sm !default;
283
283
  $alert-list-padding-left: $spacing-lg !default;
284
284
  $alert-list-item-margin-top: $card-footer-padding-v !default;
285
285
 
286
- // Alert colors
287
- $alert-success-bg: $success-bg-subtle !default;
288
- $alert-success-border: $success-border !default;
289
- $alert-success-text: $success-bg !default;
290
-
291
- $alert-danger-bg: $danger-bg-subtle !default;
292
- $alert-danger-border: $danger-border !default;
293
- $alert-danger-text: $danger-bg !default;
286
+ // Alert colors - Now derived via color-mix() mixins in _base-css-variables.scss
287
+ // Themes call output-pa-alert-variables-light/dark instead of hardcoding values
288
+ // Keep only the text transform variable as it's not color-related
294
289
  $alert-danger-text-transform: none !default;
295
290
 
296
- $alert-warning-bg: $warning-bg-subtle !default;
297
- $alert-warning-border: $warning-border !default;
298
- $alert-warning-text: $warning-bg !default;
299
-
300
- $alert-info-bg: $info-bg-subtle !default;
301
- $alert-info-border: $info-border !default;
302
- $alert-info-text: $info-bg !default;
303
-
304
291
  // ============================================================================
305
292
  // CALLOUT SYSTEM
306
293
  // ============================================================================