From f7ff263818d669ad1ed20f2918ec60839d3ae344 Mon Sep 17 00:00:00 2001 From: ehab-hassan Date: Thu, 22 May 2025 16:08:17 +0300 Subject: [PATCH 01/23] make lightmode default --- css/index.css | 90 +++++++++++++++++----------------- static/js/custom.js | 17 +++---- templates/partials/header.html | 18 +++---- 3 files changed, 62 insertions(+), 63 deletions(-) diff --git a/css/index.css b/css/index.css index 123496a..ab8da58 100644 --- a/css/index.css +++ b/css/index.css @@ -13,71 +13,71 @@ @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Raleway:ital,wght@0,100..900;1,100..900&display=swap'); /* Defaul lightMode */ -body.light-mode { +body { background-color: #ffffff; color: #000000; } -body.light-mode .semigray { - - color: #424242 !important; -} - -body.light-mode .semigray2 { - - color: #424242 !important; -} - -body.light-mode .dropdown a{ - @apply - px-0 - text-black -} - -body.light-mode .dropdown{ - background-color: rgb(255 255 255 / 100%); - color: #121212; -} - -body.light-mode .d_menu { - background-color: #e5e5e5; -} - -body.light-mode .icon { - - fill: #424242 !important; -} - -/* Dark Mode */ -body { - background-color: #121212; - color: #ffffff; -} - body .semigray { - color: #e5e7eb !important; + + color: #424242 !important; } body .semigray2 { - color: #d1d5db !important; -} - -body .icon { - fill: #ffffff !important; + + color: #424242 !important; } body .dropdown a{ @apply px-0 - text-white + text-black } body .dropdown{ + background-color: rgb(255 255 255 / 100%); + color: #121212; +} + +body .d_menu { + background-color: #e5e5e5; +} + +body .icon { + + fill: #424242 !important; +} + +/* Dark Mode */ +body.dark-mode { + background-color: #121212; + color: #ffffff; +} + +body.dark-mode .semigray { + color: #e5e7eb !important; +} + +body.dark-mode .semigray2 { + color: #d1d5db !important; +} + +body.dark-mode .icon { + fill: #ffffff !important; +} + +body.dark-mode .dropdown a{ + @apply + px-0 + text-white +} + +body.dark-mode .dropdown{ background-color: rgb(0 0 0 / 50%); color: #fff; } -body .d_menu { +body.dark-mode .d_menu { background-color: rgba(34 34 34); } diff --git a/static/js/custom.js b/static/js/custom.js index f22048e..1f8673e 100644 --- a/static/js/custom.js +++ b/static/js/custom.js @@ -199,13 +199,13 @@ const body = document.body; // Apply saved theme on load document.addEventListener('DOMContentLoaded', () => { - const savedTheme = localStorage.getItem('theme') || 'light'; // Default is light mode + const savedTheme = localStorage.getItem('theme') || 'dark'; // Default is dark mode - if (savedTheme === 'light') { - body.classList.add('light-mode'); + if (savedTheme === 'dark') { + body.classList.add('dark-mode'); toggleSwitch.checked = true; } else { - body.classList.remove('light-mode'); + body.classList.remove('dark-mode'); toggleSwitch.checked = false; } }); @@ -213,12 +213,11 @@ document.addEventListener('DOMContentLoaded', () => { // Toggle between light and dark mode toggleSwitch.addEventListener('change', () => { if (toggleSwitch.checked) { - body.classList.add('light-mode'); - localStorage.setItem('theme', 'light'); - } else { - body.classList.remove('light-mode'); + body.classList.add('dark-mode'); localStorage.setItem('theme', 'dark'); + } else { + body.classList.remove('dark-mode'); + localStorage.setItem('theme', 'light'); } }); - diff --git a/templates/partials/header.html b/templates/partials/header.html index c1ebf9b..da9b14c 100644 --- a/templates/partials/header.html +++ b/templates/partials/header.html @@ -254,20 +254,20 @@ /* logo image */ -.light { +.dark { display: block; /* Show dark logo by default */ } -.dark { +.light { display: none; /* Hide light logo by default */ } -.light-mode .light { +.dark-mode .dark { display: none; /* Hide dark logo in light mode */ } -.light-mode .dark { +.dark-mode .light{ display: block;/* Show light logo in light mode */ } @@ -317,17 +317,17 @@ } /* When light mode is active */ -.light-mode .switch { - background: #111; /* Dark background in light mode */ +.dark-mode .switch { + background: #808080; /* Dark background in dark mode */ } -.light-mode .slider { +.dark-mode .slider { transform: translateX(25px); /* Move slider to the right */ } -.light-mode #lightIcon { +.dark-mode #darkIcon { display: inline-block; color: white; } -.light-mode #darkIcon { +.dark-mode #darkIcon { display: none; } From 4e4b12b4477f453c67f6759802dad92b9dbc5068 Mon Sep 17 00:00:00 2001 From: ehab-hassan Date: Thu, 22 May 2025 17:01:05 +0300 Subject: [PATCH 02/23] fix nav color link --- css/index.css | 12 ++++++++---- templates/partials/header.html | 11 ++++++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/css/index.css b/css/index.css index ab8da58..12c977d 100644 --- a/css/index.css +++ b/css/index.css @@ -28,6 +28,10 @@ body .semigray2 { color: #424242 !important; } +body .nav a { + color: #333333 !important; +} + body .dropdown a{ @apply px-0 @@ -54,6 +58,10 @@ body.dark-mode { color: #ffffff; } +body.dark-mode .nav a { + color: #ffffff !important; +} + body.dark-mode .semigray { color: #e5e7eb !important; } @@ -267,10 +275,6 @@ background-color:#5596f5 !important; } -.blue{ - color:#2E83FF -} - .nav p > a { display: flex; width: 100%; diff --git a/templates/partials/header.html b/templates/partials/header.html index da9b14c..d717ef9 100644 --- a/templates/partials/header.html +++ b/templates/partials/header.html @@ -236,12 +236,21 @@ \ No newline at end of file diff --git a/templates/shortcodes/accordion.html b/templates/shortcodes/accordion.html index 0f69ef8..1744f02 100644 --- a/templates/shortcodes/accordion.html +++ b/templates/shortcodes/accordion.html @@ -12,20 +12,12 @@ }, }; - - - - - - - -

-

-
-
- {% if description %} -

- {{ description }} -

- {% endif %} -
-
+
+ + +
+
+ {% if description %} +

{{ description }}

+ {% endif %}
- - +
+
+ + + + + + + + + + + + + + - diff --git a/templates/shortcodes/cta.html b/templates/shortcodes/cta.html index ea386d5..9e7dfba 100644 --- a/templates/shortcodes/cta.html +++ b/templates/shortcodes/cta.html @@ -12,7 +12,7 @@
-

{{ title }}

+

{{ title }}

{{ description }}

{{ button_text }} diff --git a/templates/shortcodes/desciption_blockquote.html b/templates/shortcodes/desciption_blockquote.html index 935a80d..fb566cc 100644 --- a/templates/shortcodes/desciption_blockquote.html +++ b/templates/shortcodes/desciption_blockquote.html @@ -9,7 +9,7 @@
-

{{ title }} +

{{ title }}

diff --git a/templates/shortcodes/hero.html b/templates/shortcodes/hero.html index 16524a6..ae6723b 100644 --- a/templates/shortcodes/hero.html +++ b/templates/shortcodes/hero.html @@ -13,11 +13,10 @@
-

+

{{ title }}

-

{{ subtitle }} -

+

{{ subtitle }}

{{ description }}

{{ highlight }}

diff --git a/templates/shortcodes/hero_bottom_img.html b/templates/shortcodes/hero_bottom_img.html index 7b90adf..b225fe7 100644 --- a/templates/shortcodes/hero_bottom_img.html +++ b/templates/shortcodes/hero_bottom_img.html @@ -2,7 +2,7 @@

{{ subtitle }}

-

{{ title }}

+

{{ title }}

{{ description }}

@@ -11,51 +11,6 @@ {{ image_alt }}
- +
\ No newline at end of file diff --git a/templates/shortcodes/hero_features.html b/templates/shortcodes/hero_features.html index 13be63a..1057ac8 100644 --- a/templates/shortcodes/hero_features.html +++ b/templates/shortcodes/hero_features.html @@ -2,7 +2,7 @@

{{ subtitle_1 }}

-

{{ title }}

+

{{ title }}

{{ description }}

diff --git a/templates/shortcodes/hero_right_img.html b/templates/shortcodes/hero_right_img.html index 09deb76..3757a82 100644 --- a/templates/shortcodes/hero_right_img.html +++ b/templates/shortcodes/hero_right_img.html @@ -15,10 +15,10 @@ alt="{{ image_alt }}">
-

+

{{ title }}

-

{{ subtitle }}

+

{{ subtitle }}

{{ description_1 }}

diff --git a/templates/shortcodes/left_header.html b/templates/shortcodes/left_header.html index 1f72ea4..3a97963 100644 --- a/templates/shortcodes/left_header.html +++ b/templates/shortcodes/left_header.html @@ -11,8 +11,8 @@

{{ subtitle }}

-

{{ title }}

-

{{ subtitle_2 }}

+

{{ title }}

+

{{ subtitle_2 }}

{{ description }}

{% if description2 %}

{{ description2 }}

diff --git a/templates/shortcodes/text_center.html b/templates/shortcodes/text_center.html index 1e555d0..1d95139 100644 --- a/templates/shortcodes/text_center.html +++ b/templates/shortcodes/text_center.html @@ -8,8 +8,8 @@
-

{{ title }}

-

{{ subtitle }}

+

{{ title }}

+

{{ subtitle }}

{{ description }}

diff --git a/templates/shortcodes/text_left_img.html b/templates/shortcodes/text_left_img.html index 5de557f..6b905e8 100644 --- a/templates/shortcodes/text_left_img.html +++ b/templates/shortcodes/text_left_img.html @@ -17,7 +17,7 @@

{{ subheader }}

-

{{ title }}

+

{{ title }}

{{ subtitle }}

diff --git a/templates/shortcodes/text_right_img.html b/templates/shortcodes/text_right_img.html index 14f9307..dd59f30 100644 --- a/templates/shortcodes/text_right_img.html +++ b/templates/shortcodes/text_right_img.html @@ -18,7 +18,7 @@

{{ subheader }}

-

{{ title }}

+

{{ title }}

{{ subtitle }}

From 17a12bf5837c7d7e6d052de0148a41d4ea058b48 Mon Sep 17 00:00:00 2001 From: ehab-hassan Date: Sun, 25 May 2025 11:58:34 +0300 Subject: [PATCH 11/23] update footer --- content/footer/_index.md | 2 +- css/index.css | 58 +++------------------------------- templates/partials/footer.html | 6 ++-- 3 files changed, 8 insertions(+), 58 deletions(-) diff --git a/content/footer/_index.md b/content/footer/_index.md index 59a8088..2b77400 100644 --- a/content/footer/_index.md +++ b/content/footer/_index.md @@ -24,7 +24,7 @@ extra: ||| -##### ABOUT US +##### ABOUT US
diff --git a/css/index.css b/css/index.css index ee38098..03d6724 100644 --- a/css/index.css +++ b/css/index.css @@ -213,63 +213,18 @@ a img:hover{ text-white } -.subtitle { - background-color:#58CF77 !important; - color: #fff !important; - text-transform: uppercase; - /* font-weight: 600 !important; */ -} - -.green{ - - background-color:#58CF77 !important; - color: #fff !important; - -} - -.green:hover { -background-color:#7ad993 !important; -} -.green a{ - color: #fff !important; -} - -.green:hover { -background-color:#7ad993 !important; -} - -.green_text{ -color: #58CF77 ; -} - - - .blue_b{ - - background-color:#2E83FF !important; - color: #fff !important; - -} -.blue_b a{ - color: #fff !important; -} - -.blue_b:hover { -background-color:#5596f5 !important; -} - - .footer-cust a{ - color: #999; + cursor: pointer; } .footer-cust a:hover { - color: #c7c7c7; + color: #a3a3a3; } -.footer-cust h6{ +/* .footer-cust h6{ margin-bottom: 15px; -} +} */ .logo_size{ width:200px @@ -462,11 +417,6 @@ background-color:#5596f5 !important; font-family: "Inter", sans-serif; } - -/* button:hover :is(:where(a)) { - color: #5e5e5e; -} */ - button :is(:where(p)) { color: #ddd; font-weight: 400; diff --git a/templates/partials/footer.html b/templates/partials/footer.html index 64754c9..cdee99c 100644 --- a/templates/partials/footer.html +++ b/templates/partials/footer.html @@ -30,10 +30,10 @@
-

+

© Mycelium - All rights reserved. - Terms & Conditions | - Privacy Policy + Terms & Conditions | + Privacy Policy

From 018e7cc08262b174fecd568c9523bd3cb782764f Mon Sep 17 00:00:00 2001 From: ehab-hassan Date: Sun, 25 May 2025 16:39:48 +0300 Subject: [PATCH 12/23] fix tailwind cong --- css/index.css | 13 +------------ tailwind.config.js | 25 +++++-------------------- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/css/index.css b/css/index.css index 03d6724..3e1c791 100644 --- a/css/index.css +++ b/css/index.css @@ -3,19 +3,8 @@ @import "code.css"; /*! purgecss end ignore */ - -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer components { - /* .btn-primary { - @apply py-1.5 px-3 text-center bg-blue-700 rounded-md text-white; - } */ -} - @import "tailwindcss/base"; -@import "layout.css"; + @import "tailwindcss/components"; @import "admonition.css"; @import "tailwindcss/utilities"; diff --git a/tailwind.config.js b/tailwind.config.js index 1c659e7..eb65f68 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,30 +1,15 @@ const colors = require('tailwindcss/colors') module.exports = { + darkMode: 'class', content: [ './templates/**/*.html' ], safelist: [ - { - pattern: /(-|)(ml|mr)-(4|8|12|16|20|24|28)/, - variants: [ - 'sm', 'md', 'lg', - 'first', 'first:sm', 'first:md', 'first:lg', - 'last', 'last:sm', 'last:md', 'last:lg' - ], - }, - { - pattern: /(pt|pb)-(0)/, - variants: [ - '!', 'lg', - 'first', 'first:sm', 'first:md', 'first:lg', - 'last', 'last:sm', 'last:md', 'last:lg' - ], - }, - { - pattern: /bg-teal-(50|100|200|300|400|500|600|700|800|900)/, // Added teal color safelist - } - ], + 'lg:grid-cols-3', + 'md:grid-cols-2', + 'grid-cols-1', +], important: true, theme: { From f88085e0890c8e8e6347f8dbde46deb3eb59d2ed Mon Sep 17 00:00:00 2001 From: ehab-hassan Date: Sun, 25 May 2025 16:52:17 +0300 Subject: [PATCH 13/23] fix js --- static/js/custom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/js/custom.js b/static/js/custom.js index a133157..e879bee 100644 --- a/static/js/custom.js +++ b/static/js/custom.js @@ -199,7 +199,7 @@ const body = document.body; // Apply saved theme on load document.addEventListener('DOMContentLoaded', () => { - const savedTheme = localStorage.getItem('theme') || 'dark'; // Default is dark mode + const savedTheme = localStorage.getItem('theme') || 'light'; // Default is light mode if (savedTheme === 'dark') { body.classList.add('dark-mode'); From 19c74d2f03b40a9acc2ee66c3d111aa25f7be4f8 Mon Sep 17 00:00:00 2001 From: ehab-hassan Date: Sun, 25 May 2025 17:21:06 +0300 Subject: [PATCH 14/23] add 404 --- content/home/index.md | 2 +- static/images/404_1.png | Bin 0 -> 19849 bytes templates/404.html | 2 +- templates/shortcodes/hero.html | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 static/images/404_1.png diff --git a/content/home/index.md b/content/home/index.md index f449932..ed3959e 100644 --- a/content/home/index.md +++ b/content/home/index.md @@ -28,7 +28,7 @@ extra: image_src="/images/mycel2.png", image_alt="Discover Mycelium", title="Discover Mycelium", - subtitle_1="ABOUT", + subheader="ABOUT", description="Mycelium is an unbreakable network, always finding the shortest path and providing 100% secure, peer-to-peer communication. But this is just the beginning.", description_2="Our mission is to create a sustainable digital ecosystem where communication is seamless, data is secure, and scalability knows no bounds.", button_text="Learn more", diff --git a/static/images/404_1.png b/static/images/404_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc94a7362070af6b6b954a40109bb9626436857 GIT binary patch literal 19849 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

You seem to have ended up on a missing page!

-

This could mean that you’ve entered the wrong URL or you’ve clicked on content which has moved locations or is no longer live. If you need assistance, click on the blue chat icon at the bottom of the screen to speak with real humans on our support team. Or go back to home.

+

This could mean that you’ve entered the wrong URL or you’ve clicked on content which has moved locations or is no longer live. If you need assistance, click on the blue chat icon at the bottom of the screen to speak with real humans on our support team. Or go back to home.

diff --git a/templates/shortcodes/hero.html b/templates/shortcodes/hero.html index ae6723b..daea42a 100644 --- a/templates/shortcodes/hero.html +++ b/templates/shortcodes/hero.html @@ -16,7 +16,7 @@

{{ title }}

-

{{ subtitle }}

+

{{ subtitle }}

{{ description }}

{{ highlight }}

From 8c1da7a9ef2ad07b0bae1fee062f0625bc60165f Mon Sep 17 00:00:00 2001 From: ehab-hassan Date: Sun, 25 May 2025 17:24:23 +0300 Subject: [PATCH 15/23] add 404 --- config.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.toml b/config.toml index 991a9ce..a2bd036 100644 --- a/config.toml +++ b/config.toml @@ -51,8 +51,8 @@ external_links_no_referrer = true # For example, `...` into `…`, `"quote"` into `“curly”` etc smart_punctuation = true -#[build] -#not_found = "404.md" +[build] +not_found = "404.md" [[taxonomies]] name = "categories" From 6948c25978c51602af7649b9e9b6c75ee2d768a0 Mon Sep 17 00:00:00 2001 From: ehab-hassan Date: Sun, 25 May 2025 17:34:15 +0300 Subject: [PATCH 16/23] add 404 --- config.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.toml b/config.toml index a2bd036..991a9ce 100644 --- a/config.toml +++ b/config.toml @@ -51,8 +51,8 @@ external_links_no_referrer = true # For example, `...` into `…`, `"quote"` into `“curly”` etc smart_punctuation = true -[build] -not_found = "404.md" +#[build] +#not_found = "404.md" [[taxonomies]] name = "categories" From 3c56b93d1f93f0e29fa66f9cc9823b0780fdf062 Mon Sep 17 00:00:00 2001 From: ehab Date: Sun, 25 May 2025 23:03:05 +0300 Subject: [PATCH 17/23] add last version of tailwind --- build.sh | 58 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/build.sh b/build.sh index 2910b18..68441f3 100755 --- a/build.sh +++ b/build.sh @@ -1,20 +1,13 @@ +#!/bin/bash + echo "Starting build..." SOURCE=${BASH_SOURCE[0]} DIR_OF_THIS_SCRIPT="$( dirname "$SOURCE" )" ABS_DIR_OF_SCRIPT="$( realpath $DIR_OF_THIS_SCRIPT )" -# TODO: Check if current version is latest to avoid redundant installation -if [[ -f "tailwindcss" ]] -then - rm tailwindcss -fi - -# checks os and architecture for correct release -# https://stackoverflow.com/a/8597411 -echo "Installing & building tailwind..." +# Determine platform ASSET="tailwindcss" - if [[ "$OSTYPE" == "linux-gnu"* ]]; then ASSET="$ASSET-linux" elif [[ "$OSTYPE" == "darwin"* ]]; then @@ -26,21 +19,38 @@ elif [[ "$(uname -m)" == "arm64"* ]]; then ASSET="$ASSET-arm64" fi -curl -sLO "https://github.com/tailwindlabs/tailwindcss/releases/download/v3.4.17/${ASSET}" -chmod +x $ASSET -mv $ASSET tailwindcss +# Get the latest version from GitHub +LATEST_VERSION=$(curl -s https://api.github.com/repos/tailwindlabs/tailwindcss/releases/latest | grep '"tag_name":' | cut -d '"' -f 4) - -# initialized and configures tailwind if not configured -echo "Initializing tailwind..." -if [[ ! -f "tailwind.config.js" ]] -then - ./tailwindcss init - sed -i '' "s| content: \\[\\],| content: \\['./templates/**/*.html'\\],|g" tailwind.config.js +# Get current version (if exists) +CURRENT_VERSION="" +if [[ -f "./tailwindcss" ]]; then + CURRENT_VERSION=$(./tailwindcss -v | awk '{print $2}') fi -# compiles tailwind css for prod & builds project -echo "Compiling tailwindcss and building zola project..." +echo "Current Tailwind version: $CURRENT_VERSION" +echo "Latest Tailwind version: $LATEST_VERSION" + +# Download only if outdated or not installed +if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then + echo "Updating Tailwind to latest version..." + rm -f tailwindcss + curl -sLO "https://github.com/tailwindlabs/tailwindcss/releases/download/${LATEST_VERSION}/${ASSET}" + chmod +x $ASSET + mv $ASSET tailwindcss +else + echo "Tailwind is already up to date." +fi + +# Initialize tailwind.config.js if not exists +if [[ ! -f "tailwind.config.js" ]]; then + echo "Initializing tailwind.config.js..." + ./tailwindcss init + sed -i '' "s| content: \[\],| content: \['./templates/**/*.html'\],|g" tailwind.config.js +fi + +# Build Tailwind CSS and Zola +echo "Compiling Tailwind CSS and building Zola site..." rm -rf public static/css -./tailwindcss -i css/index.css -o ./static/css/index.css --minify -zola --root $ABS_DIR_OF_SCRIPT build \ No newline at end of file +./tailwindcss -i css/index.css -o static/css/index.css --minify +zola --root "$ABS_DIR_OF_SCRIPT" build From 4fdc7fefeea4e7b4a1f9081616a182d0a898d409 Mon Sep 17 00:00:00 2001 From: ehab Date: Tue, 27 May 2025 09:32:36 +0300 Subject: [PATCH 18/23] remove code.css --- css/code.css | 94 --------------------------------------------------- css/index.css | 11 +++--- 2 files changed, 6 insertions(+), 99 deletions(-) delete mode 100644 css/code.css diff --git a/css/code.css b/css/code.css deleted file mode 100644 index 60120a3..0000000 --- a/css/code.css +++ /dev/null @@ -1,94 +0,0 @@ -code.language-html, -code.language-css, -code.language-md, -code.language-cmd, -code.language-bash, -code.language-text, -code.language-js, -span.o, -span.nx { - color: rgb(255, 255, 255); - line-height: 1.4; -} -span.c { - color: hsl(120, 100%, 20%); -} - -.active { - color: #2E83FF; -} - -span.p, -span.s1, -span.s2, -span.nt { - color: hsl(40, 100%, 30%); -} - -span.gs, -span.gh, -span.ge { - color: hsl(208, 100%, 50%); -} - -span.gs { - font-weight: bold; -} - -span.ge { - font-style: italic; -} - -pre, -code { - @apply font-mono; -} - -code { - background-color: hsl(0, 0%, 98%); - border-radius: 3px; - color: hsl(120, 100%, 20%); - font-size: 85%; -} - -pre { - margin: 0; - margin: 0; - padding: 1rem; - overflow: scroll; -} - -pre code { - background-color: transparent; - color: inherit; - font-size: 100%; - padding: 0; -} - -.highlight { - background-color: transparent; - border-radius: 3px; - margin: 0 0 0.5rem; - padding: 0; - - & pre { - margin-bottom: 0; - overflow-x: auto; - } - - & .lineno { - color: hsla(0, 0%, 67%, 0.72); - display: inline-block; /* Ensures the null space also isn't selectable */ - padding: 0 0.75rem 0 0.25rem; - /* Make sure numbers aren't selectable */ - } -} - -/* TODO: dark theme for future -@media (prefers-color-scheme: dark) { - code { - color: #fff; - background: hsl(200, 63%, 15%); - } -} -*/ diff --git a/css/index.css b/css/index.css index 3e1c791..09cd099 100644 --- a/css/index.css +++ b/css/index.css @@ -1,13 +1,14 @@ /*! purgecss start ignore */ /* @import "nav.css"; */ -@import "code.css"; /*! purgecss end ignore */ -@import "tailwindcss/base"; +@tailwind base; +@tailwind components; +@tailwind utilities; +@tailwind typography; + + -@import "tailwindcss/components"; -@import "admonition.css"; -@import "tailwindcss/utilities"; @import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Raleway:ital,wght@0,100..900;1,100..900&display=swap'); From 694b18ca31d002802ae77d642f8df014f4305e66 Mon Sep 17 00:00:00 2001 From: ehab Date: Tue, 27 May 2025 11:56:14 +0300 Subject: [PATCH 19/23] test build --- build.sh | 40 ++++++++++++++++++++++++++-------------- css/index.css | 17 ++++++++++++----- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/build.sh b/build.sh index 68441f3..059f690 100755 --- a/build.sh +++ b/build.sh @@ -1,28 +1,29 @@ #!/bin/bash -echo "Starting build..." +echo "🚀 Starting build..." SOURCE=${BASH_SOURCE[0]} DIR_OF_THIS_SCRIPT="$( dirname "$SOURCE" )" -ABS_DIR_OF_SCRIPT="$( realpath $DIR_OF_THIS_SCRIPT )" +ABS_DIR_OF_SCRIPT="$( realpath "$DIR_OF_THIS_SCRIPT" )" -# Determine platform +# Detect platform for Tailwind binary ASSET="tailwindcss" if [[ "$OSTYPE" == "linux-gnu"* ]]; then ASSET="$ASSET-linux" elif [[ "$OSTYPE" == "darwin"* ]]; then ASSET="$ASSET-macos" fi + if [[ "$(uname -m)" == "x86_64"* ]]; then ASSET="$ASSET-x64" elif [[ "$(uname -m)" == "arm64"* ]]; then ASSET="$ASSET-arm64" fi -# Get the latest version from GitHub +# Get latest Tailwind version from GitHub LATEST_VERSION=$(curl -s https://api.github.com/repos/tailwindlabs/tailwindcss/releases/latest | grep '"tag_name":' | cut -d '"' -f 4) -# Get current version (if exists) +# Check current version CURRENT_VERSION="" if [[ -f "./tailwindcss" ]]; then CURRENT_VERSION=$(./tailwindcss -v | awk '{print $2}') @@ -31,26 +32,37 @@ fi echo "Current Tailwind version: $CURRENT_VERSION" echo "Latest Tailwind version: $LATEST_VERSION" -# Download only if outdated or not installed +# Download Tailwind binary if needed if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then - echo "Updating Tailwind to latest version..." + echo "⬇️ Downloading latest Tailwind..." rm -f tailwindcss curl -sLO "https://github.com/tailwindlabs/tailwindcss/releases/download/${LATEST_VERSION}/${ASSET}" chmod +x $ASSET mv $ASSET tailwindcss else - echo "Tailwind is already up to date." + echo "✅ Tailwind is up to date." fi -# Initialize tailwind.config.js if not exists +# Initialize Tailwind config if needed if [[ ! -f "tailwind.config.js" ]]; then - echo "Initializing tailwind.config.js..." + echo "🛠 Initializing Tailwind config..." ./tailwindcss init - sed -i '' "s| content: \[\],| content: \['./templates/**/*.html'\],|g" tailwind.config.js + sed -i.bak "s| content: \[\],| content: \['./templates/**/*.html'\],|g" tailwind.config.js fi -# Build Tailwind CSS and Zola -echo "Compiling Tailwind CSS and building Zola site..." -rm -rf public static/css +# Ensure static/css exists +mkdir -p static/css + +# Clean previous build +rm -rf public + +# Compile Tailwind +echo "🧵 Building Tailwind CSS..." + ./tailwindcss -i css/index.css -o static/css/index.css --minify + +# Build Zola site +echo "🏗 Running Zola..." zola --root "$ABS_DIR_OF_SCRIPT" build + +echo "✅ Build complete. Check public/ folder." diff --git a/css/index.css b/css/index.css index 09cd099..1a892e3 100644 --- a/css/index.css +++ b/css/index.css @@ -1,14 +1,21 @@ -/*! purgecss start ignore */ -/* @import "nav.css"; */ -/*! purgecss end ignore */ + + @tailwind base; @tailwind components; @tailwind utilities; -@tailwind typography; - +@layer components { + /* .btn-primary { + @apply py-1.5 px-3 text-center bg-blue-700 rounded-md text-white; + } */ +} +@import "tailwindcss/base"; +@import "layout.css"; +@import "tailwindcss/components"; +@import "admonition.css"; +@import "tailwindcss/utilities"; @import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Raleway:ital,wght@0,100..900;1,100..900&display=swap'); From ab5b830222b43d1a7596f4bd9e2a090e650f94fd Mon Sep 17 00:00:00 2001 From: ehab Date: Tue, 27 May 2025 12:15:46 +0300 Subject: [PATCH 20/23] text build --- build.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build.sh b/build.sh index 059f690..0df19a3 100755 --- a/build.sh +++ b/build.sh @@ -65,4 +65,9 @@ echo "🧵 Building Tailwind CSS..." echo "🏗 Running Zola..." zola --root "$ABS_DIR_OF_SCRIPT" build +# Ensure CSS is in the public directory +echo "📋 Ensuring CSS is in public directory..." +mkdir -p public/css +cp static/css/index.css public/css/ + echo "✅ Build complete. Check public/ folder." From bac948943396b6440c4b50531f41a8a61aacf57b Mon Sep 17 00:00:00 2001 From: ehab Date: Tue, 27 May 2025 12:46:45 +0300 Subject: [PATCH 21/23] text build --- build.sh | 4 ++++ templates/partials/head.html | 2 ++ vercel.json | 9 +++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index 0df19a3..c4b5b74 100755 --- a/build.sh +++ b/build.sh @@ -70,4 +70,8 @@ echo "📋 Ensuring CSS is in public directory..." mkdir -p public/css cp static/css/index.css public/css/ +# Also copy to the root of public for fallback +echo "📋 Also copying CSS to root of public for fallback..." +cp static/css/index.css public/index.css + echo "✅ Build complete. Check public/ folder." diff --git a/templates/partials/head.html b/templates/partials/head.html index 14cefe9..aa57a8f 100644 --- a/templates/partials/head.html +++ b/templates/partials/head.html @@ -100,6 +100,8 @@ + + - - - - - {% block rss %} - - {% endblock %} diff --git a/vercel.json b/vercel.json index 3c8d726..f91642e 100644 --- a/vercel.json +++ b/vercel.json @@ -13,7 +13,7 @@ "headers": [ { "key": "Cache-Control", - "value": "public, max-age=0, must-revalidate" + "value": "public, max-age=2678400" } ] }, @@ -44,10 +44,5 @@ } ] } - ], - "routes": [ - { "src": "/css/index.css", "dest": "/css/index.css" } - ], - "buildCommand": "bash build.sh", - "outputDirectory": "public" + ] } \ No newline at end of file