Commit Graph

522 Commits

Author SHA1 Message Date
Alexander b3c3f34e50 refactor: extract PipImage component from inline PiP markup
Deduplicates mobile PiP image code shared between the rosary page and
StickyImage. Adds fullscreen support to StickyImage and fixes hidden PiP
elements capturing pointer events via pointer-events: none default.
2026-02-10 21:16:05 +01:00
Alexander 6eaf0bb4f4 rosary: add mystery images for all four mystery types with PiP fullscreen
CI / update (push) Successful in 1m29s
Generalize mystery images from sorrowful-only to all mystery types (joyful,
sorrowful, glorious, luminous). Add PiP fullscreen mode with tap-to-show
controls and double-tap to toggle enlarged/fullscreen.
2026-02-09 23:02:34 +01:00
Alexander 07554f16df rosary: fix mystery image column clipping at edges
CI / update (push) Successful in 1m26s
Use taller edge pads (100vh) for before/after targets so images don't
peek at viewport top or bottom. Scroll to edge pads with zero offset
so previous/next images hide fully behind the sticky header.
2026-02-09 15:18:14 +01:00
Alexander bf3014337e fix: PiP show/hide on resize and skip observer at page top
CI / update (push) Successful in 1m28s
- Resize handler calls pip.show()/hide() instead of just reposition(),
  fixing PiP not appearing when resizing from desktop to mobile
- IntersectionObserver skips all updates when scrollY < 50, preventing
  stale activeSection from re-scrolling SVG after jump-to-top
2026-02-09 14:32:39 +01:00
Alexander 6182b8f943 rosary: add all 5 sorrowful mystery images with artist captions
- One image per mystery (garden, flagellation, mocking, carry, crucifixion)
- Desktop: figcaption with artist, title (translated DE/EN), and year
- Fix Map.has vs `in` operator bug preventing PiP from showing
- Reposition PiP on image load to prevent off-screen positioning
- Mystery image column clips behind header (top: 0 + padding-top: 6rem)
- Snap SVG and images instantly to top; reset activeSection to cross
2026-02-09 14:16:28 +01:00
Alexander 8246906a76 fix: make hasLoadedFromStorage reactive so localStorage saves trigger
CI / update (push) Successful in 1m28s
2026-02-09 09:18:17 +01:00
Alexander a5e119f976 rosary: add show/hide images toggle, fix PiP timing and breakpoint
- Add "Bilder anzeigen" / "Show Images" toggle persisted to localStorage
- Bump mystery image column/PiP breakpoint from 900px to 1200px so
  prayers keep full width on medium screens
- Fix PiP not appearing on page load by splitting $effect and using
  tick() to wait for DOM before measuring element dimensions
- Fix Toggle checkbox default margin causing misalignment
2026-02-09 09:12:34 +01:00
Alexander a4738134fe extract PiP drag/snap/enlarge logic into shared createPip() utility
CI / update (push) Successful in 1m32s
Both StickyImage and rosary page now use the same pip.svelte.ts factory
for mobile drag-to-corner, snap, and double-tap enlarge behavior.
2026-02-09 08:48:20 +01:00
Alexander 6433576b28 rosary: add mystery images with scrollable sticky column and mobile PiP
Add a third grid column for sorrowful mystery images (mocking for
mysteries 2-3, crucifixion for mystery 5). Desktop uses a scrollable
sticky sidebar synced to prayer scroll position. Mobile shows a
floating PiP thumbnail. Extract prayer page PiP logic into reusable
StickyImage component.
2026-02-09 08:47:53 +01:00
Alexander ea6d2cab5c ablassgebete: add prayer page with sticky crucifix and draggable PiP
CI / update (push) Successful in 1m31s
- Add AblassGebete component and crucifix images
- Desktop: sticky crucifix on right, centered prayer with balanced spacing
- Mobile: draggable picture-in-picture thumbnail that snaps to corners
- Double-tap to enlarge/shrink with directional animation
- Monolingual sections override bilingual grey styling
- 404 for English route /faith/prayers/ablassgebete (German only)
- Reposition on window resize including desktop/mobile breakpoint crossing
2026-02-08 22:13:23 +01:00
Alexander cda8fe0885 rosary: show broken streak reset on page visit, not only after clicking "prayed"
CI / update (push) Successful in 1m37s
2026-02-05 20:47:19 +01:00
Alexander 83de5fed34 cospend: filter recent activity by chart category selection
CI / update (push) Successful in 1m27s
Clicking a category on the bar chart now filters the recent activity
list to show only payments in that category. Includes a clear filter
button and empty state message. Also increases recent splits from 10
to 30 for better coverage when filtering.
2026-02-04 16:57:49 +01:00
Alexander 8776ab894b fix: remove Svelte 4 object reassignment causing $effect infinite loop
The splitAmounts = { ...splitAmounts } pattern created a circular
dependency inside $effect blocks—reading and writing the same reactive
value—which Svelte 5 killed via loop protection, leaving the split
method selector non-reactive when selecting "50/50 + personal".
2026-02-04 16:52:12 +01:00
Alexander 7d6a80442a faith: progressive enhancement for all faith pages without JS
CI / update (push) Successful in 1m29s
- Rosary: mystery selection, luminous toggle, and latin toggle fall back
  to URL params (?mystery=, ?luminous=, ?latin=) for no-JS navigation
- Prayers/Angelus: latin toggle uses URL param fallback
- Search on prayers page hidden without JS (requires DOM queries)
- Toggle component supports href prop for link-based no-JS self-submit
- LanguageSelector uses <a> links with computed paths and :focus-within
  dropdown for no-JS; displays correct language via server-provided prop
- Recipe language links use translated slugs from $page.data
- URL params cleaned via replaceState after hydration to avoid clutter
2026-02-04 14:14:13 +01:00
Alexander 1c100a4534 fix: use accent-dark with nord5 light override for prayer backgrounds
CI / update (push) Successful in 1m32s
var(--color-bg-secondary) from app.css is not available since app.css
is never imported. Use var(--accent-dark) from nordtheme.css with
explicit light mode overrides using var(--nord5).
2026-02-04 13:05:08 +01:00
Alexander d65886b4e7 fix: use semantic color for prayer section backgrounds in light mode
CI / update (push) Successful in 1m27s
Replace var(--accent-dark) with var(--color-bg-secondary) which maps
to the correct color in both modes, removing dead @media overrides
that referenced the undefined var(--accent-light). Also match rosary
cross fill to Benedictus medal color in light mode.
2026-02-04 13:01:54 +01:00
Alexander 9da0a2740d rosary: inline cross glyph as SVG path for consistent rendering
CI / update (push) Successful in 1m27s
Replace <text> elements using the crosses web font with inlined SVG
paths extracted from the font file. Web fonts in SVG <text> elements
don't load reliably on Android, causing fallback rendering.
2026-02-04 12:09:00 +01:00
Alexander 7411160a23 rosary: derive SVG bead positions from sectionPositions dictionary
Use sectionPositions as single source of truth for all bead coordinates.
Compute transition bead positions as midpoints between decades, generate
decade beads and hitboxes via loops, and adjust bead spacing.
2026-02-04 12:04:08 +01:00
Alexander 767b43e2ff rosary: split final prayers into individual bead sections with scroll tracking
CI / update (push) Successful in 1m27s
Map each ending bead to its corresponding prayer (Gloria/Fatima,
Salve Regina, Schlussgebet, St. Michael, Paternoster, Sign of the Cross),
add scroll-to-top button with action_button styling, and fix SVG scroll
lock to prevent snap-back when scrolling to top.
2026-02-04 11:18:54 +01:00
Alexander 3831cd17de rosary: progressively shrink mystery selectors instead of stacking on small screens
CI / update (push) Successful in 1m32s
2026-02-04 10:03:58 +01:00
Alexander 7954d57cf1 rosary: reduce bundle size and improve responsive layout
CI / update (push) Successful in 1m28s
Remove redundant CSS already handled by Prayer.svelte, drop unused
rosenkranz.css import, and replace inline BenedictusMedal component
(34KB, ~52 DOM elements) with a static SVG referenced via <image>.
Use fluid sidebar width (clamp) for smoother desktop/mobile transition.
2026-02-03 20:51:32 +01:00
Alexander 14f54e6623 rosary: fix mystery selection lost when excluding luminous
CI / update (push) Successful in 1m32s
The on:change handler on the Toggle component was silently ignored
since Toggle is a Svelte 5 component that doesn't support the Svelte 4
event directive. Replace with a reactive $effect that reverts to
today's mystery when luminous is excluded while selected.
2026-02-03 15:01:53 +01:00
Alexander e8b0fb7d9d rosary: fix today badge z-index
CI / update (push) Successful in 1m27s
2026-02-03 14:48:47 +01:00
Alexander b28154564f perf: pre-generate Bible verse data and reduce DOM via conditional rendering
CI / update (push) Successful in 1m34s
- Extract Bible lookup logic into shared src/lib/server/bible.ts module
- Add build script to pre-generate all 20 mystery verse lookups as static data,
  eliminating runtime API calls on rosary page load
- Update Prayer.svelte to pass showLatin/urlLang as snippet parameters; all 14
  prayer components now conditionally render only visible language elements
  instead of hiding via CSS
- Extract 4 inline mystery selector SVGs into MysteryIcon.svelte component
- Remove unused CSS selectors from angelus page
2026-02-03 14:28:09 +01:00
Alexander 3ff3d0dc8a fix: remove default figure margin shifting parallax hero image
CI / update (push) Successful in 1m30s
2026-02-03 08:27:43 +01:00
Alexander c0eb49158c fix: apply border-radius directly on card images for older WebKit
CI / update (push) Successful in 1m24s
2026-02-03 08:21:55 +01:00
Alexander 43378bfec0 fix: center parallax hero image cross-browser
Replace Firefox-specific @supports hack with explicit absolute
centering (left/right/margin-inline: auto) on the image container.
2026-02-03 08:18:36 +01:00
Alexander 650c061137 rosary: add SVG hitboxes for easier bead tapping on mobile 2026-02-03 08:14:50 +01:00
Alexander 649bd19287 streak: replace burst flame with rising particle effect
CI / update (push) Successful in 1m23s
Rework the burst mode in FireEffect to use 24 data-driven particles
instead of the old scale-and-pop flame. Each particle has unique
position, size, delay, and duration for an organic rising effect.
Latch burst state in StreakAura so the animation plays its full
duration regardless of when the parent resets the prop.
2026-02-03 08:01:00 +01:00
Alexander 52ae9659b8 angelus: align styling with other faith routes
CI / update (push) Successful in 1m22s
2026-02-02 23:13:02 +01:00
Alexander 58a0496ff3 rosary: add missing saint Michael prayer
CI / update (push) Successful in 1m22s
2026-02-02 23:08:20 +01:00
Alexander 0d2e33d84d angelus: add missing Ave Maria
CI / update (push) Successful in 1m23s
2026-02-02 22:59:11 +01:00
Alexander b94a6bbb87 prayers: add angelus link
CI / update (push) Successful in 1m22s
2026-02-02 22:51:51 +01:00
Alexander 660a1b0539 prayers: add search and individual prayer pages
CI / update (push) Successful in 1m22s
- Add SearchInput component for reusable search UI
- Add search functionality to prayers list with two-tier results:
  - Primary matches (name/searchTerms) shown first
  - Secondary matches (text content) shown after with reduced opacity
- Add individual prayer pages with language-appropriate slugs
  (e.g., /glaube/gebete/ave-maria, /faith/prayers/hail-mary)
- Make prayer cards clickable to navigate to individual pages
- Fix language visibility for prayers without Latin (BruderKlaus, Joseph)
- Add Prayer wrapper to MichaelGebet for consistent styling
- Use CSS columns for masonry layout with dynamic reordering
2026-02-02 22:22:56 +01:00
Alexander 8699bef209 move glaube higher up in main LinksGrid
CI / update (push) Successful in 1m21s
2026-02-02 20:47:10 +01:00
Alexander 95d3be8b82 prayers: bow-emphasis only for main language 2026-02-02 20:39:11 +01:00
Alexander 82db2c9e50 angelus: cleaner and now in Header
CI / update (push) Successful in 1m25s
2026-02-02 16:59:25 +01:00
Alexander 69293c39f9 prayers: add English translations for all prayer components
Add official Catholic English translations to all prayer components
for /faith/* routes. Prayer names on /faith/prayers are now displayed
in English. Remove unused Angelus.svelte component.
2026-02-02 16:39:40 +01:00
Alexander 1a5117e8d0 faith: add bilingual routes /glaube ↔ /faith
Add language toggle support for faith pages similar to recipes.
Routes now work in both German and English:
- /glaube ↔ /faith
- /glaube/gebete ↔ /faith/prayers
- /glaube/rosenkranz ↔ /faith/rosary
- /glaube/angelus ↔ /faith/angelus
2026-02-02 16:15:51 +01:00
Alexander 87d5e9cbc0 rosary: clean up unused CSS, fix unclosed tag
CI / update (push) Successful in 1m24s
- FireEffect now only contains fire-related styles
- StreakAura now only contains aura, number, halo, wing styles
- Fix unclosed <i> tags in JosephGebet.svelte
2026-02-01 14:12:18 +01:00
Alexander 924ce386d5 rosary: server-side streak fetch, remove aggressive polling
CI / update (push) Successful in 1m29s
- Fetch streak data in +page.server.ts for logged-in users via API
- Initialize store once with server data, sync only runs once
- Only poll for reconnection in PWA mode when offline with pending changes
- Extract FireEffect to separate component with burst animation
- Convert StreakAura/StreakCounter to Svelte 5 runes ($props, $state, $derived)
- Fix SSR flash by using server data for initial render
2026-02-01 13:50:33 +01:00
Alexander 01fd067eda rosary: cleaner light mode
CI / update (push) Successful in 1m20s
2026-01-31 16:12:18 +01:00
Alexander ee2bee6ac5 rosary: light/dark mode benedicturs medal 2026-01-31 16:09:21 +01:00
Alexander 58fd2b89d2 rosary: fade-in shadow removed
CI / update (push) Successful in 1m21s
2026-01-31 15:53:59 +01:00
Alexander d3f0d8a24c glaube: add ⚬ to mary and jesus in prayers
CI / update (push) Successful in 1m21s
2026-01-31 15:15:49 +01:00
Alexander 6028373093 glaube: gone woke
CI / update (push) Successful in 1m27s
2026-01-31 14:59:07 +01:00
Alexander 1cce6a56ac rosary: glow animation earlier, embers before full fire
CI / update (push) Successful in 1m22s
2026-01-31 12:20:35 +01:00
Alexander 71dd5b6285 rosary: stylized StreakCounter dependant on length
CI / update (push) Successful in 1m31s
2026-01-31 10:56:29 +01:00
Alexander 17b0fb9275 remove jukit garbage 2026-01-31 10:12:45 +01:00
Alexander 45b0f5f2a6 rosary: less colourful mystery selector
CI / update (push) Successful in 1m28s
2026-01-30 15:47:58 +01:00