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

