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

/* TODO: dark theme */


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