diff --git a/services/travel-memories/app/templates/phase2.html b/services/travel-memories/app/templates/phase2.html
index 5c1da3d..cd5d72e 100644
--- a/services/travel-memories/app/templates/phase2.html
+++ b/services/travel-memories/app/templates/phase2.html
@@ -6,7 +6,9 @@
@keydown.x.window="tagFocused('skip')"
@keydown.space.prevent.window="tagFocused('skip')"
@keydown.left.prevent.window="navigate(-1)"
- @keydown.right.prevent.window="navigate(1)">
+ @keydown.right.prevent.window="navigate(1)"
+ @keydown.escape.window="closeLightbox()"
+ @keydown.enter.window="focused && openLightbox(focused)">
Triage
@@ -42,7 +44,7 @@
data-asset-id="{{ photo.id }}"
data-tag="{{ photo.tag }}"
tabindex="0"
- @click="select($el)"
+ @click="openLightbox($el)"
@focus="select($el)">

@@ -63,6 +65,25 @@
{% endfor %}
+ {# ── Lightbox overlay (desktop) ── #}
+
+
+
+
+
+
![]()
+
+
+
+
+ J journal · S story · X skip · ← → navigate · Esc close
+
+
+
+
{# ── Mobile card UI (hidden on desktop) ── #}
{# Progress bar #}
@@ -141,6 +162,8 @@ function triageApp(albumId) {
return {
focused: null,
+ lightboxOpen: false,
+
init() {
const first = document.querySelector('.photo-card');
if (first) this.select(first);
@@ -153,6 +176,44 @@ function triageApp(albumId) {
el.classList.add('ring-4', 'ring-white', 'ring-offset-2', 'z-10');
el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
+ if (this.lightboxOpen) this.updateLightbox();
+ },
+
+ openLightbox(el) {
+ this.select(el);
+ this.lightboxOpen = true;
+ document.getElementById('lb').style.display = '';
+ this.updateLightbox();
+ },
+
+ closeLightbox() {
+ if (!this.lightboxOpen) return;
+ this.lightboxOpen = false;
+ document.getElementById('lb').style.display = 'none';
+ },
+
+ updateLightbox() {
+ const el = this.focused;
+ if (!el) return;
+ const assetId = el.dataset.assetId;
+ const tag = el.dataset.tag;
+ document.getElementById('lb-img').src = `/proxy/thumb/${assetId}`;
+ const timeEl = el.querySelector('div');
+ document.getElementById('lb-date').textContent = timeEl ? timeEl.textContent.trim() : '';
+ document.getElementById('lb-filename').textContent = el.dataset.filename || '';
+ const badgeEl = document.getElementById('lb-tag-badge');
+ const MAP = {
+ journal: ['badge-success', 'Journal'],
+ story: ['badge-info', 'Story'],
+ skip: ['badge-ghost opacity-60', 'Skip'],
+ };
+ if (MAP[tag]) {
+ badgeEl.className = `badge badge-sm ${MAP[tag][0]}`;
+ badgeEl.textContent = MAP[tag][1];
+ } else {
+ badgeEl.className = 'badge badge-sm badge-outline opacity-30';
+ badgeEl.textContent = 'Untagged';
+ }
},
navigate(dir) {
@@ -187,6 +248,7 @@ function triageApp(albumId) {
}
updateBadge(el, tag);
this.updateCount();
+ if (this.lightboxOpen) this.updateLightbox();
},
updateCount() {