/*
 * Copyright 2015 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 -- CSS file
 */

.light .tbarArrow svg.embeddedIcon .icon.tableColSortAsc .glyph {
    fill: #838383;
}
.dark .tbarArrow svg.embeddedIcon .icon.tableColSortAsc .glyph {
    fill: #B2B2B2;
}

.button,
.toggleButton,
.radioSet,
.radioButton,
.separator {
    display: inline-block;
}
.button,
.toggleButton,
.radioSet {
    padding: 0 4px 0 4px;
}
.radioButton {
    padding: 0 4px 0 0;
}

.button svg.embeddedIcon,
.toggleButton svg.embeddedIcon,
.radioButton svg.embeddedIcon {
    cursor: pointer;
}
.button svg.embeddedIcon .icon rect,
.toggleButton svg.embeddedIcon .icon rect,
.radioButton svg.embeddedIcon .icon rect{
    stroke: none;
}

/* Selected button color */
.light .button svg.embeddedIcon,
.light .toggleButton.selected svg.embeddedIcon,
.light .radioButton.selected svg.embeddedIcon {
    fill: #838383;
}
.light .button svg.embeddedIcon .glyph,
.light .toggleButton.selected svg.embeddedIcon .glyph,
.light .radioButton.selected svg.embeddedIcon .glyph {
    fill: white;
}
.dark .button svg.embeddedIcon,
.dark .toggleButton.selected svg.embeddedIcon,
.dark .radioButton.selected svg.embeddedIcon{
    fill: #151515;
}
.dark .button svg.embeddedIcon .glyph,
.dark .toggleButton.selected svg.embeddedIcon .glyph,
.dark .radioButton.selected svg.embeddedIcon .glyph {
    fill: #B2B2B2;
}

/* Unselected button color */
.light .toggleButton svg.embeddedIcon,
.light .radioButton svg.embeddedIcon {
    fill: #eee;
}
.light .toggleButton svg.embeddedIcon .glyph,
.light .radioButton svg.embeddedIcon .glyph {
    fill: #bbb;
}
.dark .toggleButton svg.embeddedIcon,
.dark .radioButton svg.embeddedIcon {
    fill: #303030;
}
.dark .toggleButton svg.embeddedIcon .glyph,
.dark .radioButton svg.embeddedIcon .glyph {
    fill: #565656;
}
