/* =========================================================
   NOCTARIS GALLERY v1.3 — POLISH
   BLACK. SPACE. PHOTOGRAPHY. RHYTHM.

   HARD RULE: Gallery assets are isolated from DOG / PHOTOS assets.
   Gallery: /assets/gallery/<dog>/gallery-<dog>-XX.webp
   Dog PHOTOS: /assets/<dog>/...
   Never merge the two collections during a Gallery rebuild.
   ========================================================= */

.gallery-body{background:#000;overflow:hidden;}
.noctaris-gallery{width:100%;height:100dvh;min-height:100svh;padding-top:56px;box-sizing:border-box;overflow:hidden;background:#000;}
.gallery-dog-page{display:none;position:relative;width:100%;height:calc(100dvh - 56px);min-height:0;overflow:hidden;background:#000;}
.gallery-dog-page.is-active{display:flex;flex-direction:column;animation:galleryPageIn .32s ease both;}

/* Gallery identity: one quiet manifesto floating in the existing black space. */
.gallery-page-header{flex:0 0 clamp(82px,11.5vh,100px);padding:clamp(12px,1.7vh,17px) 20px 4px;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;}
.gallery-manifesto{margin:0;color:rgba(255,255,255,.43);font-family:Georgia,"Times New Roman",serif;font-size:clamp(15px,1.3vw,20px);line-height:1;font-style:italic;letter-spacing:.08em;}

/* ATLAS — art-directed puzzle, never algorithmic masonry. */
.atlas-gallery-composition{flex:1 1 auto;width:min(86vw,1380px);min-height:0;margin:0 auto clamp(10px,1.5vh,16px);display:grid;grid-template-columns:repeat(12,minmax(0,1fr));grid-template-rows:repeat(16,minmax(0,1fr));gap:clamp(3px,.28vw,5px);position:relative;}
.gallery-artwork{appearance:none;display:block;min-width:0;min-height:0;margin:0;padding:0;overflow:hidden;border:0;border-radius:0;background:#080808;color:inherit;cursor:zoom-in;position:relative;}
.gallery-artwork::after{content:"";position:absolute;inset:0;background:rgba(255,255,255,0);pointer-events:none;transition:background .2s ease;}
.gallery-artwork:hover::after,.gallery-artwork:focus-visible::after{background:rgba(255,255,255,.035);}
.gallery-artwork:focus-visible{outline:1px solid rgba(255,255,255,.56);outline-offset:2px;}
.gallery-artwork img{display:block;width:100%;height:100%;object-fit:cover;filter:saturate(.92) contrast(1.015);transform:scale(1.001);transition:transform .42s cubic-bezier(.2,.7,.2,1),filter .28s ease;user-select:none;-webkit-user-drag:none;}
@media(hover:hover){.gallery-artwork:hover img{transform:scale(1.012);filter:saturate(.98) contrast(1.025);}}

/* 24 photographs. One curated NOCTARIS puzzle — new images are dispersed through the composition. */
.gallery-artwork-01{grid-column:1 / 4;grid-row:1 / 5;}
.gallery-artwork-19{grid-column:4 / 6;grid-row:1 / 3;}
.gallery-artwork-02{grid-column:4 / 6;grid-row:3 / 5;}
.gallery-artwork-03{grid-column:6 / 9;grid-row:1 / 3;}
.gallery-artwork-04{grid-column:6 / 9;grid-row:3 / 5;}
.gallery-artwork-05{grid-column:9 / 13;grid-row:1 / 5;}
.gallery-artwork-06{grid-column:1 / 3;grid-row:5 / 9;}
.gallery-artwork-20{grid-column:3 / 6;grid-row:5 / 7;}
.gallery-artwork-07{grid-column:3 / 6;grid-row:7 / 9;}
.gallery-artwork-08{grid-column:6 / 9;grid-row:5 / 9;}
.gallery-artwork-09{grid-column:9 / 11;grid-row:5 / 7;}
.gallery-artwork-21{grid-column:11 / 13;grid-row:5 / 7;}
.gallery-artwork-10{grid-column:9 / 13;grid-row:7 / 9;}
.gallery-artwork-11{grid-column:1 / 4;grid-row:9 / 13;}
.gallery-artwork-22{grid-column:4 / 6;grid-row:9 / 11;}
.gallery-artwork-12{grid-column:4 / 6;grid-row:11 / 13;}
.gallery-artwork-13{grid-column:6 / 9;grid-row:9 / 13;}
.gallery-artwork-14{grid-column:9 / 11;grid-row:9 / 11;}
.gallery-artwork-23{grid-column:11 / 13;grid-row:9 / 11;}
.gallery-artwork-15{grid-column:9 / 13;grid-row:11 / 13;}
.gallery-artwork-16{grid-column:1 / 4;grid-row:13 / 17;}
.gallery-artwork-17{grid-column:4 / 7;grid-row:13 / 17;}
.gallery-artwork-24{grid-column:7 / 10;grid-row:13 / 17;}
.gallery-artwork-18{grid-column:10 / 13;grid-row:13 / 17;}

/* Crop direction is art direction, not a generic center crop. */
.gallery-artwork-01 img{object-position:50% 52%;}.gallery-artwork-02 img{object-position:52% 52%;}.gallery-artwork-03 img{object-position:50% 52%;}.gallery-artwork-04 img{object-position:50% 42%;}.gallery-artwork-05 img{object-position:50% 55%;}.gallery-artwork-06 img{object-position:50% 44%;}.gallery-artwork-07 img{object-position:52% 48%;}.gallery-artwork-08 img{object-position:48% 58%;}.gallery-artwork-09 img{object-position:50% 50%;}.gallery-artwork-10 img{object-position:50% 48%;}.gallery-artwork-11 img{object-position:52% 52%;}.gallery-artwork-12 img{object-position:50% 48%;}.gallery-artwork-13 img{object-position:50% 50%;}.gallery-artwork-14 img{object-position:50% 55%;}.gallery-artwork-15 img{object-position:50% 48%;}.gallery-artwork-16 img{object-position:50% 52%;}.gallery-artwork-17 img{object-position:50% 52%;}.gallery-artwork-18 img{object-position:50% 44%;}.gallery-artwork-19 img{object-position:50% 42%;}.gallery-artwork-20 img{object-position:50% 52%;}.gallery-artwork-21 img{object-position:50% 48%;}.gallery-artwork-22 img{object-position:50% 44%;}.gallery-artwork-23 img{object-position:50% 48%;}.gallery-artwork-24 img{object-position:50% 58%;}

.gallery-page-nav{position:absolute;z-index:20;inset:50% clamp(10px,2vw,32px) auto;transform:translateY(-50%);margin:0;padding:0;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;pointer-events:none;}
.gallery-page-arrow{appearance:none;border:0;background:transparent;color:rgba(255,255,255,.46);font-size:27px;line-height:1;padding:12px;cursor:pointer;transition:color .18s ease,opacity .18s ease;pointer-events:auto;}.gallery-page-prev{justify-self:start}.gallery-page-next{justify-self:end}.gallery-page-arrow:hover:not(:disabled),.gallery-page-arrow:focus-visible:not(:disabled){color:rgba(255,255,255,.9)}.gallery-page-arrow:disabled{opacity:0;pointer-events:none}.gallery-page-nav-count{display:none;}

.noctaris-gallery-modal .gallery-counter{position:fixed;left:50%;bottom:20px;z-index:4010;margin:0;transform:translateX(-50%);color:rgba(255,255,255,.62);font-size:10px;letter-spacing:.18em;font-variant-numeric:tabular-nums;}.noctaris-gallery-modal .gallery-arrow:disabled{opacity:.035;cursor:default}.noctaris-gallery-modal .gallery-image{max-width:calc(100vw - 68px);max-height:calc(100svh - 92px);}
@keyframes galleryPageIn{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.gallery-dog-page.is-active{animation:none}.gallery-artwork img,.gallery-artwork::after{transition:none}}

/* MOBILE: still a composed puzzle, never a vertical photo feed. */
@media(max-width:760px){
  .gallery-page-header{flex-basis:clamp(80px,10.5vh,94px);padding:13px 12px 4px;}
  .gallery-manifesto{font-size:16px;}
  .atlas-gallery-composition{width:calc(100% - 14px);margin:0 auto 8px;grid-template-columns:repeat(8,minmax(0,1fr));grid-template-rows:repeat(21,minmax(0,1fr));gap:3px;}
  .gallery-artwork-01{grid-column:1 / 4;grid-row:1 / 6}.gallery-artwork-19{grid-column:4 / 6;grid-row:1 / 4}.gallery-artwork-02{grid-column:4 / 6;grid-row:4 / 7}.gallery-artwork-03{grid-column:6 / 9;grid-row:1 / 3}.gallery-artwork-04{grid-column:6 / 9;grid-row:3 / 6}.gallery-artwork-05{grid-column:1 / 3;grid-row:6 / 10}.gallery-artwork-20{grid-column:3 / 6;grid-row:7 / 10}.gallery-artwork-06{grid-column:6 / 9;grid-row:6 / 9}.gallery-artwork-07{grid-column:3 / 6;grid-row:10 / 13}.gallery-artwork-21{grid-column:6 / 9;grid-row:9 / 12}.gallery-artwork-08{grid-column:1 / 3;grid-row:10 / 14}.gallery-artwork-09{grid-column:6 / 7;grid-row:12 / 15}.gallery-artwork-10{grid-column:7 / 9;grid-row:12 / 15}.gallery-artwork-22{grid-column:3 / 6;grid-row:13 / 17}.gallery-artwork-11{grid-column:1 / 3;grid-row:14 / 18}.gallery-artwork-12{grid-column:6 / 9;grid-row:15 / 18}.gallery-artwork-23{grid-column:3 / 5;grid-row:17 / 21}.gallery-artwork-13{grid-column:5 / 7;grid-row:18 / 21}.gallery-artwork-14{grid-column:7 / 9;grid-row:18 / 21}.gallery-artwork-15{grid-column:1 / 3;grid-row:18 / 22}.gallery-artwork-16{grid-column:3 / 5;grid-row:21 / 22}.gallery-artwork-17{grid-column:5 / 7;grid-row:21 / 22}.gallery-artwork-24{grid-column:7 / 9;grid-row:21 / 22}.gallery-artwork-18{grid-column:6 / 9;grid-row:15 / 18}
  .gallery-page-nav{inset:52% 0 auto}.gallery-page-arrow{font-size:22px;padding:10px 7px}.noctaris-gallery-modal .gallery-image{max-width:100vw;max-height:92svh;}
}
@media(max-height:700px) and (min-width:761px){.gallery-page-header{flex-basis:78px;padding-top:10px}.atlas-gallery-composition{margin-bottom:7px}}
