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


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

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

#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: #8ab;
}
#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;
    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 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: 0px 4px;
    top: 20px;
    left: 50px;
    color: black;
}

#topo-summary h3 {
    margin: 0px 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: 0px 4px;
    top: 20px;
    left: 50px;
    color: black;
}

#topo-detail h3 {
    margin: 0px 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: 120px;
    height: 100px;
}

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

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

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

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


#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-oibox .onosInst_OLD {
    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_OLD .onosTitle {
    text-align: center;
    font-size: 10pt;
    margin-top: 6px;
    color: #888;
}

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

#topo-oibox .onosInst_OLD svg .glyphIcon {
    opacity: 0.5;
    fill: black;
    stroke: none;
    fill-rule: evenodd;
}
#topo-oibox .onosInst_OLD.online svg .glyphIcon {
    opacity: 1;
    fill: black;
    stroke: none;
    fill-rule: evenodd;
}


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

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


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

