Add photo slideshow screensaver with inactivity timer

- After 1 hour of inactivity the screen switches to a fullscreen
  crossfade slideshow of photos from static/photos/
- Touch anywhere on screen to dismiss and return to the calendar
- /api/photos endpoint serves a shuffled list of images from static/photos/
- Two-slot A/B image swap for smooth 1.5s crossfades; next image preloads
  in the background while current is displayed (15s per photo)
- Slideshow only activates if static/photos/ contains at least one image

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-27 21:00:22 +12:00
parent 20c9bb55b1
commit 93b2dad8fd
5 changed files with 167 additions and 1 deletions

View File

@@ -299,6 +299,45 @@ html, body {
transform: translateY(0);
}
/* ---------- Photo slideshow screensaver ---------- */
.slideshow-overlay {
position: fixed;
inset: 0;
background: #000;
z-index: 100;
}
.slideshow-overlay.hidden {
display: none;
}
.slide-img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0;
transition: opacity 1.5s ease-in-out;
}
.slide-img.active {
opacity: 1;
}
.slideshow-hint {
position: absolute;
bottom: 32px;
left: 50%;
transform: translateX(-50%);
color: rgba(255, 255, 255, 0.35);
font-size: 13px;
letter-spacing: 0.04em;
pointer-events: none;
white-space: nowrap;
}
/* Scrollbar styling for day columns */
.day-events::-webkit-scrollbar {
width: 4px;