blob: e1551e4a487da16f188fc41b7f1bbefd0d9cba3b [file] [log] [blame]
/*
* 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 -- 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 #topo-noDevsLayer text {
fill: #7e9aa8;
}
/* --- Topo Map --- */
#ov-topo2 svg #topo-map {
stroke-width: 2px;
stroke: #f4f4f4;
fill: #e5e5e6;
}
/* --- general topo-panel styling --- */
.topo-p svg {
background: #c0242b;
}
.topo-p svg .glyph {
fill: #ffffff;
}
.topo-p hr {
background-color: #cccccc;
}
#topo-p-detail svg {
background: none;
}
#topo-p-detail .header svg .glyph {
fill: #c0242b;
}
/* --- Topo Instance Panel --- */
#topo-p-instance svg rect {
stroke-width: 0;
fill: #fbfbfb;
}
/* body of an instance */
#topo-p-instance .online svg rect {
opacity: 1;
fill: #fbfbfb;
}
#topo-p-instance svg .glyph {
fill: #fff;
}
#topo-p-instance .online svg .glyph {
fill: #fff;
}
/* offline */
#topo-p-instance svg .badgeIcon {
opacity: 0.4;
fill: #939598;
}
/* online */
#topo-p-instance .online svg .badgeIcon {
opacity: 1.0;
fill: #939598;
}
#topo-p-instance .online svg .badgeIcon.bird {
fill: #ffffff;
}
#topo-p-instance svg .readyBadge {
visibility: hidden;
}
#topo-p-instance .ready svg .readyBadge {
visibility: visible;
}
#topo-p-instance svg text {
text-anchor: left;
opacity: 0.5;
fill: #3c3a3a;
}
#topo-p-instance .online svg text {
opacity: 1.0;
fill: #3c3a3a;
}
#topo-p-instance .onosInst.mastership {
opacity: 0.3;
}
#topo-p-instance .onosInst.mastership.affinity {
opacity: 1.0;
}
#topo-p-instance .onosInst.mastership.affinity svg rect {
filter: url(#blue-glow);
}
.firefox #topo-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 {
/* TODO: theme */
fill: #f0f0f0;
}
#ov-topo2 svg .node.device text {
/*TODO: theme*/
fill: #bbb;
}
#ov-topo2 svg .node.device use {
/*TODO: theme*/
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 use {
/* NOTE: this gets overridden programatically */
fill: #454545;
}
#ov-topo2 svg .node.device.selected rect {
stroke-width: 2.0;
stroke: #009fdb;
}
/* 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: 9pt sans-serif;
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;
}
/* --- Topo Links --- */
#ov-topo2 svg .link {
opacity: .9;
}
#ov-topo2 svg .link.selected,
#ov-topo2 svg .link.enhanced {
stroke-width: 3.5;
stroke: #009fdb;
}
#ov-topo2 svg .link.inactive {
opacity: .5;
stroke-dasharray: 8 4;
}
/* TODO: Review for not-permitted links */
#ov-topo2 svg .link.not-permitted {
stroke: rgb(255,0,0);
stroke-width: 5.0;
stroke-dasharray: 8 4;
}
#ov-topo2 svg .link.secondary {
stroke-width: 3px;
stroke: rgba(0,153,51,0.5);
}
/* Port traffic color visualization for Kbps, Mbps, and Gbps */
#ov-topo2 svg .link.secondary.port-traffic-Kbps {
stroke: rgb(0,153,51);
stroke-width: 5.0;
}
#ov-topo2 svg .link.secondary.port-traffic-Mbps {
stroke: rgb(128,145,27);
stroke-width: 6.5;
}
#ov-topo2 svg .link.secondary.port-traffic-Gbps {
stroke: rgb(255, 137, 3);
stroke-width: 8.0;
}
#ov-topo2 svg .link.secondary.port-traffic-Gbps-choked {
stroke: rgb(183, 30, 21);
stroke-width: 8.0;
}
#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 #topo-sprites .gold1 use {
stroke: #fda;
fill: none;
}
#ov-topo2 svg #topo-sprites .gold1 text {
fill: #eda;
}
#ov-topo2 svg #topo-sprites .blue1 use {
stroke: #bbd;
fill: none;
}
#ov-topo2 svg #topo-sprites .blue1 text {
fill: #cce;
}
#ov-topo2 svg #topo-sprites .gray1 use {
stroke: #ccc;
fill: none;
}
#ov-topo2 svg #topo-sprites .gray1 text {
fill: #ddd;
}
/* fills */
#ov-topo2 svg #topo-sprites use.fill-gray2 {
fill: #eee;
}
#ov-topo2 svg #topo-sprites use.fill-blue2 {
fill: #bce;
}