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

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

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: 70%;
    color: rgba(0,0,0, 0.8);
    text-indent: 20px;
    text-align: justify;
}

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]:hover,
input[type="button"][disabled]:hover,
input[type="reset"][disabled]:hover {
    background-color: lightgray;
    color: graytext;
    cursor: default;
}

div.container {
    width: 85%;
    margin: 0 auto;
}
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)
}

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