/*
 * Copyright (C) 2009, 2010, 2011, 2013, 2014 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_VIDEO) && ENABLE_VIDEO && !(defined(ENABLE_MODERN_MEDIA_CONTROLS) && ENABLE_MODERN_MEDIA_CONTROLS)

/* media controls */

audio {
    width: 200px;
    height: 16px;
}

::-webkit-media-controls {
    width: inherit;
    height: inherit;
    position: relative;
    display: flex !important;
    align-items: flex-start;
    justify-content: flex-end;
    flex-direction: column;
}

:is(audio, video)::-webkit-media-controls-panel {
    display: flex;
    direction: ltr;
    flex-direction: row;
    align-items: center;
    user-select: none;
    position: relative;
    bottom: 0;
    width: 100%;
    z-index: 0;
    overflow: hidden;
    height: 16px;
    text-align: right;
}

video:-webkit-full-page-media {
    margin: auto;
    position: absolute;
    inset: 0;
}

video:-webkit-full-page-media::-webkit-media-controls-panel {
    bottom: 0px;
}

:is(audio, video)::-webkit-media-controls-mute-button,
:is(audio, video)::-webkit-media-controls-play-button {
    display: flex;
    width: 16px;
    height: 16px;
    background-color: initial;
    border: initial;
    color: inherit;
}

:is(audio, video)::-webkit-media-controls-overlay-play-button {
    display: none;
}

:is(audio, video)::-webkit-media-controls-timeline-container {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-end;
    flex: 1 1;
    user-select: none;
    height: 16px;
    min-width: 0;
}

:is(audio, video)::-webkit-media-controls-current-time-display,
:is(audio, video)::-webkit-media-controls-time-remaining-display {
    display: none;
}

:is(audio, video)::-webkit-media-controls-timeline {
    display: flex;
    flex: 1 1;
    height: 16px;
    padding: 0px 2px;
    background-color: initial;
    border: initial;
    color: inherit;
    margin: initial;
    min-width: 0;
}

:is(audio, video)::-webkit-media-controls-volume-slider {
    background-color: initial !important;
    border: initial !important;
    color: inherit !important;
    margin: initial !important;
}

:is(audio, video)::-webkit-media-controls-seek-back-button,
:is(audio, video)::-webkit-media-controls-seek-forward-button,
:is(audio, video)::-webkit-media-controls-fullscreen-button,
:is(audio, video)::-webkit-media-controls-toggle-closed-captions-button {
    display: flex;
    width: 16px;
    height: 16px;
    background-color: initial;
    border: initial;
    color: inherit;
}

:is(audio, video)::-webkit-media-controls-rewind-button,
:is(audio, video)::-webkit-media-controls-return-to-realtime-button {
    display: none;
    background-color: initial;
    border: initial;
    color: inherit;
}

:is(audio, video)::-webkit-media-controls-closed-captions-container,
:is(audio, video)::-webkit-media-controls-closed-captions-track-list,
:is(audio, video)::-webkit-media-controls-fullscreen-volume-slider,
:is(audio, video)::-webkit-media-controls-fullscreen-volume-min-button,
:is(audio, video)::-webkit-media-controls-fullscreen-volume-max-button {
    display: none;
}

:is(audio, video)::-webkit-media-controls-volume-slider-mute-button {
    display: none !important;
    background-color: initial !important;
    border: initial !important;
    color: inherit !important;
}

video::-webkit-media-text-track-container {
    position: relative;
    width: 100%;
    overflow: hidden;
    padding-bottom: 5px;

    text-align: center;
    color: rgba(255, 255, 255, 1);

    letter-spacing: normal;
    word-spacing: normal;
    text-transform: none;
    text-indent: 0;
    text-decoration: none;
    pointer-events: none;
    user-select: none;
    word-break: break-word;

    flex: 1 1;

    -webkit-line-box-contain: block inline-box replaced;
}

video::cue {
    background-color: rgba(0, 0, 0, 0.8);
}

video::-webkit-media-text-track-region {
    position: absolute;
    line-height: 5.33vh;
    writing-mode: horizontal-tb;
    background: rgba(0, 0, 0, 0.8);
    color: rgba(255, 255, 255, 1);
    word-wrap: break-word;
    overflow-wrap: break-word;
    overflow: hidden;
}

video::-webkit-media-text-track-region-container {
    position: relative;

    display: flex;
    flex-flow: column;
    flex-direction: column;
}

video::-webkit-media-text-track-region-container.scrolling {
    transition: top 433ms linear;
}

video::-webkit-media-text-track-display {
    position: absolute;
    overflow: hidden;
    white-space: pre-wrap;
    box-sizing: border-box;
    font: 22px sans-serif;
    flex: 0 0 auto;
}

video::cue(:future) {
    color: gray;
}

video::-webkit-media-text-track-container b {
    font-weight: bold;
}

video::-webkit-media-text-track-container u {
    text-decoration: underline;
}

video::-webkit-media-text-track-container i {
    font-style: italic;
}

#endif
