/*
 * Copyright 2015-present 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.
 */

[ng\:cloak], [ng-cloak], .ng-cloak {
    display: none !important;
}

html, body, div#frame, div#view {
    height: 100%;
}

head, body, footer,
h1, h2, h3, h4, h5, h6, p,
a, ul, li, div,
table, tr, td, th, thead, tbody,
form, select, input, option, label {
    padding: 0;
    margin: 0;
}

h1, h2, h3, h4, h5, h6,
p, a, li, th, td,
select, input, option, label {
    font-family: sans-serif, "Droid Sans", "Lucida Grande", Arial, Helvetica;
    color: #3C3C3C;
}

body {
    background-color: white;
    overflow: hidden;
}
table {
    border-spacing: 0;
    border-collapse: collapse;
}
th, td {
    color: rgba(0, 0, 0, 0.8);
}
h3 {
    margin-bottom: 4%;
    font-size: xx-large;
    font-weight: lighter;
}
h4 {
    font-size: large;
    font-weight: lighter;
}
h5 {
    color: rgb(107, 107, 107);
    font-style: italic;
    font-weight: normal;
    font-size: 90%;
    margin-bottom: 1%;
}
p {
    font-size: 100%;
    color: rgba(0,0,0, 0.8);
    text-indent: 20px;
    text-align: justify;
    padding-right: 5%;
}
th {
    background-color: #7AB6EA;
    color: white;
    letter-spacing: 0.05em;
    font-weight: lighter;
}

button,
input[type="button"],
input[type="reset"] {
    height: 30px;
    box-shadow: none;
    border: none;
    outline: none;
    cursor: pointer;
    letter-spacing: 0.02em;
    font-size: 14px;
    background-color: lightgray;
    transition: background-color 0.4s;
}
button:hover,
input[type="button"]:hover,
input[type="reset"]:hover {
    color: white;
    background-color: rgb(122, 188, 229);
}

button[disabled],
input[type="button"][disabled],
input[type="reset"][disabled] {
    background-color: lightgray;
    color: graytext;
}


button[disabled]:hover,
input[type="button"][disabled]:hover,
input[type="reset"][disabled]:hover {
    cursor: default;
}

div.container {
    width: 85%;
    margin: 0 auto;
    min-height: 100%;
}
div.main-left, div.main-right {
    float: left;
}
div.main-left {
    width: 37%;
    padding-left: 1%;
}
div.main-right {
    width: 61%;
}

svg#icon-defs {
    display: none;
}

g.icon circle {
    fill: none;
}
g.icon use.glyph.checkMark {
    fill: rgb(68, 189, 83)
}
g.icon use.glyph.xMark {
    fill: #CE5650;
}

th.user-pic {
    background-color: white;
}
th.user-pic,
td.user-pic {
    width: 30px;
    padding-left: 4%;
}
td.user-pic img {
    width: 25px;
}

/* animation */
.fadein {
    transition: all linear 0.5s;
}
.fadein.ng-enter-stagger,
.fadein.ng-leave-stagger {
    transition-delay: 0.2s;
    animation-delay: 0.2s;
}
.fadein.ng-enter {
    opacity: 0;
}
.fadein.ng-enter.ng-enter-active {
    opacity: 1;
}
.fadein.ng-leave,
.fadein.ng-leave-active {
    opacity: 0;
}
