/*
 * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.
 * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>
 * Copyright (C) 2011 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:
 *
 * 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 GOOGLE INC. 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 GOOGLE INC.
 * 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.
 */

.tabbed-pane {
    flex: auto;
    overflow: hidden;
}

.tabbed-pane-content {
    position: relative;
    overflow: auto;
    flex: auto;
    display: flex;
    flex-direction: column;
}

.tabbed-pane-content.has-no-tabs {
    background-color: lightgray;
}

.tabbed-pane-placeholder {
    font-size: 14px;
    text-align: center;
    margin-top: 20px;
    text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0;
    line-height: 28px;
    overflow: hidden;
}

.tabbed-pane-placeholder-row {
    display: flex;
    white-space: nowrap;
}

.tabbed-pane-placeholder-key {
    flex: 1;
    text-align: right;
    padding-right: 14px;
    overflow: hidden;
    text-overflow: ellipsis;
}

.tabbed-pane-placeholder-value {
    flex: 1;
    text-align: left;
    padding-left: 14px;
}

.tabbed-pane-header {
    display: flex;
    flex: 0 0 27px;
    border-bottom: 1px solid #ccc;
    overflow: visible;
    width: 100%;
    background-color: var(--toolbar-bg-color);
}

.tabbed-pane-header-contents {
    flex: auto;
    pointer-events: none;
    margin-left: 0;
    position: relative;
}

.tabbed-pane-header-contents > * {
    pointer-events: initial;
}

.tabbed-pane-header-tab-icon {
    min-width: 14px;
    display: flex;
    align-items: center;
    margin-right: 2px;
}

.tabbed-pane-header-tab {
    float: left;
    padding: 2px 0.8em;
    height: 26px;
    line-height: 15px;
    white-space: nowrap;
    cursor: default;
    display: flex;
    align-items: center;
    color: #5a5a5a;
}

.tabbed-pane-header-tab.closeable {
    padding-right: 4px;
}

.tabbed-pane-header-tab:hover,
.tabbed-pane-shadow .tabbed-pane-header-tab[data-keyboard-focus="true"]:focus {
    color: #333;
    background-color: var(--toolbar-hover-bg-color);
}

.tabbed-pane-header-tab-title {
    text-overflow: ellipsis;
    overflow: hidden;
}

.tabbed-pane-header-tab.measuring {
    visibility: hidden;
}

.tabbed-pane-header-tab.selected {
    border-bottom: none;
}

.tabbed-pane-header-tab.selected {
    background-color: var(--tab-selected-bg-color);
    color: var(--tab-selected-fg-color);
}

.tabbed-pane-header-tab.dragging {
    position: relative;
    box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);
    background-color: #e5e5e5;
}

.tabbed-pane-header-tab .tabbed-pane-close-button {
    margin: 0 -3px 0 4px;
    visibility: hidden;
}

.tabbed-pane-header-tab:hover .tabbed-pane-close-button,
.tabbed-pane-header-tab.selected .tabbed-pane-close-button {
    visibility: visible;
}

.tabbed-pane-header-tabs-drop-down-container {
    float: left;
    opacity: 0.8;
    cursor: pointer;
    display: flex;
    align-items: center;
    height: 100%;
}

.tabbed-pane-header-tabs-drop-down-container > .chevron-icon {
    background-color: hsla(0,0%,20%,1);
    display: block;
}

.tabbed-pane-header-tabs-drop-down-container:hover {
    background-color: rgb(229, 229, 229);
}

.tabbed-pane-header-tabs-drop-down-container.measuring {
    visibility: hidden;
}

.tabbed-pane-header-tabs-drop-down-container:hover {
    opacity: 1.0;
}

.tabbed-pane-header-tabs-drop-down-container:active {
    opacity: 0.8;
}

/* Web page style */

.tabbed-pane-shadow.vertical-tab-layout {
    flex-direction: row !important;
}

.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header {
    background-color: transparent;
    border: none transparent !important;
    width: auto;
    flex: 0 0 auto;
    flex-direction: column;
    padding-top: 10px;
    overflow: hidden;
}

.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-content {
    padding: 10px 10px 10px 0;
    overflow-x: hidden;
}

.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-contents {
    margin: 0;
    flex: none;
}

.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-tabs {
    display: flex;
    flex-direction: column;
    width: 120px;
}

.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-tab {
    background-color: transparent;
    border: none transparent;
    font-weight: normal;
    text-shadow: none;
    color: #777;
    height: 26px;
    padding-left: 10px;
    border-left: 6px solid transparent;
    margin: 0;
    display: flex;
    align-items: center;
}

.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-tab:not(.selected) {
    cursor: pointer !important;
}

.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-tab.selected {
    color: inherit;
    border: none transparent;
    border-left: 6px solid #666;
}

.tabbed-pane-tab-slider {
    height: 2px;
    position: absolute;
    bottom: -1px;
    background-color: #03a9f4;
    left: 0;
    z-index: 50;
    transform-origin: 0 100%;
    transition: transform 150ms cubic-bezier(0, 0, 0.2, 1);
    visibility: hidden;
}

:host-context(.-theme-with-dark-background) .tabbed-pane-tab-slider {
    display: none;
}

@media (-webkit-min-device-pixel-ratio: 1.1) {
    .tabbed-pane-tab-slider {
        border-top: none;
    }
}

.tabbed-pane-tab-slider.enabled {
    visibility: visible;
}

.tabbed-pane-header-tab.disabled {
    opacity: 0.5;
    pointer-events: none;
}

.tabbed-pane-left-toolbar {
    margin-right: -4px;
    flex: none;
}

.tabbed-pane-right-toolbar {
    margin-left: -4px;
    flex: none;
}
