/*
 * 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;
}

.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;
}
