/*
 * Copyright 2014,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 -- Icon Service -- CSS file
 */

svg#IconLibDefs {
  display: none;
}

svg.embeddedIcon .icon .glyph {
    stroke: none;
    fill: white;
    fill-rule: evenodd;
}

div.inline-icon {
    display: inline-block;
}

.light svg.embeddedIcon .icon.deviceOnline {
    fill: green;
}
.light svg.embeddedIcon .icon.deviceOffline {
    fill: darkred;
}

.dark svg.embeddedIcon .icon.deviceOnline,
.dark svg.embeddedIcon .icon.deviceOffline {
    fill: #ccc;
}
.dark svg.embeddedIcon .icon.deviceOnline .glyph {
    fill: green;
}
.dark svg.embeddedIcon .icon.deviceOffline .glyph {
    fill: darkred;
}

.light svg.embeddedIcon .icon.tableColSortAsc .glyph,
.light svg.embeddedIcon .icon.tableColSortDesc .glyph {
    fill: black;
}
.dark svg.embeddedIcon .icon.tableColSortAsc .glyph,
.dark svg.embeddedIcon .icon.tableColSortDesc .glyph {
    fill: #ccc;
}

svg.embeddedIcon .icon.tableColSortAsc rect,
svg.embeddedIcon .icon.tableColSortDesc rect {
    stroke: none;
    fill: none;
}

svg.embeddedIcon .icon rect {
    stroke: black;
    stroke-width: 1px;
}
.dark svg.embeddedIcon .icon rect {
    stroke: #ccc;
}
.dark svg.embeddedIcon .icon.tableColSortAsc rect,
.dark svg.embeddedIcon .icon.tableColSortDesc rect {
    stroke: none;
}

svg .svgIcon {
    fill-rule: evenodd;
}
