/*
 * 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;
}


#topo svg .glyph {
    fill: white;
    stroke: none;
}

/* NODES */

#topo svg .node {
    cursor: pointer;
}

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

/* for debugging */
#topo svg .node circle.debug {
    fill: white;
    stroke: red;
}

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

/* Device Nodes */

#topo svg .node.device {
}

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

#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.switch.online {
    fill: #17f;
}

#topo svg .node.device.roadm.online {
    fill: #03c;
}

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

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


/* 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: #ddd;
}

#topo svg .node.host.bgpSpeaker circle {
    stroke: #000;
    fill: #ddd;
}

#topo svg .node.host.router circle {
    stroke: #000;
    fill: #ddd;
}

/* LINKS */

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

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

#topo svg .link.primary {
    stroke: #f11;
    stroke-width: 4px;
}
#topo svg .link.secondary {
    stroke: rgba(255,100,100,0.5);
    stroke-width: 3px;
}
#topo svg .link.animated {
    stroke: #f11;
    stroke-width: 8px;
    stroke-dasharray: 8 8
}

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

#topo svg .linkLabel rect {
    fill: #eef;
    stroke: blue;
    stroke-width: 0.3;
}
#topo svg .linkLabel text {
    text-anchor: middle;
    fill: #a13d11;
    stroke: none;
    font-size: 8pt;
}

/* Fly-in details pane */

#topo-detail {
/* gets base CSS from .fpanel in floatPanel.css */
}

#topo-detail h2 {
    margin: 8px 4px;
    color: black;
    vertical-align: middle;
}

#topo-detail h2 img {
    height: 32px;
    padding-right: 8px;
    vertical-align: middle;
}

#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: 50%;
    text-align: center;

    /* theme specific... */
    border: 1px solid #ddf;
    color: #99f;
}

#topo-detail .actionBtn:hover {
    /* theme specific... */
    border: 1px solid #ddf;
    background: #eef;
    color: #77d;
}


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

/* ONOS instance stuff */

#topo-oibox {
    width: 120px;
}

#topo-oibox .onosInst {
    position: relative;
    width: 88%;
    left: 4%;
    height: 80px;
    margin: 8px 0;
    cursor: pointer;

    -moz-border-radius: 12px;
    border-radius: 12px;

    /* theme-related */
    color: #444;
    background-color: #ccc;
    border: 4px solid #aaa;
}

#topo-oibox .onosInst.online {
    /* theme-related */
    color: #113;
    background-color: #9cf;
    border: 4px solid #357;
}

#topo-oibox .onosInst .onosTitle {
    text-align: center;
    font-size: 10pt;
    margin-top: 6px;
    color: #888;
}

#topo-oibox .onosInst.online .onosTitle {
    color: black;
}

#topo-oibox .onosInst img {
    opacity: 0.5;
    padding: 3px;
}

#topo-oibox .onosInst.online img {
    opacity: 1.0;
    padding: 3px;
}

#topo-oibox .onosInst img.ui {
    opacity: 1;
    position: absolute;
    top: 3px;
    right: 3px;
    width: 20px;
    height: 20px;
}

#topo-oibox .onosInst.mastership {
    opacity: 0.3;
}
#topo-oibox .onosInst.mastership.affinity {
    opacity: 1.0;
    box-shadow: 0 2px 8px #33e;
}


#topo svg .suppressed {
    opacity: 0.2;
}

/* Web Socket Closed 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;
}

