.fnos-gallery-shell{padding-top:65px}.fnos-gallery-toolbar{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:45px;margin-bottom:28px}.fnos-gallery-toolbar h2{font-size:clamp(38px,5vw,66px);letter-spacing:-2px}.fnos-gallery-toolbar .muted{max-width:630px;margin-top:8px}.fnos-gallery-actions{display:flex;align-items:end;gap:14px}.gallery-search{display:grid;gap:6px;color:var(--muted);font-size:10px;letter-spacing:1px}.gallery-search input{width:min(270px,30vw);height:43px;border:1px solid var(--line);border-radius:var(--radius-control,13px);background:var(--panel);color:var(--text);padding:0 17px;outline:0}.gallery-search input:focus{border-color:var(--orange)}.gallery-filters{display:flex;padding:4px;border:1px solid var(--line);border-radius:999px;background:var(--panel)}.gallery-filters button{height:33px;padding:0 14px;border:0;border-radius:999px;background:transparent;color:var(--muted);font-size:12px;cursor:pointer}.gallery-filters button.active{background:var(--orange);color:#fff}.gallery-summary{display:flex;align-items:center;gap:12px;margin-bottom:24px;color:var(--muted);font-size:12px}.gallery-summary i{width:4px;height:4px;border-radius:50%;background:var(--orange)}.fnos-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px}.fnos-gallery-card{display:grid;gap:11px;min-width:0;padding:0;border:0;background:none;color:var(--text);text-align:left;cursor:pointer}.fnos-gallery-thumb{position:relative;display:block;aspect-ratio:4/3;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--panel)}.fnos-gallery-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .45s cubic-bezier(.2,.7,.2,1)}.fnos-gallery-card:hover img{transform:scale(1.045)}.gallery-video-badge{position:absolute;left:50%;top:50%;display:grid;width:48px;height:48px;place-items:center;padding-left:3px;transform:translate(-50%,-50%);border:1px solid rgba(255,255,255,.42);border-radius:50%;background:rgba(0,0,0,.52);color:#fff;font-size:16px;backdrop-filter:blur(8px)}.fnos-gallery-info{display:grid;gap:3px;min-width:0;padding:0 4px}.fnos-gallery-info strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}.fnos-gallery-info small{color:var(--muted);font-size:11px}.fnos-gallery-state{display:grid;min-height:230px;place-items:center;align-content:center;gap:15px;color:var(--muted)}.fnos-gallery-state[hidden]{display:none}.gallery-loader{display:none;width:30px;height:30px;border:2px solid var(--line);border-top-color:var(--orange);border-radius:50%;animation:gallery-spin .8s linear infinite}.fnos-gallery-state.loading .gallery-loader{display:block}.gallery-more{display:block;margin:42px auto 0}.gallery-more[hidden]{display:none}@keyframes gallery-spin{to{transform:rotate(360deg)}}
.fnos-viewer{inset:0;width:100vw;height:100dvh;max-width:none;max-height:none;margin:0;padding:max(58px,env(safe-area-inset-top)) 76px max(82px,env(safe-area-inset-bottom));overflow:hidden;border:0;border-radius:0;background:rgba(3,4,5,.975);color:#fff}.fnos-viewer[open]{display:grid;grid-template-columns:58px minmax(0,1fr) 58px;grid-template-rows:minmax(0,1fr) auto;gap:15px;animation:lightbox-shell-in .24s ease-out}.fnos-viewer::backdrop{background:rgba(3,4,5,.97)}.fnos-viewer .dialog-close{position:fixed;top:max(16px,env(safe-area-inset-top));right:max(18px,env(safe-area-inset-right));z-index:5;background:rgba(25,27,29,.8);color:#fff}.fnos-viewer-stage{grid-column:2;grid-row:1;display:grid;min-width:0;min-height:0;place-items:center;overflow:hidden}.fnos-viewer-media{display:grid;max-width:100%;max-height:100%;place-items:center;transform-origin:center;transition:transform .16s ease;touch-action:none;will-change:transform}.fnos-viewer-media.can-pan{cursor:grab}.fnos-viewer-media.dragging{cursor:grabbing;transition:none}.fnos-viewer-media img,.fnos-viewer-media video{display:block;max-width:100%;max-height:calc(100dvh - 170px);object-fit:contain;border-radius:10px}.fnos-viewer-media video{width:min(1200px,100%)}.fnos-viewer-nav{align-self:center;display:grid;width:48px;height:64px;place-items:center;border:1px solid rgba(255,255,255,.2);border-radius:999px;background:rgba(20,22,24,.72);color:#fff;font-size:42px;cursor:pointer}.fnos-viewer-nav:hover{border-color:var(--orange);background:var(--orange)}.fnos-viewer-nav:disabled{visibility:hidden}.fnos-viewer-prev{grid-column:1;grid-row:1}.fnos-viewer-next{grid-column:3;grid-row:1}.fnos-viewer-toolbar{grid-column:1/-1;grid-row:2;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:20px;color:rgba(255,255,255,.75);font-size:12px}.fnos-viewer-toolbar>div:first-child{display:grid;min-width:0}.fnos-viewer-toolbar strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:13px}.fnos-viewer-toolbar span{font-size:11px}.fnos-viewer-controls{display:flex;justify-self:end;gap:7px}.fnos-viewer-controls button{min-width:38px;height:38px;padding:0 11px;border:1px solid rgba(255,255,255,.2);border-radius:999px;background:rgba(20,22,24,.75);color:#fff;cursor:pointer}.fnos-viewer-controls button:hover:not(:disabled){border-color:var(--orange);color:var(--orange)}.fnos-viewer-controls button:disabled{opacity:.55}
@media(max-width:900px){.fnos-gallery-toolbar{grid-template-columns:1fr;align-items:start;gap:24px}.fnos-gallery-actions{width:100%;flex-wrap:wrap}.gallery-search{flex:1}.gallery-search input{width:100%}.fnos-viewer{padding:56px 8px max(10px,env(safe-area-inset-bottom));grid-template-columns:42px minmax(0,1fr) 42px}.fnos-viewer-nav{width:38px;height:52px;font-size:34px}.fnos-viewer-toolbar{grid-template-columns:1fr auto}.fnos-viewer-toolbar>span{grid-column:2;grid-row:1}.fnos-viewer-controls{grid-column:1/-1;justify-self:center}.fnos-viewer-media img,.fnos-viewer-media video{max-height:calc(100dvh - 205px)}}
@media(max-width:580px){.fnos-gallery-shell{padding-left:14px;padding-right:14px}.fnos-gallery-actions{display:grid;grid-template-columns:1fr}.gallery-filters{justify-content:space-between}.gallery-filters button{flex:1}.gallery-summary{align-items:flex-start;flex-wrap:wrap}.fnos-gallery-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.fnos-gallery-thumb{border-radius:13px}.fnos-gallery-info strong{font-size:12px}.fnos-gallery-info small{font-size:9px}.fnos-viewer-toolbar>div:first-child{display:none}.fnos-viewer-toolbar{grid-template-columns:1fr}.fnos-viewer-toolbar>span{grid-column:1;grid-row:1;text-align:center}.fnos-viewer-controls{grid-column:1}.fnos-viewer-controls button{height:34px;min-width:34px;padding:0 9px}}
@media(prefers-reduced-motion:reduce){.fnos-viewer[open]{animation:none}.fnos-gallery-thumb img,.fnos-viewer-media{transition:none}}

/* ---- date filter ---- */
.gallery-date-filter { display:flex; gap:.5rem; align-items:center; }
.gallery-date-filter select { appearance:none; -webkit-appearance:none; min-width:120px; height:43px; padding:0 35px 0 15px; border:1px solid var(--line); border-radius:var(--radius-control,13px); background-color:var(--panel); color:var(--text); font-family:inherit; font-size:12px; cursor:pointer; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 13px center; transition:border-color .2s,background-color .2s,box-shadow .2s; }
.gallery-date-filter select:hover:not(:disabled) { border-color:color-mix(in srgb,var(--orange) 55%,var(--line)); background-color:var(--panel2); }
.gallery-date-filter select:focus:not(:disabled) { outline:0; border-color:var(--theme-focus); background-color:var(--theme-surface-soft); box-shadow:0 0 0 3px color-mix(in srgb,var(--theme-focus) 15%,transparent); }
.gallery-date-filter select:disabled { opacity:.4; cursor:not-allowed; }

@media (max-width:640px) {
  .gallery-date-filter { width:100%; }
  .gallery-date-filter select { flex:1; }
}

/* ---- scroll timeline ---- */
.gallery-scroll-timeline { --timeline-progress:0%; position:fixed; z-index:24; top:50%; right:max(18px,env(safe-area-inset-right)); display:grid; grid-template-columns:auto 3px; grid-template-rows:auto auto; column-gap:12px; align-items:center; min-width:132px; padding:14px 14px 14px 16px; border:1px solid rgba(255,255,255,.12); border-radius:16px; background:rgba(14,16,18,.84); color:#fff; box-shadow:0 16px 42px rgba(0,0,0,.28); opacity:0; pointer-events:none; transform:translate3d(12px,-50%,0); transition:opacity .22s ease,transform .22s ease; backdrop-filter:blur(14px); }
.gallery-scroll-timeline.is-visible { opacity:1; transform:translate3d(0,-50%,0); }
.gallery-scroll-timeline>span { grid-column:1; color:var(--orange); font-size:9px; font-weight:700; letter-spacing:2px; }
.gallery-scroll-timeline>strong { grid-column:1; margin-top:3px; white-space:nowrap; font-size:14px; line-height:1.2; }
.gallery-scroll-timeline-track { position:relative; grid-column:2; grid-row:1/3; width:3px; height:48px; border-radius:999px; background:rgba(255,255,255,.15); }
.gallery-scroll-timeline-track i { position:absolute; top:var(--timeline-progress); left:50%; width:9px; height:9px; border:2px solid #fff; border-radius:50%; background:var(--orange); box-shadow:0 0 0 4px rgba(255,106,34,.18); transform:translate(-50%,-50%); transition:top .12s linear; }
@media(max-width:640px){.gallery-scroll-timeline{right:max(8px,env(safe-area-inset-right));min-width:118px;padding:11px 11px 11px 13px;border-radius:13px}.gallery-scroll-timeline>strong{font-size:12px}.gallery-scroll-timeline-track{height:40px}}
@media(prefers-reduced-motion:reduce){.gallery-scroll-timeline,.gallery-scroll-timeline-track i{transition:none}}

/* ---- photo map ---- */
.gallery-view-switch{display:flex;margin-left:auto;padding:3px;border:1px solid var(--line);border-radius:999px;background:var(--panel)}
.gallery-view-switch button{height:32px;padding:0 16px;border:0;border-radius:999px;background:transparent;color:var(--muted);font-size:11px;cursor:pointer}
.gallery-view-switch button.active{background:var(--text);color:var(--black)}
.gallery-map-shell{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:24px;background:var(--panel);box-shadow:0 24px 70px rgba(0,0,0,.12)}
.gallery-map-shell[hidden],.gallery-map-drawer[hidden]{display:none!important}
.gallery-map-topline{display:flex;min-height:66px;align-items:center;justify-content:space-between;gap:18px;padding:12px 18px;border-bottom:1px solid var(--line);background:var(--panel)}
.gallery-map-topline>div{display:grid;gap:3px}.gallery-map-topline strong{font-size:13px}.gallery-map-topline span{color:var(--muted);font-size:10px}.gallery-map-topline .ghost-btn{flex:none;margin:0;padding:8px 14px}
.gallery-map-canvas{width:100%;height:min(70vh,720px);min-height:480px;background:linear-gradient(145deg,#e9e5dc,#d9d6ce)}
.gallery-map-cluster,.gallery-map-marker{display:grid;place-items:center;padding:0;color:#fff;cursor:pointer;font-family:inherit;box-shadow:0 8px 24px rgba(0,0,0,.24);transition:transform .16s ease,filter .16s ease}
.gallery-map-cluster{width:46px;height:46px;border:4px solid rgba(255,255,255,.86);border-radius:50%;background:var(--orange);font-size:12px;font-weight:800}.gallery-map-cluster:hover{transform:scale(1.08);filter:brightness(1.06)}
.gallery-map-marker{position:relative;width:38px;height:38px;border:3px solid #fff;border-radius:50% 50% 50% 0;background:#151719;transform:rotate(-45deg);transform-origin:center;filter:drop-shadow(0 7px 10px rgba(0,0,0,.3))}
.gallery-map-marker:hover{transform:rotate(-45deg) scale(1.08);filter:drop-shadow(0 8px 12px rgba(0,0,0,.38)) brightness(1.06)}
.gallery-map-marker span{width:10px;height:10px;border-radius:50%;background:var(--orange);transform:rotate(45deg)}
.gallery-map-cluster:focus-visible,.gallery-map-marker:focus-visible{outline:3px solid #111;outline-offset:3px}
.gallery-map-hover-preview{position:absolute;z-index:9;width:max-content;max-width:calc(100% - 16px);padding:14px;border:1px solid rgba(255,255,255,.16);border-radius:17px;background:rgba(14,16,18,.96);color:#fff;box-shadow:0 18px 48px rgba(0,0,0,.38);pointer-events:auto;backdrop-filter:blur(16px);animation:gallery-hover-in .14s ease-out}.gallery-map-hover-preview[hidden]{display:none!important}.gallery-map-hover-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:10px}.gallery-map-hover-head strong{font-size:12px;line-height:1;color:#fff}.gallery-map-hover-head span{color:rgba(255,255,255,.55);font-size:10px}.gallery-map-hover-carousel{display:grid;grid-template-columns:30px auto 30px;align-items:center;gap:6px}.gallery-map-hover-carousel.single{grid-template-columns:auto}.gallery-map-hover-viewport{overflow:hidden;border-radius:10px}.gallery-map-hover-track{display:flex;transform:translate3d(0,0,0);transition:transform .28s cubic-bezier(.22,.75,.25,1);will-change:transform}.gallery-map-hover-page{display:grid;grid-auto-flow:column;grid-auto-columns:72px;flex:0 0 100%;gap:8px}.gallery-map-hover-thumb{display:block;width:72px;height:72px;overflow:hidden;padding:0;border:1px solid rgba(255,255,255,.15);border-radius:10px;background:#27292b;cursor:pointer;transition:border-color .18s,transform .18s}.gallery-map-hover-thumb:hover,.gallery-map-hover-thumb:focus-visible{border-color:var(--orange);transform:translateY(-2px);outline:none}.gallery-map-hover-thumb img{display:block;width:100%;height:100%;object-fit:cover}.gallery-map-hover-arrow{display:grid;width:30px;height:44px;place-items:center;padding:0;border:1px solid rgba(255,255,255,.16);border-radius:999px;background:rgba(255,255,255,.07);color:#fff;font-family:inherit;font-size:25px;line-height:1;cursor:pointer}.gallery-map-hover-arrow:hover:not(:disabled){border-color:var(--orange);background:var(--orange)}.gallery-map-hover-arrow:disabled{opacity:.28;cursor:default}
.gallery-map-drawer{position:absolute;z-index:8;top:84px;right:18px;width:min(520px,calc(100% - 36px));max-height:calc(100% - 104px);overflow:auto;padding:28px;border:1px solid rgba(255,255,255,.13);border-radius:20px;background:rgba(14,16,18,.95);color:#fff;box-shadow:0 24px 70px rgba(0,0,0,.42);backdrop-filter:blur(18px);animation:gallery-drawer-in .2s ease-out}
.gallery-map-drawer h3{margin:7px 32px 4px 0;font-size:21px;line-height:1.35}.gallery-map-drawer .eyebrow{color:var(--orange)}
.gallery-map-drawer-close{position:absolute;top:13px;right:13px;display:grid;width:34px;height:34px;place-items:center;border:1px solid rgba(255,255,255,.18);border-radius:50%;background:rgba(255,255,255,.07);color:#fff;font-size:21px;cursor:pointer}
.gallery-map-coordinates,.gallery-map-date{margin:0;color:rgba(255,255,255,.58);font-size:10px}.gallery-map-date{margin-top:5px}
.gallery-map-thumbs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:22px 0}
.gallery-map-thumbs button{aspect-ratio:1;overflow:hidden;padding:0;border:1px solid rgba(255,255,255,.14);border-radius:11px;background:#222;cursor:pointer}.gallery-map-thumbs button:hover{border-color:var(--orange)}.gallery-map-thumbs img{width:100%;height:100%;object-fit:cover}
.gallery-map-drawer .text-link{display:inline-flex;color:#fff;font-size:11px}.gallery-map-drawer .text-link:hover{color:var(--orange)}
@keyframes gallery-drawer-in{from{opacity:0;transform:translateX(12px)}to{opacity:1;transform:none}}
@keyframes gallery-drawer-out{from{opacity:1;transform:none}to{opacity:0;transform:translateX(12px)}}.gallery-map-drawer.is-closing{animation:gallery-drawer-out .18s ease-in both;pointer-events:none}
@keyframes gallery-hover-in{from{opacity:0;transform:translateY(4px) scale(.98)}to{opacity:1;transform:none}}
@media(max-width:640px){.gallery-summary{justify-content:space-between}.gallery-view-switch{margin-left:0}.gallery-view-switch button{padding:0 13px}.gallery-map-shell{border-radius:17px}.gallery-map-topline{min-height:74px;padding:11px 13px}.gallery-map-topline span{max-width:220px}.gallery-map-canvas{height:65dvh;min-height:430px}.gallery-map-drawer{position:absolute;top:auto;right:8px;bottom:8px;width:calc(100% - 16px);max-height:62%;padding:20px;border-radius:17px}.gallery-map-thumbs{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}}
@media(hover:none){.gallery-map-hover-preview{display:none!important}}
@media(prefers-reduced-motion:reduce){.gallery-map-drawer,.gallery-map-hover-preview{animation:none}.gallery-map-cluster,.gallery-map-marker{transition:none}}

/* v7: unclipped hover focus and centered close/navigation glyphs */
.gallery-map-hover-viewport{padding:3px 0;margin:-3px 0}.gallery-map-hover-page{padding:3px 0}.gallery-map-hover-thumb:hover,.gallery-map-hover-thumb:focus-visible{box-shadow:0 0 0 1px var(--orange),0 7px 18px rgba(0,0,0,.28)}
.gallery-map-drawer-close{display:grid;place-items:center;padding:0;font-size:0;line-height:0}.gallery-map-drawer-close:before,.gallery-map-drawer-close:after{content:"";position:absolute;left:50%;top:50%;width:13px;height:2px;border-radius:99px;background:currentColor;transform:translate(-50%,-50%) rotate(45deg)}.gallery-map-drawer-close:after{transform:translate(-50%,-50%) rotate(-45deg)}
.gallery-map-hover-arrow{position:relative;font-size:0;line-height:0}.gallery-map-hover-arrow:before{content:"";position:absolute;left:50%;top:50%;width:9px;height:9px;border-top:2px solid currentColor;border-right:2px solid currentColor}.gallery-map-hover-arrow[data-hover-prev]:before{transform:translate(-35%,-50%) rotate(-135deg)}.gallery-map-hover-arrow[data-hover-next]:before{transform:translate(-65%,-50%) rotate(45deg)}
.fnos-viewer-nav{position:relative;font-size:0;line-height:0}.fnos-viewer-nav:before{content:"";position:absolute;left:50%;top:50%;width:12px;height:12px;border-top:2px solid currentColor;border-right:2px solid currentColor}.fnos-viewer-prev:before{transform:translate(-35%,-50%) rotate(-135deg)}.fnos-viewer-next:before{transform:translate(-65%,-50%) rotate(45deg)}

/* v8: complete photo counts and an in-viewer Web JS location panel */
.gallery-map-cluster{width:auto;min-width:46px;padding:0 10px;font-variant-numeric:tabular-nums;white-space:nowrap}.gallery-map-thumbs button{content-visibility:auto;contain-intrinsic-size:140px}.gallery-map-thumbs button:active{transform:scale(.96)}
.fnos-viewer[open]{transition:grid-template-columns .3s cubic-bezier(.22,.8,.24,1)}.fnos-viewer.location-open[open]{grid-template-columns:58px minmax(0,1fr) 58px minmax(360px,44vw)}.viewer-location-panel{position:relative;grid-column:4;grid-row:1;display:grid;min-width:0;min-height:0;grid-template-rows:auto minmax(0,1fr);overflow:hidden;border:1px solid rgba(255,255,255,.14);border-radius:16px;background:#151719;box-shadow:-18px 0 55px rgba(0,0,0,.28);opacity:0;transform:translateX(18px);transition:opacity .22s ease,transform .28s cubic-bezier(.22,.8,.24,1)}.viewer-location-panel[hidden]{display:none!important}.viewer-location-panel.is-open{opacity:1;transform:none}.viewer-location-panel.is-closing{opacity:0;transform:translateX(16px)}.viewer-location-head{display:flex;min-width:0;align-items:center;justify-content:space-between;gap:16px;padding:16px 17px;border-bottom:1px solid rgba(255,255,255,.1);background:#151719}.viewer-location-copy{display:grid;min-width:0}.viewer-location-copy>span{color:var(--orange);font-size:8px;font-weight:750;letter-spacing:1.5px}.viewer-location-copy>strong{overflow:hidden;color:#fff;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.viewer-location-copy>small{color:rgba(255,255,255,.55);font-size:9px;font-variant-numeric:tabular-nums}.viewer-location-close{position:relative;display:grid;flex:0 0 34px;width:34px;height:34px;place-items:center;padding:0;border:1px solid rgba(255,255,255,.18);border-radius:50%;background:rgba(255,255,255,.06);color:#fff;font-size:0;transition:border-color .18s ease,background-color .18s ease,transform .14s ease}.viewer-location-close:hover{border-color:var(--orange);background:var(--orange)}.viewer-location-close:before,.viewer-location-close:after{content:"";position:absolute;left:50%;top:50%;width:13px;height:2px;border-radius:99px;background:currentColor;transform:translate(-50%,-50%) rotate(45deg)}.viewer-location-close:after{transform:translate(-50%,-50%) rotate(-45deg)}.viewer-location-map{min-width:0;min-height:0;width:100%;height:100%;background:#e2e0da}.viewer-location-status{position:absolute;z-index:2;inset:64px 0 0;display:grid;place-items:center;padding:22px;background:#151719;color:rgba(255,255,255,.62);font-size:12px;text-align:center}.viewer-location-status[hidden]{display:none}.viewer-location-link{border-color:rgba(255,255,255,.2)!important;background:rgba(20,22,24,.75)!important;color:#fff!important}.viewer-location-link:hover:not(:disabled){border-color:var(--orange)!important;background:rgba(20,22,24,.75)!important;color:var(--orange)!important}
@media(max-width:900px){.fnos-viewer.location-open[open]{grid-template-columns:42px minmax(0,1fr) 42px;grid-template-rows:minmax(0,.9fr) minmax(230px,1fr) auto}.fnos-viewer.location-open .fnos-viewer-stage,.fnos-viewer.location-open .fnos-viewer-prev,.fnos-viewer.location-open .fnos-viewer-next{grid-row:1}.fnos-viewer.location-open .viewer-location-panel{grid-column:1/-1;grid-row:2;border-radius:14px}.fnos-viewer.location-open .fnos-viewer-toolbar{grid-column:1/-1;grid-row:3}.viewer-location-head{padding:10px 13px}.viewer-location-status{inset:52px 0 0}}
@media(prefers-reduced-motion:reduce){.fnos-viewer[open],.viewer-location-panel,.viewer-location-close{transition:none}}

/* v9: source-scoped viewer filmstrip and interruption-safe motion */
.fnos-viewer[open]{--viewer-map-width:0px;display:grid;grid-template-columns:58px minmax(0,1fr) 58px var(--viewer-map-width);grid-template-rows:minmax(0,1fr) auto auto;animation:none;transition:grid-template-columns .3s cubic-bezier(.22,.8,.24,1)}
.fnos-viewer.location-open[open]{--viewer-map-width:clamp(360px,44vw,760px);grid-template-columns:58px minmax(0,1fr) 58px var(--viewer-map-width)}
.fnos-viewer-stage{grid-column:2;grid-row:1}.fnos-viewer-prev{grid-column:1;grid-row:1}.fnos-viewer-next{grid-column:3;grid-row:1}
.viewer-filmstrip{grid-column:1/4;grid-row:2;min-width:0;overflow:hidden}
.viewer-filmstrip[hidden]{display:none!important}
.viewer-filmstrip-track{display:flex;max-width:100%;gap:9px;overflow-x:auto;overflow-y:hidden;padding:4px max(4px,calc(50% - 48px));scroll-behavior:smooth;scroll-snap-type:x proximity;scrollbar-width:none;overscroll-behavior-inline:contain}
.viewer-filmstrip-track::-webkit-scrollbar{display:none}
.viewer-filmstrip-thumb{position:relative;display:block;flex:0 0 96px;width:96px;height:72px;overflow:hidden;padding:0;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:#202224;opacity:.62;cursor:pointer;scroll-snap-align:center;content-visibility:auto;contain-intrinsic-size:96px 72px;transition:border-color .18s ease,box-shadow .18s ease,opacity .18s ease,transform .18s ease}
.viewer-filmstrip-thumb:hover,.viewer-filmstrip-thumb:focus-visible{border-color:rgba(255,255,255,.7);opacity:1;transform:translateY(-2px);outline:0}
.viewer-filmstrip-thumb:active{transform:scale(.96)}
.viewer-filmstrip-thumb[aria-current=true]{border-color:var(--orange);box-shadow:0 0 0 2px color-mix(in srgb,var(--orange) 30%,transparent);opacity:1}
.viewer-filmstrip-thumb img{display:block;width:100%;height:100%;object-fit:cover}
.viewer-filmstrip-thumb>span{position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-size:15px;text-shadow:0 2px 6px #000}
.fnos-viewer-toolbar{grid-column:1/4;grid-row:3}
.viewer-location-panel{grid-column:4;grid-row:1/4}
.fnos-viewer-media{transition:transform .16s ease}
.fnos-viewer-media.is-entering>:not([hidden]){animation:viewer-gallery-photo-in .34s cubic-bezier(.22,.8,.24,1) both}
.gallery-map-thumbs.single{grid-template-columns:minmax(0,1fr)}
.gallery-map-thumbs.single button{width:100%;aspect-ratio:4/3}
.gallery-map-thumbs.single img{width:100%;height:100%}
@keyframes viewer-gallery-photo-in{from{opacity:.68;transform:translateY(5px) scale(.992)}to{opacity:1;transform:none}}
@media(max-width:900px){.fnos-viewer[open]{--viewer-map-width:0px;grid-template-columns:42px minmax(0,1fr) 42px;grid-template-rows:minmax(0,1fr) auto auto}.fnos-viewer.location-open[open]{grid-template-columns:42px minmax(0,1fr) 42px;grid-template-rows:minmax(220px,.75fr) minmax(230px,.9fr) auto auto}.fnos-viewer.location-open .viewer-location-panel{grid-column:1/-1;grid-row:2}.fnos-viewer.location-open .viewer-filmstrip{grid-column:1/-1;grid-row:3}.fnos-viewer.location-open .fnos-viewer-toolbar{grid-column:1/-1;grid-row:4}.viewer-filmstrip{grid-column:1/-1}.fnos-viewer-toolbar{grid-column:1/-1}.viewer-filmstrip-thumb{flex-basis:82px;width:82px;height:62px}.viewer-filmstrip-track{padding-left:max(4px,calc(50% - 41px));padding-right:max(4px,calc(50% - 41px))}}
@media(max-width:580px){.viewer-filmstrip-thumb{flex-basis:72px;width:72px;height:54px}.viewer-filmstrip-track{gap:7px;padding-left:max(4px,calc(50% - 36px));padding-right:max(4px,calc(50% - 36px))}}
@media(prefers-reduced-motion:reduce){.fnos-viewer[open],.fnos-viewer-media,.viewer-filmstrip-thumb,.viewer-filmstrip-track{transition:none;scroll-behavior:auto}.fnos-viewer-media.is-entering>:not([hidden]){animation:none}}

/* v10: stable full-screen viewer transitions */
.fnos-viewer{background:transparent}
.fnos-viewer::backdrop{background:#030405;backdrop-filter:none}
.fnos-viewer[open],.fnos-viewer.is-opening,.fnos-viewer.is-closing{animation:none!important}
.fnos-viewer.is-opening>.dialog-close,.fnos-viewer.is-opening>.fnos-viewer-nav,.fnos-viewer.is-opening>.fnos-viewer-stage,.fnos-viewer.is-opening>.viewer-filmstrip,.fnos-viewer.is-opening>.fnos-viewer-toolbar{animation:viewer-content-in .22s cubic-bezier(.22,.8,.24,1) both}
.fnos-viewer.is-closing>.dialog-close,.fnos-viewer.is-closing>.fnos-viewer-nav,.fnos-viewer.is-closing>.fnos-viewer-stage,.fnos-viewer.is-closing>.viewer-filmstrip,.fnos-viewer.is-closing>.fnos-viewer-toolbar{animation:viewer-content-out .18s ease-in both}
@keyframes viewer-content-in{from{opacity:0;transform:translateY(5px) scale(.995)}to{opacity:1;transform:none}}
@keyframes viewer-content-out{from{opacity:1;transform:none}to{opacity:0;transform:translateY(4px) scale(.996)}}
@media(prefers-reduced-motion:reduce){.fnos-viewer.is-opening>:not(.viewer-location-panel),.fnos-viewer.is-closing>:not(.viewer-location-panel){animation:none}}

/* v12: visible keyboard focus */
.gallery-search input:focus{border-color:var(--theme-focus);outline:0;background:var(--theme-surface-soft);box-shadow:0 0 0 3px color-mix(in srgb,var(--theme-focus) 15%,transparent)}

/* v13: cluster-scoped photo detail and large-collection thumbnail rail */
.gallery-map-drawer{width:min(580px,calc(100% - 36px));scrollbar-width:thin}
.gallery-map-photo-meta{display:grid;gap:4px;margin:14px 0 0}
.gallery-map-photo-name,.gallery-map-photo-date{display:block;overflow:hidden;margin:0;color:rgba(255,255,255,.78);font-size:12px;font-weight:650;line-height:1.4;text-overflow:ellipsis;white-space:nowrap}
.gallery-map-preview{display:block;width:100%;aspect-ratio:4/3;overflow:hidden;margin:14px 0 0;padding:0;border:1px solid rgba(255,255,255,.16);border-radius:12px;background:#08090a;cursor:zoom-in;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}
.gallery-map-preview:hover,.gallery-map-preview:focus-visible{border-color:var(--orange);box-shadow:0 0 0 3px color-mix(in srgb,var(--orange) 22%,transparent);outline:0;transform:translateY(-2px)}
.gallery-map-preview:active{transform:scale(.992)}
.gallery-map-preview img{display:block;width:100%;height:100%;object-fit:contain}
.gallery-map-drawer h3{margin-top:0}
.gallery-map-thumbs{display:flex;grid-template-columns:none;gap:9px;max-width:100%;margin:10px 0 18px;overflow-x:auto;overflow-y:hidden;padding:4px 3px 8px;scroll-behavior:smooth;scroll-snap-type:x proximity;scrollbar-width:none;overscroll-behavior-inline:contain}
.gallery-map-thumbs::-webkit-scrollbar{display:none}
.gallery-map-thumbs button,.gallery-map-thumbs.single button{position:relative;display:block;flex:0 0 112px;width:112px;height:84px;aspect-ratio:auto;overflow:hidden;padding:0;border:1px solid rgba(255,255,255,.16);border-radius:9px;background:#222;opacity:.62;cursor:pointer;scroll-snap-align:center;transition:border-color .18s ease,box-shadow .18s ease,opacity .18s ease,transform .18s ease}
.gallery-map-thumbs button:hover,.gallery-map-thumbs button:focus-visible{border-color:rgba(255,255,255,.72);opacity:1;outline:0;transform:translateY(-2px)}
.gallery-map-thumbs button:active{transform:scale(.96)}
.gallery-map-thumbs button[aria-current=true]{border-color:var(--orange);box-shadow:0 0 0 2px color-mix(in srgb,var(--orange) 34%,transparent);opacity:1}
.gallery-map-thumbs img,.gallery-map-thumbs.single img{display:block;width:100%;height:100%;object-fit:cover}
@media(max-width:640px){.gallery-map-drawer{width:calc(100% - 16px)}.gallery-map-preview{margin-top:12px}.gallery-map-thumbs button,.gallery-map-thumbs.single button{flex-basis:92px;width:92px;height:69px}}
@media(prefers-reduced-motion:reduce){.gallery-map-preview,.gallery-map-thumbs,.gallery-map-thumbs button{transition:none;scroll-behavior:auto}}

/* v16: gallery theme integration; viewer, hover cards and timeline stay neutral-dark. */
.fnos-gallery-toolbar h2{font-family:var(--title-font)}
.gallery-search input,.gallery-filters,.gallery-view-switch,.gallery-date-filter select{border-color:var(--theme-border);background:var(--theme-surface-raised);color:var(--theme-text)}
.gallery-search input,.gallery-date-filter select{height:var(--control-height);border-radius:var(--radius-control)}
.gallery-search input:hover,.gallery-date-filter select:hover:not(:disabled){border-color:color-mix(in srgb,var(--theme-accent) 58%,var(--theme-border));background:var(--theme-surface-soft)}
.gallery-search input:focus,.gallery-date-filter select:focus:not(:disabled){border-color:var(--theme-focus);outline:0;background:var(--theme-surface-soft);box-shadow:0 0 0 3px color-mix(in srgb,var(--theme-focus) 15%,transparent)}
.gallery-filters button,.gallery-view-switch button{color:var(--theme-muted)}
.gallery-filters button.active{background:var(--theme-accent);color:var(--theme-on-accent)}
.gallery-view-switch button.active{background:var(--theme-text);color:var(--theme-bg)}
.fnos-gallery-card{color:var(--theme-text)}.fnos-gallery-thumb{border-color:var(--theme-border);border-radius:var(--radius-media);background:var(--theme-surface-raised)}
.gallery-map-shell{border-color:var(--theme-border);border-radius:var(--radius-card);background:var(--theme-surface-raised);box-shadow:var(--shadow-card)}
.gallery-map-topline{border-color:var(--theme-border);background:var(--theme-surface-raised)}
.gallery-map-canvas{background:var(--theme-surface-raised)}
.gallery-map-cluster{background:var(--theme-accent);color:var(--theme-on-accent)}
.gallery-map-marker span{background:var(--theme-accent)}
.gallery-map-cluster:focus-visible,.gallery-map-marker:focus-visible{outline-color:var(--theme-focus)}

/* These overlays deliberately retain a predictable dark media surface. */
.fnos-viewer,.lightbox-dialog,.gallery-map-hover-preview,.gallery-map-drawer,.gallery-scroll-timeline,.viewer-location-panel,.viewer-location-head,.viewer-location-status{--theme-text:#fff;--theme-muted:rgba(255,255,255,.62);--theme-border:rgba(255,255,255,.16);color-scheme:dark}
.gallery-map-hover-preview,.gallery-map-drawer{border-color:var(--theme-border);background:rgba(14,16,18,.96);color:#fff;box-shadow:0 18px 48px rgba(0,0,0,.38)}
.gallery-scroll-timeline{border-color:rgba(255,255,255,.12);background:rgba(14,16,18,.84);color:#fff}

/* v19: keep exit motion complete and reduce off-screen gallery layout work. */
.viewer-location-panel{transition-duration:.2s,.2s}
.gallery-map-drawer{overscroll-behavior:contain}
.gallery-map-drawer.is-closing{animation-duration:.16s}
.fnos-gallery-card{content-visibility:auto;contain-intrinsic-size:300px 270px}
.viewer-location-panel,.viewer-location-head,.viewer-location-status{background:#151719;color:#fff}
.gallery-map-hover-thumb:hover,.gallery-map-hover-thumb:focus-visible,.gallery-map-preview:hover,.gallery-map-preview:focus-visible,.gallery-map-thumbs button[aria-current="true"],.viewer-filmstrip-thumb[aria-current="true"]{border-color:var(--theme-accent)}

/* JavaScript reads the root-level --map-*-fill/stroke tokens when creating AMap polygons. */
html.theme-transitioning :is(.fnos-gallery-thumb,.gallery-filters,.gallery-view-switch,.gallery-map-shell,.gallery-map-topline),html[data-theme-transitioning="true"] :is(.fnos-gallery-thumb,.gallery-filters,.gallery-view-switch,.gallery-map-shell,.gallery-map-topline){transition:color .32s ease,background-color .32s ease,border-color .32s ease,box-shadow .32s ease}
@media(prefers-reduced-motion:reduce){html.theme-transitioning .fnos-gallery-shell *,html[data-theme-transitioning="true"] .fnos-gallery-shell *{transition:none!important}}

/* v20: Apple Live Photo pairing and playback. */
.gallery-live-badge{position:absolute;top:11px;left:11px;display:inline-flex;align-items:center;min-height:25px;padding:0 9px;border:1px solid rgba(255,255,255,.42);border-radius:999px;background:rgba(8,10,12,.64);color:#fff;font-size:9px;font-weight:800;letter-spacing:.8px;line-height:1;box-shadow:0 7px 18px rgba(0,0,0,.2);backdrop-filter:blur(9px)}
.fnos-viewer-stage{position:relative}
.fnos-viewer-media{position:relative}
.fnos-viewer-media>img,.fnos-viewer-media>video{grid-area:1/1}
.fnos-viewer-media>video.live-buffering{position:absolute;inset:0;opacity:0;pointer-events:none}
.live-photo-toggle{position:absolute;z-index:3;top:12px;left:12px;display:inline-flex;min-height:38px;align-items:center;gap:7px;padding:0 13px;border:1px solid rgba(255,255,255,.28);border-radius:999px;background:rgba(12,14,16,.7);color:#fff;font-family:inherit;cursor:pointer;box-shadow:0 9px 28px rgba(0,0,0,.24);backdrop-filter:blur(12px);transition:color .18s ease,background-color .18s ease,border-color .18s ease,opacity .18s ease,transform .16s ease,box-shadow .2s ease}
.live-photo-toggle[hidden]{display:none!important}
.live-photo-toggle>span{color:var(--orange);font-size:14px;line-height:1}
.live-photo-toggle>b{font-size:10px;font-weight:750;letter-spacing:.3px;white-space:nowrap}
.live-photo-toggle:hover:not(:disabled),.live-photo-toggle[aria-pressed=true]{border-color:var(--orange);background:var(--orange);color:#fff;box-shadow:0 10px 30px color-mix(in srgb,var(--orange) 28%,transparent)}
.live-photo-toggle:hover:not(:disabled)>span,.live-photo-toggle[aria-pressed=true]>span{color:#fff}
.live-photo-toggle:active:not(:disabled){transform:scale(.96)}
.live-photo-toggle:disabled{cursor:wait;opacity:.7}
.fnos-viewer-media.is-live-switching>:not([hidden]){animation:live-photo-switch .26s cubic-bezier(.22,.8,.24,1) both}
.viewer-filmstrip-thumb>.viewer-filmstrip-live{inset:auto auto 5px 5px;display:block;width:auto;height:auto;padding:3px 5px;border-radius:999px;background:rgba(8,10,12,.68);font-size:7px;font-weight:800;letter-spacing:.5px;line-height:1;text-shadow:none;backdrop-filter:blur(5px)}
@keyframes live-photo-switch{from{opacity:.35;transform:scale(.994)}to{opacity:1;transform:none}}
@media(max-width:580px){.gallery-live-badge{top:8px;left:8px;min-height:21px;padding:0 7px;font-size:8px}.live-photo-toggle{top:8px;left:8px;min-height:34px;padding:0 10px}.live-photo-toggle>b{font-size:9px}}
@media(prefers-reduced-motion:reduce){.live-photo-toggle,.fnos-viewer-media.is-live-switching>:not([hidden]){transition:none;animation:none}}

/* Keep a standalone video's poster, playback surface and native controls in one stable frame. */
.fnos-viewer-media.is-video{min-width:0;min-height:0;touch-action:manipulation}
.fnos-viewer-media.is-video>video{width:100%;height:100%;max-width:none;max-height:none;object-fit:contain;pointer-events:auto;touch-action:manipulation}

/* v18: unified converted previews, live-photo crossfade and action toolbar */
.fnos-viewer-center{display:grid;justify-items:center;gap:6px;min-width:116px}
.viewer-zoom-controls{display:flex;gap:6px}
.viewer-zoom-controls button{display:grid;min-width:36px;height:34px;place-items:center;padding:0 9px;border:1px solid rgba(255,255,255,.2);border-radius:999px;background:rgba(20,22,24,.75);color:#fff}
.viewer-action-controls{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}
.viewer-action-controls .ghost-btn{display:inline-flex;min-width:100px;height:38px;align-items:center;justify-content:center;gap:7px;padding:0 13px!important;border:1px solid rgba(255,255,255,.2)!important;border-radius:999px;background:rgba(20,22,24,.75)!important;color:#fff!important;text-decoration:none;white-space:nowrap}
.viewer-action-controls .ghost-btn>span{display:grid;width:15px;height:15px;place-items:center;color:inherit;font-size:14px;line-height:1}
.viewer-action-controls .ghost-btn>b{font:inherit}
.viewer-action-controls .live-photo-toggle{position:relative;z-index:auto;top:auto;left:auto;min-height:0;box-shadow:none;backdrop-filter:none}
.viewer-action-controls .ghost-btn:hover:not(:disabled),.viewer-action-controls .live-photo-toggle[aria-pressed=true]{border-color:var(--orange)!important;background:var(--orange)!important;color:var(--theme-on-accent,#fff)!important;box-shadow:none}
.viewer-action-controls [hidden]{display:none!important}
.fnos-viewer-media>img,.fnos-viewer-media>video{grid-area:1/1;opacity:1;transition:opacity .22s ease}
.fnos-viewer-media.is-live-loading>video{opacity:0;pointer-events:none}
.fnos-viewer-media.is-live-playing>img{opacity:0;pointer-events:none}
.fnos-viewer-media.is-live-playing>video{opacity:1}
.item-photo-viewer .lightbox-image-surface>img,.item-photo-viewer .lightbox-image-surface>video{grid-area:1/1;display:block;width:100%;height:100%;max-width:none;max-height:none;object-fit:contain;border-radius:10px}
.item-photo-viewer .lightbox-image-surface>video{pointer-events:auto}
.item-photo-viewer .lightbox-image-surface>video[hidden]{display:none}
.item-photo-viewer .lightbox-image-surface.is-live-loading>video{display:block;opacity:0}
.item-photo-viewer .lightbox-image-surface.is-live-playing>img{opacity:0}
.item-photo-viewer .lightbox-image-surface.is-live-playing>video{display:block;opacity:1}
.item-photo-viewer .fnos-viewer-toolbar>div:first-child{display:grid;min-width:0}
.item-photo-viewer .fnos-viewer-toolbar strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item-photo-viewer .fnos-viewer-toolbar{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}
.item-photo-viewer .fnos-viewer-controls{justify-self:end}
.viewer-download-link{cursor:pointer}
@media(max-width:900px){.fnos-viewer-toolbar,.item-photo-viewer .fnos-viewer-toolbar{grid-template-columns:1fr auto}.fnos-viewer-center{grid-column:2;grid-row:1}.viewer-action-controls{grid-column:1/-1;justify-self:center}.item-photo-viewer .fnos-viewer-toolbar>div:first-child{grid-column:1;grid-row:1}}
@media(max-width:580px){.fnos-viewer-toolbar,.item-photo-viewer .fnos-viewer-toolbar{grid-template-columns:1fr}.fnos-viewer-center{grid-column:1;grid-row:1}.fnos-viewer-toolbar>div:first-child,.item-photo-viewer .fnos-viewer-toolbar>div:first-child{display:none}.viewer-action-controls{grid-column:1}.viewer-action-controls .ghost-btn{min-width:0;height:34px;padding:0 10px!important}.viewer-action-controls .ghost-btn>b{font-size:10px}.viewer-zoom-controls button{height:31px;min-width:33px}}
@media(prefers-reduced-motion:reduce){.fnos-viewer-media>img,.fnos-viewer-media>video{transition:none}}

/* Shared gallery controls keep a usable minimum curve, even in a square custom theme. */
.fnos-gallery-shell{--gallery-control-radius:max(8px,var(--radius-control));--gallery-option-radius:max(6px,calc(var(--gallery-control-radius) - 4px))}
.fnos-gallery-shell :is(.gallery-search input,.gallery-filters,.gallery-date-filter select,.gallery-date-filter .styled-control-trigger,.gallery-date-filter .styled-control-popup,.gallery-view-switch){border-radius:var(--gallery-control-radius)}
.fnos-gallery-shell :is(.gallery-filters button,.gallery-date-filter .styled-select-option,.gallery-view-switch button){border-radius:var(--gallery-option-radius)}
button.fnos-gallery-card[data-reveal]{transition:color .28s ease,background-color .28s ease,border-color .28s ease,box-shadow .32s ease,opacity .75s cubic-bezier(.2,.7,.2,1),transform .75s cubic-bezier(.2,.7,.2,1)}

/* Both record and album viewers can still pan zoomed media without showing scrollbars. */
.fnos-viewer-stage{scrollbar-width:none}
.fnos-viewer-stage::-webkit-scrollbar{display:none;width:0;height:0}
