jekyll-theme-centos 2.52.0.beta.98 → 2.52.0.beta.99

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7693eabd421a5e25a42f0841e8439c1f271319a6ac130a87e70845367bacaf73
4
- data.tar.gz: 9d14e11510ea28e7ac5a29229a190a9d9340a915e10f66d8cbc19e80dbceb0df
3
+ metadata.gz: da6dfbcaa572ae9c1c1b8bdee6a982429740cbbfda79a0ed571e8356673a9545
4
+ data.tar.gz: 567c6a9023b34cc9d2dc5f4f54cc5a786c7d198ce9f4e33fe43675d0cccb9fc9
5
5
  SHA512:
6
- metadata.gz: b8eb176ee34356fc17af8eed2eab81191d9865af1ec513f4db37204c0f435043d84db1bb27edbd8fd75e9787acee40ca9b856366b03ba1203d63d6b1ad4c221f
7
- data.tar.gz: c4e526cad99918c56f708a5a0434ce30de714f4adfb3f3ff1a2da0d9b7f1a10231074b20bc5d6c1a6d6f766cff339e7056da3cbd64530dc41d64d2053adf333e
6
+ metadata.gz: cbe38939080be0dd02cc85feb855e71bad830c3181f5555ce3aa987e7feb277cf17d28624f5e825a6d5f8d756d4ba635165dd957d8c3d81d82d248589c36a063
7
+ data.tar.gz: f99bd72cab746951008b04d19b7087216e47b2e89d259367d8773f228ca1b620fdd8c8b136f8aa00713e6f4fe22ff121db31391c2a9e64eaadd6b5638cc1819c
@@ -55,14 +55,34 @@ properties:
55
55
  type: string
56
56
  default: ""
57
57
  description: >-
58
- Title text displayed in the card. When empty, the name section is
59
- not rendered.
58
+ Title text displayed in the card. Supports inline Markdown (e.g.
59
+ `` `code` `` spans), rendered via the `markdownify` filter. When
60
+ empty, the name section is not rendered.
60
61
  name_class:
61
62
  type: string
62
63
  default: "display-5 fw-bold mb-3"
63
64
  description: >-
64
65
  CSS classes applied to the name wrapper `<div>`
65
66
  (e.g., `display-5 fw-bold mb-3`).
67
+ name_link:
68
+ type: string
69
+ default: ""
70
+ description: >-
71
+ URL to wrap `name` in a link, rendered via `base/link.html.liquid`
72
+ (relative paths, absolute URLs, and anchors all resolve the same way
73
+ that component already does). When empty (default), `name` renders
74
+ as plain text, unchanged from prior behavior.
75
+ name_link_class:
76
+ type: string
77
+ default: ""
78
+ description: >-
79
+ CSS classes applied to the `name_link` anchor (e.g., `link-dark`).
80
+ When empty, falls back to `base/link.html.liquid`'s own color-driven
81
+ default styling, driven by this card's own `color` parameter (e.g., a
82
+ `color: "centos-purple"` card renders `link-centos-purple
83
+ link-underline-centos-purple`, matching its screenshot/button
84
+ theming — not a hardcoded `primary`). Ignored when `name_link` is
85
+ empty.
66
86
  screenshot:
67
87
  type: string
68
88
  default: ""
@@ -91,8 +111,9 @@ properties:
91
111
  type: string
92
112
  default: ""
93
113
  description: >-
94
- Body text displayed below the name. When empty, the description
95
- section is not rendered.
114
+ Body text displayed below the name. Supports inline Markdown (e.g.
115
+ `` `code` `` spans), rendered via the `markdownify` filter. When
116
+ empty, the description section is not rendered.
96
117
  description_class:
97
118
  type: string
98
119
  default: "mb-3"
data/_data/base/color.yml CHANGED
@@ -20,12 +20,12 @@ branding_colors:
20
20
  rgb: "239, 167, 36"
21
21
  hsv: "39° / 85% / 94%"
22
22
  text_color: "Black"
23
- text_color_hex: "#000000"
24
- contrast_ratio: "10.22:1"
23
+ text_color_hex: "#1C0D19"
24
+ contrast_ratio: "9.12:1"
25
25
  wcag_2_2_aa: true
26
- wcag_2_2_aa_margin: "+5.72:1"
26
+ wcag_2_2_aa_margin: "+4.62:1"
27
27
  wcag_2_2_aaa: true
28
- wcag_2_2_aaa_margin: "+3.22:1"
28
+ wcag_2_2_aaa_margin: "+2.12:1"
29
29
  hue: "39°"
30
30
  saturation: "85%"
31
31
  lightness: "94%"
@@ -52,12 +52,12 @@ semantic_colors:
52
52
  rgb: "200, 106, 0"
53
53
  hsv: "32° / 100% / 78%"
54
54
  text_color: "Black"
55
- text_color_hex: "#000000"
56
- contrast_ratio: "5.52:1"
55
+ text_color_hex: "#1C0D19"
56
+ contrast_ratio: "4.92:1"
57
57
  wcag_2_2_aa: true
58
- wcag_2_2_aa_margin: "+1.02:1"
58
+ wcag_2_2_aa_margin: "+0.42:1"
59
59
  wcag_2_2_aaa: false
60
- wcag_2_2_aaa_margin: "-1.48:1"
60
+ wcag_2_2_aaa_margin: "-2.08:1"
61
61
  hue: "32°"
62
62
  saturation: "100%"
63
63
  lightness: "78%"
@@ -98,12 +98,12 @@ neutral_colors:
98
98
  rgb: "246, 237, 244"
99
99
  hsv: "313° / 4% / 96%"
100
100
  text_color: "Black"
101
- text_color_hex: "#000000"
102
- contrast_ratio: "18.34:1"
101
+ text_color_hex: "#1C0D19"
102
+ contrast_ratio: "16.36:1"
103
103
  wcag_2_2_aa: true
104
- wcag_2_2_aa_margin: "+13.84:1"
104
+ wcag_2_2_aa_margin: "+11.86:1"
105
105
  wcag_2_2_aaa: true
106
- wcag_2_2_aaa_margin: "+11.34:1"
106
+ wcag_2_2_aaa_margin: "+9.36:1"
107
107
  hue: "313°"
108
108
  saturation: "4%"
109
109
  lightness: "96%"
@@ -131,12 +131,12 @@ purple_shades:
131
131
  rgb: "246, 237, 244"
132
132
  hsv: "313° / 4% / 96%"
133
133
  text_color: "Black"
134
- text_color_hex: "#000000"
135
- contrast_ratio: "18.34:1"
134
+ text_color_hex: "#1C0D19"
135
+ contrast_ratio: "16.36:1"
136
136
  wcag_2_2_aa: true
137
- wcag_2_2_aa_margin: "+13.84:1"
137
+ wcag_2_2_aa_margin: "+11.86:1"
138
138
  wcag_2_2_aaa: true
139
- wcag_2_2_aaa_margin: "+11.34:1"
139
+ wcag_2_2_aaa_margin: "+9.36:1"
140
140
  hue: "313°"
141
141
  saturation: "4%"
142
142
  lightness: "96%"
@@ -147,12 +147,12 @@ purple_shades:
147
147
  rgb: "236, 220, 232"
148
148
  hsv: "315° / 7% / 93%"
149
149
  text_color: "Black"
150
- text_color_hex: "#000000"
151
- contrast_ratio: "15.97:1"
150
+ text_color_hex: "#1C0D19"
151
+ contrast_ratio: "14.25:1"
152
152
  wcag_2_2_aa: true
153
- wcag_2_2_aa_margin: "+11.47:1"
153
+ wcag_2_2_aa_margin: "+9.75:1"
154
154
  wcag_2_2_aaa: true
155
- wcag_2_2_aaa_margin: "+8.97:1"
155
+ wcag_2_2_aaa_margin: "+7.25:1"
156
156
  hue: "315°"
157
157
  saturation: "7%"
158
158
  lightness: "93%"
@@ -163,12 +163,12 @@ purple_shades:
163
163
  rgb: "217, 185, 209"
164
164
  hsv: "315° / 15% / 85%"
165
165
  text_color: "Black"
166
- text_color_hex: "#000000"
167
- contrast_ratio: "11.81:1"
166
+ text_color_hex: "#1C0D19"
167
+ contrast_ratio: "10.54:1"
168
168
  wcag_2_2_aa: true
169
- wcag_2_2_aa_margin: "+7.31:1"
169
+ wcag_2_2_aa_margin: "+6.04:1"
170
170
  wcag_2_2_aaa: true
171
- wcag_2_2_aaa_margin: "+4.81:1"
171
+ wcag_2_2_aaa_margin: "+3.54:1"
172
172
  hue: "315°"
173
173
  saturation: "15%"
174
174
  lightness: "85%"
@@ -179,12 +179,12 @@ purple_shades:
179
179
  rgb: "199, 149, 186"
180
180
  hsv: "316° / 25% / 78%"
181
181
  text_color: "Black"
182
- text_color_hex: "#000000"
183
- contrast_ratio: "8.44:1"
182
+ text_color_hex: "#1C0D19"
183
+ contrast_ratio: "7.53:1"
184
184
  wcag_2_2_aa: true
185
- wcag_2_2_aa_margin: "+3.94:1"
185
+ wcag_2_2_aa_margin: "+3.03:1"
186
186
  wcag_2_2_aaa: true
187
- wcag_2_2_aaa_margin: "+1.44:1"
187
+ wcag_2_2_aaa_margin: "+0.53:1"
188
188
  hue: "316°"
189
189
  saturation: "25%"
190
190
  lightness: "78%"
@@ -195,12 +195,12 @@ purple_shades:
195
195
  rgb: "180, 114, 163"
196
196
  hsv: "315° / 37% / 71%"
197
197
  text_color: "Black"
198
- text_color_hex: "#000000"
199
- contrast_ratio: "5.88:1"
198
+ text_color_hex: "#1C0D19"
199
+ contrast_ratio: "5.24:1"
200
200
  wcag_2_2_aa: true
201
- wcag_2_2_aa_margin: "+1.38:1"
201
+ wcag_2_2_aa_margin: "+0.74:1"
202
202
  wcag_2_2_aaa: false
203
- wcag_2_2_aaa_margin: "-1.12:1"
203
+ wcag_2_2_aaa_margin: "-1.76:1"
204
204
  hue: "315°"
205
205
  saturation: "37%"
206
206
  lightness: "71%"
@@ -308,12 +308,12 @@ orange_shades:
308
308
  rgb: "253, 246, 233"
309
309
  hsv: "39° / 8% / 99%"
310
310
  text_color: "Black"
311
- text_color_hex: "#000000"
312
- contrast_ratio: "19.54:1"
311
+ text_color_hex: "#1C0D19"
312
+ contrast_ratio: "17.43:1"
313
313
  wcag_2_2_aa: true
314
- wcag_2_2_aa_margin: "+15.04:1"
314
+ wcag_2_2_aa_margin: "+12.93:1"
315
315
  wcag_2_2_aaa: true
316
- wcag_2_2_aaa_margin: "+12.54:1"
316
+ wcag_2_2_aaa_margin: "+10.43:1"
317
317
  hue: "39°"
318
318
  saturation: "8%"
319
319
  lightness: "99%"
@@ -324,12 +324,12 @@ orange_shades:
324
324
  rgb: "252, 237, 211"
325
325
  hsv: "38° / 16% / 99%"
326
326
  text_color: "Black"
327
- text_color_hex: "#000000"
328
- contrast_ratio: "18.19:1"
327
+ text_color_hex: "#1C0D19"
328
+ contrast_ratio: "16.23:1"
329
329
  wcag_2_2_aa: true
330
- wcag_2_2_aa_margin: "+13.69:1"
330
+ wcag_2_2_aa_margin: "+11.73:1"
331
331
  wcag_2_2_aaa: true
332
- wcag_2_2_aaa_margin: "+11.19:1"
332
+ wcag_2_2_aaa_margin: "+9.23:1"
333
333
  hue: "38°"
334
334
  saturation: "16%"
335
335
  lightness: "99%"
@@ -340,12 +340,12 @@ orange_shades:
340
340
  rgb: "249, 220, 167"
341
341
  hsv: "39° / 33% / 98%"
342
342
  text_color: "Black"
343
- text_color_hex: "#000000"
344
- contrast_ratio: "15.82:1"
343
+ text_color_hex: "#1C0D19"
344
+ contrast_ratio: "14.12:1"
345
345
  wcag_2_2_aa: true
346
- wcag_2_2_aa_margin: "+11.32:1"
346
+ wcag_2_2_aa_margin: "+9.62:1"
347
347
  wcag_2_2_aaa: true
348
- wcag_2_2_aaa_margin: "+8.82:1"
348
+ wcag_2_2_aaa_margin: "+7.12:1"
349
349
  hue: "39°"
350
350
  saturation: "33%"
351
351
  lightness: "98%"
@@ -356,12 +356,12 @@ orange_shades:
356
356
  rgb: "245, 202, 124"
357
357
  hsv: "39° / 49% / 96%"
358
358
  text_color: "Black"
359
- text_color_hex: "#000000"
360
- contrast_ratio: "13.62:1"
359
+ text_color_hex: "#1C0D19"
360
+ contrast_ratio: "12.15:1"
361
361
  wcag_2_2_aa: true
362
- wcag_2_2_aa_margin: "+9.12:1"
362
+ wcag_2_2_aa_margin: "+7.65:1"
363
363
  wcag_2_2_aaa: true
364
- wcag_2_2_aaa_margin: "+6.62:1"
364
+ wcag_2_2_aaa_margin: "+5.15:1"
365
365
  hue: "39°"
366
366
  saturation: "49%"
367
367
  lightness: "96%"
@@ -372,12 +372,12 @@ orange_shades:
372
372
  rgb: "242, 185, 80"
373
373
  hsv: "39° / 67% / 95%"
374
374
  text_color: "Black"
375
- text_color_hex: "#000000"
376
- contrast_ratio: "11.83:1"
375
+ text_color_hex: "#1C0D19"
376
+ contrast_ratio: "10.55:1"
377
377
  wcag_2_2_aa: true
378
- wcag_2_2_aa_margin: "+7.33:1"
378
+ wcag_2_2_aa_margin: "+6.05:1"
379
379
  wcag_2_2_aaa: true
380
- wcag_2_2_aaa_margin: "+4.83:1"
380
+ wcag_2_2_aaa_margin: "+3.55:1"
381
381
  hue: "39°"
382
382
  saturation: "67%"
383
383
  lightness: "95%"
@@ -388,12 +388,12 @@ orange_shades:
388
388
  rgb: "239, 167, 36"
389
389
  hsv: "39° / 85% / 94%"
390
390
  text_color: "Black"
391
- text_color_hex: "#000000"
392
- contrast_ratio: "10.22:1"
391
+ text_color_hex: "#1C0D19"
392
+ contrast_ratio: "9.12:1"
393
393
  wcag_2_2_aa: true
394
- wcag_2_2_aa_margin: "+5.72:1"
394
+ wcag_2_2_aa_margin: "+4.62:1"
395
395
  wcag_2_2_aaa: true
396
- wcag_2_2_aaa_margin: "+3.22:1"
396
+ wcag_2_2_aaa_margin: "+2.12:1"
397
397
  hue: "39°"
398
398
  saturation: "85%"
399
399
  lightness: "94%"
@@ -404,12 +404,12 @@ orange_shades:
404
404
  rgb: "209, 140, 15"
405
405
  hsv: "39° / 93% / 82%"
406
406
  text_color: "Black"
407
- text_color_hex: "#000000"
408
- contrast_ratio: "7.47:1"
407
+ text_color_hex: "#1C0D19"
408
+ contrast_ratio: "6.66:1"
409
409
  wcag_2_2_aa: true
410
- wcag_2_2_aa_margin: "+2.97:1"
411
- wcag_2_2_aaa: true
412
- wcag_2_2_aaa_margin: "+0.47:1"
410
+ wcag_2_2_aa_margin: "+2.16:1"
411
+ wcag_2_2_aaa: false
412
+ wcag_2_2_aaa_margin: "-0.34:1"
413
413
  hue: "39°"
414
414
  saturation: "93%"
415
415
  lightness: "82%"
@@ -485,12 +485,12 @@ blue_shades:
485
485
  rgb: "233, 233, 241"
486
486
  hsv: "240° / 3% / 95%"
487
487
  text_color: "Black"
488
- text_color_hex: "#000000"
489
- contrast_ratio: "17.39:1"
488
+ text_color_hex: "#1C0D19"
489
+ contrast_ratio: "15.51:1"
490
490
  wcag_2_2_aa: true
491
- wcag_2_2_aa_margin: "+12.89:1"
491
+ wcag_2_2_aa_margin: "+11.01:1"
492
492
  wcag_2_2_aaa: true
493
- wcag_2_2_aaa_margin: "+10.39:1"
493
+ wcag_2_2_aaa_margin: "+8.51:1"
494
494
  hue: "240°"
495
495
  saturation: "3%"
496
496
  lightness: "95%"
@@ -501,12 +501,12 @@ blue_shades:
501
501
  rgb: "212, 211, 228"
502
502
  hsv: "244° / 7% / 89%"
503
503
  text_color: "Black"
504
- text_color_hex: "#000000"
505
- contrast_ratio: "14.24:1"
504
+ text_color_hex: "#1C0D19"
505
+ contrast_ratio: "12.70:1"
506
506
  wcag_2_2_aa: true
507
- wcag_2_2_aa_margin: "+9.74:1"
507
+ wcag_2_2_aa_margin: "+8.20:1"
508
508
  wcag_2_2_aaa: true
509
- wcag_2_2_aaa_margin: "+7.24:1"
509
+ wcag_2_2_aaa_margin: "+5.70:1"
510
510
  hue: "244°"
511
511
  saturation: "7%"
512
512
  lightness: "89%"
@@ -517,12 +517,12 @@ blue_shades:
517
517
  rgb: "168, 168, 201"
518
518
  hsv: "240° / 16% / 79%"
519
519
  text_color: "Black"
520
- text_color_hex: "#000000"
521
- contrast_ratio: "9.11:1"
520
+ text_color_hex: "#1C0D19"
521
+ contrast_ratio: "8.13:1"
522
522
  wcag_2_2_aa: true
523
- wcag_2_2_aa_margin: "+4.61:1"
523
+ wcag_2_2_aa_margin: "+3.63:1"
524
524
  wcag_2_2_aaa: true
525
- wcag_2_2_aaa_margin: "+2.11:1"
525
+ wcag_2_2_aaa_margin: "+1.13:1"
526
526
  hue: "240°"
527
527
  saturation: "16%"
528
528
  lightness: "79%"
@@ -533,12 +533,12 @@ blue_shades:
533
533
  rgb: "125, 124, 173"
534
534
  hsv: "241° / 28% / 68%"
535
535
  text_color: "Black"
536
- text_color_hex: "#000000"
537
- contrast_ratio: "5.36:1"
536
+ text_color_hex: "#1C0D19"
537
+ contrast_ratio: "4.78:1"
538
538
  wcag_2_2_aa: true
539
- wcag_2_2_aa_margin: "+0.86:1"
539
+ wcag_2_2_aa_margin: "+0.28:1"
540
540
  wcag_2_2_aaa: false
541
- wcag_2_2_aaa_margin: "-1.64:1"
541
+ wcag_2_2_aaa_margin: "-2.22:1"
542
542
  hue: "241°"
543
543
  saturation: "28%"
544
544
  lightness: "68%"
@@ -662,12 +662,12 @@ green_shades:
662
662
  rgb: "245, 250, 234"
663
663
  hsv: "79° / 6% / 98%"
664
664
  text_color: "Black"
665
- text_color_hex: "#000000"
666
- contrast_ratio: "19.74:1"
665
+ text_color_hex: "#1C0D19"
666
+ contrast_ratio: "17.61:1"
667
667
  wcag_2_2_aa: true
668
- wcag_2_2_aa_margin: "+15.24:1"
668
+ wcag_2_2_aa_margin: "+13.11:1"
669
669
  wcag_2_2_aaa: true
670
- wcag_2_2_aaa_margin: "+12.74:1"
670
+ wcag_2_2_aaa_margin: "+10.61:1"
671
671
  hue: "79°"
672
672
  saturation: "6%"
673
673
  lightness: "98%"
@@ -678,12 +678,12 @@ green_shades:
678
678
  rgb: "235, 245, 212"
679
679
  hsv: "78° / 13% / 96%"
680
680
  text_color: "Black"
681
- text_color_hex: "#000000"
682
- contrast_ratio: "18.54:1"
681
+ text_color_hex: "#1C0D19"
682
+ contrast_ratio: "16.54:1"
683
683
  wcag_2_2_aa: true
684
- wcag_2_2_aa_margin: "+14.04:1"
684
+ wcag_2_2_aa_margin: "+12.04:1"
685
685
  wcag_2_2_aaa: true
686
- wcag_2_2_aaa_margin: "+11.54:1"
686
+ wcag_2_2_aaa_margin: "+9.54:1"
687
687
  hue: "78°"
688
688
  saturation: "13%"
689
689
  lightness: "96%"
@@ -694,12 +694,12 @@ green_shades:
694
694
  rgb: "215, 235, 170"
695
695
  hsv: "78° / 28% / 92%"
696
696
  text_color: "Black"
697
- text_color_hex: "#000000"
698
- contrast_ratio: "16.35:1"
697
+ text_color_hex: "#1C0D19"
698
+ contrast_ratio: "14.59:1"
699
699
  wcag_2_2_aa: true
700
- wcag_2_2_aa_margin: "+11.85:1"
700
+ wcag_2_2_aa_margin: "+10.09:1"
701
701
  wcag_2_2_aaa: true
702
- wcag_2_2_aaa_margin: "+9.35:1"
702
+ wcag_2_2_aaa_margin: "+7.59:1"
703
703
  hue: "78°"
704
704
  saturation: "28%"
705
705
  lightness: "92%"
@@ -710,12 +710,12 @@ green_shades:
710
710
  rgb: "196, 225, 127"
711
711
  hsv: "78° / 44% / 88%"
712
712
  text_color: "Black"
713
- text_color_hex: "#000000"
714
- contrast_ratio: "14.42:1"
713
+ text_color_hex: "#1C0D19"
714
+ contrast_ratio: "12.87:1"
715
715
  wcag_2_2_aa: true
716
- wcag_2_2_aa_margin: "+9.92:1"
716
+ wcag_2_2_aa_margin: "+8.37:1"
717
717
  wcag_2_2_aaa: true
718
- wcag_2_2_aaa_margin: "+7.42:1"
718
+ wcag_2_2_aaa_margin: "+5.87:1"
719
719
  hue: "78°"
720
720
  saturation: "44%"
721
721
  lightness: "88%"
@@ -726,12 +726,12 @@ green_shades:
726
726
  rgb: "176, 215, 85"
727
727
  hsv: "78° / 60% / 84%"
728
728
  text_color: "Black"
729
- text_color_hex: "#000000"
730
- contrast_ratio: "12.70:1"
729
+ text_color_hex: "#1C0D19"
730
+ contrast_ratio: "11.33:1"
731
731
  wcag_2_2_aa: true
732
- wcag_2_2_aa_margin: "+8.20:1"
732
+ wcag_2_2_aa_margin: "+6.83:1"
733
733
  wcag_2_2_aaa: true
734
- wcag_2_2_aaa_margin: "+5.70:1"
734
+ wcag_2_2_aaa_margin: "+4.33:1"
735
735
  hue: "78°"
736
736
  saturation: "60%"
737
737
  lightness: "84%"
@@ -742,12 +742,12 @@ green_shades:
742
742
  rgb: "156, 205, 42"
743
743
  hsv: "78° / 80% / 80%"
744
744
  text_color: "Black"
745
- text_color_hex: "#000000"
746
- contrast_ratio: "11.18:1"
745
+ text_color_hex: "#1C0D19"
746
+ contrast_ratio: "9.97:1"
747
747
  wcag_2_2_aa: true
748
- wcag_2_2_aa_margin: "+6.68:1"
748
+ wcag_2_2_aa_margin: "+5.47:1"
749
749
  wcag_2_2_aaa: true
750
- wcag_2_2_aaa_margin: "+4.18:1"
750
+ wcag_2_2_aaa_margin: "+2.97:1"
751
751
  hue: "78°"
752
752
  saturation: "80%"
753
753
  lightness: "80%"
@@ -758,12 +758,12 @@ green_shades:
758
758
  rgb: "128, 168, 34"
759
759
  hsv: "78° / 80% / 66%"
760
760
  text_color: "Black"
761
- text_color_hex: "#000000"
762
- contrast_ratio: "7.54:1"
761
+ text_color_hex: "#1C0D19"
762
+ contrast_ratio: "6.73:1"
763
763
  wcag_2_2_aa: true
764
- wcag_2_2_aa_margin: "+3.04:1"
765
- wcag_2_2_aaa: true
766
- wcag_2_2_aaa_margin: "+0.54:1"
764
+ wcag_2_2_aa_margin: "+2.23:1"
765
+ wcag_2_2_aaa: false
766
+ wcag_2_2_aaa_margin: "-0.27:1"
767
767
  hue: "78°"
768
768
  saturation: "80%"
769
769
  lightness: "66%"
@@ -774,12 +774,12 @@ green_shades:
774
774
  rgb: "109, 144, 29"
775
775
  hsv: "78° / 80% / 56%"
776
776
  text_color: "Black"
777
- text_color_hex: "#000000"
778
- contrast_ratio: "5.66:1"
777
+ text_color_hex: "#1C0D19"
778
+ contrast_ratio: "5.05:1"
779
779
  wcag_2_2_aa: true
780
- wcag_2_2_aa_margin: "+1.16:1"
780
+ wcag_2_2_aa_margin: "+0.55:1"
781
781
  wcag_2_2_aaa: false
782
- wcag_2_2_aaa_margin: "-1.34:1"
782
+ wcag_2_2_aaa_margin: "-1.95:1"
783
783
  hue: "78°"
784
784
  saturation: "80%"
785
785
  lightness: "56%"
@@ -868,12 +868,12 @@ palette:
868
868
  rgb: "239, 167, 36"
869
869
  hsv: "39° / 85% / 94%"
870
870
  text_color: "Black"
871
- text_color_hex: "#000000"
872
- contrast_ratio: "10.22:1"
871
+ text_color_hex: "#1C0D19"
872
+ contrast_ratio: "9.12:1"
873
873
  wcag_2_2_aa: true
874
- wcag_2_2_aa_margin: "+5.72:1"
874
+ wcag_2_2_aa_margin: "+4.62:1"
875
875
  wcag_2_2_aaa: true
876
- wcag_2_2_aaa_margin: "+3.22:1"
876
+ wcag_2_2_aaa_margin: "+2.12:1"
877
877
  hue: "39°"
878
878
  saturation: "85%"
879
879
  lightness: "94%"
@@ -926,12 +926,12 @@ palette:
926
926
  rgb: "156, 205, 42"
927
927
  hsv: "78° / 80% / 80%"
928
928
  text_color: "Black"
929
- text_color_hex: "#000000"
930
- contrast_ratio: "11.18:1"
929
+ text_color_hex: "#1C0D19"
930
+ contrast_ratio: "9.97:1"
931
931
  wcag_2_2_aa: true
932
- wcag_2_2_aa_margin: "+6.68:1"
932
+ wcag_2_2_aa_margin: "+5.47:1"
933
933
  wcag_2_2_aaa: true
934
- wcag_2_2_aaa_margin: "+4.18:1"
934
+ wcag_2_2_aaa_margin: "+2.97:1"
935
935
  hue: "78°"
936
936
  saturation: "80%"
937
937
  lightness: "80%"
@@ -1038,5 +1038,5 @@ base_colors:
1038
1038
  shade_name: "centos-green-500"
1039
1039
  light_bg_contrast: "1.88:1"
1040
1040
  light_bg_status: false
1041
- dark_bg_contrast: "11.18:1"
1041
+ dark_bg_contrast: "9.97:1"
1042
1042
  dark_bg_status: true
@@ -41,10 +41,12 @@ properties:
41
41
  `/privacy/`, `#terms`).
42
42
  color:
43
43
  type: string
44
+ default: light
44
45
  description: >-
45
- The Bootstrap link color scheme (e.g., `light`, `primary`). Has no
46
- effect when `class` is also set, because the Copyright component
47
- supplies a default `class` that takes precedence.
46
+ The Bootstrap link color scheme (e.g., `light`, `primary`).
47
+ Substituted into `class`'s own default (see `class` below).
48
+ Has no effect when `class` is also set, because an explicit
49
+ `class` overrides the default entirely.
48
50
  icon:
49
51
  type: string
50
52
  description: >-
@@ -65,9 +67,14 @@ properties:
65
67
  (e.g., `menuitem`).
66
68
  class:
67
69
  type: string
70
+ default: "link link-{color} link-offset-3 link-offset-3-hover link-underline-{color} link-underline-opacity-0 link-underline-opacity-100-hover border-start ms-2 ps-2"
68
71
  description: >-
69
72
  Custom CSS classes applied to the anchor element. When set,
70
- overrides the default legal link styling entirely.
73
+ overrides the default legal link styling entirely, including
74
+ `color`. When unset, the template substitutes `color` (or
75
+ this property's own default color, if `color` is also
76
+ unset) into this schema's own documented default (see
77
+ `default` above).
71
78
  required:
72
79
  - name
73
80
  additionalProperties: false
@@ -49,13 +49,22 @@ properties:
49
49
  - _blank
50
50
  class:
51
51
  type: string
52
- default: ""
52
+ default: "link link-{color} link-offset-3 link-offset-3-hover link-underline-{color} link-underline-opacity-0 link-underline-opacity-100-hover"
53
53
  description: >-
54
54
  One or more CSS classes to apply to the link element. Use this
55
55
  to override default link styling and apply component styles like
56
- Bootstrap buttons (e.g., `btn btn-primary btn-lg`). When not set, the template
57
- applies: `link link-{color} link-offset-3 link-offset-3-hover
58
- link-underline-{color} link-underline-opacity-0 link-underline-opacity-100-hover`.
56
+ Bootstrap buttons (e.g., `btn btn-primary btn-lg`). When not set, the
57
+ template substitutes `color` into this schema's own documented
58
+ default (see `default` above) — a baseline specific to this
59
+ component's color-driven presentation, independent of
60
+ `jekyll-link-decorator`'s site-wide `default_link_classes` (which
61
+ only applies to plain links the decorator's post-processing pass
62
+ can reach; several `color`-driven call sites — `bits`, `card`,
63
+ `shortcut` — render via the layout, which the decorator
64
+ structurally never processes). Override this schema's default via
65
+ a site's own `_data/base/link_schema.yml` to change color-mode
66
+ styling site-wide, or pass `class` on an individual `{% include %}`
67
+ call to override just that one link.
59
68
  role:
60
69
  type: string
61
70
  default: ""
@@ -77,17 +86,15 @@ properties:
77
86
  type: string
78
87
  default: primary
79
88
  description: >-
80
- The visual color of the link text. Possible values are standard
81
- Bootstrap color utility classes (e.g., `primary`, `danger`, `dark`).
82
- enum:
83
- - primary
84
- - secondary
85
- - success
86
- - info
87
- - warning
88
- - danger
89
- - light
90
- - dark
89
+ The visual color of the link text and underline, substituted into
90
+ the `class` property's default (see `class` above) as
91
+ `link-{color}` and `link-underline-{color}`. Accepts either one of
92
+ Bootstrap's eight semantic names (`primary`, `secondary`,
93
+ `success`, `info`, `warning`, `danger`, `light`, `dark`) or a
94
+ CentOS-generated color-shade name from the color component (e.g.,
95
+ `centos-purple`, `centos-orange-700`) — see
96
+ [CSS utility classes reference](/components/color/#css-utility-classes-reference).
97
+ Only takes effect when `class` is not also set.
91
98
  icon:
92
99
  type: string
93
100
  default: ""
@@ -16,7 +16,16 @@ Optional Inputs:
16
16
  - class: Card container CSS classes
17
17
  - color: Color scheme for styling (default: "primary")
18
18
  - image, icon, screenshot: Visual elements
19
- - name, description: Text content
19
+ - name, description: Text content, run through Liquid's `markdownify` filter
20
+ so inline Markdown (e.g. `` `code` `` spans) renders as HTML. The
21
+ paragraph wrapper kramdown adds is stripped, since each already renders
22
+ inside its own `<p>`.
23
+ - name_link: URL to wrap `name` in a link, rendered via
24
+ base/link.html.liquid. Empty by default (name renders as plain text).
25
+ - name_link_class: CSS classes for the name_link anchor (e.g. "link-dark").
26
+ Ignored when name_link is empty; when left empty, falls back to
27
+ base/link.html.liquid's own color-driven default styling, driven by this
28
+ card's own `color` parameter (not a hardcoded "primary").
20
29
  - actions: Array of action buttons [{name, link, icon}]
21
30
  - All image/icon/name/description have customizable CSS classes
22
31
 
@@ -37,6 +46,8 @@ Data Source:
37
46
  {%- assign card_icon_class = include.icon_class | default: with_card_schema.icon_class.default %}
38
47
  {%- assign card_name = include.name | default: with_card_schema.name.default %}
39
48
  {%- assign card_name_class = include.name_class | default: with_card_schema.name_class.default %}
49
+ {%- assign card_name_link = include.name_link | default: with_card_schema.name_link.default %}
50
+ {%- assign card_name_link_class = include.name_link_class | default: with_card_schema.name_link_class.default %}
40
51
  {%- assign card_screenshot = include.screenshot | default: with_card_schema.screenshot.default %}
41
52
  {%- assign card_screenshot_class = include.screenshot_class | default: with_card_schema.screenshot_class.default %}
42
53
  {%- assign card_screenshot_style = include.screenshot_style | default: with_card_schema.screenshot_style.default %}
@@ -70,15 +81,26 @@ Data Source:
70
81
  {% endif %}
71
82
  {%- endcapture %}
72
83
 
84
+ {%- comment %} Liquid 4.0.4 (this project's pinned version) has no remove_last/replace_last
85
+ filter, so the trailing "</p>" kramdown adds is stripped via split/join
86
+ instead: splitting on "</p>" drops the trailing empty segment left by the
87
+ closing tag at the very end of the string, and joining the remaining parts
88
+ back with "</p>" reconstructs everything except that final occurrence. {% endcomment %}
89
+ {%- capture card_name_markdown -%}{{ card_name | markdownify }}{%- endcapture -%}
90
+ {%- assign card_name_html = card_name_markdown | strip | remove_first: "<p>" | split: "</p>" | join: "</p>" | strip -%}
91
+
92
+ {%- capture card_description_markdown -%}{{ card_description | markdownify }}{%- endcapture -%}
93
+ {%- assign card_description_html = card_description_markdown | strip | remove_first: "<p>" | split: "</p>" | join: "</p>" | strip -%}
94
+
73
95
  {%- capture html_card_name -%}
74
96
  {% if card_name != "" %}
75
- <p class="{{ card_name_class }}">{{ card_name }}</p>
97
+ <p class="{{ card_name_class }}">{% if card_name_link != "" %}{% include base/link.html.liquid name=card_name_html link=card_name_link class=card_name_link_class color=card_color %}{% else %}{{ card_name_html }}{% endif %}</p>
76
98
  {% endif %}
77
99
  {%- endcapture %}
78
100
 
79
101
  {%- capture html_card_description -%}
80
102
  {% if card_description != "" %}
81
- <p class="{{ card_description_class }}">{{ card_description }}</p>
103
+ <p class="{{ card_description_class }}">{{ card_description_html }}</p>
82
104
  {% endif %}
83
105
  {%- endcapture %}
84
106
 
@@ -27,7 +27,7 @@
27
27
  <td class="text-nowrap"><i class="fas fa-circle fa-xl" style="color: {{ item.hex }}"></i><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy hex value" data-copy-value="{{ item.hex }}" aria-label="Copy hex value {{ item.hex }}"><code>{{ item.hex }}</code> <span class="fa-regular fa-copy"></span></span></td>
28
28
  <td class="text-nowrap"><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy RGB value" data-copy-value="{{ item.rgb }}" aria-label="Copy RGB value {{ item.rgb }}"><code>{{ item.rgb }}</code> <span class="fa-regular fa-copy"></span></span></td>
29
29
  <td class="text-nowrap"><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy HSV value" data-copy-value="{{ item.hsv }}" aria-label="Copy HSV value {{ item.hsv }}"><code>{{ item.hsv }}</code> <span class="fa-regular fa-copy"></span></span></td>
30
- <td><span class="badge {{ item.text_badge }}">{{ item.text_color }}</span></td>
30
+ <td class="text-nowrap">{% if item.text_color == "Black" %}<span class="badge {{ item.text_badge }}" data-bs-toggle="tooltip" data-bs-title="{{ item.text_color }} — near-black brand color, not literal black"><span aria-hidden="true">{{ item.text_color | slice: 0, 1 }}</span><span class="visually-hidden">{{ item.text_color }}</span></span>{% else %}<span class="badge {{ item.text_badge }}" data-bs-toggle="tooltip" data-bs-title="{{ item.text_color }}"><span aria-hidden="true">{{ item.text_color | slice: 0, 1 }}</span><span class="visually-hidden">{{ item.text_color }}</span></span>{% endif %} <span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy text color hex value" data-copy-value="{{ item.text_color_hex }}" aria-label="Copy text color hex value {{ item.text_color_hex }}"><code>{{ item.text_color_hex }}</code> <span class="fa-regular fa-copy"></span></span></td>
31
31
  <td class="text-nowrap"><code>{{ item.contrast_ratio | remove: '`' }}</code> {% include base/link.html.liquid link=_webaim_link target="_blank" class="text-decoration-none" icon="fas fa-external-link-alt" data_bs_toggle="tooltip" data_bs_title="Verify with WebAIM" aria_label="Verify contrast ratio with WebAIM" %}</td>
32
32
  <td class="text-nowrap">{% if item.wcag_2_2_aa %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Exceeds WCAG 2.2 AA standard (4.5:1 minimum)"><i class="fas fa-circle-check text-success"></i></span>{% else %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Underperforms WCAG 2.2 AA standard (4.5:1 minimum)"><i class="fas fa-circle-xmark text-danger"></i></span>{% endif %} <code>{{ item.wcag_2_2_aa_margin | remove: '`' }}</code></td>
33
33
  <td class="text-nowrap">{% if item.wcag_2_2_aaa %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Exceeds WCAG 2.2 AAA standard (7.0:1 minimum)"><i class="fas fa-circle-check text-success"></i></span>{% else %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Underperforms WCAG 2.2 AAA standard (7.0:1 minimum)"><i class="fas fa-circle-xmark text-danger"></i></span>{% endif %} <code>{{ item.wcag_2_2_aaa_margin | remove: '`' }}</code></td>
@@ -50,9 +50,12 @@ Data Source Hierarchy (priority):
50
50
  {%- assign copyright_author = with_copyright_data.author | default: with_copyright_schema.author.default %}
51
51
  {%- assign copyright_legals = with_copyright_data.legals | default: with_copyright_schema.legals.default %}
52
52
 
53
+ {%- assign copyright_legal_schema = with_copyright_schema.legals.items.properties %}
54
+
53
55
  {%- capture copyright_links -%}
54
56
  {%- for item in copyright_legals -%}
55
- {%- assign copyright_link_class = item.class | default: "link link-offset-3 link-offset-3-hover link-underline-primary link-underline-opacity-0 link-underline-opacity-100-hover border-start ms-2 ps-2 link-light" %}
57
+ {%- assign copyright_link_color = item.color | default: copyright_legal_schema.color.default %}
58
+ {%- assign copyright_link_class = item.class | default: copyright_legal_schema.class.default | replace: '{color}', copyright_link_color %}
56
59
  {%- include base/link.html.liquid
57
60
  class = copyright_link_class
58
61
  name = item.name
@@ -43,10 +43,11 @@ Security & External Links:
43
43
  {%- if page.with_link -%}
44
44
  {%- capture html_link -%}
45
45
  {%- comment %} === Data source selection === {% endcomment %}
46
+ {%- assign link_schema = site.data.base.link_schema.properties.with_link_data.properties %}
46
47
  {%- assign link = include.link | default: nil %}
47
48
  {%- assign name = include.name | default: nil %}
48
49
  {%- assign target = include.target | default: nil %}
49
- {%- assign color = include.color | default: "primary" %}
50
+ {%- assign color = include.color | default: link_schema["color"].default %}
50
51
  {%- assign role = include.role | default: nil %}
51
52
  {%- assign icon = include.icon | default: nil %}
52
53
  {%- assign icon_position = include.icon_position | default: "start" %}
@@ -89,7 +90,7 @@ Security & External Links:
89
90
  {%- if class != nil -%}
90
91
  {%- assign link_class = class %}
91
92
  {%- else -%}
92
- {%- capture link_class -%}link link-{{ color }} link-offset-3 link-offset-3-hover link-underline-{{ color }} link-underline-opacity-0 link-underline-opacity-100-hover{%- endcapture -%}
93
+ {%- assign link_class = link_schema["class"].default | replace: '{color}', color %}
93
94
  {%- endif -%}
94
95
 
95
96
  {%- comment %} --- Security attributes for external links --- {% endcomment %}
@@ -66,7 +66,6 @@ Conditional Logic:
66
66
  {% include base/link.html.liquid
67
67
  name = item.name
68
68
  link = item_link
69
- color = "primary"
70
69
  %}
71
70
  </li>
72
71
  {% endfor %}
@@ -41,20 +41,7 @@ body {
41
41
  }
42
42
  }
43
43
 
44
- // --------------------------------------------------------------------------------
45
- // Backgrounds, Texts, and Gradients classes
46
- // --------------------------------------------------------------------------------
47
- @each $color, $value in $theme-colors {
48
- // Create a background utility class for each color.
49
- .bg-#{$color} {
50
- background-color: $value;
51
- }
52
- // Create a text color utility class for each color.
53
- .text-#{$color} {
54
- color: $value;
55
- }
56
- }
57
-
44
+ // Text gradient classes (no native Bootstrap equivalent)
58
45
  @each $color, $value in $centos-text-gradients {
59
46
  .text-gradient-#{$color} {
60
47
  background-image: $value;
@@ -115,6 +102,10 @@ body {
115
102
  background-position: bottom;
116
103
  }
117
104
 
105
+ .bg-image-cover {
106
+ background-size: cover;
107
+ }
108
+
118
109
  // --------------------------------------------------------------------------------
119
110
  // Lists
120
111
  // --------------------------------------------------------------------------------
@@ -170,11 +161,15 @@ $centos-alert-icons: (
170
161
  // Markdown-based alerts with CSS-generated icons
171
162
  // Only apply to alerts that are neither announcements nor breaking news
172
163
  .alert:not(.announcement):not(.breakingnews) {
173
- padding-left: $spacer * 3;
174
164
  border-left-width: 0.5rem;
175
165
 
166
+ // Reserve icon space only for the semantic types that have an icon
167
+ // defined in $centos-alert-icons. Shade-extended alert-centos-* classes
168
+ // keep the default padding so they don't carry an empty icon gutter.
176
169
  @each $color, $icon-url in $centos-alert-icons {
177
170
  &.alert-#{$color} {
171
+ padding-left: $spacer * 3;
172
+
178
173
  &::before {
179
174
  content: "";
180
175
  position: absolute;
@@ -1,37 +1,38 @@
1
- @use "sass:math";
1
+ // Extend Bootstrap's text-emphasis/bg-subtle/border-subtle maps — consumed
2
+ // by .alert-*, .list-group-item-*, and the .bg-*-subtle/.text-*-emphasis/
3
+ // .border-*-subtle utilities via --bs-{color}-text-emphasis/-bg-subtle/
4
+ // -border-subtle custom properties — to cover every CentOS color and shade,
5
+ // not just Bootstrap's original 8 semantic names. Without this,
6
+ // .alert-centos-*/.list-group-item-* reference those custom properties but
7
+ // nothing ever defines them for CentOS colors, so the classes apply with no
8
+ // visible color at all (a `var()` pointing at an undefined custom property
9
+ // falls back to the property's initial value, e.g. a transparent
10
+ // background).
11
+ //
12
+ // Unlike $theme-colors-rgb (see base/theme-colors), Bootstrap defines these
13
+ // as literal 8-entry maps in bootstrap/_maps.scss rather than deriving them
14
+ // from $theme-colors via map-loop, so this doesn't need an import-order
15
+ // fix — base/maps already runs after bootstrap/maps defines the Bootstrap
16
+ // defaults and before bootstrap/bootstrap's _root.scss compiles them into
17
+ // :root custom properties, so extending them here is enough.
18
+ $bootstrap-semantic-colors: primary, secondary, success, danger, warning, info, light, dark;
2
19
 
3
- // Merge the base colors into the main `$theme-colors` map
4
- $theme-colors: map-merge($theme-colors, $centos-base-colors);
20
+ @each $name, $value in $theme-colors {
21
+ @if not index($bootstrap-semantic-colors, $name) {
22
+ // Formulas match Bootstrap's own defaults for these maps exactly (see
23
+ // $primary-text-emphasis/-bg-subtle/-border-subtle in
24
+ // bootstrap/_variables.scss) so CentOS colors get the same tint/shade
25
+ // treatment Bootstrap's own semantic colors do.
26
+ $theme-colors-text: map-merge($theme-colors-text, ($name: shade-color($value, 60%)));
27
+ $theme-colors-bg-subtle: map-merge($theme-colors-bg-subtle, ($name: tint-color($value, 80%)));
28
+ $theme-colors-border-subtle: map-merge($theme-colors-border-subtle, ($name: tint-color($value, 60%)));
5
29
 
6
- // Generate all custom color shades and merge them into `$theme-colors`.
7
- // Uses saturation-normalized shade generation to maintain brand saturation
8
- // throughout the dark range (grades 800-950), creating visual consistency
9
- // between web UI and wallpaper colors.
10
- @each $name, $color in $centos-base-colors {
11
- @each $shade in $centos-color-shades {
12
- $shade-name: "#{$name}-#{$shade}";
13
- $shade-color: null;
14
-
15
- @if $shade < 500 {
16
- // Light shades: use standard tint-color (adds white, works well)
17
- $shade-color: tint-color($color, percentage(math.div(500 - $shade, 500)));
18
- } @else if $shade > 500 {
19
- // Special case: Green 700 needs 30% black mix (not 20%) for AA compliance.
20
- // This ensures WHITE text contrast meets 4.5:1 threshold.
21
- @if $name == "centos-green" and $shade == 700 {
22
- $shade-color: shade-color($color, 30%);
23
- } @else {
24
- // NEW: Use saturation-normalized shade for all other dark shades
25
- // This function increases saturation multiplier for grades 800-950
26
- // Result: vivid dark colors that feel on-brand
27
- $shade-color: saturated-shade($color, $shade);
28
- }
29
- } @else {
30
- // Grade 500: use base color as-is
31
- $shade-color: $color;
30
+ @if $enable-dark-mode {
31
+ // Matches $primary-text-emphasis-dark/-bg-subtle-dark/-border-subtle-dark.
32
+ $theme-colors-text-dark: map-merge($theme-colors-text-dark, ($name: tint-color($value, 40%)));
33
+ $theme-colors-bg-subtle-dark: map-merge($theme-colors-bg-subtle-dark, ($name: shade-color($value, 80%)));
34
+ $theme-colors-border-subtle-dark: map-merge($theme-colors-border-subtle-dark, ($name: shade-color($value, 40%)));
32
35
  }
33
-
34
- $theme-colors: map-merge($theme-colors, ($shade-name: $shade-color));
35
36
  }
36
37
  }
37
38
 
@@ -73,23 +74,14 @@ $centos-text-gradients: (
73
74
  )
74
75
  );
75
76
 
76
- // Define custom utilities using the correct Bootstrap API. This allows you to
77
- // use classes like `text-bg-centos-purple-800`.
77
+ // Define custom utilities using the correct Bootstrap API. These are genuine
78
+ // custom concepts Bootstrap has no equivalent for; `.bg-*`/`.text-*`/
79
+ // `.border-*`/`.text-bg-*`/`.link-underline-*` are now generated natively by
80
+ // Bootstrap's own utilities API for every CentOS color and shade (see
81
+ // base/theme-colors, imported before bootstrap/maps/utilities).
78
82
  $utilities: map-merge(
79
83
  $utilities,
80
84
  (
81
- "centos-text-bg-color": (
82
- property: background-color,
83
- class: text-bg,
84
- values: $theme-colors,
85
- state: "text-bg"
86
- ),
87
- "centos-border-color": (
88
- property: border-color,
89
- class: border,
90
- values: $theme-colors,
91
- state: "border"
92
- ),
93
85
  "centos-bg-gradient": (
94
86
  property: background,
95
87
  class: bg-gradient,
@@ -0,0 +1,46 @@
1
+ @use "sass:math";
2
+
3
+ // Merge the base colors and generated shades into `$theme-colors` here, in
4
+ // their own partial imported right after bootstrap/variables-dark (so
5
+ // $theme-colors already exists) but before bootstrap/maps/utilities (see
6
+ // src/CSS/stylesheet.min.scss), so those partials snapshot the FULL
7
+ // CentOS-merged color set when they compute
8
+ // $theme-colors-rgb/$utilities-colors/etc. Those snapshots are taken once,
9
+ // eagerly, at import time — Sass variables aren't reactive — so if this
10
+ // merge ran any later (e.g. from base/maps, which still runs after
11
+ // bootstrap/utilities for unrelated reasons), Bootstrap's native
12
+ // .bg-*/.text-*/.border-*/.text-bg-*/.link-underline-* utilities would only
13
+ // ever cover Bootstrap's original 8 semantic names.
14
+ $theme-colors: map-merge($theme-colors, $centos-base-colors);
15
+
16
+ // Generate all custom color shades and merge them into `$theme-colors`.
17
+ // Uses saturation-normalized shade generation to maintain brand saturation
18
+ // throughout the dark range (grades 800-950), creating visual consistency
19
+ // between web UI and wallpaper colors.
20
+ @each $name, $color in $centos-base-colors {
21
+ @each $shade in $centos-color-shades {
22
+ $shade-name: "#{$name}-#{$shade}";
23
+ $shade-color: null;
24
+
25
+ @if $shade < 500 {
26
+ // Light shades: use standard tint-color (adds white, works well)
27
+ $shade-color: tint-color($color, percentage(math.div(500 - $shade, 500)));
28
+ } @else if $shade > 500 {
29
+ // Special case: Green 700 needs 30% black mix (not 20%) for AA compliance.
30
+ // This ensures WHITE text contrast meets 4.5:1 threshold.
31
+ @if $name == "centos-green" and $shade == 700 {
32
+ $shade-color: shade-color($color, 30%);
33
+ } @else {
34
+ // NEW: Use saturation-normalized shade for all other dark shades
35
+ // This function increases saturation multiplier for grades 800-950
36
+ // Result: vivid dark colors that feel on-brand
37
+ $shade-color: saturated-shade($color, $shade);
38
+ }
39
+ } @else {
40
+ // Grade 500: use base color as-is
41
+ $shade-color: $color;
42
+ }
43
+
44
+ $theme-colors: map-merge($theme-colors, ($shade-name: $shade-color));
45
+ }
46
+ }
@@ -21,6 +21,14 @@
21
21
  // This defines variables like $theme-colors and $utilities.
22
22
  @import "bootstrap/variables";
23
23
  @import "bootstrap/variables-dark";
24
+
25
+ // 3b. Merge CentOS colors/shades into $theme-colors now that Bootstrap has
26
+ // defined it, but before bootstrap/maps and bootstrap/utilities snapshot it,
27
+ // so Bootstrap's native .bg-*/.text-*/.border-*/.text-bg-*/.link-underline-*
28
+ // utilities cover every CentOS color and shade automatically instead of only
29
+ // Bootstrap's original 8 semantic names.
30
+ @import "base/theme-colors";
31
+
24
32
  @import "bootstrap/maps";
25
33
  @import "bootstrap/mixins";
26
34
  @import "bootstrap/utilities";
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-theme-centos
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.52.0.beta.98
4
+ version: 2.52.0.beta.99
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alain Reguera Delgado
@@ -381,6 +381,7 @@ files:
381
381
  - _sass/base/_download.scss
382
382
  - _sass/base/_light-dark.scss
383
383
  - _sass/base/_maps.scss
384
+ - _sass/base/_theme-colors.scss
384
385
  - _sass/base/_variables.scss
385
386
  - _sass/bootstrap/_accordion.scss
386
387
  - _sass/bootstrap/_alert.scss