/*
 * 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 -- Icon Service (theme) -- CSS file
 */

.light svg.embeddedIcon g.icon .glyph {
    fill: white;
}
.dark svg.embeddedIcon g.icon .glyph {
    fill: white;
}


/* Sortable table headers */
.light div.tableColSort svg.embeddedIcon .icon .glyph {
    fill: black;
}
.dark div.tableColSort svg.embeddedIcon .icon .glyph {
    fill: #ccc;
}

.light svg.embeddedIcon .icon.active .glyph {
    fill: green;
}
.dark svg.embeddedIcon .icon.active .glyph {
    fill: #308C10;
}

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

.light svg.embeddedIcon .icon.active .glyph {
    fill: green;
}
.light svg.embeddedIcon .icon.inactive .glyph {
    fill: darkred;
}
.dark svg.embeddedIcon .icon.active .glyph {
    fill: #308C10;
}
.dark svg.embeddedIcon .icon.inactive .glyph {
    fill: #AD2D2D;
}

