/*
 * Copyright (C) 2016 Devin Rousso <webkit@devinrousso.com>. All rights reserved.
 * Copyright (C) 2016 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. 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 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.
 */

.content-view.settings .navigation-bar {
    background-color: white;
}

.content-view.settings .navigation-bar.invisible {
    visibility: hidden;
}

.content-view.settings .navigation-bar .item.radio.button.text-only {
    color: inherit;
    background-color: inherit;
}

.content-view.settings .navigation-bar .item.radio.button.text-only:before {
    display: none;
}

.content-view.settings .navigation-bar .item.radio.button.text-only.selected {
    color: var(--selected-background-color)
}

.content-view.settings > .settings-view {
    height: 100%;
    overflow-y: auto;
    padding-bottom: calc(var(--console-prompt-min-height) + 10px);
}

.content-view.settings > .settings-view > .separator {
    height: 1em;
}

.content-view.settings > .settings-view > .container {
    display: flex;
    margin-top: 1em;
    font-size: 13px;
}

.content-view.settings > .settings-view > .container.hidden {
    display: none;
}

.content-view.settings > .settings-view > .container-centered {
    display: block;
    text-align: center;
}

.content-view.settings > .settings-view > .container button {
    -webkit-margin-end: 4px;
    font-size: inherit;
}

.content-view.settings > .settings-view > .container > .title {
    width: 50%;
    -webkit-margin-end: 6px;
    text-align: end;
}

.content-view.settings > .settings-view > .container > .editor-group {
    display: flex;
    flex-direction: column;
}

.content-view.settings > .settings-view > .container > .editor-group > .editor {
    --settings-editor-child-margin-top: 0;
}

.content-view.settings > .settings-view > .container > .editor-group > .editor:first-child > * {
    margin-top: var(--settings-editor-child-margin-top);
}

.content-view.settings > .settings-view > .container > .editor-group > .editor input {
    font-size: inherit;
}

.content-view.settings > .settings-view > .container > .editor-group > .editor input[type="checkbox"] {
    -webkit-margin-end: 4px;
    /* Vertically align <select> with the group title text. */
    font-size: 16px;
}

.content-view.settings > .settings-view > .container > .editor-group > .editor select {
    /*
    To set the font-size of <select> to be exactly 13px, it needs to be set to 16px.
    Setting the font-size to 13px actually sets it to 11px.
    */
    font-size: 16px;

    /* Vertically align <select> with the group title text. */
    --settings-editor-child-margin-top: -2px;
}

.content-view.settings > .settings-view > .container > .editor-group > .editor input[type="number"] {
    max-width: 48px;
    -webkit-margin-start: 2px;
    -webkit-margin-end: 5px;
    padding-top: 0;
    padding-bottom: 0;
    text-align: end;
    vertical-align: 1px;

    /* Vertically align <input> with the group title text. */
    --settings-editor-child-margin-top: -2px;
}

.content-view.settings > .settings-view > .container > .editor-group > .editor input[type="text"] {
    padding-top: 0;
    padding-bottom: 0;
    vertical-align: 1px;

    /* Vertically align <input> with the group title text. */
    --settings-editor-child-margin-top: -2px;
}

@media (prefers-color-scheme: dark) {
    .content-view.settings .navigation-bar {
        background-color: var(--background-color-content);
    }

    .content-view.settings .navigation-bar .item.radio.button.text-only.selected {
        color: var(--glyph-color-active);
    }
}
