:root{
  /* Palette: #363636, #242f40, #cca43b, #e5e5e5, #ffffff */
  --bg: #242f40;            /* page background deep slate */
  --surface: #363636;       /* card / panel surface */
  --accent: #cca43b;        /* warm gold accent */
  --muted: rgba(229,229,229,0.68); /* softer light text */
  --text: #e5e5e5;          /* primary text */
  --white: #ffffff;
  --glass: rgba(255,255,255,0.03);
  --overlay-bg: rgba(10,12,15,0.6);
  --radius: 14px;
  --shadow-md: 0 12px 30px rgba(2,6,23,0.6);
  --shadow-sm: 0 6px 18px rgba(2,6,23,0.45);
}

*{box-sizing:border-box}
html,body{height:100%}
/* Prevent accidental horizontal overflow on mobile which can trigger auto-zoom */
html, body { overflow-x: hidden; }
body{
  margin:0;
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial;
  /* keep a fallback background color while the image loads */
  background: var(--bg);
  color:var(--text);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  line-height:1.45;
  position:relative; /* create stacking context for pseudo background */
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

/* Page background image (blurred + darker) using a fixed pseudo-element so it doesn't affect layout.
   Path is relative to this CSS file (css/ -> ../img/cranchi.jpg). */
body::before{
  content: '';
  position: fixed;
  inset: 0;
  background-image: url('../img/cranchi.jpg');
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
  /* blur + darken for legibility */
  filter: blur(8px) brightness(0.46) saturate(0.95);
  transform: scale(1.02);
  z-index: -1;
  pointer-events: none;
  will-change: transform, filter;
}

.logo img{
  min-width: 70px;
  min-height: 70px;
}

/* Dark-only mode: removed light-theme rules to avoid iPhone issues */

/* Header / brand */
header{position:sticky;top:0;z-index:40;background: linear-gradient(180deg, rgba(36,47,64,0.7), rgba(36,47,64,0.55));backdrop-filter: blur(6px);border-bottom:1px solid rgba(255,255,255,0.03)}
.wrap{max-width:1200px;margin:0 auto;padding:20px}
.wrap-sbar{max-width:1200px;margin:0 auto;padding:14px; padding-top: 4px; padding-bottom: 4px;}
.brand{display:flex;align-items:center;gap:12px;justify-content:space-between}
.brand-left{display:flex;flex-direction:column;align-items:flex-start;gap:4px}
.brand h1{margin:0;font-weight:700;font-size:20px;color:var(--white);letter-spacing:0.3px}
.brand-logo{height:36px;width:auto;display:block}
.brand .tag{color:var(--muted);font-size:13px;text-transform:uppercase;padding-left:0;border-left:0;margin-top:0}

/* Header action area (right side) */
.wrap.brand{position:relative}
.header-actions{display:flex;gap:8px;align-items:center;z-index:60}
.header-actions .theme-toggle{width:44px;height:44px}
.header-actions .btn{margin-left:6px}

/* icon-only button style */
.icon-btn{padding:8px;display:inline-grid;place-items:center;border-radius:10px}
.icon-btn .icon{width:18px;height:18px;display:block;color:var(--muted)}
.icon-btn:hover .icon{color:var(--white)}
.icon-btn:active{transform:translateY(1px)}

/* Hide the header search controls by default; reveal when header has .show-search */
.header-controls{display:none;gap:12px;align-items:center;margin-top:6px}
header.show-search .header-controls{display:flex}

/* Footer contacts (moved from header) */
.footer-contacts{display:flex;gap:10px;align-items:center}
.footer-contacts .icon-btn{padding:10px;border-radius:10px}
.footer-contacts .icon-btn .icon{width:22px;height:22px}
.search-input{flex:1;padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,0.06);background:rgba(255,255,255,0.02);color:var(--text);min-width:160px}
.search-input::placeholder{font-size: 15px;color:rgba(229,229,229,0.45)}
.filter-select{padding:8px 10px;border-radius:8px;border:1px solid rgba(255,255,255,0.04);background:transparent;color:var(--text)}
.theme-toggle{width:40px;height:40px;border-radius:10px;border:1px solid rgba(255,255,255,0.04);background:transparent;color:var(--white);display:grid;place-items:center;cursor:pointer}
.theme-toggle:hover{background:rgba(255,255,255,0.02)}

/* Animated sun / moon icon */
.theme-toggle{padding:6px}
.theme-toggle .theme-icon{display:block;width:20px;height:20px;color:var(--white);transition:transform .28s ease, color .28s ease}
.icon-sun{opacity:0;transform:scale(.6) rotate(-20deg);transform-origin:50% 50%;transition:opacity .28s ease, transform .28s cubic-bezier(.2,.9,.25,1)}
.icon-moon{opacity:1;transform:scale(1);transition:opacity .28s ease, transform .28s cubic-bezier(.2,.9,.25,1)}
@media (prefers-reduced-motion: reduce){ .theme-toggle .theme-icon, .icon-sun, .icon-moon{transition:none} }

/* When light theme active, show sun and hide moon */
/* Light mode removed: dark theme is the default to avoid iPhone issues */

/* When overlay is active, prevent the document body from scrolling. We'll toggle
   the `overlay-open` class on <body> from JS. The overlay panel's internal
   scrollable columns retain overflow:auto so they can be scrolled independently. */
body.overlay-open{height:100vh;overflow:hidden;}

/* Ensure main content expands to push the footer to the bottom when page is short */
main{flex:1 0 auto}

/* Ensure overlay can still handle touch gestures internally */
.overlay-root.active{touch-action:auto}

/* Card thumbnail: show full image within the card size without changing the card dimensions */
.thumb img{ background: rgba(0,0,0,0.06); }

/* Catalog grid: responsive two+ columns. Use auto-fit with a smaller
  min width so narrow phones can display more than one card without
  causing horizontal overflow or page zooming. */
.catalog{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:18px;padding:28px 14px 72px;max-width:1400px;margin:0 auto;align-items:stretch}

/* Card */
.card{background: linear-gradient(180deg, var(--surface), rgba(22,22,22,0.85));border-radius:var(--radius);overflow:hidden;cursor:pointer;border:1px solid rgba(255,255,255,0.04);box-shadow:var(--shadow-sm);transition: transform .26s cubic-bezier(.2,.9,.3,1), box-shadow .26s, border-color .2s;display:flex;flex-direction:column;height:100%}
.card:hover{transform:translateY(-6px);box-shadow:var(--shadow-md);border-color:rgba(204,164,59,0.14)}
.card:active{transform:translateY(-2px)}
.card:focus-visible{outline:2px solid rgba(204,164,59,0.22);outline-offset:3px}

.thumb{position:relative;aspect-ratio:16/10;background:linear-gradient(180deg, rgba(0,0,0,0.12), rgba(0,0,0,0.22));overflow:hidden}
.thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s ease}
.card:hover .thumb img{transform:scale(1.03)}

/* Hint to the browser that thumbnails will be transformed (improves animation smoothness) */
.thumb img{will-change:transform}

.pill{
  position:absolute;
  right:12px;
  bottom:08px;
  font-size:13px; /* slightly larger for readability */
  color:var(--white);
  font-weight:700;
  letter-spacing:0.3px;
  z-index:6;
  pointer-events:none; /* non-interactive overlay text */
  /* Plain text (no box) — strong "black light" shadow to keep legible on bright photos */
  background: transparent;
  padding: 0;
  border: 0;
  border-radius: 0;
  text-shadow:
    0 2px 0 rgba(0,0,0,0.98),
    0 0px 14px rgba(0,0,0,0.90),
    0 0px 4px rgba(0,0,0,0.80),
    0 0px 2px rgba(0,0,0,0.65);
}

/* Title overlay directly on the thumbnail image (no box) */
.thumb .title-overlay{position:absolute;left:12px;top:12px;color:var(--white);font-size:16px;font-weight:700;line-height:1.05;z-index:6;pointer-events:none}
.thumb .title-overlay{ /* very strong "black light" shadow for high-contrast on white yachts */
  text-shadow:
    0 2px 0 rgba(0,0,0,0.98),
    0 0px 14px rgba(0,0,0,0.90),
    0 0px 4px rgba(0,0,0,0.80),
    0 0px 2px rgba(0,0,0,0.65);
}

/* Build overlay (bottom-left) - text only with strong shadow */
.thumb .build-overlay{position:absolute;left:12px;bottom:12px;color:var(--white);font-size:13px;font-weight:700;line-height:1;z-index:6;pointer-events:none}
.thumb .build-overlay{ /* very strong "black light" shadow for high-contrast on white yachts */
  text-shadow:
    0 2px 0 rgba(0,0,0,0.98),
    0 0px 14px rgba(0,0,0,0.90),
    0 0px 4px rgba(0,0,0,0.80),
    0 0px 2px rgba(0,0,0,0.65);
}

.content{padding:16px 16px 18px;flex:1;display:flex;flex-direction:column;justify-content:space-between}
.meta{display:flex;gap:10px;flex-wrap:wrap;align-items:center;color:var(--muted);font-size:13px}
.title{font-size:17px;font-weight:600;margin:0 0 6px;color:var(--white)}

.divider{height:1px;background:linear-gradient(90deg, rgba(255,255,255,0.02), rgba(255,255,255,0.06), rgba(255,255,255,0.02));margin:12px 0}

/* Buttons */
.btn{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:10px;border:1px solid rgba(255,255,255,0.06);background:transparent;color:var(--text);cursor:pointer;font-weight:600}
.btn:hover{background:rgba(255,255,255,0.02)}
.btn-primary{background:linear-gradient(180deg, rgba(204,164,59,0.12), rgba(204,164,59,0.06));border:1px solid rgba(204,164,59,0.18);color:var(--white);box-shadow:0 6px 18px rgba(204,164,59,0.06)}
.btn-grey{background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.06);color:var(--muted);padding:6px 10px;border-radius:8px;font-weight:700;cursor:pointer}
.btn-grey:hover{background:rgba(255,255,255,0.06)}
.ov-availability{margin-left:10px;font-size:14px}
.ov-info-availability{
  margin-top:4px;
  display:block;
  width:100%;
  padding:5px;
  text-align:center;
  border-radius:10px;
  font-size: 12px;
  /* font-weight:800; */
  /* blue high-contrast style */
  background: linear-gradient(180deg, #1677ff, #0f62d6);
  color: #ffffff;
  border: 1px solid rgba(255,255,255,0.06);
  box-shadow: 0 8px 26px rgba(16,103,255,0.09);
}

/* Center the availability button text and style to match overlay (blue, white text).
   Keep the original vertical size from .btn-sm (padding kept at 6px 10px). */
.avail-btn{
  justify-content:center;
  align-items:center;
  text-align:center;
  /* keep btn-sm vertical padding */
  padding:6px 10px;
  /* slightly brighter blue than the page background (#242F3F) for visibility */
  background: linear-gradient(180deg, #2b4260, #274a6f);
  color: #ffffff;
  border: 1px solid rgba(255,255,255,0.06);
  border-radius:8px;
  font-weight:700;
}
.avail-btn:hover{ background: linear-gradient(180deg, #335a88, #2a5fb0); }

/* Overlay / detail */
.overlay-root{position:fixed;inset:0;display:none;align-items:center;justify-content:center;z-index:999}
.overlay-root.active{display:flex}
.overlay-backdrop{position:absolute;inset:0;background:var(--overlay-bg);backdrop-filter:blur(4px)}

.overlay-panel{position:relative;width:min(1100px,94vw);height:min(88vh,900px);background:linear-gradient(180deg, rgba(54,54,54,0.98), rgba(25,27,30,0.98));border-radius:calc(var(--radius)+6px);border:1px solid rgba(255,255,255,0.04);box-shadow:0 30px 80px rgba(2,6,23,0.7);overflow:hidden;display:grid;grid-template-rows:60% 40%;animation:pop .16s ease-out}
@keyframes pop{from{transform:translateY(8px) scale(.98);opacity:.6}to{transform:translateY(0) scale(1);opacity:1}}

.overlay-close{font-size: 25px;position:absolute;top:14px;right:14px;z-index:60;background:rgba(0,0,0,0.35);border:1px solid rgba(255, 255, 255, 0.185);color:var(--white);width:45px;height:45px;display:grid;place-items:center;border-radius:10px;cursor:pointer;}
.overlay-close:hover{background:rgba(0,0,0,0.5)}

.gallery { position: relative; background: #0a0b10; touch-action: pan-y; }
/* stack of two images for animated sliding */
.image-stack { position: relative; width: 100%; height: 100%; overflow: hidden; }
.image-stack img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; object-position: center center; display: block; will-change: transform, opacity; transition: transform .32s cubic-bezier(.2,.9,.25,1), opacity .2s ease; -webkit-user-drag: none; }
.image-stack img.back { transform: translateX(100%); z-index: 1; }
.image-stack img.front { transform: translateX(0); z-index: 2; }

/* Video sizing for overlay: fill height while preserving aspect ratio */
.image-stack video.ov-inline-video { position: absolute; inset: 0; margin: 0 auto; left: 0; right: 0; top: 0; bottom: 0; height: 100%; width: auto; max-width: none; object-fit: contain; z-index: 2; display: block; background: black; }
.image-stack video.persistent { z-index: 2; }

/* classes applied during animated navigation */
.slide-in-from-right { transform: translateX(0) !important; }
.slide-in-from-left { transform: translateX(0) !important; }
.slide-out-to-left { transform: translateX(-100%) !important; }
.slide-out-to-right { transform: translateX(100%) !important; }

/* ensure dots and nav appear above the images */
.gallery .nav { z-index: 40; }
.dots { z-index: 3; }

.gallery .nav { position: absolute; top: 50%; transform: translateY(-50%); display: flex; width: 100%; justify-content: space-between; padding: 0 10px; pointer-events: none; }
.gallery button { pointer-events: auto; width: 42px; height: 42px; border-radius: 12px; background: rgba(0,0,0,0.55); border: 1px solid rgba(255,255,255,0.18); color: var(--white); cursor: pointer; font-size: 20px; }
.gallery button:hover { background: rgba(0,0,0,0.75); }

/* Scoped overlay stacked buttons: full-width, vertical layout and distinct colors.
  These rules are intentionally specific to avoid clobbering global `.btn` usage. */
.overlay-panel .pane .col .ov-btn-stack{ display:flex; flex-direction:column; gap:4px; margin-top:12px }
.overlay-panel .pane .col .ov-btn-stack .ov-stack-btn{ display:block; width:100%; padding:5px 10px; border-radius:10px; text-align:center; box-sizing:border-box; font-weight:700 }
.overlay-panel .pane .col .ov-btn-stack .ov-stack-btn:hover{ transform: translateY(-1px) }

/* Variant colors */
.overlay-panel .pane .col .ov-btn-stack .ov-btn-gallery{ background: linear-gradient(180deg, rgba(204,164,59,0.14), rgba(204,164,59,0.06)); border:1px solid rgba(204,164,59,0.18); color:var(--white) }
.overlay-panel .pane .col .ov-btn-stack .ov-btn-share{ background: linear-gradient(180deg, #2b4260, #274a6f); border:1px solid rgba(255,255,255,0.06); color:var(--white) }
.overlay-panel .pane .col .ov-btn-stack .ov-btn-video{ background: linear-gradient(180deg, #8b2b2b, #6b1f1f); border:1px solid rgba(255,255,255,0.06); color:var(--white) }
.overlay-panel .pane .col .ov-btn-stack .ov-btn-video-share{ background: linear-gradient(180deg, #2b6a44, #1f5536); border:1px solid rgba(255,255,255,0.06); color:var(--white) }

/* Small screens: slightly reduce gap/padding */
@media (max-width:640px){ .overlay-panel .pane .col .ov-btn-stack{ gap:4px } .overlay-panel .pane .col .ov-btn-stack .ov-stack-btn{ padding:5px } }

/* Share fallback modal styling */
.share-fallback-modal{ position:fixed; inset:0; display:flex; align-items:center; justify-content:center; z-index:120; background:rgba(0,0,0,0.45); }
.share-fallback-box{ background:linear-gradient(180deg, #161616, #0b0b0b); padding:18px; border-radius:12px; width:min(520px,92vw); box-shadow:0 20px 60px rgba(0,0,0,0.6); display:flex; flex-direction:column; gap:10px }
.share-fallback-title{ font-weight:800; color:var(--white); font-size:16px }
.share-fallback-url{ width:100%; padding:8px 10px; border-radius:8px; border:1px solid rgba(255,255,255,0.06); background:transparent; color:var(--text) }
.share-fallback-actions{ display:flex; gap:8px; flex-wrap:wrap }
.share-fallback-box .btn{ flex:0 0 auto }
.share-fallback-box a.btn{ text-decoration:none; display:inline-flex; align-items:center; justify-content:center }
/* Note text inside share fallback modal (muted) */
.share-fallback-note{ color:var(--muted); font-size:12px; margin-top:4px }

/* Make select option text readable in both themes */
.filter-select option{color:var(--text);background:var(--surface)}

.dots{position:absolute;left:0;right:0;bottom:12px;display:flex;justify-content:center;gap:8px}
.dot{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,0.28);border:1px solid rgba(0,0,0,0.4)}
.dot.active{background:var(--accent);box-shadow:0 6px 18px rgba(204,164,59,0.12)}

/* Zoom overlay (created dynamically) */
.zoom-overlay {
  position: absolute; inset: 0; /* keep inside overlay panel */
  /* Place the zoom overlay above the image stack but below the close button
     so the close control remains visible while zoomed. The overlay-panel's
     close button uses z-index:5, so a value lower than that is appropriate. */
  z-index: 4; display: flex; align-items: center; justify-content: center; overflow: auto; background: rgba(0,0,0,0.0); touch-action: auto;
}
.zoom-overlay img {
  display: block; max-width: none; max-height: none; width: auto; height: auto; user-select: none;
}

/* Info pane */
.pane{display:grid;grid-template-columns:1.4fr 1fr;gap:18px;padding:6px}
.pane{grid-template-columns:1fr}
.pane .col{background:linear-gradient(180deg, rgba(255,255,255,0.02), rgba(0,0,0,0.06));border-radius:12px;padding:14px;border:1px solid rgba(255,255,255,0.03);overflow:auto}

/* Remove the right-hand price column inside the overlay and let the
  information column take full width. We keep the DOM/JS intact so the
  pricing code can be re-enabled later, but visually hide it. */
.overlay-panel .pane{grid-template-columns:1fr !important}
.overlay-panel .pane .col:nth-child(2){display:none;}
.overlay-panel .pane .col:nth-child(1){border-radius:12px;padding:6px 10px 0px 12px}
.pane .titlebar{display:flex;align-items:baseline;justify-content:space-between;gap:10px;}
.pane h2{font-size:16px;margin:0;color:var(--white)}
.pane .subtle{color:var(--muted);font-size:13px}
.kv{display:flex;flex-direction:column;gap:6px;font-size:12px;margin-top:6px}
.kv div{display:flex;align-items:center;gap:8px}
.kv div span:first-child{color:var(--muted)}
.kv div span:first-child::after{ content: ":"; margin-left:4px; margin-right:6px; color:var(--muted) }

.price-table{width:100%;border-collapse:collapse;margin-top:10px;font-size:14px}
.price-table th,.price-table td{border-bottom:1px solid rgba(255,255,255,0.04);padding:8px 6px;text-align:left}
.price-table th{color:var(--muted);font-weight:700;letter-spacing:.3px;font-size:12px;text-transform:uppercase}
.price-badge{display:inline-block;padding:4px 10px;border-radius:999px;background:linear-gradient(180deg, rgba(204,164,59,0.95), rgba(204,164,59,0.9));color:#141414;font-weight:800;font-size:12px}

.notes{margin-top:6px;color:var(--muted);font-size:12px;line-height:1.6}

/* Compact view tweaks (less dense) */
body.compact-view .card{border-radius:11px}
body.compact-view .thumb{aspect-ratio:4/3}
body.compact-view .content{padding:14px}
body.compact-view .title{font-size:15px}

/* Compact mode animations: fade/collapse marina and price details */
.meta-marina{display:inline-block;max-width:100%;overflow:hidden;white-space:nowrap;transition:max-width .28s ease, opacity .28s ease, margin .28s ease}
.price-row{transition:max-height .32s ease, opacity .28s ease, margin .28s ease, padding .28s ease;max-height:200px;overflow:hidden}

/* Collapsed state applied in compact view */
/* body.compact-view .meta-marina{opacity:0;max-width:0;margin:0;padding:0;pointer-events:none} */
body.compact-view .price-row{opacity:0;max-height:0;margin:0;padding:0;pointer-events:none}

/* shrink divider slightly when compact to remove extra spacing */
.divider{transition:margin .28s ease, opacity .28s ease}
body.compact-view .divider{margin:6px 0;opacity:0.85}

/* Ensure the remaining meta items align nicely */
body.compact-view .meta { gap:8px }

/* Responsive tweaks */
@media (max-width:980px){
  .pane{grid-template-columns:1fr}
  .catalog{gap:18px;padding:24px 16px 68px}
  /* pane stacks into a single column on small screens */
}
@media (max-width:560px){
  .wrap-sbar{padding:14px; padding-top: 2px !important; padding-bottom: 2px}
  .wrap{padding:14px;padding-bottom:6px;}
  .brand h1{font-size:16px}
  .brand-logo{height:30px}
  .catalog{grid-template-columns:repeat(2,minmax(120px,1fr));gap:14px;padding:18px 12px 60px}
  .title{font-size:16px}
  .header-actions{gap:8px}
  .brand{align-items:flex-start}
  .brand-left{flex:1;min-width:0;}
}

/* Minimal overlay mode for the dedicated boat page: hide info pane and
  let the image/gallery occupy the full overlay area. The boat page will
  add the `minimal` class to `#overlay` before opening so the same markup
  can be reused while presenting an image-only experience. */
.overlay-root.minimal .overlay-panel{ grid-template-rows: 100% !important; }
.overlay-root.minimal .overlay-panel .pane{ display: none !important; }
.overlay-root.minimal .overlay-panel .gallery{ height: 100%; }
.overlay-root.minimal .overlay-panel .overlay-close{ z-index: 60; }

/* REVIEW: purge scan
  Candidates reported by baseline/tools/purge-runtime.ps1 -> baseline/tools/purge-report.json
  These token-like names were heuristically extracted from the CSS but may be false
  positives (for example, unit-like tokens inside values). No matching class-rule
  blocks were found for the listed items; this comment is a non-destructive marker
  for future cleanup: 16s, 26s, 28s, 2s, 32s, 3px, 4fr, 6s
*/
/* Utility classes */
.u-gap-16{gap:16px}
.row{display:flex;gap:12px;flex-wrap:wrap}
.col{flex:1;min-width:0}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.btn-sm{padding:3px 6px;font-size:12px;border-radius:10px}

/* Footer styles */
.site-footer{background: linear-gradient(180deg, rgba(255,255,255,0.02), rgba(0,0,0,0.03));border-top:1px solid rgba(255,255,255,0.03);padding:18px 0;color:var(--muted)}
.site-footer .footer-inner{display:flex;align-items:center;justify-content:space-between;gap:12px}
.site-footer .footer-text{font-size:13px;color:var(--muted)}
.site-footer .footer-text a{color:var(--white);text-decoration:underline}
.site-footer .footer-bbb img{height:66px;width:auto;border:0;display:block}
@media (max-width:560px){
  .site-footer .footer-inner{flex-direction:column;align-items:center;text-align:center}
  .site-footer .footer-bbb img{height:60px; margin-bottom: 20px}
}
/* Video thumbnail card: solid black with centered play affordance */
.video-thumb{background:#000;display:flex;align-items:center;justify-content:center;position:relative}
.video-thumb img{width:100%;height:100%;object-fit:cover;display:block;opacity:1}
.video-play-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:6;pointer-events:none}
.video-play-overlay::before{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:64px;height:64px;border-radius:50%;background:rgba(0,0,0,0.55);box-shadow:0 8px 22px rgba(0,0,0,0.6);}
.video-play-overlay span{position:relative;color:#fff;font-size:28px;line-height:1;margin-left:0;z-index:2}
.video-thumb .video-play-overlay{font-weight:700}

/* Overlay inline-video placeholder (center the circular play button) */
.ov-video-placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:12;pointer-events:none}
.ov-video-placeholder.hidden{visibility:hidden;opacity:0}
.ov-video-placeholder .ov-play-btn{pointer-events:auto;z-index:50;width:64px;height:64px;border-radius:50%;background:rgba(0,0,0,0.55);border:0;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center}
.ov-video-placeholder .ov-play-btn:active{transform:translateY(1px)}

/* When an overlay image is loading, show a solid black background placeholder
  to avoid briefly displaying the previous slide. The actual <img> remains
  where the placeholder is drawn and will swap src when the loader finishes. */
.image-stack img.loading{ background:#000; background-size:cover; background-position:center; }
.image-stack img.loading[src='']{ visibility:hidden }
