diff --git a/script.js b/script.js
index 4ad39e1..94ca021 100644
--- a/script.js
+++ b/script.js
@@ -56,11 +56,11 @@
root.innerHTML =
'
' +
'';
@@ -109,16 +109,6 @@
cap.textContent = (it.name || '').trim();
}
- function openInNewTab() {
- var it = items[index];
- if (!it || !it.full) return;
- try {
- window.open(it.full, '_blank', 'noopener');
- } catch (e) {
- // ignore
- }
- }
-
function close() {
lb.classList.remove('is-open');
lb.setAttribute('aria-hidden', 'true');
@@ -176,13 +166,12 @@
var t = e.target;
if (!t || !t.getAttribute) return;
var action = t.getAttribute('data-luxtools-action') || '';
- if (action === 'close') { e.preventDefault(); close(); }
- if (action === 'next') { e.preventDefault(); next(); }
- if (action === 'prev') { e.preventDefault(); prev(); }
- if (action === 'newtab') { e.preventDefault(); openInNewTab(); }
+ if (action === 'close') { e.preventDefault(); close(); return; }
+ if (action === 'next') { e.preventDefault(); next(); return; }
+ if (action === 'prev') { e.preventDefault(); prev(); return; }
// Click outside the image closes (but don't interfere with controls).
- if (t.closest && t.closest('button.luxtools-lightbox-btn')) return;
+ if (t.closest && t.closest('button.luxtools-lightbox-zone')) return;
if (t.closest && t.closest('img.luxtools-lightbox-img')) return;
e.preventDefault();
close();
diff --git a/style.css b/style.css
index 3036892..11f3fed 100644
--- a/style.css
+++ b/style.css
@@ -210,11 +210,22 @@ html.luxtools-noscroll body {
padding: 0.8em;
}
-.luxtools-lightbox img.luxtools-lightbox-img {
+.luxtools-lightbox .luxtools-lightbox-media {
+ position: relative;
+ display: inline-block;
max-width: 100%;
max-height: 100%;
}
+.luxtools-lightbox img.luxtools-lightbox-img {
+ display: block;
+ /* Use viewport constraints so tall images always fit.
+ * Percent max-height is unreliable here because the wrapper doesn't have a fixed height.
+ */
+ max-width: calc(100vw - 1.6em);
+ max-height: calc(100vh - 1.6em);
+}
+
.luxtools-lightbox .luxtools-lightbox-caption {
position: absolute;
left: 0;
@@ -230,64 +241,67 @@ html.luxtools-noscroll body {
text-align: center;
}
-/* Top-left "open in new tab" button. */
-.luxtools-lightbox button.luxtools-lightbox-opennew {
- left: 0.6em;
- top: 0.6em;
- bottom: auto;
- width: 2.4em;
- height: 2.4em;
- background: transparent;
- border: none;
- border-radius: 0.2em;
- z-index: 2;
-}
-
-
-.luxtools-lightbox button.luxtools-lightbox-btn {
+/* Image-anchored prev/next zones.
+ * These are sized relative to the displayed image (not the viewport) and show
+ * a subtle indicator only on hover/focus.
+ */
+.luxtools-lightbox button.luxtools-lightbox-zone {
position: absolute;
- cursor: pointer;
- display: flex;
- align-items: center;
- justify-content: center;
- color: #fff;
-}
-
-/* Navigation: transparent left/right tap zones (default everywhere). */
-.luxtools-lightbox button.luxtools-lightbox-prev,
-.luxtools-lightbox button.luxtools-lightbox-next {
top: 0;
bottom: 0;
- width: 30%;
+ width: 25%;
background: transparent;
border: none;
padding: 0;
- font-size: 2em;
- color: rgba(255, 255, 255, 0.7);
+ cursor: pointer;
}
-.luxtools-lightbox button.luxtools-lightbox-prev {
+.luxtools-lightbox button.luxtools-lightbox-zone-prev {
left: 0;
}
-.luxtools-lightbox button.luxtools-lightbox-next {
+.luxtools-lightbox button.luxtools-lightbox-zone-next {
right: 0;
}
-/* Close button overlays content. */
-.luxtools-lightbox button.luxtools-lightbox-close {
- top: 0.6em;
- right: 0.6em;
- width: 2.2em;
- height: 2.2em;
- background: transparent;
- border: none;
- z-index: 2;
+.luxtools-lightbox button.luxtools-lightbox-zone::after {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ font-size: 3em;
+ line-height: 1;
+ display: inline-flex;
+ justify-content: center;
+ box-sizing: border-box;
+ min-height: 1.1em;
+ color: rgba(255, 255, 255, 0.95);
+ background: rgba(0, 0, 0, 0.35);
+ border: 1px solid rgba(255, 255, 255, 0.25);
+ border-radius: 999px;
+ padding: 0 0.28em;
+ text-shadow: 0 0 0.4em rgba(0, 0, 0, 0.9);
+ opacity: 0;
+ transition: opacity 120ms ease-in-out;
+ pointer-events: none;
+}
+
+.luxtools-lightbox button.luxtools-lightbox-zone-prev::after {
+ content: '‹';
+ left: 0.35em;
+}
+
+.luxtools-lightbox button.luxtools-lightbox-zone-next::after {
+ content: '›';
+ right: 0.35em;
+}
+
+.luxtools-lightbox button.luxtools-lightbox-zone:hover::after,
+.luxtools-lightbox button.luxtools-lightbox-zone:focus-visible::after {
+ opacity: 1;
}
@media (max-width: 600px) {
- .luxtools-lightbox button.luxtools-lightbox-prev,
- .luxtools-lightbox button.luxtools-lightbox-next {
- font-size: 1.6em;
+ .luxtools-lightbox button.luxtools-lightbox-zone::after {
+ font-size: 2.4em;
}
}