/*
 * Sign Language In-Vision
 * Front-end styles
 */

.sliv {
    --sliv-desktop-width: 420px;
    --sliv-right-offset: 35px;
    --sliv-mobile-width: 260px;
    --sliv-landscape-top-clearance: 120px;
    --sliv-landscape-width: var(--sliv-mobile-width);
    --sliv-accent: #333333;
    --sliv-button-radius: 8px;
    --sliv-control-height: 42px;
    --sliv-control-padding-x: 17px;
    --sliv-control-font-size: 15px;
    --sliv-control-bottom: 22px;
}

.sliv [hidden] {
    display: none !important;
}

.sliv__presenter {
    position: fixed !important;
    right: var(--sliv-right-offset) !important;
    bottom: 0 !important;
    width: var(--sliv-desktop-width) !important;
    max-width: 40vw !important;
    height: auto !important;
    margin: 0 !important;
    z-index: 999999 !important;
    pointer-events: none;
}

.sliv__video {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    height: auto !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    box-shadow: none !important;
    background: transparent !important;
    pointer-events: none;
}

/*
 * Keep all visible controls in one compact lower-right dock. This keeps the
 * signer's face and upper signing space clear, while the dock's right edge
 * exactly matches the BSL launcher position.
 */
.sliv__controls {
    position: absolute !important;
    right: 0 !important;
    bottom: var(--sliv-control-bottom) !important;
    z-index: 2 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: flex-end !important;
    gap: 8px !important;
    margin: 0 !important;
    padding: 0 !important;
    pointer-events: none;
}

.sliv__launcher,
.sliv__playback,
.sliv__close {
    box-sizing: border-box !important;
    height: var(--sliv-control-height) !important;
    margin: 0 !important;
    border-radius: var(--sliv-button-radius) !important;
    color: #fff !important;
    font-family: inherit !important;
    font-weight: 700 !important;
    text-transform: none !important;
    cursor: pointer;
    pointer-events: auto;
}

.sliv__launcher {
    min-width: 0 !important;
    width: auto !important;
    padding: 0 14px !important;
    font-size: var(--sliv-control-font-size) !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    white-space: nowrap;
}

.sliv__playback {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex: 0 0 var(--sliv-control-height) !important;
    width: var(--sliv-control-height) !important;
    min-width: var(--sliv-control-height) !important;
    padding: 0 !important;
    line-height: 1 !important;
}

.sliv__launcher {
    position: fixed !important;
    right: var(--sliv-right-offset) !important;
    bottom: var(--sliv-control-bottom) !important;
    z-index: 999999 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 7px !important;
    border: 0 !important;
    background: var(--sliv-accent) !important;
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18) !important;
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.sliv__launcher:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.24) !important;
}

.sliv__launcher:focus-visible {
    outline: 3px solid #fff !important;
    outline-offset: 2px;
    box-shadow:
        0 0 0 5px #1d2327,
        0 4px 14px rgba(0, 0, 0, 0.18) !important;
}

.sliv__sign-icon {
    display: block;
    flex: 0 0 20px;
    width: 20px;
    height: 20px;
    overflow: visible;
}

.sliv__media-icon {
    display: none;
    width: 21px;
    height: 21px;
    color: currentColor;
    fill: currentColor;
    pointer-events: none;
}

.sliv__playback[data-sliv-state="play"] .sliv__media-icon--play,
.sliv__playback[data-sliv-state="resume"] .sliv__media-icon--play,
.sliv__playback[data-sliv-state="pause"] .sliv__media-icon--pause,
.sliv__playback[data-sliv-state="replay"] .sliv__media-icon--replay {
    display: block;
}

.sliv__playback {
    position: static !important;
    border: 1px solid rgba(255, 255, 255, 0.55) !important;
    background: rgba(0, 0, 0, 0.72) !important;
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.18) !important;
    transition: background 0.2s ease, transform 0.2s ease;
}

.sliv__playback:hover,
.sliv__playback:focus-visible {
    background: rgba(0, 0, 0, 0.9) !important;
    transform: translateY(-1px);
}

.sliv__playback:focus-visible {
    outline: 3px solid #fff !important;
    outline-offset: 2px;
    box-shadow:
        0 0 0 5px rgba(0, 0, 0, 0.9),
        0 3px 12px rgba(0, 0, 0, 0.18) !important;
}

.sliv__close {
    position: static !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex: 0 0 var(--sliv-control-height) !important;
    width: var(--sliv-control-height) !important;
    min-width: var(--sliv-control-height) !important;
    padding: 0 !important;
    border: 1px solid rgba(255, 255, 255, 0.45) !important;
    background: rgba(0, 0, 0, 0.58) !important;
    font-size: 22px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.14) !important;
    opacity: 0.9;
    transition: opacity 0.2s ease, background 0.2s ease, transform 0.2s ease;
}

.sliv__close:hover,
.sliv__close:focus-visible {
    opacity: 1;
    background: rgba(0, 0, 0, 0.82) !important;
    transform: translateY(-1px);
}

.sliv__close:focus-visible {
    outline: 3px solid #fff !important;
    outline-offset: 2px;
    box-shadow:
        0 0 0 5px rgba(0, 0, 0, 0.85),
        0 3px 12px rgba(0, 0, 0, 0.14) !important;
}

@media (max-width: 700px) {
    .sliv {
        --sliv-control-bottom: 15px;
    }

    .sliv__presenter {
        right: 15px !important;
        width: var(--sliv-mobile-width) !important;
        max-width: 65vw !important;
    }

    .sliv__launcher {
        right: 15px !important;
    }

    .sliv__controls {
        gap: 7px !important;
    }
}

/*
 * Landscape phones can be wider than the normal mobile breakpoint while
 * still having very little vertical room. Use the configured mobile width
 * and allow JavaScript to reduce it only when the available height requires it.
 */
@media (max-width: 900px) and (orientation: landscape) {
    .sliv {
        --sliv-control-bottom: 15px;
    }

    .sliv__presenter {
        right: 15px !important;
        width: var(--sliv-landscape-width) !important;
        max-width: 65vw !important;
    }

    .sliv__launcher {
        right: 15px !important;
    }
}

@media (prefers-reduced-motion: reduce) {
    .sliv__close,
    .sliv__launcher,
    .sliv__playback {
        transition: none !important;
    }

    .sliv__launcher:hover,
    .sliv__playback:hover,
    .sliv__playback:focus-visible,
    .sliv__close:hover,
    .sliv__close:focus-visible {
        transform: none !important;
    }
}


/* Optional left-side placement, globally or per page. */
.sliv[data-sliv-side="left"] .sliv__presenter {
    right: auto !important;
    left: var(--sliv-right-offset) !important;
}

.sliv[data-sliv-side="left"] .sliv__launcher {
    right: auto !important;
    left: var(--sliv-right-offset) !important;
}

.sliv[data-sliv-side="left"] .sliv__controls {
    right: auto !important;
    left: 0 !important;
    justify-content: flex-start !important;
}

@media (max-width: 700px) {
    .sliv[data-sliv-side="left"] .sliv__presenter,
    .sliv[data-sliv-side="left"] .sliv__launcher {
        right: auto !important;
        left: 15px !important;
    }
}

@media (max-width: 900px) and (orientation: landscape) {
    .sliv[data-sliv-side="left"] .sliv__presenter,
    .sliv[data-sliv-side="left"] .sliv__launcher {
        right: auto !important;
        left: 15px !important;
    }
}

/*
 * Production resilience:
 * keep the component invisible until the browser confirms that a video source
 * can be read. A fatal media error removes the component completely.
 */
.sliv[data-sliv-status="loading"] .sliv__presenter,
.sliv[data-sliv-status="loading"] .sliv__launcher {
    visibility: hidden !important;
    pointer-events: none !important;
}

.sliv[data-sliv-status="error"],
.sliv[data-sliv-status="error"] .sliv__presenter,
.sliv[data-sliv-status="error"] .sliv__launcher {
    display: none !important;
}

