/*
 * 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;
    width: fit-content;
    margin: 20px auto 0px;
    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;
    padding: 0 5px;
}

.tabbed-pane-placeholder-row[data-keyboard-focus="true"]:focus {
  outline-width: unset;
}

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

.tabbed-pane-no-shortcut {
  flex: 1;
  text-align: center;
}

.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,
.tabbed-pane-header-tabs-drop-down-container[data-keyboard-focus="true"]:focus {
    background-color: rgba(0, 0, 0, 0.08);
}

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

.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: var(--accent-color);
    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;
}
