mirror of
https://github.com/pupperpowell/bibdle.git
synced 2026-04-05 17:33:31 -04:00
prompt on win screen, and layout/theme improvements
## New features
- **About page** (`src/routes/about/`): New static about page rendered
from `static/about.md` using the `marked` library (added as a
dependency). Includes the project backstory content.
- **XML sitemap** (`src/routes/sitemap.xml/`): Dynamic sitemap
endpoint for SEO, registered in `static/robots.txt` via `Sitemap:`
directive.
- **Apple Sign In prompt on win screen** (`WinScreen.svelte`): When
the game is won and the user is not logged in, a "Sign in to save
your streak & see your stats" prompt with an Apple Sign In button is
shown below the share card. Passes `anonymousId` so stats migrate on
sign-up. Driven by new `isLoggedIn` and `anonymousId` props, passed
from `+page.svelte`.
## Refactoring
- **`SocialLinks` component**
(`src/lib/components/SocialLinks.svelte`): Extracted the Bluesky,
Twitter/X, and email social link icons from `Credits.svelte` into a
reusable component. `Credits.svelte` now imports and renders
`<SocialLinks />`.
- **`ThemeToggle` component**
(`src/lib/components/ThemeToggle.svelte`): New component for
toggling light/dark mode, persisted to `localStorage`. Currently
rendered but hidden (`hidden` class) in `+page.svelte` —
infrastructure is in place for future use.
## Layout changes
- **`+layout.svelte`**: Moved the page title/header (`<h1>` with
`TitleAnimation`) and the gradient background wrapper from
`+page.svelte` into the root layout, so it applies across all
routes. Also removed the `browser` guard around the analytics script
injection (it's
already inside `onMount` which is client-only). Added `<meta
name="description">`.
- **`+page.svelte`**: Removed the title/header and gradient wrapper
(now in layout). Minor formatting cleanup (reformatted `SearchInput`
props, moved `currentDate` derived state earlier). `ThemeToggle`
import swapped in place of `TitleAnimation` (which moved to layout).
## Styling
- **`layout.css`**: Added `@custom-variant dark` for class-based dark
mode toggling (supports `.dark` class on `<html>`). Added explicit
`html.dark` / `html.light` rules alongside the existing
`prefers-color-scheme` media query, so the `ThemeToggle` component
can
override the system preference. Added background transition
animation.
83 lines
1.4 KiB
CSS
83 lines
1.4 KiB
CSS
@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400..800;1,400..800&family=PT+Serif:ital,wght@0,400;0,700;1,400;1,700&family=Triodion&family=Young+Serif&display=swap');
|
|
@import 'tailwindcss';
|
|
@plugin '@tailwindcss/typography';
|
|
|
|
@custom-variant dark (&:where(.dark, .dark *));
|
|
|
|
@theme {
|
|
--font-triodion: "PT Serif", serif;
|
|
}
|
|
|
|
html, body {
|
|
background: oklch(89.126% 0.06134 298.626);
|
|
transition: background 0.3s ease;
|
|
}
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
html:not(.light), body:not(.light) {
|
|
background: oklch(18% 0.03 298.626);
|
|
}
|
|
}
|
|
|
|
html.dark, html.dark body {
|
|
background: oklch(18% 0.03 298.626);
|
|
}
|
|
|
|
html.light, html.light body {
|
|
background: oklch(89.126% 0.06134 298.626);
|
|
}
|
|
|
|
.big-text {
|
|
font-size: 0.75rem;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.2em;
|
|
color: rgb(107 114 128);
|
|
font-weight: 700;
|
|
}
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
html:not(.light) .big-text {
|
|
color: rgb(156 163 175);
|
|
}
|
|
}
|
|
|
|
html.dark .big-text {
|
|
color: rgb(156 163 175);
|
|
}
|
|
|
|
html.light .big-text {
|
|
color: rgb(107 114 128);
|
|
}
|
|
|
|
/* Page load animations */
|
|
@keyframes fadeInUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
.animate-fade-in-up {
|
|
animation: fadeInUp 0.8s ease-out both;
|
|
}
|
|
|
|
.animate-delay-200 {
|
|
animation-delay: 0.2s;
|
|
}
|
|
|
|
.animate-delay-400 {
|
|
animation-delay: 0.4s;
|
|
}
|
|
|
|
.animate-delay-600 {
|
|
animation-delay: 0.6s;
|
|
}
|
|
|
|
.animate-delay-800 {
|
|
animation-delay: 0.8s;
|
|
}
|