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

/*
 FIXME: The following should be consolidated to result in much less CSS and
 not to require entries for every icon.
 */

.light svg.embeddedIcon .icon.appActive,
.light svg.embeddedIcon .icon.appInactive {
    fill: none;
}

.dark svg.embeddedIcon .icon.appActive,
.dark svg.embeddedIcon .icon.appInactive {
    fill: none;
}

.light svg.embeddedIcon .icon.appActive .glyph {
    fill: green;
}
.dark svg.embeddedIcon .icon.appActive .glyph {
    fill: #266610;
}


.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.appActive rect,
.light svg.embeddedIcon .icon.appInactive rect,
.dark svg.embeddedIcon .icon.appActive rect,
.dark svg.embeddedIcon .icon.appInactive rect,
.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;
}
