/*
 * Copyright 2016-present Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 ONOS GUI -- Button Service (theme) -- CSS file
 */


/* === SELECTED BUTTONS === */

/* Selected toggle / radio button */
.light .toggleButton.selected svg.embeddedIcon .icon rect,
.light .radioButton.selected svg.embeddedIcon .icon rect {
    fill: #e4f0f6;
}

/* Selected:hover (normal) button */
.light .button:hover svg.embeddedIcon .icon rect {
    stroke: black;
    stroke-width: 1px;
}

/* Selected:hover toggle-button */
.light .toggleButton.selected:hover svg.embeddedIcon .icon rect {
    fill: #c0d8f0;
    stroke: black;
    stroke-width: 1px;
}

/* Selected toggle/radio button and normal button glyph color */
.light .button svg.embeddedIcon .glyph,
.light .toggleButton.selected svg.embeddedIcon .glyph,
.light .radioButton.selected svg.embeddedIcon .glyph {
    fill: #5b99d2;
}


/* === UNSELECTED BUTTONS === */

/* Unselected toggle / radio button */
.light .toggleButton svg.embeddedIcon .icon rect,
.light .radioButton svg.embeddedIcon .icon rect {
    /* no fill */
}

/* Unselected:hover toggle / radio button */
.light .toggleButton:hover svg.embeddedIcon .icon rect,
.light .radioButton:hover:not(.selected) svg.embeddedIcon .icon rect {
    fill: #e4f0f6;
    stroke: black;
    stroke-width: 1px;
}

/* Unselected toggle / radio button */
.light .toggleButton svg.embeddedIcon .glyph,
.light .radioButton svg.embeddedIcon .glyph {
    fill: #bbb;
}

/* Unselected:hover toggle / radio button */
.light .toggleButton:hover:not(.selected) svg.embeddedIcon .glyph,
.light .radioButton:hover:not(.selected) svg.embeddedIcon .glyph {
    fill: #5b99d2;
}


/* ========== DARK Theme ========== */

/* Selected toggle / radio button */
.dark .toggleButton.selected svg.embeddedIcon .icon rect,
.dark .radioButton.selected svg.embeddedIcon .icon rect {
    fill: #353e45;
}

/* Selected:hover (normal) button */
.dark .button:hover svg.embeddedIcon .icon rect {
    stroke: white;
    stroke-width: 1px;
}

/* Selected:hover toggle-button */
.dark .toggleButton.selected:hover svg.embeddedIcon .icon rect {
    fill: #444d54;
    stroke: white;
    stroke-width: 1px;
}

/* Selected toggle/radio button and normal button glyph color */
.dark .button svg.embeddedIcon .glyph,
.dark .toggleButton.selected svg.embeddedIcon .glyph,
.dark .radioButton.selected svg.embeddedIcon .glyph {
    fill: #5b99d2;
}


/* === UNSELECTED BUTTONS === */

/* Unselected toggle / radio button */
.dark .toggleButton svg.embeddedIcon .icon rect,
.dark .radioButton svg.embeddedIcon .icon rect {
    /* no fill */
}

/* Unselected:hover toggle / radio button */
.dark .toggleButton:hover svg.embeddedIcon .icon rect,
.dark .radioButton:hover:not(.selected) svg.embeddedIcon .icon rect {
    fill: #353e45;
    stroke: white;
    stroke-width: 1px;
}

/* Unselected toggle / radio button */
.dark .toggleButton svg.embeddedIcon .glyph,
.dark .radioButton svg.embeddedIcon .glyph {
    fill: #bbb;
}

/* Unselected:hover toggle / radio button */
.dark .toggleButton:hover:not(.selected) svg.embeddedIcon .glyph,
.dark .radioButton:hover:not(.selected) svg.embeddedIcon .glyph {
    fill: #5b99d2;
}
