/*
 * 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: 6px;
    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 {
    stroke: #999;
    stroke-width: 1.2px;
    fill: #eee;
    stroke: none;
}
#topo svg .linkLabel text {
    text-anchor: middle;
    stroke: #777;
    stroke-width: 0.1px;
    font-size: 9pt;
}

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

