/*
 * 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: #aaaaaa;
    fill: transparent;
}


/* 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 {
    fill: #846;
}

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


/* LINKS */

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

#topo svg .link.primary {
    stroke: #f11;
    stroke-width: 6px;
}
#topo svg .link.secondary {
    stroke: rgba(255,100,100,0.5);
    stroke-width: 4px;
}
#topo svg .link.animated {
    stroke: #f11;
    stroke-width: 10px;
    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
}


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

#topo-oibox .onosInst {
    margin: 6px 0;
    padding: 3px;
    width: 80%;
    left: 10%;
    height: 40px;
    cursor: pointer;

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


#topo-oibox .onosInst.online {
    /* theme-related */
    color: #113;
    background-color: #bbf;
    border: 2px solid #555;
}

#topo-oibox .onosInst.mastership {
    opacity: 0.3;
}
#topo-oibox .onosInst.mastership.affinity {
    opacity: 1.0;
}


#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;
}

