/*
 * Copyright 2016-present Open Networking Foundation
 *
 * 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 -- Topology View (theme) -- CSS file
 */

/* --- Base SVG Layer --- */

#ov-topo2 svg {
    background-color: #f4f4f4;
}

/* --- "No Devices" Layer --- */

#ov-topo2 svg .noDevsBird {
    fill: #db7773;
}

#ov-topo2 svg #topo2-noDevsLayer text {
    fill: #7e9aa8;
}

/* --- Breadcrumbs --- */

.light #breadcrumbs {
    background: #f5f5f5;
    border-bottom: 1px solid #c7c7c0;
}

.light #breadcrumbs .breadcrumb:after {
    color: #353535;
}

.light #breadcrumbs .breadcrumb:last-child a {
    color: #757575;
}


/* --- Topo Map --- */

#ov-topo2 svg #topo2-map {
    stroke-width: 2px;
    stroke: #f4f4f4;
    fill: #e5e5e6;
}

/* --- general topo2-panel styling --- */

.topo2-p h2 {
    display: inline-block;
    padding: 6px;
}

.topo2-p svg {
    background: #c0242b;
    width: 28px;
    height: 28px;
}

.topo2-p svg .glyph {
    fill: #ffffff;
}

.topo2-p hr {
    background-color: #cccccc;
}

#topo2-p-detail svg {
    background: none;
}

#topo2-p-detail .header svg .glyph {
    fill: #c0242b;
}


/* --- Topo Instance Panel --- */

#topo2-p-instance svg rect {
    stroke-width: 0;
    fill: #fbfbfb;
}

/* body of an instance */
#topo2-p-instance .online svg rect {
    opacity: 1;
    fill: #fbfbfb;
}

#topo2-p-instance svg .glyph {
    fill: #fff;
}
#topo2-p-instance .online svg .glyph {
    fill: #fff;
}


/* offline */
#topo2-p-instance svg .badgeIcon {
    opacity: 0.4;
    fill: #939598;
}

/* online */
#topo2-p-instance .online svg .badgeIcon {
    opacity: 1.0;
    fill: #939598;
}
#topo2-p-instance .online svg .badgeIcon.bird {
    fill: #ffffff;
}

#topo2-p-instance svg .readyBadge {
    visibility: hidden;
}
#topo2-p-instance .ready svg .readyBadge {
    visibility: visible;
}

#topo2-p-instance svg text {
    text-anchor: left;
    opacity: 0.5;
    fill: #3c3a3a;
}

#topo2-p-instance .online svg text {
    opacity: 1.0;
    fill: #3c3a3a;
}

#topo2-p-instance .onosInst.mastership {
    opacity: 0.3;
}
#topo2-p-instance .onosInst.mastership.affinity {
    opacity: 1.0;
}
#topo2-p-instance .onosInst.mastership.affinity svg rect {
    filter: url(#blue-glow);
}

.firefox #topo2-p-instance .onosInst.mastership.affinity svg rect {
    filter: url("data:image/svg+xml;utf8, <svg xmlns = \'http://www.w3.org/2000/svg\'><filter x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" id=\"blue-glow\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0  0 0 0 0 0  0 0 0 0 0  0.7 0 0 0 1  0 \"></feColorMatrix><feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\"></feGaussianBlur><feMerge><feMergeNode in=\"coloredBlur\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge></filter></svg>#blue-glow");
}

/* --- Topo Nodes --- */

#ov-topo2 svg .suppressed {
    opacity: 0.5 !important;
}

#ov-topo2 svg .suppressedmax {
    opacity: 0.2 !important;
}

/* Device Nodes */

/* note: device without the 'online' class is offline */
#ov-topo2 svg .node.device rect {
    fill: #f0f0f0;
}
#ov-topo2 svg .node.device text {
    fill: #bbb;
}
#ov-topo2 svg .node.device use {
    fill: #777;
}


#ov-topo2 svg .node.device.online rect {
    fill: #ffffff;
}
#ov-topo2 svg .node.device.online text {
    fill: #3c3a3a;
}
#ov-topo2 svg .node.device.online use {
    /* NOTE: this gets overridden programatically */
    fill: #454545;
}

#ov-topo2 svg .node.sub-region rect {
    fill: #ffffff;
}

#ov-topo2 svg .node.sub-region text {
}

#ov-topo2 svg .node.sub-region use {
    /* NOTE: this gets overridden programatically */
    fill: #454545;
}

#ov-topo2 svg .node.peer-region rect {
    fill: #ffffff;
}

#ov-topo2 svg .node.selected .node-container {
    stroke-width: 2.0;
    stroke: #009fdb;
}

#ov-topo2 svg .node.hovered .node-container {
    stroke-width: 2.0;
    stroke: #454545;
}

/* Badges */
/* (... works for bothand dark themes...) */
#ov-topo2 svg .node .badge circle {
    stroke: #aaa;
}

#ov-topo2 svg .node .badge.badgeInfo circle {
    fill: #99d;
}

#ov-topo2 svg .node .badge.badgeWarn circle {
    fill: #da2;
}

#ov-topo2 svg .node .badge.badgeError circle {
    fill: #e44;
}

#ov-topo2 svg .node .badge use {
    fill: white !important;
}

#ov-topo2 svg .node .badge.badgeInfo use {
    fill: #448;
}

#ov-topo2 svg .node .badge text {
    fill: white !important;
}

#ov-topo2 svg .node .badge.badgeInfo text {
    fill: #448;
}

/* Host Nodes */

#ov-topo2 svg .node.host {
}

#ov-topo2 svg .node.host text {
    stroke: none;
    font-size: 13px;
    fill: #846;
}

#ov-topo2 svg .node.host circle {
    stroke: #a3a596;
    fill: #e0dfd6;
}

#ov-topo2 svg .node.host.selected .hostIcon > circle {
    stroke-width: 2.0;
    stroke: #009fdb;
}

#ov-topo2 svg .node.host use {
    fill: #3c3a3a;
}

#ov-topo2 svg .node.host rect {
    fill: #ffffff;
}

/* --- Topo Links --- */

#ov-topo2 svg .link {
    opacity: .9;
}

#ov-topo2 svg .link.selected,
#ov-topo2 svg .link.enhanced {
    stroke: #009fdb;
}

#ov-topo2 svg .link.inactive {
    opacity: .5;
    stroke-dasharray: 4 2;
}
/* TODO: Review for not-permitted links */
#ov-topo2 svg .link.not-permitted {
    stroke: rgb(255,0,0);
    stroke-dasharray: 8 4;
}

#ov-topo2 svg .link.secondary {
    stroke: rgba(0,153,51,0.5);
}

#ov-topo2 svg .link.secondary.port-traffic-green {
    stroke: rgb(0,153,51);
}

#ov-topo2 svg .link.secondary.port-traffic-yellow {
    stroke: rgb(128,145,27);
}

#ov-topo2 svg .link.secondary.port-traffic-orange {
    stroke: rgb(255, 137, 3);
}

#ov-topo2 svg .link.secondary.port-traffic-red {
    stroke: rgb(183, 30, 21);
}

/* Port traffic color visualization for Kbps, Mbps, and Gbps */

#ov-topo2 svg .link.secondary.port-traffic-Kbps {
    stroke: rgb(0,153,51);
}

#ov-topo2 svg .link.secondary.port-traffic-Mbps {
    stroke: rgb(128,145,27);
}

#ov-topo2 svg .link.secondary.port-traffic-Gbps {
    stroke: rgb(255, 137, 3);
}

#ov-topo2 svg .link.secondary.port-traffic-Gbps-choked {
    stroke: rgb(183, 30, 21);
}



#ov-topo2 svg .link.animated {
    stroke-dasharray: 8 5;
    animation: ants 5s infinite linear;
    /* below line could be added via Javascript, based on path, if we cared
     * enough about the direction of ant-flow
     */
    /*animation-direction: reverse;*/
}
@keyframes ants {
    from {
        stroke-dashoffset: 0;
    }
    to {
        stroke-dashoffset: 400;
    }
}

#ov-topo2 svg .link.primary {
    stroke-width: 4px;
    stroke: #ffA300;
}

#ov-topo2 svg .link.secondary.optical {
    stroke-width: 4px;
    stroke: rgba(128,64,255,0.5);
}

#ov-topo2 svg .link.primary.optical {
    stroke-width: 6px;
    stroke: #74f;
}

/* Link Labels */
#ov-topo2 svg .linkLabel rect {
    stroke: none;
    fill: #ffffff;
}

#ov-topo2 svg .linkLabel text {
    fill: #444;
}

/* Port Labels */

#ov-topo2 svg .portLabel rect {
    stroke: #a3a596;
    fill: #ffffff;
}

#ov-topo2 svg .portLabel text {
    fill: #444;
}

/* Number of Links Labels */


#ov-topo2 text.numLinkText {
    fill: #444;
}

/* ------------------------------------------------- */
/* Sprite Layer */

#ov-topo2 svg #topo2-sprites .gold1 use {
    stroke: #fda;
    fill: none;
}
#ov-topo2 svg #topo2-sprites .gold1 text {
    fill: #eda;
}

#ov-topo2 svg #topo2-sprites .blue1 use {
    stroke: #bbd;
    fill: none;
}
#ov-topo2 svg #topo2-sprites .blue1 text {
    fill: #cce;
}

#ov-topo2 svg #topo2-sprites .gray1 use {
    stroke: #ccc;
    fill: none;
}
#ov-topo2 svg #topo2-sprites .gray1 text {
    fill: #ddd;
}

/* fills */
#ov-topo2 svg #topo2-sprites use.fill-gray2 {
    fill: #eee;
}

#ov-topo2 svg #topo2-sprites use.fill-blue2 {
    fill: #bce;
}


/* ==================================================================== */
/*   From here are the DARK theme styles - mirroring the above styles   */
/* ==================================================================== */

/* --- Base SVG Layer --- */

.dark #ov-topo2 svg {
    background-color: #152439;
}

/* --- "No Devices" Layer --- */

.dark #ov-topo2 svg .noDevsBird {
    fill: #8f4848;
}

.dark #ov-topo2 svg #topo-noDevsLayer text {
    fill: #445461;
}

/* --- Breadcrumbs --- */

.dark #breadcrumbs {
    background: #142235;
    border-bottom: 1px solid #111111;
}

.dark #breadcrumbs span {
    color: #777778;
}

.dark #breadcrumbs .breadcrumb:after {
    color: #555555;
}

.dark #breadcrumbs .breadcrumb:last-child a {
    color: #d0d0d0;
}

/* --- Topo Map --- */

.dark #ov-topo2 svg #topo2-map {
    stroke-width: 2px;
    stroke: #37404d;
    fill: #212c3a;
}

/* --- general topo-panel styling --- */

.dark .topo2-p {
    background-color: #2f313c;
    color: #c2c2b7;
}
.dark .topo2-p svg {
    background: #8e1e24;
}

.dark .topo2-p svg .glyph {
    fill: #c2c2b7;
}

.dark .topo2-p hr {
    background-color: #616876;
}

.dark .topo2-p div.actionBtn svg use.glyph {
    fill: #5a7f96;
}

.dark #topo2-p-detail .header svg .glyph {
    fill: #91292f;
}

.dark #toolbar-topo2-toolbar .tbar-row.right {
    color: #666;
}

/* --- Topo Instance Panel --- */

.dark #topo2-p-instance {
    background-color: #2f313c;
    color: #c2c2b7;
    border: 1px solid #364144;

}

.dark #topo2-p-instance svg rect {
    stroke-width: 0;
    fill: #525660;
}

/* body of an instance */
.dark #topo2-p-instance .online svg rect {
    opacity: 1;
    fill: #838992;
}

.dark #topo2-p-instance svg .glyph {
    fill: #ddd;
}
.dark #topo2-p-instance .online svg .glyph {
    fill: #fff;
}
.dark #topo2-p-instance .online svg .glyph.overlay {
    fill: #c7c7c7;
}

/* offline */
.dark #topo2-p-instance svg .badgeIcon {
    opacity: 0.4;
    fill: #939598;
}

/* online */
.dark #topo2-p-instance .online svg .badgeIcon {
    opacity: 1.0;
    fill: #939598;
}
.dark #topo2-p-instance .online svg .badgeIcon.bird {
    fill: #ffffff;
}

.dark #topo2-p-instance svg text {
    text-anchor: left;
    opacity: 0.5;
    fill: #aaa;
}

.dark #topo2-p-instance .online svg text {
    opacity: 1.0;
    fill: #fff;
}

.dark #topo2-p-instance .onosInst.mastership {
    opacity: 0.3;
}
.dark #topo2-p-instance .onosInst.mastership.affinity {
    opacity: 1.0;
}
.dark #topo2-p-instance .onosInst.mastership.affinity svg rect {
    filter: url(#blue-glow);
}

.dark.firefox #topo2-p-instance .onosInst.mastership.affinity svg rect {
    filter: url("data:image/svg+xml;utf8, <svg xmlns = \'http://www.w3.org/2000/svg\'><filter x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" id=\"blue-glow\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0  0 0 0 0 0  0 0 0 0 0  0.7 0 0 0 1  0 \"></feColorMatrix><feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\"></feGaussianBlur><feMerge><feMergeNode in=\"coloredBlur\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge></filter></svg>#blue-glow");
}

/* --- Topo Nodes --- */

/* Device Nodes */

/* note: device without the 'online' class is offline */
.dark #ov-topo2 svg .node.device rect {
    fill: #707070;
}
.dark #ov-topo2 svg .node.device text {
    fill: #444;
}
.dark #ov-topo2 svg .node.device use {
    fill: #eee;
}

.dark #ov-topo2 svg .node.device.online rect {
    fill: #525660;
}
.dark #ov-topo2 svg .node.device.online text {
    fill: #fff;
}
.dark #ov-topo2 svg .node.device.online use {
    fill: #fff;
}

.dark #ov-topo2 svg .node.device.selected rect {
    stroke-width: 2.0;
    stroke: #009fdb;
}

.dark #ov-topo2 svg .node.sub-region rect {
    fill: #525660;
}

.dark #ov-topo2 svg .node.sub-region text {
}

.dark #ov-topo2 svg .node.sub-region use {
    /* NOTE: this gets overridden programatically */
    fill: #eeeeee;
}

.dark #ov-topo2 svg .node.peer-region rect {
    fill: #525660;
}

/* Host Nodes */

.dark #ov-topo2 svg .node.host {
}

.dark #ov-topo2 svg .node.host text {
    stroke: none;
    font-size: 13px;
    fill: #ad5781;
}

.dark #ov-topo2 svg .node.host circle {
    stroke: #a3a596;
    fill: #8f8272;
}

.dark #ov-topo2 svg .node.host rect {
    fill: #525660;
}

.dark #ov-topo2 svg .node.host.selected .hostIcon > circle {
    stroke-width: 2.0;
    stroke: #009fdb;
}

.dark #ov-topo2 svg .node.host use {
    fill: #000;
}


/* --- Topo Links --- */
.dark #ov-topo2 svg .link.not-permitted {
    stroke: rgb(255, 60, 60);
}

/* Port traffic color visualization for Kbps, Mbps, and Gbps */
/*  .. values good for both light and dark themes            */

/* Primary, Secondary (optical too) colors good for both themes */

/* Link Labels */
.dark #ov-topo svg .linkLabel rect {
    fill: #555;
}

.dark #ov-topo svg .linkLabel text {
    fill: #eee;
}

/* Port Labels */

.dark #ov-topo svg .portLabel rect {
    fill: #222;
}

.dark #ov-topo svg .portLabel text {
    fill: #eee;
}

/* Number of Links Labels */

.dark #ov-topo text.numLinkText {
    fill: #eee;
}


/* Sprite Layer */

.dark #ov-topo2 svg #topo2-sprites .gold1 use {
    stroke: #541;
}
.dark #ov-topo2 svg #topo2-sprites .gold1 text {
    fill: #543;
}

.dark #ov-topo2 svg #topo2-sprites .blue1 use {
    stroke: #445;
}
.dark #ov-topo2 svg #topo2-sprites .blue1 text {
    fill: #446;
}

.dark #ov-topo2 svg #topo2-sprites .gray1 use {
    stroke: #333;
}
.dark #ov-topo2 svg #topo2-sprites .gray1 text {
    fill: #444;
}

/* fills */
.dark #ov-topo2 svg #topo2-sprites use.fill-gray2 {
    fill: #444;
}

.dark #ov-topo2 svg #topo2-sprites use.fill-blue2 {
    fill: #447;
}
