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

div#login-wrapper {
    text-align: center;
}

#login h2 {
    margin: 1%;
    color: rgb(115, 115, 115);
    font-size: xx-large;
    font-weight: lighter;
    text-align: left;
    position: absolute;
    top: -140px;
}

div#login-logo {
    margin-top: 13%;
    width: 217px;
}
div#login-logo, div#login-form {
    display: inline-block;
}

#login-logo use.glyph.bird {
    fill: #CE5650;
}
#login-logo circle {
    fill: none;
}

#login div.outline {
    position: absolute;
    border: 1px solid rgba(115, 115, 115, 0.7);
    top: -160px;
    left: -25px;
    width: 300px;
    height: 245px;
    border-radius: 1px;
}

div#login-form {
    margin-left: 2.5%;
    position: relative;
    width: 255px;
}

#login-form form {
    line-height: 250%;

}
#login-form input {
    display: block;
    height: 40px;
    width: 230px;
    font-size: 19px;
    padding: 0 5px;
    margin-bottom: 3.5%;
    border-radius: 1px;
    position: absolute;
}
#login-form input[type="text"] {
    top: -90px;
}
#login-form input[type="password"] {
    top: -35px;
}

#login-form input[type="text"],
#login-form input[type="password"] {
    border: 2px solid rgba(115, 115, 115, 0.7);
    transition: border 0.1s;
}
#login-form input[type="text"]:focus,
#login-form input[type="password"]:focus,
#login-form input[type="button"]:focus {
    outline: none;
    border: solid 2px rgba(122, 188, 229, 0.5);
}

#login-form a {
    text-decoration: none;
}

#login-form input[type="button"] {
    top: 25px;
    width: 245px;
    height: 30px;
    cursor: pointer;
    letter-spacing: 0.02em;
    font-size: 100%;
    color: #3C3C3C;
    background-color: lightgray;
    transition: background-color 0.4s;
}

#login-form input[type="button"]:hover {
    color: white;
    background-color: rgb(122, 188, 229);
}
