/*
 * 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-oibox svg .glyphIcon,
#topo svg .glyphIcon {
    fill: black;
    stroke: none;
    fill-rule: evenodd;
}
#topo svg .glyphIcon rect {
    fill: #ddd;
    stroke: none;
}

/* NODES */

#topo svg .node {
    cursor: pointer;
}

#topo svg .node.selected rect,
#topo svg .node.selected circle {
    fill: #ffA300;
    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: #335a9a;
}

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

/* LINKS */

#topo svg .link {
    opacity: .7;
    stroke-width: 1.2px;
}

#topo svg .link.inactive {
    opacity: .2;
    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;
    stroke-dasharray: 8 8
}

#topo svg .linkLabel rect {
    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 svg .glyphIcon {
    opacity: 0.5;
    fill: black;
    stroke: none;
    fill-rule: evenodd;
}
#topo-oibox .onosInst.online svg .glyphIcon {
    opacity: 1;
    fill: black;
    stroke: none;
    fill-rule: evenodd;
}

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

