.abstract-gallery-page { overflow:hidden; }
.abstract-gallery { position:relative; z-index:8; width:100%; height:100svh; min-height:620px; display:flex; flex-direction:column; align-items:center; justify-content:center; box-sizing:border-box; padding:96px 4vw 42px; }
.abstract-gallery-title { position:absolute; top:136px; left:5.2vw; margin:0; color:#f0eeea; font-size:18px; line-height:1; font-weight:400; letter-spacing:.25em; white-space:nowrap; }
.abstract-gallery-title::after { content:""; display:block; width:88px; height:1px; margin-top:24px; background:rgba(240,238,234,.52); }
.gallery-stage { position:relative; width:min(1500px,100%); height:calc(100svh - 180px); min-height:430px; display:flex; align-items:center; justify-content:center; overflow:visible; }
.gallery-ghost-layer { position:absolute; inset:-6% 0 -12%; overflow:hidden; z-index:2; pointer-events:none; }
.gallery-ghost { position:absolute; left:var(--ghost-x); bottom:-18%; width:min(13vw,190px); max-height:34%; transform:translateX(-50%) scale(calc(var(--ghost-scale) * 1.5)) rotate(var(--ghost-rotate)); opacity:0; filter:grayscale(1) contrast(.82) brightness(.72) blur(1.05px); mix-blend-mode:screen; animation:ghostRise var(--ghost-duration) linear var(--ghost-delay) infinite; transform-origin:center bottom; }
.gallery-ghost img { display:block; width:100%; height:auto; max-height:100%; object-fit:contain; opacity:calc(var(--ghost-opacity) * 1.1); filter:grayscale(1); }
@keyframes ghostRise {
  0% { transform:translate3d(calc(-50% + var(--ghost-drift)), 12%, 0) scale(calc(var(--ghost-scale) * 1.18)) rotate(var(--ghost-rotate)); opacity:0; }
  10% { opacity:calc(var(--ghost-opacity) * 1.1); }
  25% { transform:translate3d(calc(-50% - var(--ghost-drift)), -48%, 0) scale(calc(var(--ghost-scale) * 1.12)) rotate(calc(var(--ghost-rotate) * -1.4)); opacity:calc(var(--ghost-opacity) * 1.02); }
  42% { transform:translate3d(calc(-50% + var(--ghost-drift)), -105%, 0) scale(var(--ghost-scale)) rotate(var(--ghost-rotate)); opacity:calc(var(--ghost-opacity) * .88); }
  60% { transform:translate3d(calc(-50% - var(--ghost-drift)), -160%, 0) scale(calc(var(--ghost-scale) * .86)) rotate(calc(var(--ghost-rotate) * -1.2)); opacity:calc(var(--ghost-opacity) * .62); }
  78% { transform:translate3d(calc(-50% + var(--ghost-drift)), -210%, 0) scale(calc(var(--ghost-scale) * .70)) rotate(var(--ghost-rotate)); opacity:calc(var(--ghost-opacity) * .32); }
  100% { transform:translate3d(calc(-50% - var(--ghost-drift)), -255%, 0) scale(calc(var(--ghost-scale) * .56)) rotate(calc(var(--ghost-rotate) * -1)); opacity:0; }
}
.gallery-main-wrap { position:relative; z-index:40; flex:0 0 auto; display:block; width:var(--gallery-slot-width, 720px); height:var(--gallery-slot-height, 650px); transform:translateY(-1.5%); transition:opacity 360ms ease; filter:drop-shadow(0 22px 42px rgba(0,0,0,.48)); }
.gallery-main-frame { position:absolute; left:50%; top:50%; width:var(--frame-width,100%); height:var(--frame-height,100%); transform:translate(-50%,-50%) translateZ(0); }
.gallery-main-wrap.is-changing { opacity:1; }
.gallery-main-wrap.no-transition { transition:none !important; }
.gallery-main-frame { background:#111; overflow:visible; box-shadow:0 22px 58px rgba(0,0,0,.55), 0 3px 0 rgba(255,255,255,.06) inset; }
.gallery-main-frame::after { display:none !important; }
.gallery-main-image { display:block; width:100%; height:100%; object-fit:fill; background:#0d0d0d; user-select:none; pointer-events:none; image-rendering:auto; position:relative; z-index:1; }
.gallery-main-image.incoming { position:absolute; inset:0; z-index:2; opacity:0; transform:translateX(0); }
.gallery-main-image.slide-in-next { animation:gallerySlideInNext 480ms cubic-bezier(.22,.72,.22,1) forwards; }
.gallery-main-image.slide-in-prev { animation:gallerySlideInPrev 480ms cubic-bezier(.22,.72,.22,1) forwards; }
.gallery-main-image.slide-out-next { animation:gallerySlideOutNext 480ms cubic-bezier(.22,.72,.22,1) forwards; }
.gallery-main-image.slide-out-prev { animation:gallerySlideOutPrev 480ms cubic-bezier(.22,.72,.22,1) forwards; }
@keyframes gallerySlideInNext { from { opacity:0; transform:translateX(58px); } to { opacity:1; transform:translateX(0); } }
@keyframes gallerySlideInPrev { from { opacity:0; transform:translateX(-58px); } to { opacity:1; transform:translateX(0); } }
@keyframes gallerySlideOutNext { from { opacity:1; transform:translateX(0); } to { opacity:.35; transform:translateX(-22px); } }
@keyframes gallerySlideOutPrev { from { opacity:1; transform:translateX(0); } to { opacity:.35; transform:translateX(22px); } }
.gallery-arrow { position:absolute; top:calc(50% + var(--gallery-main-half, 260px) + 42px); z-index:60; width:38px; height:38px; padding:0; border:0; background:transparent; color:rgba(240,238,234,.9); font-family:Arial,sans-serif; font-size:30px; font-weight:200; line-height:1; cursor:pointer; transform:translateY(-50%); transition:opacity 350ms ease,transform 350ms cubic-bezier(.2,.72,.2,1); }
.gallery-arrow:hover,.gallery-arrow:focus-visible { opacity:1; transform:translateY(-50%) scale(1.1); }
.gallery-arrow-left { left:calc(50% - 92px); }.gallery-arrow-right{right:calc(50% - 92px);}
.gallery-meta { position:absolute; top:calc(50% + var(--gallery-main-half, 260px) + 42px); bottom:auto; left:50%; transform:translate(-50%,-50%); color:rgba(240,238,234,.78); font-size:11px; letter-spacing:.28em; font-weight:400; white-space:nowrap; z-index:61; }
.gallery-slash{margin:0 9px;opacity:.45;}
@media (max-width:1100px){.abstract-gallery-title{top:126px;left:5vw;font-size:16px}.gallery-stage{height:59vh}.gallery-arrow,.gallery-meta{top:calc(50% + var(--gallery-main-half, 230px) + 36px)}}
@media (max-width:700px){.abstract-gallery{min-height:580px;padding-top:110px;padding-bottom:62px}.abstract-gallery-title{top:112px;left:50%;transform:translateX(-50%);font-size:13px;letter-spacing:.18em}.abstract-gallery-title::after{margin:17px auto 0;width:70px}.gallery-stage{height:52vh;min-height:330px}.gallery-ghost{width:23vw;max-height:28%;}.gallery-arrow{top:calc(50% + var(--gallery-main-half, 170px) + 28px);width:34px;height:34px;font-size:30px}.gallery-arrow-left{left:calc(50% - 76px)}.gallery-arrow-right{right:calc(50% - 76px)}.gallery-meta{top:calc(50% + var(--gallery-main-half, 170px) + 28px);font-size:10px}}
@media (max-width:480px){.gallery-stage{min-height:290px}.gallery-ghost{width:28vw}}
html.grav-incoming-graphics body.abstract-gallery-page>*:not(.page-transition), html.grav-incoming-graphics body.photo-collage-gallery-page>*:not(.page-transition){opacity:0;animation:gravAbstractGalleryReveal 1000ms cubic-bezier(.22,.72,.22,1) forwards}html.grav-incoming-graphics body.abstract-gallery-page .page-transition, html.grav-incoming-graphics body.photo-collage-gallery-page .page-transition{opacity:1;visibility:visible;background:#000}@keyframes gravAbstractGalleryReveal{from{opacity:0}to{opacity:1}}

/* V54: controls stay anchored near the bottom of the viewport, independent of artwork aspect ratio. */
.gallery-controls {
  position:absolute;
  z-index:70;
  left:0;
  right:0;
  bottom:15px;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:42px;
  width:100%;
  height:42px;
  margin:0;
  pointer-events:none;
}
.gallery-controls .gallery-arrow {
  position:relative;
  inset:auto;
  top:auto; left:auto; right:auto;
  width:30px;
  height:38px;
  padding:0;
  transform:none;
  flex:0 0 30px;
  pointer-events:auto;
}
.gallery-controls .gallery-arrow:hover,
.gallery-controls .gallery-arrow:focus-visible { transform:scale(1.1); }
.gallery-controls .gallery-meta {
  position:relative;
  inset:auto;
  left:auto; top:auto; bottom:auto;
  transform:none;
  z-index:71;
  flex:0 0 auto;
}
@media (min-width:701px){
  .gallery-stage { height:calc(100svh - 180px); min-height:500px; }
}
@media (max-width:1100px){
  .abstract-gallery-title{top:126px;left:5vw;font-size:16px}
  .gallery-stage{height:calc(100svh - 175px)}
}
@media (max-width:700px){
  .abstract-gallery{min-height:580px;padding-top:110px;padding-bottom:30px}
  .abstract-gallery-title{top:112px;left:50%;transform:translateX(-50%);font-size:13px;letter-spacing:.18em}
  .abstract-gallery-title::after{margin:17px auto 0;width:70px}
  .gallery-stage{height:calc(100svh - 155px);min-height:350px}
  .gallery-ghost{width:23vw;max-height:28%;}
  .gallery-controls{bottom:15px;gap:30px;height:38px}
  .gallery-controls .gallery-arrow{width:28px;height:34px;font-size:30px}
  .gallery-meta{font-size:10px}
}
@media (max-width:480px){.gallery-stage{min-height:310px}.gallery-ghost{width:28vw}}

/* V56: viewport-anchored controls and frame-to-frame slide without aspect-ratio deformation. */
.gallery-controls {
  position:fixed;
  left:0;
  right:0;
  bottom:15px;
  width:100%;
  height:38px;
  margin:0;
  z-index:100;
}
.gallery-main-frame.incoming-frame {
  z-index:3;
}
.gallery-main-frame.slide-out-next {
  animation:galleryFrameOutNext 480ms cubic-bezier(.22,.72,.22,1) forwards;
}
.gallery-main-frame.slide-out-prev {
  animation:galleryFrameOutPrev 480ms cubic-bezier(.22,.72,.22,1) forwards;
}
.gallery-main-frame.incoming-frame.slide-in-next {
  animation:galleryFrameInNext 480ms cubic-bezier(.22,.72,.22,1) forwards;
}
.gallery-main-frame.incoming-frame.slide-in-prev {
  animation:galleryFrameInPrev 480ms cubic-bezier(.22,.72,.22,1) forwards;
}
@keyframes galleryFrameInNext {
  from { opacity:0; transform:translate(-50%,-50%) translateX(58px); }
  to   { opacity:1; transform:translate(-50%,-50%) translateX(0); }
}
@keyframes galleryFrameInPrev {
  from { opacity:0; transform:translate(-50%,-50%) translateX(-58px); }
  to   { opacity:1; transform:translate(-50%,-50%) translateX(0); }
}
@keyframes galleryFrameOutNext {
  from { opacity:1; transform:translate(-50%,-50%) translateX(0); }
  to   { opacity:.35; transform:translate(-50%,-50%) translateX(-22px); }
}
@keyframes galleryFrameOutPrev {
  from { opacity:1; transform:translate(-50%,-50%) translateX(0); }
  to   { opacity:.35; transform:translate(-50%,-50%) translateX(22px); }
}
@media (max-width:700px){
  .gallery-controls { bottom:15px; height:36px; }
}


/* V57: gallery slide + direct navigation tools */
.gallery-tools {
  position:fixed;
  left:50%;
  bottom:58px;
  transform:translateX(-50%);
  z-index:100;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:18px;
  min-height:30px;
  color:rgba(240,238,234,.78);
  font-size:9px;
  letter-spacing:.18em;
  white-space:nowrap;
}
.gallery-tool-group,
.gallery-goto-group { display:flex; align-items:center; gap:9px; }
.gallery-tool-divider { width:1px; height:17px; background:rgba(240,238,234,.18); margin:0 2px; }
.gallery-tool-button {
  appearance:none;
  border:1px solid rgba(240,238,234,.38);
  background:rgba(0,0,0,.18);
  color:rgba(240,238,234,.82);
  height:25px;
  min-width:52px;
  padding:0 9px;
  font:inherit;
  letter-spacing:.16em;
  cursor:pointer;
  transition:background 220ms ease,border-color 220ms ease,color 220ms ease;
}
.gallery-tool-button:hover,
.gallery-tool-button:focus-visible { border-color:rgba(240,238,234,.72); color:#fff; outline:none; }
.gallery-tool-button.is-active { background:rgba(240,238,234,.15); border-color:rgba(240,238,234,.8); color:#fff; }
.gallery-tool-label { opacity:.68; }
.gallery-tool-field { display:flex; align-items:center; gap:7px; }
.gallery-tool-field select,
.gallery-goto-group input {
  appearance:none;
  box-sizing:border-box;
  height:25px;
  border:1px solid rgba(240,238,234,.28);
  background:rgba(0,0,0,.24);
  color:rgba(240,238,234,.9);
  font:inherit;
  letter-spacing:.12em;
  text-align:center;
  outline:none;
}
.gallery-tool-field select { width:51px; padding:0 4px; }
.gallery-goto-group input { width:48px; padding:0 5px; }
.gallery-tool-field select:focus,
.gallery-goto-group input:focus { border-color:rgba(240,238,234,.72); }
.gallery-goto-button { min-width:38px; padding:0 7px; }
@media (max-width:700px) {
  .gallery-tools { bottom:55px; gap:10px; font-size:8px; letter-spacing:.13em; }
  .gallery-tool-divider { margin:0; }
  .gallery-tool-group,.gallery-goto-group { gap:6px; }
  .gallery-tool-button { min-width:47px; height:24px; padding:0 7px; }
  .gallery-tool-field select { width:46px; }
  .gallery-goto-group input { width:43px; }
}
@media (max-width:420px) {
  .gallery-tools { gap:7px; transform:translateX(-50%) scale(.92); transform-origin:center bottom; }
}


/* V58: slideshow/direct navigation controls. The controls are viewport-anchored
   so artwork aspect-ratio changes cannot move them. */
.gallery-tools { bottom:58px; }
.gallery-tool-button { border-radius:0; }
@media (max-width:700px){ .gallery-tools { bottom:55px; } }


/* V79: shared gallery controls stay together; pointer movement wakes the full control row. */
.gallery-main-frame.slide-out-next,
.gallery-main-frame.slide-out-prev {
  animation-duration: 300ms;
  animation-timing-function: cubic-bezier(.22,.72,.22,1);
}
.gallery-main-frame.incoming-frame.slide-in-next,
.gallery-main-frame.incoming-frame.slide-in-prev {
  animation-duration: 440ms;
  animation-timing-function: cubic-bezier(.22,.72,.22,1);
}
@keyframes galleryFrameOutNext {
  from { opacity:1; transform:translate(-50%,-50%) translateX(0); }
  to   { opacity:0; transform:translate(-50%,-50%) translateX(-22px); }
}
@keyframes galleryFrameOutPrev {
  from { opacity:1; transform:translate(-50%,-50%) translateX(0); }
  to   { opacity:0; transform:translate(-50%,-50%) translateX(22px); }
}
.gallery-controls,
.gallery-tools {
  opacity:.21;
  transition:opacity 260ms ease;
}
.gallery-controls.controls-attention,
.gallery-tools.controls-attention {
  opacity:1;
}
.gallery-controls .gallery-arrow:hover,
.gallery-controls .gallery-arrow:focus-visible { opacity:1; }

/* The slideshow toggle is deliberately outline-only: no filled button state. */
.gallery-slide-button,
.gallery-slide-button.is-active {
  background:transparent;
  color:rgba(240,238,234,.82);
  border-color:rgba(240,238,234,.38);
}
.gallery-slide-button:hover,
.gallery-slide-button:focus-visible {
  background:transparent;
  border-color:rgba(240,238,234,.72);
  color:#fff;
}

/* V64: custom TIME menu. Native select menus keep OS/browser hover colors,
   so the interval picker is rendered as a controlled custom list. */
.gallery-time-picker { position:relative; width:51px; }
.gallery-time-button {
  appearance:none;
  box-sizing:border-box;
  width:51px;
  height:25px;
  padding:0 4px;
  border:1px solid rgba(240,238,234,.28);
  background:#0b0b0b;
  color:rgba(240,238,234,.9);
  font:inherit;
  letter-spacing:.12em;
  text-align:center;
  cursor:pointer;
  outline:none;
}
.gallery-time-button:hover,
.gallery-time-button:focus-visible { border-color:rgba(240,238,234,.72); color:#fff; }
.gallery-time-menu {
  position:absolute;
  left:0;
  bottom:calc(100% + 1px);
  width:51px;
  padding:0;
  background:#0b0b0b;
  border:1px solid rgba(240,238,234,.35);
  box-sizing:border-box;
  display:none;
  z-index:300;
}
.gallery-time-picker.is-open .gallery-time-menu { display:block; }
.gallery-time-menu button {
  display:block;
  width:100%;
  height:24px;
  padding:0;
  border:0;
  background:#0b0b0b;
  color:#f0eeea;
  font:inherit;
  letter-spacing:.12em;
  text-align:center;
  cursor:pointer;
}
.gallery-time-menu button:hover,
.gallery-time-menu button:focus-visible {
  background:#a6a6a6;
  color:#050505;
  outline:none;
}
.gallery-time-menu button.is-selected,
.gallery-time-menu button[aria-selected="true"] {
  background:#777;
  color:#050505;
}
.gallery-time-menu button.is-selected:hover,
.gallery-time-menu button[aria-selected="true"]:hover {
  background:#777;
  color:#050505;
}
@media (max-width:700px) {
  .gallery-time-picker, .gallery-time-button, .gallery-time-menu { width:46px; }
}

/* V87: first-entry context panel for Abstract Graphics. */
.abstract-intro-overlay {
  position:fixed;
  inset:0;
  z-index:200;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:30px;
  background:rgba(0,0,0,.30);
  backdrop-filter:blur(30px);
  -webkit-backdrop-filter:blur(30px);
  opacity:1;
  visibility:visible;
}
.abstract-intro-overlay.is-hidden {
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity 240ms ease, visibility 0s linear 240ms;
}
.abstract-intro-box {
  width:min(980px, calc(100vw - 80px));
  min-height:390px;
  box-sizing:border-box;
  padding:58px 76px 48px;
  border:4px solid rgba(240,238,234,.18);
  border-radius:24px;
  background:rgba(7,7,7,.94);
  box-shadow:0 28px 80px rgba(0,0,0,.62), 0 0 0 1px rgba(255,255,255,.035) inset;
  color:rgba(240,238,234,.9);
  text-align:left;
}
.abstract-intro-box h2 {
  margin:0 0 30px;
  font-size:18px;
  line-height:1.25;
  font-weight:500;
  letter-spacing:.25em;
  color:rgba(240,238,234,.96);
}
.abstract-intro-box p {
  margin:0;
  max-width:820px;
  font-size:15px;
  line-height:1.85;
  font-weight:400;
  letter-spacing:.025em;
  color:rgba(220,218,214,.88);
}
.abstract-intro-actions {
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:18px;
  margin-top:44px;
  flex-wrap:nowrap;
  width:100%;
}
.abstract-intro-ok {
  min-width:74px;
  height:34px;
  padding:0 18px;
  border:1px solid rgba(240,238,234,.4);
  border-radius:0;
  background:transparent;
  color:rgba(240,238,234,.9);
  font:400 11px/1 Arial,sans-serif;
  letter-spacing:.18em;
  cursor:pointer;
  transition:border-color 180ms ease, background 180ms ease, color 180ms ease;
}
.abstract-intro-ok:hover,
.abstract-intro-ok:focus-visible {
  border-color:rgba(240,238,234,.8);
  background:rgba(240,238,234,.1);
  color:#fff;
  outline:none;
}
.abstract-intro-check {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:9px;
  color:rgba(210,208,204,.68);
  font-size:11px;
  line-height:1.4;
  letter-spacing:.03em;
  cursor:pointer;
  user-select:none;
}
.abstract-intro-check input {
  appearance:none;
  -webkit-appearance:none;
  width:14px;
  height:14px;
  margin:0;
  border:1px solid rgba(240,238,234,.45);
  background:transparent;
  cursor:pointer;
  position:relative;
}
.abstract-intro-check input:checked::after {
  content:'✓';
  position:absolute;
  inset:0;
  display:flex;
  align-items:center;
  justify-content:center;
  color:rgba(240,238,234,.95);
  font-size:11px;
}
@media (max-width:700px) {
  .abstract-intro-overlay { padding:18px; }
  .abstract-intro-box {
    width:calc(100vw - 36px);
    min-height:0;
    padding:36px 28px 32px;
    border-radius:18px;
  }
  .abstract-intro-box h2 { font-size:14px; margin-bottom:22px; letter-spacing:.18em; }
  .abstract-intro-box p { font-size:13px; line-height:1.72; }
  .abstract-intro-actions { margin-top:30px; gap:18px; }
}

.abstract-intro-open { overflow:hidden; }

/* Shared WORKS particle canvas */
#worksParticles {
  position: fixed;
  z-index: 6;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

/* V201 — galleries on phones and short (landscape) screens.
   Title sits just under the header, the artwork gets exactly the space
   between the title and the bottom controls (JS reads the stage box), and
   nothing overlaps. Intro windows always fit the screen: the text scrolls
   inside the window and the OK button stays visible. */
@media (max-width:700px), (max-height:520px) and (orientation:landscape) {
  .abstract-gallery {
    height:100svh; min-height:0;
    padding:var(--g-top,108px) 0 var(--g-bottom,94px);
    justify-content:flex-start; align-items:stretch;
  }
  .gallery-stage { flex:1 1 auto; width:100%; height:auto; min-height:0; }
  .gallery-main-wrap { transform:none; }
  .abstract-gallery-title {
    top:70px; left:50%; transform:translateX(-50%);
    font-size:min(12px, 4.3vw); letter-spacing:.16em; white-space:nowrap;
  }
  .abstract-gallery-title::after { margin:12px auto 0; width:60px; }
  .gallery-tools { max-width:none; }
}
@media (max-width:380px) {
  .gallery-tools { transform:translateX(-50%) scale(.84); transform-origin:center bottom; }
}
@media (max-width:300px) {
  .gallery-tools { transform:translateX(-50%) scale(.74); }
  .gallery-controls { gap:22px; }
}
/* Landscape phones: title smaller, controls and tools share one bottom row. */
@media (max-height:520px) and (orientation:landscape) {
  .abstract-gallery { --g-top:80px; --g-bottom:54px; }
  .abstract-gallery-title { top:62px; font-size:10px; }
  .abstract-gallery-title::after { display:none; }
  .gallery-controls { left:3vw; right:auto; width:auto; bottom:8px; justify-content:flex-start; gap:22px; }
  .gallery-tools { left:auto; right:3vw; bottom:12px; transform:none; transform-origin:right bottom; }
}

/* Intro windows */
.abstract-intro-overlay { overflow:hidden; }
@media (max-width:700px), (max-height:620px) {
  .abstract-intro-overlay { padding:14px; }
  .abstract-intro-box {
    display:flex; flex-direction:column;
    width:min(560px, calc(100vw - 28px));
    min-height:0;
    max-height:calc(100svh - 28px);
    padding:26px 20px 18px;
    border-width:2px;
    border-radius:16px;
  }
  .abstract-intro-box h2 { flex:0 0 auto; font-size:12px; margin-bottom:14px; letter-spacing:.16em; line-height:1.4; }
  .abstract-intro-box p {
    flex:1 1 auto; min-height:0; overflow-y:auto; overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
    font-size:13px; line-height:1.65; padding-right:4px;
    -webkit-mask-image:linear-gradient(180deg,#000 calc(100% - 22px),transparent);
            mask-image:linear-gradient(180deg,#000 calc(100% - 22px),transparent);
    padding-bottom:16px;
  }
  .abstract-intro-actions { flex:0 0 auto; margin-top:14px; gap:12px; }
  .abstract-intro-ok { height:36px; min-width:96px; }
}
@media (max-height:520px) and (min-width:500px) {
  .abstract-intro-actions { flex-direction:row; gap:22px; }
}
/* Long painting titles (FI / NL / SV / FR) wrap to two centred lines. */
@media (max-width:480px){
  .painting-gallery-page .abstract-gallery { --g-top:128px; }
  .painting-gallery-page .abstract-gallery-title { white-space:normal; width:90vw; text-align:center; line-height:1.4; }
}

/* V204 — full-screen artwork viewer (gallery-viewer.js). */
.gallery-main-frame { cursor:zoom-in; }
.gv-open {
  position:absolute; z-index:5;
  left:calc(50% + var(--frame-width, 100%) / 2 - 40px);
  top:calc(50% + var(--frame-height, 100%) / 2 - 40px);
  width:32px; height:32px; padding:7px; margin:0;
  border:1px solid rgba(240,238,234,.35); border-radius:50%;
  background:rgba(8,8,8,.55); color:rgba(240,238,234,.92);
  cursor:pointer; opacity:.78; transition:opacity .25s ease, border-color .25s ease, transform .25s ease;
  -webkit-tap-highlight-color:transparent;
}
.gv-open svg { display:block; width:100%; height:100%; }
.gv-open:hover, .gv-open:focus-visible { opacity:1; border-color:rgba(240,238,234,.8); outline:none; transform:scale(1.06); }
@media (hover:hover) { .gv-open { opacity:0; } .gallery-main-wrap:hover .gv-open, .gv-open:focus-visible { opacity:.85; } }

html.gv-open-page, html.gv-open-page body { overflow:hidden !important; }
.gv {
  position:fixed; inset:0; z-index:5000;
  background:#000;
  opacity:0; transition:opacity 220ms ease;
  touch-action:none; user-select:none; -webkit-user-select:none;
  color:#f0eeea;
  font-family:'Avant Garde','AvantGarde','Century Gothic','Avenir Next',Avenir,Arial,Helvetica,sans-serif;
}
.gv.is-visible { opacity:var(--gv-fade, 1); }
.gv[hidden] { display:none; }
.gv-canvas { position:absolute; inset:0; overflow:hidden; touch-action:none; cursor:grab; }
.gv.gv-zoomed .gv-canvas { cursor:move; }
.gv-zoom { position:absolute; inset:max(6px, env(safe-area-inset-top, 0px)) 6px max(6px, env(safe-area-inset-bottom, 0px)); transform-origin:center center; will-change:transform; }
.gv-img {
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:contain; opacity:0; transition:opacity 320ms ease;
  pointer-events:none; -webkit-user-drag:none;
}
.gv-img.is-front { opacity:1; }

.gv-top, .gv-bottom, .gv-caption {
  position:absolute; left:0; right:0; z-index:2;
  transition:opacity 300ms ease, transform 300ms ease;
}
.gv-top {
  top:0; display:flex; align-items:center; justify-content:space-between;
  padding:calc(10px + env(safe-area-inset-top, 0px)) 12px 18px 18px;
  background:linear-gradient(180deg, rgba(0,0,0,.62), rgba(0,0,0,0));
  pointer-events:none;
}
.gv-count { font-size:11px; letter-spacing:.24em; opacity:.85; }
.gv-bottom {
  bottom:0; display:flex; align-items:center; justify-content:center; gap:34px;
  padding:22px 12px calc(14px + env(safe-area-inset-bottom, 0px));
  background:linear-gradient(0deg, rgba(0,0,0,.62), rgba(0,0,0,0));
  pointer-events:none;
}
.gv-caption {
  bottom:calc(70px + env(safe-area-inset-bottom, 0px));
  padding:0 18px; text-align:center; pointer-events:none;
  font-size:10px; line-height:1.5; letter-spacing:.08em; color:rgba(240,238,234,.82);
  text-shadow:0 1px 8px rgba(0,0,0,.9);
}
.gv-caption .photo-info-title { font-size:12px; font-weight:700; letter-spacing:.18em; margin:0 0 4px; text-transform:uppercase; }
.gv-caption .photo-info-line { display:inline; }
.gv-caption .photo-info-line + .photo-info-line::before { content:" · "; opacity:.6; }
.gv-btn {
  pointer-events:auto;
  appearance:none; border:0; background:transparent; color:inherit;
  width:44px; height:44px; padding:0; margin:0;
  display:inline-flex; align-items:center; justify-content:center;
  font:300 30px/1 Arial,sans-serif; cursor:pointer; opacity:.9;
  -webkit-tap-highlight-color:transparent;
}
.gv-btn:hover, .gv-btn:focus-visible { opacity:1; outline:none; }
.gv-close { font-size:20px; }
.gv-play { border:1px solid rgba(240,238,234,.45); border-radius:50%; width:40px; height:40px; }
.gv-play-icon { display:block; width:0; height:0; margin-left:3px; border-style:solid; border-width:7px 0 7px 11px; border-color:transparent transparent transparent currentColor; }
.gv-play.is-on .gv-play-icon { width:10px; height:13px; margin:0; border:0; border-left:3px solid currentColor; border-right:3px solid currentColor; }
.gv.gv-idle .gv-top { opacity:0; transform:translateY(-8px); }
.gv.gv-idle .gv-bottom { opacity:0; transform:translateY(8px); }
.gv.gv-idle .gv-caption { opacity:0; }
.gv.gv-idle .gv-btn { pointer-events:none; }
.gv.gv-idle { cursor:none; }
@media (min-width:701px) {
  .gv-zoom { inset:24px 24px 24px 24px; }
  .gv-caption { font-size:11px; }
}
/* V207 — touch wake for the gallery controls (gallery-viewer.js). */
.gallery-controls.controls-touch-awake, .gallery-tools.controls-touch-awake,
.gallery-controls.controls-hold, .gallery-tools.controls-hold { opacity:1; }
