blob: 34422f7bd687a8ce44cc72f69efab772ef2c8e5b [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 #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: 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: #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: 9pt sans-serif;
fill: #ad5781;
}
.dark #ov-topo2 svg .node.host circle {
stroke: #a3a596;
fill: #8f8272;
}
.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;
}