
/*
 * Copyright 2017-present Open Networking Foundation

 * 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.
 */


/* CONTAINER */
#xosDiagnostic, [ui-view] {
    height: 100%;
    min-height: 700px;
    position: relative;
}

diagnostic-container .form-control.small-padding{
  padding: 6px;
}

diagnostic-container .half-height {
    position: relative;
    height: 50%;
}

diagnostic-container .onethird-height {
    position: relative;
    height: 33%;
    border-bottom: 1px solid #999;
}

diagnostic-container .twothird-height {
    position: relative;
    height: 67%;
}

diagnostic-container .subscriber-select{
    max-width: 200px;
    position: absolute;
    top: 20px;
    right: 20px;
    z-index: 1;
}

diagnostic-container .onethird-height .well,
diagnostic-container .twothird-height .well {
  font-weight: bold;
  max-width: 165px;
  text-align: center;
  margin-top: 15px;
  background: #eee;
  border-color: steelblue;
  padding: 10px;
}

diagnostic-container .onethird-height .well.pull-right{
  position: absolute;
  right: 0px;
  top: -15px;
  cursor: pointer;
  z-index: 200;
}


/* subscriber-status-modal */
subscriber-status-modal .row + .row {
  margin-top: 20px;
}

.half-height + .half-height {
    border-top: 1px solid black;
}

service-topology,
logic-topology {
    height: 100%;
    width: 100%;
    display: block;
    position: absolute;
    top: 0;
}

logic-topology .subscriber circle,
logic-topology .device circle{
    fill: #fff;
    stroke: green;
    stroke-width: 1px;
}

logic-topology > svg {
    position: absolute;
    top: 0;
}

/* CLOUDS */

logic-topology .network .cloud {
    fill: #fff;
    stroke: green;
    stroke-width: 1px;   
}

/* RACK */
logic-topology .node.rack > g > rect{
    fill: #ccc;
    stroke: steelblue;
    stroke-width: 1px;
}

/* CP NODE */

logic-topology .compute-node > rect{
    fill: #fff;
    stroke: steelblue;
    stroke-width: 1px;
}

logic-topology .compute-node > text{
    font-size: 16px;
}

/* INSTANCE */

logic-topology .instance > rect{
    fill: #eee;
    stroke: steelblue;
    stroke-width: 1px;
}

logic-topology .node .instance.active rect{
    fill: lightsteelblue;
    stroke: steelblue;
    stroke-width: 1px;   
}

logic-topology .node .instance.active.good > rect{
    fill: green;
}

logic-topology .node .instance.active.provisioning > rect{
    fill: yellow;
}

logic-topology .node .instance.active.bad > rect{
    fill: red;
}

/* INSTANCE STATS */

logic-topology .node .instance .stats-container rect {
  fill: white;
}

logic-topology .node .instance .stats-container text.name{
  font-weight: bold;
}

logic-topology .node .instance .stats-container text.ip{
  font-style: italic;
  font-size: 10px;
}

/* CONTAINERS */
logic-topology .node .instance .stats-container .container rect {
  fill: #eee;
  stroke: steelblue;
  stroke-width: 1px;
}

/* LEGEND */

.legend {
    fill: #fff;
    stroke: #ccc;
    stroke-width: 1px;
    position: relative;
}

.legend text {
    stroke: #000;
}

.node {
    cursor: pointer;
}

.node circle,
.node rect{
    fill: #fff;
    stroke: steelblue;
    stroke-width: 1px;
}

.node.subscriber circle,
.node.subscriber rect,
.node.router circle,
.node.router rect {
    stroke: #05ffcb;
}

.node.slice rect {
    stroke: #b01dff;
}

.node.instance rect {
    stroke: #ccc;
}

.node.instance rect.active {
    stroke: #ff8b00;
}

.node rect.slice-detail{
    fill: #fff;
    stroke: steelblue;
    stroke-width: 3px;
}

.node text {
    font: 18px sans-serif;
}

.node .instance text {
    font: 12px sans-serif;
}

.node text.small {
    font-size: 10px;
}

.link, .device-link {
    fill: none;
    stroke: #ccc;
    stroke-width: 2px;
}

.link.slice {
    stroke: rgba(157, 4, 183, 0.29);
}
.link.instance{
    stroke: #ccc;
}

.link.instance.active{
    stroke: rgba(255, 138, 0, 0.65);
}

.service-details{
    width: 200px;
    position: absolute;
    top: 20px;
    right: 20px;
}

/* when showing the thing */

.animate.ng-hide-remove {
    animation:0.5s bounceInRight ease;
}

/* when hiding the picture */
.animate.ng-hide-add {
    animation:0.5s bounceOutRight ease;
}

/* LOADER */
.loader {
  font-size: 10px;
  margin: 150px auto;
  text-indent: -9999em;
  width: 11em;
  height: 11em;
  border-radius: 50%;
  background: #ffffff;
  background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
  background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
  background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
  background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
  background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
  position: relative;
  animation: load3 1.4s infinite linear;
  transform: translateZ(0);
}
.loader:before {
  width: 50%;
  height: 50%;
  background: #105E9E;
  border-radius: 100% 0 0 0;
  position: absolute;
  top: 0;
  left: 0;
  content: '';
}
.loader:after {
  background: #fff;
  width: 75%;
  height: 75%;
  border-radius: 50%;
  content: '';
  margin: auto;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}

@keyframes load3 {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

/* MODALS */

.modal.fade.in {
  display: block;
}

/* ANIMATIONS */

@keyframes bounceInRight {
    from, 60%, 75%, 90%, to {
        animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    }

    from {
        opacity: 0;
        transform: translate3d(3000px, 0, 0);
    }

    60% {
        opacity: 1;
        transform: translate3d(-25px, 0, 0);
    }

    75% {
        transform: translate3d(10px, 0, 0);
    }

    90% {
        transform: translate3d(-5px, 0, 0);
    }

    to {
        transform: none;
    }
}

@keyframes bounceOutRight {
  20% {
    opacity: 1;
    transform: translate3d(-20px, 0, 0);
  }

  to {
    opacity: 0;
    transform: translate3d(2000px, 0, 0);
  }
}