diff --git a/astro/src/layouts/BlogLayout.astro b/astro/src/layouts/BlogLayout.astro
index 4fc31f7..fcc86ef 100644
--- a/astro/src/layouts/BlogLayout.astro
+++ b/astro/src/layouts/BlogLayout.astro
@@ -1,6 +1,7 @@
---
import '@/styles/global.css';
import { getSettings } from "@/content/settings/settings";
+import { getTextColor } from '@/lib/colors';
interface Props {
settings: BlogLayoutProps;
@@ -11,7 +12,11 @@ const settings = await getSettings();
const css = {
"--ptc": settings.website.colors.primary,
- "--stc": settings.website.colors.secondary ?? settings.website.colors.primary
+ "--stc": settings.website.colors.secondary ?? settings.website.colors.primary,
+ "--ptt": getTextColor(settings.website.colors.primary),
+ "--stt": settings.website.colors.secondary
+ ? getTextColor(settings.website.colors.secondary)
+ : getTextColor(settings.website.colors.primary)
};
---
@@ -72,7 +77,7 @@ const css = {
-
+
\ No newline at end of file
diff --git a/astro/src/layouts/ProjectLayout.astro b/astro/src/layouts/ProjectLayout.astro
index 4fc31f7..fcc86ef 100644
--- a/astro/src/layouts/ProjectLayout.astro
+++ b/astro/src/layouts/ProjectLayout.astro
@@ -1,6 +1,7 @@
---
import '@/styles/global.css';
import { getSettings } from "@/content/settings/settings";
+import { getTextColor } from '@/lib/colors';
interface Props {
settings: BlogLayoutProps;
@@ -11,7 +12,11 @@ const settings = await getSettings();
const css = {
"--ptc": settings.website.colors.primary,
- "--stc": settings.website.colors.secondary ?? settings.website.colors.primary
+ "--stc": settings.website.colors.secondary ?? settings.website.colors.primary,
+ "--ptt": getTextColor(settings.website.colors.primary),
+ "--stt": settings.website.colors.secondary
+ ? getTextColor(settings.website.colors.secondary)
+ : getTextColor(settings.website.colors.primary)
};
---
@@ -72,7 +77,7 @@ const css = {
-
+
\ No newline at end of file
diff --git a/astro/src/layouts/WebpageLayout.astro b/astro/src/layouts/WebpageLayout.astro
index 6b56176..ea9f7e7 100644
--- a/astro/src/layouts/WebpageLayout.astro
+++ b/astro/src/layouts/WebpageLayout.astro
@@ -1,6 +1,7 @@
---
import '@/styles/global.css';
import { getSettings } from "@/content/settings/settings";
+import { getTextColor } from '@/lib/colors';
interface Props {
settings: WebpageLayoutProps;
@@ -11,7 +12,11 @@ const settings = await getSettings();
const css = {
"--ptc": settings.website.colors.primary,
- "--stc": settings.website.colors.secondary ?? settings.website.colors.primary
+ "--stc": settings.website.colors.secondary ?? settings.website.colors.primary,
+ "--ptt": getTextColor(settings.website.colors.primary),
+ "--stt": settings.website.colors.secondary
+ ? getTextColor(settings.website.colors.secondary)
+ : getTextColor(settings.website.colors.primary)
};
---
@@ -69,7 +74,7 @@ const css = {
-
+
diff --git a/astro/src/lib/colors.ts b/astro/src/lib/colors.ts
new file mode 100644
index 0000000..52fd915
--- /dev/null
+++ b/astro/src/lib/colors.ts
@@ -0,0 +1,23 @@
+export function getTextColor(bgColor: string) {
+ // Remove # if present
+ const hex = bgColor.replace('#', '');
+
+ // Convert hex to RGB
+ const r = parseInt(hex.substring(0, 2), 16) / 255;
+ const g = parseInt(hex.substring(2, 4), 16) / 255;
+ const b = parseInt(hex.substring(4, 6), 16) / 255;
+
+ // Convert to linear RGB
+ const toLinear = (c: any) =>
+ c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
+
+ const R = toLinear(r);
+ const G = toLinear(g);
+ const B = toLinear(b);
+
+ // Calculate luminance
+ const luminance = 0.2126 * R + 0.7152 * G + 0.0722 * B;
+
+ // Return white for dark backgrounds, black for light backgrounds
+ return luminance > 0.179 ? '#000000' : '#fcfcfc';
+}