/**
 * 123D Viewer - Frontend Styles
 * 
 * Note: Most viewer styles are inline in the template for better scoping.
 * This file provides only supplemental styles and print media rules.
 * 
 * @package 123D-Viewer
 */

/* Hide 3D viewer in print */
@media print {
    .farn-3d-button-container,
    .farn-3d-modal,
    .farn-view-3d-btn {
        display: none !important;
    }
}

/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
    .farn-spinner {
        animation: none;
    }
    .farn-view-3d-btn,
    .farn-modal-close {
        transition: none !important;
    }
    @keyframes farn-modal-appear {
        from, to {
            opacity: 1;
            transform: translate(-50%, -50%) scale(1);
        }
    }
}

/* High contrast mode support */
@media (prefers-contrast: high) {
    .farn-view-3d-btn {
        border: 2px solid currentColor !important;
    }
    .farn-modal-close {
        border: 2px solid currentColor !important;
    }
}

/* Focus styles for accessibility */
.farn-view-3d-btn:focus,
.farn-modal-close:focus {
    outline: 2px solid #667eea;
    outline-offset: 2px;
}

.farn-view-3d-btn:focus:not(:focus-visible),
.farn-modal-close:focus:not(:focus-visible) {
    outline: none;
}

/* Ensure modal is above everything */
.farn-3d-modal {
    isolation: isolate;
}

/* =====================================================================
   Placement engine — floating / sticky variants
   (only applied when JS places the button)
   ===================================================================== */

/* Floating (fixed) button — always visible */
.farn-injected-viewer.farn-floating {
    position: fixed !important;
    bottom: calc(20px + env(safe-area-inset-bottom, 0px)) !important;
    z-index: 2147480000 !important;
    margin: 0 !important;
}
.farn-injected-viewer.farn-floating-right {
    right: calc(20px + env(safe-area-inset-right, 0px)) !important;
    left: auto !important;
}
.farn-injected-viewer.farn-floating-left {
    left: calc(20px + env(safe-area-inset-left, 0px)) !important;
    right: auto !important;
}
.farn-injected-viewer.farn-floating .farn-3d-button-container {
    margin: 0 !important;
    position: static !important;
}

/* Sticky bottom bar — full width, respects iOS safe area */
.farn-sticky-bar {
    position: fixed !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    z-index: 2147480000 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 10px !important;
    padding: 10px 14px !important;
    padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px)) !important;
    background: rgba(15, 23, 42, 0.96) !important;
    backdrop-filter: blur(8px) !important;
    -webkit-backdrop-filter: blur(8px) !important;
    border-top: 1px solid rgba(255, 255, 255, 0.08) !important;
    box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.25) !important;
}
.farn-sticky-bar .farn-injected-viewer,
.farn-sticky-bar .farn-3d-button-container {
    margin: 0 !important;
    position: static !important;
    flex: 0 1 auto !important;
}
.farn-sticky-dismiss {
    flex: 0 0 auto !important;
    background: rgba(255, 255, 255, 0.1) !important;
    border: 1px solid rgba(255, 255, 255, 0.15) !important;
    color: rgba(255, 255, 255, 0.9) !important;
    width: 32px !important;
    height: 32px !important;
    border-radius: 50% !important;
    font-size: 14px !important;
    line-height: 1 !important;
    cursor: pointer !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    padding: 0 !important;
    transition: background 0.15s ease !important;
}
.farn-sticky-dismiss:hover {
    background: rgba(255, 255, 255, 0.18) !important;
}
/* Prevent sticky bar from covering site content */
body.farn-has-sticky-bar {
    padding-bottom: calc(68px + env(safe-area-inset-bottom, 0px)) !important;
}

/* Corner placement: anchored to the STATIC gallery viewport (not the
   translating slide strip). Bottom-left or bottom-right of the visible
   image area, safe on mobile swipe carousels.
   z-index 9999 beats most theme slider controls; isolation isolate
   prevents weird stacking from parent transforms; pointer-events:auto
   overrides any inherited pointer-events:none from slider overlays. */
.farn-corner-position {
    position: absolute !important;
    bottom: 12px !important;
    z-index: 9999 !important;
    pointer-events: auto !important;
    isolation: isolate;
    touch-action: auto;
}
.farn-corner-position.farn-corner-left {
    left: 12px !important;
    right: auto !important;
}
.farn-corner-position.farn-corner-right {
    right: 12px !important;
    left: auto !important;
}
/* Mobile: user-specified corner positioning — container spans full width
   so the inner button can align perfectly to the right/left edge. The
   container gets pointer-events:none so empty areas pass taps through
   to the gallery image (letting WC lightbox open on image tap); only the
   actual button receives clicks. */
@media (max-width: 767px) {
    .farn-corner-position.farn-corner-right {
        right: 5px !important;
        left: auto !important;
        bottom: 0 !important;
        width: 100%;
        margin: 0 !important;
        pointer-events: none;
    }
    .farn-corner-right .farn-view-3d-btn,
    .farn-gallery-wrapper.farn-corner-right .farn-view-3d-btn {
        left: auto !important;
        right: 5px !important;
        bottom: 0 !important;
        pointer-events: auto !important;
    }
    .farn-corner-position.farn-corner-left {
        right: auto !important;
        left: 5px !important;
        bottom: 0 !important;
        width: 100%;
        margin: 0 !important;
        pointer-events: none;
    }
    .farn-corner-left .farn-view-3d-btn,
    .farn-gallery-wrapper.farn-corner-left .farn-view-3d-btn {
        right: auto !important;
        left: 5px !important;
        bottom: 0 !important;
        pointer-events: auto !important;
    }
    .farn-corner-position.farn-corner-center {
        right: 0 !important;
        left: 0 !important;
        bottom: 0 !important;
        width: 100%;
        margin: 0 !important;
        pointer-events: none;
    }
    .farn-corner-center .farn-view-3d-btn,
    .farn-gallery-wrapper.farn-corner-center .farn-view-3d-btn {
        left: 50% !important;
        right: auto !important;
        transform: translateX(-50%) !important;
        bottom: 0 !important;
        pointer-events: auto !important;
    }
}

/* =====================================================================
 * Lightbox-open detection: hide the corner button whenever a known
 * gallery lightbox is active, so our button doesn't overlay the
 * lightbox's image. We support the common cases via :has() for modern
 * browsers AND body/html class signals; a JS MutationObserver sets
 * body.farn-lightbox-open as a universal safety net.
 * =================================================================== */
body.farn-lightbox-open .farn-corner-position,
body.pswp-open .farn-corner-position,
body.elementor-lightbox-active .farn-corner-position,
html.lity-active .farn-corner-position,
html.fancybox-lock .farn-corner-position,
html.mfp-zoom-out-cur .farn-corner-position {
    display: none !important;
}
/* :has() fallback for browsers that support it (Chrome/Safari/FF 2023+) */
body:has(.pswp--open) .farn-corner-position,
body:has(.pswp[aria-hidden="false"]) .farn-corner-position,
body:has(.mfp-wrap) .farn-corner-position,
body:has(.lity.lity-opened) .farn-corner-position,
body:has(.elementor-lightbox[aria-hidden="false"]) .farn-corner-position {
    display: none !important;
}

/* =====================================================================
 * Eye-catching shimmer sweep on the 3D button.
 * Every 5 seconds: a diagonal highlight sweeps from left to right.
 * mix-blend-mode: overlay makes the highlight automatically contrast
 * with the underlying button color (light-on-dark, dark-on-light).
 * =================================================================== */
.farn-view-3d-btn {
    position: relative;
    overflow: hidden;
    isolation: isolate;
}
.farn-view-3d-btn::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(
        110deg,
        transparent 20%,
        rgba(255, 255, 255, 0.85) 45%,
        rgba(255, 255, 255, 0.95) 50%,
        rgba(255, 255, 255, 0.85) 55%,
        transparent 80%
    );
    mix-blend-mode: overlay;
    transform: translateX(-120%);
    pointer-events: none;
    animation: farn-btn-shine 5s linear infinite;
    z-index: 1;
}
/* Ensure button content sits above the shine layer so clicks / visuals
   aren't affected. */
.farn-view-3d-btn > * {
    position: relative;
    z-index: 2;
}

@keyframes farn-btn-shine {
    0%   { transform: translateX(-120%); }
    14%  { transform: translateX(120%); }
    15%  { transform: translateX(120%); }
    100% { transform: translateX(120%); }
}

/* RTL: sweep direction reversed so it still reads right→left→right */
html[dir="rtl"] .farn-view-3d-btn::after {
    animation-name: farn-btn-shine-rtl;
}
@keyframes farn-btn-shine-rtl {
    0%   { transform: translateX(120%); }
    14%  { transform: translateX(-120%); }
    15%  { transform: translateX(-120%); }
    100% { transform: translateX(-120%); }
}

/* Honor reduced-motion preference — no shine for users who opt out */
@media (prefers-reduced-motion: reduce) {
    .farn-view-3d-btn::after {
        animation: none;
        display: none;
    }
}

/* RTL tweaks */
html[dir="rtl"] .farn-injected-viewer.farn-floating-right {
    right: calc(20px + env(safe-area-inset-right, 0px)) !important;
    left: auto !important;
}
html[dir="rtl"] .farn-injected-viewer.farn-floating-left {
    left: calc(20px + env(safe-area-inset-left, 0px)) !important;
    right: auto !important;
}
