jekyll-theme-centos 2.52.0.beta.4 → 2.52.0.beta.6

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 (315) hide show
  1. checksums.yaml +4 -4
  2. data/_data/base/announcement_schema.yml +50 -0
  3. data/_data/base/artwork_schema.yml +46 -0
  4. data/_data/base/backtotop_schema.yml +53 -0
  5. data/_data/base/bits.yml +96 -0
  6. data/_data/base/bits_schema.yml +183 -0
  7. data/_data/base/breadcrumb_schema.yml +14 -0
  8. data/_data/base/breakingnews_schema.yml +59 -0
  9. data/_data/base/color.yml +1042 -0
  10. data/_data/base/color_schema.yml +1036 -0
  11. data/_data/base/content.yml +2 -0
  12. data/_data/base/content_schema.yml +26 -0
  13. data/_data/base/converter_link_schema.yml +48 -0
  14. data/_data/base/copyright.yml +12 -0
  15. data/_data/base/copyright_schema.yml +34 -0
  16. data/_data/base/copyvalue_schema.yml +49 -0
  17. data/_data/base/datatable_schema.yml +57 -0
  18. data/_data/base/event_schema.yml +122 -0
  19. data/_data/base/fontawesome_schema.yml +49 -0
  20. data/_data/base/highlight_schema.yml +68 -0
  21. data/_data/base/languages.yml +186 -0
  22. data/_data/base/link_schema.yml +153 -0
  23. data/_data/base/locales_schema.yml +25 -0
  24. data/_data/base/navbar.yml +20 -0
  25. data/_data/base/navbar_schema.yml +121 -0
  26. data/_data/base/navindex_schema.yml +67 -0
  27. data/_data/base/ogp_schema.yml +186 -0
  28. data/_data/base/project.yml +37 -0
  29. data/_data/base/project_schema.yml +120 -0
  30. data/_data/base/shortcut_schema.yml +74 -0
  31. data/_data/base/social.yml +25 -0
  32. data/_data/base/social_schema.yml +53 -0
  33. data/_data/base/title_schema.yml +49 -0
  34. data/_data/base/toc_schema.yml +100 -0
  35. data/_data/download/cards.yml +309 -0
  36. data/_data/download/navbar.yml +11 -0
  37. data/_data/sponsors/carousel.yml +37 -0
  38. data/_data/sponsors/navbar.yml +6 -0
  39. data/_includes/base/announcement.html.liquid +51 -0
  40. data/_includes/base/artwork.html.liquid +49 -0
  41. data/_includes/base/backtotop.html.liquid +51 -0
  42. data/_includes/base/bits.html.liquid +135 -0
  43. data/_includes/base/breadcrumb.html.liquid +37 -0
  44. data/_includes/base/breakingnews.html.liquid +74 -0
  45. data/_includes/base/card.html.liquid +96 -0
  46. data/_includes/base/copyright.html.liquid +56 -0
  47. data/_includes/base/copyvalue.html.liquid +59 -0
  48. data/_includes/base/datatable.html.liquid +64 -0
  49. data/_includes/base/event.html.liquid +89 -0
  50. data/_includes/base/fontawesome.html.liquid +58 -0
  51. data/_includes/base/head.html.liquid +101 -0
  52. data/_includes/base/highlight.html.liquid +65 -0
  53. data/_includes/base/image.html.liquid +42 -0
  54. data/_includes/base/link.html.liquid +139 -0
  55. data/_includes/base/locales.html.liquid +41 -0
  56. data/_includes/base/navbar.html.liquid +106 -0
  57. data/_includes/base/navindex.html.liquid +162 -0
  58. data/_includes/base/ogp.html.liquid +118 -0
  59. data/_includes/base/project.html.liquid +90 -0
  60. data/_includes/base/script.html.liquid +59 -0
  61. data/_includes/base/shortcut.html.liquid +65 -0
  62. data/_includes/base/social.html.liquid +59 -0
  63. data/_includes/base/title.html.liquid +52 -0
  64. data/_includes/base/toc.html.liquid +91 -0
  65. data/_includes/base/toc_generator.html.liquid +189 -0
  66. data/_includes/download/cards-body-commands.html +7 -0
  67. data/_includes/download/cards-body-convert.html +10 -0
  68. data/_includes/download/cards-body-doc.html +9 -0
  69. data/_includes/download/cards-body-documentation.html +11 -0
  70. data/_includes/download/cards-body-eol.html +16 -0
  71. data/_includes/download/cards-body-mirrors.html +8 -0
  72. data/_includes/download/cards-body-screenshot.html +26 -0
  73. data/_includes/download/cards-body-screenshots.html +32 -0
  74. data/_includes/download/cards-body.html +8 -0
  75. data/_includes/download/cards-footer.html +3 -0
  76. data/_includes/download/cards-header-commands.html +8 -0
  77. data/_includes/download/cards-header-convert.html +8 -0
  78. data/_includes/download/cards-header-doc.html +8 -0
  79. data/_includes/download/cards-header-documentation.html +8 -0
  80. data/_includes/download/cards-header-eol.html +8 -0
  81. data/_includes/download/cards-header-mirrors.html +13 -0
  82. data/_includes/download/cards-header-screenshot.html +8 -0
  83. data/_includes/download/cards-header-screenshots.html +8 -0
  84. data/_includes/download/cards-header.html +13 -0
  85. data/_includes/download/cards.html +120 -0
  86. data/_includes/sponsors/cards.html +11 -0
  87. data/_includes/sponsors/carousel.html +24 -0
  88. data/_layouts/base/default.html +117 -0
  89. data/_layouts/download/cards.html +7 -0
  90. data/_layouts/download/default.html +7 -0
  91. data/_layouts/people/default.html +68 -0
  92. data/_sass/base/_customization.scss +251 -0
  93. data/_sass/base/_light-dark.scss +10 -0
  94. data/_sass/base/_maps.scss +104 -0
  95. data/_sass/base/_variables.scss +232 -0
  96. data/_sass/bootstrap/_accordion.scss +153 -0
  97. data/_sass/bootstrap/_alert.scss +68 -0
  98. data/_sass/bootstrap/_badge.scss +38 -0
  99. data/_sass/bootstrap/_breadcrumb.scss +40 -0
  100. data/_sass/bootstrap/_button-group.scss +147 -0
  101. data/_sass/bootstrap/_buttons.scss +216 -0
  102. data/_sass/bootstrap/_card.scss +238 -0
  103. data/_sass/bootstrap/_carousel.scss +226 -0
  104. data/_sass/bootstrap/_close.scss +66 -0
  105. data/_sass/bootstrap/_containers.scss +41 -0
  106. data/_sass/bootstrap/_dropdown.scss +250 -0
  107. data/_sass/bootstrap/_forms.scss +9 -0
  108. data/_sass/bootstrap/_functions.scss +302 -0
  109. data/_sass/bootstrap/_grid.scss +39 -0
  110. data/_sass/bootstrap/_helpers.scss +12 -0
  111. data/_sass/bootstrap/_images.scss +42 -0
  112. data/_sass/bootstrap/_list-group.scss +199 -0
  113. data/_sass/bootstrap/_maps.scss +174 -0
  114. data/_sass/bootstrap/_mixins.scss +42 -0
  115. data/_sass/bootstrap/_modal.scss +240 -0
  116. data/_sass/bootstrap/_nav.scss +197 -0
  117. data/_sass/bootstrap/_navbar.scss +289 -0
  118. data/_sass/bootstrap/_offcanvas.scss +147 -0
  119. data/_sass/bootstrap/_pagination.scss +109 -0
  120. data/_sass/bootstrap/_placeholders.scss +51 -0
  121. data/_sass/bootstrap/_popover.scss +196 -0
  122. data/_sass/bootstrap/_progress.scss +68 -0
  123. data/_sass/bootstrap/_reboot.scss +617 -0
  124. data/_sass/bootstrap/_root.scss +187 -0
  125. data/_sass/bootstrap/_spinners.scss +86 -0
  126. data/_sass/bootstrap/_tables.scss +171 -0
  127. data/_sass/bootstrap/_toasts.scss +73 -0
  128. data/_sass/bootstrap/_tooltip.scss +119 -0
  129. data/_sass/bootstrap/_transitions.scss +27 -0
  130. data/_sass/bootstrap/_type.scss +106 -0
  131. data/_sass/bootstrap/_utilities.scss +806 -0
  132. data/_sass/bootstrap/_variables-dark.scss +102 -0
  133. data/_sass/bootstrap/_variables.scss +1753 -0
  134. data/_sass/bootstrap/bootstrap-grid.scss +62 -0
  135. data/_sass/bootstrap/bootstrap-reboot.scss +10 -0
  136. data/_sass/bootstrap/bootstrap-utilities.scss +19 -0
  137. data/_sass/bootstrap/bootstrap.scss +52 -0
  138. data/_sass/bootstrap/forms/_floating-labels.scss +97 -0
  139. data/_sass/bootstrap/forms/_form-check.scss +189 -0
  140. data/_sass/bootstrap/forms/_form-control.scss +214 -0
  141. data/_sass/bootstrap/forms/_form-range.scss +91 -0
  142. data/_sass/bootstrap/forms/_form-select.scss +80 -0
  143. data/_sass/bootstrap/forms/_form-text.scss +11 -0
  144. data/_sass/bootstrap/forms/_input-group.scss +132 -0
  145. data/_sass/bootstrap/forms/_labels.scss +36 -0
  146. data/_sass/bootstrap/forms/_validation.scss +12 -0
  147. data/_sass/bootstrap/helpers/_clearfix.scss +3 -0
  148. data/_sass/bootstrap/helpers/_color-bg.scss +7 -0
  149. data/_sass/bootstrap/helpers/_colored-links.scss +30 -0
  150. data/_sass/bootstrap/helpers/_focus-ring.scss +5 -0
  151. data/_sass/bootstrap/helpers/_icon-link.scss +25 -0
  152. data/_sass/bootstrap/helpers/_position.scss +36 -0
  153. data/_sass/bootstrap/helpers/_ratio.scss +26 -0
  154. data/_sass/bootstrap/helpers/_stacks.scss +15 -0
  155. data/_sass/bootstrap/helpers/_stretched-link.scss +15 -0
  156. data/_sass/bootstrap/helpers/_text-truncation.scss +7 -0
  157. data/_sass/bootstrap/helpers/_visually-hidden.scss +8 -0
  158. data/_sass/bootstrap/helpers/_vr.scss +8 -0
  159. data/_sass/bootstrap/mixins/_alert.scss +18 -0
  160. data/_sass/bootstrap/mixins/_backdrop.scss +14 -0
  161. data/_sass/bootstrap/mixins/_banner.scss +7 -0
  162. data/_sass/bootstrap/mixins/_border-radius.scss +78 -0
  163. data/_sass/bootstrap/mixins/_box-shadow.scss +24 -0
  164. data/_sass/bootstrap/mixins/_breakpoints.scss +127 -0
  165. data/_sass/bootstrap/mixins/_buttons.scss +70 -0
  166. data/_sass/bootstrap/mixins/_caret.scss +69 -0
  167. data/_sass/bootstrap/mixins/_clearfix.scss +9 -0
  168. data/_sass/bootstrap/mixins/_color-mode.scss +21 -0
  169. data/_sass/bootstrap/mixins/_color-scheme.scss +7 -0
  170. data/_sass/bootstrap/mixins/_container.scss +11 -0
  171. data/_sass/bootstrap/mixins/_deprecate.scss +10 -0
  172. data/_sass/bootstrap/mixins/_forms.scss +163 -0
  173. data/_sass/bootstrap/mixins/_gradients.scss +47 -0
  174. data/_sass/bootstrap/mixins/_grid.scss +151 -0
  175. data/_sass/bootstrap/mixins/_image.scss +16 -0
  176. data/_sass/bootstrap/mixins/_list-group.scss +26 -0
  177. data/_sass/bootstrap/mixins/_lists.scss +7 -0
  178. data/_sass/bootstrap/mixins/_pagination.scss +10 -0
  179. data/_sass/bootstrap/mixins/_reset-text.scss +17 -0
  180. data/_sass/bootstrap/mixins/_resize.scss +6 -0
  181. data/_sass/bootstrap/mixins/_table-variants.scss +24 -0
  182. data/_sass/bootstrap/mixins/_text-truncate.scss +8 -0
  183. data/_sass/bootstrap/mixins/_transition.scss +26 -0
  184. data/_sass/bootstrap/mixins/_utilities.scss +97 -0
  185. data/_sass/bootstrap/mixins/_visually-hidden.scss +38 -0
  186. data/_sass/bootstrap/utilities/_api.scss +47 -0
  187. data/_sass/bootstrap/vendor/_rfs.scss +348 -0
  188. data/assets/css/base/stylesheet.min.scss +35 -0
  189. data/assets/icons/android-chrome-192.png +0 -0
  190. data/assets/icons/android-chrome-512.png +0 -0
  191. data/assets/icons/apple-touch-icon.png +0 -0
  192. data/assets/icons/favicon-16.png +0 -0
  193. data/assets/icons/favicon-32.png +0 -0
  194. data/assets/icons/favicon.ico +0 -0
  195. data/assets/icons/favicon.svg +1 -0
  196. data/assets/img/anaconda-symbolic.svg +1 -0
  197. data/assets/img/anaconda.svg +1 -0
  198. data/assets/img/base/centos-colors.gpl +55 -0
  199. data/assets/img/base/page-layout-default.png +0 -0
  200. data/assets/img/base/page-layout-default.svg +1158 -0
  201. data/assets/img/base/page-with-alert.png +0 -0
  202. data/assets/img/base/page-with-alert.svg +359 -0
  203. data/assets/img/base/page-with-announcement.png +0 -0
  204. data/assets/img/base/page-with-announcement.svg +499 -0
  205. data/assets/img/base/page-with-artwork.png +0 -0
  206. data/assets/img/base/page-with-artwork.svg +368 -0
  207. data/assets/img/base/page-with-backtotop.png +0 -0
  208. data/assets/img/base/page-with-backtotop.svg +275 -0
  209. data/assets/img/base/page-with-bits.png +0 -0
  210. data/assets/img/base/page-with-bits.svg +311 -0
  211. data/assets/img/base/page-with-breadcrumb.png +0 -0
  212. data/assets/img/base/page-with-breadcrumb.svg +676 -0
  213. data/assets/img/base/page-with-breakingnews.png +0 -0
  214. data/assets/img/base/page-with-breakingnews.svg +903 -0
  215. data/assets/img/base/page-with-color.png +0 -0
  216. data/assets/img/base/page-with-color.svg +57 -0
  217. data/assets/img/base/page-with-copyright.png +0 -0
  218. data/assets/img/base/page-with-copyright.svg +233 -0
  219. data/assets/img/base/page-with-copyvalue.png +0 -0
  220. data/assets/img/base/page-with-copyvalue.svg +57 -0
  221. data/assets/img/base/page-with-datatable.png +0 -0
  222. data/assets/img/base/page-with-datatable.svg +857 -0
  223. data/assets/img/base/page-with-event.png +0 -0
  224. data/assets/img/base/page-with-event.svg +522 -0
  225. data/assets/img/base/page-with-fontawesome.png +0 -0
  226. data/assets/img/base/page-with-fontawesome.svg +147 -0
  227. data/assets/img/base/page-with-heading.png +0 -0
  228. data/assets/img/base/page-with-heading.svg +57 -0
  229. data/assets/img/base/page-with-highlight.png +0 -0
  230. data/assets/img/base/page-with-highlight.svg +86 -0
  231. data/assets/img/base/page-with-link.png +0 -0
  232. data/assets/img/base/page-with-link.svg +395 -0
  233. data/assets/img/base/page-with-locales.png +0 -0
  234. data/assets/img/base/page-with-locales.svg +724 -0
  235. data/assets/img/base/page-with-navbar.png +0 -0
  236. data/assets/img/base/page-with-navbar.svg +438 -0
  237. data/assets/img/base/page-with-navindex.png +0 -0
  238. data/assets/img/base/page-with-navindex.svg +279 -0
  239. data/assets/img/base/page-with-ogp.png +0 -0
  240. data/assets/img/base/page-with-ogp.svg +368 -0
  241. data/assets/img/base/page-with-project.png +0 -0
  242. data/assets/img/base/page-with-project.svg +822 -0
  243. data/assets/img/base/page-with-shortcut.png +0 -0
  244. data/assets/img/base/page-with-shortcut.svg +233 -0
  245. data/assets/img/base/page-with-social.png +0 -0
  246. data/assets/img/base/page-with-social.svg +233 -0
  247. data/assets/img/base/page-with-title.png +0 -0
  248. data/assets/img/base/page-with-title.svg +584 -0
  249. data/assets/img/base/page-with-toc.png +0 -0
  250. data/assets/img/base/page-with-toc.svg +438 -0
  251. data/assets/img/base/screenshot-example-1200x600.png +0 -0
  252. data/assets/img/base/screenshot-example-1200x600.svg +114 -0
  253. data/assets/img/centos-dynamicmsg-logo.svg +1 -0
  254. data/assets/img/centos-dynamicmsg-type.svg +1 -0
  255. data/assets/img/centos-dynamicmsg-whitelogo.svg +1 -0
  256. data/assets/img/centos-dynamicmsg-whitetype.svg +1 -0
  257. data/assets/img/centos-gdm-whitelogo.svg +1 -0
  258. data/assets/img/centos-ipa-whiteheader.svg +1 -0
  259. data/assets/img/centos-logo-2bits.svg +1 -0
  260. data/assets/img/centos-logo.svg +1 -0
  261. data/assets/img/centos-message-logo.svg +1 -0
  262. data/assets/img/centos-motif.png +0 -0
  263. data/assets/img/centos-poweredby-logo.svg +1 -0
  264. data/assets/img/centos-social-share.png +0 -0
  265. data/assets/img/centos-symbol-2bits.svg +1 -0
  266. data/assets/img/centos-symbol.svg +1 -0
  267. data/assets/img/centos-type.svg +1 -0
  268. data/assets/img/centos-vertical-logo.svg +1 -0
  269. data/assets/img/centos-vertical-message-logo.svg +1 -0
  270. data/assets/img/centos-whitelogo.svg +1 -0
  271. data/assets/img/download/centos-linux-7-2009-screenshot-n.png +0 -0
  272. data/assets/img/download/centos-stream-8-screenshot-n.png +0 -0
  273. data/assets/img/download/centos-stream-9-screenshot-n.png +0 -0
  274. data/assets/img/download/distribution-release-screenshot-1.png +0 -0
  275. data/assets/img/download/distribution-release-screenshot-2.png +0 -0
  276. data/assets/img/download/distribution-release-screenshot-3.png +0 -0
  277. data/assets/img/download/distribution-release-screenshot-n.png +0 -0
  278. data/assets/img/download/distribution-release-screenshot-n.svg +134 -0
  279. data/assets/img/download/download.svg +421 -0
  280. data/assets/img/download/fig-the-downloads-cards-presentation-template.png +0 -0
  281. data/assets/img/people/page.svg +900 -0
  282. data/assets/img/people/page.webp +0 -0
  283. data/assets/img/people/username.webp +0 -0
  284. data/assets/img/sponsors/screenshot-sponsors-cards-layout.png +0 -0
  285. data/assets/img/sponsors/screenshot-sponsors-cards.png +0 -0
  286. data/assets/img/sponsors/screenshot-sponsors-carousel.png +0 -0
  287. data/assets/img/sponsors/screenshot-sponsors-default-layout.png +0 -0
  288. data/assets/img/sponsors/screenshot-sponsors-logo.png +0 -0
  289. data/assets/img/sponsors/sponsor-logo-1.png +0 -0
  290. data/assets/img/sponsors/sponsor-logo-2.png +0 -0
  291. data/assets/img/sponsors/sponsor-logo-3.png +0 -0
  292. data/assets/img/sponsors/sponsor-logo-4.png +0 -0
  293. data/assets/img/sponsors/sponsor-logo-5.png +0 -0
  294. data/assets/img/sponsors/sponsor-logo-6.png +0 -0
  295. data/assets/img/sponsors/sponsor-logo-7.png +0 -0
  296. data/assets/img/sponsors/sponsor-logo-8.png +0 -0
  297. data/assets/img/sponsors/sponsors-logo.svg +563 -0
  298. data/assets/js/base/backtotop.js +23 -0
  299. data/assets/js/base/copyvalue.js +251 -0
  300. data/assets/js/base/datatable.js +55 -0
  301. data/assets/js/base/highlight.js +6 -0
  302. data/assets/js/base/init-tooltips.js +5 -0
  303. data/assets/js/bootstrap.bundle.js +6312 -0
  304. data/assets/js/bootstrap.bundle.js.map +1 -0
  305. data/assets/js/bootstrap.bundle.min.js +7 -0
  306. data/assets/js/bootstrap.bundle.min.js.map +1 -0
  307. data/assets/js/bootstrap.esm.js +4447 -0
  308. data/assets/js/bootstrap.esm.js.map +1 -0
  309. data/assets/js/bootstrap.esm.min.js +7 -0
  310. data/assets/js/bootstrap.esm.min.js.map +1 -0
  311. data/assets/js/bootstrap.js +4494 -0
  312. data/assets/js/bootstrap.js.map +1 -0
  313. data/assets/js/bootstrap.min.js +7 -0
  314. data/assets/js/bootstrap.min.js.map +1 -0
  315. metadata +314 -1
@@ -0,0 +1,251 @@
1
+ // This file is for custom CSS rules and utility classes that override standard
2
+ // Bootstrap structure. It should be the last file in your import sequence.
3
+ // Here, you define and generate custom utility classes using the variables and
4
+ // maps that were set up previously.
5
+
6
+ // ================================================================================
7
+ // CSS Custom Properties (for dynamic inline styles)
8
+ // ================================================================================
9
+ // These variables are used in head.html.liquid for dynamic CSS generation.
10
+ // Defined here for centralized configuration and availability to inline styles.
11
+ :root {
12
+ // Breaking News Component
13
+ // Measurements used for calculating scroll-margin-top in head.html.liquid
14
+ --breakingnews-alert-height: 31px;
15
+ --navbar-height: 42px;
16
+ --heading-margin-top: 48px;
17
+
18
+ // Highlight.js Icon Sizing
19
+ // Used for copy button icon dimensions
20
+ --highlight-icon-width: 24px;
21
+ --highlight-icon-height: 24px;
22
+ }
23
+
24
+ body {
25
+ padding-top: $breakingnews-height;
26
+
27
+ .sticky-top-breakingnews {
28
+ top: $breakingnews-height;
29
+ }
30
+ }
31
+
32
+ // --------------------------------------------------------------------------------
33
+ // Backgrounds, Texts, and Gradients classes
34
+ // --------------------------------------------------------------------------------
35
+ @each $color, $value in $theme-colors {
36
+ // Create a background utility class for each color.
37
+ .bg-#{$color} {
38
+ background-color: $value;
39
+ }
40
+ // Create a text color utility class for each color.
41
+ .text-#{$color} {
42
+ color: $value;
43
+ }
44
+ }
45
+
46
+ @each $color, $value in $centos-text-gradients {
47
+ .text-gradient-#{$color} {
48
+ background-image: $value;
49
+ -webkit-background-clip: text;
50
+ -webkit-text-fill-color: transparent;
51
+ }
52
+ }
53
+
54
+ .bg-image {
55
+ background-image: url("../../img/centos-motif.png");
56
+ background-size: cover;
57
+ background-repeat: no-repeat;
58
+ }
59
+ .bg-image-center {
60
+ background-position: center;
61
+ }
62
+
63
+ .bg-image-top {
64
+ background-position: top;
65
+ }
66
+
67
+ .bg-image-bottom {
68
+ background-position: bottom;
69
+ }
70
+
71
+ // --------------------------------------------------------------------------------
72
+ // Lists
73
+ // --------------------------------------------------------------------------------
74
+ #pageToc {
75
+ li {
76
+ list-style: none;
77
+ }
78
+ li:before {
79
+ font-family: FontAwesome;
80
+ font-size: .35rem;
81
+ color: $body-color;
82
+ position: relative;
83
+ left: -0.5rem;
84
+ top: -0.2rem;
85
+ content:"\f111";
86
+ }
87
+ }
88
+
89
+ // --------------------------------------------------------------------------------
90
+ // Alerts (p), announcements (div), and breakingnews (div)
91
+ // --------------------------------------------------------------------------------
92
+ // Breaking News: Use Font Awesome HTML icons (fa-solid fa-bullhorn) for consistent
93
+ // visual identity across all color variations.
94
+ // Positioned at page level with sticky positioning.
95
+ // Excluded from CSS icon styling via .breakingnews class.
96
+ // Announcements: Use Font Awesome HTML icons (fa-solid fa-bullhorn) for consistent
97
+ // visual identity across all color variations.
98
+ // Positioned within .content (inside main).
99
+ // Excluded from CSS icon styling via .announcement class.
100
+ // Alerts: Use CSS-based SVG icons ($centos-alert-icons map) for markdown-based
101
+ // alerts within .content, with type-specific icons per color.
102
+ // Only applied to .alert:not(.announcement) to avoid styling announcements.
103
+
104
+ $centos-alert-icons: (
105
+ "primary": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' viewBox='0 0 42.333 42.333'><g transform='rotate(45 -180.13 -610.203) scale(1.0529)'><circle cx='388.123' cy='-290.716' r='20.103' style='fill:rgba(#{to-rgb(shade-color(map-get($theme-colors, 'primary'), 60%))},1);stroke:none;stroke-width:1.32292;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke;stop-color:#{to-rgb(shade-color(map-get($theme-colors, 'primary'), 60%))}'/><path d='M377.366-301.473v6.301l-4.456 4.456 4.456 4.456v6.302h6.302l4.456 4.456 4.456-4.456h6.301v-6.302l4.456-4.456-4.456-4.456v-6.301h-6.301l-4.456-4.456-4.456 4.456zm2.271 4.183 1.913-1.912 3.227 3.227v1.913h-1.912zm-2.163 5.222h4.565l1.352 1.352-1.352 1.353h-4.564zm9.297-9.297h2.705v4.564l-1.352 1.353-1.353-1.353zm.091 7.607 1.261 1.282 1.26-1.283-.015 1.798 1.798-.016-1.282 1.26 1.283 1.261-1.798-.015.016 1.798-1.26-1.282-1.261 1.283.015-1.799-1.798.016 1.282-1.26-1.283-1.26 1.799.015zm-7.225 9.617 3.228-3.228h1.912v1.913l-3.227 3.227zm11.833-11.834 3.228-3.227 1.913 1.912-3.228 3.228h-1.912zm-4.698 11.345 1.352-1.352 1.352 1.352v4.564h-2.704zm6.085-6.085 1.352-1.353h4.564v2.705h-4.564zm-1.387 3.346h1.913l3.228 3.228-1.913 1.912-3.228-3.227z' style='fill:%23fff;fill-opacity:1;stroke-width:9.12808;stroke-linecap:round;paint-order:fill markers stroke;stop-color:%23000'/></g></svg>"),
106
+ "secondary": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' viewBox='0 0 42.333 42.333'><g transform='rotate(45 -180.13 -610.203) scale(1.0529)'><circle cx='388.123' cy='-290.716' r='20.103' style='fill:rgba(#{to-rgb(shade-color(map-get($theme-colors, 'secondary'), 60%))},1);stroke:none;stroke-width:1.32292;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke;stop-color:#{to-rgb(shade-color(map-get($theme-colors, 'secondary'), 60%))}'/><path d='M377.366-301.473v6.301l-4.456 4.456 4.456 4.456v6.302h6.302l4.456 4.456 4.456-4.456h6.301v-6.302l4.456-4.456-4.456-4.456v-6.301h-6.301l-4.456-4.456-4.456 4.456zm2.271 4.183 1.913-1.912 3.227 3.227v1.913h-1.912zm-2.163 5.222h4.565l1.352 1.352-1.352 1.353h-4.564zm9.297-9.297h2.705v4.564l-1.352 1.353-1.353-1.353zm.091 7.607 1.261 1.282 1.26-1.283-.015 1.798 1.798-.016-1.282 1.26 1.283 1.261-1.798-.015.016 1.798-1.26-1.282-1.261 1.283.015-1.799-1.798.016 1.282-1.26-1.283-1.26 1.799.015zm-7.225 9.617 3.228-3.228h1.912v1.913l-3.227 3.227zm11.833-11.834 3.228-3.227 1.913 1.912-3.228 3.228h-1.912zm-4.698 11.345 1.352-1.352 1.352 1.352v4.564h-2.704zm6.085-6.085 1.352-1.353h4.564v2.705h-4.564zm-1.387 3.346h1.913l3.228 3.228-1.913 1.912-3.228-3.227z' style='fill:%23fff;fill-opacity:1;stroke-width:9.12808;stroke-linecap:round;paint-order:fill markers stroke;stop-color:%23000'/></g></svg>"),
107
+ "warning": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' fill='rgba(#{to-rgb(shade-color(map-get($theme-colors, 'warning'), 60%))},1)' viewBox='0 0 512 512'><path d='M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z'/></svg>"),
108
+ "info": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' fill='rgba(#{to-rgb(shade-color(map-get($theme-colors, 'info'), 60%))},1)' viewBox='0 0 512 512'><path d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/></svg>"),
109
+ "danger": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' fill='rgba(#{to-rgb(shade-color(map-get($theme-colors, 'danger'), 60%))},1)' viewBox='0 0 512 512'><path d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z'/></svg>"),
110
+ "success": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' fill='rgba(#{to-rgb(shade-color(map-get($theme-colors, 'success'), 60%))},1)' viewBox='0 0 512 512'><path d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z'/></svg>"),
111
+ "light": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' fill='rgba(#{to-rgb(shade-color(map-get($theme-colors, 'light'), 60%))},1)' viewBox='0 0 512 512'><path d='M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z'/></svg>"),
112
+ "dark": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' fill='rgba(#{to-rgb(shade-color(map-get($theme-colors, 'dark'), 60%))},1)' viewBox='0 0 512 512'><path d='M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z'/></svg>")
113
+ );
114
+
115
+ // Breaking news with HTML-based Font Awesome icons
116
+ // Positioned at page level (outside .content)
117
+ .sticky-top-breakingnews {
118
+ .breakingnews {
119
+ padding-left: $spacer * 1.25;
120
+ }
121
+ }
122
+
123
+ .content {
124
+ // Markdown-based alerts with CSS-generated icons
125
+ // Only apply to alerts that are neither announcements nor breaking news
126
+ .alert:not(.announcement):not(.breakingnews) {
127
+ padding-left: $spacer * 3;
128
+ border-left-width: 0.5rem;
129
+
130
+ @each $color, $icon-url in $centos-alert-icons {
131
+ &.alert-#{$color} {
132
+ &::before {
133
+ content: "";
134
+ position: absolute;
135
+ left: 1rem;
136
+ top: 1.75rem;
137
+ transform: translateY(-50%);
138
+ width: 1.25rem;
139
+ height: 1.25rem;
140
+ background-image: #{$icon-url};
141
+ background-repeat: no-repeat;
142
+ background-position: center;
143
+ background-size: contain;
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+
150
+ main {
151
+ // --------------------------------------------------------------------------------
152
+ // Navbar and linked headings' correction.
153
+ //
154
+ // By default, when you access page headings from the page table of content
155
+ // (toc) links, the heading is hidden behind the navbar. This workaround
156
+ // fixes the linked headings visibility issue in the page.
157
+ // Also applies the same correction to accordion buttons for consistent behavior.
158
+ // --------------------------------------------------------------------------------
159
+ .content > h1,
160
+ .content > h2,
161
+ .content > h3,
162
+ .content > h4,
163
+ .content > h5,
164
+ .content > h6 {
165
+ scroll-margin-top: 80px;
166
+ scroll-margin-bottom: 100px;
167
+ margin-top: 3rem;
168
+ }
169
+ .content > h2 {
170
+ border-bottom: 0.35rem solid $primary;
171
+ padding-bottom: $spacer * 0.5;
172
+ margin-bottom: $spacer * 0.75;
173
+ }
174
+ .content > figure {
175
+ scroll-margin-top: 80px;
176
+ scroll-margin-bottom: 100px;
177
+ }
178
+
179
+ // Accordion containers' correction.
180
+ //
181
+ // When accessing accordion containers via internal anchor links, they wouldn't be
182
+ // hidden behind the navbar. This correction ensures accordion containers remain
183
+ // visible when linked to, and works in conjunction with the dynamic calculation
184
+ // in head.html.liquid when breaking news is present.
185
+ //
186
+ // Note: Applied to .accordion container (not items) to avoid disrupting accordion
187
+ // item internal layout while still providing proper scroll margin and visual spacing.
188
+ .content .accordion,
189
+ .content .accordion-item {
190
+ scroll-margin-top: 80px;
191
+ scroll-margin-bottom: 100px;
192
+ }
193
+
194
+ // --------------------------------------------------------------------------------
195
+ // DataTable BS5 corrections
196
+ // --------------------------------------------------------------------------------
197
+ .content { .dt-container { margin-bottom: 1rem; } }
198
+
199
+ // --------------------------------------------------------------------------------
200
+ // Highlightjs-copy
201
+ // --------------------------------------------------------------------------------
202
+ .content {
203
+ code.hljs {
204
+ border-radius: var(--bs-border-radius-lg);
205
+ }
206
+ pre {
207
+ .hljs {
208
+ max-height: 50vh;
209
+ overflow: auto;
210
+ }
211
+ .hljs-copy-button {
212
+ top: 0.2rem;
213
+ right: 0.2rem;
214
+ border-radius: var(--bs-border-radius-lg);
215
+ }
216
+
217
+ .hljs-copy-button:not([data-copied="true"])::before {
218
+ mask-size: 100% 100%;
219
+ }
220
+
221
+ .hljs-copy-button[data-copied='true'] {
222
+ color: transparent !important;
223
+ font-size: 0 !important;
224
+ text-indent: -9999px !important;
225
+ width: 1.85rem !important; /* Set a fixed width for the button */
226
+ height: 1.85rem !important; /* Set a fixed height for the button */
227
+ position: relative !important; /* Required for absolute positioning of the SVG */
228
+
229
+ }
230
+ .hljs-copy-button[data-copied='true']::after {
231
+ content: "";
232
+ background-repeat: no-repeat;
233
+ background-size: contain;
234
+ position: absolute;
235
+ top: 50%;
236
+ left: 50%;
237
+ transform: translate(-50%, -50%);
238
+ width: 1rem; /* Adjust icon size as needed */
239
+ height: 1rem; /* Adjust icon size as needed */
240
+ }
241
+ code {
242
+ border-left: 5px;
243
+ border-top: 1px;
244
+ border-right: 1px;
245
+ border-bottom: 1px;
246
+ border-color: var(--bs-light-border-subtle);
247
+ border-style: solid;
248
+ }
249
+ }
250
+ }
251
+ }
@@ -0,0 +1,10 @@
1
+ // Auto-generated from saturation-normalized shade algorithm
2
+ // DO NOT EDIT: This file is generated by generate-scss-light-dark.py
3
+ // Source: centos-purple (#A14F8C)
4
+ // Generated: Shade 50 → $light, Shade 950 → $dark
5
+ //
6
+ // To regenerate after color changes, run:
7
+ // python3 scripts/colors/generate-scss-light-dark.py
8
+
9
+ $light: #F6EDF4; // centos-purple-50: reduced saturation (~60%), high lightness (~95%)
10
+ $dark: #22061B; // centos-purple-950: enhanced saturation (100%), low lightness (8%)
@@ -0,0 +1,104 @@
1
+ @use "sass:math";
2
+
3
+ // Merge the base colors into the main `$theme-colors` map
4
+ $theme-colors: map-merge($theme-colors, $centos-base-colors);
5
+
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;
32
+ }
33
+
34
+ $theme-colors: map-merge($theme-colors, ($shade-name: $shade-color));
35
+ }
36
+ }
37
+
38
+ // Define custom background gradients.
39
+ $centos-bg-gradients: (
40
+ "primary": linear-gradient(
41
+ 90deg,
42
+ rgba(map-get($theme-colors, "centos-purple-100"), 1) 50%,
43
+ rgba(map-get($theme-colors, "centos-orange-100"), 1) 100%
44
+ ),
45
+ "secondary": linear-gradient(
46
+ 90deg,
47
+ rgba(map-get($theme-colors, "centos-orange-100"), 1) 50%,
48
+ rgba(map-get($theme-colors, "centos-purple-100"), 1) 100%
49
+ ),
50
+ "header": linear-gradient(
51
+ 180deg,
52
+ rgba(map-get($theme-colors, "centos-purple-100"), 1) 0%,
53
+ rgba($white, 0.98) 100%
54
+ ),
55
+ "footer": linear-gradient(
56
+ 180deg,
57
+ rgba($white, 1) 0%,
58
+ rgba(map-get($theme-colors, "centos-purple-100"), 1) 100%
59
+ )
60
+ );
61
+
62
+ // Define custom text gradients.
63
+ $centos-text-gradients: (
64
+ "primary": linear-gradient(
65
+ 90deg,
66
+ rgba(map-get($theme-colors, "centos-purple"), 1) 50%,
67
+ rgba(map-get($theme-colors, "centos-orange"), 1) 100%
68
+ ),
69
+ "secondary": linear-gradient(
70
+ 270deg,
71
+ rgba(map-get($theme-colors, "centos-purple"), 1) 50%,
72
+ rgba(map-get($theme-colors, "centos-orange"), 1) 100%
73
+ )
74
+ );
75
+
76
+ // Define custom utilities using the correct Bootstrap API. This allows you to
77
+ // use classes like `text-bg-centos-purple-800`.
78
+ $utilities: map-merge(
79
+ $utilities,
80
+ (
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
+ "centos-bg-gradient": (
94
+ property: background,
95
+ class: bg-gradient,
96
+ values: $centos-bg-gradients
97
+ ),
98
+ "centos-text-gradient": (
99
+ property: color,
100
+ class: text-gradient,
101
+ values: $centos-text-gradients,
102
+ ),
103
+ )
104
+ );
@@ -0,0 +1,232 @@
1
+ // ================================================================================
2
+ // SATURATION-NORMALIZED SHADE GENERATION
3
+ // ================================================================================
4
+ // Purpose: Generate color shades that maintain brand saturation throughout
5
+ // the entire range (light to dark), creating visual consistency between
6
+ // web UI and wallpapers.
7
+ //
8
+ // Background: Bootstrap's default shade-color() desaturates dark colors,
9
+ // making them look gray. This custom function maintains saturation for
10
+ // a unified brand experience aligned with wallpaper colors.
11
+ //
12
+ // Reference: Analyzed centos-background-p-1024x1024.png wallpaper to extract
13
+ // dark purple corners (#1A0029) which use 100% saturation at 16% brightness.
14
+ // Standard shade algorithm produces #210F1D (55% saturation) which feels gray.
15
+ // ================================================================================
16
+
17
+ @use "sass:color";
18
+ @use "sass:math";
19
+
20
+ // ────────────────────────────────────────────────────────────────────────────
21
+ // Function: Get saturation multiplier for a given shade grade
22
+ // ────────────────────────────────────────────────────────────────────────────
23
+ // For dark shades (800-950), multiply saturation to prevent desaturation
24
+ // For medium shades (600-700), keep saturation as-is (already good)
25
+ // For light shades (50-400), reduce saturation for softer appearance on light bg
26
+ // For base shade (500), use normal saturation
27
+ //
28
+ // Option 2: Target wallpaper saturation (100%) for grade 950
29
+ // Using 2.0x multiplier to reach 100% from base ~50% saturation
30
+ @function saturation-multiplier($shade) {
31
+ @if $shade <= 400 {
32
+ @return 0.6; // Light shades (50-400): reduce saturation for soft appearance
33
+ } @else if $shade == 500 {
34
+ @return 1.0; // Base color: keep normal saturation
35
+ } @else if $shade == 600 {
36
+ @return 1.0; // Keep as-is, already perceptually good
37
+ } @else if $shade == 700 {
38
+ @return 1.0; // Keep as-is, already perceptually good
39
+ } @else if $shade == 800 {
40
+ @return 1.1; // Subtle boost for slight vibrancy increase
41
+ } @else if $shade == 900 {
42
+ @return 1.8; // Significant increase to match wallpaper saturation
43
+ } @else if $shade == 950 {
44
+ @return 2.0; // Ensure 100% saturation for all colors (wallpaper-anchored)
45
+ } @else {
46
+ @return 1.0; // Default fallback
47
+ }
48
+ }
49
+
50
+ // ────────────────────────────────────────────────────────────────────────────
51
+ // Function: Calculate target lightness for a shade grade
52
+ // ────────────────────────────────────────────────────────────────────────────
53
+ // Returns the lightness percentage for each shade number (50-950)
54
+ // Creates smooth interpolation from light to dark
55
+ // Option 2: Target 8% lightness for grade 950 (matches wallpaper ~16% brightness)
56
+ @function target-lightness($shade, $base-lightness) {
57
+ @if $shade < 500 {
58
+ // Light shades: interpolate from 95% (very light) down to base lightness
59
+ @return $base-lightness + math.div(500 - $shade, 450) * (95% - $base-lightness);
60
+ } @else if $shade == 500 {
61
+ // Base color: return as-is
62
+ @return $base-lightness;
63
+ } @else if $shade == 600 or $shade == 700 or $shade == 800 {
64
+ // Grades 600-800: use original Bootstrap curve (down to 5%)
65
+ @return $base-lightness - math.div($shade - 500, 500) * ($base-lightness - 5%);
66
+ } @else if $shade == 900 {
67
+ // Grade 900: transition toward wallpaper lightness
68
+ @return $base-lightness - math.div(900 - 500, 500) * ($base-lightness - 10%);
69
+ } @else if $shade == 950 {
70
+ // Grade 950: target 8% lightness (wallpaper-aligned, matches #1A0029)
71
+ // All grade-950 colors use 8% lightness to match wallpaper depth
72
+ @return 8%;
73
+ } @else {
74
+ // Default fallback
75
+ @return $base-lightness - math.div($shade - 500, 500) * ($base-lightness - 5%);
76
+ }
77
+ }
78
+
79
+ // ────────────────────────────────────────────────────────────────────────────
80
+ // Function: Generate saturation-normalized shade
81
+ // ────────────────────────────────────────────────────────────────────────────
82
+ // Main function that creates shades with maintained saturation
83
+ // Extracts HSL from base color, applies multipliers, returns HSL shade
84
+ // Special case: purple-950 returns wallpaper-anchored #1A0029 (exact match)
85
+ @function saturated-shade($color, $shade) {
86
+ // ────────────────────────────────────────────────────────────────────────────
87
+ // Function: Generate saturation-normalized shade with wallpaper alignment
88
+ // ────────────────────────────────────────────────────────────────────────────
89
+ // Design Principle: Grade-950 colors maintain native hues while achieving
90
+ // wallpaper aesthetic through shared saturation (100%) and lightness (~8%)
91
+ //
92
+ // Wallpaper Reference: #1A0029 (100% saturation, 8% lightness)
93
+ // Grade-950 Alignment: All colors achieve 100% saturation + 8% lightness
94
+ // Result: UI colors share wallpaper depth while maintaining brand identity
95
+ //
96
+ // Why function-based instead of hardcoded?
97
+ // - Maintains hue consistency within each color family
98
+ // - Preserves algorithmic cohesion across all 4 color families
99
+ // - Achieves wallpaper correlation through saturation/brightness alignment
100
+ // - Creates unified visual language respecting color family rules
101
+ // ────────────────────────────────────────────────────────────────────────────
102
+
103
+ // Extract current HSL values from the color
104
+ $current-hue: hue($color);
105
+ $current-saturation: saturation($color);
106
+ $current-lightness: lightness($color);
107
+
108
+ // Calculate target values for this shade
109
+ $target-light: target-lightness($shade, $current-lightness);
110
+ $sat-multiplier: saturation-multiplier($shade);
111
+ $target-saturation: math.min($current-saturation * $sat-multiplier, 100%);
112
+
113
+ // Generate and return the new color in HSL
114
+ @return hsl($current-hue, $target-saturation, $target-light);
115
+ }
116
+
117
+ // ================================================================================
118
+ // CentOS Color (Our beloved branding colors)
119
+ // ================================================================================
120
+ $centos-base-colors: (
121
+ centos-purple: #A14F8C,
122
+ centos-orange: #EFA724,
123
+ centos-blue: #262577,
124
+ centos-green: #9CCD2A,
125
+ );
126
+
127
+ // Define the shade steps.
128
+ $centos-color-shades: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950;
129
+
130
+ // --------------------------------------------------------------------------------
131
+ // Theme Colors - Option D: Orange Family Variants for Brand Coherence
132
+ // All colors verified to meet WCAG 2.1 standards with color theory compliance.
133
+ //
134
+ // CentOS brand colors are directly integrated as semantic colors to reinforce
135
+ // brand identity and follow international color standards (ISO 3864). Warning
136
+ // uses a darkened centos-orange variant to communicate caution urgency while
137
+ // maintaining brand coherence. Success uses darkened centos-green for positive
138
+ // outcomes. Brand colors remain from official CentOS specification.
139
+ //
140
+ // Color Theory Rationale:
141
+ // - Orange = Caution/Warning (warm, attention-getting, ISO standard)
142
+ // - Blue = Information (cool, trustworthy, ISO standard)
143
+ // - Red = Danger (alert, critical, ISO standard)
144
+ // - Green = Success (positive, safe, ISO standard)
145
+ // - Purple = Brand primary (custom, strong visual identity)
146
+ //
147
+ // Mapping:
148
+ // - Primary: centos-purple #A54C93 (brand primary - balanced for visual prominence)
149
+ // - Secondary: centos-orange #B27800 (brand secondary - balanced for color harmony)
150
+ // - Success: centos-green #4A8400 darkened (positive outcomes, from #84B800)
151
+ // - Warning: centos-orange #C86A00 darkened (caution/attention, warm tone - correct psychology)
152
+ // - Danger: External red #C62828 (critical/destructive - no CentOS equivalent)
153
+ // - Info: External blue #1976D2 (informational - distinguishes from warning)
154
+ //
155
+ // See color.md documentation for detailed contrast ratio and psychology analysis.
156
+ // --------------------------------------------------------------------------------
157
+ $primary: map-get($centos-base-colors, 'centos-purple');
158
+ $secondary: map-get($centos-base-colors, 'centos-orange'); // #B27800 - CentOS brand secondary
159
+ $success: #4A8400; // Darkened centos-green: 4.57:1 (white), 4.59:1 (black) - WCAG AA ✓
160
+ $warning: #C86A00; // Darkened centos-orange: 3.81:1 (white), 8.21:1 (black) - warm, urgent
161
+ $danger: #C62828; // External red: 5.39:1 (white), 3.89:1 (black) - WCAG AA ✓
162
+ $info: #1976D2; // External blue: 4.60:1 (white), 4.56:1 (black) - WCAG AA ✓
163
+
164
+ // Light and dark are automatically generated from centos-purple using the saturation-normalized
165
+ // shade system. Instead of assigning function results to variables here (which causes Dart Sass
166
+ // chicken-egg issues), we generate these values with a Python script and import them below.
167
+ // This ensures $light and $dark are consistently computed from the same shade algorithm used
168
+ // for all other shades in the color system.
169
+ //
170
+ // To update after color changes: python3 scripts/colors/generate-scss-light-dark.py
171
+ // The generated values are imported from: src/SASS/_light-dark.scss
172
+ @import "light-dark";
173
+
174
+ $white: #ffffff;
175
+ $black: #000000;
176
+
177
+ // Background and Body variables
178
+ // These control the default background and text colors for the entire page.
179
+ $body-bg: $white;
180
+ $body-color: #1c0d19; // centos-purple-900
181
+
182
+ // Border and Emphasis colors
183
+ // Used for borders, dividers, and higher-contrast text.
184
+ $border-color: #e8d9e5; // centos-purple-100
185
+ $emphasis-color: #d1b3cb; // centos-purple-200
186
+
187
+ // Dropdown menu
188
+ $dropdown-dark-bg: $dark;
189
+ $dropdown-dark-color: $light;
190
+
191
+ // --------------------------------------------------------------------------------
192
+ // Spacing customization
193
+ // --------------------------------------------------------------------------------
194
+ $spacer: 1rem;
195
+ $spacers: (
196
+ 0: 0,
197
+ 1: $spacer * .25,
198
+ 2: $spacer * .5,
199
+ 3: $spacer,
200
+ 4: $spacer * 1.5,
201
+ 5: $spacer * 3,
202
+ 6: $spacer * 5,
203
+ );
204
+
205
+ // --------------------------------------------------------------------------------
206
+ // Typography
207
+ // --------------------------------------------------------------------------------
208
+ $font-family-sans-serif: "Montserrat", sans-serif;
209
+ $font-family-monospace: "Source Code Pro", monospace;
210
+ $headings-font-weight: 700;
211
+ $font-size-base: $spacer;
212
+ $h1-font-size: $font-size-base * 2.75;
213
+ $body-emphasis-color: mix(#000, $body-color, 15%);
214
+
215
+ // --------------------------------------------------------------------------------
216
+ // Breadcrumb
217
+ // --------------------------------------------------------------------------------
218
+ $breadcrumb-divider: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8'><path d='M2.5 0L1 1.5 3.5 4 1 6.5 2.5 8l4-4-4-4z'/></svg>");
219
+
220
+ // --------------------------------------------------------------------------------
221
+ // Negative margins
222
+ // --------------------------------------------------------------------------------
223
+ $enable-negative-margins: true;
224
+
225
+ // --------------------------------------------------------------------------------
226
+ // Breakingnews
227
+ // --------------------------------------------------------------------------------
228
+ // Use a Sass variable for the breaking news height to make it easy to update
229
+ // both the body padding and the sticky element's top position. If you change
230
+ // this value, you also need to tune-up the _includes/head.html file, where
231
+ // dynamic calculation of scroll-margin-top property takes place.
232
+ $breakingnews-height: 59px;