This is an automated email from the ASF dual-hosted git repository.

jbonofre pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/karaf-site.git


The following commit(s) were added to refs/heads/trunk by this push:
     new cb90932  Self-host Font Awesome, Bootstrap JS and Google Fonts
cb90932 is described below

commit cb9093249552262aeadb6857e153a17a2ecd7cb4
Author: JB Onofré <[email protected]>
AuthorDate: Mon Sep 21 13:33:21 2026 +0200

    Self-host Font Awesome, Bootstrap JS and Google Fonts
    
    The theme redesign loaded Font Awesome and Bootstrap's JS bundle from
    cdn.jsdelivr.net and Inter/JetBrains Mono from fonts.googleapis.com.
    The Content-Security-Policy enforced on *.apache.org only allows
    script/style/font requests from 'self' plus a short apache.org
    domain allowlist, so the browser silently blocks all three CDNs -
    which is why icons (and Bootstrap's JS-driven navbar/dropdown
    behavior, and the custom fonts) went missing in production.
    
    - Bundle Font Awesome into assets/css/karaf.css via _scss/karaf.scss,
      with its webfonts copied to assets/webfonts by a new
      `npm run build:icons` step (gitignored, like karaf.css itself).
    - Point _includes/scripts.html at the already-vendored
      assets/js/vendor/bootstrap.bundle.min.js instead of the CDN, and
      refresh that file from the stale Bootstrap 4.1.1 build to the
      5.3.8 build the theme actually targets.
    - Self-host Inter and JetBrains Mono under assets/fonts/ with a new
      _scss/_fonts.scss, instead of linking fonts.googleapis.com.
---
 .gitignore                                   |   1 +
 README.md                                    |   7 +-
 _includes/head.html                          |   8 +-
 _includes/scripts.html                       |   2 +-
 _scss/_fonts.scss                            | 169 +++++++++++++++++++++++++++
 _scss/karaf.scss                             |  18 ++-
 assets/fonts/inter-latin-ext.woff2           | Bin 0 -> 85068 bytes
 assets/fonts/inter-latin.woff2               | Bin 0 -> 48256 bytes
 assets/fonts/jetbrains-mono-latin-ext.woff2  | Bin 0 -> 11624 bytes
 assets/fonts/jetbrains-mono-latin.woff2      | Bin 0 -> 31432 bytes
 assets/js/vendor/bootstrap.bundle.min.js     |   8 +-
 assets/js/vendor/bootstrap.bundle.min.js.map |   2 +-
 package.json                                 |   6 +-
 13 files changed, 202 insertions(+), 19 deletions(-)

diff --git a/.gitignore b/.gitignore
index 109fd40..df705e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ target
 node_modules
 _sass/vendor
 assets/css/karaf.css
+assets/webfonts
diff --git a/README.md b/README.md
index d746594..95312f2 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,8 @@ git clone https://github.com/apache/karaf-site.git
 
 Karaf website uses Jekyll to build (generate the HTML resources) and npm/sass 
to build the CSS assets (Bootstrap 5 based theme).
 
+The `Content-Security-Policy` enforced on `*.apache.org` only allows 
script/style/font requests from `'self'` and a short list of apache.org 
domains, so any asset loaded from a third-party CDN (jsdelivr, Google Fonts, 
etc.) is silently blocked by the browser. Bootstrap's JS and Font Awesome must 
stay self-hosted: Font Awesome is bundled into `assets/css/karaf.css` via 
`_scss/karaf.scss` (with its webfonts copied by `npm run build:icons`), and 
Bootstrap's JS bundle is committed at `assets [...]
+
 To install Jekyll, refer to https://jekyllrb.com/docs/
 
 Install the node dependencies and the Ruby modules required by the site:
@@ -45,10 +47,11 @@ npm run build
 ```
 npm run build:css   # compile the Bootstrap 5 theme (_scss/) to 
assets/css/karaf.css
 npm run watch:css   # rebuild CSS continuously while styling
+npm run build:icons # copy the Font Awesome webfonts to assets/webfonts
 npm run optimize:svg # minify the SVG assets (logos) after editing any 
images/*.svg
 ```
 
-`assets/css/karaf.css` is generated and gitignored — it is not committed. Once 
you have run `npm start`, `npm run build`, or `npm run build:css` at least 
once, the file exists on disk and you can also run Jekyll directly:
+`assets/css/karaf.css` and `assets/webfonts/` are generated and gitignored — 
they are not committed. Once you have run `npm start`, `npm run build`, or `npm 
run build:css`/`npm run build:icons` at least once, they exist on disk and you 
can also run Jekyll directly:
 
 ```
 bundle exec jekyll serve
@@ -78,7 +81,7 @@ Build the site for production (this also compiles the CSS and 
optimizes the SVGs
 JEKYLL_ENV=production npm run build
 ```
 
-You can also use Jekyll Docker image to build (run `npm run build:css` first, 
since the Docker image cannot resolve the Bootstrap 5 Sass imports):
+You can also use Jekyll Docker image to build (run `npm run build:css` and 
`npm run build:icons` first, since the Docker image cannot resolve the 
Bootstrap 5 Sass imports or copy the Font Awesome webfonts):
 
 ```
 docker run --rm --volume="$PWD:/srv/jekyll:Z" jekyll/jekyll jekyll build
diff --git a/_includes/head.html b/_includes/head.html
index 728304a..5545424 100644
--- a/_includes/head.html
+++ b/_includes/head.html
@@ -11,13 +11,7 @@
 <link href="/images/favicon.ico" rel="icon">
 <link rel="icon" type="image/svg+xml" href="/images/feather.svg">
 
-<!-- Google Fonts -->
-<link rel="preconnect" href="https://fonts.googleapis.com";>
-<link rel="preconnect" href="https://fonts.gstatic.com"; crossorigin>
-<link 
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap";
 rel="stylesheet">
-
-<!-- Bootstrap 5 + FontAwesome + Karaf theme -->
-<link 
href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css";
 rel="stylesheet">
+<!-- Bootstrap 5 + FontAwesome + Inter/JetBrains Mono (all bundled into 
karaf.css, see _scss/karaf.scss) + Karaf theme -->
 <link href="/assets/css/karaf.css" rel="stylesheet">
 
 <!-- Set theme before paint to avoid flash -->
diff --git a/_includes/scripts.html b/_includes/scripts.html
index 17269e9..59ac087 100644
--- a/_includes/scripts.html
+++ b/_includes/scripts.html
@@ -1,5 +1,5 @@
 <!-- Bootstrap 5 JS bundle (no jQuery required) -->
-<script 
src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js";></script>
+<script src="/assets/js/vendor/bootstrap.bundle.min.js"></script>
 
 <!-- Anchor links (for doc-friendly headings) if available -->
 <script src="/assets/js/vendor/anchor.min.js"></script>
diff --git a/_scss/_fonts.scss b/_scss/_fonts.scss
new file mode 100644
index 0000000..a100332
--- /dev/null
+++ b/_scss/_fonts.scss
@@ -0,0 +1,169 @@
+// Self-hosted Inter + JetBrains Mono (variable fonts, latin + latin-ext 
subsets only).
+// The ASF CSP blocks fonts.googleapis.com/fonts.gstatic.com on 
karaf.apache.org (see
+// _scss/karaf.scss for the same issue with Font Awesome), so these must ship 
from
+// /assets/fonts instead of the Google Fonts CDN. Files fetched from
+// 
fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600
+// -- each is a single variable-font file; the browser maps the declared 
font-weight
+// onto its wght axis, which is why every weight below reuses the same two 
files per family.
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 300;
+  font-display: swap;
+  src: url(../fonts/inter-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 300;
+  font-display: swap;
+  src: url(../fonts/inter-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 400;
+  font-display: swap;
+  src: url(../fonts/inter-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 400;
+  font-display: swap;
+  src: url(../fonts/inter-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 500;
+  font-display: swap;
+  src: url(../fonts/inter-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 500;
+  font-display: swap;
+  src: url(../fonts/inter-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 600;
+  font-display: swap;
+  src: url(../fonts/inter-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 600;
+  font-display: swap;
+  src: url(../fonts/inter-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 700;
+  font-display: swap;
+  src: url(../fonts/inter-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 700;
+  font-display: swap;
+  src: url(../fonts/inter-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 800;
+  font-display: swap;
+  src: url(../fonts/inter-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'Inter';
+  font-style: normal;
+  font-weight: 800;
+  font-display: swap;
+  src: url(../fonts/inter-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+  font-family: 'JetBrains Mono';
+  font-style: normal;
+  font-weight: 400;
+  font-display: swap;
+  src: url(../fonts/jetbrains-mono-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'JetBrains Mono';
+  font-style: normal;
+  font-weight: 400;
+  font-display: swap;
+  src: url(../fonts/jetbrains-mono-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+  font-family: 'JetBrains Mono';
+  font-style: normal;
+  font-weight: 500;
+  font-display: swap;
+  src: url(../fonts/jetbrains-mono-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'JetBrains Mono';
+  font-style: normal;
+  font-weight: 500;
+  font-display: swap;
+  src: url(../fonts/jetbrains-mono-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+  font-family: 'JetBrains Mono';
+  font-style: normal;
+  font-weight: 600;
+  font-display: swap;
+  src: url(../fonts/jetbrains-mono-latin-ext.woff2) format('woff2');
+  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, 
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, 
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+
+@font-face {
+  font-family: 'JetBrains Mono';
+  font-style: normal;
+  font-weight: 600;
+  font-display: swap;
+  src: url(../fonts/jetbrains-mono-latin.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, 
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, 
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
diff --git a/_scss/karaf.scss b/_scss/karaf.scss
index 5e4013a..c701c01 100644
--- a/_scss/karaf.scss
+++ b/_scss/karaf.scss
@@ -7,8 +7,22 @@
 // 2. Bootstrap core
 @import "bootstrap/scss/bootstrap";
 
-// 3. Karaf design tokens as CSS custom properties (light + dark)
+// 3. Font Awesome, self-hosted: the ASF-enforced CSP on *.apache.org only
+// allows style/font requests from 'self' (plus a few apache.org domains), so
+// loading it from a CDN (cdn.jsdelivr.net) gets silently blocked by the
+// browser and every icon on the site disappears. Bundle it into karaf.css
+// instead and serve the webfonts from /assets/webfonts (see package.json's
+// build:icons script, which copies them out of node_modules).
+$fa-font-path: "../webfonts";
+@import "@fortawesome/fontawesome-free/scss/fontawesome";
+@import "@fortawesome/fontawesome-free/scss/solid";
+@import "@fortawesome/fontawesome-free/scss/regular";
+
+// 4. Self-hosted Inter + JetBrains Mono (same CSP reasoning as Font Awesome 
above)
+@import "fonts";
+
+// 5. Karaf design tokens as CSS custom properties (light + dark)
 @import "karaf-tokens";
 
-// 4. Karaf component/page custom styles
+// 6. Karaf component/page custom styles
 @import "karaf-components";
\ No newline at end of file
diff --git a/assets/fonts/inter-latin-ext.woff2 
b/assets/fonts/inter-latin-ext.woff2
new file mode 100644
index 0000000..479d010
Binary files /dev/null and b/assets/fonts/inter-latin-ext.woff2 differ
diff --git a/assets/fonts/inter-latin.woff2 b/assets/fonts/inter-latin.woff2
new file mode 100644
index 0000000..d15208d
Binary files /dev/null and b/assets/fonts/inter-latin.woff2 differ
diff --git a/assets/fonts/jetbrains-mono-latin-ext.woff2 
b/assets/fonts/jetbrains-mono-latin-ext.woff2
new file mode 100644
index 0000000..82f9668
Binary files /dev/null and b/assets/fonts/jetbrains-mono-latin-ext.woff2 differ
diff --git a/assets/fonts/jetbrains-mono-latin.woff2 
b/assets/fonts/jetbrains-mono-latin.woff2
new file mode 100644
index 0000000..4d09cda
Binary files /dev/null and b/assets/fonts/jetbrains-mono-latin.woff2 differ
diff --git a/assets/js/vendor/bootstrap.bundle.min.js 
b/assets/js/vendor/bootstrap.bundle.min.js
index 24c2992..0b87369 100644
--- a/assets/js/vendor/bootstrap.bundle.min.js
+++ b/assets/js/vendor/bootstrap.bundle.min.js
@@ -1,7 +1,7 @@
 /*!
-  * Bootstrap v4.1.1 (https://getbootstrap.com/)
-  * Copyright 2011-2018 The Bootstrap Authors 
(https://github.com/twbs/bootstrap/graphs/contributors)
-  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  * Bootstrap v5.3.8 (https://getbootstrap.com/)
+  * Copyright 2011-2025 The Bootstrap Authors 
(https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
   */
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof 
module?e(exports,require("jquery")):"function"==typeof 
define&&define.amd?define(["exports","jquery"],e):e(t.bootstrap={},t.jQuery)}(this,function(t,e){"use
 strict";function i(t,e){for(var n=0;n<e.length;n++){var 
i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in 
i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t,e,n){return 
e&&i(t.prototype,e),n&&i(t,n),t}function c(r){for(var t=1;t<arguments.lengt 
[...]
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof 
module?module.exports=e():"function"==typeof 
define&&define.amd?define(e):(t="undefined"!=typeof 
globalThis?globalThis:t||self).bootstrap=e()}(this,function(){"use 
strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const 
s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't 
allow more than one instance per element. Bound instance: 
${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).g [...]
 //# sourceMappingURL=bootstrap.bundle.min.js.map
\ No newline at end of file
diff --git a/assets/js/vendor/bootstrap.bundle.min.js.map 
b/assets/js/vendor/bootstrap.bundle.min.js.map
index 591107c..3e678d4 100644
--- a/assets/js/vendor/bootstrap.bundle.min.js.map
+++ b/assets/js/vendor/bootstrap.bundle.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/popper.js/dist/esm/popper.js","../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/index.js"],"names":["$","NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","Event","ClassName","Alert","DATA_API_KEY","Select
 [...]
\ No newline at end of file
+{"version":3,"names":["elementMap","Map","Data","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","toType","object","Object","prototype","toString","call","toLowerCase","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","
 [...]
\ No newline at end of file
diff --git a/package.json b/package.json
index db0e70e..d1948c1 100644
--- a/package.json
+++ b/package.json
@@ -6,11 +6,13 @@
   "scripts": {
     "build:css": "sass --no-source-map --quiet-deps 
--silence-deprecation=import --load-path=node_modules 
_scss/karaf.scss:assets/css/karaf.css",
     "watch:css": "sass --watch --quiet-deps --silence-deprecation=import 
--load-path=node_modules _scss/karaf.scss:assets/css/karaf.css",
+    "build:icons": "mkdir -p assets/webfonts && cp 
node_modules/@fortawesome/fontawesome-free/webfonts/* assets/webfonts/",
     "optimize:svg": "svgo --config svgo.config.js images/*.svg",
-    "build": "npm run build:css && npm run optimize:svg && bundle exec jekyll 
build",
-    "start": "npm run build:css && npm run optimize:svg && bundle exec jekyll 
serve"
+    "build": "npm run build:icons && npm run build:css && npm run optimize:svg 
&& bundle exec jekyll build",
+    "start": "npm run build:icons && npm run build:css && npm run optimize:svg 
&& bundle exec jekyll serve"
   },
   "devDependencies": {
+    "@fortawesome/fontawesome-free": "^6.5.2",
     "bootstrap": "^5.3.3",
     "sass": "^1.77.0",
     "svgo": "^4.1.0"

Reply via email to