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