← Commit history
Cargo.lock+1−1
@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"  [[package]] name = "adom-shotlog"-version = "0.24.3"+version = "0.24.4" dependencies = [  "axum",  "base64",
Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "adom-shotlog"-version = "0.24.3"+version = "0.24.4" edition = "2021" description = "Screenshot log viewer and CLI for Adom" license = "MIT"
VERSION+1−1
@@ -1 +1 @@-0.24.3+0.24.4
bin/adom-shotlog
⋯ 1 unchanged line ⋯
dev-skills/adom-shotlog-dev/SKILL.md+10
@@ -346,3 +346,13 @@ BROKER (long-lived) calls home to the wiki, not the short-lived CLI: - Every inject reply carries a gated self-update Hint -> `adom-wiki pkg update   adom/adom-shotlog` then restart serve. So the AI's most common command nudges   the update without any per-call network latency (broker already knows latest).++## Direct-to-fullscreen from the feed (2026-08-04)+Each feed thumbnail has a hover-revealed ⛶ button (.card-fill-btn) that calls+fillWindow(imgUrl(e), ...) directly - straight to the fullscreen lightbox,+SKIPPING the modal. The image's own click still opens the modal (the 2-step+path is unchanged; this is purely additive, per John's ask). fillWindow already+resets the backFromFill toggle, and exiting with the modal closed just returns+to the list (openModal resets state on the next open, so no stale flag).+NOTE (bridge drift): the pup verb is now `browser_eval` (not browser_evaluate)+and the eval result is TOP-LEVEL `d.result` (not d.output.result).
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-shotlog",-  "version": "0.24.3",+  "version": "0.24.4",   "type": "app",   "title": "Adom Shotlog",   "description": "See the shots your AI never showed you, and know it actually SAW them. adom-shotlog streams every screenshot the AI gathers into a live gallery (webview/pup/browser/phone), reports whether a human is really watching and on which surface, and ingests Adom Desktop child-window arrays via --meta.",
page.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-shotlog",-  "version": "0.24.3",+  "version": "0.24.4",   "type": "app",   "title": "Adom Shotlog",   "description": "See the shots your AI never showed you, and know it actually SAW them. adom-shotlog streams every screenshot the AI gathers into a live gallery (webview/pup/browser/phone), reports whether a human is really watching and on which surface, and ingests Adom Desktop child-window arrays via --meta.",
src/html/index.html+25−2
@@ -215,6 +215,20 @@ header { .shot-card-img { display: block; width: 100%; height: 220px; flex-shrink: 0; background: #111;   object-fit: contain; object-position: center top; transition: opacity .15s; } .shot-card:active .shot-card-img { opacity: .85; }+/* Direct-to-fullscreen shortcut: a ⛶ button on the thumbnail (hover-revealed)+   that skips the modal and fills the window in ONE click. The image itself+   still opens the modal on click — this is purely additional. */+.card-img-wrap { position: relative; }+.card-fill-btn { position: absolute; top: 10px; right: 10px; width: 32px; height: 32px;+  display: inline-flex; align-items: center; justify-content: center;+  background: rgba(13,17,23,.72); color: var(--text); border: 1px solid rgba(255,255,255,.18);+  border-radius: 8px; cursor: zoom-in; backdrop-filter: blur(3px);+  opacity: 0; transition: opacity .15s, background .15s, border-color .15s; }+.shot-card:hover .card-fill-btn, .card-fill-btn:focus-visible { opacity: 1; }+.card-fill-btn:hover { background: rgba(0,184,176,.22); border-color: rgba(0,184,176,.6); color: var(--accent-bright); }+.card-fill-btn svg { width: 16px; height: 16px; }+/* No hover on touch devices — keep it visible there. */+@media (hover: none) { .card-fill-btn { opacity: .9; } } /* Child-window-array badge + nerd info chip on a card */ .shot-card-meta .badge-pop { background: rgba(0,184,176,.16); color: var(--accent); border: 1px solid rgba(0,184,176,.4);   border-radius: 999px; padding: 0 7px; font-weight: 600; cursor: help; }@@ -867,9 +881,18 @@ header {       chip.setAttribute('data-tooltip','Tap to reveal EVERYTHING shotlog knows about this shot: the full entry record (thread, context, source, sizes), all capture metadata (coordMap, DPI, screen rect, child windows), and the raw JSON.');       meta.appendChild(chip); }     c.appendChild(meta);+    const imgWrap=document.createElement('div'); imgWrap.className='card-img-wrap';     const img=document.createElement('img'); img.className='shot-card-img'; img.src=imgUrl(e); img.alt=e.description||e.filename;-    img.addEventListener('click', ()=>openModal(e));   // image still zooms if you want it-    c.appendChild(img);+    img.addEventListener('click', ()=>openModal(e));   // 1st click still opens the modal (unchanged)+    imgWrap.appendChild(img);+    // Additional path: jump STRAIGHT to fullscreen, no modal first. The click+    // is the user gesture the Fullscreen API needs.+    const fillBtn=document.createElement('button'); fillBtn.className='card-fill-btn'; fillBtn.setAttribute('aria-label','Fullscreen this shot');+    fillBtn.setAttribute('data-tooltip','Zoom STRAIGHT to fullscreen (skip the popup).\nIn Hydrogen Desktop it fills 90% of the window; in pup/browser it goes fullscreen. Esc / click / × to exit.');+    fillBtn.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"/></svg>';+    fillBtn.addEventListener('click', ev=>{ ev.stopPropagation(); fillWindow(imgUrl(e), e.description||e.filename); });+    imgWrap.appendChild(fillBtn);+    c.appendChild(imgWrap);     // All child windows in ONE row, inline — no need to open the shot.     if (pops.length){       const row=document.createElement('div'); row.className='card-popups';