feat(#64): dark mode — semantic tokens, ThemeToggle, and UI fixes #65
@@ -24,6 +24,10 @@ onMount(() => {
|
|||||||
hydrated = true;
|
hydrated = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isAuthPage = $derived(
|
||||||
|
['/login', '/forgot-password', '/reset-password'].some((p) => page.url.pathname.startsWith(p))
|
||||||
|
);
|
||||||
|
|
||||||
let userMenuOpen = $state(false);
|
let userMenuOpen = $state(false);
|
||||||
|
|
||||||
const userInitials = $derived.by(() => {
|
const userInitials = $derived.by(() => {
|
||||||
@@ -47,7 +51,7 @@ function clickOutside(node: HTMLElement) {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="min-h-screen bg-canvas" data-hydrated={hydrated || undefined}>
|
<div class="min-h-screen bg-canvas" data-hydrated={hydrated || undefined}>
|
||||||
{#if !['/login', '/forgot-password', '/reset-password'].some((p) => page.url.pathname.startsWith(p))}
|
{#if !isAuthPage}
|
||||||
<header class="sticky top-0 z-50 border-b border-line-2 bg-surface">
|
<header class="sticky top-0 z-50 border-b border-line-2 bg-surface">
|
||||||
<!-- De Gruyter Brill purple accent strip -->
|
<!-- De Gruyter Brill purple accent strip -->
|
||||||
<div class="h-1 bg-brand-purple"></div>
|
<div class="h-1 bg-brand-purple"></div>
|
||||||
@@ -194,7 +198,7 @@ function clickOutside(node: HTMLElement) {
|
|||||||
</header>
|
</header>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<main class="py-6">
|
<main class={isAuthPage ? '' : 'py-6'}>
|
||||||
{@render children()}
|
{@render children()}
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user