/*
 * Copyright (C) 2013 Google 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:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * 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.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "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 THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR 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.
 */

.screencast-navigation {
    -webkit-flex-direction: row;
    display: -webkit-flex;
    height: 26px;
    position: relative;
}

.screencast-navigation button {
    -webkit-border-radius: 2px;
    background-color: transparent;
    background-image: -webkit-image-set(
        url(Images/navigationControls.png) 1x,
        url(Images/navigationControls_2x.png) 2x);
    background-clip: content-box;
    background-origin: content-box;
    background-repeat: no-repeat;
    border: 1px solid transparent;
    height: 23px;
    padding: 3px 2px 1px;
    width: 23px;
}

.screencast-navigation button:hover {
    border-color: #ccc;
}

.screencast-navigation button:active {
    border-color: #aaa;
}

.screencast-navigation button[disabled] {
    opacity: 0.5;
}

.screencast-navigation button.back {
    background-position-x: -1px;
}

.screencast-navigation button.forward {
    background-position-x: -18px;
}

.screencast-navigation button.reload {
    background-position-x: -37px;
}

.screencast-navigation input {
    -webkit-flex: 1;
    border: 1px solid #aaa;
    border-radius: 2px;
    margin: 3px;
    padding-left: 5px;
}

.screencast-navigation input:focus {
    border: 1px solid #aaa;
    outline: none !important;
}

.screencast-navigation .progress {
    background-color: blue;
    height: 3px;
    left: 0;
    position: absolute;
    top: 100%;  /* Align with the bottom edge of the parent. */
    width: 0;
    z-index: 2;  /* Above .screencast-glasspane. */
}

.screencast-viewport {
    border: 20px solid #333;
    border-radius: 20px;
    position: absolute;
    top: 36px;
    left: 10px;
    right: 10px;
    bottom: 10px;
}

.screencast canvas {
    position: absolute;
    width: 100%;
    height: 100%;
}

.screencast-px {
    color: rgb(128, 128, 128);
}

.screencast-element-title {
    position: absolute;
    z-index: 10;
}

.screencast-tag-name {
    /* Keep this in sync with view-source.css (.webkit-html-tag) */
    color: rgb(136, 18, 128);
}

.screencast-node-id {
    /* Keep this in sync with view-source.css (.webkit-html-attribute-value) */
    color: rgb(26, 26, 166);
}

.screencast-class-name {
    /* Keep this in sync with view-source.css (.webkit-html-attribute-name) */
    color: rgb(153, 69, 0);
}

.screencast-glasspane {
  -webkit-box-orient: horizontal;
  -webkit-box-align: center;
  -webkit-box-pack: center;
  background-color: rgba(255, 255, 255, 0.8);
  bottom: 0;
  display: -webkit-box;
  left: 0;
  position: absolute;
  right: 0;
  top: 26px;  /* Align with the botton edge of .screencast .navigation. */
  font-size: 30px;
}
