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

.light svg.embeddedIcon .icon.deviceOnline,
.light svg.embeddedIcon .icon.deviceOffline {
    fill: none;
}

.dark svg.embeddedIcon .icon.deviceOnline,
.dark svg.embeddedIcon .icon.deviceOffline {
    fill: none;
}

.light svg.embeddedIcon .icon.devIcon_SWITCH {
    fill: #ccc;
}
.dark svg.embeddedIcon .icon.devIcon_SWITCH {
    fill: #222;
}
.light svg.embeddedIcon .icon.devIcon_SWITCH .glyph {
    fill: #333;
}
.dark svg.embeddedIcon .icon.devIcon_SWITCH .glyph {
    fill: #ccc;
}

.light svg.embeddedIcon .icon.deviceOnline .glyph {
    fill: green;
}
.light svg.embeddedIcon .icon.deviceOffline .glyph {
    fill: darkred;
}
.dark svg.embeddedIcon .icon.deviceOnline .glyph {
    fill: #266610;
}
.dark svg.embeddedIcon .icon.deviceOffline .glyph {
    fill: #610000;
}

.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;
}

.light svg.embeddedIcon .icon.deviceOnline rect,
.light svg.embeddedIcon .icon.deviceOffline rect,
.dark svg.embeddedIcon .icon.deviceOnline rect,
.dark svg.embeddedIcon .icon.deviceOffline rect {
    stroke: none;
    fill: none;
}

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.deviceOnline rect
.dark svg.embeddedIcon .icon.deviceOffline rect {
    stroke: none;
}
.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;
}
