style(navigation): implement new navigation-bar

This commit is contained in:
2025-08-22 00:46:19 +02:00
parent aebd3d643e
commit 244ad1aabe
8 changed files with 679 additions and 84 deletions

10
package-lock.json generated
View File

@@ -14,6 +14,7 @@
"@angular/forms": "^20.2.0", "@angular/forms": "^20.2.0",
"@angular/platform-browser": "^20.2.0", "@angular/platform-browser": "^20.2.0",
"@angular/router": "^20.2.0", "@angular/router": "^20.2.0",
"@fontsource-variable/jetbrains-mono": "^5.2.6",
"@fontsource-variable/open-sans": "^5.2.6", "@fontsource-variable/open-sans": "^5.2.6",
"@fortawesome/angular-fontawesome": "^3.0.0", "@fortawesome/angular-fontawesome": "^3.0.0",
"@fortawesome/fontawesome-free": "^7.0.0", "@fortawesome/fontawesome-free": "^7.0.0",
@@ -1429,6 +1430,15 @@
"node": ">=18" "node": ">=18"
} }
}, },
"node_modules/@fontsource-variable/jetbrains-mono": {
"version": "5.2.6",
"resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.2.6.tgz",
"integrity": "sha512-1pvtyK6H1paBOixbtZ9xfQgArVQ4SJMW3WSGZPOd5PiW3yg0t8umwKnjDMzW2ofb7qSdiXnsnIaHPT36vEOdlg==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
}
},
"node_modules/@fontsource-variable/open-sans": { "node_modules/@fontsource-variable/open-sans": {
"version": "5.2.6", "version": "5.2.6",
"resolved": "https://registry.npmjs.org/@fontsource-variable/open-sans/-/open-sans-5.2.6.tgz", "resolved": "https://registry.npmjs.org/@fontsource-variable/open-sans/-/open-sans-5.2.6.tgz",

View File

@@ -28,6 +28,7 @@
"@angular/forms": "^20.2.0", "@angular/forms": "^20.2.0",
"@angular/platform-browser": "^20.2.0", "@angular/platform-browser": "^20.2.0",
"@angular/router": "^20.2.0", "@angular/router": "^20.2.0",
"@fontsource-variable/jetbrains-mono": "^5.2.6",
"@fontsource-variable/open-sans": "^5.2.6", "@fontsource-variable/open-sans": "^5.2.6",
"@fortawesome/angular-fontawesome": "^3.0.0", "@fortawesome/angular-fontawesome": "^3.0.0",
"@fortawesome/fontawesome-free": "^7.0.0", "@fortawesome/fontawesome-free": "^7.0.0",

View File

@@ -2,6 +2,302 @@ import Aura from "@primeuix/themes/aura";
import { definePreset } from "@primeuix/themes"; import { definePreset } from "@primeuix/themes";
export const Theme = definePreset(Aura, { export const Theme = definePreset(Aura, {
primitive: {
borderRadius: {
none: "0",
xs: "2px",
sm: "4px",
md: "6px",
lg: "8px",
xl: "12px"
},
emerald: {
50: "#ecfdf5",
100: "#d1fae5",
200: "#a7f3d0",
300: "#6ee7b7",
400: "#34d399",
500: "#10b981",
600: "#059669",
700: "#047857",
800: "#065f46",
900: "#064e3b",
950: "#022c22"
},
green: {
50: "#f0fdf4",
100: "#dcfce7",
200: "#bbf7d0",
300: "#86efac",
400: "#4ade80",
500: "#22c55e",
600: "#16a34a",
700: "#15803d",
800: "#166534",
900: "#14532d",
950: "#052e16"
},
lime: {
50: "#f7fee7",
100: "#ecfccb",
200: "#d9f99d",
300: "#bef264",
400: "#a3e635",
500: "#84cc16",
600: "#65a30d",
700: "#4d7c0f",
800: "#3f6212",
900: "#365314",
950: "#1a2e05"
},
red: {
50: "#fef2f2",
100: "#fee2e2",
200: "#fecaca",
300: "#fca5a5",
400: "#f87171",
500: "#ef4444",
600: "#dc2626",
700: "#b91c1c",
800: "#991b1b",
900: "#7f1d1d",
950: "#450a0a"
},
orange: {
50: "#fff7ed",
100: "#ffedd5",
200: "#fed7aa",
300: "#fdba74",
400: "#fb923c",
500: "#f97316",
600: "#ea580c",
700: "#c2410c",
800: "#9a3412",
900: "#7c2d12",
950: "#431407"
},
amber: {
50: "#fffbeb",
100: "#fef3c7",
200: "#fde68a",
300: "#fcd34d",
400: "#fbbf24",
500: "#f59e0b",
600: "#d97706",
700: "#b45309",
800: "#92400e",
900: "#78350f",
950: "#451a03"
},
yellow: {
50: "#fefce8",
100: "#fef9c3",
200: "#fef08a",
300: "#fde047",
400: "#facc15",
500: "#eab308",
600: "#ca8a04",
700: "#a16207",
800: "#854d0e",
900: "#713f12",
950: "#422006"
},
teal: {
50: "#f0fdfa",
100: "#ccfbf1",
200: "#99f6e4",
300: "#5eead4",
400: "#2dd4bf",
500: "#14b8a6",
600: "#0d9488",
700: "#0f766e",
800: "#115e59",
900: "#134e4a",
950: "#042f2e"
},
cyan: {
50: "#ecfeff",
100: "#cffafe",
200: "#a5f3fc",
300: "#67e8f9",
400: "#22d3ee",
500: "#06b6d4",
600: "#0891b2",
700: "#0e7490",
800: "#155e75",
900: "#164e63",
950: "#083344"
},
sky: {
50: "#f0f9ff",
100: "#e0f2fe",
200: "#bae6fd",
300: "#7dd3fc",
400: "#38bdf8",
500: "#0ea5e9",
600: "#0284c7",
700: "#0369a1",
800: "#075985",
900: "#0c4a6e",
950: "#082f49"
},
blue: {
50: "#eff6ff",
100: "#dbeafe",
200: "#bfdbfe",
300: "#93c5fd",
400: "#60a5fa",
500: "#3b82f6",
600: "#2563eb",
700: "#1d4ed8",
800: "#1e40af",
900: "#1e3a8a",
950: "#172554"
},
indigo: {
50: "#eef2ff",
100: "#e0e7ff",
200: "#c7d2fe",
300: "#a5b4fc",
400: "#818cf8",
500: "#6366f1",
600: "#4f46e5",
700: "#4338ca",
800: "#3730a3",
900: "#312e81",
950: "#1e1b4b"
},
violet: {
50: "#f5f3ff",
100: "#ede9fe",
200: "#ddd6fe",
300: "#c4b5fd",
400: "#a78bfa",
500: "#8b5cf6",
600: "#7c3aed",
700: "#6d28d9",
800: "#5b21b6",
900: "#4c1d95",
950: "#2e1065"
},
purple: {
50: "#faf5ff",
100: "#f3e8ff",
200: "#e9d5ff",
300: "#d8b4fe",
400: "#c084fc",
500: "#a855f7",
600: "#9333ea",
700: "#7e22ce",
800: "#6b21a8",
900: "#581c87",
950: "#3b0764"
},
fuchsia: {
50: "#fdf4ff",
100: "#fae8ff",
200: "#f5d0fe",
300: "#f0abfc",
400: "#e879f9",
500: "#d946ef",
600: "#c026d3",
700: "#a21caf",
800: "#86198f",
900: "#701a75",
950: "#4a044e"
},
pink: {
50: "#fdf2f8",
100: "#fce7f3",
200: "#fbcfe8",
300: "#f9a8d4",
400: "#f472b6",
500: "#ec4899",
600: "#db2777",
700: "#be185d",
800: "#9d174d",
900: "#831843",
950: "#500724"
},
rose: {
50: "#fff1f2",
100: "#ffe4e6",
200: "#fecdd3",
300: "#fda4af",
400: "#fb7185",
500: "#f43f5e",
600: "#e11d48",
700: "#be123c",
800: "#9f1239",
900: "#881337",
950: "#4c0519"
},
slate: {
50: "#f8fafc",
100: "#f1f5f9",
200: "#e2e8f0",
300: "#cbd5e1",
400: "#94a3b8",
500: "#64748b",
600: "#475569",
700: "#334155",
800: "#1e293b",
900: "#0f172a",
950: "#020617"
},
gray: {
50: "#f9fafb",
100: "#f3f4f6",
200: "#e5e7eb",
300: "#d1d5db",
400: "#9ca3af",
500: "#6b7280",
600: "#4b5563",
700: "#374151",
800: "#1f2937",
900: "#111827",
950: "#030712"
},
zinc: {
50: "#fafafa",
100: "#f4f4f5",
200: "#e4e4e7",
300: "#d4d4d8",
400: "#a1a1aa",
500: "#71717a",
600: "#52525b",
700: "#3f3f46",
800: "#27272a",
900: "#18181b",
950: "#09090b"
},
neutral: {
50: "#fafafa",
100: "#f5f5f5",
200: "#e5e5e5",
300: "#d4d4d4",
400: "#a3a3a3",
500: "#737373",
600: "#525252",
700: "#404040",
800: "#262626",
900: "#171717",
950: "#0a0a0a"
},
stone: {
50: "#fafaf9",
100: "#f5f5f4",
200: "#e7e5e4",
300: "#d6d3d1",
400: "#a8a29e",
500: "#78716c",
600: "#57534e",
700: "#44403c",
800: "#292524",
900: "#1c1917",
950: "#0c0a09"
}
},
semantic: { semantic: {
formField: { formField: {
paddingX: "0.75rem", paddingX: "0.75rem",
@@ -27,17 +323,17 @@ export const Theme = definePreset(Aura, {
transitionDuration: "{transition.duration}" transitionDuration: "{transition.duration}"
}, },
primary: { primary: {
50: "#fffbeb", 50: "#fffdea",
100: "#fef3c7", 100: "#fff7c2",
200: "#fde68a", 200: "#ffef85",
300: "#fcd34d", 300: "#ffe24d",
400: "#fbbf24", 400: "#ffd700",
500: "#f59e0b", 500: "#e6c200",
600: "#d97706", 600: "#bfa100",
700: "#b45309", 700: "#997f00",
800: "#92400e", 800: "#735f00",
900: "#78350f", 900: "#4d3f00",
950: "#451a03" 950: "#1f1600"
}, },
colorScheme: { colorScheme: {
light: { light: {
@@ -54,30 +350,311 @@ export const Theme = definePreset(Aura, {
800: "#292524", 800: "#292524",
900: "#1c1917", 900: "#1c1917",
950: "#0c0a09" 950: "#0c0a09"
},
primary: {
color: "{primary.500}",
contrastColor: "#ffffff",
hoverColor: "{primary.600}",
activeColor: "{primary.700}"
},
highlight: {
background: "{primary.50}",
focusBackground: "{primary.100}",
color: "{primary.700}",
focusColor: "{primary.800}"
},
mask: {
background: "rgba(0,0,0,0.4)",
color: "{surface.200}"
},
formField: {
background: "{surface.0}",
disabledBackground: "{surface.200}",
filledBackground: "{surface.50}",
filledHoverBackground: "{surface.50}",
filledFocusBackground: "{surface.50}",
borderColor: "{surface.300}",
hoverBorderColor: "{surface.400}",
focusBorderColor: "{primary.color}",
invalidBorderColor: "{red.400}",
color: "{surface.700}",
disabledColor: "{surface.500}",
placeholderColor: "{surface.500}",
invalidPlaceholderColor: "{red.600}",
floatLabelColor: "{surface.500}",
floatLabelFocusColor: "{primary.600}",
floatLabelActiveColor: "{surface.500}",
floatLabelInvalidColor: "{form.field.invalid.placeholder.color}",
iconColor: "{surface.400}",
shadow: "0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05)"
},
text: {
color: "{surface.700}",
hoverColor: "{surface.800}",
mutedColor: "{surface.500}",
hoverMutedColor: "{surface.600}"
},
content: {
background: "{surface.0}",
hoverBackground: "{surface.100}",
borderColor: "{surface.200}",
color: "{text.color}",
hoverColor: "{text.hover.color}"
},
overlay: {
select: {
background: "{surface.0}",
borderColor: "{surface.200}",
color: "{text.color}"
},
popover: {
background: "{surface.0}",
borderColor: "{surface.200}",
color: "{text.color}"
},
modal: {
background: "{surface.0}",
borderColor: "{surface.200}",
color: "{text.color}"
} }
}, },
list: {
option: {
focusBackground: "{surface.100}",
selectedBackground: "{highlight.background}",
selectedFocusBackground: "{highlight.focus.background}",
color: "{text.color}",
focusColor: "{text.hover.color}",
selectedColor: "{highlight.color}",
selectedFocusColor: "{highlight.focus.color}",
icon: {
color: "{surface.400}",
focusColor: "{surface.500}"
}
},
optionGroup: {
background: "transparent",
color: "{text.muted.color}"
}
},
navigation: {
item: {
focusBackground: "{surface.100}",
activeBackground: "{surface.100}",
color: "{text.color}",
focusColor: "{text.hover.color}",
activeColor: "{text.hover.color}",
icon: {
color: "{surface.400}",
focusColor: "{surface.500}",
activeColor: "{surface.500}"
}
},
submenuLabel: {
background: "transparent",
color: "{text.muted.color}"
},
submenuIcon: {
color: "{surface.400}",
focusColor: "{surface.500}",
activeColor: "{surface.500}"
}
},
},
dark: { dark: {
surface: { surface: {
0: "#030303", 0: "#ffffff",
50: "#171717", 50: "#fafafa",
100: "#262626", 100: "#f5f5f5",
200: "#404040", 200: "#e5e5e5",
300: "#525252", 300: "#d4d4d4",
400: "#737373", 400: "#a3a3a3",
500: "#a3a3a3", 500: "#737373",
600: "#d4d4d4", 600: "#525252",
700: "#e5e5e5", 700: "#404040",
800: "#f5f5f5", 800: "#262626",
900: "#fafafa", 900: "#171717",
950: "#ffffff" 950: "#030303"
}, },
primary: { primary: {
color: "{primary.400}", // Gold Button Hintergrund color: "{primary.400}",
contrastColor: "#1a1a1a", // ***Dunkler Text für gute Lesbarkeit*** contrastColor: "{surface.900}",
hoverColor: "{primary.300}", hoverColor: "{primary.300}",
activeColor: "{primary.200}" activeColor: "{primary.200}"
},
highlight: {
background: "color-mix(in srgb, {primary.400}, transparent 84%)",
focusBackground: "color-mix(in srgb, {primary.400}, transparent 76%)",
color: "rgba(255,255,255,.87)",
focusColor: "rgba(255,255,255,.87)"
},
mask: {
background: "rgba(0,0,0,0.6)",
color: "{surface.200}"
},
formField: {
background: "{surface.950}",
disabledBackground: "{surface.700}",
filledBackground: "{surface.800}",
filledHoverBackground: "{surface.800}",
filledFocusBackground: "{surface.800}",
borderColor: "{surface.600}",
hoverBorderColor: "{surface.500}",
focusBorderColor: "{primary.color}",
invalidBorderColor: "{red.300}",
color: "{surface.0}",
disabledColor: "{surface.400}",
placeholderColor: "{surface.400}",
invalidPlaceholderColor: "{red.400}",
floatLabelColor: "{surface.400}",
floatLabelFocusColor: "{primary.color}",
floatLabelActiveColor: "{surface.400}",
floatLabelInvalidColor: "{form.field.invalid.placeholder.color}",
iconColor: "{surface.400}",
shadow: "0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05)"
},
text: {
color: "{surface.0}",
hoverColor: "{surface.0}",
mutedColor: "{surface.400}",
hoverMutedColor: "{surface.300}"
},
content: {
background: "{surface.900}",
hoverBackground: "{surface.800}",
borderColor: "{surface.700}",
color: "{text.color}",
hoverColor: "{text.hover.color}"
},
overlay: {
select: {
background: "{surface.900}",
borderColor: "{surface.700}",
color: "{text.color}"
},
popover: {
background: "{surface.900}",
borderColor: "{surface.700}",
color: "{text.color}"
},
modal: {
background: "{surface.900}",
borderColor: "{surface.700}",
color: "{text.color}"
} }
},
list: {
option: {
focusBackground: "{surface.800}",
selectedBackground: "{highlight.background}",
selectedFocusBackground: "{highlight.focus.background}",
color: "{text.color}",
focusColor: "{text.hover.color}",
selectedColor: "{highlight.color}",
selectedFocusColor: "{highlight.focus.color}",
icon: {
color: "{surface.500}",
focusColor: "{surface.400}"
} }
},
optionGroup: {
background: "transparent",
color: "{text.muted.color}"
} }
},
navigation: {
item: {
focusBackground: "{surface.800}",
activeBackground: "{surface.800}",
color: "{text.color}",
focusColor: "{text.hover.color}",
activeColor: "{text.hover.color}",
icon: {
color: "{surface.500}",
focusColor: "{surface.400}",
activeColor: "{surface.400}"
}
},
submenuLabel: {
background: "transparent",
color: "{text.muted.color}"
},
submenuIcon: {
color: "{surface.500}",
focusColor: "{surface.400}",
activeColor: "{surface.400}"
}
},
}
},
transitionDuration: "0.2s",
focusRing: {
width: "1px",
style: "solid",
color: "{primary.color}",
offset: "2px",
shadow: "none"
},
disabledOpacity: "0.6",
iconSize: "1rem",
anchorGutter: "2px",
list: {
padding: "0.25rem 0.25rem",
gap: "2px",
header: {
padding: "0.5rem 1rem 0.25rem 1rem"
},
option: {
padding: "0.5rem 0.75rem",
borderRadius: "{border.radius.sm}"
},
optionGroup: {
padding: "0.5rem 0.75rem",
fontWeight: "600"
}
},
content: {
borderRadius: "{border.radius.md}"
},
mask: {
transitionDuration: "0.15s"
},
navigation: {
list: {
padding: "0.25rem 0.25rem",
gap: "2px"
},
item: {
padding: "0.5rem 0.75rem",
borderRadius: "{border.radius.sm}",
gap: "0.5rem"
},
submenuLabel: {
padding: "0.5rem 0.75rem",
fontWeight: "600"
},
submenuIcon: {
size: "0.875rem"
}
},
overlay: {
select: {
borderRadius: "{border.radius.md}",
shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)"
},
popover: {
borderRadius: "{border.radius.md}",
padding: "0.75rem",
shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)"
},
modal: {
borderRadius: "{border.radius.xl}",
padding: "1.25rem",
shadow: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)"
},
navigation: {
shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)"
}
},
} }
}); });

View File

@@ -1,4 +1,5 @@
import { Component, ElementRef, HostListener, ViewChild } from '@angular/core'; import { Component, ElementRef, HostListener, ViewChild } from '@angular/core';
import { ThemeSwitchService } from '../../service/theme-switch.service';
@Component({ @Component({
selector: 'app-background', selector: 'app-background',
@@ -8,6 +9,10 @@ import { Component, ElementRef, HostListener, ViewChild } from '@angular/core';
}) })
export class Background { export class Background {
constructor(
private themeSwitchService: ThemeSwitchService,
) {}
@ViewChild('canvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>; @ViewChild('canvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;
// Config // Config
@@ -90,7 +95,9 @@ export class Background {
// Stern zeichnen mit Scroll-Parallax // Stern zeichnen mit Scroll-Parallax
ctx.beginPath(); ctx.beginPath();
ctx.arc(star.x, star.y - this.scrollY * this.parallaxFactor, star.radius, 0, Math.PI * 2); ctx.arc(star.x, star.y - this.scrollY * this.parallaxFactor, star.radius, 0, Math.PI * 2);
ctx.fillStyle = `rgba(255, 215, 0, ${star.alpha})`; // gold ctx.fillStyle = this.themeSwitchService.darkMode()
? `rgba(255, 215, 0, ${star.alpha})`
: `rgba(184, 134, 11, ${star.alpha})`;
ctx.fill(); ctx.fill();
} }

View File

@@ -3,63 +3,18 @@
<span class="font-semibold text-3xl">BH</span> <span class="font-semibold text-3xl">BH</span>
</div> </div>
<div class="navigation grid place-items-center"> <div class="navigation grid place-items-center">
@if (themeSwitchService.darkMode()) { <p-card class="px-4! py-3!">
<ul class="relative hidden items-center space-x-1 rounded-full border border-black/10 bg-black/5 px-1.5 py-1 backdrop-blur-md md:flex border-white/10 bg-white/10"> <ul>
<li class="relative list-none"> <li class="relative list-none flex flex-row gap-3">
<a class="block px-4 py-1.5 text-sm font-light text-black transition hover:text-black/80 text-white/70 hover:text-white" routerLink="/"> <a routerLink="/" routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }">
Home Home
</a> </a>
@if (isActive('/')) { <a routerLink="/about" routerLinkActive="active">
<ng-container *ngTemplateOutlet="activeNavItem"/>
}
</li>
<li class="relative list-none">
<a class="block px-4 py-1.5 text-sm font-light text-black transition hover:text-black/80 text-white/70 hover:text-white" routerLink="/about">
About About
</a> </a>
@if (isActive('/about')) {
<ng-container *ngTemplateOutlet="activeNavItem"/>
}
</li> </li>
</ul> </ul>
<ng-template #activeNavItem> </p-card>
<span class="bg-white/5 absolute inset-0 -z-5000 w-full rounded-full">
<div class="bg-white absolute -top-[9px] left-1/2 h-1 w-8 -translate-x-1/2 rounded-t-full">
<div class="bg-white/20 absolute -top-2 -left-2 h-6 w-12 rounded-full blur-md"></div>
<div class="bg-white/20 absolute -top-1 h-6 w-8 rounded-full blur-md"></div>
<div class="bg-white/20 absolute top-0 left-2 h-4 w-4 rounded-full blur-sm"></div>
</div>
</span>
</ng-template>
} @else {
<ul class="relative hidden items-center space-x-1 rounded-full border border-black/10 bg-black/5 px-1.5 py-1 backdrop-blur-md md:flex">
<li class="relative list-none">
<a class="block px-4 py-1.5 text-sm font-light text-black transition hover:text-black/80" routerLink="/">
Home
</a>
@if (isActive('/')) {
<ng-container *ngTemplateOutlet="activeNavItem"/>
}
</li>
<li class="relative list-none">
<a class="block px-4 py-1.5 text-sm font-light text-black transition hover:text-black/80" routerLink="/about">
About
</a>
@if (isActive('/about')) {
<ng-container *ngTemplateOutlet="activeNavItem"/>
}
</li>
</ul>
<ng-template #activeNavItem>
<span class="bg-black/5 absolute inset-0 -z-5000 w-full rounded-full">
<div class="bg-black absolute -top-[9px] left-1/2 h-1 w-8 -translate-x-1/2 rounded-t-full">
<div class="bg-black/20 absolute -top-2 -left-2 h-6 w-12 rounded-full blur-md"></div>
<div class="bg-black/20 absolute -top-1 h-6 w-8 rounded-full blur-md"></div>
<div class="bg-black/20 absolute top-0 left-2 h-4 w-4 rounded-full blur-sm"></div>
</div>
</span>
</ng-template>
}
</div> </div>
<div class="options flex flex-row gap-[10px]"> <div class="options flex flex-row gap-[10px]">
@if (themeSwitchService.darkMode()) { @if (themeSwitchService.darkMode()) {

View File

@@ -15,6 +15,35 @@ nav {
border-color: var(--surface-500); border-color: var(--surface-500);
} }
} }
.navigation ul li a {
display: block;
padding: 5px 10px;
position: relative;
color: color-mix(in srgb, var(--content-color) 80%, transparent);
font-family: 'JetBrains Mono', monospace;
letter-spacing: 2px;
text-transform: uppercase;
&.active {
color: var(--primary-500);
position: relative;
top: -3px;
&::after {
content: "";
position: absolute;
left: calc(50% - 1px);
transform: translate(-50%);
width: 50%;
height: .1px;
background: var(--primary-500);
border-radius: 50%;
bottom: 2px;
box-shadow: 0 -3px 10px 1px var(--primary-500);
}
}
}
} }
.blur { .blur {

View File

@@ -1,14 +1,14 @@
import { NgTemplateOutlet } from '@angular/common';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { Router, RouterLink } from '@angular/router'; import { Router, RouterLink, RouterLinkActive } from '@angular/router';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { faMoon } from '@fortawesome/free-solid-svg-icons'; import { faMoon } from '@fortawesome/free-solid-svg-icons';
import { faSun } from '@fortawesome/free-solid-svg-icons'; import { faSun } from '@fortawesome/free-solid-svg-icons';
import { ThemeSwitchService } from '../../service/theme-switch.service'; import { ThemeSwitchService } from '../../service/theme-switch.service';
import { Card } from 'primeng/card';
@Component({ @Component({
selector: 'app-navigation-bar', selector: 'app-navigation-bar',
imports: [FontAwesomeModule, RouterLink, NgTemplateOutlet ], imports: [FontAwesomeModule, RouterLink, RouterLinkActive, Card ],
templateUrl: './navigation-bar.html', templateUrl: './navigation-bar.html',
styleUrl: './navigation-bar.scss' styleUrl: './navigation-bar.scss'
}) })

View File

@@ -1,5 +1,6 @@
@use "tailwindcss"; @use "tailwindcss";
@import '@fontsource-variable/open-sans/wght.css'; @import '@fontsource-variable/open-sans/wght.css';
@import '@fontsource-variable/jetbrains-mono/wght.css';
@import '@fortawesome/fontawesome-free/css/all.css'; @import '@fortawesome/fontawesome-free/css/all.css';
body { body {
@@ -8,5 +9,20 @@ body {
margin: 0; margin: 0;
font-size: 14px; font-size: 14px;
overflow: auto; overflow: auto;
background-color: var(--surface-0); background-color: var(--primary-50);
}
html.dark body {
background-color: var(--surface-950);
}
p-card {
background: transparent;
border: 1px solid color-mix(in srgb, var(--primary-500) 50%, transparent);
box-shadow: inset 0 0 10px 2px color-mix(in srgb, var(--primary-500) 20%, transparent);
padding: var(--card-body-padding);
.p-card-body {
padding: 0;
}
} }