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


@import './lib/_variables';
@import "./bootstrap/_bootstrap";
@import "lib/header";
@import "lib/nav";
@import "lib/footer";
@import "lib/table";
@import "lib/tabs";
@import "lib/login";
@import 'lib/breadcrumb';
@import 'lib/form';
@import "lib/logout";
/************************
colors:
    tab - active/focus color
    background-color: #105E9E !important;

ONLab darker blue select :: background-color: #004775;
#0170BB
    left-nav
    background-color: #448CCA;
    background-color // normal: #B4CADF
91BFE4

*************************/

html, body, body.login {
  height: 100%;
  min-height: 100%;
  margin: 0;
}

body{
  max-width: 100%;
  overflow-x: hidden;
}

#wrap {
  height: 100%;
  min-height: 100%;
  padding-bottom: 60px;
}

/* ************************* SIDENAV TOGGLE ************************* */

#wrapper {
    padding-left: 0;
    transition: all 0.5s ease;
    min-height: 100%;
    height: 100%;
}

#wrapper.toggled {
    padding-left: 250px;
}

#sidebar-wrapper {
  z-index: 99;
  position: fixed;
  left: 250px;
  width: 0;
  height: 100%;
  margin-left: -250px;
  overflow-y: auto;
  transition: all 0.5s ease;
  background: white;
}

#wrapper.toggled #sidebar-wrapper {
  width: 250px;
  padding: 10px;
}

#page-content-wrapper {
  width: 100%;
  position: absolute;
  padding: 15px;
  min-height: 100%;
  height: 100%;
  .container-fluid, 
  .content-wrapper, 
  .content-wrapper .col-lg-12, 
  .suit-columns,
  #content {
    min-height: 100%;
    height: 100%;
  }

  #content {
    padding-left:  ($grid-gutter-width / 2);
    padding-right: ($grid-gutter-width / 2);
  }

  #content-main {
    /*padding: ($grid-gutter-width / 2);*/
    padding-bottom: 60px;
  }
}


.ui-tabs-panel {
    min-height: 700px;
}

#wrapper.toggled #page-content-wrapper {
    position: absolute;
    margin-right: -250px;
}

@media(min-width:768px) {
    #wrapper {
        padding-left: 250px;
    }

    #wrapper.toggled {
        padding-left: 0;
    }

    #sidebar-wrapper {
      width: 250px;
      padding: 10px;
    }

    #wrapper.toggled #sidebar-wrapper {
        width: 0;
    }

    #page-content-wrapper {
        padding: 20px;
        position: relative;
    }

    #wrapper.toggled #page-content-wrapper {
        position: relative;
        margin-right: 0;
    }
}

.navbar-toggle{
  border: 1px solid $brand-primary;
}

.navbar-toggle .icon-bar{
  background: $brand-primary;
}
/* ************************* END SIDENAV TOGGLE ************************* */

[ui-view] {
    margin-bottom: 100px;
}

/************************* FORM TWEAKS *************************/
@media (min-width: $screen-md){
    .form-column.col-lg-4 {
        width: 66.66666667%;
    }
}
/************************* END FORM TWEAKS *************************/

/*   CSS for jquery Tabs */

.alignCenter {
    text-align: center !important;
    align: center !important;
}

.ui-widget-overlay {
    background: black !important;
}
.ui-corner-all {
border-bottom-left-radius: 0px !important;
border-bottom-right-radius: 0px !important;
}

#openCloudTopPage {
   margin-top: -25px;
   margin-right: -90;
   float: right;
}
#minDashboard {
  /*min-width:625px; */
  display:inline;
  float: right;
  border: 2px darkGrey;
}

.save-box {
  background-color: #ffffff;
  margin: 2px;
}
.save-box .btn-info {
  font-size: 14px;
  padding: 10px 20px 10px 20px;
}

.required:after {
  color: red !important;
  font-size: 18px;
}
/*.btn-success {color:black}*/
#suit-center {
padding: 20px;
width: 100%;
/*min-width:650px;*/
}
.inner-two-columns .inner-center-column .tab-content {
overflow-x: auto;
margin-bottom: 15px;
/*min-width: auto;*/
width:100%;
}
/*.inner-two-columns .inner-center-column {
  margin-right: 200px;
  background-color: rgb(158, 163, 159);
}*/
label {
display: block;
font-weight: bold;
margin-bottom: 5px;
}

/*For changing background color of suit center*/
#suit-center {
background-color: #ffffff;
}

/** Leave room for scroll bar now that contents can be appropriately scrolled **/
.form-horizontal .inline-group .add-row {
    margin: -1px -1px 15px 0px;
}

/** Setting overflow and 1kpx to deal with inlines/forms overlapping on 
    browser resizes **/
#content-main {
    /*overflow-x:auto;*/
    /*min-width: 1000px;*/
}

.tab-content tab-content-main {
    overflow-x: auto !important;
}

#wrap{
background:none;
}

.noclearfix {
    display:block; clear:left; width:0px; height:0px;
}

body{
background-color:#ffffff;
}

.suit-column{
background-color:#ffffff;
}



.nav-tabs > .active > a, .nav-tabs > .active > a:hover, .nav-tabs > .active > a:focus {
	/*background-color: #448CCA;*/
	background-color: #105E9E;
	color: #FFF;
	border: none;
}

/*Added by Beena for adding the three components in dashboard*/
.breadcrumb{
	display:inline-block;
	background-color: #fff;

}

.nodetextbox{
	/*background-color: #ededed;*/
	line-height: 25px;
	width: 150px; 
	text-align: center;
	font-weight: bold;
	margin-left:0px;
	display:inline-block;
	border:none;
	font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
	font-size: 8px;
}

.nodelabel{
width: 20px;
display: inline-block;
border-radius: 0px;
border:1px solid #000;
/*line-height: 23px;*/
text-align: center;
font-weight: normal;
}

#user-tools {
  font-weight: bold;
}
.header-content .header-column {
	display: none;
}
.header .input-icon {
    background-image: url("Search.png");
    background-repeat: no-repeat;
background-position:left center;
opacity:1;
    background-size: 100%;
    vertical-align:middle;
	margin-right: -30px;
    /*margin-top: 5px;*/
    position: relative;
    height: 22px;
    width: 22px;
}

.header .icon-search {
	/*background-image: url("search.png") !important;
    background-repeat: no-repeat !important;
    background-size: 120% auto !important;
    background-position: 0;*/
}

#dashboardHPC {
    padding-bottom: 10px;
}
.summary-attr {
    padding-right: 20px;
}
.summary-attr-util {
    padding-right: 20px;
    color: green;
}
.SiteDetail {
color: darkBlue;
    font-size: 1.5em;
}
#addInstances {
 color: green;
text-decoration: underline;
    padding-right: 20px;
}
#remInstances {
 color: red;
 text-decoration: underline;
}
#map-us {
    padding-top: 10px;
    width: 700px;
    height: 400px;
}

.minidashbutton {
	-moz-box-shadow:inset 0px 1px 0px 0px #ffffff;
	-webkit-box-shadow:inset 0px 1px 0px 0px #ffffff;
	box-shadow:inset 0px 1px 0px 0px #ffffff;
	background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #ffffff), color-stop(1, #f6f6f6));
	background:-moz-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
	background:-webkit-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
	background:-o-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
	background:-ms-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
	background:linear-gradient(to bottom, #ffffff 5%, #f6f6f6 100%);
	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6',GradientType=0);
	background-color:#ffffff;
	-moz-border-radius:6px;
	-webkit-border-radius:6px;
	border-radius:6px;
	border:1px solid #dcdcdc;
	display:inline-block;
	cursor:pointer;
	color:#666666;
	font-family:arial;
	font-size:15px;
	font-weight:bold;
	padding:6px 24px;
	text-decoration:none;
	text-shadow:0px 1px 0px #ffffff;
}
.minidashbutton:hover {
	background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f6f6f6), color-stop(1, #ffffff));
	background:-moz-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
	background:-webkit-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
	background:-o-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
	background:-ms-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
	background:linear-gradient(to bottom, #f6f6f6 5%, #ffffff 100%);
	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6', endColorstr='#ffffff',GradientType=0);
	background-color:#f6f6f6;
}

.newMiniDashboard {
    border: 1px solid green;
    width: auto;
}

.endDashPair {
    clear: left;
}
.miniDashPair {
    float: left;
    width: auto;
    margin-left: 20px;
}

.miniDashPair label {
 text-align: center;
}
/* Charts CSS */
p.numeral
{
	font-size:32pt;
	color:#ffffff;
	opacity: 0.7;
	font-family:Helvetica Neue;
	font-weight:100;
	text-align:center;
	line-height:75%;
}

.helper-text
{
	border: 1px solid #fff;
	padding: 7px;
	border-radius: 18px;
	font-size:13pt;
	color:#ffffff;
	opacity: 0.7;
	font-family:Helvetica Neue;
	font-weight:200;
	text-align:center;
	line-height:100%;
}
p.osobject
{
	font-size:12pt;
	color:#ffffff;
	opacity: 0.7;
	font-family:Helvetica Neue;
	font-weight:200;
	text-align:center;
	line-height:100%;
}

p.heading
{
	font-size:20px;
        letter-spacing: 1px;
	color: black;
	font-family:Arial;
	font-weight:bold;
	text-align:center;
}

/*p.heading
{
	font-size:32pt;
	color:#ffffff;
	opacity: 0.7;
	font-family:Helvetica Neue;
	font-weight:200;
	text-align:center;
}*/

div.graph 
{
	height:340px;
}

div.numeral 
{
	height:120px;
}

div.heading 
{
	height:10px;
}

div.padding 
{
	height:20px;
}

div.chartContainer
{
	/*background-image:url('chartsBg.jpg');*/
	width:527px;
	height:400px;
	border:1px;
}

/* D3 */

.axis path,
.axis line {
  fill: none;
  stroke: #ffffff;
  opacity: 0.7;
  shape-rendering: crispEdges;
}


.x.axis path {
  display: none;
}

.x.axis text {
  fill: white;
  opacity: 0.5;
}

.y.axis text {
  opacity: 0.5;
  fill: white;
}

.y.axis text.legend {
  opacity: 1.0;
  fill: white;
  font-size:8pt;
}

.line {
  fill: none;
  stroke: white;
  stroke-width: 3px;
  opacity: 0.6;
}


/******  Added in so that we can have a loader show as charts get ready to render ***/
.loading {
    //background-color: orange;
    background-image: url(spinner.gif) no-repeat center middle;
    text-align: center;
    font-size: 20px;
    height: 100%;
/*    width: auto;*/
    float: left;
    padding: 10px;
}
/* Charts CSS */

#tabs-4 {
    margin: 40px;
    font-size: 24px;
    font-weight: bold;
}

.tenant-row{
   padding-bottom: 0.7%;
}

/***********TENANT VIEW*************/

#image-dropdown,#slice-image-value,#adv-slice-image-value{
 margin-left: 5%;
}


#adv-slice-image-value{
margin-right: 0.5%;
}

#adv-network-value {
margin-right: 0.3%;
}

#network-dropdown,#adv-network-dropdown,#adv-network-value{
 margin-left: 3.7%;
}

#service-level-dropdown,#service-level-value,#adv-service-level-dropdown,#adv-service-level-value{
 margin-left: 0.2% !important;
}

#slice-name-value,#adv-slice-name-value{
   margin-left: 2%;
}
#adv-dataset-dropdown{
margin-left: 3.7%;
}
#advanced-tenant,#basic-tenant,#instance-btn,#save-btn{
  float:right;
}
 #delete-slice-btn,#download-details,#add-user-btn{
	margin-left:1%;
}

#instance-btn,#save-btn,#create-slice-btn,#delete-slice-btn,#add-user-btn,#download-details{
  margin-top:1%;
}

.tenantDialog.ui-widget input{
        border-radius: 0px !important;
	height: 12px !important;
	width: 180px !important;
	margin-right: 10% !important;
	float: right;
}

.tenantDialog .ui-dialog-buttonset .ui-button{
border-radius: 0 !important;
background-color: grey !important;
font-weight: bold !important;
font-size: 0.9em !important;
}

.tenantDialog .ui-dialog-titlebar{
border-radius: 0 !important;
background-color: grey !important;
}

.create-slice-row{
	margin-bottom: 4%;
	clear: both;
	height: 25px;
}

.create-slice-row label, .tenantDialog label{
   margin-right:1%;
   float:left;
}

.create-slice-row select{
   height:24px;
   width: 196px;
   font-size: 0.9em !important;
}

.tenant-create-slice{
	float:right;
	margin-right: 10% !important;
}

#delete-slice{
float: right;
}

#tooltip,#adv-tooltip,#basic-tooltip{
font-size:0.7em;
color:red;
display:none;
}

#tenantSliceDataWrapper {
	padding: 1% 0;
}

#advancedTenantSliceDataWrapper .help-inline{
	font-size: 11px;
	color: #999;
	padding-bottom: 1%;
}

.create-slice-row label{
	clear:both;
	margin-right: 1%;
}

#advNumOfInstances{
        margin-right: 1% !important;
}

#private-vol-checkbox{
margin: 0 0 1% 1%;
}

.public-key-warning{
text-align: center;
display:none;
}

#private-vol{
margin-right: 15% !important;
}
.customize_row {
  display: table;
}
.customize_column {
  display: table-cell;
  padding: 10px;
}

.request-form-row{
padding:1% 8%;
}

.requestDialog{
background-color: white;
border-radius: 8px;
width: 30% !important;
height: 40% !important;
margin-top: -16%;
top: -103.703125px !important;
}

.request-form-row label{
	float: left;
}


.requestDialog .ui-dialog-buttonset .ui-button{
border-radius: 0 !important;
background-color: grey !important;
font-weight: bold !important;
font-size: 0.9em !important;
}

.requestDialog .ui-dialog-titlebar-close{
float:right;
}

#request-signup{
height: 40px !important;
margin: 0 14%;
float: left;
background-color: #448CCA;
background-image: none;
width: 70% !important;
}

.requestDialog .ui-dialog-titlebar{
border-radius: 0 !important;
height: 25px;
padding-top: 2%;
}

.requestDialog #ui-id-1{
padding-left: 28%;
font-size: medium;
}

#request-site-name{
	width: 98%;
}

/* SUIT CHANGES */

.form-buttons {
    margin-top: 20px;
    padding: 10px;
    border-top: 1px solid #cccccc;
}

.form-horizontal .selector .selector-chooser li .selector-remove,
.form-horizontal .selector .selector-chooser li .selector-remove:hover{
  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);
}

.form-horizontal .selector .selector-chooser li .selector-add,
.form-horizontal .selector .selector-chooser li .selector-add:hover{
  margin-bottom: $form-group-margin-bottom;
  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
}

/* MODAL */
.ui-dialog{
  z-index: 4000 !important;
}

button.ui-dialog-titlebar-close{
  font-family: 'Glyphicons Halflings' !important;
  display: inline-block;
}

button.ui-dialog-titlebar-close:after {
    content: "\e014";
}
/* VCPe ADMIN FIX
form#vcpeservice_form ul li {
    display: inline-block;
    background: red;
    margin-top: 10px;
    width: auto;
    padding: 10px;
    border-radius: 5px;
}
*/