/*
 * Copyright (C) 2013 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.
 */

/*
 * This is the UA StyleSheet for <object> and <embed> elements.
 *
 * Such elements, when snapshotted (paused), will contain a ShadowRoot
 * with the following structure:
 *
 * <object>
 *     #ShadowRoot
 *         <div pseudo="-webkit-snapshotted-plugin-content">
 *             <div class="snapshot-overlay" aria-label="[Title]: [Subtitle]" role="button">
 *                 <div class="snapshot-label">
 *                     <div class="snapshot-title">[Title]</div>
 *                     <div class="snapshot-subtitle">[Subtitle]</div>
 *                 </div>
 *             </div>
 *         </div>
 */

embed::-webkit-snapshotted-plugin-content,
object::-webkit-snapshotted-plugin-content
{
    position: relative;
    display: inline-block;
    width: 100%;
    height: 100%;
}

embed::-webkit-snapshotted-plugin-content > .snapshot-overlay,
object::-webkit-snapshotted-plugin-content > .snapshot-overlay
{
    position: absolute;
    top: 5px;
    right: 5px;
    bottom: 5px;
    left: 5px;
    background-color: rgba(255, 255, 255, 0.75);
    cursor: pointer;
    display: flex;
    justify-content: center;
    align-items: center;
}

embed::-webkit-snapshotted-plugin-content > .snapshot-overlay > .snapshot-label,
object::-webkit-snapshotted-plugin-content > .snapshot-overlay > .snapshot-label
{
    color: black;
    -webkit-user-select: none;
}

embed::-webkit-snapshotted-plugin-content > .snapshot-overlay > .snapshot-label > div,
object::-webkit-snapshotted-plugin-content > .snapshot-overlay > .snapshot-label > div
{
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

embed::-webkit-snapshotted-plugin-content > .snapshot-overlay > .snapshot-label > .snapshot-title,
object::-webkit-snapshotted-plugin-content > .snapshot-overlay > .snapshot-label > .snapshot-title
{
    font-weight: bold;
}

embed::-webkit-snapshotted-plugin-content > .snapshot-overlay > .snapshot-label > .snapshot-subtitle,
object::-webkit-snapshotted-plugin-content > .snapshot-overlay > .snapshot-label > .snapshot-subtitle
{
    font-style: italic;
    color: #444;
}
