/*
 * Copyright (C) 2011 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 COMPUTER, 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 COMPUTER, 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. 
 */

/* alternate media controls - Extend fullscreen.css */

video:-webkit-full-screen::-webkit-media-controls-panel {
    -webkit-align-items: flex-start !important;
    -webkit-justify-content: flex-end !important;
    -webkit-appearance: none !important;

    padding: 12px 0 0 10px !important;
    width: 430px !important;
    height: 48px !important;
    margin: 0 auto 50px auto !important;
    
    background-image: -webkit-gradient(
        linear,
        left top,
        left bottom,
        color-stop(0, rgba(30, 30, 30, .97)),
        color-stop(0.333, rgba(45, 45, 45, .97)),
        color-stop(0.35,  rgba(25, 25, 25, .97)),
        color-stop(0.366, rgba(25, 25, 25, .97)),
        color-stop(0.366, rgba(12, 12, 12, .97)),
        color-stop(1, rgba(19, 19, 19, .97))
    ) !important;

    -webkit-box-shadow: 
        inset 0 -1px 1px rgba(0, 0, 0, 0.5),
        inset 0  1px 0 0px   rgba(255, 255, 255, 0.15),
        inset 0 -1px 0 0px   rgba(202, 202, 202, 0.09),
        0  0   0 1px rgba(0, 0, 0, 0.5);
    border-radius: 8px !important;

    -webkit-transition: opacity 0.3s linear !important;
}

video:-webkit-animating-full-screen-transition::-webkit-media-controls-panel {
    opacity: 0 ! important;
    -webkit-transition: opacity 0 ! important;
}

video:-webkit-full-screen::-webkit-media-controls-mute-button {
    display: none;
}

video:-webkit-full-screen::-webkit-media-controls-volume-slider-container {
    display: none;
}

video:-webkit-full-screen::-webkit-media-controls-volume-slider {
    display: none;
}

video:-webkit-full-screen::-webkit-media-controls-volume-slider-mute-button {
    display: none;
}

video:-webkit-full-screen::-webkit-media-controls-fullscreen-volume-min-button {
    -webkit-appearance: media-mute-button;
    display: block;
    position: absolute;
    left: 11px;
    top: 15px;
    width: 17px;
    height: 14px;
}

video:-webkit-full-screen::-webkit-media-controls-fullscreen-volume-slider {
    -webkit-appearance: media-fullscreen-volume-slider;
    display: block;
    position: absolute;
    left: 28px;
    top: 14px;
    height: 11px;
    width: 50px;
}

video:-webkit-full-screen::-webkit-media-controls-fullscreen-volume-max-button {
    -webkit-appearance: media-mute-button;
    display: block;
    position: absolute;
    left: 84px;
    top: 15px;
    width: 17px;
    height: 14px;
}

video:-webkit-full-screen::-webkit-media-controls-play-button {
    position: absolute;
    width: 22px;
    height: 23px;
    left: 209px;
    top: 9px;
}

video:-webkit-full-screen::-webkit-media-controls-rewind-button {
    position: absolute;
    left: 162px;
    top: 13px;
    width: 18px;
    height: 18px;
}

video:-webkit-full-screen::-webkit-media-controls-seek-back-button {
    position: absolute;
    display: -webkit-flex;
    width: 23px;
    height: 16px;
    left: 162px;
    top: 13px;
}

video:-webkit-full-screen::-webkit-media-controls-return-to-realtime-button {
    position: absolute;
    display: -webkit-flex;
    width: 29px;
    height: 16px;
    left: 262px;
    top: 13px;
}

video:-webkit-full-screen::-webkit-media-controls-seek-forward-button {
    position: absolute;
    display: -webkit-flex;
    width: 23px;
    height: 16px;
    left: 262px;
    top: 13px;
}

video:-webkit-full-screen::-webkit-media-controls-timeline-container {
    height: auto;
    width: 420px;
    position: absolute;
    bottom: 9px;
    left: 8px;
    right: 8px;
}

video:-webkit-full-screen::-webkit-media-controls-status-display {
    width: 420px;
    position: absolute;
    bottom: 9px;
    left: 8px;
    right: 8px;
}

video:-webkit-full-screen::-webkit-media-controls-closed-captions-container {
    bottom: 64px;
    right: 38px;
}

video:-webkit-full-screen::-webkit-media-controls-closed-captions-track-list {
    max-height: 500px;
}
