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

#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 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: 50%;
    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;
}

