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

#user div {
    padding-top: 2%;
}

#user div.main-left {
    width: 98%;
    padding-left: 1%;
}
#user div.main-left.family {
    width: 62%;
    padding-left: 1%;
}

#user div.main-right {
    width: 0;
}
#user div.main-right.family {
    width: 37%;
}

#user table.user-info,
#user table.user-form {
    float: left;
    width: 100%;
}

#user table.user-info th,
#user table.user-form th {
    text-align: left;
    padding: 2% 1%;
}

#user span.help:hover {
    cursor: pointer;
    color: #CE5650;
}

#user div.main-left.family table.user-info th,
#user div.main-right.family table.user-form th {
    padding: 17px;
}

#user div.main-left.family table.user-info td,
#user div.main-right.family table.user-form td {
    padding: 10px;
    height: 23px;
}
#user table.user-info td {
    padding: 1%;
}

#user table.user-form td {
    border-left: 1px solid #CE5650;
}

#user table.user-form td.buttons {
    text-align: right;
    border: none;
}

#user table.user-form tr.options td {
    padding-left: 5%;
}

#user select,
#user select:focus {
    border: none;
}

#user select {
    font-size: 95%;
}

#user option,
#user option:focus {
    border: none;
}

#user option[selected] {
    background-color: rgb(122, 188, 229);
}

#user label {
    font-weight: bold;
    display: block;
    text-align: center;
    padding: 5%;
}

#user input[type="button"],
#user input[type="reset"] {
    width: 30%;
}

#user td.buttons div {
    display: inline;
}
#user td.buttons svg {
    vertical-align: middle;
}

#rating-panel th,
#rating-panel td {
    text-align: center;
    padding: 1%;
    font-weight: lighter;
}

#rating-panel th.title,
#rating-panel td.title {
    width: 125px;
    text-align: left;
}

#rating-panel th {
    background-color: white;
    padding-top: 3%;
    border-bottom: 1px solid #CE5650;
    color: #3C3C3C;
    font-weight: normal;
}

#rating-panel tr th:first-child,
#rating-panel tr td:first-child {
    padding-left: 5%;
}
#rating-panel tr th:last-child,
#rating-panel tr td:last-child {
    padding-right: 5%;
}

div#rating-panel {
    position: relative;
    pointer-events: none;
}

#rating-panel div.ng-hide-add.ng-hide-add-active,
#rating-panel div.ng-hide-remove.ng-hide-remove-active {
    -webkit-transition: all linear 0.75s;
    transition: all linear 0.75s;
}

#rating-panel div.panel {
    position: absolute;
    top: 0;
    left: -6%;
    height: 545px;
    overflow: auto;
    padding: 0;
    pointer-events: auto;
    box-shadow: 0 3px 23px 7px rgb(118, 118, 118);
    border-radius: 3px;
}
#rating-panel table {
    table-layout: fixed;
    width: 500px;
    background-color: white;
    opacity: 1;
}

#rating-panel div.ng-hide {
    opacity: 0;
    left: -55%;
}
