/*
 * 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: #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 details pane */

#topo-detail {
/* gets base CSS from .fpanel in floatPanel.css */
}

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

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

