/*
 * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.
 * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>
 *
 * 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.
 * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE AND ITS 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 APPLE OR ITS 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.
 */

:root {
    height: 100%;
    overflow: hidden;
}

:root {
    --accent-color: #03a9f4;
    --accent-color-b: #2196f3;
    --accent-color-c: #3e82f7;
    --toolbar-bg-color: #f3f3f3;
    --toolbar-hover-bg-color: #eaeaea;
    --selection-fg-color: white;
    --selection-inactive-bg-color: #dadada;
    --tab-selected-fg-color: #333;
    --tab-selected-bg-color: var(--toolbar-bg-color);
    --drop-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05),
                   0 2px 4px rgba(0, 0, 0, 0.2),
                   0 2px 6px rgba(0, 0, 0, 0.1);
    --divider-color: #d0d0d0;
    --focus-ring-inactive-shadow: 0 0 0 1px #e0e0e0;
}

.-theme-with-dark-background {
    --accent-color: #32699f;
    --accent-color-b: #2f84da;
    --accent-color-c: #1f4061;
    --toolbar-bg-color: #333333;
    --toolbar-hover-bg-color: #202020;
    --selection-fg-color: #cdcdcd;
    --selection-inactive-bg-color: #333333;
    --tab-selected-fg-color: #eaeaea;
    --tab-selected-bg-color: black;
    --drop-shadow: 0 0 0 1px rgba(255, 255, 255, 0.2),
                   0 2px 4px 2px rgba(0, 0, 0, 0.2),
                   0 2px 6px 2px rgba(0, 0, 0, 0.1);
    --divider-color: #525252;
    --focus-ring-inactive-shadow: 0 0 0 1px #5a5a5a;
}

:root {
    --focus-ring-active-shadow: 0 0 0 1px var(--accent-color);
    --selection-bg-color: var(--accent-color-b);
    --divider-border: 1px solid var(--divider-color);
}

body {
    height: 100%;
    width: 100%;
    position: relative;
    overflow: hidden;
    margin: 0;
    cursor: default;
    font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;
    font-size: 12px;
    tab-size: 4;
    -webkit-user-select: none;
    color: #222;
}

.platform-linux {
    color: rgb(48, 57, 66);
    font-family: Roboto, Ubuntu, Arial, sans-serif;
}

.platform-mac {
    color: rgb(48, 57, 66);
    font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;
}

.platform-windows {
    font-family: 'Segoe UI', Tahoma, sans-serif;
}

.panel {
    display: flex;
    overflow: hidden;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 0;
    background-color: white;
}

.panel-sidebar {
    overflow-x: hidden;
    background-color: var(--toolbar-bg-color);
}

iframe.extension {
    flex: auto;
    width: 100%;
    height: 100%;
}

iframe.panel.extension {
    display: block;
    height: 100%;
}
