// ==========================================================================
// Plyr styles
// https://github.com/selz/plyr
// ==========================================================================

// Variables
// -------------------------------

// Colors
$blue:                      #3498DB !default;
$gray-dark:                 #343F4A !default;
$gray:                      #565D64 !default;
$gray-light:                #6B7D86 !default;
$gray-lighter:              #CBD0D3 !default;
$off-white:                 #D6DADD !default;

// Font sizes
$font-size-small:           14px !default;
$font-size-base:            16px !default;

// Captions
$font-size-captions-base:   ceil($font-size-base * 1.25) !default;
$font-size-captions-medium: ceil($font-size-base * 1.5) !default;
$font-size-captions-large:  ($font-size-base * 2) !default;

// Controls
$control-spacing:           10px !default;
$controls-bg:               #fff !default;
$control-bg-hover:          $blue !default;
$control-color:             null !default;
$control-color-hover:       null !default;

// Contrast
@if lightness($controls-bg) >= 65% {
  $control-color: $gray-light;
} @else {
  $control-color: $gray-lighter;
}
@if lightness($control-bg-hover) >= 65% {
  $control-color-hover: $gray;
} @else {
  $control-color-hover: #fff;
}

// Tooltips
$tooltip-bg:                $controls-bg !default;
$tooltip-color:             $control-color !default;
$tooltip-padding:           $control-spacing !default;   
$tooltip-arrow-size:        5px !default;
$tooltip-radius:            3px !default;

// Progress
$progress-bg:               rgba(red($gray), green($gray), blue($gray), .2) !default;
$progress-playing-bg:       $blue !default;
$progress-buffered-bg:      rgba(red($gray), green($gray), blue($gray), .25) !default;
$progress-loading-size:     40px !default;
$progress-loading-bg:       rgba(0,0,0, .15) !default;

// Volume
$volume-track-height:       6px !default;
$volume-track-bg:           darken($controls-bg, 10%) !default;
$volume-thumb-height:       ($volume-track-height * 2) !default;
$volume-thumb-width:        ($volume-track-height * 2) !default;
$volume-thumb-bg:           $control-color !default;
$volume-thumb-bg-focus:     $control-bg-hover !default;

// Breakpoints
$bp-control-split:          560px !default; // When controls split into left/right
$bp-captions-large:         768px !default; // When captions jump to the larger font size

// Animation
// ---------------------------------------

@keyframes progress {
    to { background-position: $progress-loading-size 0; }
}

// Font smoothing
@mixin font-smoothing($mode: on)
{
  @if ($mode == 'on') {
    -moz-osx-font-smoothing: grayscale;
    -webkit-font-smoothing: antialiased;
  }
  @else if ($mode == 'off') {
    -moz-osx-font-smoothing: auto;
    -webkit-font-smoothing: subpixel-antialiased;
  }
}

// Contain floats: nicolasgallagher.com/micro-clearfix-hack/
@mixin clearfix()
{
    zoom: 1;
    &:before, 
    &:after { content: ''; display: table; }
    &:after { clear: both; }
}
// Tab focus styles
@mixin tab-focus()
{
    outline: thin dotted #000;
    outline-offset: 0;
}

// <input type="range"> styling
@mixin volume-thumb()
{
    height: $volume-thumb-height;
    width: $volume-thumb-width;
    background: $volume-thumb-bg;
    border: 0;
    border-radius: ($volume-thumb-height / 2);
    transition: background .3s ease;
    cursor: ew-resize;
}
@mixin volume-track()
{
    height: $volume-track-height;
    background: $volume-track-bg;
    border: 0;
    border-radius: ($volume-track-height / 2);
}
@mixin seek-thumb()
{
    background: transparent;
    border: 0;
    width: ($control-spacing * 2);
    height: $control-spacing;
}
@mixin seek-track()
{
    background: none;
    border: 0;
}

// Screen reader only
// -------------------------------
.sr-only {
    position: absolute !important;
    clip: rect(1px, 1px, 1px, 1px);
    padding: 0 !important;
    border: 0 !important;
    height: 1px !important;
    width: 1px !important;
    overflow: hidden;
}

// Styles
// -------------------------------
// Base 
.player {
    position: relative;
    max-width: 100%;
    min-width: 290px;

    // border-box everything
    // http://paulirish.com/2012/box-sizing-border-box-ftw/
    &,
    *,
    *::after,
    *::before { 
        box-sizing: border-box; 
    }

    // For video
    &-video-wrapper {
        position: relative;
    }
    video,
    audio {
        width: 100%;
        height: auto;
        vertical-align: middle;
    }

    // For embeds
    &-video-embed {
        padding-bottom: 56.25%; /* 16:9 */
        height: 0;
        
        iframe {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            border: 0;
        }
    }

    // Captions
    &-captions {
        display: none;
        position: absolute;
        bottom: 0;
        left: 0;
        width: 100%;
        padding: ($control-spacing * 2) ($control-spacing * 2) ($control-spacing * 3);
        color: #fff;
        font-size: $font-size-captions-base;
        text-align: center;
        @include font-smoothing();

        span {
            border-radius: 2px;
            padding: 3px 10px;
            background: rgba(0,0,0, .9);
        }
        span:empty {
            display: none;
        }

        @media (min-width: $bp-captions-large) {
            font-size: $font-size-captions-medium;
        }
    }
    &.captions-active &-captions {
        display: block;
    }
    &.fullscreen-active &-captions {
        font-size: $font-size-captions-large;
    }

    // Player controls
    &-controls {
        @include clearfix();
        @include font-smoothing();
        position: relative;
        padding: $control-spacing;
        background: $controls-bg;
        line-height: 1;
        text-align: center;
        box-shadow: 0 1px 1px rgba(red($gray-dark), green($gray-dark), blue($gray-dark), .2);

        // Layout
        &-right {
            display: block;
            margin: $control-spacing auto 0;
        }
        @media (min-width: $bp-control-split) {
            &-left {
                float: left;
            }
            &-right {
                float: right;
                margin-top: 0;
            }
        }
        
        // Buttons
        button {
            display: inline-block;
            vertical-align: middle;
            margin: 0 2px;
            padding: ($control-spacing / 2) $control-spacing;
            overflow: hidden;
            border: 0;
            background: transparent;
            border-radius: 3px;
            cursor: pointer;
            color: $control-color;
            transition: background .3s ease, color .3s ease, opacity .3s ease;
            
            svg {
                width: 18px;
                height: 18px;
                display: block;
                fill: currentColor;
                transition: fill .3s ease;
            }
        
            // Hover and tab focus
            &.tab-focus,
            &:hover {
                background: $control-bg-hover;
                color: $control-color-hover;
            }
            // Default focus
            &:focus {
                outline: 0;
            }
        }
        
        // Hide toggle icons by default
        .icon-exit-fullscreen,
        .icon-muted,
        .icon-captions-on {
            display: none;
        }
        
        // Time display
        .player-time {
            display: inline-block;
            vertical-align: middle;
            margin-left: $control-spacing;
            color: $control-color;
            font-weight: 600;
            font-size: $font-size-small;
            @include font-smoothing();
        }

        // Media duration hidden on small screens
        .player-time + .player-time {
            display: none;

            @media (min-width: $bp-control-split) {
                display: inline-block;
            }

            // Add a slash in before
            &::before {
                content: '\2044';
                margin-right: $control-spacing;
            }
        }
    }

    // Tooltips
    &-tooltip {
        position: absolute;
        z-index: 2;
        bottom: 100%;
        margin-bottom: $tooltip-padding;
        padding: $tooltip-padding ($tooltip-padding * 1.5);

        opacity: 0;
        background: $tooltip-bg;
        border-radius: $tooltip-radius;
        color: $tooltip-color;
        font-size: $font-size-small;
        line-height: 1.5;
        font-weight: 600;

        transform: translate(-50%, ($tooltip-padding * 3)) scale(0);
        transform-origin: 50% 100%;
        transition: transform .2s .1s ease, opacity .2s .1s ease;

        &::after {
            content: '';
            display: block;
            position: absolute;
            left: 50%;
            bottom: -$tooltip-arrow-size;
            margin-left: -$tooltip-arrow-size;
            width: 0;
            height: 0;
            transition: inherit;
            border-style: solid;
            border-width: $tooltip-arrow-size $tooltip-arrow-size 0 $tooltip-arrow-size;
            border-color: $controls-bg transparent transparent;
        }
    }
    button:hover .player-tooltip,
    button:focus .player-tooltip {
        opacity: 1;
        transform: translate(-50%, 0) scale(1);
    }
    button:hover .player-tooltip {
        z-index: 3;
    }

    // Player progress
    // <progress> element
    &-progress {
        position: absolute;
        bottom: 100%;
        left: 0;
        right: 0;
        width: 100%;
        height: $control-spacing;
        background: $progress-bg;

        &-buffer[value],
        &-played[value],
        &-seek[type='range'] {
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: $control-spacing;
            margin: 0;
            padding: 0;
            vertical-align: top;

            -webkit-appearance: none;
            -moz-appearance: none;
            border: none;
            background: transparent;
        }
        &-buffer[value],
        &-played[value] {   
            &::-webkit-progress-bar {
                background: transparent;
            }

            // Inherit from currentColor;
            &::-webkit-progress-value {
                background: currentColor;
            }
            &::-moz-progress-bar {
                background: currentColor;
            }
        }
        &-played[value] {
            z-index: 2;
            color: $progress-playing-bg;
        }
        &-buffer[value] {
            color: $progress-buffered-bg;
        }

        // Seek control
        // <input[type='range']> element
        // Specificity is for bootstrap compatibility
        &-seek[type='range'] {
            z-index: 4;
            cursor: pointer;
            outline: 0;

            // Webkit
            &::-webkit-slider-runnable-track {
                @include seek-track();
            }
            &::-webkit-slider-thumb {
                -webkit-appearance: none;
                @include seek-thumb();
            }

            // Mozilla
            &::-moz-range-track {
                @include seek-track();
            }
            &::-moz-range-thumb {
                -moz-appearance: none;
                @include seek-thumb();
            }
            
            // Microsoft
            &::-ms-track {
                color: transparent;
                @include seek-track();
            }
            &::-ms-fill-lower,
            &::-ms-fill-upper {
                @include seek-track();
            }
            &::-ms-thumb {
                @include seek-thumb();
            }

            &:focus {
                outline: 0;
            }
            &::-moz-focus-outer {
                border: 0;
            }
        }
    }

    // Loading state
    &.loading .player-progress-buffer {
        animation: progress 1s linear infinite;
        background-size: $progress-loading-size $progress-loading-size;
        background-repeat: repeat-x;
        background-color: $progress-buffered-bg;
        background-image: linear-gradient(
            -45deg, 
            $progress-loading-bg 25%, 
            transparent 25%, 
            transparent 50%, 
            $progress-loading-bg 50%, 
            $progress-loading-bg 75%,
            transparent 75%, 
            transparent);
        color: transparent;
    }

    // States
    &-controls [data-player='pause'],
    &.playing .player-controls [data-player='play'] {
        display: none;
    }
    &.playing .player-controls [data-player='pause'] {
        display: inline-block;
    }

    // Volume control
    // <input[type='range']> element
    // Specificity is for bootstrap compatibility
    &-volume[type='range'] {
        display: inline-block;
        vertical-align: middle;
        -webkit-appearance: none;
        -moz-appearance: none;
        width: 100px;
        margin: 0 $control-spacing 0 0;
        padding: 0;     
        cursor: pointer;
        background: transparent;
        border: none;
        
        // Webkit
        &::-webkit-slider-runnable-track {
            @include volume-track();
        }
        &::-webkit-slider-thumb {
            -webkit-appearance: none;
            margin-top: -(($volume-thumb-height - $volume-track-height) / 2);
            @include volume-thumb();
        }

        // Mozilla
        &::-moz-range-track {
            @include volume-track();
        }
        &::-moz-range-thumb {
            @include volume-thumb();
        }
        
        // Microsoft
        &::-ms-track {
            height: $volume-track-height;
            background: transparent;
            border-color: transparent;
            border-width: (($volume-thumb-height - $volume-track-height) / 2) 0;
            color: transparent;
        }
        &::-ms-fill-lower,
        &::-ms-fill-upper {
            @include volume-track();
        }
        &::-ms-thumb {
            @include volume-thumb();
        }

        &:focus {
            outline: 0;

            &::-webkit-slider-thumb {
                background: $volume-thumb-bg-focus;
            }
            &::-moz-range-thumb {
                background: $volume-thumb-bg-focus;
            }
            &::-ms-thumb {
                background: $volume-thumb-bg-focus;
            }
        }
    }

    // Hide sound controls on iOS
    // It's not supported to change volume using JavaScript:
    // https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html
    &.ios &-volume,
    &.ios [data-player='mute'],
    &-audio.ios &-controls-right {
        display: none;
    }
    // Center buttons so it looks less odd
    &-audio.ios &-controls-left {
        float: none;
    }

    // Audio specific styles
    // Position the progress within the container
    &-audio .player-controls {
        padding-top: ($control-spacing * 2);
    }
    &-audio .player-progress {
        bottom: auto;
        top: 0;
        background: $off-white;
    }

    // Full screen mode
    &-fullscreen,
    &.fullscreen-active {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        height: 100%;
        width: 100%;
        z-index: 10000000;
        background: #000;

        video {
            height: 100%;
        }
        .player-video-wrapper {
            height: 100%;
            width: 100%;
        }
        .player-controls {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
        }

        // Hide controls when playing in full screen
        &.fullscreen-hide-controls.playing {
            .player-controls {
                transform: translateY(100%) translateY($control-spacing / 2);
                transition: transform .3s .2s ease;
            }
            &.player-hover .player-controls {
                transform: translateY(0);
            }
            .player-captions {
                bottom: ($control-spacing / 2);
                transition: bottom .3s .2s ease;
            }
        }

        // Captions
        .player-captions,
        &.fullscreen-hide-controls.playing.player-hover .player-captions {
            top: auto;
            bottom: 90px;

            @media (min-width: $bp-control-split) {
                bottom: 60px;
            }
        }
    }

    // Change icons on state change
    &.fullscreen-active .icon-exit-fullscreen,
    &.muted .player-controls .icon-muted,
    &.captions-active .player-controls .icon-captions-on {
        display: block;

        & + svg {
            display: none;
        }
    }

    // Some options are hidden by default
    [data-player='captions'],
    [data-player='fullscreen'] {
        display: none;
    }
    &.captions-enabled [data-player='captions'],
    &.fullscreen-enabled [data-player='fullscreen'] {
        display: inline-block;
    }
}
