/*
 * Copyright (C) 2020 Apple Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API

:-webkit-full-screen {
    background-color: white;
    z-index: 2147483647 !important;
    width: 100%;
    height: 100%;
}

:root:-webkit-full-screen-document:not(:-webkit-full-screen), :root:-webkit-full-screen-ancestor {
    overflow: hidden !important;
}

:-webkit-full-screen-ancestor:not(iframe) {
    z-index: auto !important;
    position: static !important;
    opacity: 1 !important;
    transform: none !important;
    mask: none !important;
    clip: none !important;
    filter: none !important;
    transition: none !important;
    -webkit-box-reflect: none !important;
    perspective: none !important;
    transform-style: flat !important;
    overflow: visible !important;
    contain: none !important;
}

video:-webkit-full-screen, audio:-webkit-full-screen {
    background-color: transparent !important;
    position: static !important;
    margin: 0 !important;
    height: 100% !important;
    width: 100% !important;
    flex: 1 !important;
    display: block !important;
    transition: none !important;
}

:-webkit-full-screen video,
video:-webkit-full-screen {
    -webkit-cursor-visibility: auto-hide;
}

img:-webkit-full-screen {
    width: auto;
    height: 100%;
    max-width: 100%;
}

iframe:-webkit-full-screen {
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    position: fixed !important;
    height: 100% !important;
    width: 100% !important;
    left: 0 !important;
    top: 0 !important;
    max-width: none !important;
    max-height: none !important;
}

#endif
