/*
 * Copyright 2014 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 -- CSS file

 @author Simon Hunt
 */

#topo svg #topo-bg {
    opacity: 0.5;
}

#topo #map {
    stroke-width: 2px;
    stroke: #eee;
    fill: transparent;
}

/* TODO: move glyphs into framework */

#topo svg .glyphIcon {
    fill: black;
    stroke: none;
    fill-rule: evenodd;
}
#topo svg .glyphIcon rect {
    fill: #ddd;
    stroke: none;
}


#topo svg .noDevsLayer {
    visibility: hidden;
}

#topo svg .noDevsLayer text {
    font-size: 60pt;
    font-style: italic;
    fill: #dde;
}

#topo svg .noDevsBird {
    fill: #ecd;
}

/* NODES */

#topo svg .node {
    cursor: pointer;
}

#topo svg .node.selected rect,
#topo svg .node.selected circle {
    fill: #f90;
    filter: url(#blue-glow);
}

#topo svg .node text {
    pointer-events: none;
}

/* Device Nodes */

#topo svg .node.device {
}

#topo svg .node.device rect {
    stroke-width: 1.5;
}

#topo svg .node.device.fixed rect {
    stroke-width: 1.5;
    stroke: #ccc;
}

/* note: device is offline without the 'online' class */
#topo svg .node.device {
    fill: #777;
}

#topo svg .node.device.online {
    fill: #6e7fa3;
}

/* note: device is offline without the 'online' class */
#topo svg .node.device text {
    fill: #bbb;
    font: 10pt sans-serif;
}

#topo svg .node.device.online text {
    fill: white;
}

#topo svg .node.device .glyphIcon rect {
    fill: #aaa;
}
#topo svg .node.device .glyphIcon use {
    fill: #777;
}
#topo svg .node.device.selected .glyphIcon rect {
    fill: #f90;
}
#topo svg .node.device.online .glyphIcon rect {
    fill: #ccc;
}
#topo svg .node.device.online .glyphIcon use {
    fill: #000;
}
#topo svg .node.device.online.selected .glyphIcon rect {
    fill: #f90;
}


/* Host Nodes */

#topo svg .node.host {
    stroke: #000;
}

#topo svg .node.host text {
    fill: #846;
    stroke: none;
    font: 9pt sans-serif;
}

svg .node.host circle {
    stroke: #000;
    fill: #edb;
}

/* LINKS */

#topo svg .link {
    opacity: .9;
}

#topo svg .link.inactive {
    opacity: .5;
    stroke-dasharray: 8 4;
}

#topo svg .link.secondary {
    stroke: rgba(0,153,51,0.5);
    stroke-width: 3px;
}
#topo svg .link.primary {
    stroke: #ffA300;
    stroke-width: 4px;
}
#topo svg .link.animated {
    stroke: #ffA300;
}

#topo svg .link.secondary.optical {
    stroke: rgba(128,64,255,0.5);
    stroke-width: 4px;
}
#topo svg .link.primary.optical {
    stroke: #74f;
    stroke-width: 6px;
}
#topo svg .link.animated.optical {
    stroke: #74f;
    stroke-width: 10px;
}

#topo svg .linkLabel rect {
    fill: #eee;
    stroke: none;
}
#topo svg .linkLabel text {
    text-anchor: middle;
    stroke: #777;
    stroke-width: 0.1;
    font-size: 9pt;
}

/* Fly-in summary pane */

#topo-summary {
    /* gets base CSS from .fpanel in floatPanel.css */
    top: 64px;
}

#topo-summary svg {
    display: inline-block;
    width: 42px;
    height: 42px;
}

#topo-summary svg .glyphIcon {
    fill: black;
    stroke: none;
    fill-rule: evenodd;
}

#topo-summary h2 {
    position: absolute;
    margin: 0 4px;
    top: 20px;
    left: 50px;
    color: black;
}

#topo-summary h3 {
    margin: 0 4px;
    top: 20px;
    left: 50px;
    color: black;
}

#topo-summary p, table {
    margin: 4px 4px;
}

#topo-summary td.label {
    font-style: italic;
    color: #777;
    padding-right: 12px;
}

#topo-summary td.value {
}

#topo-summary hr {
    height: 1px;
    color: #ccc;
    background-color: #ccc;
    border: 0;
}

/* Fly-in details pane */

#topo-detail {
    /* gets base CSS from .fpanel in floatPanel.css */
    top: 320px;

}

#topo-detail svg {
    display: inline-block;
    width: 42px;
    height: 42px;
}

#topo-detail svg .glyphIcon {
    fill: black;
    stroke: none;
    fill-rule: evenodd;
}

#topo-detail h2 {
    position: absolute;
    margin: 0 4px;
    top: 20px;
    left: 50px;
    color: black;
}

#topo-detail h3 {
    margin: 0 4px;
    top: 20px;
    left: 50px;
    color: black;
}

#topo-detail p, table {
    margin: 4px 4px;
}

#topo-detail td.label {
    font-style: italic;
    color: #777;
    padding-right: 12px;
}

#topo-detail td.value {
}


#topo-detail .actionBtn {
    margin: 6px 12px;
    padding: 2px 6px;
    font-size: 9pt;
    cursor: pointer;
    width: 200px;
    text-align: center;

    /* theme specific... */
    border: 2px solid #ddd;
    border-radius: 4px;
    color: #eee;
    background: #888;
}

#topo-detail .actionBtn:hover {
    /* theme specific... */
    border: 2px solid #ddd;
    color: #eee;
    background: #444;
}


#topo-detail hr {
    height: 1px;
    color: #ccc;
    background-color: #ccc;
    border: 0;
}

/* ONOS instance stuff */

#topo-oibox {
    height: 100px;
}

#topo-oibox div.onosInst {
    display: inline-block;
    width: 170px;
    height: 85px;
    cursor: pointer;
}

#topo-oibox svg rect {
    fill: #ccc;
    stroke: #aaa;
    stroke-width: 3.5;
}
#topo-oibox .online svg rect {
    opacity: 1;
    fill: #9cf;
    stroke: #555;
}

#topo-oibox svg .glyphIcon {
    fill: #888;
    fill-rule: evenodd;
}
#topo-oibox .online svg .glyphIcon {
    fill: #000;
}

#topo-oibox svg .badgeIcon {
    fill: #777;
    fill-rule: evenodd;
}

#topo-oibox .online svg .badgeIcon {
    fill: #fff;
}

#topo-oibox svg text {
    text-anchor: middle;
    fill: #777;
}
#topo-oibox .online svg text {
    fill: #eee;
}

#topo-oibox svg text.instTitle {
    font-size: 11pt;
    font-weight: bold;
}
#topo-oibox svg text.instLabel {
    font-size: 9pt;
    font-style: italic;
}

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


#topo svg .suppressed {
    opacity: 0.2;
}

/* Death Mask (starts hidden) */

#topo-mask {
    display: none;
    position: absolute;
    top: 0;
    left: 0;
    width: 10000px;
    height: 8000px;
    z-index: 5000;
    background-color: rgba(0,0,0,0.75);
    padding: 60px;
}

#topo-mask p {
    margin: 8px 20px;
    color: #ddd;
    font-size: 14pt;
    font-style: italic;
}

