neiki-gallery 3.0.0 โ 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -13
- package/dist/neiki-gallery.css +8 -4
- package/dist/neiki-gallery.js +72 -2
- package/dist/neiki-gallery.min.css +1 -1
- package/dist/neiki-gallery.min.js +2 -2
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
<h1 align="center">Neiki Gallery</h1>
|
|
2
|
-
|
|
3
1
|
<p align="center">
|
|
4
|
-
<img src="logo.png" alt="
|
|
2
|
+
<img src="logo.png" alt="Neiki's Gallery" width="400">
|
|
5
3
|
</p>
|
|
6
4
|
|
|
5
|
+
<h1 align="center">Neiki's Gallery</h1>
|
|
6
|
+
|
|
7
7
|
<p align="center">
|
|
8
8
|
<img src="https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge&logo=javascript&logoColor=%23F7DF1E" alt="JavaScript">
|
|
9
9
|
<img src="https://img.shields.io/badge/html5-%23E34F26.svg?style=for-the-badge&logo=html5&logoColor=white" alt="HTML5">
|
|
10
10
|
<img src="https://img.shields.io/badge/css-%23663399.svg?style=for-the-badge&logo=css&logoColor=white" alt="CSS">
|
|
11
11
|
<br>
|
|
12
12
|
<img src="https://img.shields.io/badge/License-MIT-2563EB?style=for-the-badge&logo=open-source-initiative&logoColor=white&labelColor=000F15&logoWidth=20" alt="License">
|
|
13
|
-
<img src="https://img.shields.io/badge/Version-3.
|
|
13
|
+
<img src="https://img.shields.io/badge/Version-3.1.0-2563EB?style=for-the-badge&logo=semantic-release&logoColor=white&labelColor=000F15&logoWidth=20" alt="Version">
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
@@ -25,11 +25,24 @@
|
|
|
25
25
|
<img src="https://img.shields.io/badge/Size-Lightweight-f97316?style=flat&labelColor=383C43" />
|
|
26
26
|
</p>
|
|
27
27
|
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<a href="https://sourceforge.net/projects/neiki-gallery/files/latest/download"><img alt="Download Neiki's Gallery" src="https://a.fsdn.com/con/app/sf-download-button" width=276 height=48 srcset="https://a.fsdn.com/con/app/sf-download-button?button_size=2x 2x"></a>
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
<img src="preview.png" width="900px">
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
**Live demo:** [https://neikiri.dev/gallery](https://neikiri.dev/gallery)
|
|
40
|
+
|
|
28
41
|
---
|
|
29
42
|
|
|
30
43
|
## ๐ About
|
|
31
44
|
|
|
32
|
-
**Neiki Gallery** is a production-ready image gallery and lightbox library built with vanilla JavaScript and CSS. No frameworks, no dependencies โ just drop two files into your project and you're ready to go.
|
|
45
|
+
**Neiki's Gallery** is a production-ready image gallery and lightbox library built with vanilla JavaScript and CSS. No frameworks, no dependencies โ just drop two files into your project and you're ready to go.
|
|
33
46
|
|
|
34
47
|
## โจ Features
|
|
35
48
|
|
|
@@ -91,7 +104,7 @@
|
|
|
91
104
|
Add this single line to your HTML โ that's all you need (CSS is included automatically):
|
|
92
105
|
|
|
93
106
|
```html
|
|
94
|
-
<script src="https://cdn.
|
|
107
|
+
<script src="https://cdn.neikiri.dev/neiki-gallery/neiki-gallery.min.js"></script>
|
|
95
108
|
```
|
|
96
109
|
|
|
97
110
|
Then create your gallery markup:
|
|
@@ -111,13 +124,13 @@ That's it โ galleries with `data-neiki-gallery` auto-initialize on page load.
|
|
|
111
124
|
|
|
112
125
|
> **Unminified files** are also available if you need them for debugging (require separate CSS):
|
|
113
126
|
> ```
|
|
114
|
-
> https://cdn.
|
|
115
|
-
> https://cdn.
|
|
127
|
+
> https://cdn.neikiri.dev/neiki-gallery/neiki-gallery.js
|
|
128
|
+
> https://cdn.neikiri.dev/neiki-gallery/neiki-gallery.css
|
|
116
129
|
> ```
|
|
117
130
|
|
|
118
131
|
> **Pin a specific version** to avoid unexpected changes:
|
|
119
132
|
> ```
|
|
120
|
-
> https://cdn.
|
|
133
|
+
> https://cdn.neikiri.dev/neiki-gallery/3.1.0/neiki-gallery.min.js
|
|
121
134
|
> ```
|
|
122
135
|
|
|
123
136
|
### Self-Hosting (Local)
|
|
@@ -308,7 +321,7 @@ NeikiGallery.unregisterPlugin('watermark');
|
|
|
308
321
|
NeikiGallery.getRegisteredPlugins(); // ['watermark', ...]
|
|
309
322
|
|
|
310
323
|
// Version
|
|
311
|
-
console.log(NeikiGallery.version); // '3.
|
|
324
|
+
console.log(NeikiGallery.version); // '3.1.0'
|
|
312
325
|
```
|
|
313
326
|
|
|
314
327
|
### Plugin System
|
|
@@ -477,7 +490,7 @@ All options can also be set via `data-` attributes on the container:
|
|
|
477
490
|
|
|
478
491
|
## ๐จ Theming
|
|
479
492
|
|
|
480
|
-
Neiki Gallery uses CSS custom properties for full theming control:
|
|
493
|
+
Neiki's Gallery uses CSS custom properties for full theming control:
|
|
481
494
|
|
|
482
495
|
```css
|
|
483
496
|
:root {
|
|
@@ -567,10 +580,10 @@ This project is licensed under the MIT License โ see the [LICENSE](LICENSE) fi
|
|
|
567
580
|
|
|
568
581
|
## ๐ฌ Contact
|
|
569
582
|
|
|
570
|
-
- **Email:** [
|
|
583
|
+
- **Email:** [neikiri@neikiri.dev](mailto:neikiri@neikiri.dev)
|
|
571
584
|
|
|
572
585
|
---
|
|
573
586
|
|
|
574
587
|
<p align="center">
|
|
575
588
|
Made with โค๏ธ for the web community
|
|
576
|
-
</p>
|
|
589
|
+
</p>
|
package/dist/neiki-gallery.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* ==========================================================================
|
|
2
|
-
Neiki Gallery v3.
|
|
2
|
+
Neiki's Gallery v3.1.0 โ CSS
|
|
3
3
|
A vanilla JS image gallery/lightbox library.
|
|
4
4
|
https://github.com/neikiri/neiki-gallery
|
|
5
5
|
|
|
@@ -568,7 +568,11 @@
|
|
|
568
568
|
|
|
569
569
|
.neiki-lightbox__image.neiki-zoomed {
|
|
570
570
|
transform: scale(var(--neiki-zoom-scale, 2));
|
|
571
|
-
cursor:
|
|
571
|
+
cursor: grab;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.neiki-lightbox__image.neiki-zoomed:active {
|
|
575
|
+
cursor: grabbing;
|
|
572
576
|
}
|
|
573
577
|
|
|
574
578
|
/* Contextual zoom (panned) โ overrides scale zoom */
|
|
@@ -2174,10 +2178,10 @@
|
|
|
2174
2178
|
border: 2px solid currentColor;
|
|
2175
2179
|
border-top-color: transparent;
|
|
2176
2180
|
border-radius: 50%;
|
|
2177
|
-
animation: neiki-spin 0.7s linear infinite;
|
|
2181
|
+
animation: neiki-spin-simple 0.7s linear infinite;
|
|
2178
2182
|
}
|
|
2179
2183
|
|
|
2180
|
-
@keyframes neiki-spin {
|
|
2184
|
+
@keyframes neiki-spin-simple {
|
|
2181
2185
|
to { transform: rotate(360deg); }
|
|
2182
2186
|
}
|
|
2183
2187
|
|
package/dist/neiki-gallery.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Neiki Gallery v3.
|
|
2
|
+
* Neiki's Gallery v3.1.0
|
|
3
3
|
* A vanilla JavaScript image gallery / lightbox library.
|
|
4
4
|
* No dependencies. No frameworks.
|
|
5
5
|
*
|
|
@@ -1442,6 +1442,75 @@
|
|
|
1442
1442
|
var self = this;
|
|
1443
1443
|
var startX = 0, startY = 0, distX = 0, tracking = false, threshold = 50;
|
|
1444
1444
|
|
|
1445
|
+
// Pan state for zoomed image dragging
|
|
1446
|
+
var panActive = false;
|
|
1447
|
+
var panStartX = 0, panStartY = 0;
|
|
1448
|
+
var panOffsetX = 0, panOffsetY = 0;
|
|
1449
|
+
|
|
1450
|
+
function applyPan(dx, dy) {
|
|
1451
|
+
var img = self._image;
|
|
1452
|
+
var rect = img.getBoundingClientRect();
|
|
1453
|
+
var stageRect = self._stage.getBoundingClientRect();
|
|
1454
|
+
// Maximum allowed pan: half the overflow in each axis
|
|
1455
|
+
var maxX = Math.max(0, (rect.width - stageRect.width) / 2);
|
|
1456
|
+
var maxY = Math.max(0, (rect.height - stageRect.height) / 2);
|
|
1457
|
+
panOffsetX = Math.max(-maxX, Math.min(maxX, panOffsetX + dx));
|
|
1458
|
+
panOffsetY = Math.max(-maxY, Math.min(maxY, panOffsetY + dy));
|
|
1459
|
+
img.style.translate = panOffsetX + 'px ' + panOffsetY + 'px';
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
var panDidMove = false;
|
|
1463
|
+
|
|
1464
|
+
function onPanStart(e) {
|
|
1465
|
+
if (!self._isOpen || !self._isZoomed) return;
|
|
1466
|
+
if (e.button !== undefined && e.button !== 0) return;
|
|
1467
|
+
panActive = true;
|
|
1468
|
+
panDidMove = false;
|
|
1469
|
+
var point = e.touches ? e.touches[0] : e;
|
|
1470
|
+
panStartX = point.clientX;
|
|
1471
|
+
panStartY = point.clientY;
|
|
1472
|
+
e.preventDefault();
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
function onPanMove(e) {
|
|
1476
|
+
if (!panActive) return;
|
|
1477
|
+
var point = e.touches ? e.touches[0] : e;
|
|
1478
|
+
var dx = point.clientX - panStartX;
|
|
1479
|
+
var dy = point.clientY - panStartY;
|
|
1480
|
+
if (Math.abs(dx) > 4 || Math.abs(dy) > 4) panDidMove = true;
|
|
1481
|
+
panStartX = point.clientX;
|
|
1482
|
+
panStartY = point.clientY;
|
|
1483
|
+
applyPan(dx, dy);
|
|
1484
|
+
e.preventDefault();
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
function onPanEnd() {
|
|
1488
|
+
panActive = false;
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
this._image.addEventListener('mousedown', onPanStart);
|
|
1492
|
+
document.addEventListener('mousemove', onPanMove);
|
|
1493
|
+
document.addEventListener('mouseup', onPanEnd);
|
|
1494
|
+
this._image.addEventListener('touchstart', onPanStart, { passive: false });
|
|
1495
|
+
this._image.addEventListener('touchmove', onPanMove, { passive: false });
|
|
1496
|
+
this._image.addEventListener('touchend', onPanEnd, { passive: true });
|
|
1497
|
+
|
|
1498
|
+
// Suppress click-to-toggle-zoom when the user just dragged/panned the image
|
|
1499
|
+
this._image.addEventListener('click', function (e) {
|
|
1500
|
+
if (panDidMove) { panDidMove = false; e.stopImmediatePropagation(); }
|
|
1501
|
+
}, true);
|
|
1502
|
+
|
|
1503
|
+
// Expose reset for use in _resetZoom
|
|
1504
|
+
this._resetPan = function () {
|
|
1505
|
+
panOffsetX = 0;
|
|
1506
|
+
panOffsetY = 0;
|
|
1507
|
+
panActive = false;
|
|
1508
|
+
if (self._image) self._image.style.translate = '';
|
|
1509
|
+
};
|
|
1510
|
+
|
|
1511
|
+
this._boundHandlers.panMousemove = onPanMove;
|
|
1512
|
+
this._boundHandlers.panMouseup = onPanEnd;
|
|
1513
|
+
|
|
1445
1514
|
function onStart(e) {
|
|
1446
1515
|
if (!self._isOpen || self._isZoomed) return;
|
|
1447
1516
|
var point = e.touches ? e.touches[0] : e;
|
|
@@ -1716,6 +1785,7 @@
|
|
|
1716
1785
|
this._image.classList.remove('neiki-zoomed', 'neiki-zoom-pan');
|
|
1717
1786
|
this._image.style.removeProperty('--neiki-zoom-x');
|
|
1718
1787
|
this._image.style.removeProperty('--neiki-zoom-y');
|
|
1788
|
+
if (this._resetPan) this._resetPan();
|
|
1719
1789
|
};
|
|
1720
1790
|
|
|
1721
1791
|
/* ========================================================================
|
|
@@ -3580,7 +3650,7 @@
|
|
|
3580
3650
|
// Static utilities (v3.0.0)
|
|
3581
3651
|
// NeikiGallery.detectMediaType, registerPlugin, unregisterPlugin, getRegisteredPlugins
|
|
3582
3652
|
// are exposed inside the v3 module sections above.
|
|
3583
|
-
NeikiGallery.version = '3.
|
|
3653
|
+
NeikiGallery.version = '3.1.0';
|
|
3584
3654
|
|
|
3585
3655
|
return NeikiGallery;
|
|
3586
3656
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.neiki-gallery[data-theme=dark],:root,[data-theme=dark]{--neiki-overlay-bg:rgba(8, 8, 12, 0.85);--neiki-btn-bg:rgba(255, 255, 255, 0.1);--neiki-btn-bg-hover:rgba(255, 255, 255, 0.2);--neiki-btn-color:#fff;--neiki-caption-color:#fff;--neiki-counter-color:rgba(255, 255, 255, 0.7)}.neiki-gallery[data-theme=dark],.neiki-gallery[data-theme=light],:root,[data-theme=dark],[data-theme=light]{--neiki-spinner-color:var(--neiki-accent);--neiki-thumb-active-border:2px solid var(--neiki-accent)}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a,.neiki-gallery--grid>.neiki-item,.neiki-gallery--grid>a,.neiki-gallery--masonry>.neiki-item,.neiki-gallery--masonry>a,.neiki-gallery--mosaic>.neiki-item,.neiki-gallery--mosaic>a{position:relative;transition:transform .35s var(--neiki-transition-easing),box-shadow .35s var(--neiki-transition-easing);cursor:pointer;text-decoration:none}.neiki-gallery--filmstrip>.neiki-item>img,.neiki-gallery--filmstrip>a>img,.neiki-gallery--grid>.neiki-item>img,.neiki-gallery--grid>a>img,.neiki-gallery--masonry>.neiki-item>img,.neiki-gallery--masonry>a>img,.neiki-gallery--mosaic>.neiki-item>img,.neiki-gallery--mosaic>a>img{width:100%;border-radius:var(--neiki-border-radius,14px);transition:transform .4s var(--neiki-transition-easing),opacity .5s var(--neiki-transition-easing);opacity:0}.neiki-gallery--filmstrip>.neiki-item>img.neiki-loaded,.neiki-gallery--filmstrip>a>img.neiki-loaded,.neiki-gallery--grid>.neiki-item>img.neiki-loaded,.neiki-gallery--grid>a>img.neiki-loaded,.neiki-gallery--masonry>.neiki-item>img.neiki-loaded,.neiki-gallery--masonry>a>img.neiki-loaded,.neiki-gallery--mosaic>.neiki-item>img.neiki-loaded,.neiki-gallery--mosaic>a>img.neiki-loaded{opacity:1}.neiki-exif,.neiki-lightbox__counter{font-variant-numeric:tabular-nums;white-space:nowrap}:root{--neiki-columns:4;--neiki-gap:14px;--neiki-border-radius:14px;--neiki-accent:#3b82f6;--neiki-accent-hover:#2563eb;--neiki-overlay-backdrop:blur(24px) saturate(1.2);--neiki-lightbox-max-width:90vw;--neiki-lightbox-max-height:85vh;--neiki-btn-size:44px;--neiki-btn-border-radius:12px;--neiki-btn-backdrop:blur(12px) saturate(1.4);--neiki-font:system-ui,-apple-system,'Segoe UI',sans-serif;--neiki-caption-font-size:14px;--neiki-counter-font-size:12px;--neiki-thumb-size:52px;--neiki-thumb-gap:6px;--neiki-thumb-border-radius:8px;--neiki-thumb-opacity:0.5;--neiki-thumb-active-opacity:1;--neiki-spinner-size:36px;--neiki-spinner-width:3px;--neiki-transition-duration:0.3s;--neiki-transition-easing:cubic-bezier(0.4, 0, 0.2, 1);--neiki-zoom-scale:2;--neiki-stagger-delay:0.04s;--neiki-hover-lift:-4px;--neiki-hover-shadow:0 12px 32px rgba(0, 0, 0, 0.25)}.neiki-gallery[data-theme=light],[data-theme=light]{--neiki-overlay-bg:rgba(245, 245, 247, 0.88);--neiki-btn-bg:rgba(0, 0, 0, 0.06);--neiki-btn-bg-hover:rgba(0, 0, 0, 0.12);--neiki-btn-color:#1a1a1a;--neiki-caption-color:#1a1a1a;--neiki-counter-color:rgba(0, 0, 0, 0.5);--neiki-hover-shadow:0 12px 32px rgba(0, 0, 0, 0.12)}.neiki-gallery{box-sizing:border-box;font-family:var(--neiki-font)}.neiki-gallery *,.neiki-gallery ::after,.neiki-gallery ::before{box-sizing:inherit}.neiki-gallery--masonry{column-count:var(--neiki-columns,4);column-gap:var(--neiki-gap,14px)}.neiki-gallery--masonry>.neiki-item,.neiki-gallery--masonry>a{display:inline-block;width:100%;margin-bottom:var(--neiki-gap,14px);break-inside:avoid;border-radius:var(--neiki-border-radius,14px);overflow:hidden}.neiki-gallery--masonry>.neiki-item>img,.neiki-gallery--masonry>a>img{display:block;height:auto;transform:scale(1)}.neiki-gallery--grid>.neiki-item:hover,.neiki-gallery--grid>a:hover,.neiki-gallery--masonry>.neiki-item:hover,.neiki-gallery--masonry>a:hover,.neiki-gallery--mosaic>.neiki-item:hover,.neiki-gallery--mosaic>a:hover{transform:translateY(var(--neiki-hover-lift));box-shadow:var(--neiki-hover-shadow)}.neiki-gallery--masonry>.neiki-item:hover>img,.neiki-gallery--masonry>a:hover>img{transform:scale(1.03)}.neiki-gallery--grid{display:grid;grid-template-columns:repeat(var(--neiki-columns,4),1fr);gap:var(--neiki-gap,14px)}.neiki-gallery--grid>.neiki-item,.neiki-gallery--grid>a{display:block;overflow:hidden;border-radius:var(--neiki-border-radius,14px);aspect-ratio:1/1}.neiki-gallery--grid>.neiki-item>img,.neiki-gallery--grid>a>img{display:block;height:100%;object-fit:cover}.neiki-gallery--grid>.neiki-item:hover>img,.neiki-gallery--grid>a:hover>img{transform:scale(1.05)}.neiki-gallery--mosaic{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:200px;gap:var(--neiki-gap,14px);grid-auto-flow:dense}.neiki-gallery--mosaic>.neiki-item,.neiki-gallery--mosaic>a{display:block;overflow:hidden;border-radius:var(--neiki-border-radius,14px)}.neiki-gallery--mosaic>.neiki-item[data-size=large],.neiki-gallery--mosaic>a[data-size=large]{grid-column:span 2;grid-row:span 2}.neiki-gallery--mosaic>.neiki-item[data-size=wide],.neiki-gallery--mosaic>a[data-size=wide]{grid-column:span 2}.neiki-gallery--mosaic>.neiki-item[data-size=tall],.neiki-gallery--mosaic>a[data-size=tall]{grid-row:span 2}.neiki-gallery--mosaic>.neiki-item>img,.neiki-gallery--mosaic>a>img{display:block;height:100%;object-fit:cover}.neiki-gallery--mosaic>.neiki-item:hover>img,.neiki-gallery--mosaic>a:hover>img{transform:scale(1.04)}.neiki-gallery--filmstrip{display:flex;gap:var(--neiki-gap,14px);overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:4px}.neiki-gallery--filmstrip::-webkit-scrollbar{display:none}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{flex:0 0 auto;width:280px;height:360px;scroll-snap-align:center;border-radius:var(--neiki-border-radius,14px);overflow:hidden}.neiki-gallery--filmstrip>.neiki-item>img,.neiki-gallery--filmstrip>a>img{display:block;height:100%;object-fit:cover}.neiki-compare__handle::after,.neiki-gallery>.neiki-item.neiki-filter-hidden,.neiki-gallery>a.neiki-filter-hidden,.neiki-lightbox--pip .neiki-exif,.neiki-lightbox--pip .neiki-lightbox__caption,.neiki-lightbox--pip .neiki-lightbox__thumbs,.neiki-lightbox--pip .neiki-lightbox__topbar,.neiki-lightbox--pip .neiki-palette,.neiki-lightbox__spinner.neiki-hidden{display:none}.neiki-gallery--filmstrip>.neiki-item:hover,.neiki-gallery--filmstrip>a:hover{transform:translateY(var(--neiki-hover-lift)) scale(1.02);box-shadow:var(--neiki-hover-shadow)}.neiki-gallery--stagger>.neiki-item,.neiki-gallery--stagger>a{transform:translateY(20px);animation:neiki-stagger-in .5s var(--neiki-transition-easing) forwards}@keyframes neiki-stagger-in{to{transform:translateY(0)}}.neiki-gallery>.neiki-item.neiki-selected,.neiki-gallery>a.neiki-selected{outline:3px solid var(--neiki-accent);outline-offset:-3px}.neiki-gallery>.neiki-item.neiki-selected::after,.neiki-gallery>a.neiki-selected::after{content:'';position:absolute;top:8px;right:8px;width:24px;height:24px;background:var(--neiki-accent);border-radius:50%;z-index:5;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");background-size:14px;background-repeat:no-repeat;background-position:center}.neiki-filter-bar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;font-family:var(--neiki-font)}.neiki-filter-btn{display:inline-flex;align-items:center;padding:6px 16px;border:1px solid rgba(128,128,128,.25);border-radius:999px;background:0 0;color:inherit;font-size:13px;font-family:inherit;cursor:pointer;transition:all .2s var(--neiki-transition-easing);-webkit-appearance:none;appearance:none;outline:0}.neiki-filter-btn:hover{border-color:var(--neiki-accent);color:var(--neiki-accent)}.neiki-filter-btn.neiki-filter--active{background:var(--neiki-accent);border-color:var(--neiki-accent);color:#fff}.neiki-filter-btn:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.4)}@media (max-width:1200px){.neiki-gallery--masonry{column-count:3}.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(3,1fr)}}@media (max-width:900px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(2,1fr)}.neiki-gallery--masonry{column-count:2}.neiki-gallery--mosaic{grid-auto-rows:160px}.neiki-gallery{--neiki-gap:10px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:220px;height:300px}}.neiki-lightbox{position:fixed;inset:0;z-index:999999;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--neiki-overlay-bg);-webkit-backdrop-filter:var(--neiki-overlay-backdrop);backdrop-filter:var(--neiki-overlay-backdrop);opacity:0;visibility:hidden;transition:opacity .35s var(--neiki-transition-easing),visibility 0s linear .35s;-webkit-user-select:none;user-select:none;outline:0;font-family:var(--neiki-font)}.neiki-lightbox__slide-wrapper,.neiki-lightbox__stage{display:flex;align-items:center;width:100%;position:relative}.neiki-lightbox.neiki-lightbox--visible{opacity:1;visibility:visible;transition:opacity .35s var(--neiki-transition-easing),visibility 0s linear 0s}.neiki-lightbox__stage{justify-content:center;flex:1 1 auto;min-height:0;overflow:hidden}.neiki-lightbox__slide-wrapper{justify-content:center;height:100%}.neiki-lightbox__btn,.neiki-lightbox__topbar{z-index:10;display:flex;align-items:center;position:absolute}.neiki-lightbox--fade .neiki-lightbox__image{transition:opacity var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox--fade .neiki-lightbox__image.neiki-entering{opacity:0}.neiki-lightbox--fade .neiki-lightbox__image.neiki-active{opacity:1}.neiki-lightbox--slide .neiki-lightbox__slide-wrapper{transition:transform var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox__image{max-width:var(--neiki-lightbox-max-width,90vw);max-height:var(--neiki-lightbox-max-height,85vh);width:auto;height:auto;object-fit:contain;border-radius:var(--neiki-border-radius,14px);cursor:zoom-in;transition:transform .35s var(--neiki-transition-easing),opacity var(--neiki-transition-duration) var(--neiki-transition-easing);-webkit-user-drag:none;pointer-events:auto}.neiki-lightbox__image.neiki-zoomed{transform:scale(var(--neiki-zoom-scale,2));cursor:zoom-out}.neiki-lightbox__image.neiki-zoom-pan{cursor:grab;transform-origin:var(--neiki-zoom-x,center) var(--neiki-zoom-y,center);transform:scale(var(--neiki-zoom-scale,2))}.neiki-draggable:active,.neiki-lightbox__image.neiki-zoom-pan:active{cursor:grabbing}.neiki-lightbox__btn{justify-content:center;width:var(--neiki-btn-size);height:var(--neiki-btn-size);border:1px solid rgba(255,255,255,.08);border-radius:var(--neiki-btn-border-radius);background:var(--neiki-btn-bg);-webkit-backdrop-filter:var(--neiki-btn-backdrop);backdrop-filter:var(--neiki-btn-backdrop);color:var(--neiki-btn-color);cursor:pointer;transition:background .2s var(--neiki-transition-easing),transform .15s ease,border-color .2s ease;padding:0;line-height:1;font-family:inherit;-webkit-appearance:none;appearance:none;outline:0}.neiki-compare,.neiki-lightbox__caption,.neiki-lightbox__counter,.neiki-share{font-family:var(--neiki-font)}.neiki-lightbox__btn:hover{background:var(--neiki-btn-bg-hover);border-color:rgba(255,255,255,.15)}.neiki-lightbox__btn:active{transform:scale(.92)}.neiki-lightbox__next:active,.neiki-lightbox__prev:active{transform:translateY(-50%) scale(.92)}.neiki-lightbox__btn:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.5)}.neiki-lightbox__btn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-lightbox__toolbar{position:absolute;top:16px;right:16px;z-index:10;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:4px;padding:4px;max-width:calc(100vw - 80px);background:rgba(0,0,0,.25);-webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);border:1px solid rgba(255,255,255,.08);border-radius:16px}.neiki-lightbox__toolbar .neiki-lightbox__btn{position:relative;top:auto;right:auto;left:auto;bottom:auto;border:none;background:0 0;-webkit-backdrop-filter:none;backdrop-filter:none;width:36px;height:36px;border-radius:10px}[data-theme=light] .neiki-lightbox__counter,[data-theme=light] .neiki-lightbox__toolbar{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.06)}.neiki-lightbox__toolbar .neiki-lightbox__btn:hover{background:rgba(255,255,255,.12)}.neiki-lightbox__toolbar .neiki-lightbox__btn svg{width:18px;height:18px}[data-theme=light] .neiki-lightbox__toolbar .neiki-lightbox__btn:hover{background:rgba(0,0,0,.08)}.neiki-lightbox__prev{left:16px;top:50%;transform:translateY(-50%)}.neiki-lightbox__next{right:16px;top:50%;transform:translateY(-50%)}.neiki-lightbox__topbar{top:16px;left:16px;gap:8px}.neiki-lightbox__counter{display:inline-flex;align-items:center;padding:4px 12px;background:rgba(0,0,0,.3);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:999px;color:var(--neiki-counter-color);font-size:var(--neiki-counter-font-size)}.neiki-lightbox__caption{flex:0 0 auto;width:100%;text-align:center;padding:10px 80px;color:var(--neiki-caption-color);font-size:var(--neiki-caption-font-size);line-height:1.5;min-height:1.5em;transition:opacity var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox__thumbs{flex:0 0 auto;width:100%;display:flex;align-items:center;justify-content:center;gap:var(--neiki-thumb-gap);padding:8px 16px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.neiki-lightbox__thumbs::-webkit-scrollbar{display:none}.neiki-lightbox__thumb{flex:0 0 auto;width:var(--neiki-thumb-size);height:var(--neiki-thumb-size);border-radius:var(--neiki-thumb-border-radius);overflow:hidden;cursor:pointer;opacity:var(--neiki-thumb-opacity);border:2px solid transparent;transition:opacity .2s var(--neiki-transition-easing),border-color .2s var(--neiki-transition-easing),transform .2s var(--neiki-transition-easing);background:rgba(128,128,128,.15);padding:0;-webkit-appearance:none;appearance:none;outline:0}.neiki-lightbox__thumb:hover{opacity:.8;transform:scale(1.08)}.neiki-lightbox__thumb.neiki-thumb--active{opacity:var(--neiki-thumb-active-opacity);border:var(--neiki-thumb-active-border);transform:scale(1.08)}.neiki-lightbox__thumb:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.5)}.neiki-lightbox__thumb img{display:block;width:100%;height:100%;object-fit:cover}.neiki-lightbox__progress{position:absolute;bottom:0;left:0;height:3px;background:var(--neiki-accent);border-radius:0 3px 3px 0;width:0%;z-index:15;transition:none}.neiki-lightbox__progress.neiki-progress--running{transition:width linear}.neiki-lightbox__progress.neiki-progress--paused{transition:none}.neiki-compare{position:relative;overflow:hidden;border-radius:var(--neiki-border-radius,14px);cursor:col-resize;-webkit-user-select:none;user-select:none}.neiki-compare__after,.neiki-compare__before{display:block;width:100%;height:auto;-webkit-user-drag:none}.neiki-compare__after{position:absolute;top:0;left:0;height:100%;object-fit:cover;clip-path:inset(0 0 0 50%)}.neiki-compare__handle{position:absolute;top:0;left:50%;width:4px;height:100%;background:#fff;transform:translateX(-50%);z-index:5;box-shadow:0 0 8px rgba(0,0,0,.4)}.neiki-compare__handle::after,.neiki-compare__handle::before{content:'';position:absolute;left:50%;transform:translateX(-50%);width:32px;height:32px;background:#fff;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.3)}.neiki-compare__handle::before{top:50%;margin-top:-16px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='15 18 9 12 15 6'/%3E%3C/svg%3E");background-size:16px;background-repeat:no-repeat;background-position:6px center}.neiki-compare__label{position:absolute;bottom:12px;padding:4px 12px;background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:999px;color:#fff;font-size:12px;font-weight:500;z-index:4;pointer-events:none}.neiki-compare__label--before{left:12px}.neiki-compare__label--after{right:12px}.neiki-share{position:absolute;bottom:60px;right:16px;z-index:20;display:flex;flex-direction:column;gap:4px;padding:8px;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(20px) saturate(1.3);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:16px;opacity:0;transform:translateY(8px);visibility:hidden;transition:opacity .2s,transform .2s,visibility 0s linear .2s}.neiki-share.neiki-share--visible{opacity:1;transform:translateY(0);visibility:visible;transition:opacity .2s,transform .2s,visibility linear}.neiki-share__btn{display:flex;align-items:center;gap:10px;padding:8px 14px;border:none;border-radius:10px;background:0 0;color:#fff;font-size:13px;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .15s;-webkit-appearance:none;appearance:none;outline:0}.neiki-exif,.neiki-story,.neiki-toast{font-family:var(--neiki-font)}.neiki-share__btn:hover{background:rgba(255,255,255,.12)}.neiki-share__btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}[data-theme=light] .neiki-share{background:rgba(255,255,255,.6);border-color:rgba(0,0,0,.06)}[data-theme=light] .neiki-share__btn{color:#1a1a1a}[data-theme=light] .neiki-share__btn:hover{background:rgba(0,0,0,.06)}.neiki-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(16px);padding:10px 20px;background:rgba(0,0,0,.7);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:12px;color:#fff;font-size:13px;z-index:9999999;opacity:0;transition:opacity .25s,transform .25s;pointer-events:none}.neiki-toast.neiki-toast--visible{opacity:1;transform:translateX(-50%) translateY(0)}.neiki-lightbox__spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:var(--neiki-spinner-size);height:var(--neiki-spinner-size);border:var(--neiki-spinner-width) solid rgba(128,128,128,.2);border-top-color:var(--neiki-spinner-color);border-radius:50%;animation:.7s linear infinite neiki-spin;pointer-events:none;z-index:5}.neiki-gallery>.neiki-item,.neiki-gallery>a{background:linear-gradient(110deg,#e8e8e8 8%,#f5f5f5 18%,#e8e8e8 33%);background-size:200% 100%;animation:1.4s linear infinite neiki-shimmer}.neiki-gallery[data-theme=dark]>.neiki-item,.neiki-gallery[data-theme=dark]>a,[data-theme=dark] .neiki-gallery>.neiki-item,[data-theme=dark] .neiki-gallery>a{background:linear-gradient(110deg,#1e1e22 8%,#2a2a30 18%,#1e1e22 33%);background-size:200% 100%}@keyframes neiki-shimmer{to{background-position:-200% 0}}.neiki-lightbox--pip{inset:auto;top:auto;left:auto;right:20px;bottom:20px;width:360px;height:280px;border-radius:16px;box-shadow:0 8px 40px rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.1);resize:both;overflow:hidden;z-index:999998}.neiki-lightbox--pip .neiki-lightbox__toolbar{top:8px;right:8px;padding:2px;border-radius:10px}.neiki-lightbox--pip .neiki-lightbox__next,.neiki-lightbox--pip .neiki-lightbox__prev,.neiki-lightbox--pip .neiki-lightbox__toolbar .neiki-lightbox__btn{width:28px;height:28px}.neiki-lightbox--pip .neiki-lightbox__next svg,.neiki-lightbox--pip .neiki-lightbox__prev svg,.neiki-lightbox--pip .neiki-lightbox__toolbar .neiki-lightbox__btn svg{width:14px;height:14px}.neiki-lightbox--pip .neiki-lightbox__image{max-width:100%;max-height:100%;border-radius:0}.neiki-story{position:fixed;inset:0;z-index:9999999;background:#000;display:flex;align-items:center;justify-content:center;overflow:hidden}.neiki-story__slide{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .4s;pointer-events:none}.neiki-editor--visible,.neiki-palette--visible,.neiki-shortcuts--visible,.neiki-story__slide--active{opacity:1;pointer-events:auto}.neiki-story__image{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none}.neiki-story__caption{position:absolute;bottom:60px;left:0;right:0;text-align:center;color:#fff;font-size:15px;padding:8px 20px;text-shadow:0 1px 4px rgba(0,0,0,.6)}.neiki-story__close,.neiki-story__progress-wrap{position:absolute;right:16px;display:flex;z-index:10}.neiki-story__close{top:16px;width:40px;height:40px;align-items:center;justify-content:center;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.1);border-radius:50%;color:#fff;cursor:pointer;padding:0;-webkit-appearance:none;appearance:none;outline:0}.neiki-story__close svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-story__close:hover{background:rgba(255,255,255,.15)}.neiki-story__progress-wrap{top:8px;left:16px;gap:4px}.neiki-story__progress-bar{flex:1;height:3px;background:rgba(255,255,255,.25);border-radius:3px;overflow:hidden}.neiki-story__progress-fill{width:0%;height:100%;background:#fff;border-radius:3px;transition:none}.neiki-exif,.neiki-palette{left:50%;transform:translateX(-50%);z-index:12;transition:opacity .3s;position:absolute;pointer-events:none}.neiki-exif{bottom:48px;display:inline-flex;align-items:center;padding:5px 14px;background:rgba(0,0,0,.35);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:999px;color:rgba(255,255,255,.6);font-size:11px;opacity:0}.neiki-exif--visible{opacity:1}[data-theme=light] .neiki-exif{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.06);color:rgba(0,0,0,.5)}.neiki-palette{top:16px;display:flex;align-items:center;gap:6px;padding:5px 10px;background:rgba(0,0,0,.25);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.06);border-radius:999px;opacity:0}.neiki-palette__dot{display:block;width:16px;height:16px;border-radius:50%;border:1.5px solid rgba(255,255,255,.2);cursor:pointer;transition:transform .15s}.neiki-palette__dot:hover{transform:scale(1.3)}.neiki-draggable{cursor:grab}.neiki-dragging{opacity:.4;transform:scale(.96)}.neiki-drag-over{outline:2px dashed var(--neiki-accent);outline-offset:-2px}.neiki-virtual-hidden{content-visibility:hidden;contain-intrinsic-size:auto 300px}.neiki-lightbox--tinted{background:rgba(var(--neiki-tint-r,8),var(--neiki-tint-g,8),var(--neiki-tint-b,12),.82);transition:background .6s}@media (max-width:768px){.neiki-lightbox{--neiki-lightbox-max-width:94vw;--neiki-lightbox-max-height:75vh;--neiki-btn-size:40px;--neiki-zoom-scale:1.8}.neiki-lightbox__next,.neiki-lightbox__prev{width:40px;height:40px}.neiki-lightbox__btn svg{width:18px;height:18px}.neiki-lightbox__thumbs{padding:6px 10px 10px}.neiki-lightbox__thumb{width:44px;height:44px}.neiki-lightbox__toolbar{top:10px;right:10px;gap:4px;padding:3px;max-width:calc(100vw - 60px);border-radius:14px}.neiki-lightbox__toolbar .neiki-lightbox__btn{width:34px;height:34px}.neiki-lightbox__caption{position:relative;padding:12px 16px;background:rgba(0,0,0,.2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:16px 16px 0 0;text-align:left;font-size:13px}[data-theme=light] .neiki-lightbox__caption{background:rgba(255,255,255,.4)}}@media (max-width:600px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(2,1fr)}.neiki-gallery--masonry{column-count:2}.neiki-gallery--mosaic{grid-auto-rows:140px}.neiki-gallery{--neiki-gap:8px;--neiki-border-radius:10px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:180px;height:240px}.neiki-lightbox{--neiki-lightbox-max-width:96vw;--neiki-lightbox-max-height:70vh;--neiki-btn-size:36px;--neiki-zoom-scale:1.6}.neiki-lightbox__next,.neiki-lightbox__prev{width:36px;height:36px}.neiki-lightbox__prev{left:6px}.neiki-lightbox__next{right:6px}.neiki-lightbox__topbar{top:10px;left:10px}.neiki-lightbox__caption{padding:8px 14px;font-size:12px}.neiki-lightbox__thumbs{padding:4px 6px 8px}.neiki-lightbox__thumb{width:38px;height:38px}.neiki-share{bottom:50px;right:10px}}@media (max-width:400px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:1fr}.neiki-gallery--masonry{column-count:1}.neiki-gallery--mosaic{grid-auto-rows:200px}.neiki-gallery--mosaic>.neiki-item[data-size=large],.neiki-gallery--mosaic>.neiki-item[data-size=wide],.neiki-gallery--mosaic>a[data-size=large],.neiki-gallery--mosaic>a[data-size=wide]{grid-column:span 1}.neiki-gallery{--neiki-gap:8px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:160px;height:220px}.neiki-lightbox{--neiki-lightbox-max-width:98vw;--neiki-lightbox-max-height:65vh;--neiki-btn-size:32px}.neiki-lightbox__next,.neiki-lightbox__prev,.neiki-lightbox__thumb{width:32px;height:32px}.neiki-lightbox__btn svg{width:16px;height:16px}.neiki-lightbox__caption{padding:6px 10px;font-size:11px}.neiki-lightbox__counter{font-size:11px;padding:3px 8px}.neiki-filter-bar{gap:6px}.neiki-filter-btn{padding:4px 12px;font-size:12px}}.neiki-lightbox__embed,.neiki-lightbox__video{display:block;max-width:var(--neiki-lightbox-max-width,90vw);max-height:var(--neiki-lightbox-max-height,85vh);width:auto;height:auto;border-radius:var(--neiki-border-radius,14px);background:#000;outline:0}.neiki-lightbox__embed{width:min(90vw,1200px);aspect-ratio:16/9;height:auto}.neiki-gallery>a[data-type=video]::after,.neiki-gallery>a[data-type=vimeo]::after,.neiki-gallery>a[data-type=youtube]::after,.neiki-gallery>a[href*=".mp4"]::after,.neiki-gallery>a[href*=".webm"]::after,.neiki-gallery>a[href*="vimeo.com"]::after,.neiki-gallery>a[href*="youtu.be"]::after,.neiki-gallery>a[href*="youtube.com"]::after{content:"";position:absolute;inset:50% auto auto 50%;transform:translate(-50%,-50%);width:56px;height:56px;background:rgba(0,0,0,.6);border-radius:50%;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'><polygon points='6 4 20 12 6 20'/></svg>");background-repeat:no-repeat;background-position:56% 50%;background-size:22px 22px;pointer-events:none;opacity:.9;transition:transform .2s,opacity .2s}.neiki-gallery>a:hover::after{transform:translate(-50%,-50%) scale(1.08);opacity:1}.neiki-lightbox__fav svg{fill:none;transition:fill .2s,transform .2s}.neiki-lightbox__fav--active svg{fill:#ef4444;stroke:#ef4444;animation:.4s neiki-fav-pop}@keyframes neiki-fav-pop{0%,100%{transform:scale(1)}50%{transform:scale(1.3)}}.neiki-favorited{position:relative}.neiki-favorited::before{content:"";position:absolute;top:8px;right:8px;width:22px;height:22px;background:rgba(239,68,68,.95);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'><path d='M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z'/></svg>");background-repeat:no-repeat;background-position:center;background-size:14px 14px;border-radius:50%;z-index:3;box-shadow:0 2px 8px rgba(0,0,0,.3);pointer-events:none}.neiki-lightbox__info{position:absolute;top:0;right:0;height:100%;width:min(360px,92vw);z-index:30;background:rgba(15,18,24,.92);-webkit-backdrop-filter:blur(20px) saturate(1.2);backdrop-filter:blur(20px) saturate(1.2);color:rgba(255,255,255,.92);border-left:1px solid rgba(255,255,255,.08);transform:translateX(100%);transition:transform .32s cubic-bezier(.4, 0, .2, 1);display:flex;flex-direction:column}.neiki-context-menu,.neiki-editor__toolbar{-webkit-backdrop-filter:blur(20px) saturate(1.3)}.neiki-lightbox--info-open .neiki-lightbox__info{transform:translateX(0)}.neiki-info__header{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid rgba(255,255,255,.08)}.neiki-info__title{margin:0;font-size:15px;font-weight:600;letter-spacing:.01em}.neiki-info__close{background:0 0;border:none;cursor:pointer;padding:6px;color:inherit;border-radius:8px;transition:background .15s}.neiki-info__close:hover{background:rgba(255,255,255,.08)}.neiki-info__close svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-info__body{padding:18px 20px;overflow-y:auto;flex:1;font-size:13px;line-height:1.55}.neiki-info__list{margin:0;display:grid;grid-template-columns:110px 1fr;gap:8px 12px}.neiki-info__list dt{color:rgba(255,255,255,.55);font-weight:500}.neiki-info__list dd{margin:0;word-break:break-word}.neiki-info__list dd a{color:var(--neiki-accent,#3b82f6);text-decoration:none}.neiki-info__list dd a:hover{text-decoration:underline}.neiki-info__subtitle{margin:22px 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:rgba(255,255,255,.5)}[data-theme=light] .neiki-lightbox__info{background:rgba(255,255,255,.94);color:#18181b;border-left-color:rgba(0,0,0,.08)}[data-theme=light] .neiki-info__list dt{color:rgba(0,0,0,.55)}.neiki-context-menu{position:fixed;z-index:9999;min-width:200px;padding:6px;background:rgba(20,22,28,.92);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:12px;box-shadow:0 12px 36px rgba(0,0,0,.4);opacity:0;transform:scale(.96);pointer-events:none;transition:opacity .14s,transform .14s}.neiki-context-menu--visible{opacity:1;transform:scale(1);pointer-events:auto}.neiki-editor,.neiki-shortcuts{opacity:0;pointer-events:none;position:absolute}.neiki-context-menu__item{width:100%;display:flex;align-items:center;gap:10px;padding:8px 12px;background:0 0;border:none;cursor:pointer;color:rgba(255,255,255,.92);font-size:13px;border-radius:8px;text-align:left;font-family:inherit}.neiki-shortcuts__keys kbd,.neiki-shortcuts__panel{border:1px solid rgba(255,255,255,.1);color:rgba(255,255,255,.92)}.neiki-context-menu__item:hover{background:rgba(255,255,255,.08)}.neiki-context-menu__icon{display:inline-flex;width:16px;height:16px;flex-shrink:0}.neiki-context-menu__icon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}[data-theme=light] .neiki-context-menu{background:rgba(255,255,255,.95);border-color:rgba(0,0,0,.08);color:#18181b}.neiki-shortcuts__close:hover,.neiki-shortcuts__keys kbd{background:rgba(255,255,255,.08)}[data-theme=light] .neiki-context-menu__item{color:#18181b}[data-theme=light] .neiki-context-menu__item:hover{background:rgba(0,0,0,.06)}.neiki-shortcuts{inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:opacity .2s}.neiki-shortcuts__panel{background:rgba(20,22,28,.96);border-radius:16px;padding:20px 24px;min-width:320px;max-width:90vw;max-height:80vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.5)}.neiki-shortcuts__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.neiki-shortcuts__header h3{margin:0;font-size:16px;font-weight:600}.neiki-shortcuts__close{background:0 0;border:none;cursor:pointer;padding:6px;color:inherit;border-radius:8px}.neiki-shortcuts__close svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-shortcuts__list{list-style:none;margin:0;padding:0;display:grid;gap:10px}.neiki-shortcuts__list li{display:flex;align-items:center;justify-content:space-between;gap:16px;font-size:13px}.neiki-shortcuts__keys kbd{display:inline-block;padding:3px 8px;border-radius:6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;margin-right:4px}.neiki-shortcuts__desc{color:rgba(255,255,255,.7)}[data-theme=light] .neiki-shortcuts__panel{background:rgba(255,255,255,.98);color:#18181b;border-color:rgba(0,0,0,.08)}[data-theme=light] .neiki-shortcuts__keys kbd{background:rgba(0,0,0,.06);border-color:rgba(0,0,0,.1);color:#18181b}[data-theme=light] .neiki-shortcuts__desc{color:rgba(0,0,0,.6)}.neiki-editor{bottom:80px;left:50%;transform:translateX(-50%);z-index:35;transition:opacity .2s,transform .2s}.neiki-annotate__btn,.neiki-editor__btn{min-width:36px;font-family:inherit;transition:background .15s;font-size:13px}.neiki-editor__toolbar{display:flex;gap:6px;align-items:center;padding:6px;background:rgba(20,22,28,.92);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.4)}.neiki-editor__btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 10px;background:0 0;border:none;color:rgba(255,255,255,.92);border-radius:10px;cursor:pointer}.neiki-editor__btn:hover{background:rgba(255,255,255,.1)}.neiki-editor__btn--primary{background:var(--neiki-accent,#3b82f6);color:#fff}.neiki-editor__btn--primary:hover{background:var(--neiki-accent-hover,#2563eb)}.neiki-annotate__btn:hover,.neiki-editor__sep{background:rgba(255,255,255,.1)}.neiki-editor__btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-editor__sep{width:1px;height:22px;margin:0 4px}.neiki-annotate{position:absolute;inset:0;z-index:40;display:none;align-items:center;justify-content:center}.neiki-annotate--visible{display:flex}.neiki-annotate__canvas{max-width:var(--neiki-lightbox-max-width,90vw);max-height:calc(var(--neiki-lightbox-max-height,85vh) - 60px);background:0 0;cursor:crosshair;border-radius:var(--neiki-border-radius,14px);touch-action:none}.neiki-annotate__toolbar{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);display:flex;gap:8px;align-items:center;padding:8px;background:rgba(20,22,28,.92);-webkit-backdrop-filter:blur(20px) saturate(1.3);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.4)}.neiki-annotate__color{width:36px;height:36px;padding:0;border:1px solid rgba(255,255,255,.15);border-radius:10px;background:0 0;cursor:pointer}.neiki-annotate__size{width:100px;accent-color:var(--neiki-accent,#3b82f6)}.neiki-annotate__btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 10px;background:0 0;border:none;color:rgba(255,255,255,.92);border-radius:10px;cursor:pointer}.neiki-annotate__btn--primary{background:var(--neiki-accent,#3b82f6);color:#fff}.neiki-annotate__btn--primary:hover{background:var(--neiki-accent-hover,#2563eb)}.neiki-infinite-sentinel{height:80px;width:100%;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.5);font-size:13px}.neiki-infinite-sentinel--loading::after{content:"";width:22px;height:22px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:.7s linear infinite neiki-spin}@keyframes neiki-spin{to{transform:translate(-50%,-50%) rotate(360deg);transform:rotate(360deg)}}.neiki-infinite-sentinel--done::after{content:"โ end โ";font-size:12px;opacity:.6}.neiki-kenburns{animation:neiki-kenburns var(--neiki-kenburns-duration,4000ms) ease-in-out forwards;transform-origin:center}@keyframes neiki-kenburns{0%{transform:scale(1) translate(0,0)}100%{transform:scale(1.08) translate(-1.5%,-1.2%)}}.neiki-lightbox--info-open .neiki-lightbox__caption,.neiki-lightbox--info-open .neiki-lightbox__stage{width:calc(100% - min(360px,92vw));margin-right:auto;margin-left:0;transition:width .32s cubic-bezier(.4, 0, .2, 1)}@media (max-width:700px){.neiki-lightbox--info-open .neiki-lightbox__caption,.neiki-lightbox--info-open .neiki-lightbox__stage{width:100%}}@media (prefers-reduced-motion:reduce){*,::after,::before{transition-duration:0s!important;animation-duration:0s!important;animation-iteration-count:1!important}.neiki-fav-pop,.neiki-kenburns{animation:none}}
|
|
1
|
+
.neiki-gallery[data-theme=dark],:root,[data-theme=dark]{--neiki-overlay-bg:rgba(8, 8, 12, 0.85);--neiki-btn-bg:rgba(255, 255, 255, 0.1);--neiki-btn-bg-hover:rgba(255, 255, 255, 0.2);--neiki-btn-color:#fff;--neiki-caption-color:#fff;--neiki-counter-color:rgba(255, 255, 255, 0.7)}.neiki-gallery[data-theme=dark],.neiki-gallery[data-theme=light],:root,[data-theme=dark],[data-theme=light]{--neiki-spinner-color:var(--neiki-accent);--neiki-thumb-active-border:2px solid var(--neiki-accent)}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a,.neiki-gallery--grid>.neiki-item,.neiki-gallery--grid>a,.neiki-gallery--masonry>.neiki-item,.neiki-gallery--masonry>a,.neiki-gallery--mosaic>.neiki-item,.neiki-gallery--mosaic>a{position:relative;transition:transform .35s var(--neiki-transition-easing),box-shadow .35s var(--neiki-transition-easing);cursor:pointer;text-decoration:none}.neiki-gallery--filmstrip>.neiki-item>img,.neiki-gallery--filmstrip>a>img,.neiki-gallery--grid>.neiki-item>img,.neiki-gallery--grid>a>img,.neiki-gallery--masonry>.neiki-item>img,.neiki-gallery--masonry>a>img,.neiki-gallery--mosaic>.neiki-item>img,.neiki-gallery--mosaic>a>img{width:100%;border-radius:var(--neiki-border-radius,14px);transition:transform .4s var(--neiki-transition-easing),opacity .5s var(--neiki-transition-easing);opacity:0}.neiki-gallery--filmstrip>.neiki-item>img.neiki-loaded,.neiki-gallery--filmstrip>a>img.neiki-loaded,.neiki-gallery--grid>.neiki-item>img.neiki-loaded,.neiki-gallery--grid>a>img.neiki-loaded,.neiki-gallery--masonry>.neiki-item>img.neiki-loaded,.neiki-gallery--masonry>a>img.neiki-loaded,.neiki-gallery--mosaic>.neiki-item>img.neiki-loaded,.neiki-gallery--mosaic>a>img.neiki-loaded{opacity:1}.neiki-exif,.neiki-lightbox__counter{font-variant-numeric:tabular-nums;white-space:nowrap}:root{--neiki-columns:4;--neiki-gap:14px;--neiki-border-radius:14px;--neiki-accent:#3b82f6;--neiki-accent-hover:#2563eb;--neiki-overlay-backdrop:blur(24px) saturate(1.2);--neiki-lightbox-max-width:90vw;--neiki-lightbox-max-height:85vh;--neiki-btn-size:44px;--neiki-btn-border-radius:12px;--neiki-btn-backdrop:blur(12px) saturate(1.4);--neiki-font:system-ui,-apple-system,'Segoe UI',sans-serif;--neiki-caption-font-size:14px;--neiki-counter-font-size:12px;--neiki-thumb-size:52px;--neiki-thumb-gap:6px;--neiki-thumb-border-radius:8px;--neiki-thumb-opacity:0.5;--neiki-thumb-active-opacity:1;--neiki-spinner-size:36px;--neiki-spinner-width:3px;--neiki-transition-duration:0.3s;--neiki-transition-easing:cubic-bezier(0.4, 0, 0.2, 1);--neiki-zoom-scale:2;--neiki-stagger-delay:0.04s;--neiki-hover-lift:-4px;--neiki-hover-shadow:0 12px 32px rgba(0, 0, 0, 0.25)}.neiki-gallery[data-theme=light],[data-theme=light]{--neiki-overlay-bg:rgba(245, 245, 247, 0.88);--neiki-btn-bg:rgba(0, 0, 0, 0.06);--neiki-btn-bg-hover:rgba(0, 0, 0, 0.12);--neiki-btn-color:#1a1a1a;--neiki-caption-color:#1a1a1a;--neiki-counter-color:rgba(0, 0, 0, 0.5);--neiki-hover-shadow:0 12px 32px rgba(0, 0, 0, 0.12)}.neiki-gallery{box-sizing:border-box;font-family:var(--neiki-font)}.neiki-gallery *,.neiki-gallery ::after,.neiki-gallery ::before{box-sizing:inherit}.neiki-gallery--masonry{column-count:var(--neiki-columns,4);column-gap:var(--neiki-gap,14px)}.neiki-gallery--masonry>.neiki-item,.neiki-gallery--masonry>a{display:inline-block;width:100%;margin-bottom:var(--neiki-gap,14px);break-inside:avoid;border-radius:var(--neiki-border-radius,14px);overflow:hidden}.neiki-gallery--masonry>.neiki-item>img,.neiki-gallery--masonry>a>img{display:block;height:auto;transform:scale(1)}.neiki-gallery--grid>.neiki-item:hover,.neiki-gallery--grid>a:hover,.neiki-gallery--masonry>.neiki-item:hover,.neiki-gallery--masonry>a:hover,.neiki-gallery--mosaic>.neiki-item:hover,.neiki-gallery--mosaic>a:hover{transform:translateY(var(--neiki-hover-lift));box-shadow:var(--neiki-hover-shadow)}.neiki-gallery--masonry>.neiki-item:hover>img,.neiki-gallery--masonry>a:hover>img{transform:scale(1.03)}.neiki-gallery--grid{display:grid;grid-template-columns:repeat(var(--neiki-columns,4),1fr);gap:var(--neiki-gap,14px)}.neiki-gallery--grid>.neiki-item,.neiki-gallery--grid>a{display:block;overflow:hidden;border-radius:var(--neiki-border-radius,14px);aspect-ratio:1/1}.neiki-gallery--grid>.neiki-item>img,.neiki-gallery--grid>a>img{display:block;height:100%;object-fit:cover}.neiki-gallery--grid>.neiki-item:hover>img,.neiki-gallery--grid>a:hover>img{transform:scale(1.05)}.neiki-gallery--mosaic{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:200px;gap:var(--neiki-gap,14px);grid-auto-flow:dense}.neiki-gallery--mosaic>.neiki-item,.neiki-gallery--mosaic>a{display:block;overflow:hidden;border-radius:var(--neiki-border-radius,14px)}.neiki-gallery--mosaic>.neiki-item[data-size=large],.neiki-gallery--mosaic>a[data-size=large]{grid-column:span 2;grid-row:span 2}.neiki-gallery--mosaic>.neiki-item[data-size=wide],.neiki-gallery--mosaic>a[data-size=wide]{grid-column:span 2}.neiki-gallery--mosaic>.neiki-item[data-size=tall],.neiki-gallery--mosaic>a[data-size=tall]{grid-row:span 2}.neiki-gallery--mosaic>.neiki-item>img,.neiki-gallery--mosaic>a>img{display:block;height:100%;object-fit:cover}.neiki-gallery--mosaic>.neiki-item:hover>img,.neiki-gallery--mosaic>a:hover>img{transform:scale(1.04)}.neiki-gallery--filmstrip{display:flex;gap:var(--neiki-gap,14px);overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:4px}.neiki-gallery--filmstrip::-webkit-scrollbar{display:none}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{flex:0 0 auto;width:280px;height:360px;scroll-snap-align:center;border-radius:var(--neiki-border-radius,14px);overflow:hidden}.neiki-gallery--filmstrip>.neiki-item>img,.neiki-gallery--filmstrip>a>img{display:block;height:100%;object-fit:cover}.neiki-compare__handle::after,.neiki-gallery>.neiki-item.neiki-filter-hidden,.neiki-gallery>a.neiki-filter-hidden,.neiki-lightbox--pip .neiki-exif,.neiki-lightbox--pip .neiki-lightbox__caption,.neiki-lightbox--pip .neiki-lightbox__thumbs,.neiki-lightbox--pip .neiki-lightbox__topbar,.neiki-lightbox--pip .neiki-palette,.neiki-lightbox__spinner.neiki-hidden{display:none}.neiki-gallery--filmstrip>.neiki-item:hover,.neiki-gallery--filmstrip>a:hover{transform:translateY(var(--neiki-hover-lift)) scale(1.02);box-shadow:var(--neiki-hover-shadow)}.neiki-gallery--stagger>.neiki-item,.neiki-gallery--stagger>a{transform:translateY(20px);animation:neiki-stagger-in .5s var(--neiki-transition-easing) forwards}@keyframes neiki-stagger-in{to{transform:translateY(0)}}.neiki-gallery>.neiki-item.neiki-selected,.neiki-gallery>a.neiki-selected{outline:3px solid var(--neiki-accent);outline-offset:-3px}.neiki-gallery>.neiki-item.neiki-selected::after,.neiki-gallery>a.neiki-selected::after{content:'';position:absolute;top:8px;right:8px;width:24px;height:24px;background:var(--neiki-accent);border-radius:50%;z-index:5;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");background-size:14px;background-repeat:no-repeat;background-position:center}.neiki-filter-bar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;font-family:var(--neiki-font)}.neiki-filter-btn{display:inline-flex;align-items:center;padding:6px 16px;border:1px solid rgba(128,128,128,.25);border-radius:999px;background:0 0;color:inherit;font-size:13px;font-family:inherit;cursor:pointer;transition:all .2s var(--neiki-transition-easing);-webkit-appearance:none;appearance:none;outline:0}.neiki-filter-btn:hover{border-color:var(--neiki-accent);color:var(--neiki-accent)}.neiki-filter-btn.neiki-filter--active{background:var(--neiki-accent);border-color:var(--neiki-accent);color:#fff}.neiki-filter-btn:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.4)}@media (max-width:1200px){.neiki-gallery--masonry{column-count:3}.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(3,1fr)}}@media (max-width:900px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(2,1fr)}.neiki-gallery--masonry{column-count:2}.neiki-gallery--mosaic{grid-auto-rows:160px}.neiki-gallery{--neiki-gap:10px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:220px;height:300px}}.neiki-lightbox{position:fixed;inset:0;z-index:999999;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--neiki-overlay-bg);-webkit-backdrop-filter:var(--neiki-overlay-backdrop);backdrop-filter:var(--neiki-overlay-backdrop);opacity:0;visibility:hidden;transition:opacity .35s var(--neiki-transition-easing),visibility 0s linear .35s;-webkit-user-select:none;user-select:none;outline:0;font-family:var(--neiki-font)}.neiki-lightbox__slide-wrapper,.neiki-lightbox__stage{display:flex;align-items:center;width:100%;position:relative}.neiki-lightbox.neiki-lightbox--visible{opacity:1;visibility:visible;transition:opacity .35s var(--neiki-transition-easing),visibility 0s linear 0s}.neiki-lightbox__stage{justify-content:center;flex:1 1 auto;min-height:0;overflow:hidden}.neiki-lightbox__slide-wrapper{justify-content:center;height:100%}.neiki-lightbox__btn,.neiki-lightbox__topbar{z-index:10;display:flex;align-items:center;position:absolute}.neiki-lightbox--fade .neiki-lightbox__image{transition:opacity var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox--fade .neiki-lightbox__image.neiki-entering{opacity:0}.neiki-lightbox--fade .neiki-lightbox__image.neiki-active{opacity:1}.neiki-lightbox--slide .neiki-lightbox__slide-wrapper{transition:transform var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox__image{max-width:var(--neiki-lightbox-max-width,90vw);max-height:var(--neiki-lightbox-max-height,85vh);width:auto;height:auto;object-fit:contain;border-radius:var(--neiki-border-radius,14px);cursor:zoom-in;transition:transform .35s var(--neiki-transition-easing),opacity var(--neiki-transition-duration) var(--neiki-transition-easing);-webkit-user-drag:none;pointer-events:auto}.neiki-lightbox__image.neiki-zoomed{transform:scale(var(--neiki-zoom-scale,2));cursor:grab}.neiki-lightbox__image.neiki-zoomed:active{cursor:grabbing}.neiki-lightbox__image.neiki-zoom-pan{cursor:grab;transform-origin:var(--neiki-zoom-x,center) var(--neiki-zoom-y,center);transform:scale(var(--neiki-zoom-scale,2))}.neiki-draggable:active,.neiki-lightbox__image.neiki-zoom-pan:active{cursor:grabbing}.neiki-lightbox__btn{justify-content:center;width:var(--neiki-btn-size);height:var(--neiki-btn-size);border:1px solid rgba(255,255,255,.08);border-radius:var(--neiki-btn-border-radius);background:var(--neiki-btn-bg);-webkit-backdrop-filter:var(--neiki-btn-backdrop);backdrop-filter:var(--neiki-btn-backdrop);color:var(--neiki-btn-color);cursor:pointer;transition:background .2s var(--neiki-transition-easing),transform .15s ease,border-color .2s ease;padding:0;line-height:1;font-family:inherit;-webkit-appearance:none;appearance:none;outline:0}.neiki-compare,.neiki-lightbox__caption,.neiki-lightbox__counter,.neiki-share{font-family:var(--neiki-font)}.neiki-lightbox__btn:hover{background:var(--neiki-btn-bg-hover);border-color:rgba(255,255,255,.15)}.neiki-lightbox__btn:active{transform:scale(.92)}.neiki-lightbox__next:active,.neiki-lightbox__prev:active{transform:translateY(-50%) scale(.92)}.neiki-lightbox__btn:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.5)}.neiki-lightbox__btn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-lightbox__toolbar{position:absolute;top:16px;right:16px;z-index:10;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:4px;padding:4px;max-width:calc(100vw - 80px);background:rgba(0,0,0,.25);-webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);border:1px solid rgba(255,255,255,.08);border-radius:16px}.neiki-lightbox__toolbar .neiki-lightbox__btn{position:relative;top:auto;right:auto;left:auto;bottom:auto;border:none;background:0 0;-webkit-backdrop-filter:none;backdrop-filter:none;width:36px;height:36px;border-radius:10px}[data-theme=light] .neiki-lightbox__counter,[data-theme=light] .neiki-lightbox__toolbar{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.06)}.neiki-lightbox__toolbar .neiki-lightbox__btn:hover{background:rgba(255,255,255,.12)}.neiki-lightbox__toolbar .neiki-lightbox__btn svg{width:18px;height:18px}[data-theme=light] .neiki-lightbox__toolbar .neiki-lightbox__btn:hover{background:rgba(0,0,0,.08)}.neiki-lightbox__prev{left:16px;top:50%;transform:translateY(-50%)}.neiki-lightbox__next{right:16px;top:50%;transform:translateY(-50%)}.neiki-lightbox__topbar{top:16px;left:16px;gap:8px}.neiki-lightbox__counter{display:inline-flex;align-items:center;padding:4px 12px;background:rgba(0,0,0,.3);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:999px;color:var(--neiki-counter-color);font-size:var(--neiki-counter-font-size)}.neiki-lightbox__caption{flex:0 0 auto;width:100%;text-align:center;padding:10px 80px;color:var(--neiki-caption-color);font-size:var(--neiki-caption-font-size);line-height:1.5;min-height:1.5em;transition:opacity var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox__thumbs{flex:0 0 auto;width:100%;display:flex;align-items:center;justify-content:center;gap:var(--neiki-thumb-gap);padding:8px 16px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.neiki-lightbox__thumbs::-webkit-scrollbar{display:none}.neiki-lightbox__thumb{flex:0 0 auto;width:var(--neiki-thumb-size);height:var(--neiki-thumb-size);border-radius:var(--neiki-thumb-border-radius);overflow:hidden;cursor:pointer;opacity:var(--neiki-thumb-opacity);border:2px solid transparent;transition:opacity .2s var(--neiki-transition-easing),border-color .2s var(--neiki-transition-easing),transform .2s var(--neiki-transition-easing);background:rgba(128,128,128,.15);padding:0;-webkit-appearance:none;appearance:none;outline:0}.neiki-lightbox__thumb:hover{opacity:.8;transform:scale(1.08)}.neiki-lightbox__thumb.neiki-thumb--active{opacity:var(--neiki-thumb-active-opacity);border:var(--neiki-thumb-active-border);transform:scale(1.08)}.neiki-lightbox__thumb:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.5)}.neiki-lightbox__thumb img{display:block;width:100%;height:100%;object-fit:cover}.neiki-lightbox__progress{position:absolute;bottom:0;left:0;height:3px;background:var(--neiki-accent);border-radius:0 3px 3px 0;width:0%;z-index:15;transition:none}.neiki-lightbox__progress.neiki-progress--running{transition:width linear}.neiki-lightbox__progress.neiki-progress--paused{transition:none}.neiki-compare{position:relative;overflow:hidden;border-radius:var(--neiki-border-radius,14px);cursor:col-resize;-webkit-user-select:none;user-select:none}.neiki-compare__after,.neiki-compare__before{display:block;width:100%;height:auto;-webkit-user-drag:none}.neiki-compare__after{position:absolute;top:0;left:0;height:100%;object-fit:cover;clip-path:inset(0 0 0 50%)}.neiki-compare__handle{position:absolute;top:0;left:50%;width:4px;height:100%;background:#fff;transform:translateX(-50%);z-index:5;box-shadow:0 0 8px rgba(0,0,0,.4)}.neiki-compare__handle::after,.neiki-compare__handle::before{content:'';position:absolute;left:50%;transform:translateX(-50%);width:32px;height:32px;background:#fff;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.3)}.neiki-compare__handle::before{top:50%;margin-top:-16px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='15 18 9 12 15 6'/%3E%3C/svg%3E");background-size:16px;background-repeat:no-repeat;background-position:6px center}.neiki-compare__label{position:absolute;bottom:12px;padding:4px 12px;background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:999px;color:#fff;font-size:12px;font-weight:500;z-index:4;pointer-events:none}.neiki-compare__label--before{left:12px}.neiki-compare__label--after{right:12px}.neiki-share{position:absolute;bottom:60px;right:16px;z-index:20;display:flex;flex-direction:column;gap:4px;padding:8px;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(20px) saturate(1.3);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:16px;opacity:0;transform:translateY(8px);visibility:hidden;transition:opacity .2s,transform .2s,visibility 0s linear .2s}.neiki-share.neiki-share--visible{opacity:1;transform:translateY(0);visibility:visible;transition:opacity .2s,transform .2s,visibility linear}.neiki-share__btn{display:flex;align-items:center;gap:10px;padding:8px 14px;border:none;border-radius:10px;background:0 0;color:#fff;font-size:13px;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .15s;-webkit-appearance:none;appearance:none;outline:0}.neiki-exif,.neiki-story,.neiki-toast{font-family:var(--neiki-font)}.neiki-share__btn:hover{background:rgba(255,255,255,.12)}.neiki-share__btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}[data-theme=light] .neiki-share{background:rgba(255,255,255,.6);border-color:rgba(0,0,0,.06)}[data-theme=light] .neiki-share__btn{color:#1a1a1a}[data-theme=light] .neiki-share__btn:hover{background:rgba(0,0,0,.06)}.neiki-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(16px);padding:10px 20px;background:rgba(0,0,0,.7);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:12px;color:#fff;font-size:13px;z-index:9999999;opacity:0;transition:opacity .25s,transform .25s;pointer-events:none}.neiki-toast.neiki-toast--visible{opacity:1;transform:translateX(-50%) translateY(0)}.neiki-lightbox__spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:var(--neiki-spinner-size);height:var(--neiki-spinner-size);border:var(--neiki-spinner-width) solid rgba(128,128,128,.2);border-top-color:var(--neiki-spinner-color);border-radius:50%;animation:.7s linear infinite neiki-spin;pointer-events:none;z-index:5}@keyframes neiki-spin{to{transform:translate(-50%,-50%) rotate(360deg)}}.neiki-gallery>.neiki-item,.neiki-gallery>a{background:linear-gradient(110deg,#e8e8e8 8%,#f5f5f5 18%,#e8e8e8 33%);background-size:200% 100%;animation:1.4s linear infinite neiki-shimmer}.neiki-gallery[data-theme=dark]>.neiki-item,.neiki-gallery[data-theme=dark]>a,[data-theme=dark] .neiki-gallery>.neiki-item,[data-theme=dark] .neiki-gallery>a{background:linear-gradient(110deg,#1e1e22 8%,#2a2a30 18%,#1e1e22 33%);background-size:200% 100%}@keyframes neiki-shimmer{to{background-position:-200% 0}}.neiki-lightbox--pip{inset:auto;top:auto;left:auto;right:20px;bottom:20px;width:360px;height:280px;border-radius:16px;box-shadow:0 8px 40px rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.1);resize:both;overflow:hidden;z-index:999998}.neiki-lightbox--pip .neiki-lightbox__toolbar{top:8px;right:8px;padding:2px;border-radius:10px}.neiki-lightbox--pip .neiki-lightbox__next,.neiki-lightbox--pip .neiki-lightbox__prev,.neiki-lightbox--pip .neiki-lightbox__toolbar .neiki-lightbox__btn{width:28px;height:28px}.neiki-lightbox--pip .neiki-lightbox__next svg,.neiki-lightbox--pip .neiki-lightbox__prev svg,.neiki-lightbox--pip .neiki-lightbox__toolbar .neiki-lightbox__btn svg{width:14px;height:14px}.neiki-lightbox--pip .neiki-lightbox__image{max-width:100%;max-height:100%;border-radius:0}.neiki-story{position:fixed;inset:0;z-index:9999999;background:#000;display:flex;align-items:center;justify-content:center;overflow:hidden}.neiki-story__slide{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .4s;pointer-events:none}.neiki-editor--visible,.neiki-palette--visible,.neiki-shortcuts--visible,.neiki-story__slide--active{opacity:1;pointer-events:auto}.neiki-story__image{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none}.neiki-story__caption{position:absolute;bottom:60px;left:0;right:0;text-align:center;color:#fff;font-size:15px;padding:8px 20px;text-shadow:0 1px 4px rgba(0,0,0,.6)}.neiki-story__close,.neiki-story__progress-wrap{position:absolute;right:16px;display:flex;z-index:10}.neiki-story__close{top:16px;width:40px;height:40px;align-items:center;justify-content:center;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.1);border-radius:50%;color:#fff;cursor:pointer;padding:0;-webkit-appearance:none;appearance:none;outline:0}.neiki-story__close svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-story__close:hover{background:rgba(255,255,255,.15)}.neiki-story__progress-wrap{top:8px;left:16px;gap:4px}.neiki-story__progress-bar{flex:1;height:3px;background:rgba(255,255,255,.25);border-radius:3px;overflow:hidden}.neiki-story__progress-fill{width:0%;height:100%;background:#fff;border-radius:3px;transition:none}.neiki-exif,.neiki-palette{left:50%;transform:translateX(-50%);z-index:12;transition:opacity .3s;position:absolute;pointer-events:none}.neiki-exif{bottom:48px;display:inline-flex;align-items:center;padding:5px 14px;background:rgba(0,0,0,.35);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:999px;color:rgba(255,255,255,.6);font-size:11px;opacity:0}.neiki-exif--visible{opacity:1}[data-theme=light] .neiki-exif{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.06);color:rgba(0,0,0,.5)}.neiki-palette{top:16px;display:flex;align-items:center;gap:6px;padding:5px 10px;background:rgba(0,0,0,.25);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.06);border-radius:999px;opacity:0}.neiki-palette__dot{display:block;width:16px;height:16px;border-radius:50%;border:1.5px solid rgba(255,255,255,.2);cursor:pointer;transition:transform .15s}.neiki-palette__dot:hover{transform:scale(1.3)}.neiki-draggable{cursor:grab}.neiki-dragging{opacity:.4;transform:scale(.96)}.neiki-drag-over{outline:2px dashed var(--neiki-accent);outline-offset:-2px}.neiki-virtual-hidden{content-visibility:hidden;contain-intrinsic-size:auto 300px}.neiki-lightbox--tinted{background:rgba(var(--neiki-tint-r,8),var(--neiki-tint-g,8),var(--neiki-tint-b,12),.82);transition:background .6s}@media (max-width:768px){.neiki-lightbox{--neiki-lightbox-max-width:94vw;--neiki-lightbox-max-height:75vh;--neiki-btn-size:40px;--neiki-zoom-scale:1.8}.neiki-lightbox__next,.neiki-lightbox__prev{width:40px;height:40px}.neiki-lightbox__btn svg{width:18px;height:18px}.neiki-lightbox__thumbs{padding:6px 10px 10px}.neiki-lightbox__thumb{width:44px;height:44px}.neiki-lightbox__toolbar{top:10px;right:10px;gap:4px;padding:3px;max-width:calc(100vw - 60px);border-radius:14px}.neiki-lightbox__toolbar .neiki-lightbox__btn{width:34px;height:34px}.neiki-lightbox__caption{position:relative;padding:12px 16px;background:rgba(0,0,0,.2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:16px 16px 0 0;text-align:left;font-size:13px}[data-theme=light] .neiki-lightbox__caption{background:rgba(255,255,255,.4)}}@media (max-width:600px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(2,1fr)}.neiki-gallery--masonry{column-count:2}.neiki-gallery--mosaic{grid-auto-rows:140px}.neiki-gallery{--neiki-gap:8px;--neiki-border-radius:10px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:180px;height:240px}.neiki-lightbox{--neiki-lightbox-max-width:96vw;--neiki-lightbox-max-height:70vh;--neiki-btn-size:36px;--neiki-zoom-scale:1.6}.neiki-lightbox__next,.neiki-lightbox__prev{width:36px;height:36px}.neiki-lightbox__prev{left:6px}.neiki-lightbox__next{right:6px}.neiki-lightbox__topbar{top:10px;left:10px}.neiki-lightbox__caption{padding:8px 14px;font-size:12px}.neiki-lightbox__thumbs{padding:4px 6px 8px}.neiki-lightbox__thumb{width:38px;height:38px}.neiki-share{bottom:50px;right:10px}}@media (max-width:400px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:1fr}.neiki-gallery--masonry{column-count:1}.neiki-gallery--mosaic{grid-auto-rows:200px}.neiki-gallery--mosaic>.neiki-item[data-size=large],.neiki-gallery--mosaic>.neiki-item[data-size=wide],.neiki-gallery--mosaic>a[data-size=large],.neiki-gallery--mosaic>a[data-size=wide]{grid-column:span 1}.neiki-gallery{--neiki-gap:8px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:160px;height:220px}.neiki-lightbox{--neiki-lightbox-max-width:98vw;--neiki-lightbox-max-height:65vh;--neiki-btn-size:32px}.neiki-lightbox__next,.neiki-lightbox__prev,.neiki-lightbox__thumb{width:32px;height:32px}.neiki-lightbox__btn svg{width:16px;height:16px}.neiki-lightbox__caption{padding:6px 10px;font-size:11px}.neiki-lightbox__counter{font-size:11px;padding:3px 8px}.neiki-filter-bar{gap:6px}.neiki-filter-btn{padding:4px 12px;font-size:12px}}.neiki-lightbox__embed,.neiki-lightbox__video{display:block;max-width:var(--neiki-lightbox-max-width,90vw);max-height:var(--neiki-lightbox-max-height,85vh);width:auto;height:auto;border-radius:var(--neiki-border-radius,14px);background:#000;outline:0}.neiki-lightbox__embed{width:min(90vw,1200px);aspect-ratio:16/9;height:auto}.neiki-gallery>a[data-type=video]::after,.neiki-gallery>a[data-type=vimeo]::after,.neiki-gallery>a[data-type=youtube]::after,.neiki-gallery>a[href*=".mp4"]::after,.neiki-gallery>a[href*=".webm"]::after,.neiki-gallery>a[href*="vimeo.com"]::after,.neiki-gallery>a[href*="youtu.be"]::after,.neiki-gallery>a[href*="youtube.com"]::after{content:"";position:absolute;inset:50% auto auto 50%;transform:translate(-50%,-50%);width:56px;height:56px;background:rgba(0,0,0,.6);border-radius:50%;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'><polygon points='6 4 20 12 6 20'/></svg>");background-repeat:no-repeat;background-position:56% 50%;background-size:22px 22px;pointer-events:none;opacity:.9;transition:transform .2s,opacity .2s}.neiki-gallery>a:hover::after{transform:translate(-50%,-50%) scale(1.08);opacity:1}.neiki-lightbox__fav svg{fill:none;transition:fill .2s,transform .2s}.neiki-lightbox__fav--active svg{fill:#ef4444;stroke:#ef4444;animation:.4s neiki-fav-pop}@keyframes neiki-fav-pop{0%,100%{transform:scale(1)}50%{transform:scale(1.3)}}.neiki-favorited{position:relative}.neiki-favorited::before{content:"";position:absolute;top:8px;right:8px;width:22px;height:22px;background:rgba(239,68,68,.95);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'><path d='M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z'/></svg>");background-repeat:no-repeat;background-position:center;background-size:14px 14px;border-radius:50%;z-index:3;box-shadow:0 2px 8px rgba(0,0,0,.3);pointer-events:none}.neiki-lightbox__info{position:absolute;top:0;right:0;height:100%;width:min(360px,92vw);z-index:30;background:rgba(15,18,24,.92);-webkit-backdrop-filter:blur(20px) saturate(1.2);backdrop-filter:blur(20px) saturate(1.2);color:rgba(255,255,255,.92);border-left:1px solid rgba(255,255,255,.08);transform:translateX(100%);transition:transform .32s cubic-bezier(.4, 0, .2, 1);display:flex;flex-direction:column}.neiki-context-menu,.neiki-editor__toolbar{-webkit-backdrop-filter:blur(20px) saturate(1.3)}.neiki-lightbox--info-open .neiki-lightbox__info{transform:translateX(0)}.neiki-info__header{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid rgba(255,255,255,.08)}.neiki-info__title{margin:0;font-size:15px;font-weight:600;letter-spacing:.01em}.neiki-info__close{background:0 0;border:none;cursor:pointer;padding:6px;color:inherit;border-radius:8px;transition:background .15s}.neiki-info__close:hover{background:rgba(255,255,255,.08)}.neiki-info__close svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-info__body{padding:18px 20px;overflow-y:auto;flex:1;font-size:13px;line-height:1.55}.neiki-info__list{margin:0;display:grid;grid-template-columns:110px 1fr;gap:8px 12px}.neiki-info__list dt{color:rgba(255,255,255,.55);font-weight:500}.neiki-info__list dd{margin:0;word-break:break-word}.neiki-info__list dd a{color:var(--neiki-accent,#3b82f6);text-decoration:none}.neiki-info__list dd a:hover{text-decoration:underline}.neiki-info__subtitle{margin:22px 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:rgba(255,255,255,.5)}[data-theme=light] .neiki-lightbox__info{background:rgba(255,255,255,.94);color:#18181b;border-left-color:rgba(0,0,0,.08)}[data-theme=light] .neiki-info__list dt{color:rgba(0,0,0,.55)}.neiki-context-menu{position:fixed;z-index:9999;min-width:200px;padding:6px;background:rgba(20,22,28,.92);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:12px;box-shadow:0 12px 36px rgba(0,0,0,.4);opacity:0;transform:scale(.96);pointer-events:none;transition:opacity .14s,transform .14s}.neiki-context-menu--visible{opacity:1;transform:scale(1);pointer-events:auto}.neiki-editor,.neiki-shortcuts{opacity:0;pointer-events:none;position:absolute}.neiki-context-menu__item{width:100%;display:flex;align-items:center;gap:10px;padding:8px 12px;background:0 0;border:none;cursor:pointer;color:rgba(255,255,255,.92);font-size:13px;border-radius:8px;text-align:left;font-family:inherit}.neiki-shortcuts__keys kbd,.neiki-shortcuts__panel{border:1px solid rgba(255,255,255,.1);color:rgba(255,255,255,.92)}.neiki-context-menu__item:hover{background:rgba(255,255,255,.08)}.neiki-context-menu__icon{display:inline-flex;width:16px;height:16px;flex-shrink:0}.neiki-context-menu__icon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}[data-theme=light] .neiki-context-menu{background:rgba(255,255,255,.95);border-color:rgba(0,0,0,.08);color:#18181b}.neiki-shortcuts__close:hover,.neiki-shortcuts__keys kbd{background:rgba(255,255,255,.08)}[data-theme=light] .neiki-context-menu__item{color:#18181b}[data-theme=light] .neiki-context-menu__item:hover{background:rgba(0,0,0,.06)}.neiki-shortcuts{inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:opacity .2s}.neiki-shortcuts__panel{background:rgba(20,22,28,.96);border-radius:16px;padding:20px 24px;min-width:320px;max-width:90vw;max-height:80vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.5)}.neiki-shortcuts__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.neiki-shortcuts__header h3{margin:0;font-size:16px;font-weight:600}.neiki-shortcuts__close{background:0 0;border:none;cursor:pointer;padding:6px;color:inherit;border-radius:8px}.neiki-shortcuts__close svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-shortcuts__list{list-style:none;margin:0;padding:0;display:grid;gap:10px}.neiki-shortcuts__list li{display:flex;align-items:center;justify-content:space-between;gap:16px;font-size:13px}.neiki-shortcuts__keys kbd{display:inline-block;padding:3px 8px;border-radius:6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;margin-right:4px}.neiki-shortcuts__desc{color:rgba(255,255,255,.7)}[data-theme=light] .neiki-shortcuts__panel{background:rgba(255,255,255,.98);color:#18181b;border-color:rgba(0,0,0,.08)}[data-theme=light] .neiki-shortcuts__keys kbd{background:rgba(0,0,0,.06);border-color:rgba(0,0,0,.1);color:#18181b}[data-theme=light] .neiki-shortcuts__desc{color:rgba(0,0,0,.6)}.neiki-editor{bottom:80px;left:50%;transform:translateX(-50%);z-index:35;transition:opacity .2s,transform .2s}.neiki-annotate__btn,.neiki-editor__btn{min-width:36px;font-family:inherit;transition:background .15s;font-size:13px}.neiki-editor__toolbar{display:flex;gap:6px;align-items:center;padding:6px;background:rgba(20,22,28,.92);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.4)}.neiki-editor__btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 10px;background:0 0;border:none;color:rgba(255,255,255,.92);border-radius:10px;cursor:pointer}.neiki-editor__btn:hover{background:rgba(255,255,255,.1)}.neiki-editor__btn--primary{background:var(--neiki-accent,#3b82f6);color:#fff}.neiki-editor__btn--primary:hover{background:var(--neiki-accent-hover,#2563eb)}.neiki-annotate__btn:hover,.neiki-editor__sep{background:rgba(255,255,255,.1)}.neiki-editor__btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-editor__sep{width:1px;height:22px;margin:0 4px}.neiki-annotate{position:absolute;inset:0;z-index:40;display:none;align-items:center;justify-content:center}.neiki-annotate--visible{display:flex}.neiki-annotate__canvas{max-width:var(--neiki-lightbox-max-width,90vw);max-height:calc(var(--neiki-lightbox-max-height,85vh) - 60px);background:0 0;cursor:crosshair;border-radius:var(--neiki-border-radius,14px);touch-action:none}.neiki-annotate__toolbar{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);display:flex;gap:8px;align-items:center;padding:8px;background:rgba(20,22,28,.92);-webkit-backdrop-filter:blur(20px) saturate(1.3);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.4)}.neiki-annotate__color{width:36px;height:36px;padding:0;border:1px solid rgba(255,255,255,.15);border-radius:10px;background:0 0;cursor:pointer}.neiki-annotate__size{width:100px;accent-color:var(--neiki-accent,#3b82f6)}.neiki-annotate__btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 10px;background:0 0;border:none;color:rgba(255,255,255,.92);border-radius:10px;cursor:pointer}.neiki-annotate__btn--primary{background:var(--neiki-accent,#3b82f6);color:#fff}.neiki-annotate__btn--primary:hover{background:var(--neiki-accent-hover,#2563eb)}.neiki-infinite-sentinel{height:80px;width:100%;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.5);font-size:13px}.neiki-infinite-sentinel--loading::after{content:"";width:22px;height:22px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:.7s linear infinite neiki-spin-simple}@keyframes neiki-spin-simple{to{transform:rotate(360deg)}}.neiki-infinite-sentinel--done::after{content:"โ end โ";font-size:12px;opacity:.6}.neiki-kenburns{animation:neiki-kenburns var(--neiki-kenburns-duration,4000ms) ease-in-out forwards;transform-origin:center}@keyframes neiki-kenburns{0%{transform:scale(1) translate(0,0)}100%{transform:scale(1.08) translate(-1.5%,-1.2%)}}.neiki-lightbox--info-open .neiki-lightbox__caption,.neiki-lightbox--info-open .neiki-lightbox__stage{width:calc(100% - min(360px,92vw));margin-right:auto;margin-left:0;transition:width .32s cubic-bezier(.4, 0, .2, 1)}@media (max-width:700px){.neiki-lightbox--info-open .neiki-lightbox__caption,.neiki-lightbox--info-open .neiki-lightbox__stage{width:100%}}@media (prefers-reduced-motion:reduce){*,::after,::before{transition-duration:0s!important;animation-duration:0s!important;animation-iteration-count:1!important}.neiki-fav-pop,.neiki-kenburns{animation:none}}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Neiki Gallery v3.
|
|
2
|
+
* Neiki's Gallery v3.1.0
|
|
3
3
|
* A vanilla JavaScript image gallery / lightbox library.
|
|
4
4
|
* No dependencies. No frameworks.
|
|
5
5
|
*
|
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
*
|
|
10
10
|
* License: MIT
|
|
11
11
|
*/
|
|
12
|
-
!function(t,i){"function"==typeof define&&define.amd?define([],i):"object"==typeof module&&module.exports?module.exports=i():t.NeikiGallery=i()}("undefined"!=typeof self?self:this,function(){"use strict";!function(){if(!document.getElementById("neiki-gallery-styles")){var t=document.createElement("style");t.id="neiki-gallery-styles",t.textContent=".neiki-gallery[data-theme=dark],:root,[data-theme=dark]{--neiki-overlay-bg:rgba(8, 8, 12, 0.85);--neiki-btn-bg:rgba(255, 255, 255, 0.1);--neiki-btn-bg-hover:rgba(255, 255, 255, 0.2);--neiki-btn-color:#fff;--neiki-caption-color:#fff;--neiki-counter-color:rgba(255, 255, 255, 0.7)}.neiki-gallery[data-theme=dark],.neiki-gallery[data-theme=light],:root,[data-theme=dark],[data-theme=light]{--neiki-spinner-color:var(--neiki-accent);--neiki-thumb-active-border:2px solid var(--neiki-accent)}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a,.neiki-gallery--grid>.neiki-item,.neiki-gallery--grid>a,.neiki-gallery--masonry>.neiki-item,.neiki-gallery--masonry>a,.neiki-gallery--mosaic>.neiki-item,.neiki-gallery--mosaic>a{position:relative;transition:transform .35s var(--neiki-transition-easing),box-shadow .35s var(--neiki-transition-easing);cursor:pointer;text-decoration:none}.neiki-gallery--filmstrip>.neiki-item>img,.neiki-gallery--filmstrip>a>img,.neiki-gallery--grid>.neiki-item>img,.neiki-gallery--grid>a>img,.neiki-gallery--masonry>.neiki-item>img,.neiki-gallery--masonry>a>img,.neiki-gallery--mosaic>.neiki-item>img,.neiki-gallery--mosaic>a>img{width:100%;border-radius:var(--neiki-border-radius,14px);transition:transform .4s var(--neiki-transition-easing),opacity .5s var(--neiki-transition-easing);opacity:0}.neiki-gallery--filmstrip>.neiki-item>img.neiki-loaded,.neiki-gallery--filmstrip>a>img.neiki-loaded,.neiki-gallery--grid>.neiki-item>img.neiki-loaded,.neiki-gallery--grid>a>img.neiki-loaded,.neiki-gallery--masonry>.neiki-item>img.neiki-loaded,.neiki-gallery--masonry>a>img.neiki-loaded,.neiki-gallery--mosaic>.neiki-item>img.neiki-loaded,.neiki-gallery--mosaic>a>img.neiki-loaded{opacity:1}.neiki-exif,.neiki-lightbox__counter{font-variant-numeric:tabular-nums;white-space:nowrap}:root{--neiki-columns:4;--neiki-gap:14px;--neiki-border-radius:14px;--neiki-accent:#3b82f6;--neiki-accent-hover:#2563eb;--neiki-overlay-backdrop:blur(24px) saturate(1.2);--neiki-lightbox-max-width:90vw;--neiki-lightbox-max-height:85vh;--neiki-btn-size:44px;--neiki-btn-border-radius:12px;--neiki-btn-backdrop:blur(12px) saturate(1.4);--neiki-font:system-ui,-apple-system,'Segoe UI',sans-serif;--neiki-caption-font-size:14px;--neiki-counter-font-size:12px;--neiki-thumb-size:52px;--neiki-thumb-gap:6px;--neiki-thumb-border-radius:8px;--neiki-thumb-opacity:0.5;--neiki-thumb-active-opacity:1;--neiki-spinner-size:36px;--neiki-spinner-width:3px;--neiki-transition-duration:0.3s;--neiki-transition-easing:cubic-bezier(0.4, 0, 0.2, 1);--neiki-zoom-scale:2;--neiki-stagger-delay:0.04s;--neiki-hover-lift:-4px;--neiki-hover-shadow:0 12px 32px rgba(0, 0, 0, 0.25)}.neiki-gallery[data-theme=light],[data-theme=light]{--neiki-overlay-bg:rgba(245, 245, 247, 0.88);--neiki-btn-bg:rgba(0, 0, 0, 0.06);--neiki-btn-bg-hover:rgba(0, 0, 0, 0.12);--neiki-btn-color:#1a1a1a;--neiki-caption-color:#1a1a1a;--neiki-counter-color:rgba(0, 0, 0, 0.5);--neiki-hover-shadow:0 12px 32px rgba(0, 0, 0, 0.12)}.neiki-gallery{box-sizing:border-box;font-family:var(--neiki-font)}.neiki-gallery *,.neiki-gallery ::after,.neiki-gallery ::before{box-sizing:inherit}.neiki-gallery--masonry{column-count:var(--neiki-columns,4);column-gap:var(--neiki-gap,14px)}.neiki-gallery--masonry>.neiki-item,.neiki-gallery--masonry>a{display:inline-block;width:100%;margin-bottom:var(--neiki-gap,14px);break-inside:avoid;border-radius:var(--neiki-border-radius,14px);overflow:hidden}.neiki-gallery--masonry>.neiki-item>img,.neiki-gallery--masonry>a>img{display:block;height:auto;transform:scale(1)}.neiki-gallery--grid>.neiki-item:hover,.neiki-gallery--grid>a:hover,.neiki-gallery--masonry>.neiki-item:hover,.neiki-gallery--masonry>a:hover,.neiki-gallery--mosaic>.neiki-item:hover,.neiki-gallery--mosaic>a:hover{transform:translateY(var(--neiki-hover-lift));box-shadow:var(--neiki-hover-shadow)}.neiki-gallery--masonry>.neiki-item:hover>img,.neiki-gallery--masonry>a:hover>img{transform:scale(1.03)}.neiki-gallery--grid{display:grid;grid-template-columns:repeat(var(--neiki-columns,4),1fr);gap:var(--neiki-gap,14px)}.neiki-gallery--grid>.neiki-item,.neiki-gallery--grid>a{display:block;overflow:hidden;border-radius:var(--neiki-border-radius,14px);aspect-ratio:1/1}.neiki-gallery--grid>.neiki-item>img,.neiki-gallery--grid>a>img{display:block;height:100%;object-fit:cover}.neiki-gallery--grid>.neiki-item:hover>img,.neiki-gallery--grid>a:hover>img{transform:scale(1.05)}.neiki-gallery--mosaic{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:200px;gap:var(--neiki-gap,14px);grid-auto-flow:dense}.neiki-gallery--mosaic>.neiki-item,.neiki-gallery--mosaic>a{display:block;overflow:hidden;border-radius:var(--neiki-border-radius,14px)}.neiki-gallery--mosaic>.neiki-item[data-size=large],.neiki-gallery--mosaic>a[data-size=large]{grid-column:span 2;grid-row:span 2}.neiki-gallery--mosaic>.neiki-item[data-size=wide],.neiki-gallery--mosaic>a[data-size=wide]{grid-column:span 2}.neiki-gallery--mosaic>.neiki-item[data-size=tall],.neiki-gallery--mosaic>a[data-size=tall]{grid-row:span 2}.neiki-gallery--mosaic>.neiki-item>img,.neiki-gallery--mosaic>a>img{display:block;height:100%;object-fit:cover}.neiki-gallery--mosaic>.neiki-item:hover>img,.neiki-gallery--mosaic>a:hover>img{transform:scale(1.04)}.neiki-gallery--filmstrip{display:flex;gap:var(--neiki-gap,14px);overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:4px}.neiki-gallery--filmstrip::-webkit-scrollbar{display:none}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{flex:0 0 auto;width:280px;height:360px;scroll-snap-align:center;border-radius:var(--neiki-border-radius,14px);overflow:hidden}.neiki-gallery--filmstrip>.neiki-item>img,.neiki-gallery--filmstrip>a>img{display:block;height:100%;object-fit:cover}.neiki-compare__handle::after,.neiki-gallery>.neiki-item.neiki-filter-hidden,.neiki-gallery>a.neiki-filter-hidden,.neiki-lightbox--pip .neiki-exif,.neiki-lightbox--pip .neiki-lightbox__caption,.neiki-lightbox--pip .neiki-lightbox__thumbs,.neiki-lightbox--pip .neiki-lightbox__topbar,.neiki-lightbox--pip .neiki-palette,.neiki-lightbox__spinner.neiki-hidden{display:none}.neiki-gallery--filmstrip>.neiki-item:hover,.neiki-gallery--filmstrip>a:hover{transform:translateY(var(--neiki-hover-lift)) scale(1.02);box-shadow:var(--neiki-hover-shadow)}.neiki-gallery--stagger>.neiki-item,.neiki-gallery--stagger>a{transform:translateY(20px);animation:neiki-stagger-in .5s var(--neiki-transition-easing) forwards}@keyframes neiki-stagger-in{to{transform:translateY(0)}}.neiki-gallery>.neiki-item.neiki-selected,.neiki-gallery>a.neiki-selected{outline:3px solid var(--neiki-accent);outline-offset:-3px}.neiki-gallery>.neiki-item.neiki-selected::after,.neiki-gallery>a.neiki-selected::after{content:'';position:absolute;top:8px;right:8px;width:24px;height:24px;background:var(--neiki-accent);border-radius:50%;z-index:5;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E\");background-size:14px;background-repeat:no-repeat;background-position:center}.neiki-filter-bar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;font-family:var(--neiki-font)}.neiki-filter-btn{display:inline-flex;align-items:center;padding:6px 16px;border:1px solid rgba(128,128,128,.25);border-radius:999px;background:0 0;color:inherit;font-size:13px;font-family:inherit;cursor:pointer;transition:all .2s var(--neiki-transition-easing);-webkit-appearance:none;appearance:none;outline:0}.neiki-filter-btn:hover{border-color:var(--neiki-accent);color:var(--neiki-accent)}.neiki-filter-btn.neiki-filter--active{background:var(--neiki-accent);border-color:var(--neiki-accent);color:#fff}.neiki-filter-btn:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.4)}@media (max-width:1200px){.neiki-gallery--masonry{column-count:3}.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(3,1fr)}}@media (max-width:900px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(2,1fr)}.neiki-gallery--masonry{column-count:2}.neiki-gallery--mosaic{grid-auto-rows:160px}.neiki-gallery{--neiki-gap:10px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:220px;height:300px}}.neiki-lightbox{position:fixed;inset:0;z-index:999999;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--neiki-overlay-bg);-webkit-backdrop-filter:var(--neiki-overlay-backdrop);backdrop-filter:var(--neiki-overlay-backdrop);opacity:0;visibility:hidden;transition:opacity .35s var(--neiki-transition-easing),visibility 0s linear .35s;-webkit-user-select:none;user-select:none;outline:0;font-family:var(--neiki-font)}.neiki-lightbox__slide-wrapper,.neiki-lightbox__stage{display:flex;align-items:center;width:100%;position:relative}.neiki-lightbox.neiki-lightbox--visible{opacity:1;visibility:visible;transition:opacity .35s var(--neiki-transition-easing),visibility 0s linear 0s}.neiki-lightbox__stage{justify-content:center;flex:1 1 auto;min-height:0;overflow:hidden}.neiki-lightbox__slide-wrapper{justify-content:center;height:100%}.neiki-lightbox__btn,.neiki-lightbox__topbar{z-index:10;display:flex;align-items:center;position:absolute}.neiki-lightbox--fade .neiki-lightbox__image{transition:opacity var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox--fade .neiki-lightbox__image.neiki-entering{opacity:0}.neiki-lightbox--fade .neiki-lightbox__image.neiki-active{opacity:1}.neiki-lightbox--slide .neiki-lightbox__slide-wrapper{transition:transform var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox__image{max-width:var(--neiki-lightbox-max-width,90vw);max-height:var(--neiki-lightbox-max-height,85vh);width:auto;height:auto;object-fit:contain;border-radius:var(--neiki-border-radius,14px);cursor:zoom-in;transition:transform .35s var(--neiki-transition-easing),opacity var(--neiki-transition-duration) var(--neiki-transition-easing);-webkit-user-drag:none;pointer-events:auto}.neiki-lightbox__image.neiki-zoomed{transform:scale(var(--neiki-zoom-scale,2));cursor:zoom-out}.neiki-lightbox__image.neiki-zoom-pan{cursor:grab;transform-origin:var(--neiki-zoom-x,center) var(--neiki-zoom-y,center);transform:scale(var(--neiki-zoom-scale,2))}.neiki-draggable:active,.neiki-lightbox__image.neiki-zoom-pan:active{cursor:grabbing}.neiki-lightbox__btn{justify-content:center;width:var(--neiki-btn-size);height:var(--neiki-btn-size);border:1px solid rgba(255,255,255,.08);border-radius:var(--neiki-btn-border-radius);background:var(--neiki-btn-bg);-webkit-backdrop-filter:var(--neiki-btn-backdrop);backdrop-filter:var(--neiki-btn-backdrop);color:var(--neiki-btn-color);cursor:pointer;transition:background .2s var(--neiki-transition-easing),transform .15s ease,border-color .2s ease;padding:0;line-height:1;font-family:inherit;-webkit-appearance:none;appearance:none;outline:0}.neiki-compare,.neiki-lightbox__caption,.neiki-lightbox__counter,.neiki-share{font-family:var(--neiki-font)}.neiki-lightbox__btn:hover{background:var(--neiki-btn-bg-hover);border-color:rgba(255,255,255,.15)}.neiki-lightbox__btn:active{transform:scale(.92)}.neiki-lightbox__next:active,.neiki-lightbox__prev:active{transform:translateY(-50%) scale(.92)}.neiki-lightbox__btn:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.5)}.neiki-lightbox__btn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-lightbox__toolbar{position:absolute;top:16px;right:16px;z-index:10;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:4px;padding:4px;max-width:calc(100vw - 80px);background:rgba(0,0,0,.25);-webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);border:1px solid rgba(255,255,255,.08);border-radius:16px}.neiki-lightbox__toolbar .neiki-lightbox__btn{position:relative;top:auto;right:auto;left:auto;bottom:auto;border:none;background:0 0;-webkit-backdrop-filter:none;backdrop-filter:none;width:36px;height:36px;border-radius:10px}[data-theme=light] .neiki-lightbox__counter,[data-theme=light] .neiki-lightbox__toolbar{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.06)}.neiki-lightbox__toolbar .neiki-lightbox__btn:hover{background:rgba(255,255,255,.12)}.neiki-lightbox__toolbar .neiki-lightbox__btn svg{width:18px;height:18px}[data-theme=light] .neiki-lightbox__toolbar .neiki-lightbox__btn:hover{background:rgba(0,0,0,.08)}.neiki-lightbox__prev{left:16px;top:50%;transform:translateY(-50%)}.neiki-lightbox__next{right:16px;top:50%;transform:translateY(-50%)}.neiki-lightbox__topbar{top:16px;left:16px;gap:8px}.neiki-lightbox__counter{display:inline-flex;align-items:center;padding:4px 12px;background:rgba(0,0,0,.3);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:999px;color:var(--neiki-counter-color);font-size:var(--neiki-counter-font-size)}.neiki-lightbox__caption{flex:0 0 auto;width:100%;text-align:center;padding:10px 80px;color:var(--neiki-caption-color);font-size:var(--neiki-caption-font-size);line-height:1.5;min-height:1.5em;transition:opacity var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox__thumbs{flex:0 0 auto;width:100%;display:flex;align-items:center;justify-content:center;gap:var(--neiki-thumb-gap);padding:8px 16px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.neiki-lightbox__thumbs::-webkit-scrollbar{display:none}.neiki-lightbox__thumb{flex:0 0 auto;width:var(--neiki-thumb-size);height:var(--neiki-thumb-size);border-radius:var(--neiki-thumb-border-radius);overflow:hidden;cursor:pointer;opacity:var(--neiki-thumb-opacity);border:2px solid transparent;transition:opacity .2s var(--neiki-transition-easing),border-color .2s var(--neiki-transition-easing),transform .2s var(--neiki-transition-easing);background:rgba(128,128,128,.15);padding:0;-webkit-appearance:none;appearance:none;outline:0}.neiki-lightbox__thumb:hover{opacity:.8;transform:scale(1.08)}.neiki-lightbox__thumb.neiki-thumb--active{opacity:var(--neiki-thumb-active-opacity);border:var(--neiki-thumb-active-border);transform:scale(1.08)}.neiki-lightbox__thumb:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.5)}.neiki-lightbox__thumb img{display:block;width:100%;height:100%;object-fit:cover}.neiki-lightbox__progress{position:absolute;bottom:0;left:0;height:3px;background:var(--neiki-accent);border-radius:0 3px 3px 0;width:0%;z-index:15;transition:none}.neiki-lightbox__progress.neiki-progress--running{transition:width linear}.neiki-lightbox__progress.neiki-progress--paused{transition:none}.neiki-compare{position:relative;overflow:hidden;border-radius:var(--neiki-border-radius,14px);cursor:col-resize;-webkit-user-select:none;user-select:none}.neiki-compare__after,.neiki-compare__before{display:block;width:100%;height:auto;-webkit-user-drag:none}.neiki-compare__after{position:absolute;top:0;left:0;height:100%;object-fit:cover;clip-path:inset(0 0 0 50%)}.neiki-compare__handle{position:absolute;top:0;left:50%;width:4px;height:100%;background:#fff;transform:translateX(-50%);z-index:5;box-shadow:0 0 8px rgba(0,0,0,.4)}.neiki-compare__handle::after,.neiki-compare__handle::before{content:'';position:absolute;left:50%;transform:translateX(-50%);width:32px;height:32px;background:#fff;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.3)}.neiki-compare__handle::before{top:50%;margin-top:-16px;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='15 18 9 12 15 6'/%3E%3C/svg%3E\");background-size:16px;background-repeat:no-repeat;background-position:6px center}.neiki-compare__label{position:absolute;bottom:12px;padding:4px 12px;background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:999px;color:#fff;font-size:12px;font-weight:500;z-index:4;pointer-events:none}.neiki-compare__label--before{left:12px}.neiki-compare__label--after{right:12px}.neiki-share{position:absolute;bottom:60px;right:16px;z-index:20;display:flex;flex-direction:column;gap:4px;padding:8px;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(20px) saturate(1.3);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:16px;opacity:0;transform:translateY(8px);visibility:hidden;transition:opacity .2s,transform .2s,visibility 0s linear .2s}.neiki-share.neiki-share--visible{opacity:1;transform:translateY(0);visibility:visible;transition:opacity .2s,transform .2s,visibility linear}.neiki-share__btn{display:flex;align-items:center;gap:10px;padding:8px 14px;border:none;border-radius:10px;background:0 0;color:#fff;font-size:13px;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .15s;-webkit-appearance:none;appearance:none;outline:0}.neiki-exif,.neiki-story,.neiki-toast{font-family:var(--neiki-font)}.neiki-share__btn:hover{background:rgba(255,255,255,.12)}.neiki-share__btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}[data-theme=light] .neiki-share{background:rgba(255,255,255,.6);border-color:rgba(0,0,0,.06)}[data-theme=light] .neiki-share__btn{color:#1a1a1a}[data-theme=light] .neiki-share__btn:hover{background:rgba(0,0,0,.06)}.neiki-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(16px);padding:10px 20px;background:rgba(0,0,0,.7);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:12px;color:#fff;font-size:13px;z-index:9999999;opacity:0;transition:opacity .25s,transform .25s;pointer-events:none}.neiki-toast.neiki-toast--visible{opacity:1;transform:translateX(-50%) translateY(0)}.neiki-lightbox__spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:var(--neiki-spinner-size);height:var(--neiki-spinner-size);border:var(--neiki-spinner-width) solid rgba(128,128,128,.2);border-top-color:var(--neiki-spinner-color);border-radius:50%;animation:.7s linear infinite neiki-spin;pointer-events:none;z-index:5}.neiki-gallery>.neiki-item,.neiki-gallery>a{background:linear-gradient(110deg,#e8e8e8 8%,#f5f5f5 18%,#e8e8e8 33%);background-size:200% 100%;animation:1.4s linear infinite neiki-shimmer}.neiki-gallery[data-theme=dark]>.neiki-item,.neiki-gallery[data-theme=dark]>a,[data-theme=dark] .neiki-gallery>.neiki-item,[data-theme=dark] .neiki-gallery>a{background:linear-gradient(110deg,#1e1e22 8%,#2a2a30 18%,#1e1e22 33%);background-size:200% 100%}@keyframes neiki-shimmer{to{background-position:-200% 0}}.neiki-lightbox--pip{inset:auto;top:auto;left:auto;right:20px;bottom:20px;width:360px;height:280px;border-radius:16px;box-shadow:0 8px 40px rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.1);resize:both;overflow:hidden;z-index:999998}.neiki-lightbox--pip .neiki-lightbox__toolbar{top:8px;right:8px;padding:2px;border-radius:10px}.neiki-lightbox--pip .neiki-lightbox__next,.neiki-lightbox--pip .neiki-lightbox__prev,.neiki-lightbox--pip .neiki-lightbox__toolbar .neiki-lightbox__btn{width:28px;height:28px}.neiki-lightbox--pip .neiki-lightbox__next svg,.neiki-lightbox--pip .neiki-lightbox__prev svg,.neiki-lightbox--pip .neiki-lightbox__toolbar .neiki-lightbox__btn svg{width:14px;height:14px}.neiki-lightbox--pip .neiki-lightbox__image{max-width:100%;max-height:100%;border-radius:0}.neiki-story{position:fixed;inset:0;z-index:9999999;background:#000;display:flex;align-items:center;justify-content:center;overflow:hidden}.neiki-story__slide{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .4s;pointer-events:none}.neiki-editor--visible,.neiki-palette--visible,.neiki-shortcuts--visible,.neiki-story__slide--active{opacity:1;pointer-events:auto}.neiki-story__image{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none}.neiki-story__caption{position:absolute;bottom:60px;left:0;right:0;text-align:center;color:#fff;font-size:15px;padding:8px 20px;text-shadow:0 1px 4px rgba(0,0,0,.6)}.neiki-story__close,.neiki-story__progress-wrap{position:absolute;right:16px;display:flex;z-index:10}.neiki-story__close{top:16px;width:40px;height:40px;align-items:center;justify-content:center;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.1);border-radius:50%;color:#fff;cursor:pointer;padding:0;-webkit-appearance:none;appearance:none;outline:0}.neiki-story__close svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-story__close:hover{background:rgba(255,255,255,.15)}.neiki-story__progress-wrap{top:8px;left:16px;gap:4px}.neiki-story__progress-bar{flex:1;height:3px;background:rgba(255,255,255,.25);border-radius:3px;overflow:hidden}.neiki-story__progress-fill{width:0%;height:100%;background:#fff;border-radius:3px;transition:none}.neiki-exif,.neiki-palette{left:50%;transform:translateX(-50%);z-index:12;transition:opacity .3s;position:absolute;pointer-events:none}.neiki-exif{bottom:48px;display:inline-flex;align-items:center;padding:5px 14px;background:rgba(0,0,0,.35);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:999px;color:rgba(255,255,255,.6);font-size:11px;opacity:0}.neiki-exif--visible{opacity:1}[data-theme=light] .neiki-exif{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.06);color:rgba(0,0,0,.5)}.neiki-palette{top:16px;display:flex;align-items:center;gap:6px;padding:5px 10px;background:rgba(0,0,0,.25);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.06);border-radius:999px;opacity:0}.neiki-palette__dot{display:block;width:16px;height:16px;border-radius:50%;border:1.5px solid rgba(255,255,255,.2);cursor:pointer;transition:transform .15s}.neiki-palette__dot:hover{transform:scale(1.3)}.neiki-draggable{cursor:grab}.neiki-dragging{opacity:.4;transform:scale(.96)}.neiki-drag-over{outline:2px dashed var(--neiki-accent);outline-offset:-2px}.neiki-virtual-hidden{content-visibility:hidden;contain-intrinsic-size:auto 300px}.neiki-lightbox--tinted{background:rgba(var(--neiki-tint-r,8),var(--neiki-tint-g,8),var(--neiki-tint-b,12),.82);transition:background .6s}@media (max-width:768px){.neiki-lightbox{--neiki-lightbox-max-width:94vw;--neiki-lightbox-max-height:75vh;--neiki-btn-size:40px;--neiki-zoom-scale:1.8}.neiki-lightbox__next,.neiki-lightbox__prev{width:40px;height:40px}.neiki-lightbox__btn svg{width:18px;height:18px}.neiki-lightbox__thumbs{padding:6px 10px 10px}.neiki-lightbox__thumb{width:44px;height:44px}.neiki-lightbox__toolbar{top:10px;right:10px;gap:4px;padding:3px;max-width:calc(100vw - 60px);border-radius:14px}.neiki-lightbox__toolbar .neiki-lightbox__btn{width:34px;height:34px}.neiki-lightbox__caption{position:relative;padding:12px 16px;background:rgba(0,0,0,.2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:16px 16px 0 0;text-align:left;font-size:13px}[data-theme=light] .neiki-lightbox__caption{background:rgba(255,255,255,.4)}}@media (max-width:600px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(2,1fr)}.neiki-gallery--masonry{column-count:2}.neiki-gallery--mosaic{grid-auto-rows:140px}.neiki-gallery{--neiki-gap:8px;--neiki-border-radius:10px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:180px;height:240px}.neiki-lightbox{--neiki-lightbox-max-width:96vw;--neiki-lightbox-max-height:70vh;--neiki-btn-size:36px;--neiki-zoom-scale:1.6}.neiki-lightbox__next,.neiki-lightbox__prev{width:36px;height:36px}.neiki-lightbox__prev{left:6px}.neiki-lightbox__next{right:6px}.neiki-lightbox__topbar{top:10px;left:10px}.neiki-lightbox__caption{padding:8px 14px;font-size:12px}.neiki-lightbox__thumbs{padding:4px 6px 8px}.neiki-lightbox__thumb{width:38px;height:38px}.neiki-share{bottom:50px;right:10px}}@media (max-width:400px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:1fr}.neiki-gallery--masonry{column-count:1}.neiki-gallery--mosaic{grid-auto-rows:200px}.neiki-gallery--mosaic>.neiki-item[data-size=large],.neiki-gallery--mosaic>.neiki-item[data-size=wide],.neiki-gallery--mosaic>a[data-size=large],.neiki-gallery--mosaic>a[data-size=wide]{grid-column:span 1}.neiki-gallery{--neiki-gap:8px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:160px;height:220px}.neiki-lightbox{--neiki-lightbox-max-width:98vw;--neiki-lightbox-max-height:65vh;--neiki-btn-size:32px}.neiki-lightbox__next,.neiki-lightbox__prev,.neiki-lightbox__thumb{width:32px;height:32px}.neiki-lightbox__btn svg{width:16px;height:16px}.neiki-lightbox__caption{padding:6px 10px;font-size:11px}.neiki-lightbox__counter{font-size:11px;padding:3px 8px}.neiki-filter-bar{gap:6px}.neiki-filter-btn{padding:4px 12px;font-size:12px}}.neiki-lightbox__embed,.neiki-lightbox__video{display:block;max-width:var(--neiki-lightbox-max-width,90vw);max-height:var(--neiki-lightbox-max-height,85vh);width:auto;height:auto;border-radius:var(--neiki-border-radius,14px);background:#000;outline:0}.neiki-lightbox__embed{width:min(90vw,1200px);aspect-ratio:16/9;height:auto}.neiki-gallery>a[data-type=video]::after,.neiki-gallery>a[data-type=vimeo]::after,.neiki-gallery>a[data-type=youtube]::after,.neiki-gallery>a[href*=\".mp4\"]::after,.neiki-gallery>a[href*=\".webm\"]::after,.neiki-gallery>a[href*=\"vimeo.com\"]::after,.neiki-gallery>a[href*=\"youtu.be\"]::after,.neiki-gallery>a[href*=\"youtube.com\"]::after{content:\"\";position:absolute;inset:50% auto auto 50%;transform:translate(-50%,-50%);width:56px;height:56px;background:rgba(0,0,0,.6);border-radius:50%;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'><polygon points='6 4 20 12 6 20'/></svg>\");background-repeat:no-repeat;background-position:56% 50%;background-size:22px 22px;pointer-events:none;opacity:.9;transition:transform .2s,opacity .2s}.neiki-gallery>a:hover::after{transform:translate(-50%,-50%) scale(1.08);opacity:1}.neiki-lightbox__fav svg{fill:none;transition:fill .2s,transform .2s}.neiki-lightbox__fav--active svg{fill:#ef4444;stroke:#ef4444;animation:.4s neiki-fav-pop}@keyframes neiki-fav-pop{0%,100%{transform:scale(1)}50%{transform:scale(1.3)}}.neiki-favorited{position:relative}.neiki-favorited::before{content:\"\";position:absolute;top:8px;right:8px;width:22px;height:22px;background:rgba(239,68,68,.95);background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'><path d='M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z'/></svg>\");background-repeat:no-repeat;background-position:center;background-size:14px 14px;border-radius:50%;z-index:3;box-shadow:0 2px 8px rgba(0,0,0,.3);pointer-events:none}.neiki-lightbox__info{position:absolute;top:0;right:0;height:100%;width:min(360px,92vw);z-index:30;background:rgba(15,18,24,.92);-webkit-backdrop-filter:blur(20px) saturate(1.2);backdrop-filter:blur(20px) saturate(1.2);color:rgba(255,255,255,.92);border-left:1px solid rgba(255,255,255,.08);transform:translateX(100%);transition:transform .32s cubic-bezier(.4, 0, .2, 1);display:flex;flex-direction:column}.neiki-context-menu,.neiki-editor__toolbar{-webkit-backdrop-filter:blur(20px) saturate(1.3)}.neiki-lightbox--info-open .neiki-lightbox__info{transform:translateX(0)}.neiki-info__header{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid rgba(255,255,255,.08)}.neiki-info__title{margin:0;font-size:15px;font-weight:600;letter-spacing:.01em}.neiki-info__close{background:0 0;border:none;cursor:pointer;padding:6px;color:inherit;border-radius:8px;transition:background .15s}.neiki-info__close:hover{background:rgba(255,255,255,.08)}.neiki-info__close svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-info__body{padding:18px 20px;overflow-y:auto;flex:1;font-size:13px;line-height:1.55}.neiki-info__list{margin:0;display:grid;grid-template-columns:110px 1fr;gap:8px 12px}.neiki-info__list dt{color:rgba(255,255,255,.55);font-weight:500}.neiki-info__list dd{margin:0;word-break:break-word}.neiki-info__list dd a{color:var(--neiki-accent,#3b82f6);text-decoration:none}.neiki-info__list dd a:hover{text-decoration:underline}.neiki-info__subtitle{margin:22px 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:rgba(255,255,255,.5)}[data-theme=light] .neiki-lightbox__info{background:rgba(255,255,255,.94);color:#18181b;border-left-color:rgba(0,0,0,.08)}[data-theme=light] .neiki-info__list dt{color:rgba(0,0,0,.55)}.neiki-context-menu{position:fixed;z-index:9999;min-width:200px;padding:6px;background:rgba(20,22,28,.92);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:12px;box-shadow:0 12px 36px rgba(0,0,0,.4);opacity:0;transform:scale(.96);pointer-events:none;transition:opacity .14s,transform .14s}.neiki-context-menu--visible{opacity:1;transform:scale(1);pointer-events:auto}.neiki-editor,.neiki-shortcuts{opacity:0;pointer-events:none;position:absolute}.neiki-context-menu__item{width:100%;display:flex;align-items:center;gap:10px;padding:8px 12px;background:0 0;border:none;cursor:pointer;color:rgba(255,255,255,.92);font-size:13px;border-radius:8px;text-align:left;font-family:inherit}.neiki-shortcuts__keys kbd,.neiki-shortcuts__panel{border:1px solid rgba(255,255,255,.1);color:rgba(255,255,255,.92)}.neiki-context-menu__item:hover{background:rgba(255,255,255,.08)}.neiki-context-menu__icon{display:inline-flex;width:16px;height:16px;flex-shrink:0}.neiki-context-menu__icon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}[data-theme=light] .neiki-context-menu{background:rgba(255,255,255,.95);border-color:rgba(0,0,0,.08);color:#18181b}.neiki-shortcuts__close:hover,.neiki-shortcuts__keys kbd{background:rgba(255,255,255,.08)}[data-theme=light] .neiki-context-menu__item{color:#18181b}[data-theme=light] .neiki-context-menu__item:hover{background:rgba(0,0,0,.06)}.neiki-shortcuts{inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:opacity .2s}.neiki-shortcuts__panel{background:rgba(20,22,28,.96);border-radius:16px;padding:20px 24px;min-width:320px;max-width:90vw;max-height:80vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.5)}.neiki-shortcuts__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.neiki-shortcuts__header h3{margin:0;font-size:16px;font-weight:600}.neiki-shortcuts__close{background:0 0;border:none;cursor:pointer;padding:6px;color:inherit;border-radius:8px}.neiki-shortcuts__close svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-shortcuts__list{list-style:none;margin:0;padding:0;display:grid;gap:10px}.neiki-shortcuts__list li{display:flex;align-items:center;justify-content:space-between;gap:16px;font-size:13px}.neiki-shortcuts__keys kbd{display:inline-block;padding:3px 8px;border-radius:6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;margin-right:4px}.neiki-shortcuts__desc{color:rgba(255,255,255,.7)}[data-theme=light] .neiki-shortcuts__panel{background:rgba(255,255,255,.98);color:#18181b;border-color:rgba(0,0,0,.08)}[data-theme=light] .neiki-shortcuts__keys kbd{background:rgba(0,0,0,.06);border-color:rgba(0,0,0,.1);color:#18181b}[data-theme=light] .neiki-shortcuts__desc{color:rgba(0,0,0,.6)}.neiki-editor{bottom:80px;left:50%;transform:translateX(-50%);z-index:35;transition:opacity .2s,transform .2s}.neiki-annotate__btn,.neiki-editor__btn{min-width:36px;font-family:inherit;transition:background .15s;font-size:13px}.neiki-editor__toolbar{display:flex;gap:6px;align-items:center;padding:6px;background:rgba(20,22,28,.92);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.4)}.neiki-editor__btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 10px;background:0 0;border:none;color:rgba(255,255,255,.92);border-radius:10px;cursor:pointer}.neiki-editor__btn:hover{background:rgba(255,255,255,.1)}.neiki-editor__btn--primary{background:var(--neiki-accent,#3b82f6);color:#fff}.neiki-editor__btn--primary:hover{background:var(--neiki-accent-hover,#2563eb)}.neiki-annotate__btn:hover,.neiki-editor__sep{background:rgba(255,255,255,.1)}.neiki-editor__btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-editor__sep{width:1px;height:22px;margin:0 4px}.neiki-annotate{position:absolute;inset:0;z-index:40;display:none;align-items:center;justify-content:center}.neiki-annotate--visible{display:flex}.neiki-annotate__canvas{max-width:var(--neiki-lightbox-max-width,90vw);max-height:calc(var(--neiki-lightbox-max-height,85vh) - 60px);background:0 0;cursor:crosshair;border-radius:var(--neiki-border-radius,14px);touch-action:none}.neiki-annotate__toolbar{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);display:flex;gap:8px;align-items:center;padding:8px;background:rgba(20,22,28,.92);-webkit-backdrop-filter:blur(20px) saturate(1.3);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.4)}.neiki-annotate__color{width:36px;height:36px;padding:0;border:1px solid rgba(255,255,255,.15);border-radius:10px;background:0 0;cursor:pointer}.neiki-annotate__size{width:100px;accent-color:var(--neiki-accent,#3b82f6)}.neiki-annotate__btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 10px;background:0 0;border:none;color:rgba(255,255,255,.92);border-radius:10px;cursor:pointer}.neiki-annotate__btn--primary{background:var(--neiki-accent,#3b82f6);color:#fff}.neiki-annotate__btn--primary:hover{background:var(--neiki-accent-hover,#2563eb)}.neiki-infinite-sentinel{height:80px;width:100%;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.5);font-size:13px}.neiki-infinite-sentinel--loading::after{content:\"\";width:22px;height:22px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:.7s linear infinite neiki-spin}@keyframes neiki-spin{to{transform:translate(-50%,-50%) rotate(360deg);transform:rotate(360deg)}}.neiki-infinite-sentinel--done::after{content:\"โ end โ\";font-size:12px;opacity:.6}.neiki-kenburns{animation:neiki-kenburns var(--neiki-kenburns-duration,4000ms) ease-in-out forwards;transform-origin:center}@keyframes neiki-kenburns{0%{transform:scale(1) translate(0,0)}100%{transform:scale(1.08) translate(-1.5%,-1.2%)}}.neiki-lightbox--info-open .neiki-lightbox__caption,.neiki-lightbox--info-open .neiki-lightbox__stage{width:calc(100% - min(360px,92vw));margin-right:auto;margin-left:0;transition:width .32s cubic-bezier(.4, 0, .2, 1)}@media (max-width:700px){.neiki-lightbox--info-open .neiki-lightbox__caption,.neiki-lightbox--info-open .neiki-lightbox__stage{width:100%}}@media (prefers-reduced-motion:reduce){*,::after,::before{transition-duration:0s!important;animation-duration:0s!important;animation-iteration-count:1!important}.neiki-fav-pop,.neiki-kenburns{animation:none}}",document.head.appendChild(t)}}();var t=0;function i(t,i){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);if(i)for(var n in i)i.hasOwnProperty(n)&&(e[n]=i[n]);return e}function e(t,i){return(i||document).querySelector(t)}function n(t,i){return Array.prototype.slice.call((i||document).querySelectorAll(t))}function o(t,i,e,n){var o=document.createElement(t);if(i&&(o.className=i),e)for(var r in e)e.hasOwnProperty(r)&&o.setAttribute(r,e[r]);return n&&(o.innerHTML=n),o}function r(t){var i=document.querySelector(".neiki-toast");i&&i.remove();var e=o("div","neiki-toast",{},t);document.body.appendChild(e),requestAnimationFrame(function(){e.classList.add("neiki-toast--visible")}),setTimeout(function(){e.classList.remove("neiki-toast--visible"),setTimeout(function(){e.parentNode&&e.remove()},300)},2e3)}var a='<svg viewBox="0 0 24 24"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',s='<svg viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>',l='<svg viewBox="0 0 24 24"><polyline points="9 6 15 12 9 18"/></svg>',h='<svg viewBox="0 0 24 24"><polyline points="15 3 21 3 21 9"/><polyline points="9 21 3 21 3 15"/><line x1="21" y1="3" x2="14" y2="10"/><line x1="3" y1="21" x2="10" y2="14"/></svg>',d='<svg viewBox="0 0 24 24"><polyline points="4 14 10 14 10 20"/><polyline points="20 10 14 10 14 4"/><line x1="14" y1="10" x2="21" y2="3"/><line x1="3" y1="21" x2="10" y2="14"/></svg>',p='<svg viewBox="0 0 24 24"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg>',c='<svg viewBox="0 0 24 24"><polygon points="5 3 19 12 5 21 5 3"/></svg>',u='<svg viewBox="0 0 24 24"><rect x="6" y="4" width="4" height="16"/><rect x="14" y="4" width="4" height="16"/></svg>',g='<svg viewBox="0 0 24 24"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>',_='<svg viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>',b='<svg viewBox="0 0 24 24"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>',f='<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>',k='<svg viewBox="0 0 24 24"><polyline points="6 9 6 2 18 2 18 9"/><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><rect x="6" y="14" width="12" height="8"/></svg>',m='<svg viewBox="0 0 24 24"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>',v='<svg viewBox="0 0 24 24"><path d="M12 19l7-7 3 3-7 7-3-3z"/><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"/><path d="M2 2l7.586 7.586"/><circle cx="11" cy="11" r="2"/></svg>',x='<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>',y={layout:"masonry",loop:!1,thumbnails:!0,zoom:!0,contextualZoom:!1,fullscreen:!0,transition:"fade",theme:"system",hashNavigation:!0,counter:!0,counterFormat:"{current} / {total}",captions:!0,preload:1,lazyLoad:!0,stagger:!0,slideshow:!1,share:!0,filter:!1,batchSelect:!1,focusPoint:!0,blurhash:!0,exif:!1,storyMode:!1,pip:!1,virtualScroll:!1,dragReorder:!1,backdropTint:!1,morphTransition:!1,colorPalette:!1,aspectSkeleton:!0,video:!0,plugins:null,group:"",favorites:!1,favoritesKey:"",infoPanel:!1,contextMenu:!1,shortcutsHelp:!0,infiniteScroll:!1,loadMore:null,print:!1,editor:!1,annotate:!1};function w(n,o){if(!(this instanceof w))return new w(n,o);if(this._id=++t,this._events={},this._isOpen=!1,this._currentIndex=0,this._isZoomed=!1,this._isFullscreen=!1,this._destroyed=!1,this._boundHandlers={},this._slideshowTimer=null,this._slideshowRunning=!1,this._shareVisible=!1,this._selectedIndices=[],this._pipActive=!1,this._storyOpen=!1,this._dragState=null,this._virtualItems=null,this._colorCache={},this._container="string"==typeof n?e(n):n,this._container){var r=this._readDataAttributes();this._options=i(y,i(r,o)),this._resolveSystemTheme(),this._items=this._parseItems(),0!==this._items.length?(this._infoPanelOpen=!1,this._shortcutsOpen=!1,this._favorites=[],this._registerGroup(),this._loadFavorites(),this._setupGrid(),this._setupAspectSkeleton(),this._setupFocusPoint(),this._setupBlurhash(),this._setupLazyLoad(),this._setupStagger(),this._setupFilter(),this._setupVirtualScroll(),this._setupDragReorder(),this._setupInfiniteScroll(),this._buildLightbox(),this._buildInfoPanel(),this._buildShortcutsHelp(),this._buildEditor(),this._buildAnnotation(),this._buildContextMenu(),this._bindEvents(),this._bindContextMenu(),this._setupSlideshowPauseOnHover(),this._refreshAllFavoriteUI(),this._initPlugins(),this._checkHash()):console.warn("NeikiGallery: No items found in container.")}else console.warn('NeikiGallery: Container not found for selector "'+n+'"')}w.prototype._resolveSystemTheme=function(){if("system"===this._options.theme){var t=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;if(this._options.theme=t?"dark":"light",window.matchMedia){var i=this,e=window.matchMedia("(prefers-color-scheme: dark)");this._systemThemeListener=function(t){var e=t.matches?"dark":"light";i._options.theme=e,i._container&&i._container.setAttribute("data-theme",e),i._lightbox&&i._lightbox.setAttribute("data-theme",e)},e.addEventListener?e.addEventListener("change",this._systemThemeListener):e.addListener&&e.addListener(this._systemThemeListener),this._systemThemeMQ=e}}},w.prototype._resolveSlideshowOpts=function(){var t=this._options.slideshow;return t?"object"==typeof t?{enabled:!0,interval:t.interval||4e3,pauseOnHover:!!t.pauseOnHover,kenburns:!!t.kenburns,direction:t.direction||"forward"}:{enabled:!0,interval:4e3,pauseOnHover:!1,kenburns:!1,direction:"forward"}:null},w.prototype._readDataAttributes=function(){var t=this._container,i={},e=function(i){return t.hasAttribute(i)?"false"!==t.getAttribute(i):void 0},n=function(i){return t.hasAttribute(i)?t.getAttribute(i):void 0};void 0!==n("data-layout")&&(i.layout=n("data-layout")),void 0!==n("data-theme")&&(i.theme=n("data-theme")),void 0!==n("data-transition")&&(i.transition=n("data-transition")),void 0!==e("data-loop")&&(i.loop=e("data-loop")),void 0!==e("data-thumbnails")&&(i.thumbnails=e("data-thumbnails")),void 0!==e("data-zoom")&&(i.zoom=e("data-zoom")),void 0!==e("data-contextual-zoom")&&(i.contextualZoom=e("data-contextual-zoom")),void 0!==e("data-fullscreen")&&(i.fullscreen=e("data-fullscreen")),void 0!==e("data-hash-navigation")&&(i.hashNavigation=e("data-hash-navigation")),void 0!==e("data-stagger")&&(i.stagger=e("data-stagger"));var o=e("data-slideshow"),r=function(i){if(t.hasAttribute(i)){var e=parseInt(t.getAttribute(i),10);return isNaN(e)?void 0:e}}("data-slideshow-interval"),a=e("data-slideshow-pause-on-hover"),s=e("data-slideshow-kenburns");return void 0===o&&void 0===r&&void 0===a&&void 0===s||(i.slideshow=!1!==o&&{interval:void 0!==r?r:4e3,pauseOnHover:!!a,kenburns:!!s}),void 0!==n("data-counter-format")&&(i.counterFormat=n("data-counter-format")),void 0!==e("data-share")&&(i.share=e("data-share")),void 0!==e("data-filter")&&(i.filter=e("data-filter")),void 0!==e("data-batch-select")&&(i.batchSelect=e("data-batch-select")),void 0!==e("data-focus-point")&&(i.focusPoint=e("data-focus-point")),void 0!==e("data-blurhash")&&(i.blurhash=e("data-blurhash")),void 0!==e("data-exif")&&(i.exif=e("data-exif")),void 0!==e("data-story-mode")&&(i.storyMode=e("data-story-mode")),void 0!==e("data-pip")&&(i.pip=e("data-pip")),void 0!==e("data-virtual-scroll")&&(i.virtualScroll=e("data-virtual-scroll")),void 0!==e("data-drag-reorder")&&(i.dragReorder=e("data-drag-reorder")),void 0!==e("data-backdrop-tint")&&(i.backdropTint=e("data-backdrop-tint")),void 0!==e("data-morph-transition")&&(i.morphTransition=e("data-morph-transition")),void 0!==e("data-color-palette")&&(i.colorPalette=e("data-color-palette")),void 0!==e("data-aspect-skeleton")&&(i.aspectSkeleton=e("data-aspect-skeleton")),void 0!==e("data-video")&&(i.video=e("data-video")),void 0!==n("data-group")&&(i.group=n("data-group")),void 0!==e("data-favorites")&&(i.favorites=e("data-favorites")),void 0!==e("data-info-panel")&&(i.infoPanel=e("data-info-panel")),void 0!==e("data-context-menu")&&(i.contextMenu=e("data-context-menu")),void 0!==e("data-shortcuts-help")&&(i.shortcutsHelp=e("data-shortcuts-help")),void 0!==e("data-infinite-scroll")&&(i.infiniteScroll=e("data-infinite-scroll")),void 0!==e("data-print")&&(i.print=e("data-print")),void 0!==e("data-editor")&&(i.editor=e("data-editor")),void 0!==e("data-annotate")&&(i.annotate=e("data-annotate")),i},w.prototype._parseItems=function(){for(var t=n(":scope > a",this._container),i=[],o=0;o<t.length;o++){var r=t[o],a=e("img",r),s=r.getAttribute("href")||(a?a.getAttribute("src"):""),l=r.getAttribute("data-type");i.push({src:s,thumb:a?a.getAttribute("data-src")||a.getAttribute("src"):"",caption:r.getAttribute("data-caption")||(a?a.getAttribute("alt"):"")||"",tags:(r.getAttribute("data-tags")||"").split(",").map(function(t){return t.trim()}).filter(Boolean),size:r.getAttribute("data-size")||"",focus:r.getAttribute("data-focus")||(a?a.getAttribute("data-focus"):"")||"",blurhash:r.getAttribute("data-blurhash")||(a?a.getAttribute("data-blurhash"):"")||"",width:parseInt(r.getAttribute("data-width")||(a?a.getAttribute("data-width")||a.getAttribute("width"):""),10)||0,height:parseInt(r.getAttribute("data-height")||(a?a.getAttribute("data-height")||a.getAttribute("height"):""),10)||0,poster:r.getAttribute("data-poster")||"",group:r.getAttribute("data-group")||"",mediaType:l||(this._options.video?j(s):"image"),element:r,img:a}),r.addEventListener("click",function(t){t.preventDefault()})}return i},w.prototype._setupGrid=function(){var t=this._options.layout;switch(this._container.classList.add("neiki-gallery"),this._container.classList.remove("neiki-gallery--masonry","neiki-gallery--grid","neiki-gallery--mosaic","neiki-gallery--filmstrip"),t){case"grid":this._container.classList.add("neiki-gallery--grid");break;case"mosaic":this._container.classList.add("neiki-gallery--mosaic");break;case"filmstrip":this._container.classList.add("neiki-gallery--filmstrip");break;default:this._container.classList.add("neiki-gallery--masonry")}this._options.theme&&this._container.setAttribute("data-theme",this._options.theme)},w.prototype._setupLazyLoad=function(){var t=this;this._options.lazyLoad&&"IntersectionObserver"in window?(this._observer=new IntersectionObserver(function(i){i.forEach(function(i){if(i.isIntersecting){var e=i.target,n=e.getAttribute("data-src");n&&(e.src=n,e.removeAttribute("data-src")),e.addEventListener("load",function(){e.classList.add("neiki-loaded")}),e.complete&&e.naturalWidth&&e.classList.add("neiki-loaded"),t._observer.unobserve(e)}})},{rootMargin:"200px"}),this._items.forEach(function(i){if(i.img){var e=i.img;e.complete&&e.naturalWidth?e.classList.add("neiki-loaded"):(t._observer.observe(e),e.addEventListener("load",function(){e.classList.add("neiki-loaded")}),e.addEventListener("error",function(){e.classList.add("neiki-loaded")}),setTimeout(function(){e.complete&&!e.classList.contains("neiki-loaded")&&e.classList.add("neiki-loaded")},200),setTimeout(function(){e.classList.contains("neiki-loaded")||e.classList.add("neiki-loaded")},3e3))}})):this._items.forEach(function(t){t.img&&t.img.classList.add("neiki-loaded")})},w.prototype._setupStagger=function(){if(this._options.stagger){for(var t=n(":scope > a, :scope > .neiki-item",this._container),i=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--neiki-stagger-delay"))||.04,e=0;e<t.length;e++)t[e].style.animationDelay=e*i+"s";this._container.offsetHeight,this._container.classList.add("neiki-gallery--stagger")}},w.prototype._setupFilter=function(){if(this._options.filter){var t={};this._items.forEach(function(i){i.tags.forEach(function(i){t[i]=!0})});var i=Object.keys(t);if(0!==i.length){this._filterBar=o("div","neiki-filter-bar");var e=o("button","neiki-filter-btn neiki-filter--active",{type:"button"},"All");this._filterBar.appendChild(e);var n=this;this._activeFilter=null,e.addEventListener("click",function(){n._applyFilter(null)}),i.forEach(function(t){var i=o("button","neiki-filter-btn",{type:"button"},t);i.addEventListener("click",function(){n._applyFilter(t)}),n._filterBar.appendChild(i)}),this._container.parentNode.insertBefore(this._filterBar,this._container)}}},w.prototype._applyFilter=function(t){this._activeFilter=t,n(".neiki-filter-btn",this._filterBar).forEach(function(i){var e="All"===i.textContent;i.classList.toggle("neiki-filter--active",null===t?e:i.textContent===t)});this._items.forEach(function(i){null===t||-1!==i.tags.indexOf(t)?i.element.classList.remove("neiki-filter-hidden"):i.element.classList.add("neiki-filter-hidden")}),this._emit("filter",t)},w.prototype._setupAspectSkeleton=function(){this._options.aspectSkeleton&&this._items.forEach(function(t){t.width&&t.height&&t.element&&(t.element.style.aspectRatio=t.width+" / "+t.height)})},w.prototype._setupFocusPoint=function(){this._options.focusPoint&&this._items.forEach(function(t){if(t.focus&&t.img){var i=t.focus.trim().split(/\s+/);if(2===i.length){var e=(100*parseFloat(i[0])).toFixed(1),n=(100*parseFloat(i[1])).toFixed(1);t.img.style.objectPosition=e+"% "+n+"%"}}})};function L(t){for(var i=0,e=0;e<t.length;e++){i=83*i+"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~".indexOf(t[e])}return i}function C(t){var i=t/255;return i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)}function E(t){var i=Math.max(0,Math.min(1,t));return i<=.0031308?Math.round(12.92*i*255+.5):Math.round(255*(1.055*Math.pow(i,1/2.4)-.055)+.5)}function S(t,i){return(t<0?-1:1)*Math.pow(Math.abs(t),i)}function B(t,i){var e=Math.floor(t/361),n=Math.floor(t/19)%19,o=t%19;return[S((e-9)/9,2)*i,S((n-9)/9,2)*i,S((o-9)/9,2)*i]}function I(t,i,e){if(!t||t.length<6)return null;var n,o=L(t[0]),r=Math.floor(o/9)+1,a=o%9+1,s=(L(t[1])+1)/166,l=new Array(a*r);l[0]=[C((n=L(t.substring(2,6)))>>16),C(n>>8&255),C(255&n)];for(var h=1;h<a*r;h++)l[h]=B(L(t.substring(4+2*h,6+2*h)),s);for(var d=new Uint8ClampedArray(i*e*4),p=0;p<e;p++)for(var c=0;c<i;c++){for(var u=0,g=0,_=0,b=0;b<r;b++)for(var f=0;f<a;f++){var k=Math.cos(Math.PI*c*f/i)*Math.cos(Math.PI*p*b/e),m=l[f+b*a];u+=m[0]*k,g+=m[1]*k,_+=m[2]*k}var v=4*(c+p*i);d[v]=E(u),d[v+1]=E(g),d[v+2]=E(_),d[v+3]=255}return d}function M(t,i){var e=new Image;e.crossOrigin="anonymous",e.onload=function(){try{var t=document.createElement("canvas"),n=10;t.width=n,t.height=n;var o=t.getContext("2d");o.drawImage(e,0,0,n,n);for(var r=o.getImageData(0,0,n,n).data,a=0,s=0,l=0,h=0,d=0;d<r.length;d+=4)a+=r[d],s+=r[d+1],l+=r[d+2],h++;a=Math.round(a/h),s=Math.round(s/h),l=Math.round(l/h),i({r:a,g:s,b:l,hex:"#"+((1<<24)+(a<<16)+(s<<8)+l).toString(16).slice(1)})}catch(t){i(null)}},e.onerror=function(){i(null)},e.src=t}function P(t,i,e){var n=new Image;n.crossOrigin="anonymous",n.onload=function(){try{var t=document.createElement("canvas");t.width=50,t.height=50;var o=t.getContext("2d");o.drawImage(n,0,0,50,50);for(var r=o.getImageData(0,0,50,50).data,a=[],s=0;s<r.length;s+=4)a.push([r[s],r[s+1],r[s+2]]);var l=function(t,i){for(var e=[],n=Math.floor(t.length/i),o=0;o<i;o++)e.push(t[Math.min(o*n,t.length-1)].slice());for(var r=0;r<10;r++){for(var a=[],s=0;s<i;s++)a.push([]);for(var l=0;l<t.length;l++){var h=1/0,d=0;for(s=0;s<i;s++){var p=t[l][0]-e[s][0],c=t[l][1]-e[s][1],u=t[l][2]-e[s][2],g=p*p+c*c+u*u;g<h&&(h=g,d=s)}a[d].push(t[l])}for(s=0;s<i;s++)if(0!==a[s].length){for(var _=0,b=0,f=0,k=0;k<a[s].length;k++)_+=a[s][k][0],b+=a[s][k][1],f+=a[s][k][2];e[s]=[Math.round(_/a[s].length),Math.round(b/a[s].length),Math.round(f/a[s].length)]}}return e.map(function(t){return{r:t[0],g:t[1],b:t[2],hex:"#"+((1<<24)+(t[0]<<16)+(t[1]<<8)+t[2]).toString(16).slice(1)}})}(a,i||5);e(l)}catch(t){e([])}},n.onerror=function(){e([])},n.src=t}function z(t,i){var e=new XMLHttpRequest;e.open("GET",t,!0),e.responseType="arraybuffer",e.onload=function(){if(200===e.status)try{var t=new DataView(e.response);if(65496!==t.getUint16(0))return void i(null);for(var n=2;n<t.byteLength;){if(255!==t.getUint8(n))return void i(null);if(225===t.getUint8(n+1)){var o=A(t,n+4);return void i(o)}n+=2+t.getUint16(n+2)}i(null)}catch(t){i(null)}else i(null)},e.onerror=function(){i(null)},e.send()}function A(t,i){if(1165519206!==t.getUint32(i)||0!==t.getUint16(i+4))return null;for(var e=i+6,n=19789===t.getUint16(e),o=function(i){return n?t.getUint16(e+i):t.getUint16(e+i,!0)},r=function(i){return n?t.getUint32(e+i):t.getUint32(e+i,!0)},a=r(4),s=o(a),l={},h={271:"make",272:"model",34855:"iso",33434:"exposure",33437:"fNumber",37386:"focalLength"},d=0;d<s;d++){var p=o(m=a+2+12*d),c=o(m+2),u=h[p];if(u)if(3===c)l[u]=o(m+8);else if(4===c)l[u]=r(m+8);else if(5===c){var g=r(m+8);l[u]=r(g)/r(g+4)}else if(2===c){for(var _=r(m+4),b=_>4?r(m+8):m+8,f="",k=0;k<_-1;k++)f+=String.fromCharCode(t.getUint8(e+b+k));l[u]=f.trim()}}for(d=0;d<s;d++){var m;if(34665===o(m=a+2+12*d)){for(var v=r(m+8),x=o(v),y=0;y<x;y++){var w=v+2+12*y,L=o(w),C=o(w+2),E=h[L];if(E)if(3===C)l[E]=o(w+8);else if(4===C)l[E]=r(w+8);else if(5===C){var S=r(w+8);l[E]=r(S)/r(S+4)}}break}}return 0===Object.keys(l).length?null:l}w.prototype._setupBlurhash=function(){this._options.blurhash&&this._items.forEach(function(t){if(t.blurhash&&t.element){var i=I(t.blurhash,32,32);if(i)try{var e=document.createElement("canvas");e.width=32,e.height=32;var n=e.getContext("2d"),o=n.createImageData(32,32);o.data.set(i),n.putImageData(o,0,0),t.element.style.backgroundImage="url("+e.toDataURL()+")",t.element.style.backgroundSize="cover",t.element.style.backgroundPosition="center"}catch(t){}}})},w.prototype._setupVirtualScroll=function(){if(this._options.virtualScroll&&!(this._items.length<50)){var t=this;this._virtualObserver=new IntersectionObserver(function(t){t.forEach(function(t){var i=t.target;t.isIntersecting?(i.classList.remove("neiki-virtual-hidden"),i.style.contentVisibility="visible"):(i.classList.add("neiki-virtual-hidden"),i.style.contentVisibility="hidden")})},{rootMargin:"400px"}),this._items.forEach(function(i){i.element&&(i.element.style.containIntrinsicSize="auto 300px",t._virtualObserver.observe(i.element))})}},w.prototype._setupDragReorder=function(){if(this._options.dragReorder){var t=this,i=this._items,e=this._container;i.forEach(function(r){var a=r.element;a.setAttribute("draggable","true"),a.classList.add("neiki-draggable"),a.addEventListener("dragstart",function(i){var e=o(a);t._dragState={index:e,element:a},a.classList.add("neiki-dragging"),i.dataTransfer.effectAllowed="move",i.dataTransfer.setData("text/plain",String(e))}),a.addEventListener("dragover",function(t){t.preventDefault(),t.dataTransfer.dropEffect="move",a.classList.add("neiki-drag-over")}),a.addEventListener("dragleave",function(){a.classList.remove("neiki-drag-over")}),a.addEventListener("drop",function(n){if(n.preventDefault(),n.stopPropagation(),a.classList.remove("neiki-drag-over"),t._dragState){var r=t._dragState.element,s=o(r),l=o(a);if(-1!==s&&-1!==l&&s!==l){s<l?e.insertBefore(r,a.nextSibling):e.insertBefore(r,a);var h=i.splice(s,1)[0];i.splice(l>s?l-1:l,0,h),t._emit("reorder",t.getOrder())}}}),a.addEventListener("dragend",function(){a.classList.remove("neiki-dragging"),t._dragState=null,n(".neiki-drag-over",e).forEach(function(t){t.classList.remove("neiki-drag-over")})}),a.addEventListener("click",function(i){t._dragState&&i.preventDefault()})})}function o(t){for(var e=0;e<i.length;e++)if(i[e].element===t)return e;return-1}},w.prototype.getOrder=function(){return this._items.map(function(t,i){return{index:i,src:t.src,caption:t.caption}})},w.prototype._buildLightbox=function(){var t=this._options;if(this._lightbox=o("div","neiki-lightbox neiki-lightbox--"+t.transition,{role:"dialog","aria-modal":"true","aria-label":"Image lightbox",tabindex:"-1"}),t.theme&&this._lightbox.setAttribute("data-theme",t.theme),t.counter&&(this._topbar=o("div","neiki-lightbox__topbar"),this._counter=o("span","neiki-lightbox__counter",{"aria-live":"polite"}),this._topbar.appendChild(this._counter),this._lightbox.appendChild(this._topbar)),this._toolbar=o("div","neiki-lightbox__toolbar"),t.pip&&(this._pipBtn=o("button","neiki-lightbox__btn neiki-lightbox__pip",{"aria-label":"Picture in Picture",type:"button"},'<svg viewBox="0 0 24 24"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><rect x="13" y="12" width="7" height="6" rx="1" ry="1"/></svg>'),this._toolbar.appendChild(this._pipBtn)),t.storyMode&&(this._storyBtn=o("button","neiki-lightbox__btn neiki-lightbox__story",{"aria-label":"Story mode",type:"button"},'<svg viewBox="0 0 24 24"><rect x="6" y="3" width="12" height="18" rx="2"/><path d="M3 7v10a2 2 0 0 0 2 2"/><path d="M19 7v10a2 2 0 0 1-2 2"/></svg>'),this._toolbar.appendChild(this._storyBtn)),this._playBtn=o("button","neiki-lightbox__btn neiki-lightbox__play",{"aria-label":"Toggle slideshow",type:"button"},c),this._toolbar.appendChild(this._playBtn),t.favorites&&(this._favBtn=o("button","neiki-lightbox__btn neiki-lightbox__fav",{"aria-label":"Toggle favorite",type:"button"},b),this._toolbar.appendChild(this._favBtn)),t.infoPanel&&(this._infoBtn=o("button","neiki-lightbox__btn neiki-lightbox__info-btn",{"aria-label":"Image info",type:"button"},f),this._toolbar.appendChild(this._infoBtn)),t.editor&&(this._editBtn=o("button","neiki-lightbox__btn neiki-lightbox__edit",{"aria-label":"Edit image",type:"button"},m),this._toolbar.appendChild(this._editBtn)),t.annotate&&(this._annotateBtn=o("button","neiki-lightbox__btn neiki-lightbox__annotate-btn",{"aria-label":"Annotate image",type:"button"},v),this._toolbar.appendChild(this._annotateBtn)),t.shortcutsHelp&&(this._helpBtn=o("button","neiki-lightbox__btn neiki-lightbox__help",{"aria-label":"Keyboard shortcuts",type:"button"},x),this._toolbar.appendChild(this._helpBtn)),t.print&&(this._printBtn=o("button","neiki-lightbox__btn neiki-lightbox__print",{"aria-label":"Print image",type:"button"},k),this._toolbar.appendChild(this._printBtn)),t.share&&(this._shareBtn=o("button","neiki-lightbox__btn neiki-lightbox__share",{"aria-label":"Share image",type:"button"},p),this._toolbar.appendChild(this._shareBtn)),t.fullscreen&&(this._fsBtn=o("button","neiki-lightbox__btn neiki-lightbox__fullscreen",{"aria-label":"Toggle fullscreen",type:"button"},h),this._toolbar.appendChild(this._fsBtn)),this._closeBtn=o("button","neiki-lightbox__btn neiki-lightbox__close",{"aria-label":"Close lightbox",type:"button"},a),this._toolbar.appendChild(this._closeBtn),this._lightbox.appendChild(this._toolbar),this._prevBtn=o("button","neiki-lightbox__btn neiki-lightbox__prev",{"aria-label":"Previous image",type:"button"},s),this._nextBtn=o("button","neiki-lightbox__btn neiki-lightbox__next",{"aria-label":"Next image",type:"button"},l),this._stage=o("div","neiki-lightbox__stage"),this._slideWrapper=o("div","neiki-lightbox__slide-wrapper"),this._spinner=o("div","neiki-lightbox__spinner neiki-hidden"),this._image=o("img","neiki-lightbox__image",{alt:"",draggable:"false"}),this._slideWrapper.appendChild(this._spinner),this._slideWrapper.appendChild(this._image),this._stage.appendChild(this._prevBtn),this._stage.appendChild(this._slideWrapper),this._stage.appendChild(this._nextBtn),this._lightbox.appendChild(this._stage),this._progressBar=o("div","neiki-lightbox__progress"),this._stage.appendChild(this._progressBar),t.captions&&(this._caption=o("div","neiki-lightbox__caption",{"aria-live":"polite"}),this._lightbox.appendChild(this._caption)),t.thumbnails){this._thumbsContainer=o("div","neiki-lightbox__thumbs",{role:"listbox","aria-label":"Image thumbnails"}),this._thumbButtons=[];for(var i=0;i<this._items.length;i++){var e=o("button","neiki-lightbox__thumb",{type:"button",role:"option","aria-label":"View image "+(i+1)}),n=o("img","",{src:this._items[i].thumb,alt:this._items[i].caption||"Thumbnail "+(i+1),draggable:"false"});e.appendChild(n),this._thumbButtons.push(e),this._thumbsContainer.appendChild(e)}this._lightbox.appendChild(this._thumbsContainer)}if(t.share){this._sharePopup=o("div","neiki-share");var r=o("button","neiki-share__btn",{type:"button"},g+" Copy link"),d=o("button","neiki-share__btn",{type:"button"},_+" Download");this._sharePopup.appendChild(r),this._sharePopup.appendChild(d),this._lightbox.appendChild(this._sharePopup),this._shareCopyBtn=r,this._shareDownloadBtn=d}t.exif&&(this._exifOverlay=o("div","neiki-exif"),this._lightbox.appendChild(this._exifOverlay)),t.colorPalette&&(this._paletteStrip=o("div","neiki-palette"),this._lightbox.appendChild(this._paletteStrip)),document.body.appendChild(this._lightbox)},w.prototype._bindEvents=function(){var t=this;this._items.forEach(function(i,e){i.element.addEventListener("click",function(i){i.preventDefault(),t._options.batchSelect&&i.shiftKey?t._toggleSelect(e):t.open(e)})}),this._closeBtn.addEventListener("click",function(){t.close()}),this._prevBtn.addEventListener("click",function(i){i.stopPropagation(),t.prev()}),this._nextBtn.addEventListener("click",function(i){i.stopPropagation(),t.next()}),this._playBtn.addEventListener("click",function(i){i.stopPropagation(),t.toggleSlideshow()}),this._fsBtn&&this._fsBtn.addEventListener("click",function(i){i.stopPropagation(),t._toggleFullscreen()}),this._pipBtn&&this._pipBtn.addEventListener("click",function(i){i.stopPropagation(),t._togglePip()}),this._storyBtn&&this._storyBtn.addEventListener("click",function(i){i.stopPropagation(),t._toggleStoryMode()}),this._favBtn&&this._favBtn.addEventListener("click",function(i){i.stopPropagation(),t.toggleFavorite()}),this._infoBtn&&this._infoBtn.addEventListener("click",function(i){i.stopPropagation(),t.toggleInfoPanel()}),this._editBtn&&this._editBtn.addEventListener("click",function(i){i.stopPropagation(),t.openEditor()}),this._annotateBtn&&this._annotateBtn.addEventListener("click",function(i){i.stopPropagation(),t.openAnnotate()}),this._helpBtn&&this._helpBtn.addEventListener("click",function(i){i.stopPropagation(),t.toggleShortcutsHelp()}),this._printBtn&&this._printBtn.addEventListener("click",function(i){i.stopPropagation(),t.print()}),this._shareBtn&&this._shareBtn.addEventListener("click",function(i){i.stopPropagation(),t._toggleSharePopup()}),this._shareCopyBtn&&this._shareCopyBtn.addEventListener("click",function(i){i.stopPropagation(),t._shareCopyLink()}),this._shareDownloadBtn&&this._shareDownloadBtn.addEventListener("click",function(i){i.stopPropagation(),t._shareDownload()}),this._options.zoom&&this._image.addEventListener("click",function(i){i.stopPropagation(),t._options.contextualZoom?t._toggleContextualZoom(i):t._toggleZoom()}),this._thumbButtons&&this._thumbButtons.forEach(function(i,e){i.addEventListener("click",function(){t._goTo(e)})}),this._stage.addEventListener("click",function(i){i.target!==t._stage&&i.target!==t._slideWrapper||t.close()}),this._boundHandlers.keydown=function(i){t._onKeyDown(i)},document.addEventListener("keydown",this._boundHandlers.keydown),this._setupTouch(),this._options.hashNavigation&&(this._boundHandlers.hashchange=function(){t._onHashChange()},window.addEventListener("hashchange",this._boundHandlers.hashchange)),this._boundHandlers.fullscreenchange=function(){t._onFullscreenChange()},document.addEventListener("fullscreenchange",this._boundHandlers.fullscreenchange),document.addEventListener("webkitfullscreenchange",this._boundHandlers.fullscreenchange)},w.prototype._onKeyDown=function(t){if(this._isOpen)switch(t.key){case"Escape":if(t.preventDefault(),this._shortcutsOpen)return void this.toggleShortcutsHelp(!1);if(this._editorOverlay&&this._editorOverlay.classList.contains("neiki-editor--visible"))return void this.closeEditor();if(this._annotateOverlay&&this._annotateOverlay.classList.contains("neiki-annotate--visible"))return void this.closeAnnotate();if(this._infoPanelOpen)return void this.toggleInfoPanel(!1);if(this._shareVisible)return void this._toggleSharePopup();this.close();break;case"ArrowLeft":t.preventDefault(),this.prev();break;case"ArrowRight":t.preventDefault(),this.next();break;case"Home":t.preventDefault(),this._goTo(0);break;case"End":t.preventDefault(),this._goTo(this._items.length-1);break;case"f":case"F":t.preventDefault(),this._toggleFullscreen();break;case" ":t.preventDefault(),this.toggleSlideshow();break;case"z":case"Z":t.preventDefault(),this._toggleZoom();break;case"i":case"I":this._options.infoPanel&&(t.preventDefault(),this.toggleInfoPanel());break;case"b":case"B":this._options.favorites&&(t.preventDefault(),this.toggleFavorite());break;case"p":case"P":t.preventDefault(),this.print();break;case"?":this._options.shortcutsHelp&&(t.preventDefault(),this.toggleShortcutsHelp())}},w.prototype._setupTouch=function(){var t=this,i=0,e=0,n=0,o=!1;function r(r){if(t._isOpen&&!t._isZoomed){var a=r.touches?r.touches[0]:r;i=a.clientX,e=a.clientY,n=0,o=!0}}function a(t){if(o){var r=t.touches?t.touches[0]:t;n=r.clientX-i;var a=r.clientY-e;Math.abs(n)>Math.abs(a)&&Math.abs(n)>10&&t.preventDefault()}}function s(){o&&(o=!1,n>50?t.prev():n<-50&&t.next())}this._stage.addEventListener("touchstart",r,{passive:!0}),this._stage.addEventListener("touchmove",a,{passive:!1}),this._stage.addEventListener("touchend",s,{passive:!0}),this._boundHandlers.touchstart=r,this._boundHandlers.touchmove=a,this._boundHandlers.touchend=s},w.prototype._goTo=function(t,i){if(!this._destroyed){var e=this._items.length;if(this._options.loop?t=(t%e+e)%e:(t<0&&(t=0),t>=e&&(t=e-1)),t!==this._currentIndex||!this._isOpen||!this._image.src){var n=this._currentIndex;this._currentIndex=t;var o=this._items[t];if(this._stopAllMedia&&this._stopAllMedia(),this._removeKenburns&&this._removeKenburns(),this._resetZoom(),this._shareVisible&&this._toggleSharePopup(),this._updateNavButtons(),this._clearMediaSlide(),o.mediaType&&"image"!==o.mediaType)return this._spinner.classList.add("neiki-hidden"),this._image.style.display="none",this._renderMediaSlide(o,this._slideWrapper),void this._postGoToCommon(o,t,n);this._image.style.display="",this._spinner.classList.remove("neiki-hidden");var r=this,a=this._image;if(this._currentImg=a,"slide"===this._options.transition){var s=t>n?1:-1;this._options.loop&&(n===e-1&&0===t&&(s=1),0===n&&t===e-1&&(s=-1)),this._slideWrapper.style.transform="translateX("+40*-s+"px)",a.style.opacity="0",requestAnimationFrame(function(){requestAnimationFrame(function(){r._slideWrapper.style.transform="translateX(0)",a.style.opacity="1"})})}else a.classList.add("neiki-entering"),a.classList.remove("neiki-active");a.setAttribute("alt",o.caption||"");var l=new Image,h=function(){a.src=o.src,r._spinner.classList.add("neiki-hidden"),"fade"===r._options.transition&&requestAnimationFrame(function(){a.classList.remove("neiki-entering"),a.classList.add("neiki-active")})};l.onload=h,l.onerror=function(){a.src=o.src,r._spinner.classList.add("neiki-hidden"),"fade"===r._options.transition&&requestAnimationFrame(function(){a.classList.remove("neiki-entering"),a.classList.add("neiki-active")})},l.src=o.src,l.complete&&h(),this._postGoToCommon(o,t,n,i)}}},w.prototype._postGoToCommon=function(t,i,e,n){var o=this._items.length;if(this._counter&&(this._counter.textContent=this._formatCounter(i,o)),this._caption&&(this._caption.textContent=t.caption||""),this._thumbButtons){this._thumbButtons.forEach(function(t,e){t.classList.toggle("neiki-thumb--active",e===i),t.setAttribute("aria-selected",e===i?"true":"false")});var r=this._thumbButtons[i];r&&this._thumbsContainer&&r.scrollIntoView({inline:"center",block:"nearest",behavior:"smooth"})}this._options.hashNavigation&&!n&&this._setHash(i),this._preloadAdjacent(i),this._applyBackdropTint&&this._applyBackdropTint(t.src),this._loadExif&&this._loadExif(t.src),this._loadPalette&&this._loadPalette(t.src),this._infoPanelOpen&&this._populateInfoPanel(i),this._updateFavoriteUI&&this._updateFavoriteUI(i),this._applyKenburns&&this._applyKenburns(),this._callPluginHook&&this._callPluginHook("change",{index:i,item:t,prevIndex:e}),this._slideshowRunning&&this._startSlideshowTimer(),this._emit("change",i)},w.prototype._formatCounter=function(t,i){var e=this._options.counterFormat||"{current} / {total}",n=t+1;if(this._groupName){var o=this._getGroupItems();o&&o.length&&(i=o.length,n=this._getGroupCurrentIndex()+1)}var r=Math.round(n/i*100);return e.replace(/\{current\}/g,n).replace(/\{total\}/g,i).replace(/\{percent\}/g,r)},w.prototype._clearMediaSlide=function(){if(this._slideWrapper)for(var t=this._slideWrapper.querySelectorAll(".neiki-lightbox__video, .neiki-lightbox__embed"),i=0;i<t.length;i++)t[i].parentNode&&t[i].parentNode.removeChild(t[i])},w.prototype._updateNavButtons=function(){if(this._options.loop)return this._prevBtn.style.display="",void(this._nextBtn.style.display="");this._prevBtn.style.display=this._currentIndex<=0?"none":"",this._nextBtn.style.display=this._currentIndex>=this._items.length-1?"none":""},w.prototype._preloadAdjacent=function(t){for(var i=this._options.preload||1,e=this._items.length,n=1;n<=i;n++){var o=(t+n)%e,r=((t-n)%e+e)%e;this._items[o]&&((new Image).src=this._items[o].src),this._items[r]&&((new Image).src=this._items[r].src)}},w.prototype._toggleZoom=function(){this._options.zoom&&(this._isZoomed=!this._isZoomed,this._image.classList.remove("neiki-zoom-pan"),this._image.classList.toggle("neiki-zoomed",this._isZoomed))},w.prototype._toggleContextualZoom=function(t){if(this._options.zoom)if(this._isZoomed)this._resetZoom();else{this._isZoomed=!0;var i=this._image.getBoundingClientRect(),e=((t.clientX-i.left)/i.width*100).toFixed(1),n=((t.clientY-i.top)/i.height*100).toFixed(1);this._image.style.setProperty("--neiki-zoom-x",e+"%"),this._image.style.setProperty("--neiki-zoom-y",n+"%"),this._image.classList.add("neiki-zoom-pan")}},w.prototype._resetZoom=function(){this._isZoomed&&(this._isZoomed=!1,this._image.classList.remove("neiki-zoomed","neiki-zoom-pan"),this._image.style.removeProperty("--neiki-zoom-x"),this._image.style.removeProperty("--neiki-zoom-y"))},w.prototype._toggleFullscreen=function(){if(this._options.fullscreen)if(document.fullscreenElement||document.webkitFullscreenElement)document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen();else{var t=this._lightbox;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen()}},w.prototype._onFullscreenChange=function(){this._isFullscreen=!(!document.fullscreenElement&&!document.webkitFullscreenElement),this._fsBtn&&(this._fsBtn.innerHTML=this._isFullscreen?d:h)},w.prototype.toggleSlideshow=function(){this._slideshowRunning?this.stopSlideshow():this.startSlideshow()},w.prototype.startSlideshow=function(){this._slideshowRunning||(this._slideshowRunning=!0,this._playBtn.innerHTML=u,this._playBtn.setAttribute("aria-label","Pause slideshow"),this._startSlideshowTimer(),this._emit("slideshowStart"))},w.prototype.stopSlideshow=function(){this._slideshowRunning&&(this._slideshowRunning=!1,this._playBtn.innerHTML=c,this._playBtn.setAttribute("aria-label","Start slideshow"),this._clearSlideshowTimer(),this._progressBar.classList.remove("neiki-progress--running"),this._progressBar.style.width="0%",this._emit("slideshowStop"))},w.prototype.pauseSlideshow=function(){this._clearSlideshowTimer(),this._progressBar&&(this._progressBar.classList.remove("neiki-progress--running"),this._progressBar.style.width="0%"),this._slideshowRunning=!1,this._playBtn&&(this._playBtn.innerHTML=c)},w.prototype._startSlideshowTimer=function(){var t=this;this._clearSlideshowTimer();var i=this._resolveSlideshowOpts()||{interval:4e3,direction:"forward"},e=i.interval;this._progressBar.classList.remove("neiki-progress--running"),this._progressBar.style.width="0%",this._progressBar.offsetWidth,this._progressBar.style.transitionDuration=e+"ms",this._progressBar.classList.add("neiki-progress--running"),this._progressBar.style.width="100%",this._slideshowTimer=setTimeout(function(){if(t._slideshowRunning&&t._isOpen){var e="reverse"===i.direction?-1:1,n=t._currentIndex+e;if(n>=t._items.length){if(!t._options.loop)return void t.stopSlideshow();n=0}else if(n<0){if(!t._options.loop)return void t.stopSlideshow();n=t._items.length-1}t._goTo(n)}},e)},w.prototype._clearSlideshowTimer=function(){this._slideshowTimer&&(clearTimeout(this._slideshowTimer),this._slideshowTimer=null)},w.prototype._toggleSharePopup=function(){this._shareVisible=!this._shareVisible,this._sharePopup&&this._sharePopup.classList.toggle("neiki-share--visible",this._shareVisible)},w.prototype._shareCopyLink=function(){var t=this._items[this._currentIndex];if(t){var i=this,e=t.src;if(navigator.share)return navigator.share({title:t.caption||"Image",url:e}).then(function(){r("Shared!")}).catch(function(){i._copyToClipboard(e)}),void this._toggleSharePopup();this._copyToClipboard(e),this._toggleSharePopup()}},w.prototype._copyToClipboard=function(t){if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t).then(function(){r("Link copied!")});else{var i=document.createElement("input");i.value=t,document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),r("Link copied!")}},w.prototype._shareDownload=function(){var t=this._items[this._currentIndex];if(t){var i=document.createElement("a");i.href=t.src,i.download=t.caption||"image",i.target="_blank",i.rel="noopener",document.body.appendChild(i),i.click(),document.body.removeChild(i),this._toggleSharePopup()}},w.prototype._toggleSelect=function(t){var i=this._selectedIndices.indexOf(t);-1===i?(this._selectedIndices.push(t),this._items[t].element.classList.add("neiki-selected")):(this._selectedIndices.splice(i,1),this._items[t].element.classList.remove("neiki-selected")),this._emit("select",this._selectedIndices.slice())},w.prototype.getSelected=function(){var t=this;return this._selectedIndices.map(function(i){return{index:i,src:t._items[i].src,caption:t._items[i].caption}})},w.prototype.clearSelection=function(){var t=this;this._selectedIndices.forEach(function(i){t._items[i].element.classList.remove("neiki-selected")}),this._selectedIndices=[],this._emit("select",[])},w.prototype._togglePip=function(){this._pipActive=!this._pipActive,this._lightbox.classList.toggle("neiki-lightbox--pip",this._pipActive),this._pipActive?(document.body.style.overflow="",this._emit("pipEnter")):(document.body.style.overflow="hidden",this._emit("pipExit"))},w.prototype._toggleStoryMode=function(){this._storyOpen=!this._storyOpen,this._storyOpen?this._enterStoryMode():this._exitStoryMode()},w.prototype._enterStoryMode=function(){var t=this;this._storyContainer=o("div","neiki-story"),this._items.forEach(function(i,e){var n=o("div","neiki-story__slide"),r=o("img","neiki-story__image",{src:i.src,alt:i.caption||"",draggable:"false"});if(n.appendChild(r),i.caption){var a=o("div","neiki-story__caption",{},i.caption);n.appendChild(a)}n.setAttribute("data-story-index",e),t._storyContainer.appendChild(n)});var i=o("button","neiki-story__close",{type:"button","aria-label":"Close story"},a);this._storyContainer.appendChild(i);var e=o("div","neiki-story__progress-wrap");this._storyProgressBars=[];for(var r=0;r<this._items.length;r++){var s=o("div","neiki-story__progress-bar"),l=o("div","neiki-story__progress-fill");s.appendChild(l),e.appendChild(s),this._storyProgressBars.push(l)}this._storyContainer.appendChild(e),document.body.appendChild(this._storyContainer),document.body.style.overflow="hidden",i.addEventListener("click",function(){t._exitStoryMode()}),this._storyCurrentIndex=this._currentIndex||0,this._updateStoryProgress(this._storyCurrentIndex),this._storyContainer.addEventListener("click",function(e){if(e.target!==i&&!i.contains(e.target)){var n=t._storyContainer.getBoundingClientRect(),o=e.clientX-n.left;o<n.width/3?t._storyPrev():o>2*n.width/3&&t._storyNext()}});var h=n(".neiki-story__slide",this._storyContainer);h[this._storyCurrentIndex]&&h[this._storyCurrentIndex].classList.add("neiki-story__slide--active"),this._emit("storyEnter")},w.prototype._storyNext=function(){var t=n(".neiki-story__slide",this._storyContainer);this._storyCurrentIndex>=t.length-1?this._exitStoryMode():(t[this._storyCurrentIndex].classList.remove("neiki-story__slide--active"),this._storyCurrentIndex++,t[this._storyCurrentIndex].classList.add("neiki-story__slide--active"),this._updateStoryProgress(this._storyCurrentIndex))},w.prototype._storyPrev=function(){var t=n(".neiki-story__slide",this._storyContainer);this._storyCurrentIndex<=0||(t[this._storyCurrentIndex].classList.remove("neiki-story__slide--active"),this._storyCurrentIndex--,t[this._storyCurrentIndex].classList.add("neiki-story__slide--active"),this._updateStoryProgress(this._storyCurrentIndex))},w.prototype._updateStoryProgress=function(t){if(this._storyProgressBars){for(var i=0;i<this._storyProgressBars.length;i++)i<t?this._storyProgressBars[i].style.width="100%":i===t?(this._storyProgressBars[i].style.width="100%",this._storyProgressBars[i].style.transition="width 5s linear"):(this._storyProgressBars[i].style.width="0%",this._storyProgressBars[i].style.transition="none");var e=this;clearTimeout(this._storyTimer),this._storyTimer=setTimeout(function(){e._storyOpen&&e._storyNext()},5e3)}},w.prototype._exitStoryMode=function(){this._storyOpen=!1,clearTimeout(this._storyTimer),this._storyContainer&&this._storyContainer.parentNode&&this._storyContainer.parentNode.removeChild(this._storyContainer),this._storyContainer=null,this._storyProgressBars=null,document.body.style.overflow=this._isOpen?"hidden":"",this._emit("storyExit")},w.prototype._applyBackdropTint=function(t){if(this._options.backdropTint){var i=this;this._colorCache[t]?i._setTintColor(this._colorCache[t]):M(t,function(e){e&&(i._colorCache[t]=e,i._setTintColor(e))})}},w.prototype._setTintColor=function(t){t&&(this._lightbox.style.setProperty("--neiki-tint-r",t.r),this._lightbox.style.setProperty("--neiki-tint-g",t.g),this._lightbox.style.setProperty("--neiki-tint-b",t.b),this._lightbox.classList.add("neiki-lightbox--tinted"))},w.prototype._morphOpen=function(t){if(!this._options.morphTransition)return!1;var i=this._items[t];if(!i||!i.img)return!1;var e=i.img.getBoundingClientRect(),n=this._image;n.style.transition="none",n.style.position="fixed",n.style.left=e.left+"px",n.style.top=e.top+"px",n.style.width=e.width+"px",n.style.height=e.height+"px",n.style.maxWidth="none",n.style.maxHeight="none",n.style.borderRadius=getComputedStyle(i.img).borderRadius,n.style.objectFit="cover",n.style.zIndex="99",n.offsetHeight;return requestAnimationFrame(function(){n.style.transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)",n.style.position="",n.style.left="",n.style.top="",n.style.width="",n.style.height="",n.style.maxWidth="",n.style.maxHeight="",n.style.borderRadius="",n.style.objectFit="",n.style.zIndex="",n.addEventListener("transitionend",function t(){n.removeEventListener("transitionend",t),n.style.transition=""})}),!0},w.prototype._loadExif=function(t){if(this._options.exif&&this._exifOverlay){var i=this._exifOverlay;i.innerHTML="",i.classList.remove("neiki-exif--visible"),z(t,function(t){if(t){var e=[];if((t.make||t.model)&&e.push((t.make||"")+" "+(t.model||"")),t.focalLength&&e.push(Math.round(t.focalLength)+"mm"),t.fNumber&&e.push("f/"+t.fNumber.toFixed(1)),t.exposure){var n=t.exposure;e.push(n<1?"1/"+Math.round(1/n)+"s":n.toFixed(1)+"s")}t.iso&&e.push("ISO "+t.iso),0!==e.length&&(i.textContent=e.join(" ยท "),i.classList.add("neiki-exif--visible"))}})}},w.prototype._loadPalette=function(t){if(this._options.colorPalette&&this._paletteStrip){var i=this._paletteStrip;i.innerHTML="",i.classList.remove("neiki-palette--visible"),P(t,5,function(t){t&&0!==t.length&&(t.forEach(function(t){var e=o("span","neiki-palette__dot");e.style.backgroundColor=t.hex,e.setAttribute("title",t.hex),i.appendChild(e)}),i.classList.add("neiki-palette--visible"))})}},w.prototype._hashSlug=function(){return this._container.id||this._groupName||"gallery-"+this._id},w.prototype._setHash=function(t){"number"==typeof t&&this._isOpen&&history.replaceState(null,"","#"+this._hashSlug()+"/"+(t+1))},w.prototype._clearHash=function(){var t="#"+this._hashSlug()+"/";0===window.location.hash.indexOf(t)&&history.replaceState(null,"",window.location.pathname+window.location.search)},w.prototype._checkHash=function(){if(this._options.hashNavigation){var t=window.location.hash,i="#"+this._hashSlug()+"/";if(0===t.indexOf(i)){var e=parseInt(t.substring(i.length),10);!isNaN(e)&&e>=1&&e<=this._items.length&&this.open(e-1)}}},w.prototype._onHashChange=function(){this._checkHash()},w.prototype._emit=function(t,i){var e=this._events[t];e&&e.forEach(function(t){t(i)})},w.prototype.open=function(t){this._destroyed||("number"!=typeof t&&(t=0),t<0&&(t=0),t>=this._items.length&&(t=this._items.length-1),this._isOpen=!0,document.body.style.overflow="hidden",this._lightbox.classList.add("neiki-lightbox--visible"),this._lightbox.focus(),this._currentIndex=-1,this._goTo(t),this._morphOpen(t),this._options.slideshow&&this.startSlideshow(),this._callPluginHook&&this._callPluginHook("open",{index:t}),this._emit("open",t))},w.prototype.close=function(){this._isOpen&&(this._isOpen=!1,this.stopSlideshow(),this._stopAllMedia&&this._stopAllMedia(),this._clearMediaSlide&&this._clearMediaSlide(),this._infoPanelOpen&&this.toggleInfoPanel(!1),this._shortcutsOpen&&this.toggleShortcutsHelp(!1),this._editorOverlay&&this.closeEditor(),this._annotateOverlay&&this.closeAnnotate(),this._hideContextMenu&&this._hideContextMenu(),this._pipActive&&(this._pipActive=!1,this._lightbox.classList.remove("neiki-lightbox--pip")),this._storyOpen&&this._exitStoryMode(),this._isFullscreen&&(document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()),this._resetZoom(),this._shareVisible&&this._toggleSharePopup(),this._lightbox.classList.remove("neiki-lightbox--tinted"),document.body.style.overflow="",this._lightbox.classList.remove("neiki-lightbox--visible"),this._options.hashNavigation&&this._clearHash(),this._callPluginHook&&this._callPluginHook("close"),this._emit("close"))},w.prototype.next=function(){this._navigateGroup&&this._navigateGroup(1)||this._goTo(this._currentIndex+1)},w.prototype.prev=function(){this._navigateGroup&&this._navigateGroup(-1)||this._goTo(this._currentIndex-1)},w.prototype.on=function(t,i){return this._events[t]||(this._events[t]=[]),this._events[t].push(i),this},w.prototype.off=function(t,i){if(!i)return delete this._events[t],this;var e=this._events[t];return e&&(this._events[t]=e.filter(function(t){return t!==i})),this},w.prototype.once=function(t,i){var e=this,n=function(o){i(o),e.off(t,n)};return this.on(t,n)},w.prototype.filter=function(t){this._applyFilter(t||null)},w.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this._isOpen&&this.close(),this._boundHandlers.keydown&&document.removeEventListener("keydown",this._boundHandlers.keydown),this._boundHandlers.hashchange&&window.removeEventListener("hashchange",this._boundHandlers.hashchange),this._boundHandlers.fullscreenchange&&(document.removeEventListener("fullscreenchange",this._boundHandlers.fullscreenchange),document.removeEventListener("webkitfullscreenchange",this._boundHandlers.fullscreenchange)),this._boundHandlers.touchstart&&(this._stage.removeEventListener("touchstart",this._boundHandlers.touchstart),this._stage.removeEventListener("touchmove",this._boundHandlers.touchmove),this._stage.removeEventListener("touchend",this._boundHandlers.touchend)),this._observer&&(this._observer.disconnect(),this._observer=null),this._virtualObserver&&(this._virtualObserver.disconnect(),this._virtualObserver=null),this._storyOpen&&this._exitStoryMode(),this._destroyPlugins&&this._destroyPlugins(),this._unregisterGroup&&this._unregisterGroup(),this._callPluginHook&&this._callPluginHook("destroy"),this._systemThemeMQ&&this._systemThemeListener&&(this._systemThemeMQ.removeEventListener?this._systemThemeMQ.removeEventListener("change",this._systemThemeListener):this._systemThemeMQ.removeListener&&this._systemThemeMQ.removeListener(this._systemThemeListener)),this._infiniteObserver&&(this._infiniteObserver.disconnect(),this._infiniteObserver=null),this._infiniteSentinel&&this._infiniteSentinel.parentNode&&this._infiniteSentinel.parentNode.removeChild(this._infiniteSentinel),this._lightbox&&this._lightbox.parentNode&&this._lightbox.parentNode.removeChild(this._lightbox),this._filterBar&&this._filterBar.parentNode&&this._filterBar.parentNode.removeChild(this._filterBar),this._contextMenu&&this._contextMenu.parentNode&&this._contextMenu.parentNode.removeChild(this._contextMenu),this._container.classList.remove("neiki-gallery","neiki-gallery--masonry","neiki-gallery--grid","neiki-gallery--mosaic","neiki-gallery--filmstrip","neiki-gallery--stagger"),this._events={})},w.compare=function(t,n){if("string"==typeof t&&(t=e(t)),t){var r=i({before:"",after:"",labelBefore:"Before",labelAfter:"After",startPosition:50},n);t.classList.add("neiki-compare"),t.innerHTML="";var a=o("img","neiki-compare__before",{src:r.before,alt:r.labelBefore,draggable:"false"}),s=o("img","neiki-compare__after",{src:r.after,alt:r.labelAfter,draggable:"false"}),l=o("div","neiki-compare__handle"),h=o("span","neiki-compare__label neiki-compare__label--before",{},r.labelBefore),d=o("span","neiki-compare__label neiki-compare__label--after",{},r.labelAfter);t.appendChild(a),t.appendChild(s),t.appendChild(l),t.appendChild(h),t.appendChild(d);var p=r.startPosition;u(p);var c=!1;return t.addEventListener("mousedown",_),t.addEventListener("touchstart",_,{passive:!1}),window.addEventListener("mousemove",b),window.addEventListener("touchmove",b,{passive:!1}),window.addEventListener("mouseup",f),window.addEventListener("touchend",f),{setPosition:u,getPosition:function(){return p},destroy:function(){t.removeEventListener("mousedown",_),t.removeEventListener("touchstart",_),window.removeEventListener("mousemove",b),window.removeEventListener("touchmove",b),window.removeEventListener("mouseup",f),window.removeEventListener("touchend",f),t.innerHTML="",t.classList.remove("neiki-compare")}}}function u(t){t=Math.max(0,Math.min(100,t)),p=t,s.style.clipPath="inset(0 0 0 "+t+"%)",l.style.left=t+"%"}function g(i){var e=t.getBoundingClientRect();return((i.touches?i.touches[0].clientX:i.clientX)-e.left)/e.width*100}function _(t){c=!0,u(g(t)),t.preventDefault()}function b(t){c&&(u(g(t)),t.preventDefault())}function f(){c=!1}};var O={};w.registerPlugin=function(t,i){if("string"!=typeof t||"function"!=typeof i)throw new Error("NeikiGallery.registerPlugin(name, factory) requires a string name and function factory");O[t]=i},w.unregisterPlugin=function(t){delete O[t]},w.getRegisteredPlugins=function(){return Object.keys(O)},w.prototype._initPlugins=function(){this._plugins={};var t=this._options.plugins;if(t&&t.length){var i=this;t.forEach(function(t){var e,n;if("string"==typeof t)e=t,n={};else{if(!t||"object"!=typeof t)return;e=t.name,n=t}var o=O[e];if(o)try{var r=o(i,n)||{};i._plugins[e]=r,"function"==typeof r.init&&r.init()}catch(t){window.console&&console.error&&console.error('[NeikiGallery] Plugin "'+e+'" init failed:',t)}else window.console&&console.warn&&console.warn("[NeikiGallery] Plugin not found: "+e)})}},w.prototype._callPluginHook=function(t,i){if(this._plugins)for(var e in this._plugins)if(this._plugins.hasOwnProperty(e)){var n=this._plugins[e];if(n&&"function"==typeof n[t])try{n[t](i)}catch(t){}}},w.prototype._destroyPlugins=function(){if(this._plugins){for(var t in this._plugins)if(this._plugins.hasOwnProperty(t)){var i=this._plugins[t];if(i&&"function"==typeof i.destroy)try{i.destroy()}catch(t){}}this._plugins={}}},w.prototype.plugin=function(t){return this._plugins?this._plugins[t]:null};var T=/(?:youtube\.com\/(?:watch\?v=|embed\/|v\/)|youtu\.be\/)([A-Za-z0-9_-]{11})/i,H=/vimeo\.com\/(?:video\/)?(\d+)/i,F=/\.(mp4|webm|ogv|mov|m4v)(\?.*)?$/i;function j(t){return t?T.test(t)?"youtube":H.test(t)?"vimeo":F.test(t)?"video":"image":"image"}w.detectMediaType=j,w.prototype._renderMediaSlide=function(t,i){var e,n,r=t.mediaType||j(t.src);if(t.mediaType=r,"image"===r)return null;if("video"===r){var a=o("video","neiki-lightbox__video",{src:t.src,controls:"true",playsinline:"true",preload:"metadata"});t.poster&&a.setAttribute("poster",t.poster),i.appendChild(a);try{a.play().catch(function(){})}catch(t){}return a}if("youtube"===r||"vimeo"===r){var s="youtube"===r?(e=t.src,(n=e.match(T))?"https://www.youtube.com/embed/"+n[1]+"?rel=0&autoplay=1":null):function(t){var i=t.match(H);return i?"https://player.vimeo.com/video/"+i[1]+"?autoplay=1":null}(t.src);if(!s)return null;var l=o("iframe","neiki-lightbox__embed",{src:s,frameborder:"0",allow:"autoplay; fullscreen; picture-in-picture",allowfullscreen:"true",loading:"lazy"});return i.appendChild(l),l}return null},w.prototype._stopAllMedia=function(){if(this._slideWrapper){for(var t=this._slideWrapper.querySelectorAll("video"),i=0;i<t.length;i++)try{t[i].pause()}catch(t){}for(var e=this._slideWrapper.querySelectorAll("iframe.neiki-lightbox__embed"),n=0;n<e.length;n++){var o=e[n].src;e[n].src="",e[n].src=o.replace("autoplay=1","autoplay=0")}}};var D={};w.prototype._registerGroup=function(){var t=this._options.group||this._container.getAttribute("data-group");t&&(this._groupName=t,D[t]||(D[t]=[]),D[t].push(this))},w.prototype._unregisterGroup=function(){if(this._groupName){var t=D[this._groupName];if(t){var i=t.indexOf(this);-1!==i&&t.splice(i,1),0===t.length&&delete D[this._groupName]}}},w.prototype._getGroupItems=function(){if(!this._groupName)return null;var t=D[this._groupName]||[],i=[];return t.forEach(function(t){t._items.forEach(function(e){i.push({gallery:t,item:e,originalIndex:t._items.indexOf(e)})})}),i},w.prototype._getGroupTotalCount=function(){var t=this._getGroupItems();return t?t.length:this._items.length},w.prototype._getGroupCurrentIndex=function(){if(!this._groupName)return this._currentIndex;var t=this._getGroupItems();if(!t)return this._currentIndex;var i=this,e=-1;return t.forEach(function(t,n){t.gallery===i&&t.originalIndex===i._currentIndex&&(e=n)}),-1===e?this._currentIndex:e},w.prototype._navigateGroup=function(t){if(!this._groupName)return!1;var i=this._getGroupItems();if(!i||i.length<=1)return!1;var e=this._getGroupCurrentIndex()+t;if(e<0||e>=i.length){if(!this._options.loop)return!0;e=(e+i.length)%i.length}var n=i[e];return n.gallery===this?this._goTo(n.originalIndex):(this.close(),n.gallery.open(n.originalIndex)),!0};function N(t){return null==t?"":String(t).replace(/[&<>"']/g,function(t){return{"&":"&","<":"<",">":">",'"':""","'":"'"}[t]})}function R(t){return N(t)}w.prototype._loadFavorites=function(){if(this._options.favorites){var t=this._options.favoritesKey||this._container.id||"default";this._favoritesStorageKey="neiki-gallery-favorites:"+t;try{var i=window.localStorage.getItem(this._favoritesStorageKey);this._favorites=i?JSON.parse(i):[]}catch(t){this._favorites=[]}}else this._favorites=[]},w.prototype._saveFavorites=function(){if(this._favoritesStorageKey)try{window.localStorage.setItem(this._favoritesStorageKey,JSON.stringify(this._favorites))}catch(t){}},w.prototype.isFavorite=function(t){"number"!=typeof t&&(t=this._currentIndex);var i=this._items[t];return!!i&&-1!==this._favorites.indexOf(i.src)},w.prototype.toggleFavorite=function(t){"number"!=typeof t&&(t=this._currentIndex);var i=this._items[t];if(!i)return!1;var e,n=this._favorites.indexOf(i.src);return-1===n?(this._favorites.push(i.src),e=!0):(this._favorites.splice(n,1),e=!1),this._saveFavorites(),this._updateFavoriteUI(t),this._emit(e?"favorite":"unfavorite",{index:t,src:i.src}),e},w.prototype.getFavorites=function(){return this._favorites.slice()},w.prototype.clearFavorites=function(){this._favorites=[],this._saveFavorites(),this._refreshAllFavoriteUI()},w.prototype._updateFavoriteUI=function(t){if(this._options.favorites){this._favBtn&&this._favBtn.classList.toggle("neiki-lightbox__fav--active",this.isFavorite(t));var i=this._items[t];i&&i.element&&i.element.classList.toggle("neiki-favorited",-1!==this._favorites.indexOf(i.src))}},w.prototype._refreshAllFavoriteUI=function(){if(this._options.favorites){var t=this;this._items.forEach(function(i,e){i.element.classList.toggle("neiki-favorited",-1!==t._favorites.indexOf(i.src))}),this._favBtn&&this._favBtn.classList.toggle("neiki-lightbox__fav--active",this.isFavorite(this._currentIndex))}},w.prototype._buildInfoPanel=function(){if(this._options.infoPanel){this._infoPanel=o("aside","neiki-lightbox__info"),this._infoPanel.innerHTML='<div class="neiki-info__header"><h3 class="neiki-info__title">Image info</h3><button class="neiki-info__close" type="button" aria-label="Close info panel">'+a+'</button></div><div class="neiki-info__body"></div>',this._lightbox.appendChild(this._infoPanel),this._infoBody=this._infoPanel.querySelector(".neiki-info__body");var t=this;this._infoPanel.querySelector(".neiki-info__close").addEventListener("click",function(){t.toggleInfoPanel(!1)})}},w.prototype.toggleInfoPanel=function(t){if(this._infoPanel){var i="boolean"==typeof t?t:!this._infoPanelOpen;this._infoPanelOpen=i,this._lightbox.classList.toggle("neiki-lightbox--info-open",i),i&&this._populateInfoPanel(this._currentIndex),this._emit(i?"infoOpen":"infoClose")}},w.prototype._populateInfoPanel=function(t){if(this._infoBody){var i=this._items[t];if(i){var e="";if(e+='<dl class="neiki-info__list">',e+="<dt>Filename</dt><dd>"+N((i.src||"").split("/").pop().split("?")[0])+"</dd>",i.caption&&(e+="<dt>Caption</dt><dd>"+N(i.caption)+"</dd>"),i.width&&i.height&&(e+="<dt>Dimensions</dt><dd>"+i.width+" ร "+i.height+" px</dd>"),i.tags&&i.tags.length&&(e+="<dt>Tags</dt><dd>"+i.tags.map(N).join(", ")+"</dd>"),i.mediaType&&"image"!==i.mediaType&&(e+="<dt>Type</dt><dd>"+i.mediaType+"</dd>"),e+='<dt>URL</dt><dd><a href="'+R(i.src)+'" target="_blank" rel="noopener">Open original</a></dd>',e+="</dl>",i._exifData){e+='<h4 class="neiki-info__subtitle">EXIF</h4><dl class="neiki-info__list">';var n=i._exifData;n.camera&&(e+="<dt>Camera</dt><dd>"+N(n.camera)+"</dd>"),n.lens&&(e+="<dt>Lens</dt><dd>"+N(n.lens)+"</dd>"),n.focalLength&&(e+="<dt>Focal length</dt><dd>"+N(n.focalLength)+"</dd>"),n.aperture&&(e+="<dt>Aperture</dt><dd>"+N(n.aperture)+"</dd>"),n.shutter&&(e+="<dt>Shutter</dt><dd>"+N(n.shutter)+"</dd>"),n.iso&&(e+="<dt>ISO</dt><dd>"+N(n.iso)+"</dd>"),e+="</dl>"}this._infoBody.innerHTML=e}}},w.prototype.print=function(t){"number"!=typeof t&&(t=this._currentIndex);var i=this._items[t];if(i){var e=window.open("about:blank","_blank");if(e){var n=i.caption?"<figcaption>"+N(i.caption)+"</figcaption>":"",o=e.document;o.open(),o.write("<!DOCTYPE html><html><head><title>Print โ "+N(i.caption||"Image")+'</title><style>@page { margin: 16mm; }body { margin: 0; font-family: system-ui, sans-serif; background: #fff; }figure { margin: 0; text-align: center; }img { max-width: 100%; max-height: 90vh; height: auto; object-fit: contain; display: block; margin: 0 auto; }figcaption { margin-top: 12px; font-size: 14px; color: #333; }@media print { body { background: #fff; -webkit-print-color-adjust: exact; } }</style></head><body><figure><img src="'+R(i.src)+'" alt="'+R(i.caption||"")+'">'+n+"</figure></body></html>"),o.close();var r=e.document.querySelector("img");r?r.complete?(e.focus(),e.print()):(r.onload=function(){e.focus(),e.print()},r.onerror=function(){e.focus(),e.print()}):(e.focus(),e.print()),this._emit("print",{index:t,src:i.src})}}},w.prototype._buildContextMenu=function(){if(this._options.contextMenu){this._contextMenu=o("div","neiki-context-menu",{role:"menu"}),document.body.appendChild(this._contextMenu);var t=this;this._onContextMenuClickOutside=function(i){t._contextMenu&&(t._contextMenu.contains(i.target)||t._hideContextMenu())},this._onContextMenuKey=function(i){"Escape"===i.key&&t._hideContextMenu()}}},w.prototype._showContextMenu=function(t,i,e){if(this._contextMenu){var n=this._items[e];if(n){var o=this,r=[{label:"Open original",icon:h,action:function(){window.open(n.src,"_blank","noopener")}},{label:"Copy link",icon:g,action:function(){o._copyToClipboard(n.src),o._showToast("Link copied")}},{label:"Download",icon:_,action:function(){o._downloadImage(n.src,n.caption)}},{label:"Share",icon:p,action:function(){o._shareItem(n)}}];!1!==this._options.print&&r.push({label:"Print",icon:h,action:function(){o.print(e)}}),this._options.favorites&&r.push({label:this.isFavorite(e)?"Remove from favorites":"Add to favorites",icon:b||p,action:function(){o.toggleFavorite(e)}}),this._contextMenu.innerHTML=r.map(function(t,i){return'<button class="neiki-context-menu__item" type="button" data-idx="'+i+'" role="menuitem"><span class="neiki-context-menu__icon">'+t.icon+'</span><span class="neiki-context-menu__label">'+t.label+"</span></button>"}).join(""),Array.prototype.forEach.call(this._contextMenu.querySelectorAll("button"),function(t){t.addEventListener("click",function(i){i.preventDefault();var e=parseInt(t.getAttribute("data-idx"),10);r[e]&&r[e].action&&r[e].action(),o._hideContextMenu()})}),this._contextMenu.style.left=t+"px",this._contextMenu.style.top=i+"px",this._contextMenu.classList.add("neiki-context-menu--visible");var a=this._contextMenu.getBoundingClientRect();a.right>window.innerWidth&&(this._contextMenu.style.left=window.innerWidth-a.width-8+"px"),a.bottom>window.innerHeight&&(this._contextMenu.style.top=window.innerHeight-a.height-8+"px"),document.addEventListener("click",this._onContextMenuClickOutside),document.addEventListener("keydown",this._onContextMenuKey)}}},w.prototype._hideContextMenu=function(){this._contextMenu&&(this._contextMenu.classList.remove("neiki-context-menu--visible"),document.removeEventListener("click",this._onContextMenuClickOutside),document.removeEventListener("keydown",this._onContextMenuKey))},w.prototype._bindContextMenu=function(){if(this._options.contextMenu){var t=this;this._items.forEach(function(i,e){i.element.addEventListener("contextmenu",function(i){i.preventDefault(),t._showContextMenu(i.clientX,i.clientY,e)})})}},w.prototype._downloadImage=function(t,i){var e=document.createElement("a");e.href=t,e.download=(i||"image").replace(/[^a-z0-9_\-]+/gi,"_")+".jpg",e.target="_blank",e.rel="noopener",document.body.appendChild(e),e.click(),setTimeout(function(){e.parentNode&&e.parentNode.removeChild(e)},100)},w.prototype._shareItem=function(t){navigator.share?navigator.share({title:t.caption||"Image",url:t.src}).catch(function(){}):(this._copyToClipboard(t.src),this._showToast("Link copied"))};var U=[{keys:["โ","โ"],desc:"Previous / Next image"},{keys:["Home","End"],desc:"First / Last image"},{keys:["Esc"],desc:"Close lightbox"},{keys:["F"],desc:"Toggle fullscreen"},{keys:["Space"],desc:"Play / Pause slideshow"},{keys:["Z"],desc:"Toggle zoom"},{keys:["I"],desc:"Toggle info panel"},{keys:["B"],desc:"Toggle favorite (bookmark)"},{keys:["P"],desc:"Print current image"},{keys:["?"],desc:"Show this help"}];function G(){n("[data-neiki-gallery]").forEach(function(t){t._neikiGallery||(t._neikiGallery=new w(t))})}return w.prototype._buildShortcutsHelp=function(){if(this._options.shortcutsHelp){this._shortcutsOverlay=o("div","neiki-shortcuts");var t=U.map(function(t){return'<li><span class="neiki-shortcuts__keys">'+t.keys.map(function(t){return"<kbd>"+t+"</kbd>"}).join(" ")+'</span><span class="neiki-shortcuts__desc">'+t.desc+"</span></li>"}).join("");this._shortcutsOverlay.innerHTML='<div class="neiki-shortcuts__panel" role="dialog" aria-label="Keyboard shortcuts"><div class="neiki-shortcuts__header"><h3>Keyboard shortcuts</h3><button class="neiki-shortcuts__close" type="button" aria-label="Close">'+a+'</button></div><ul class="neiki-shortcuts__list">'+t+"</ul></div>",this._lightbox.appendChild(this._shortcutsOverlay);var i=this;this._shortcutsOverlay.querySelector(".neiki-shortcuts__close").addEventListener("click",function(){i.toggleShortcutsHelp(!1)}),this._shortcutsOverlay.addEventListener("click",function(t){t.target===i._shortcutsOverlay&&i.toggleShortcutsHelp(!1)})}},w.prototype.toggleShortcutsHelp=function(t){if(this._shortcutsOverlay){var i="boolean"==typeof t?t:!this._shortcutsOpen;this._shortcutsOpen=i,this._shortcutsOverlay.classList.toggle("neiki-shortcuts--visible",i)}},w.prototype._setupInfiniteScroll=function(){if(this._options.infiniteScroll&&"function"==typeof this._options.loadMore){var t=this;this._infiniteSentinel=o("div","neiki-infinite-sentinel"),this._container.parentNode.insertBefore(this._infiniteSentinel,this._container.nextSibling),"IntersectionObserver"in window&&(this._infiniteLoading=!1,this._infiniteObserver=new IntersectionObserver(function(i){i.forEach(function(i){!i.isIntersecting||t._infiniteLoading||t._infiniteDone||t._loadMoreItems()})},{rootMargin:"300px"}),this._infiniteObserver.observe(this._infiniteSentinel))}},w.prototype._loadMoreItems=function(){var t=this;if(!this._infiniteLoading){this._infiniteLoading=!0,this._infiniteSentinel.classList.add("neiki-infinite-sentinel--loading");var i=this._options.loadMore.call(this,this._items.length);Promise.resolve(i).then(function(i){if(t._infiniteLoading=!1,t._infiniteSentinel.classList.remove("neiki-infinite-sentinel--loading"),!i||!i.length)return t._infiniteDone=!0,t._infiniteObserver&&t._infiniteObserver.disconnect(),void t._infiniteSentinel.classList.add("neiki-infinite-sentinel--done");t.append(i)}).catch(function(){t._infiniteLoading=!1,t._infiniteSentinel.classList.remove("neiki-infinite-sentinel--loading")})}},w.prototype.append=function(t){if(t&&t.length){var i=this;t.forEach(function(t){var e=o("a","",{href:t.src||t.href||"#"});t.caption&&e.setAttribute("data-caption",t.caption),t.tags&&e.setAttribute("data-tags",Array.isArray(t.tags)?t.tags.join(","):t.tags),t.size&&e.setAttribute("data-size",t.size),t.width&&e.setAttribute("data-width",t.width),t.height&&e.setAttribute("data-height",t.height),t.group&&e.setAttribute("data-group",t.group);var n=o("img","",{src:t.thumb||t.src,alt:t.caption||""});t.focus&&n.setAttribute("data-focus",t.focus),t.blurhash&&n.setAttribute("data-blurhash",t.blurhash),e.appendChild(n),i._container.appendChild(e)}),this._reparseItems(),this._emit("append",t)}},w.prototype.remove=function(t){if(!(t<0||t>=this._items.length)){var i=this._items[t];i.element&&i.element.parentNode&&i.element.parentNode.removeChild(i.element),this._items.splice(t,1),this._currentIndex>=this._items.length&&(this._currentIndex=this._items.length-1),this._emit("remove",{index:t})}},w.prototype._reparseItems=function(){this._items.length;this._parseItems(),this._options.lazyLoad&&this._observeLazyLoad(),this._options.focusPoint&&this._applyFocusPoints(),this._options.blurhash&&this._applyBlurhashes(),this._options.aspectSkeleton&&this._applyAspectSkeleton(),this._options.dragReorder&&this._setupDragReorder(),this._options.contextMenu&&this._bindContextMenu(),this._refreshAllFavoriteUI&&this._refreshAllFavoriteUI()},w.prototype._buildEditor=function(){if(this._options.editor){this._editorOverlay=o("div","neiki-editor"),this._editorOverlay.innerHTML='<div class="neiki-editor__toolbar"><button class="neiki-editor__btn" data-action="rotate-ccw" type="button" title="Rotate left"><svg viewBox="0 0 24 24"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/></svg></button><button class="neiki-editor__btn" data-action="rotate-cw" type="button" title="Rotate right"><svg viewBox="0 0 24 24"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></svg></button><button class="neiki-editor__btn" data-action="flip-h" type="button" title="Flip horizontal"><svg viewBox="0 0 24 24"><path d="M12 3v18"/><path d="M16 7l4 5-4 5"/><path d="M8 7l-4 5 4 5"/></svg></button><button class="neiki-editor__btn" data-action="flip-v" type="button" title="Flip vertical"><svg viewBox="0 0 24 24"><path d="M3 12h18"/><path d="M7 8l5-4 5 4"/><path d="M7 16l5 4 5-4"/></svg></button><span class="neiki-editor__sep"></span><button class="neiki-editor__btn" data-action="reset" type="button" title="Reset">Reset</button><button class="neiki-editor__btn neiki-editor__btn--primary" data-action="export" type="button" title="Export">Export</button><button class="neiki-editor__btn" data-action="cancel" type="button" title="Close editor">Close</button></div>',this._lightbox.appendChild(this._editorOverlay);var t=this;Array.prototype.forEach.call(this._editorOverlay.querySelectorAll("button[data-action]"),function(i){i.addEventListener("click",function(){t._editorAction(i.getAttribute("data-action"))})})}},w.prototype.openEditor=function(){this._editorOverlay&&(this._editorState={rotation:0,flipH:!1,flipV:!1},this._editorOverlay.classList.add("neiki-editor--visible"),this._lightbox.classList.add("neiki-lightbox--editor"),this._applyEditorTransform(),this._emit("editorOpen"))},w.prototype.closeEditor=function(){this._editorOverlay&&(this._editorOverlay.classList.remove("neiki-editor--visible"),this._lightbox.classList.remove("neiki-lightbox--editor"),this._editorState=null,this._currentImg&&(this._currentImg.style.transform=""),this._emit("editorClose"))},w.prototype._editorAction=function(t){if(this._editorState){var i=this._editorState;switch(t){case"rotate-cw":i.rotation=(i.rotation+90)%360;break;case"rotate-ccw":i.rotation=(i.rotation-90+360)%360;break;case"flip-h":i.flipH=!i.flipH;break;case"flip-v":i.flipV=!i.flipV;break;case"reset":i.rotation=0,i.flipH=!1,i.flipV=!1;break;case"cancel":return void this.closeEditor();case"export":return void this._exportEditedImage()}this._applyEditorTransform()}},w.prototype._applyEditorTransform=function(){if(this._currentImg&&this._editorState){var t=this._editorState,i=t.flipH?-1:1,e=t.flipV?-1:1;this._currentImg.style.transform="rotate("+t.rotation+"deg) scale("+i+","+e+")",this._currentImg.style.transition="transform 0.3s ease"}},w.prototype._exportEditedImage=function(){if(this._currentImg&&this._editorState){var t=this._currentImg,i=this._editorState,e=document.createElement("canvas"),n=90===i.rotation||270===i.rotation;e.width=n?t.naturalHeight:t.naturalWidth,e.height=n?t.naturalWidth:t.naturalHeight;var o=e.getContext("2d");o.translate(e.width/2,e.height/2),o.rotate(i.rotation*Math.PI/180),o.scale(i.flipH?-1:1,i.flipV?-1:1);try{o.drawImage(t,-t.naturalWidth/2,-t.naturalHeight/2);var r=this;e.toBlob(function(t){if(t){r._lastEditedBlob=t,r._emit("editorExport",{blob:t,url:URL.createObjectURL(t)});var i=document.createElement("a");i.href=URL.createObjectURL(t),i.download="edited-"+Date.now()+".png",i.click()}},"image/png")}catch(t){this._showToast("Cannot export โ image is cross-origin")}}},w.prototype.getEditedBlob=function(){return this._lastEditedBlob||null},w.prototype._buildAnnotation=function(){if(this._options.annotate){this._annotateOverlay=o("div","neiki-annotate"),this._annotateOverlay.innerHTML='<canvas class="neiki-annotate__canvas"></canvas><div class="neiki-annotate__toolbar"><input class="neiki-annotate__color" type="color" value="#ff3b30" aria-label="Stroke color"><input class="neiki-annotate__size" type="range" min="1" max="20" value="4" aria-label="Brush size"><button class="neiki-annotate__btn" data-action="undo" type="button" title="Undo">โถ</button><button class="neiki-annotate__btn" data-action="clear" type="button" title="Clear">Clear</button><button class="neiki-annotate__btn neiki-annotate__btn--primary" data-action="export" type="button" title="Export">Export</button><button class="neiki-annotate__btn" data-action="cancel" type="button" title="Close">Close</button></div>',this._lightbox.appendChild(this._annotateOverlay),this._annotateCanvas=this._annotateOverlay.querySelector(".neiki-annotate__canvas"),this._annotateCtx=this._annotateCanvas.getContext("2d"),this._annotateStrokes=[];var t=this;Array.prototype.forEach.call(this._annotateOverlay.querySelectorAll("button[data-action]"),function(i){i.addEventListener("click",function(){t._annotateAction(i.getAttribute("data-action"))})}),this._annotateOverlay.querySelector(".neiki-annotate__color").addEventListener("input",function(i){t._annotateColor=i.target.value}),this._annotateOverlay.querySelector(".neiki-annotate__size").addEventListener("input",function(i){t._annotateSize=parseInt(i.target.value,10)}),this._annotateColor="#ff3b30",this._annotateSize=4,this._bindAnnotateDrawing()}},w.prototype._bindAnnotateDrawing=function(){var t=this,i=this._annotateCanvas,e=!1,n=null;function o(t){var e=i.getBoundingClientRect(),n=t.touches?t.touches[0]:t;return{x:(n.clientX-e.left)*(i.width/e.width),y:(n.clientY-e.top)*(i.height/e.height)}}function r(i){i.preventDefault(),e=!0;var r=o(i);n={color:t._annotateColor,size:t._annotateSize,points:[r]}}function a(i){if(e){i.preventDefault();var r=o(i);n.points.push(r),t._redrawAnnotations(n)}}function s(){e&&(e=!1,n&&n.points.length>1&&t._annotateStrokes.push(n),n=null)}i.addEventListener("mousedown",r),i.addEventListener("mousemove",a),window.addEventListener("mouseup",s),i.addEventListener("touchstart",r,{passive:!1}),i.addEventListener("touchmove",a,{passive:!1}),i.addEventListener("touchend",s)},w.prototype._redrawAnnotations=function(t){var i=this._annotateCtx,e=this._annotateCanvas;i.clearRect(0,0,e.width,e.height);var n=this._annotateStrokes.slice();t&&n.push(t),n.forEach(function(t){if(t.points.length){i.strokeStyle=t.color,i.lineWidth=t.size,i.lineCap="round",i.lineJoin="round",i.beginPath(),i.moveTo(t.points[0].x,t.points[0].y);for(var e=1;e<t.points.length;e++)i.lineTo(t.points[e].x,t.points[e].y);i.stroke()}})},w.prototype.openAnnotate=function(){this._annotateOverlay&&this._currentImg&&(this._annotateCanvas.width=this._currentImg.naturalWidth||1024,this._annotateCanvas.height=this._currentImg.naturalHeight||768,this._annotateStrokes=[],this._redrawAnnotations(),this._annotateOverlay.classList.add("neiki-annotate--visible"),this._lightbox.classList.add("neiki-lightbox--annotate"),this._emit("annotateOpen"))},w.prototype.closeAnnotate=function(){this._annotateOverlay&&(this._annotateOverlay.classList.remove("neiki-annotate--visible"),this._lightbox.classList.remove("neiki-lightbox--annotate"),this._emit("annotateClose"))},w.prototype._annotateAction=function(t){switch(t){case"undo":this._annotateStrokes.pop(),this._redrawAnnotations();break;case"clear":this._annotateStrokes=[],this._redrawAnnotations();break;case"cancel":this.closeAnnotate();break;case"export":this._exportAnnotation()}},w.prototype._exportAnnotation=function(){if(this._currentImg){var t=document.createElement("canvas");t.width=this._currentImg.naturalWidth,t.height=this._currentImg.naturalHeight;var i=t.getContext("2d");try{i.drawImage(this._currentImg,0,0),i.drawImage(this._annotateCanvas,0,0);var e=this;t.toBlob(function(t){if(t){e._lastAnnotatedBlob=t,e._emit("annotateExport",{blob:t,url:URL.createObjectURL(t)});var i=document.createElement("a");i.href=URL.createObjectURL(t),i.download="annotated-"+Date.now()+".png",i.click()}},"image/png")}catch(t){this._showToast("Cannot export โ image is cross-origin")}}},w.prototype.getAnnotatedBlob=function(){return this._lastAnnotatedBlob||null},w.prototype._applyKenburns=function(){if(this._slideshowRunning){var t=this._options.slideshow;if("object"==typeof t&&t.kenburns&&this._currentImg){this._currentImg.classList.add("neiki-kenburns");var i=(this._options.slideshow.interval||4e3)+"ms";this._currentImg.style.setProperty("--neiki-kenburns-duration",i)}}},w.prototype._removeKenburns=function(){this._currentImg&&(this._currentImg.classList.remove("neiki-kenburns"),this._currentImg.style.removeProperty("--neiki-kenburns-duration"))},w.prototype._setupSlideshowPauseOnHover=function(){var t=this._options.slideshow;if("object"==typeof t&&t.pauseOnHover){var i=this;this._lightbox&&(this._lightbox.addEventListener("mouseenter",function(){i._slideshowRunning&&(i._slideshowPausedByHover=!0,i.pauseSlideshow())}),this._lightbox.addEventListener("mouseleave",function(){i._slideshowPausedByHover&&(i._slideshowPausedByHover=!1,i.startSlideshow())}))}},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",G):G(),w.autoInit=G,w.extractPalette=P,w.extractDominantColor=M,w.parseExif=z,w.decodeBlurhash=I,w.version="3.0.0",w});
|
|
12
|
+
!function(t,i){"function"==typeof define&&define.amd?define([],i):"object"==typeof module&&module.exports?module.exports=i():t.NeikiGallery=i()}("undefined"!=typeof self?self:this,function(){"use strict";!function(){if(!document.getElementById("neiki-gallery-styles")){var t=document.createElement("style");t.id="neiki-gallery-styles",t.textContent=".neiki-gallery[data-theme=dark],:root,[data-theme=dark]{--neiki-overlay-bg:rgba(8, 8, 12, 0.85);--neiki-btn-bg:rgba(255, 255, 255, 0.1);--neiki-btn-bg-hover:rgba(255, 255, 255, 0.2);--neiki-btn-color:#fff;--neiki-caption-color:#fff;--neiki-counter-color:rgba(255, 255, 255, 0.7)}.neiki-gallery[data-theme=dark],.neiki-gallery[data-theme=light],:root,[data-theme=dark],[data-theme=light]{--neiki-spinner-color:var(--neiki-accent);--neiki-thumb-active-border:2px solid var(--neiki-accent)}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a,.neiki-gallery--grid>.neiki-item,.neiki-gallery--grid>a,.neiki-gallery--masonry>.neiki-item,.neiki-gallery--masonry>a,.neiki-gallery--mosaic>.neiki-item,.neiki-gallery--mosaic>a{position:relative;transition:transform .35s var(--neiki-transition-easing),box-shadow .35s var(--neiki-transition-easing);cursor:pointer;text-decoration:none}.neiki-gallery--filmstrip>.neiki-item>img,.neiki-gallery--filmstrip>a>img,.neiki-gallery--grid>.neiki-item>img,.neiki-gallery--grid>a>img,.neiki-gallery--masonry>.neiki-item>img,.neiki-gallery--masonry>a>img,.neiki-gallery--mosaic>.neiki-item>img,.neiki-gallery--mosaic>a>img{width:100%;border-radius:var(--neiki-border-radius,14px);transition:transform .4s var(--neiki-transition-easing),opacity .5s var(--neiki-transition-easing);opacity:0}.neiki-gallery--filmstrip>.neiki-item>img.neiki-loaded,.neiki-gallery--filmstrip>a>img.neiki-loaded,.neiki-gallery--grid>.neiki-item>img.neiki-loaded,.neiki-gallery--grid>a>img.neiki-loaded,.neiki-gallery--masonry>.neiki-item>img.neiki-loaded,.neiki-gallery--masonry>a>img.neiki-loaded,.neiki-gallery--mosaic>.neiki-item>img.neiki-loaded,.neiki-gallery--mosaic>a>img.neiki-loaded{opacity:1}.neiki-exif,.neiki-lightbox__counter{font-variant-numeric:tabular-nums;white-space:nowrap}:root{--neiki-columns:4;--neiki-gap:14px;--neiki-border-radius:14px;--neiki-accent:#3b82f6;--neiki-accent-hover:#2563eb;--neiki-overlay-backdrop:blur(24px) saturate(1.2);--neiki-lightbox-max-width:90vw;--neiki-lightbox-max-height:85vh;--neiki-btn-size:44px;--neiki-btn-border-radius:12px;--neiki-btn-backdrop:blur(12px) saturate(1.4);--neiki-font:system-ui,-apple-system,'Segoe UI',sans-serif;--neiki-caption-font-size:14px;--neiki-counter-font-size:12px;--neiki-thumb-size:52px;--neiki-thumb-gap:6px;--neiki-thumb-border-radius:8px;--neiki-thumb-opacity:0.5;--neiki-thumb-active-opacity:1;--neiki-spinner-size:36px;--neiki-spinner-width:3px;--neiki-transition-duration:0.3s;--neiki-transition-easing:cubic-bezier(0.4, 0, 0.2, 1);--neiki-zoom-scale:2;--neiki-stagger-delay:0.04s;--neiki-hover-lift:-4px;--neiki-hover-shadow:0 12px 32px rgba(0, 0, 0, 0.25)}.neiki-gallery[data-theme=light],[data-theme=light]{--neiki-overlay-bg:rgba(245, 245, 247, 0.88);--neiki-btn-bg:rgba(0, 0, 0, 0.06);--neiki-btn-bg-hover:rgba(0, 0, 0, 0.12);--neiki-btn-color:#1a1a1a;--neiki-caption-color:#1a1a1a;--neiki-counter-color:rgba(0, 0, 0, 0.5);--neiki-hover-shadow:0 12px 32px rgba(0, 0, 0, 0.12)}.neiki-gallery{box-sizing:border-box;font-family:var(--neiki-font)}.neiki-gallery *,.neiki-gallery ::after,.neiki-gallery ::before{box-sizing:inherit}.neiki-gallery--masonry{column-count:var(--neiki-columns,4);column-gap:var(--neiki-gap,14px)}.neiki-gallery--masonry>.neiki-item,.neiki-gallery--masonry>a{display:inline-block;width:100%;margin-bottom:var(--neiki-gap,14px);break-inside:avoid;border-radius:var(--neiki-border-radius,14px);overflow:hidden}.neiki-gallery--masonry>.neiki-item>img,.neiki-gallery--masonry>a>img{display:block;height:auto;transform:scale(1)}.neiki-gallery--grid>.neiki-item:hover,.neiki-gallery--grid>a:hover,.neiki-gallery--masonry>.neiki-item:hover,.neiki-gallery--masonry>a:hover,.neiki-gallery--mosaic>.neiki-item:hover,.neiki-gallery--mosaic>a:hover{transform:translateY(var(--neiki-hover-lift));box-shadow:var(--neiki-hover-shadow)}.neiki-gallery--masonry>.neiki-item:hover>img,.neiki-gallery--masonry>a:hover>img{transform:scale(1.03)}.neiki-gallery--grid{display:grid;grid-template-columns:repeat(var(--neiki-columns,4),1fr);gap:var(--neiki-gap,14px)}.neiki-gallery--grid>.neiki-item,.neiki-gallery--grid>a{display:block;overflow:hidden;border-radius:var(--neiki-border-radius,14px);aspect-ratio:1/1}.neiki-gallery--grid>.neiki-item>img,.neiki-gallery--grid>a>img{display:block;height:100%;object-fit:cover}.neiki-gallery--grid>.neiki-item:hover>img,.neiki-gallery--grid>a:hover>img{transform:scale(1.05)}.neiki-gallery--mosaic{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:200px;gap:var(--neiki-gap,14px);grid-auto-flow:dense}.neiki-gallery--mosaic>.neiki-item,.neiki-gallery--mosaic>a{display:block;overflow:hidden;border-radius:var(--neiki-border-radius,14px)}.neiki-gallery--mosaic>.neiki-item[data-size=large],.neiki-gallery--mosaic>a[data-size=large]{grid-column:span 2;grid-row:span 2}.neiki-gallery--mosaic>.neiki-item[data-size=wide],.neiki-gallery--mosaic>a[data-size=wide]{grid-column:span 2}.neiki-gallery--mosaic>.neiki-item[data-size=tall],.neiki-gallery--mosaic>a[data-size=tall]{grid-row:span 2}.neiki-gallery--mosaic>.neiki-item>img,.neiki-gallery--mosaic>a>img{display:block;height:100%;object-fit:cover}.neiki-gallery--mosaic>.neiki-item:hover>img,.neiki-gallery--mosaic>a:hover>img{transform:scale(1.04)}.neiki-gallery--filmstrip{display:flex;gap:var(--neiki-gap,14px);overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:4px}.neiki-gallery--filmstrip::-webkit-scrollbar{display:none}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{flex:0 0 auto;width:280px;height:360px;scroll-snap-align:center;border-radius:var(--neiki-border-radius,14px);overflow:hidden}.neiki-gallery--filmstrip>.neiki-item>img,.neiki-gallery--filmstrip>a>img{display:block;height:100%;object-fit:cover}.neiki-compare__handle::after,.neiki-gallery>.neiki-item.neiki-filter-hidden,.neiki-gallery>a.neiki-filter-hidden,.neiki-lightbox--pip .neiki-exif,.neiki-lightbox--pip .neiki-lightbox__caption,.neiki-lightbox--pip .neiki-lightbox__thumbs,.neiki-lightbox--pip .neiki-lightbox__topbar,.neiki-lightbox--pip .neiki-palette,.neiki-lightbox__spinner.neiki-hidden{display:none}.neiki-gallery--filmstrip>.neiki-item:hover,.neiki-gallery--filmstrip>a:hover{transform:translateY(var(--neiki-hover-lift)) scale(1.02);box-shadow:var(--neiki-hover-shadow)}.neiki-gallery--stagger>.neiki-item,.neiki-gallery--stagger>a{transform:translateY(20px);animation:neiki-stagger-in .5s var(--neiki-transition-easing) forwards}@keyframes neiki-stagger-in{to{transform:translateY(0)}}.neiki-gallery>.neiki-item.neiki-selected,.neiki-gallery>a.neiki-selected{outline:3px solid var(--neiki-accent);outline-offset:-3px}.neiki-gallery>.neiki-item.neiki-selected::after,.neiki-gallery>a.neiki-selected::after{content:'';position:absolute;top:8px;right:8px;width:24px;height:24px;background:var(--neiki-accent);border-radius:50%;z-index:5;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E\");background-size:14px;background-repeat:no-repeat;background-position:center}.neiki-filter-bar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;font-family:var(--neiki-font)}.neiki-filter-btn{display:inline-flex;align-items:center;padding:6px 16px;border:1px solid rgba(128,128,128,.25);border-radius:999px;background:0 0;color:inherit;font-size:13px;font-family:inherit;cursor:pointer;transition:all .2s var(--neiki-transition-easing);-webkit-appearance:none;appearance:none;outline:0}.neiki-filter-btn:hover{border-color:var(--neiki-accent);color:var(--neiki-accent)}.neiki-filter-btn.neiki-filter--active{background:var(--neiki-accent);border-color:var(--neiki-accent);color:#fff}.neiki-filter-btn:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.4)}@media (max-width:1200px){.neiki-gallery--masonry{column-count:3}.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(3,1fr)}}@media (max-width:900px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(2,1fr)}.neiki-gallery--masonry{column-count:2}.neiki-gallery--mosaic{grid-auto-rows:160px}.neiki-gallery{--neiki-gap:10px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:220px;height:300px}}.neiki-lightbox{position:fixed;inset:0;z-index:999999;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--neiki-overlay-bg);-webkit-backdrop-filter:var(--neiki-overlay-backdrop);backdrop-filter:var(--neiki-overlay-backdrop);opacity:0;visibility:hidden;transition:opacity .35s var(--neiki-transition-easing),visibility 0s linear .35s;-webkit-user-select:none;user-select:none;outline:0;font-family:var(--neiki-font)}.neiki-lightbox__slide-wrapper,.neiki-lightbox__stage{display:flex;align-items:center;width:100%;position:relative}.neiki-lightbox.neiki-lightbox--visible{opacity:1;visibility:visible;transition:opacity .35s var(--neiki-transition-easing),visibility 0s linear 0s}.neiki-lightbox__stage{justify-content:center;flex:1 1 auto;min-height:0;overflow:hidden}.neiki-lightbox__slide-wrapper{justify-content:center;height:100%}.neiki-lightbox__btn,.neiki-lightbox__topbar{z-index:10;display:flex;align-items:center;position:absolute}.neiki-lightbox--fade .neiki-lightbox__image{transition:opacity var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox--fade .neiki-lightbox__image.neiki-entering{opacity:0}.neiki-lightbox--fade .neiki-lightbox__image.neiki-active{opacity:1}.neiki-lightbox--slide .neiki-lightbox__slide-wrapper{transition:transform var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox__image{max-width:var(--neiki-lightbox-max-width,90vw);max-height:var(--neiki-lightbox-max-height,85vh);width:auto;height:auto;object-fit:contain;border-radius:var(--neiki-border-radius,14px);cursor:zoom-in;transition:transform .35s var(--neiki-transition-easing),opacity var(--neiki-transition-duration) var(--neiki-transition-easing);-webkit-user-drag:none;pointer-events:auto}.neiki-lightbox__image.neiki-zoomed{transform:scale(var(--neiki-zoom-scale,2));cursor:grab}.neiki-lightbox__image.neiki-zoomed:active{cursor:grabbing}.neiki-lightbox__image.neiki-zoom-pan{cursor:grab;transform-origin:var(--neiki-zoom-x,center) var(--neiki-zoom-y,center);transform:scale(var(--neiki-zoom-scale,2))}.neiki-draggable:active,.neiki-lightbox__image.neiki-zoom-pan:active{cursor:grabbing}.neiki-lightbox__btn{justify-content:center;width:var(--neiki-btn-size);height:var(--neiki-btn-size);border:1px solid rgba(255,255,255,.08);border-radius:var(--neiki-btn-border-radius);background:var(--neiki-btn-bg);-webkit-backdrop-filter:var(--neiki-btn-backdrop);backdrop-filter:var(--neiki-btn-backdrop);color:var(--neiki-btn-color);cursor:pointer;transition:background .2s var(--neiki-transition-easing),transform .15s ease,border-color .2s ease;padding:0;line-height:1;font-family:inherit;-webkit-appearance:none;appearance:none;outline:0}.neiki-compare,.neiki-lightbox__caption,.neiki-lightbox__counter,.neiki-share{font-family:var(--neiki-font)}.neiki-lightbox__btn:hover{background:var(--neiki-btn-bg-hover);border-color:rgba(255,255,255,.15)}.neiki-lightbox__btn:active{transform:scale(.92)}.neiki-lightbox__next:active,.neiki-lightbox__prev:active{transform:translateY(-50%) scale(.92)}.neiki-lightbox__btn:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.5)}.neiki-lightbox__btn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-lightbox__toolbar{position:absolute;top:16px;right:16px;z-index:10;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:4px;padding:4px;max-width:calc(100vw - 80px);background:rgba(0,0,0,.25);-webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);border:1px solid rgba(255,255,255,.08);border-radius:16px}.neiki-lightbox__toolbar .neiki-lightbox__btn{position:relative;top:auto;right:auto;left:auto;bottom:auto;border:none;background:0 0;-webkit-backdrop-filter:none;backdrop-filter:none;width:36px;height:36px;border-radius:10px}[data-theme=light] .neiki-lightbox__counter,[data-theme=light] .neiki-lightbox__toolbar{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.06)}.neiki-lightbox__toolbar .neiki-lightbox__btn:hover{background:rgba(255,255,255,.12)}.neiki-lightbox__toolbar .neiki-lightbox__btn svg{width:18px;height:18px}[data-theme=light] .neiki-lightbox__toolbar .neiki-lightbox__btn:hover{background:rgba(0,0,0,.08)}.neiki-lightbox__prev{left:16px;top:50%;transform:translateY(-50%)}.neiki-lightbox__next{right:16px;top:50%;transform:translateY(-50%)}.neiki-lightbox__topbar{top:16px;left:16px;gap:8px}.neiki-lightbox__counter{display:inline-flex;align-items:center;padding:4px 12px;background:rgba(0,0,0,.3);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:999px;color:var(--neiki-counter-color);font-size:var(--neiki-counter-font-size)}.neiki-lightbox__caption{flex:0 0 auto;width:100%;text-align:center;padding:10px 80px;color:var(--neiki-caption-color);font-size:var(--neiki-caption-font-size);line-height:1.5;min-height:1.5em;transition:opacity var(--neiki-transition-duration) var(--neiki-transition-easing)}.neiki-lightbox__thumbs{flex:0 0 auto;width:100%;display:flex;align-items:center;justify-content:center;gap:var(--neiki-thumb-gap);padding:8px 16px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.neiki-lightbox__thumbs::-webkit-scrollbar{display:none}.neiki-lightbox__thumb{flex:0 0 auto;width:var(--neiki-thumb-size);height:var(--neiki-thumb-size);border-radius:var(--neiki-thumb-border-radius);overflow:hidden;cursor:pointer;opacity:var(--neiki-thumb-opacity);border:2px solid transparent;transition:opacity .2s var(--neiki-transition-easing),border-color .2s var(--neiki-transition-easing),transform .2s var(--neiki-transition-easing);background:rgba(128,128,128,.15);padding:0;-webkit-appearance:none;appearance:none;outline:0}.neiki-lightbox__thumb:hover{opacity:.8;transform:scale(1.08)}.neiki-lightbox__thumb.neiki-thumb--active{opacity:var(--neiki-thumb-active-opacity);border:var(--neiki-thumb-active-border);transform:scale(1.08)}.neiki-lightbox__thumb:focus-visible{box-shadow:0 0 0 3px rgba(59,130,246,.5)}.neiki-lightbox__thumb img{display:block;width:100%;height:100%;object-fit:cover}.neiki-lightbox__progress{position:absolute;bottom:0;left:0;height:3px;background:var(--neiki-accent);border-radius:0 3px 3px 0;width:0%;z-index:15;transition:none}.neiki-lightbox__progress.neiki-progress--running{transition:width linear}.neiki-lightbox__progress.neiki-progress--paused{transition:none}.neiki-compare{position:relative;overflow:hidden;border-radius:var(--neiki-border-radius,14px);cursor:col-resize;-webkit-user-select:none;user-select:none}.neiki-compare__after,.neiki-compare__before{display:block;width:100%;height:auto;-webkit-user-drag:none}.neiki-compare__after{position:absolute;top:0;left:0;height:100%;object-fit:cover;clip-path:inset(0 0 0 50%)}.neiki-compare__handle{position:absolute;top:0;left:50%;width:4px;height:100%;background:#fff;transform:translateX(-50%);z-index:5;box-shadow:0 0 8px rgba(0,0,0,.4)}.neiki-compare__handle::after,.neiki-compare__handle::before{content:'';position:absolute;left:50%;transform:translateX(-50%);width:32px;height:32px;background:#fff;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.3)}.neiki-compare__handle::before{top:50%;margin-top:-16px;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='15 18 9 12 15 6'/%3E%3C/svg%3E\");background-size:16px;background-repeat:no-repeat;background-position:6px center}.neiki-compare__label{position:absolute;bottom:12px;padding:4px 12px;background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:999px;color:#fff;font-size:12px;font-weight:500;z-index:4;pointer-events:none}.neiki-compare__label--before{left:12px}.neiki-compare__label--after{right:12px}.neiki-share{position:absolute;bottom:60px;right:16px;z-index:20;display:flex;flex-direction:column;gap:4px;padding:8px;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(20px) saturate(1.3);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:16px;opacity:0;transform:translateY(8px);visibility:hidden;transition:opacity .2s,transform .2s,visibility 0s linear .2s}.neiki-share.neiki-share--visible{opacity:1;transform:translateY(0);visibility:visible;transition:opacity .2s,transform .2s,visibility linear}.neiki-share__btn{display:flex;align-items:center;gap:10px;padding:8px 14px;border:none;border-radius:10px;background:0 0;color:#fff;font-size:13px;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .15s;-webkit-appearance:none;appearance:none;outline:0}.neiki-exif,.neiki-story,.neiki-toast{font-family:var(--neiki-font)}.neiki-share__btn:hover{background:rgba(255,255,255,.12)}.neiki-share__btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}[data-theme=light] .neiki-share{background:rgba(255,255,255,.6);border-color:rgba(0,0,0,.06)}[data-theme=light] .neiki-share__btn{color:#1a1a1a}[data-theme=light] .neiki-share__btn:hover{background:rgba(0,0,0,.06)}.neiki-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(16px);padding:10px 20px;background:rgba(0,0,0,.7);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:12px;color:#fff;font-size:13px;z-index:9999999;opacity:0;transition:opacity .25s,transform .25s;pointer-events:none}.neiki-toast.neiki-toast--visible{opacity:1;transform:translateX(-50%) translateY(0)}.neiki-lightbox__spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:var(--neiki-spinner-size);height:var(--neiki-spinner-size);border:var(--neiki-spinner-width) solid rgba(128,128,128,.2);border-top-color:var(--neiki-spinner-color);border-radius:50%;animation:.7s linear infinite neiki-spin;pointer-events:none;z-index:5}@keyframes neiki-spin{to{transform:translate(-50%,-50%) rotate(360deg)}}.neiki-gallery>.neiki-item,.neiki-gallery>a{background:linear-gradient(110deg,#e8e8e8 8%,#f5f5f5 18%,#e8e8e8 33%);background-size:200% 100%;animation:1.4s linear infinite neiki-shimmer}.neiki-gallery[data-theme=dark]>.neiki-item,.neiki-gallery[data-theme=dark]>a,[data-theme=dark] .neiki-gallery>.neiki-item,[data-theme=dark] .neiki-gallery>a{background:linear-gradient(110deg,#1e1e22 8%,#2a2a30 18%,#1e1e22 33%);background-size:200% 100%}@keyframes neiki-shimmer{to{background-position:-200% 0}}.neiki-lightbox--pip{inset:auto;top:auto;left:auto;right:20px;bottom:20px;width:360px;height:280px;border-radius:16px;box-shadow:0 8px 40px rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.1);resize:both;overflow:hidden;z-index:999998}.neiki-lightbox--pip .neiki-lightbox__toolbar{top:8px;right:8px;padding:2px;border-radius:10px}.neiki-lightbox--pip .neiki-lightbox__next,.neiki-lightbox--pip .neiki-lightbox__prev,.neiki-lightbox--pip .neiki-lightbox__toolbar .neiki-lightbox__btn{width:28px;height:28px}.neiki-lightbox--pip .neiki-lightbox__next svg,.neiki-lightbox--pip .neiki-lightbox__prev svg,.neiki-lightbox--pip .neiki-lightbox__toolbar .neiki-lightbox__btn svg{width:14px;height:14px}.neiki-lightbox--pip .neiki-lightbox__image{max-width:100%;max-height:100%;border-radius:0}.neiki-story{position:fixed;inset:0;z-index:9999999;background:#000;display:flex;align-items:center;justify-content:center;overflow:hidden}.neiki-story__slide{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .4s;pointer-events:none}.neiki-editor--visible,.neiki-palette--visible,.neiki-shortcuts--visible,.neiki-story__slide--active{opacity:1;pointer-events:auto}.neiki-story__image{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none}.neiki-story__caption{position:absolute;bottom:60px;left:0;right:0;text-align:center;color:#fff;font-size:15px;padding:8px 20px;text-shadow:0 1px 4px rgba(0,0,0,.6)}.neiki-story__close,.neiki-story__progress-wrap{position:absolute;right:16px;display:flex;z-index:10}.neiki-story__close{top:16px;width:40px;height:40px;align-items:center;justify-content:center;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.1);border-radius:50%;color:#fff;cursor:pointer;padding:0;-webkit-appearance:none;appearance:none;outline:0}.neiki-story__close svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-story__close:hover{background:rgba(255,255,255,.15)}.neiki-story__progress-wrap{top:8px;left:16px;gap:4px}.neiki-story__progress-bar{flex:1;height:3px;background:rgba(255,255,255,.25);border-radius:3px;overflow:hidden}.neiki-story__progress-fill{width:0%;height:100%;background:#fff;border-radius:3px;transition:none}.neiki-exif,.neiki-palette{left:50%;transform:translateX(-50%);z-index:12;transition:opacity .3s;position:absolute;pointer-events:none}.neiki-exif{bottom:48px;display:inline-flex;align-items:center;padding:5px 14px;background:rgba(0,0,0,.35);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:999px;color:rgba(255,255,255,.6);font-size:11px;opacity:0}.neiki-exif--visible{opacity:1}[data-theme=light] .neiki-exif{background:rgba(255,255,255,.5);border-color:rgba(0,0,0,.06);color:rgba(0,0,0,.5)}.neiki-palette{top:16px;display:flex;align-items:center;gap:6px;padding:5px 10px;background:rgba(0,0,0,.25);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.06);border-radius:999px;opacity:0}.neiki-palette__dot{display:block;width:16px;height:16px;border-radius:50%;border:1.5px solid rgba(255,255,255,.2);cursor:pointer;transition:transform .15s}.neiki-palette__dot:hover{transform:scale(1.3)}.neiki-draggable{cursor:grab}.neiki-dragging{opacity:.4;transform:scale(.96)}.neiki-drag-over{outline:2px dashed var(--neiki-accent);outline-offset:-2px}.neiki-virtual-hidden{content-visibility:hidden;contain-intrinsic-size:auto 300px}.neiki-lightbox--tinted{background:rgba(var(--neiki-tint-r,8),var(--neiki-tint-g,8),var(--neiki-tint-b,12),.82);transition:background .6s}@media (max-width:768px){.neiki-lightbox{--neiki-lightbox-max-width:94vw;--neiki-lightbox-max-height:75vh;--neiki-btn-size:40px;--neiki-zoom-scale:1.8}.neiki-lightbox__next,.neiki-lightbox__prev{width:40px;height:40px}.neiki-lightbox__btn svg{width:18px;height:18px}.neiki-lightbox__thumbs{padding:6px 10px 10px}.neiki-lightbox__thumb{width:44px;height:44px}.neiki-lightbox__toolbar{top:10px;right:10px;gap:4px;padding:3px;max-width:calc(100vw - 60px);border-radius:14px}.neiki-lightbox__toolbar .neiki-lightbox__btn{width:34px;height:34px}.neiki-lightbox__caption{position:relative;padding:12px 16px;background:rgba(0,0,0,.2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:16px 16px 0 0;text-align:left;font-size:13px}[data-theme=light] .neiki-lightbox__caption{background:rgba(255,255,255,.4)}}@media (max-width:600px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:repeat(2,1fr)}.neiki-gallery--masonry{column-count:2}.neiki-gallery--mosaic{grid-auto-rows:140px}.neiki-gallery{--neiki-gap:8px;--neiki-border-radius:10px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:180px;height:240px}.neiki-lightbox{--neiki-lightbox-max-width:96vw;--neiki-lightbox-max-height:70vh;--neiki-btn-size:36px;--neiki-zoom-scale:1.6}.neiki-lightbox__next,.neiki-lightbox__prev{width:36px;height:36px}.neiki-lightbox__prev{left:6px}.neiki-lightbox__next{right:6px}.neiki-lightbox__topbar{top:10px;left:10px}.neiki-lightbox__caption{padding:8px 14px;font-size:12px}.neiki-lightbox__thumbs{padding:4px 6px 8px}.neiki-lightbox__thumb{width:38px;height:38px}.neiki-share{bottom:50px;right:10px}}@media (max-width:400px){.neiki-gallery--grid,.neiki-gallery--mosaic{grid-template-columns:1fr}.neiki-gallery--masonry{column-count:1}.neiki-gallery--mosaic{grid-auto-rows:200px}.neiki-gallery--mosaic>.neiki-item[data-size=large],.neiki-gallery--mosaic>.neiki-item[data-size=wide],.neiki-gallery--mosaic>a[data-size=large],.neiki-gallery--mosaic>a[data-size=wide]{grid-column:span 1}.neiki-gallery{--neiki-gap:8px}.neiki-gallery--filmstrip>.neiki-item,.neiki-gallery--filmstrip>a{width:160px;height:220px}.neiki-lightbox{--neiki-lightbox-max-width:98vw;--neiki-lightbox-max-height:65vh;--neiki-btn-size:32px}.neiki-lightbox__next,.neiki-lightbox__prev,.neiki-lightbox__thumb{width:32px;height:32px}.neiki-lightbox__btn svg{width:16px;height:16px}.neiki-lightbox__caption{padding:6px 10px;font-size:11px}.neiki-lightbox__counter{font-size:11px;padding:3px 8px}.neiki-filter-bar{gap:6px}.neiki-filter-btn{padding:4px 12px;font-size:12px}}.neiki-lightbox__embed,.neiki-lightbox__video{display:block;max-width:var(--neiki-lightbox-max-width,90vw);max-height:var(--neiki-lightbox-max-height,85vh);width:auto;height:auto;border-radius:var(--neiki-border-radius,14px);background:#000;outline:0}.neiki-lightbox__embed{width:min(90vw,1200px);aspect-ratio:16/9;height:auto}.neiki-gallery>a[data-type=video]::after,.neiki-gallery>a[data-type=vimeo]::after,.neiki-gallery>a[data-type=youtube]::after,.neiki-gallery>a[href*=\".mp4\"]::after,.neiki-gallery>a[href*=\".webm\"]::after,.neiki-gallery>a[href*=\"vimeo.com\"]::after,.neiki-gallery>a[href*=\"youtu.be\"]::after,.neiki-gallery>a[href*=\"youtube.com\"]::after{content:\"\";position:absolute;inset:50% auto auto 50%;transform:translate(-50%,-50%);width:56px;height:56px;background:rgba(0,0,0,.6);border-radius:50%;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'><polygon points='6 4 20 12 6 20'/></svg>\");background-repeat:no-repeat;background-position:56% 50%;background-size:22px 22px;pointer-events:none;opacity:.9;transition:transform .2s,opacity .2s}.neiki-gallery>a:hover::after{transform:translate(-50%,-50%) scale(1.08);opacity:1}.neiki-lightbox__fav svg{fill:none;transition:fill .2s,transform .2s}.neiki-lightbox__fav--active svg{fill:#ef4444;stroke:#ef4444;animation:.4s neiki-fav-pop}@keyframes neiki-fav-pop{0%,100%{transform:scale(1)}50%{transform:scale(1.3)}}.neiki-favorited{position:relative}.neiki-favorited::before{content:\"\";position:absolute;top:8px;right:8px;width:22px;height:22px;background:rgba(239,68,68,.95);background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'><path d='M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z'/></svg>\");background-repeat:no-repeat;background-position:center;background-size:14px 14px;border-radius:50%;z-index:3;box-shadow:0 2px 8px rgba(0,0,0,.3);pointer-events:none}.neiki-lightbox__info{position:absolute;top:0;right:0;height:100%;width:min(360px,92vw);z-index:30;background:rgba(15,18,24,.92);-webkit-backdrop-filter:blur(20px) saturate(1.2);backdrop-filter:blur(20px) saturate(1.2);color:rgba(255,255,255,.92);border-left:1px solid rgba(255,255,255,.08);transform:translateX(100%);transition:transform .32s cubic-bezier(.4, 0, .2, 1);display:flex;flex-direction:column}.neiki-context-menu,.neiki-editor__toolbar{-webkit-backdrop-filter:blur(20px) saturate(1.3)}.neiki-lightbox--info-open .neiki-lightbox__info{transform:translateX(0)}.neiki-info__header{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid rgba(255,255,255,.08)}.neiki-info__title{margin:0;font-size:15px;font-weight:600;letter-spacing:.01em}.neiki-info__close{background:0 0;border:none;cursor:pointer;padding:6px;color:inherit;border-radius:8px;transition:background .15s}.neiki-info__close:hover{background:rgba(255,255,255,.08)}.neiki-info__close svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-info__body{padding:18px 20px;overflow-y:auto;flex:1;font-size:13px;line-height:1.55}.neiki-info__list{margin:0;display:grid;grid-template-columns:110px 1fr;gap:8px 12px}.neiki-info__list dt{color:rgba(255,255,255,.55);font-weight:500}.neiki-info__list dd{margin:0;word-break:break-word}.neiki-info__list dd a{color:var(--neiki-accent,#3b82f6);text-decoration:none}.neiki-info__list dd a:hover{text-decoration:underline}.neiki-info__subtitle{margin:22px 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:rgba(255,255,255,.5)}[data-theme=light] .neiki-lightbox__info{background:rgba(255,255,255,.94);color:#18181b;border-left-color:rgba(0,0,0,.08)}[data-theme=light] .neiki-info__list dt{color:rgba(0,0,0,.55)}.neiki-context-menu{position:fixed;z-index:9999;min-width:200px;padding:6px;background:rgba(20,22,28,.92);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:12px;box-shadow:0 12px 36px rgba(0,0,0,.4);opacity:0;transform:scale(.96);pointer-events:none;transition:opacity .14s,transform .14s}.neiki-context-menu--visible{opacity:1;transform:scale(1);pointer-events:auto}.neiki-editor,.neiki-shortcuts{opacity:0;pointer-events:none;position:absolute}.neiki-context-menu__item{width:100%;display:flex;align-items:center;gap:10px;padding:8px 12px;background:0 0;border:none;cursor:pointer;color:rgba(255,255,255,.92);font-size:13px;border-radius:8px;text-align:left;font-family:inherit}.neiki-shortcuts__keys kbd,.neiki-shortcuts__panel{border:1px solid rgba(255,255,255,.1);color:rgba(255,255,255,.92)}.neiki-context-menu__item:hover{background:rgba(255,255,255,.08)}.neiki-context-menu__icon{display:inline-flex;width:16px;height:16px;flex-shrink:0}.neiki-context-menu__icon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}[data-theme=light] .neiki-context-menu{background:rgba(255,255,255,.95);border-color:rgba(0,0,0,.08);color:#18181b}.neiki-shortcuts__close:hover,.neiki-shortcuts__keys kbd{background:rgba(255,255,255,.08)}[data-theme=light] .neiki-context-menu__item{color:#18181b}[data-theme=light] .neiki-context-menu__item:hover{background:rgba(0,0,0,.06)}.neiki-shortcuts{inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:opacity .2s}.neiki-shortcuts__panel{background:rgba(20,22,28,.96);border-radius:16px;padding:20px 24px;min-width:320px;max-width:90vw;max-height:80vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.5)}.neiki-shortcuts__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.neiki-shortcuts__header h3{margin:0;font-size:16px;font-weight:600}.neiki-shortcuts__close{background:0 0;border:none;cursor:pointer;padding:6px;color:inherit;border-radius:8px}.neiki-shortcuts__close svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-shortcuts__list{list-style:none;margin:0;padding:0;display:grid;gap:10px}.neiki-shortcuts__list li{display:flex;align-items:center;justify-content:space-between;gap:16px;font-size:13px}.neiki-shortcuts__keys kbd{display:inline-block;padding:3px 8px;border-radius:6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;margin-right:4px}.neiki-shortcuts__desc{color:rgba(255,255,255,.7)}[data-theme=light] .neiki-shortcuts__panel{background:rgba(255,255,255,.98);color:#18181b;border-color:rgba(0,0,0,.08)}[data-theme=light] .neiki-shortcuts__keys kbd{background:rgba(0,0,0,.06);border-color:rgba(0,0,0,.1);color:#18181b}[data-theme=light] .neiki-shortcuts__desc{color:rgba(0,0,0,.6)}.neiki-editor{bottom:80px;left:50%;transform:translateX(-50%);z-index:35;transition:opacity .2s,transform .2s}.neiki-annotate__btn,.neiki-editor__btn{min-width:36px;font-family:inherit;transition:background .15s;font-size:13px}.neiki-editor__toolbar{display:flex;gap:6px;align-items:center;padding:6px;background:rgba(20,22,28,.92);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.4)}.neiki-editor__btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 10px;background:0 0;border:none;color:rgba(255,255,255,.92);border-radius:10px;cursor:pointer}.neiki-editor__btn:hover{background:rgba(255,255,255,.1)}.neiki-editor__btn--primary{background:var(--neiki-accent,#3b82f6);color:#fff}.neiki-editor__btn--primary:hover{background:var(--neiki-accent-hover,#2563eb)}.neiki-annotate__btn:hover,.neiki-editor__sep{background:rgba(255,255,255,.1)}.neiki-editor__btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.neiki-editor__sep{width:1px;height:22px;margin:0 4px}.neiki-annotate{position:absolute;inset:0;z-index:40;display:none;align-items:center;justify-content:center}.neiki-annotate--visible{display:flex}.neiki-annotate__canvas{max-width:var(--neiki-lightbox-max-width,90vw);max-height:calc(var(--neiki-lightbox-max-height,85vh) - 60px);background:0 0;cursor:crosshair;border-radius:var(--neiki-border-radius,14px);touch-action:none}.neiki-annotate__toolbar{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);display:flex;gap:8px;align-items:center;padding:8px;background:rgba(20,22,28,.92);-webkit-backdrop-filter:blur(20px) saturate(1.3);backdrop-filter:blur(20px) saturate(1.3);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.4)}.neiki-annotate__color{width:36px;height:36px;padding:0;border:1px solid rgba(255,255,255,.15);border-radius:10px;background:0 0;cursor:pointer}.neiki-annotate__size{width:100px;accent-color:var(--neiki-accent,#3b82f6)}.neiki-annotate__btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 10px;background:0 0;border:none;color:rgba(255,255,255,.92);border-radius:10px;cursor:pointer}.neiki-annotate__btn--primary{background:var(--neiki-accent,#3b82f6);color:#fff}.neiki-annotate__btn--primary:hover{background:var(--neiki-accent-hover,#2563eb)}.neiki-infinite-sentinel{height:80px;width:100%;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.5);font-size:13px}.neiki-infinite-sentinel--loading::after{content:\"\";width:22px;height:22px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:.7s linear infinite neiki-spin-simple}@keyframes neiki-spin-simple{to{transform:rotate(360deg)}}.neiki-infinite-sentinel--done::after{content:\"โ end โ\";font-size:12px;opacity:.6}.neiki-kenburns{animation:neiki-kenburns var(--neiki-kenburns-duration,4000ms) ease-in-out forwards;transform-origin:center}@keyframes neiki-kenburns{0%{transform:scale(1) translate(0,0)}100%{transform:scale(1.08) translate(-1.5%,-1.2%)}}.neiki-lightbox--info-open .neiki-lightbox__caption,.neiki-lightbox--info-open .neiki-lightbox__stage{width:calc(100% - min(360px,92vw));margin-right:auto;margin-left:0;transition:width .32s cubic-bezier(.4, 0, .2, 1)}@media (max-width:700px){.neiki-lightbox--info-open .neiki-lightbox__caption,.neiki-lightbox--info-open .neiki-lightbox__stage{width:100%}}@media (prefers-reduced-motion:reduce){*,::after,::before{transition-duration:0s!important;animation-duration:0s!important;animation-iteration-count:1!important}.neiki-fav-pop,.neiki-kenburns{animation:none}}",document.head.appendChild(t)}}();var t=0;function i(t,i){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);if(i)for(var n in i)i.hasOwnProperty(n)&&(e[n]=i[n]);return e}function e(t,i){return(i||document).querySelector(t)}function n(t,i){return Array.prototype.slice.call((i||document).querySelectorAll(t))}function o(t,i,e,n){var o=document.createElement(t);if(i&&(o.className=i),e)for(var r in e)e.hasOwnProperty(r)&&o.setAttribute(r,e[r]);return n&&(o.innerHTML=n),o}function r(t){var i=document.querySelector(".neiki-toast");i&&i.remove();var e=o("div","neiki-toast",{},t);document.body.appendChild(e),requestAnimationFrame(function(){e.classList.add("neiki-toast--visible")}),setTimeout(function(){e.classList.remove("neiki-toast--visible"),setTimeout(function(){e.parentNode&&e.remove()},300)},2e3)}var a='<svg viewBox="0 0 24 24"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',s='<svg viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>',l='<svg viewBox="0 0 24 24"><polyline points="9 6 15 12 9 18"/></svg>',h='<svg viewBox="0 0 24 24"><polyline points="15 3 21 3 21 9"/><polyline points="9 21 3 21 3 15"/><line x1="21" y1="3" x2="14" y2="10"/><line x1="3" y1="21" x2="10" y2="14"/></svg>',d='<svg viewBox="0 0 24 24"><polyline points="4 14 10 14 10 20"/><polyline points="20 10 14 10 14 4"/><line x1="14" y1="10" x2="21" y2="3"/><line x1="3" y1="21" x2="10" y2="14"/></svg>',p='<svg viewBox="0 0 24 24"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg>',c='<svg viewBox="0 0 24 24"><polygon points="5 3 19 12 5 21 5 3"/></svg>',u='<svg viewBox="0 0 24 24"><rect x="6" y="4" width="4" height="16"/><rect x="14" y="4" width="4" height="16"/></svg>',g='<svg viewBox="0 0 24 24"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>',_='<svg viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>',b='<svg viewBox="0 0 24 24"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>',f='<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>',m='<svg viewBox="0 0 24 24"><polyline points="6 9 6 2 18 2 18 9"/><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><rect x="6" y="14" width="12" height="8"/></svg>',k='<svg viewBox="0 0 24 24"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>',v='<svg viewBox="0 0 24 24"><path d="M12 19l7-7 3 3-7 7-3-3z"/><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"/><path d="M2 2l7.586 7.586"/><circle cx="11" cy="11" r="2"/></svg>',x='<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>',y={layout:"masonry",loop:!1,thumbnails:!0,zoom:!0,contextualZoom:!1,fullscreen:!0,transition:"fade",theme:"system",hashNavigation:!0,counter:!0,counterFormat:"{current} / {total}",captions:!0,preload:1,lazyLoad:!0,stagger:!0,slideshow:!1,share:!0,filter:!1,batchSelect:!1,focusPoint:!0,blurhash:!0,exif:!1,storyMode:!1,pip:!1,virtualScroll:!1,dragReorder:!1,backdropTint:!1,morphTransition:!1,colorPalette:!1,aspectSkeleton:!0,video:!0,plugins:null,group:"",favorites:!1,favoritesKey:"",infoPanel:!1,contextMenu:!1,shortcutsHelp:!0,infiniteScroll:!1,loadMore:null,print:!1,editor:!1,annotate:!1};function w(n,o){if(!(this instanceof w))return new w(n,o);if(this._id=++t,this._events={},this._isOpen=!1,this._currentIndex=0,this._isZoomed=!1,this._isFullscreen=!1,this._destroyed=!1,this._boundHandlers={},this._slideshowTimer=null,this._slideshowRunning=!1,this._shareVisible=!1,this._selectedIndices=[],this._pipActive=!1,this._storyOpen=!1,this._dragState=null,this._virtualItems=null,this._colorCache={},this._container="string"==typeof n?e(n):n,this._container){var r=this._readDataAttributes();this._options=i(y,i(r,o)),this._resolveSystemTheme(),this._items=this._parseItems(),0!==this._items.length?(this._infoPanelOpen=!1,this._shortcutsOpen=!1,this._favorites=[],this._registerGroup(),this._loadFavorites(),this._setupGrid(),this._setupAspectSkeleton(),this._setupFocusPoint(),this._setupBlurhash(),this._setupLazyLoad(),this._setupStagger(),this._setupFilter(),this._setupVirtualScroll(),this._setupDragReorder(),this._setupInfiniteScroll(),this._buildLightbox(),this._buildInfoPanel(),this._buildShortcutsHelp(),this._buildEditor(),this._buildAnnotation(),this._buildContextMenu(),this._bindEvents(),this._bindContextMenu(),this._setupSlideshowPauseOnHover(),this._refreshAllFavoriteUI(),this._initPlugins(),this._checkHash()):console.warn("NeikiGallery: No items found in container.")}else console.warn('NeikiGallery: Container not found for selector "'+n+'"')}w.prototype._resolveSystemTheme=function(){if("system"===this._options.theme){var t=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;if(this._options.theme=t?"dark":"light",window.matchMedia){var i=this,e=window.matchMedia("(prefers-color-scheme: dark)");this._systemThemeListener=function(t){var e=t.matches?"dark":"light";i._options.theme=e,i._container&&i._container.setAttribute("data-theme",e),i._lightbox&&i._lightbox.setAttribute("data-theme",e)},e.addEventListener?e.addEventListener("change",this._systemThemeListener):e.addListener&&e.addListener(this._systemThemeListener),this._systemThemeMQ=e}}},w.prototype._resolveSlideshowOpts=function(){var t=this._options.slideshow;return t?"object"==typeof t?{enabled:!0,interval:t.interval||4e3,pauseOnHover:!!t.pauseOnHover,kenburns:!!t.kenburns,direction:t.direction||"forward"}:{enabled:!0,interval:4e3,pauseOnHover:!1,kenburns:!1,direction:"forward"}:null},w.prototype._readDataAttributes=function(){var t=this._container,i={},e=function(i){return t.hasAttribute(i)?"false"!==t.getAttribute(i):void 0},n=function(i){return t.hasAttribute(i)?t.getAttribute(i):void 0};void 0!==n("data-layout")&&(i.layout=n("data-layout")),void 0!==n("data-theme")&&(i.theme=n("data-theme")),void 0!==n("data-transition")&&(i.transition=n("data-transition")),void 0!==e("data-loop")&&(i.loop=e("data-loop")),void 0!==e("data-thumbnails")&&(i.thumbnails=e("data-thumbnails")),void 0!==e("data-zoom")&&(i.zoom=e("data-zoom")),void 0!==e("data-contextual-zoom")&&(i.contextualZoom=e("data-contextual-zoom")),void 0!==e("data-fullscreen")&&(i.fullscreen=e("data-fullscreen")),void 0!==e("data-hash-navigation")&&(i.hashNavigation=e("data-hash-navigation")),void 0!==e("data-stagger")&&(i.stagger=e("data-stagger"));var o=e("data-slideshow"),r=function(i){if(t.hasAttribute(i)){var e=parseInt(t.getAttribute(i),10);return isNaN(e)?void 0:e}}("data-slideshow-interval"),a=e("data-slideshow-pause-on-hover"),s=e("data-slideshow-kenburns");return void 0===o&&void 0===r&&void 0===a&&void 0===s||(i.slideshow=!1!==o&&{interval:void 0!==r?r:4e3,pauseOnHover:!!a,kenburns:!!s}),void 0!==n("data-counter-format")&&(i.counterFormat=n("data-counter-format")),void 0!==e("data-share")&&(i.share=e("data-share")),void 0!==e("data-filter")&&(i.filter=e("data-filter")),void 0!==e("data-batch-select")&&(i.batchSelect=e("data-batch-select")),void 0!==e("data-focus-point")&&(i.focusPoint=e("data-focus-point")),void 0!==e("data-blurhash")&&(i.blurhash=e("data-blurhash")),void 0!==e("data-exif")&&(i.exif=e("data-exif")),void 0!==e("data-story-mode")&&(i.storyMode=e("data-story-mode")),void 0!==e("data-pip")&&(i.pip=e("data-pip")),void 0!==e("data-virtual-scroll")&&(i.virtualScroll=e("data-virtual-scroll")),void 0!==e("data-drag-reorder")&&(i.dragReorder=e("data-drag-reorder")),void 0!==e("data-backdrop-tint")&&(i.backdropTint=e("data-backdrop-tint")),void 0!==e("data-morph-transition")&&(i.morphTransition=e("data-morph-transition")),void 0!==e("data-color-palette")&&(i.colorPalette=e("data-color-palette")),void 0!==e("data-aspect-skeleton")&&(i.aspectSkeleton=e("data-aspect-skeleton")),void 0!==e("data-video")&&(i.video=e("data-video")),void 0!==n("data-group")&&(i.group=n("data-group")),void 0!==e("data-favorites")&&(i.favorites=e("data-favorites")),void 0!==e("data-info-panel")&&(i.infoPanel=e("data-info-panel")),void 0!==e("data-context-menu")&&(i.contextMenu=e("data-context-menu")),void 0!==e("data-shortcuts-help")&&(i.shortcutsHelp=e("data-shortcuts-help")),void 0!==e("data-infinite-scroll")&&(i.infiniteScroll=e("data-infinite-scroll")),void 0!==e("data-print")&&(i.print=e("data-print")),void 0!==e("data-editor")&&(i.editor=e("data-editor")),void 0!==e("data-annotate")&&(i.annotate=e("data-annotate")),i},w.prototype._parseItems=function(){for(var t=n(":scope > a",this._container),i=[],o=0;o<t.length;o++){var r=t[o],a=e("img",r),s=r.getAttribute("href")||(a?a.getAttribute("src"):""),l=r.getAttribute("data-type");i.push({src:s,thumb:a?a.getAttribute("data-src")||a.getAttribute("src"):"",caption:r.getAttribute("data-caption")||(a?a.getAttribute("alt"):"")||"",tags:(r.getAttribute("data-tags")||"").split(",").map(function(t){return t.trim()}).filter(Boolean),size:r.getAttribute("data-size")||"",focus:r.getAttribute("data-focus")||(a?a.getAttribute("data-focus"):"")||"",blurhash:r.getAttribute("data-blurhash")||(a?a.getAttribute("data-blurhash"):"")||"",width:parseInt(r.getAttribute("data-width")||(a?a.getAttribute("data-width")||a.getAttribute("width"):""),10)||0,height:parseInt(r.getAttribute("data-height")||(a?a.getAttribute("data-height")||a.getAttribute("height"):""),10)||0,poster:r.getAttribute("data-poster")||"",group:r.getAttribute("data-group")||"",mediaType:l||(this._options.video?D(s):"image"),element:r,img:a}),r.addEventListener("click",function(t){t.preventDefault()})}return i},w.prototype._setupGrid=function(){var t=this._options.layout;switch(this._container.classList.add("neiki-gallery"),this._container.classList.remove("neiki-gallery--masonry","neiki-gallery--grid","neiki-gallery--mosaic","neiki-gallery--filmstrip"),t){case"grid":this._container.classList.add("neiki-gallery--grid");break;case"mosaic":this._container.classList.add("neiki-gallery--mosaic");break;case"filmstrip":this._container.classList.add("neiki-gallery--filmstrip");break;default:this._container.classList.add("neiki-gallery--masonry")}this._options.theme&&this._container.setAttribute("data-theme",this._options.theme)},w.prototype._setupLazyLoad=function(){var t=this;this._options.lazyLoad&&"IntersectionObserver"in window?(this._observer=new IntersectionObserver(function(i){i.forEach(function(i){if(i.isIntersecting){var e=i.target,n=e.getAttribute("data-src");n&&(e.src=n,e.removeAttribute("data-src")),e.addEventListener("load",function(){e.classList.add("neiki-loaded")}),e.complete&&e.naturalWidth&&e.classList.add("neiki-loaded"),t._observer.unobserve(e)}})},{rootMargin:"200px"}),this._items.forEach(function(i){if(i.img){var e=i.img;e.complete&&e.naturalWidth?e.classList.add("neiki-loaded"):(t._observer.observe(e),e.addEventListener("load",function(){e.classList.add("neiki-loaded")}),e.addEventListener("error",function(){e.classList.add("neiki-loaded")}),setTimeout(function(){e.complete&&!e.classList.contains("neiki-loaded")&&e.classList.add("neiki-loaded")},200),setTimeout(function(){e.classList.contains("neiki-loaded")||e.classList.add("neiki-loaded")},3e3))}})):this._items.forEach(function(t){t.img&&t.img.classList.add("neiki-loaded")})},w.prototype._setupStagger=function(){if(this._options.stagger){for(var t=n(":scope > a, :scope > .neiki-item",this._container),i=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--neiki-stagger-delay"))||.04,e=0;e<t.length;e++)t[e].style.animationDelay=e*i+"s";this._container.offsetHeight,this._container.classList.add("neiki-gallery--stagger")}},w.prototype._setupFilter=function(){if(this._options.filter){var t={};this._items.forEach(function(i){i.tags.forEach(function(i){t[i]=!0})});var i=Object.keys(t);if(0!==i.length){this._filterBar=o("div","neiki-filter-bar");var e=o("button","neiki-filter-btn neiki-filter--active",{type:"button"},"All");this._filterBar.appendChild(e);var n=this;this._activeFilter=null,e.addEventListener("click",function(){n._applyFilter(null)}),i.forEach(function(t){var i=o("button","neiki-filter-btn",{type:"button"},t);i.addEventListener("click",function(){n._applyFilter(t)}),n._filterBar.appendChild(i)}),this._container.parentNode.insertBefore(this._filterBar,this._container)}}},w.prototype._applyFilter=function(t){this._activeFilter=t,n(".neiki-filter-btn",this._filterBar).forEach(function(i){var e="All"===i.textContent;i.classList.toggle("neiki-filter--active",null===t?e:i.textContent===t)});this._items.forEach(function(i){null===t||-1!==i.tags.indexOf(t)?i.element.classList.remove("neiki-filter-hidden"):i.element.classList.add("neiki-filter-hidden")}),this._emit("filter",t)},w.prototype._setupAspectSkeleton=function(){this._options.aspectSkeleton&&this._items.forEach(function(t){t.width&&t.height&&t.element&&(t.element.style.aspectRatio=t.width+" / "+t.height)})},w.prototype._setupFocusPoint=function(){this._options.focusPoint&&this._items.forEach(function(t){if(t.focus&&t.img){var i=t.focus.trim().split(/\s+/);if(2===i.length){var e=(100*parseFloat(i[0])).toFixed(1),n=(100*parseFloat(i[1])).toFixed(1);t.img.style.objectPosition=e+"% "+n+"%"}}})};function L(t){for(var i=0,e=0;e<t.length;e++){i=83*i+"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~".indexOf(t[e])}return i}function C(t){var i=t/255;return i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)}function E(t){var i=Math.max(0,Math.min(1,t));return i<=.0031308?Math.round(12.92*i*255+.5):Math.round(255*(1.055*Math.pow(i,1/2.4)-.055)+.5)}function S(t,i){return(t<0?-1:1)*Math.pow(Math.abs(t),i)}function B(t,i){var e=Math.floor(t/361),n=Math.floor(t/19)%19,o=t%19;return[S((e-9)/9,2)*i,S((n-9)/9,2)*i,S((o-9)/9,2)*i]}function I(t,i,e){if(!t||t.length<6)return null;var n,o=L(t[0]),r=Math.floor(o/9)+1,a=o%9+1,s=(L(t[1])+1)/166,l=new Array(a*r);l[0]=[C((n=L(t.substring(2,6)))>>16),C(n>>8&255),C(255&n)];for(var h=1;h<a*r;h++)l[h]=B(L(t.substring(4+2*h,6+2*h)),s);for(var d=new Uint8ClampedArray(i*e*4),p=0;p<e;p++)for(var c=0;c<i;c++){for(var u=0,g=0,_=0,b=0;b<r;b++)for(var f=0;f<a;f++){var m=Math.cos(Math.PI*c*f/i)*Math.cos(Math.PI*p*b/e),k=l[f+b*a];u+=k[0]*m,g+=k[1]*m,_+=k[2]*m}var v=4*(c+p*i);d[v]=E(u),d[v+1]=E(g),d[v+2]=E(_),d[v+3]=255}return d}function M(t,i){var e=new Image;e.crossOrigin="anonymous",e.onload=function(){try{var t=document.createElement("canvas"),n=10;t.width=n,t.height=n;var o=t.getContext("2d");o.drawImage(e,0,0,n,n);for(var r=o.getImageData(0,0,n,n).data,a=0,s=0,l=0,h=0,d=0;d<r.length;d+=4)a+=r[d],s+=r[d+1],l+=r[d+2],h++;a=Math.round(a/h),s=Math.round(s/h),l=Math.round(l/h),i({r:a,g:s,b:l,hex:"#"+((1<<24)+(a<<16)+(s<<8)+l).toString(16).slice(1)})}catch(t){i(null)}},e.onerror=function(){i(null)},e.src=t}function P(t,i,e){var n=new Image;n.crossOrigin="anonymous",n.onload=function(){try{var t=document.createElement("canvas");t.width=50,t.height=50;var o=t.getContext("2d");o.drawImage(n,0,0,50,50);for(var r=o.getImageData(0,0,50,50).data,a=[],s=0;s<r.length;s+=4)a.push([r[s],r[s+1],r[s+2]]);var l=function(t,i){for(var e=[],n=Math.floor(t.length/i),o=0;o<i;o++)e.push(t[Math.min(o*n,t.length-1)].slice());for(var r=0;r<10;r++){for(var a=[],s=0;s<i;s++)a.push([]);for(var l=0;l<t.length;l++){var h=1/0,d=0;for(s=0;s<i;s++){var p=t[l][0]-e[s][0],c=t[l][1]-e[s][1],u=t[l][2]-e[s][2],g=p*p+c*c+u*u;g<h&&(h=g,d=s)}a[d].push(t[l])}for(s=0;s<i;s++)if(0!==a[s].length){for(var _=0,b=0,f=0,m=0;m<a[s].length;m++)_+=a[s][m][0],b+=a[s][m][1],f+=a[s][m][2];e[s]=[Math.round(_/a[s].length),Math.round(b/a[s].length),Math.round(f/a[s].length)]}}return e.map(function(t){return{r:t[0],g:t[1],b:t[2],hex:"#"+((1<<24)+(t[0]<<16)+(t[1]<<8)+t[2]).toString(16).slice(1)}})}(a,i||5);e(l)}catch(t){e([])}},n.onerror=function(){e([])},n.src=t}function z(t,i){var e=new XMLHttpRequest;e.open("GET",t,!0),e.responseType="arraybuffer",e.onload=function(){if(200===e.status)try{var t=new DataView(e.response);if(65496!==t.getUint16(0))return void i(null);for(var n=2;n<t.byteLength;){if(255!==t.getUint8(n))return void i(null);if(225===t.getUint8(n+1)){var o=O(t,n+4);return void i(o)}n+=2+t.getUint16(n+2)}i(null)}catch(t){i(null)}else i(null)},e.onerror=function(){i(null)},e.send()}function O(t,i){if(1165519206!==t.getUint32(i)||0!==t.getUint16(i+4))return null;for(var e=i+6,n=19789===t.getUint16(e),o=function(i){return n?t.getUint16(e+i):t.getUint16(e+i,!0)},r=function(i){return n?t.getUint32(e+i):t.getUint32(e+i,!0)},a=r(4),s=o(a),l={},h={271:"make",272:"model",34855:"iso",33434:"exposure",33437:"fNumber",37386:"focalLength"},d=0;d<s;d++){var p=o(k=a+2+12*d),c=o(k+2),u=h[p];if(u)if(3===c)l[u]=o(k+8);else if(4===c)l[u]=r(k+8);else if(5===c){var g=r(k+8);l[u]=r(g)/r(g+4)}else if(2===c){for(var _=r(k+4),b=_>4?r(k+8):k+8,f="",m=0;m<_-1;m++)f+=String.fromCharCode(t.getUint8(e+b+m));l[u]=f.trim()}}for(d=0;d<s;d++){var k;if(34665===o(k=a+2+12*d)){for(var v=r(k+8),x=o(v),y=0;y<x;y++){var w=v+2+12*y,L=o(w),C=o(w+2),E=h[L];if(E)if(3===C)l[E]=o(w+8);else if(4===C)l[E]=r(w+8);else if(5===C){var S=r(w+8);l[E]=r(S)/r(S+4)}}break}}return 0===Object.keys(l).length?null:l}w.prototype._setupBlurhash=function(){this._options.blurhash&&this._items.forEach(function(t){if(t.blurhash&&t.element){var i=I(t.blurhash,32,32);if(i)try{var e=document.createElement("canvas");e.width=32,e.height=32;var n=e.getContext("2d"),o=n.createImageData(32,32);o.data.set(i),n.putImageData(o,0,0),t.element.style.backgroundImage="url("+e.toDataURL()+")",t.element.style.backgroundSize="cover",t.element.style.backgroundPosition="center"}catch(t){}}})},w.prototype._setupVirtualScroll=function(){if(this._options.virtualScroll&&!(this._items.length<50)){var t=this;this._virtualObserver=new IntersectionObserver(function(t){t.forEach(function(t){var i=t.target;t.isIntersecting?(i.classList.remove("neiki-virtual-hidden"),i.style.contentVisibility="visible"):(i.classList.add("neiki-virtual-hidden"),i.style.contentVisibility="hidden")})},{rootMargin:"400px"}),this._items.forEach(function(i){i.element&&(i.element.style.containIntrinsicSize="auto 300px",t._virtualObserver.observe(i.element))})}},w.prototype._setupDragReorder=function(){if(this._options.dragReorder){var t=this,i=this._items,e=this._container;i.forEach(function(r){var a=r.element;a.setAttribute("draggable","true"),a.classList.add("neiki-draggable"),a.addEventListener("dragstart",function(i){var e=o(a);t._dragState={index:e,element:a},a.classList.add("neiki-dragging"),i.dataTransfer.effectAllowed="move",i.dataTransfer.setData("text/plain",String(e))}),a.addEventListener("dragover",function(t){t.preventDefault(),t.dataTransfer.dropEffect="move",a.classList.add("neiki-drag-over")}),a.addEventListener("dragleave",function(){a.classList.remove("neiki-drag-over")}),a.addEventListener("drop",function(n){if(n.preventDefault(),n.stopPropagation(),a.classList.remove("neiki-drag-over"),t._dragState){var r=t._dragState.element,s=o(r),l=o(a);if(-1!==s&&-1!==l&&s!==l){s<l?e.insertBefore(r,a.nextSibling):e.insertBefore(r,a);var h=i.splice(s,1)[0];i.splice(l>s?l-1:l,0,h),t._emit("reorder",t.getOrder())}}}),a.addEventListener("dragend",function(){a.classList.remove("neiki-dragging"),t._dragState=null,n(".neiki-drag-over",e).forEach(function(t){t.classList.remove("neiki-drag-over")})}),a.addEventListener("click",function(i){t._dragState&&i.preventDefault()})})}function o(t){for(var e=0;e<i.length;e++)if(i[e].element===t)return e;return-1}},w.prototype.getOrder=function(){return this._items.map(function(t,i){return{index:i,src:t.src,caption:t.caption}})},w.prototype._buildLightbox=function(){var t=this._options;if(this._lightbox=o("div","neiki-lightbox neiki-lightbox--"+t.transition,{role:"dialog","aria-modal":"true","aria-label":"Image lightbox",tabindex:"-1"}),t.theme&&this._lightbox.setAttribute("data-theme",t.theme),t.counter&&(this._topbar=o("div","neiki-lightbox__topbar"),this._counter=o("span","neiki-lightbox__counter",{"aria-live":"polite"}),this._topbar.appendChild(this._counter),this._lightbox.appendChild(this._topbar)),this._toolbar=o("div","neiki-lightbox__toolbar"),t.pip&&(this._pipBtn=o("button","neiki-lightbox__btn neiki-lightbox__pip",{"aria-label":"Picture in Picture",type:"button"},'<svg viewBox="0 0 24 24"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><rect x="13" y="12" width="7" height="6" rx="1" ry="1"/></svg>'),this._toolbar.appendChild(this._pipBtn)),t.storyMode&&(this._storyBtn=o("button","neiki-lightbox__btn neiki-lightbox__story",{"aria-label":"Story mode",type:"button"},'<svg viewBox="0 0 24 24"><rect x="6" y="3" width="12" height="18" rx="2"/><path d="M3 7v10a2 2 0 0 0 2 2"/><path d="M19 7v10a2 2 0 0 1-2 2"/></svg>'),this._toolbar.appendChild(this._storyBtn)),this._playBtn=o("button","neiki-lightbox__btn neiki-lightbox__play",{"aria-label":"Toggle slideshow",type:"button"},c),this._toolbar.appendChild(this._playBtn),t.favorites&&(this._favBtn=o("button","neiki-lightbox__btn neiki-lightbox__fav",{"aria-label":"Toggle favorite",type:"button"},b),this._toolbar.appendChild(this._favBtn)),t.infoPanel&&(this._infoBtn=o("button","neiki-lightbox__btn neiki-lightbox__info-btn",{"aria-label":"Image info",type:"button"},f),this._toolbar.appendChild(this._infoBtn)),t.editor&&(this._editBtn=o("button","neiki-lightbox__btn neiki-lightbox__edit",{"aria-label":"Edit image",type:"button"},k),this._toolbar.appendChild(this._editBtn)),t.annotate&&(this._annotateBtn=o("button","neiki-lightbox__btn neiki-lightbox__annotate-btn",{"aria-label":"Annotate image",type:"button"},v),this._toolbar.appendChild(this._annotateBtn)),t.shortcutsHelp&&(this._helpBtn=o("button","neiki-lightbox__btn neiki-lightbox__help",{"aria-label":"Keyboard shortcuts",type:"button"},x),this._toolbar.appendChild(this._helpBtn)),t.print&&(this._printBtn=o("button","neiki-lightbox__btn neiki-lightbox__print",{"aria-label":"Print image",type:"button"},m),this._toolbar.appendChild(this._printBtn)),t.share&&(this._shareBtn=o("button","neiki-lightbox__btn neiki-lightbox__share",{"aria-label":"Share image",type:"button"},p),this._toolbar.appendChild(this._shareBtn)),t.fullscreen&&(this._fsBtn=o("button","neiki-lightbox__btn neiki-lightbox__fullscreen",{"aria-label":"Toggle fullscreen",type:"button"},h),this._toolbar.appendChild(this._fsBtn)),this._closeBtn=o("button","neiki-lightbox__btn neiki-lightbox__close",{"aria-label":"Close lightbox",type:"button"},a),this._toolbar.appendChild(this._closeBtn),this._lightbox.appendChild(this._toolbar),this._prevBtn=o("button","neiki-lightbox__btn neiki-lightbox__prev",{"aria-label":"Previous image",type:"button"},s),this._nextBtn=o("button","neiki-lightbox__btn neiki-lightbox__next",{"aria-label":"Next image",type:"button"},l),this._stage=o("div","neiki-lightbox__stage"),this._slideWrapper=o("div","neiki-lightbox__slide-wrapper"),this._spinner=o("div","neiki-lightbox__spinner neiki-hidden"),this._image=o("img","neiki-lightbox__image",{alt:"",draggable:"false"}),this._slideWrapper.appendChild(this._spinner),this._slideWrapper.appendChild(this._image),this._stage.appendChild(this._prevBtn),this._stage.appendChild(this._slideWrapper),this._stage.appendChild(this._nextBtn),this._lightbox.appendChild(this._stage),this._progressBar=o("div","neiki-lightbox__progress"),this._stage.appendChild(this._progressBar),t.captions&&(this._caption=o("div","neiki-lightbox__caption",{"aria-live":"polite"}),this._lightbox.appendChild(this._caption)),t.thumbnails){this._thumbsContainer=o("div","neiki-lightbox__thumbs",{role:"listbox","aria-label":"Image thumbnails"}),this._thumbButtons=[];for(var i=0;i<this._items.length;i++){var e=o("button","neiki-lightbox__thumb",{type:"button",role:"option","aria-label":"View image "+(i+1)}),n=o("img","",{src:this._items[i].thumb,alt:this._items[i].caption||"Thumbnail "+(i+1),draggable:"false"});e.appendChild(n),this._thumbButtons.push(e),this._thumbsContainer.appendChild(e)}this._lightbox.appendChild(this._thumbsContainer)}if(t.share){this._sharePopup=o("div","neiki-share");var r=o("button","neiki-share__btn",{type:"button"},g+" Copy link"),d=o("button","neiki-share__btn",{type:"button"},_+" Download");this._sharePopup.appendChild(r),this._sharePopup.appendChild(d),this._lightbox.appendChild(this._sharePopup),this._shareCopyBtn=r,this._shareDownloadBtn=d}t.exif&&(this._exifOverlay=o("div","neiki-exif"),this._lightbox.appendChild(this._exifOverlay)),t.colorPalette&&(this._paletteStrip=o("div","neiki-palette"),this._lightbox.appendChild(this._paletteStrip)),document.body.appendChild(this._lightbox)},w.prototype._bindEvents=function(){var t=this;this._items.forEach(function(i,e){i.element.addEventListener("click",function(i){i.preventDefault(),t._options.batchSelect&&i.shiftKey?t._toggleSelect(e):t.open(e)})}),this._closeBtn.addEventListener("click",function(){t.close()}),this._prevBtn.addEventListener("click",function(i){i.stopPropagation(),t.prev()}),this._nextBtn.addEventListener("click",function(i){i.stopPropagation(),t.next()}),this._playBtn.addEventListener("click",function(i){i.stopPropagation(),t.toggleSlideshow()}),this._fsBtn&&this._fsBtn.addEventListener("click",function(i){i.stopPropagation(),t._toggleFullscreen()}),this._pipBtn&&this._pipBtn.addEventListener("click",function(i){i.stopPropagation(),t._togglePip()}),this._storyBtn&&this._storyBtn.addEventListener("click",function(i){i.stopPropagation(),t._toggleStoryMode()}),this._favBtn&&this._favBtn.addEventListener("click",function(i){i.stopPropagation(),t.toggleFavorite()}),this._infoBtn&&this._infoBtn.addEventListener("click",function(i){i.stopPropagation(),t.toggleInfoPanel()}),this._editBtn&&this._editBtn.addEventListener("click",function(i){i.stopPropagation(),t.openEditor()}),this._annotateBtn&&this._annotateBtn.addEventListener("click",function(i){i.stopPropagation(),t.openAnnotate()}),this._helpBtn&&this._helpBtn.addEventListener("click",function(i){i.stopPropagation(),t.toggleShortcutsHelp()}),this._printBtn&&this._printBtn.addEventListener("click",function(i){i.stopPropagation(),t.print()}),this._shareBtn&&this._shareBtn.addEventListener("click",function(i){i.stopPropagation(),t._toggleSharePopup()}),this._shareCopyBtn&&this._shareCopyBtn.addEventListener("click",function(i){i.stopPropagation(),t._shareCopyLink()}),this._shareDownloadBtn&&this._shareDownloadBtn.addEventListener("click",function(i){i.stopPropagation(),t._shareDownload()}),this._options.zoom&&this._image.addEventListener("click",function(i){i.stopPropagation(),t._options.contextualZoom?t._toggleContextualZoom(i):t._toggleZoom()}),this._thumbButtons&&this._thumbButtons.forEach(function(i,e){i.addEventListener("click",function(){t._goTo(e)})}),this._stage.addEventListener("click",function(i){i.target!==t._stage&&i.target!==t._slideWrapper||t.close()}),this._boundHandlers.keydown=function(i){t._onKeyDown(i)},document.addEventListener("keydown",this._boundHandlers.keydown),this._setupTouch(),this._options.hashNavigation&&(this._boundHandlers.hashchange=function(){t._onHashChange()},window.addEventListener("hashchange",this._boundHandlers.hashchange)),this._boundHandlers.fullscreenchange=function(){t._onFullscreenChange()},document.addEventListener("fullscreenchange",this._boundHandlers.fullscreenchange),document.addEventListener("webkitfullscreenchange",this._boundHandlers.fullscreenchange)},w.prototype._onKeyDown=function(t){if(this._isOpen)switch(t.key){case"Escape":if(t.preventDefault(),this._shortcutsOpen)return void this.toggleShortcutsHelp(!1);if(this._editorOverlay&&this._editorOverlay.classList.contains("neiki-editor--visible"))return void this.closeEditor();if(this._annotateOverlay&&this._annotateOverlay.classList.contains("neiki-annotate--visible"))return void this.closeAnnotate();if(this._infoPanelOpen)return void this.toggleInfoPanel(!1);if(this._shareVisible)return void this._toggleSharePopup();this.close();break;case"ArrowLeft":t.preventDefault(),this.prev();break;case"ArrowRight":t.preventDefault(),this.next();break;case"Home":t.preventDefault(),this._goTo(0);break;case"End":t.preventDefault(),this._goTo(this._items.length-1);break;case"f":case"F":t.preventDefault(),this._toggleFullscreen();break;case" ":t.preventDefault(),this.toggleSlideshow();break;case"z":case"Z":t.preventDefault(),this._toggleZoom();break;case"i":case"I":this._options.infoPanel&&(t.preventDefault(),this.toggleInfoPanel());break;case"b":case"B":this._options.favorites&&(t.preventDefault(),this.toggleFavorite());break;case"p":case"P":t.preventDefault(),this.print();break;case"?":this._options.shortcutsHelp&&(t.preventDefault(),this.toggleShortcutsHelp())}},w.prototype._setupTouch=function(){var t=this,i=0,e=0,n=0,o=!1,r=!1,a=0,s=0,l=0,h=0;var d=!1;function p(i){if(t._isOpen&&t._isZoomed&&(void 0===i.button||0===i.button)){r=!0,d=!1;var e=i.touches?i.touches[0]:i;a=e.clientX,s=e.clientY,i.preventDefault()}}function c(i){if(r){var e=i.touches?i.touches[0]:i,n=e.clientX-a,o=e.clientY-s;(Math.abs(n)>4||Math.abs(o)>4)&&(d=!0),a=e.clientX,s=e.clientY,function(i,e){var n=t._image,o=n.getBoundingClientRect(),r=t._stage.getBoundingClientRect(),a=Math.max(0,(o.width-r.width)/2),s=Math.max(0,(o.height-r.height)/2);l=Math.max(-a,Math.min(a,l+i)),h=Math.max(-s,Math.min(s,h+e)),n.style.translate=l+"px "+h+"px"}(n,o),i.preventDefault()}}function u(){r=!1}function g(r){if(t._isOpen&&!t._isZoomed){var a=r.touches?r.touches[0]:r;i=a.clientX,e=a.clientY,n=0,o=!0}}function _(t){if(o){var r=t.touches?t.touches[0]:t;n=r.clientX-i;var a=r.clientY-e;Math.abs(n)>Math.abs(a)&&Math.abs(n)>10&&t.preventDefault()}}function b(){o&&(o=!1,n>50?t.prev():n<-50&&t.next())}this._image.addEventListener("mousedown",p),document.addEventListener("mousemove",c),document.addEventListener("mouseup",u),this._image.addEventListener("touchstart",p,{passive:!1}),this._image.addEventListener("touchmove",c,{passive:!1}),this._image.addEventListener("touchend",u,{passive:!0}),this._image.addEventListener("click",function(t){d&&(d=!1,t.stopImmediatePropagation())},!0),this._resetPan=function(){l=0,h=0,r=!1,t._image&&(t._image.style.translate="")},this._boundHandlers.panMousemove=c,this._boundHandlers.panMouseup=u,this._stage.addEventListener("touchstart",g,{passive:!0}),this._stage.addEventListener("touchmove",_,{passive:!1}),this._stage.addEventListener("touchend",b,{passive:!0}),this._boundHandlers.touchstart=g,this._boundHandlers.touchmove=_,this._boundHandlers.touchend=b},w.prototype._goTo=function(t,i){if(!this._destroyed){var e=this._items.length;if(this._options.loop?t=(t%e+e)%e:(t<0&&(t=0),t>=e&&(t=e-1)),t!==this._currentIndex||!this._isOpen||!this._image.src){var n=this._currentIndex;this._currentIndex=t;var o=this._items[t];if(this._stopAllMedia&&this._stopAllMedia(),this._removeKenburns&&this._removeKenburns(),this._resetZoom(),this._shareVisible&&this._toggleSharePopup(),this._updateNavButtons(),this._clearMediaSlide(),o.mediaType&&"image"!==o.mediaType)return this._spinner.classList.add("neiki-hidden"),this._image.style.display="none",this._renderMediaSlide(o,this._slideWrapper),void this._postGoToCommon(o,t,n);this._image.style.display="",this._spinner.classList.remove("neiki-hidden");var r=this,a=this._image;if(this._currentImg=a,"slide"===this._options.transition){var s=t>n?1:-1;this._options.loop&&(n===e-1&&0===t&&(s=1),0===n&&t===e-1&&(s=-1)),this._slideWrapper.style.transform="translateX("+40*-s+"px)",a.style.opacity="0",requestAnimationFrame(function(){requestAnimationFrame(function(){r._slideWrapper.style.transform="translateX(0)",a.style.opacity="1"})})}else a.classList.add("neiki-entering"),a.classList.remove("neiki-active");a.setAttribute("alt",o.caption||"");var l=new Image,h=function(){a.src=o.src,r._spinner.classList.add("neiki-hidden"),"fade"===r._options.transition&&requestAnimationFrame(function(){a.classList.remove("neiki-entering"),a.classList.add("neiki-active")})};l.onload=h,l.onerror=function(){a.src=o.src,r._spinner.classList.add("neiki-hidden"),"fade"===r._options.transition&&requestAnimationFrame(function(){a.classList.remove("neiki-entering"),a.classList.add("neiki-active")})},l.src=o.src,l.complete&&h(),this._postGoToCommon(o,t,n,i)}}},w.prototype._postGoToCommon=function(t,i,e,n){var o=this._items.length;if(this._counter&&(this._counter.textContent=this._formatCounter(i,o)),this._caption&&(this._caption.textContent=t.caption||""),this._thumbButtons){this._thumbButtons.forEach(function(t,e){t.classList.toggle("neiki-thumb--active",e===i),t.setAttribute("aria-selected",e===i?"true":"false")});var r=this._thumbButtons[i];r&&this._thumbsContainer&&r.scrollIntoView({inline:"center",block:"nearest",behavior:"smooth"})}this._options.hashNavigation&&!n&&this._setHash(i),this._preloadAdjacent(i),this._applyBackdropTint&&this._applyBackdropTint(t.src),this._loadExif&&this._loadExif(t.src),this._loadPalette&&this._loadPalette(t.src),this._infoPanelOpen&&this._populateInfoPanel(i),this._updateFavoriteUI&&this._updateFavoriteUI(i),this._applyKenburns&&this._applyKenburns(),this._callPluginHook&&this._callPluginHook("change",{index:i,item:t,prevIndex:e}),this._slideshowRunning&&this._startSlideshowTimer(),this._emit("change",i)},w.prototype._formatCounter=function(t,i){var e=this._options.counterFormat||"{current} / {total}",n=t+1;if(this._groupName){var o=this._getGroupItems();o&&o.length&&(i=o.length,n=this._getGroupCurrentIndex()+1)}var r=Math.round(n/i*100);return e.replace(/\{current\}/g,n).replace(/\{total\}/g,i).replace(/\{percent\}/g,r)},w.prototype._clearMediaSlide=function(){if(this._slideWrapper)for(var t=this._slideWrapper.querySelectorAll(".neiki-lightbox__video, .neiki-lightbox__embed"),i=0;i<t.length;i++)t[i].parentNode&&t[i].parentNode.removeChild(t[i])},w.prototype._updateNavButtons=function(){if(this._options.loop)return this._prevBtn.style.display="",void(this._nextBtn.style.display="");this._prevBtn.style.display=this._currentIndex<=0?"none":"",this._nextBtn.style.display=this._currentIndex>=this._items.length-1?"none":""},w.prototype._preloadAdjacent=function(t){for(var i=this._options.preload||1,e=this._items.length,n=1;n<=i;n++){var o=(t+n)%e,r=((t-n)%e+e)%e;this._items[o]&&((new Image).src=this._items[o].src),this._items[r]&&((new Image).src=this._items[r].src)}},w.prototype._toggleZoom=function(){this._options.zoom&&(this._isZoomed=!this._isZoomed,this._image.classList.remove("neiki-zoom-pan"),this._image.classList.toggle("neiki-zoomed",this._isZoomed))},w.prototype._toggleContextualZoom=function(t){if(this._options.zoom)if(this._isZoomed)this._resetZoom();else{this._isZoomed=!0;var i=this._image.getBoundingClientRect(),e=((t.clientX-i.left)/i.width*100).toFixed(1),n=((t.clientY-i.top)/i.height*100).toFixed(1);this._image.style.setProperty("--neiki-zoom-x",e+"%"),this._image.style.setProperty("--neiki-zoom-y",n+"%"),this._image.classList.add("neiki-zoom-pan")}},w.prototype._resetZoom=function(){this._isZoomed&&(this._isZoomed=!1,this._image.classList.remove("neiki-zoomed","neiki-zoom-pan"),this._image.style.removeProperty("--neiki-zoom-x"),this._image.style.removeProperty("--neiki-zoom-y"),this._resetPan&&this._resetPan())},w.prototype._toggleFullscreen=function(){if(this._options.fullscreen)if(document.fullscreenElement||document.webkitFullscreenElement)document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen();else{var t=this._lightbox;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen()}},w.prototype._onFullscreenChange=function(){this._isFullscreen=!(!document.fullscreenElement&&!document.webkitFullscreenElement),this._fsBtn&&(this._fsBtn.innerHTML=this._isFullscreen?d:h)},w.prototype.toggleSlideshow=function(){this._slideshowRunning?this.stopSlideshow():this.startSlideshow()},w.prototype.startSlideshow=function(){this._slideshowRunning||(this._slideshowRunning=!0,this._playBtn.innerHTML=u,this._playBtn.setAttribute("aria-label","Pause slideshow"),this._startSlideshowTimer(),this._emit("slideshowStart"))},w.prototype.stopSlideshow=function(){this._slideshowRunning&&(this._slideshowRunning=!1,this._playBtn.innerHTML=c,this._playBtn.setAttribute("aria-label","Start slideshow"),this._clearSlideshowTimer(),this._progressBar.classList.remove("neiki-progress--running"),this._progressBar.style.width="0%",this._emit("slideshowStop"))},w.prototype.pauseSlideshow=function(){this._clearSlideshowTimer(),this._progressBar&&(this._progressBar.classList.remove("neiki-progress--running"),this._progressBar.style.width="0%"),this._slideshowRunning=!1,this._playBtn&&(this._playBtn.innerHTML=c)},w.prototype._startSlideshowTimer=function(){var t=this;this._clearSlideshowTimer();var i=this._resolveSlideshowOpts()||{interval:4e3,direction:"forward"},e=i.interval;this._progressBar.classList.remove("neiki-progress--running"),this._progressBar.style.width="0%",this._progressBar.offsetWidth,this._progressBar.style.transitionDuration=e+"ms",this._progressBar.classList.add("neiki-progress--running"),this._progressBar.style.width="100%",this._slideshowTimer=setTimeout(function(){if(t._slideshowRunning&&t._isOpen){var e="reverse"===i.direction?-1:1,n=t._currentIndex+e;if(n>=t._items.length){if(!t._options.loop)return void t.stopSlideshow();n=0}else if(n<0){if(!t._options.loop)return void t.stopSlideshow();n=t._items.length-1}t._goTo(n)}},e)},w.prototype._clearSlideshowTimer=function(){this._slideshowTimer&&(clearTimeout(this._slideshowTimer),this._slideshowTimer=null)},w.prototype._toggleSharePopup=function(){this._shareVisible=!this._shareVisible,this._sharePopup&&this._sharePopup.classList.toggle("neiki-share--visible",this._shareVisible)},w.prototype._shareCopyLink=function(){var t=this._items[this._currentIndex];if(t){var i=this,e=t.src;if(navigator.share)return navigator.share({title:t.caption||"Image",url:e}).then(function(){r("Shared!")}).catch(function(){i._copyToClipboard(e)}),void this._toggleSharePopup();this._copyToClipboard(e),this._toggleSharePopup()}},w.prototype._copyToClipboard=function(t){if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t).then(function(){r("Link copied!")});else{var i=document.createElement("input");i.value=t,document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),r("Link copied!")}},w.prototype._shareDownload=function(){var t=this._items[this._currentIndex];if(t){var i=document.createElement("a");i.href=t.src,i.download=t.caption||"image",i.target="_blank",i.rel="noopener",document.body.appendChild(i),i.click(),document.body.removeChild(i),this._toggleSharePopup()}},w.prototype._toggleSelect=function(t){var i=this._selectedIndices.indexOf(t);-1===i?(this._selectedIndices.push(t),this._items[t].element.classList.add("neiki-selected")):(this._selectedIndices.splice(i,1),this._items[t].element.classList.remove("neiki-selected")),this._emit("select",this._selectedIndices.slice())},w.prototype.getSelected=function(){var t=this;return this._selectedIndices.map(function(i){return{index:i,src:t._items[i].src,caption:t._items[i].caption}})},w.prototype.clearSelection=function(){var t=this;this._selectedIndices.forEach(function(i){t._items[i].element.classList.remove("neiki-selected")}),this._selectedIndices=[],this._emit("select",[])},w.prototype._togglePip=function(){this._pipActive=!this._pipActive,this._lightbox.classList.toggle("neiki-lightbox--pip",this._pipActive),this._pipActive?(document.body.style.overflow="",this._emit("pipEnter")):(document.body.style.overflow="hidden",this._emit("pipExit"))},w.prototype._toggleStoryMode=function(){this._storyOpen=!this._storyOpen,this._storyOpen?this._enterStoryMode():this._exitStoryMode()},w.prototype._enterStoryMode=function(){var t=this;this._storyContainer=o("div","neiki-story"),this._items.forEach(function(i,e){var n=o("div","neiki-story__slide"),r=o("img","neiki-story__image",{src:i.src,alt:i.caption||"",draggable:"false"});if(n.appendChild(r),i.caption){var a=o("div","neiki-story__caption",{},i.caption);n.appendChild(a)}n.setAttribute("data-story-index",e),t._storyContainer.appendChild(n)});var i=o("button","neiki-story__close",{type:"button","aria-label":"Close story"},a);this._storyContainer.appendChild(i);var e=o("div","neiki-story__progress-wrap");this._storyProgressBars=[];for(var r=0;r<this._items.length;r++){var s=o("div","neiki-story__progress-bar"),l=o("div","neiki-story__progress-fill");s.appendChild(l),e.appendChild(s),this._storyProgressBars.push(l)}this._storyContainer.appendChild(e),document.body.appendChild(this._storyContainer),document.body.style.overflow="hidden",i.addEventListener("click",function(){t._exitStoryMode()}),this._storyCurrentIndex=this._currentIndex||0,this._updateStoryProgress(this._storyCurrentIndex),this._storyContainer.addEventListener("click",function(e){if(e.target!==i&&!i.contains(e.target)){var n=t._storyContainer.getBoundingClientRect(),o=e.clientX-n.left;o<n.width/3?t._storyPrev():o>2*n.width/3&&t._storyNext()}});var h=n(".neiki-story__slide",this._storyContainer);h[this._storyCurrentIndex]&&h[this._storyCurrentIndex].classList.add("neiki-story__slide--active"),this._emit("storyEnter")},w.prototype._storyNext=function(){var t=n(".neiki-story__slide",this._storyContainer);this._storyCurrentIndex>=t.length-1?this._exitStoryMode():(t[this._storyCurrentIndex].classList.remove("neiki-story__slide--active"),this._storyCurrentIndex++,t[this._storyCurrentIndex].classList.add("neiki-story__slide--active"),this._updateStoryProgress(this._storyCurrentIndex))},w.prototype._storyPrev=function(){var t=n(".neiki-story__slide",this._storyContainer);this._storyCurrentIndex<=0||(t[this._storyCurrentIndex].classList.remove("neiki-story__slide--active"),this._storyCurrentIndex--,t[this._storyCurrentIndex].classList.add("neiki-story__slide--active"),this._updateStoryProgress(this._storyCurrentIndex))},w.prototype._updateStoryProgress=function(t){if(this._storyProgressBars){for(var i=0;i<this._storyProgressBars.length;i++)i<t?this._storyProgressBars[i].style.width="100%":i===t?(this._storyProgressBars[i].style.width="100%",this._storyProgressBars[i].style.transition="width 5s linear"):(this._storyProgressBars[i].style.width="0%",this._storyProgressBars[i].style.transition="none");var e=this;clearTimeout(this._storyTimer),this._storyTimer=setTimeout(function(){e._storyOpen&&e._storyNext()},5e3)}},w.prototype._exitStoryMode=function(){this._storyOpen=!1,clearTimeout(this._storyTimer),this._storyContainer&&this._storyContainer.parentNode&&this._storyContainer.parentNode.removeChild(this._storyContainer),this._storyContainer=null,this._storyProgressBars=null,document.body.style.overflow=this._isOpen?"hidden":"",this._emit("storyExit")},w.prototype._applyBackdropTint=function(t){if(this._options.backdropTint){var i=this;this._colorCache[t]?i._setTintColor(this._colorCache[t]):M(t,function(e){e&&(i._colorCache[t]=e,i._setTintColor(e))})}},w.prototype._setTintColor=function(t){t&&(this._lightbox.style.setProperty("--neiki-tint-r",t.r),this._lightbox.style.setProperty("--neiki-tint-g",t.g),this._lightbox.style.setProperty("--neiki-tint-b",t.b),this._lightbox.classList.add("neiki-lightbox--tinted"))},w.prototype._morphOpen=function(t){if(!this._options.morphTransition)return!1;var i=this._items[t];if(!i||!i.img)return!1;var e=i.img.getBoundingClientRect(),n=this._image;n.style.transition="none",n.style.position="fixed",n.style.left=e.left+"px",n.style.top=e.top+"px",n.style.width=e.width+"px",n.style.height=e.height+"px",n.style.maxWidth="none",n.style.maxHeight="none",n.style.borderRadius=getComputedStyle(i.img).borderRadius,n.style.objectFit="cover",n.style.zIndex="99",n.offsetHeight;return requestAnimationFrame(function(){n.style.transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)",n.style.position="",n.style.left="",n.style.top="",n.style.width="",n.style.height="",n.style.maxWidth="",n.style.maxHeight="",n.style.borderRadius="",n.style.objectFit="",n.style.zIndex="",n.addEventListener("transitionend",function t(){n.removeEventListener("transitionend",t),n.style.transition=""})}),!0},w.prototype._loadExif=function(t){if(this._options.exif&&this._exifOverlay){var i=this._exifOverlay;i.innerHTML="",i.classList.remove("neiki-exif--visible"),z(t,function(t){if(t){var e=[];if((t.make||t.model)&&e.push((t.make||"")+" "+(t.model||"")),t.focalLength&&e.push(Math.round(t.focalLength)+"mm"),t.fNumber&&e.push("f/"+t.fNumber.toFixed(1)),t.exposure){var n=t.exposure;e.push(n<1?"1/"+Math.round(1/n)+"s":n.toFixed(1)+"s")}t.iso&&e.push("ISO "+t.iso),0!==e.length&&(i.textContent=e.join(" ยท "),i.classList.add("neiki-exif--visible"))}})}},w.prototype._loadPalette=function(t){if(this._options.colorPalette&&this._paletteStrip){var i=this._paletteStrip;i.innerHTML="",i.classList.remove("neiki-palette--visible"),P(t,5,function(t){t&&0!==t.length&&(t.forEach(function(t){var e=o("span","neiki-palette__dot");e.style.backgroundColor=t.hex,e.setAttribute("title",t.hex),i.appendChild(e)}),i.classList.add("neiki-palette--visible"))})}},w.prototype._hashSlug=function(){return this._container.id||this._groupName||"gallery-"+this._id},w.prototype._setHash=function(t){"number"==typeof t&&this._isOpen&&history.replaceState(null,"","#"+this._hashSlug()+"/"+(t+1))},w.prototype._clearHash=function(){var t="#"+this._hashSlug()+"/";0===window.location.hash.indexOf(t)&&history.replaceState(null,"",window.location.pathname+window.location.search)},w.prototype._checkHash=function(){if(this._options.hashNavigation){var t=window.location.hash,i="#"+this._hashSlug()+"/";if(0===t.indexOf(i)){var e=parseInt(t.substring(i.length),10);!isNaN(e)&&e>=1&&e<=this._items.length&&this.open(e-1)}}},w.prototype._onHashChange=function(){this._checkHash()},w.prototype._emit=function(t,i){var e=this._events[t];e&&e.forEach(function(t){t(i)})},w.prototype.open=function(t){this._destroyed||("number"!=typeof t&&(t=0),t<0&&(t=0),t>=this._items.length&&(t=this._items.length-1),this._isOpen=!0,document.body.style.overflow="hidden",this._lightbox.classList.add("neiki-lightbox--visible"),this._lightbox.focus(),this._currentIndex=-1,this._goTo(t),this._morphOpen(t),this._options.slideshow&&this.startSlideshow(),this._callPluginHook&&this._callPluginHook("open",{index:t}),this._emit("open",t))},w.prototype.close=function(){this._isOpen&&(this._isOpen=!1,this.stopSlideshow(),this._stopAllMedia&&this._stopAllMedia(),this._clearMediaSlide&&this._clearMediaSlide(),this._infoPanelOpen&&this.toggleInfoPanel(!1),this._shortcutsOpen&&this.toggleShortcutsHelp(!1),this._editorOverlay&&this.closeEditor(),this._annotateOverlay&&this.closeAnnotate(),this._hideContextMenu&&this._hideContextMenu(),this._pipActive&&(this._pipActive=!1,this._lightbox.classList.remove("neiki-lightbox--pip")),this._storyOpen&&this._exitStoryMode(),this._isFullscreen&&(document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()),this._resetZoom(),this._shareVisible&&this._toggleSharePopup(),this._lightbox.classList.remove("neiki-lightbox--tinted"),document.body.style.overflow="",this._lightbox.classList.remove("neiki-lightbox--visible"),this._options.hashNavigation&&this._clearHash(),this._callPluginHook&&this._callPluginHook("close"),this._emit("close"))},w.prototype.next=function(){this._navigateGroup&&this._navigateGroup(1)||this._goTo(this._currentIndex+1)},w.prototype.prev=function(){this._navigateGroup&&this._navigateGroup(-1)||this._goTo(this._currentIndex-1)},w.prototype.on=function(t,i){return this._events[t]||(this._events[t]=[]),this._events[t].push(i),this},w.prototype.off=function(t,i){if(!i)return delete this._events[t],this;var e=this._events[t];return e&&(this._events[t]=e.filter(function(t){return t!==i})),this},w.prototype.once=function(t,i){var e=this,n=function(o){i(o),e.off(t,n)};return this.on(t,n)},w.prototype.filter=function(t){this._applyFilter(t||null)},w.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this._isOpen&&this.close(),this._boundHandlers.keydown&&document.removeEventListener("keydown",this._boundHandlers.keydown),this._boundHandlers.hashchange&&window.removeEventListener("hashchange",this._boundHandlers.hashchange),this._boundHandlers.fullscreenchange&&(document.removeEventListener("fullscreenchange",this._boundHandlers.fullscreenchange),document.removeEventListener("webkitfullscreenchange",this._boundHandlers.fullscreenchange)),this._boundHandlers.touchstart&&(this._stage.removeEventListener("touchstart",this._boundHandlers.touchstart),this._stage.removeEventListener("touchmove",this._boundHandlers.touchmove),this._stage.removeEventListener("touchend",this._boundHandlers.touchend)),this._observer&&(this._observer.disconnect(),this._observer=null),this._virtualObserver&&(this._virtualObserver.disconnect(),this._virtualObserver=null),this._storyOpen&&this._exitStoryMode(),this._destroyPlugins&&this._destroyPlugins(),this._unregisterGroup&&this._unregisterGroup(),this._callPluginHook&&this._callPluginHook("destroy"),this._systemThemeMQ&&this._systemThemeListener&&(this._systemThemeMQ.removeEventListener?this._systemThemeMQ.removeEventListener("change",this._systemThemeListener):this._systemThemeMQ.removeListener&&this._systemThemeMQ.removeListener(this._systemThemeListener)),this._infiniteObserver&&(this._infiniteObserver.disconnect(),this._infiniteObserver=null),this._infiniteSentinel&&this._infiniteSentinel.parentNode&&this._infiniteSentinel.parentNode.removeChild(this._infiniteSentinel),this._lightbox&&this._lightbox.parentNode&&this._lightbox.parentNode.removeChild(this._lightbox),this._filterBar&&this._filterBar.parentNode&&this._filterBar.parentNode.removeChild(this._filterBar),this._contextMenu&&this._contextMenu.parentNode&&this._contextMenu.parentNode.removeChild(this._contextMenu),this._container.classList.remove("neiki-gallery","neiki-gallery--masonry","neiki-gallery--grid","neiki-gallery--mosaic","neiki-gallery--filmstrip","neiki-gallery--stagger"),this._events={})},w.compare=function(t,n){if("string"==typeof t&&(t=e(t)),t){var r=i({before:"",after:"",labelBefore:"Before",labelAfter:"After",startPosition:50},n);t.classList.add("neiki-compare"),t.innerHTML="";var a=o("img","neiki-compare__before",{src:r.before,alt:r.labelBefore,draggable:"false"}),s=o("img","neiki-compare__after",{src:r.after,alt:r.labelAfter,draggable:"false"}),l=o("div","neiki-compare__handle"),h=o("span","neiki-compare__label neiki-compare__label--before",{},r.labelBefore),d=o("span","neiki-compare__label neiki-compare__label--after",{},r.labelAfter);t.appendChild(a),t.appendChild(s),t.appendChild(l),t.appendChild(h),t.appendChild(d);var p=r.startPosition;u(p);var c=!1;return t.addEventListener("mousedown",_),t.addEventListener("touchstart",_,{passive:!1}),window.addEventListener("mousemove",b),window.addEventListener("touchmove",b,{passive:!1}),window.addEventListener("mouseup",f),window.addEventListener("touchend",f),{setPosition:u,getPosition:function(){return p},destroy:function(){t.removeEventListener("mousedown",_),t.removeEventListener("touchstart",_),window.removeEventListener("mousemove",b),window.removeEventListener("touchmove",b),window.removeEventListener("mouseup",f),window.removeEventListener("touchend",f),t.innerHTML="",t.classList.remove("neiki-compare")}}}function u(t){t=Math.max(0,Math.min(100,t)),p=t,s.style.clipPath="inset(0 0 0 "+t+"%)",l.style.left=t+"%"}function g(i){var e=t.getBoundingClientRect();return((i.touches?i.touches[0].clientX:i.clientX)-e.left)/e.width*100}function _(t){c=!0,u(g(t)),t.preventDefault()}function b(t){c&&(u(g(t)),t.preventDefault())}function f(){c=!1}};var A={};w.registerPlugin=function(t,i){if("string"!=typeof t||"function"!=typeof i)throw new Error("NeikiGallery.registerPlugin(name, factory) requires a string name and function factory");A[t]=i},w.unregisterPlugin=function(t){delete A[t]},w.getRegisteredPlugins=function(){return Object.keys(A)},w.prototype._initPlugins=function(){this._plugins={};var t=this._options.plugins;if(t&&t.length){var i=this;t.forEach(function(t){var e,n;if("string"==typeof t)e=t,n={};else{if(!t||"object"!=typeof t)return;e=t.name,n=t}var o=A[e];if(o)try{var r=o(i,n)||{};i._plugins[e]=r,"function"==typeof r.init&&r.init()}catch(t){window.console&&console.error&&console.error('[NeikiGallery] Plugin "'+e+'" init failed:',t)}else window.console&&console.warn&&console.warn("[NeikiGallery] Plugin not found: "+e)})}},w.prototype._callPluginHook=function(t,i){if(this._plugins)for(var e in this._plugins)if(this._plugins.hasOwnProperty(e)){var n=this._plugins[e];if(n&&"function"==typeof n[t])try{n[t](i)}catch(t){}}},w.prototype._destroyPlugins=function(){if(this._plugins){for(var t in this._plugins)if(this._plugins.hasOwnProperty(t)){var i=this._plugins[t];if(i&&"function"==typeof i.destroy)try{i.destroy()}catch(t){}}this._plugins={}}},w.prototype.plugin=function(t){return this._plugins?this._plugins[t]:null};var T=/(?:youtube\.com\/(?:watch\?v=|embed\/|v\/)|youtu\.be\/)([A-Za-z0-9_-]{11})/i,H=/vimeo\.com\/(?:video\/)?(\d+)/i,F=/\.(mp4|webm|ogv|mov|m4v)(\?.*)?$/i;function D(t){return t?T.test(t)?"youtube":H.test(t)?"vimeo":F.test(t)?"video":"image":"image"}w.detectMediaType=D,w.prototype._renderMediaSlide=function(t,i){var e,n,r=t.mediaType||D(t.src);if(t.mediaType=r,"image"===r)return null;if("video"===r){var a=o("video","neiki-lightbox__video",{src:t.src,controls:"true",playsinline:"true",preload:"metadata"});t.poster&&a.setAttribute("poster",t.poster),i.appendChild(a);try{a.play().catch(function(){})}catch(t){}return a}if("youtube"===r||"vimeo"===r){var s="youtube"===r?(e=t.src,(n=e.match(T))?"https://www.youtube.com/embed/"+n[1]+"?rel=0&autoplay=1":null):function(t){var i=t.match(H);return i?"https://player.vimeo.com/video/"+i[1]+"?autoplay=1":null}(t.src);if(!s)return null;var l=o("iframe","neiki-lightbox__embed",{src:s,frameborder:"0",allow:"autoplay; fullscreen; picture-in-picture",allowfullscreen:"true",loading:"lazy"});return i.appendChild(l),l}return null},w.prototype._stopAllMedia=function(){if(this._slideWrapper){for(var t=this._slideWrapper.querySelectorAll("video"),i=0;i<t.length;i++)try{t[i].pause()}catch(t){}for(var e=this._slideWrapper.querySelectorAll("iframe.neiki-lightbox__embed"),n=0;n<e.length;n++){var o=e[n].src;e[n].src="",e[n].src=o.replace("autoplay=1","autoplay=0")}}};var j={};w.prototype._registerGroup=function(){var t=this._options.group||this._container.getAttribute("data-group");t&&(this._groupName=t,j[t]||(j[t]=[]),j[t].push(this))},w.prototype._unregisterGroup=function(){if(this._groupName){var t=j[this._groupName];if(t){var i=t.indexOf(this);-1!==i&&t.splice(i,1),0===t.length&&delete j[this._groupName]}}},w.prototype._getGroupItems=function(){if(!this._groupName)return null;var t=j[this._groupName]||[],i=[];return t.forEach(function(t){t._items.forEach(function(e){i.push({gallery:t,item:e,originalIndex:t._items.indexOf(e)})})}),i},w.prototype._getGroupTotalCount=function(){var t=this._getGroupItems();return t?t.length:this._items.length},w.prototype._getGroupCurrentIndex=function(){if(!this._groupName)return this._currentIndex;var t=this._getGroupItems();if(!t)return this._currentIndex;var i=this,e=-1;return t.forEach(function(t,n){t.gallery===i&&t.originalIndex===i._currentIndex&&(e=n)}),-1===e?this._currentIndex:e},w.prototype._navigateGroup=function(t){if(!this._groupName)return!1;var i=this._getGroupItems();if(!i||i.length<=1)return!1;var e=this._getGroupCurrentIndex()+t;if(e<0||e>=i.length){if(!this._options.loop)return!0;e=(e+i.length)%i.length}var n=i[e];return n.gallery===this?this._goTo(n.originalIndex):(this.close(),n.gallery.open(n.originalIndex)),!0};function N(t){return null==t?"":String(t).replace(/[&<>"']/g,function(t){return{"&":"&","<":"<",">":">",'"':""","'":"'"}[t]})}function R(t){return N(t)}w.prototype._loadFavorites=function(){if(this._options.favorites){var t=this._options.favoritesKey||this._container.id||"default";this._favoritesStorageKey="neiki-gallery-favorites:"+t;try{var i=window.localStorage.getItem(this._favoritesStorageKey);this._favorites=i?JSON.parse(i):[]}catch(t){this._favorites=[]}}else this._favorites=[]},w.prototype._saveFavorites=function(){if(this._favoritesStorageKey)try{window.localStorage.setItem(this._favoritesStorageKey,JSON.stringify(this._favorites))}catch(t){}},w.prototype.isFavorite=function(t){"number"!=typeof t&&(t=this._currentIndex);var i=this._items[t];return!!i&&-1!==this._favorites.indexOf(i.src)},w.prototype.toggleFavorite=function(t){"number"!=typeof t&&(t=this._currentIndex);var i=this._items[t];if(!i)return!1;var e,n=this._favorites.indexOf(i.src);return-1===n?(this._favorites.push(i.src),e=!0):(this._favorites.splice(n,1),e=!1),this._saveFavorites(),this._updateFavoriteUI(t),this._emit(e?"favorite":"unfavorite",{index:t,src:i.src}),e},w.prototype.getFavorites=function(){return this._favorites.slice()},w.prototype.clearFavorites=function(){this._favorites=[],this._saveFavorites(),this._refreshAllFavoriteUI()},w.prototype._updateFavoriteUI=function(t){if(this._options.favorites){this._favBtn&&this._favBtn.classList.toggle("neiki-lightbox__fav--active",this.isFavorite(t));var i=this._items[t];i&&i.element&&i.element.classList.toggle("neiki-favorited",-1!==this._favorites.indexOf(i.src))}},w.prototype._refreshAllFavoriteUI=function(){if(this._options.favorites){var t=this;this._items.forEach(function(i,e){i.element.classList.toggle("neiki-favorited",-1!==t._favorites.indexOf(i.src))}),this._favBtn&&this._favBtn.classList.toggle("neiki-lightbox__fav--active",this.isFavorite(this._currentIndex))}},w.prototype._buildInfoPanel=function(){if(this._options.infoPanel){this._infoPanel=o("aside","neiki-lightbox__info"),this._infoPanel.innerHTML='<div class="neiki-info__header"><h3 class="neiki-info__title">Image info</h3><button class="neiki-info__close" type="button" aria-label="Close info panel">'+a+'</button></div><div class="neiki-info__body"></div>',this._lightbox.appendChild(this._infoPanel),this._infoBody=this._infoPanel.querySelector(".neiki-info__body");var t=this;this._infoPanel.querySelector(".neiki-info__close").addEventListener("click",function(){t.toggleInfoPanel(!1)})}},w.prototype.toggleInfoPanel=function(t){if(this._infoPanel){var i="boolean"==typeof t?t:!this._infoPanelOpen;this._infoPanelOpen=i,this._lightbox.classList.toggle("neiki-lightbox--info-open",i),i&&this._populateInfoPanel(this._currentIndex),this._emit(i?"infoOpen":"infoClose")}},w.prototype._populateInfoPanel=function(t){if(this._infoBody){var i=this._items[t];if(i){var e="";if(e+='<dl class="neiki-info__list">',e+="<dt>Filename</dt><dd>"+N((i.src||"").split("/").pop().split("?")[0])+"</dd>",i.caption&&(e+="<dt>Caption</dt><dd>"+N(i.caption)+"</dd>"),i.width&&i.height&&(e+="<dt>Dimensions</dt><dd>"+i.width+" ร "+i.height+" px</dd>"),i.tags&&i.tags.length&&(e+="<dt>Tags</dt><dd>"+i.tags.map(N).join(", ")+"</dd>"),i.mediaType&&"image"!==i.mediaType&&(e+="<dt>Type</dt><dd>"+i.mediaType+"</dd>"),e+='<dt>URL</dt><dd><a href="'+R(i.src)+'" target="_blank" rel="noopener">Open original</a></dd>',e+="</dl>",i._exifData){e+='<h4 class="neiki-info__subtitle">EXIF</h4><dl class="neiki-info__list">';var n=i._exifData;n.camera&&(e+="<dt>Camera</dt><dd>"+N(n.camera)+"</dd>"),n.lens&&(e+="<dt>Lens</dt><dd>"+N(n.lens)+"</dd>"),n.focalLength&&(e+="<dt>Focal length</dt><dd>"+N(n.focalLength)+"</dd>"),n.aperture&&(e+="<dt>Aperture</dt><dd>"+N(n.aperture)+"</dd>"),n.shutter&&(e+="<dt>Shutter</dt><dd>"+N(n.shutter)+"</dd>"),n.iso&&(e+="<dt>ISO</dt><dd>"+N(n.iso)+"</dd>"),e+="</dl>"}this._infoBody.innerHTML=e}}},w.prototype.print=function(t){"number"!=typeof t&&(t=this._currentIndex);var i=this._items[t];if(i){var e=window.open("about:blank","_blank");if(e){var n=i.caption?"<figcaption>"+N(i.caption)+"</figcaption>":"",o=e.document;o.open(),o.write("<!DOCTYPE html><html><head><title>Print โ "+N(i.caption||"Image")+'</title><style>@page { margin: 16mm; }body { margin: 0; font-family: system-ui, sans-serif; background: #fff; }figure { margin: 0; text-align: center; }img { max-width: 100%; max-height: 90vh; height: auto; object-fit: contain; display: block; margin: 0 auto; }figcaption { margin-top: 12px; font-size: 14px; color: #333; }@media print { body { background: #fff; -webkit-print-color-adjust: exact; } }</style></head><body><figure><img src="'+R(i.src)+'" alt="'+R(i.caption||"")+'">'+n+"</figure></body></html>"),o.close();var r=e.document.querySelector("img");r?r.complete?(e.focus(),e.print()):(r.onload=function(){e.focus(),e.print()},r.onerror=function(){e.focus(),e.print()}):(e.focus(),e.print()),this._emit("print",{index:t,src:i.src})}}},w.prototype._buildContextMenu=function(){if(this._options.contextMenu){this._contextMenu=o("div","neiki-context-menu",{role:"menu"}),document.body.appendChild(this._contextMenu);var t=this;this._onContextMenuClickOutside=function(i){t._contextMenu&&(t._contextMenu.contains(i.target)||t._hideContextMenu())},this._onContextMenuKey=function(i){"Escape"===i.key&&t._hideContextMenu()}}},w.prototype._showContextMenu=function(t,i,e){if(this._contextMenu){var n=this._items[e];if(n){var o=this,r=[{label:"Open original",icon:h,action:function(){window.open(n.src,"_blank","noopener")}},{label:"Copy link",icon:g,action:function(){o._copyToClipboard(n.src),o._showToast("Link copied")}},{label:"Download",icon:_,action:function(){o._downloadImage(n.src,n.caption)}},{label:"Share",icon:p,action:function(){o._shareItem(n)}}];!1!==this._options.print&&r.push({label:"Print",icon:h,action:function(){o.print(e)}}),this._options.favorites&&r.push({label:this.isFavorite(e)?"Remove from favorites":"Add to favorites",icon:b||p,action:function(){o.toggleFavorite(e)}}),this._contextMenu.innerHTML=r.map(function(t,i){return'<button class="neiki-context-menu__item" type="button" data-idx="'+i+'" role="menuitem"><span class="neiki-context-menu__icon">'+t.icon+'</span><span class="neiki-context-menu__label">'+t.label+"</span></button>"}).join(""),Array.prototype.forEach.call(this._contextMenu.querySelectorAll("button"),function(t){t.addEventListener("click",function(i){i.preventDefault();var e=parseInt(t.getAttribute("data-idx"),10);r[e]&&r[e].action&&r[e].action(),o._hideContextMenu()})}),this._contextMenu.style.left=t+"px",this._contextMenu.style.top=i+"px",this._contextMenu.classList.add("neiki-context-menu--visible");var a=this._contextMenu.getBoundingClientRect();a.right>window.innerWidth&&(this._contextMenu.style.left=window.innerWidth-a.width-8+"px"),a.bottom>window.innerHeight&&(this._contextMenu.style.top=window.innerHeight-a.height-8+"px"),document.addEventListener("click",this._onContextMenuClickOutside),document.addEventListener("keydown",this._onContextMenuKey)}}},w.prototype._hideContextMenu=function(){this._contextMenu&&(this._contextMenu.classList.remove("neiki-context-menu--visible"),document.removeEventListener("click",this._onContextMenuClickOutside),document.removeEventListener("keydown",this._onContextMenuKey))},w.prototype._bindContextMenu=function(){if(this._options.contextMenu){var t=this;this._items.forEach(function(i,e){i.element.addEventListener("contextmenu",function(i){i.preventDefault(),t._showContextMenu(i.clientX,i.clientY,e)})})}},w.prototype._downloadImage=function(t,i){var e=document.createElement("a");e.href=t,e.download=(i||"image").replace(/[^a-z0-9_\-]+/gi,"_")+".jpg",e.target="_blank",e.rel="noopener",document.body.appendChild(e),e.click(),setTimeout(function(){e.parentNode&&e.parentNode.removeChild(e)},100)},w.prototype._shareItem=function(t){navigator.share?navigator.share({title:t.caption||"Image",url:t.src}).catch(function(){}):(this._copyToClipboard(t.src),this._showToast("Link copied"))};var U=[{keys:["โ","โ"],desc:"Previous / Next image"},{keys:["Home","End"],desc:"First / Last image"},{keys:["Esc"],desc:"Close lightbox"},{keys:["F"],desc:"Toggle fullscreen"},{keys:["Space"],desc:"Play / Pause slideshow"},{keys:["Z"],desc:"Toggle zoom"},{keys:["I"],desc:"Toggle info panel"},{keys:["B"],desc:"Toggle favorite (bookmark)"},{keys:["P"],desc:"Print current image"},{keys:["?"],desc:"Show this help"}];function G(){n("[data-neiki-gallery]").forEach(function(t){t._neikiGallery||(t._neikiGallery=new w(t))})}return w.prototype._buildShortcutsHelp=function(){if(this._options.shortcutsHelp){this._shortcutsOverlay=o("div","neiki-shortcuts");var t=U.map(function(t){return'<li><span class="neiki-shortcuts__keys">'+t.keys.map(function(t){return"<kbd>"+t+"</kbd>"}).join(" ")+'</span><span class="neiki-shortcuts__desc">'+t.desc+"</span></li>"}).join("");this._shortcutsOverlay.innerHTML='<div class="neiki-shortcuts__panel" role="dialog" aria-label="Keyboard shortcuts"><div class="neiki-shortcuts__header"><h3>Keyboard shortcuts</h3><button class="neiki-shortcuts__close" type="button" aria-label="Close">'+a+'</button></div><ul class="neiki-shortcuts__list">'+t+"</ul></div>",this._lightbox.appendChild(this._shortcutsOverlay);var i=this;this._shortcutsOverlay.querySelector(".neiki-shortcuts__close").addEventListener("click",function(){i.toggleShortcutsHelp(!1)}),this._shortcutsOverlay.addEventListener("click",function(t){t.target===i._shortcutsOverlay&&i.toggleShortcutsHelp(!1)})}},w.prototype.toggleShortcutsHelp=function(t){if(this._shortcutsOverlay){var i="boolean"==typeof t?t:!this._shortcutsOpen;this._shortcutsOpen=i,this._shortcutsOverlay.classList.toggle("neiki-shortcuts--visible",i)}},w.prototype._setupInfiniteScroll=function(){if(this._options.infiniteScroll&&"function"==typeof this._options.loadMore){var t=this;this._infiniteSentinel=o("div","neiki-infinite-sentinel"),this._container.parentNode.insertBefore(this._infiniteSentinel,this._container.nextSibling),"IntersectionObserver"in window&&(this._infiniteLoading=!1,this._infiniteObserver=new IntersectionObserver(function(i){i.forEach(function(i){!i.isIntersecting||t._infiniteLoading||t._infiniteDone||t._loadMoreItems()})},{rootMargin:"300px"}),this._infiniteObserver.observe(this._infiniteSentinel))}},w.prototype._loadMoreItems=function(){var t=this;if(!this._infiniteLoading){this._infiniteLoading=!0,this._infiniteSentinel.classList.add("neiki-infinite-sentinel--loading");var i=this._options.loadMore.call(this,this._items.length);Promise.resolve(i).then(function(i){if(t._infiniteLoading=!1,t._infiniteSentinel.classList.remove("neiki-infinite-sentinel--loading"),!i||!i.length)return t._infiniteDone=!0,t._infiniteObserver&&t._infiniteObserver.disconnect(),void t._infiniteSentinel.classList.add("neiki-infinite-sentinel--done");t.append(i)}).catch(function(){t._infiniteLoading=!1,t._infiniteSentinel.classList.remove("neiki-infinite-sentinel--loading")})}},w.prototype.append=function(t){if(t&&t.length){var i=this;t.forEach(function(t){var e=o("a","",{href:t.src||t.href||"#"});t.caption&&e.setAttribute("data-caption",t.caption),t.tags&&e.setAttribute("data-tags",Array.isArray(t.tags)?t.tags.join(","):t.tags),t.size&&e.setAttribute("data-size",t.size),t.width&&e.setAttribute("data-width",t.width),t.height&&e.setAttribute("data-height",t.height),t.group&&e.setAttribute("data-group",t.group);var n=o("img","",{src:t.thumb||t.src,alt:t.caption||""});t.focus&&n.setAttribute("data-focus",t.focus),t.blurhash&&n.setAttribute("data-blurhash",t.blurhash),e.appendChild(n),i._container.appendChild(e)}),this._reparseItems(),this._emit("append",t)}},w.prototype.remove=function(t){if(!(t<0||t>=this._items.length)){var i=this._items[t];i.element&&i.element.parentNode&&i.element.parentNode.removeChild(i.element),this._items.splice(t,1),this._currentIndex>=this._items.length&&(this._currentIndex=this._items.length-1),this._emit("remove",{index:t})}},w.prototype._reparseItems=function(){this._items.length;this._parseItems(),this._options.lazyLoad&&this._observeLazyLoad(),this._options.focusPoint&&this._applyFocusPoints(),this._options.blurhash&&this._applyBlurhashes(),this._options.aspectSkeleton&&this._applyAspectSkeleton(),this._options.dragReorder&&this._setupDragReorder(),this._options.contextMenu&&this._bindContextMenu(),this._refreshAllFavoriteUI&&this._refreshAllFavoriteUI()},w.prototype._buildEditor=function(){if(this._options.editor){this._editorOverlay=o("div","neiki-editor"),this._editorOverlay.innerHTML='<div class="neiki-editor__toolbar"><button class="neiki-editor__btn" data-action="rotate-ccw" type="button" title="Rotate left"><svg viewBox="0 0 24 24"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/></svg></button><button class="neiki-editor__btn" data-action="rotate-cw" type="button" title="Rotate right"><svg viewBox="0 0 24 24"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></svg></button><button class="neiki-editor__btn" data-action="flip-h" type="button" title="Flip horizontal"><svg viewBox="0 0 24 24"><path d="M12 3v18"/><path d="M16 7l4 5-4 5"/><path d="M8 7l-4 5 4 5"/></svg></button><button class="neiki-editor__btn" data-action="flip-v" type="button" title="Flip vertical"><svg viewBox="0 0 24 24"><path d="M3 12h18"/><path d="M7 8l5-4 5 4"/><path d="M7 16l5 4 5-4"/></svg></button><span class="neiki-editor__sep"></span><button class="neiki-editor__btn" data-action="reset" type="button" title="Reset">Reset</button><button class="neiki-editor__btn neiki-editor__btn--primary" data-action="export" type="button" title="Export">Export</button><button class="neiki-editor__btn" data-action="cancel" type="button" title="Close editor">Close</button></div>',this._lightbox.appendChild(this._editorOverlay);var t=this;Array.prototype.forEach.call(this._editorOverlay.querySelectorAll("button[data-action]"),function(i){i.addEventListener("click",function(){t._editorAction(i.getAttribute("data-action"))})})}},w.prototype.openEditor=function(){this._editorOverlay&&(this._editorState={rotation:0,flipH:!1,flipV:!1},this._editorOverlay.classList.add("neiki-editor--visible"),this._lightbox.classList.add("neiki-lightbox--editor"),this._applyEditorTransform(),this._emit("editorOpen"))},w.prototype.closeEditor=function(){this._editorOverlay&&(this._editorOverlay.classList.remove("neiki-editor--visible"),this._lightbox.classList.remove("neiki-lightbox--editor"),this._editorState=null,this._currentImg&&(this._currentImg.style.transform=""),this._emit("editorClose"))},w.prototype._editorAction=function(t){if(this._editorState){var i=this._editorState;switch(t){case"rotate-cw":i.rotation=(i.rotation+90)%360;break;case"rotate-ccw":i.rotation=(i.rotation-90+360)%360;break;case"flip-h":i.flipH=!i.flipH;break;case"flip-v":i.flipV=!i.flipV;break;case"reset":i.rotation=0,i.flipH=!1,i.flipV=!1;break;case"cancel":return void this.closeEditor();case"export":return void this._exportEditedImage()}this._applyEditorTransform()}},w.prototype._applyEditorTransform=function(){if(this._currentImg&&this._editorState){var t=this._editorState,i=t.flipH?-1:1,e=t.flipV?-1:1;this._currentImg.style.transform="rotate("+t.rotation+"deg) scale("+i+","+e+")",this._currentImg.style.transition="transform 0.3s ease"}},w.prototype._exportEditedImage=function(){if(this._currentImg&&this._editorState){var t=this._currentImg,i=this._editorState,e=document.createElement("canvas"),n=90===i.rotation||270===i.rotation;e.width=n?t.naturalHeight:t.naturalWidth,e.height=n?t.naturalWidth:t.naturalHeight;var o=e.getContext("2d");o.translate(e.width/2,e.height/2),o.rotate(i.rotation*Math.PI/180),o.scale(i.flipH?-1:1,i.flipV?-1:1);try{o.drawImage(t,-t.naturalWidth/2,-t.naturalHeight/2);var r=this;e.toBlob(function(t){if(t){r._lastEditedBlob=t,r._emit("editorExport",{blob:t,url:URL.createObjectURL(t)});var i=document.createElement("a");i.href=URL.createObjectURL(t),i.download="edited-"+Date.now()+".png",i.click()}},"image/png")}catch(t){this._showToast("Cannot export โ image is cross-origin")}}},w.prototype.getEditedBlob=function(){return this._lastEditedBlob||null},w.prototype._buildAnnotation=function(){if(this._options.annotate){this._annotateOverlay=o("div","neiki-annotate"),this._annotateOverlay.innerHTML='<canvas class="neiki-annotate__canvas"></canvas><div class="neiki-annotate__toolbar"><input class="neiki-annotate__color" type="color" value="#ff3b30" aria-label="Stroke color"><input class="neiki-annotate__size" type="range" min="1" max="20" value="4" aria-label="Brush size"><button class="neiki-annotate__btn" data-action="undo" type="button" title="Undo">โถ</button><button class="neiki-annotate__btn" data-action="clear" type="button" title="Clear">Clear</button><button class="neiki-annotate__btn neiki-annotate__btn--primary" data-action="export" type="button" title="Export">Export</button><button class="neiki-annotate__btn" data-action="cancel" type="button" title="Close">Close</button></div>',this._lightbox.appendChild(this._annotateOverlay),this._annotateCanvas=this._annotateOverlay.querySelector(".neiki-annotate__canvas"),this._annotateCtx=this._annotateCanvas.getContext("2d"),this._annotateStrokes=[];var t=this;Array.prototype.forEach.call(this._annotateOverlay.querySelectorAll("button[data-action]"),function(i){i.addEventListener("click",function(){t._annotateAction(i.getAttribute("data-action"))})}),this._annotateOverlay.querySelector(".neiki-annotate__color").addEventListener("input",function(i){t._annotateColor=i.target.value}),this._annotateOverlay.querySelector(".neiki-annotate__size").addEventListener("input",function(i){t._annotateSize=parseInt(i.target.value,10)}),this._annotateColor="#ff3b30",this._annotateSize=4,this._bindAnnotateDrawing()}},w.prototype._bindAnnotateDrawing=function(){var t=this,i=this._annotateCanvas,e=!1,n=null;function o(t){var e=i.getBoundingClientRect(),n=t.touches?t.touches[0]:t;return{x:(n.clientX-e.left)*(i.width/e.width),y:(n.clientY-e.top)*(i.height/e.height)}}function r(i){i.preventDefault(),e=!0;var r=o(i);n={color:t._annotateColor,size:t._annotateSize,points:[r]}}function a(i){if(e){i.preventDefault();var r=o(i);n.points.push(r),t._redrawAnnotations(n)}}function s(){e&&(e=!1,n&&n.points.length>1&&t._annotateStrokes.push(n),n=null)}i.addEventListener("mousedown",r),i.addEventListener("mousemove",a),window.addEventListener("mouseup",s),i.addEventListener("touchstart",r,{passive:!1}),i.addEventListener("touchmove",a,{passive:!1}),i.addEventListener("touchend",s)},w.prototype._redrawAnnotations=function(t){var i=this._annotateCtx,e=this._annotateCanvas;i.clearRect(0,0,e.width,e.height);var n=this._annotateStrokes.slice();t&&n.push(t),n.forEach(function(t){if(t.points.length){i.strokeStyle=t.color,i.lineWidth=t.size,i.lineCap="round",i.lineJoin="round",i.beginPath(),i.moveTo(t.points[0].x,t.points[0].y);for(var e=1;e<t.points.length;e++)i.lineTo(t.points[e].x,t.points[e].y);i.stroke()}})},w.prototype.openAnnotate=function(){this._annotateOverlay&&this._currentImg&&(this._annotateCanvas.width=this._currentImg.naturalWidth||1024,this._annotateCanvas.height=this._currentImg.naturalHeight||768,this._annotateStrokes=[],this._redrawAnnotations(),this._annotateOverlay.classList.add("neiki-annotate--visible"),this._lightbox.classList.add("neiki-lightbox--annotate"),this._emit("annotateOpen"))},w.prototype.closeAnnotate=function(){this._annotateOverlay&&(this._annotateOverlay.classList.remove("neiki-annotate--visible"),this._lightbox.classList.remove("neiki-lightbox--annotate"),this._emit("annotateClose"))},w.prototype._annotateAction=function(t){switch(t){case"undo":this._annotateStrokes.pop(),this._redrawAnnotations();break;case"clear":this._annotateStrokes=[],this._redrawAnnotations();break;case"cancel":this.closeAnnotate();break;case"export":this._exportAnnotation()}},w.prototype._exportAnnotation=function(){if(this._currentImg){var t=document.createElement("canvas");t.width=this._currentImg.naturalWidth,t.height=this._currentImg.naturalHeight;var i=t.getContext("2d");try{i.drawImage(this._currentImg,0,0),i.drawImage(this._annotateCanvas,0,0);var e=this;t.toBlob(function(t){if(t){e._lastAnnotatedBlob=t,e._emit("annotateExport",{blob:t,url:URL.createObjectURL(t)});var i=document.createElement("a");i.href=URL.createObjectURL(t),i.download="annotated-"+Date.now()+".png",i.click()}},"image/png")}catch(t){this._showToast("Cannot export โ image is cross-origin")}}},w.prototype.getAnnotatedBlob=function(){return this._lastAnnotatedBlob||null},w.prototype._applyKenburns=function(){if(this._slideshowRunning){var t=this._options.slideshow;if("object"==typeof t&&t.kenburns&&this._currentImg){this._currentImg.classList.add("neiki-kenburns");var i=(this._options.slideshow.interval||4e3)+"ms";this._currentImg.style.setProperty("--neiki-kenburns-duration",i)}}},w.prototype._removeKenburns=function(){this._currentImg&&(this._currentImg.classList.remove("neiki-kenburns"),this._currentImg.style.removeProperty("--neiki-kenburns-duration"))},w.prototype._setupSlideshowPauseOnHover=function(){var t=this._options.slideshow;if("object"==typeof t&&t.pauseOnHover){var i=this;this._lightbox&&(this._lightbox.addEventListener("mouseenter",function(){i._slideshowRunning&&(i._slideshowPausedByHover=!0,i.pauseSlideshow())}),this._lightbox.addEventListener("mouseleave",function(){i._slideshowPausedByHover&&(i._slideshowPausedByHover=!1,i.startSlideshow())}))}},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",G):G(),w.autoInit=G,w.extractPalette=P,w.extractDominantColor=M,w.parseExif=z,w.decodeBlurhash=I,w.version="3.1.0",w});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "neiki-gallery",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Vanilla JavaScript image gallery and lightbox โ zero dependencies",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gallery",
|
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
"album",
|
|
29
29
|
"infinite-scroll"
|
|
30
30
|
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"test": "node --check src/neiki-gallery.js"
|
|
33
|
+
},
|
|
31
34
|
"main": "dist/neiki-gallery.js",
|
|
32
35
|
"exports": {
|
|
33
36
|
".": "./dist/neiki-gallery.js",
|