/*
       Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you 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.
*/
#nav_menu { display: none; }
#suggest_project_name{
    font-size: .8em;
}
div.content {
    font-family: Helvetica;
}
div.content div.row > div.column {
    width: 100%
}
div.welcome { margin: 2em 0 1em; }
div.welcome input {
    width: 88%;
    padding-right: 32px;
    line-height: 20px;
    font-size: 18px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
}
div.welcome .error, div.welcome .success, #project_url {
    font-size: 13px;
    padding: 5px;
    background: none;
    border: 0;
    margin-bottom: 0;
}
div.welcome .error, .error_icon {
    color: #D41326;
}
div.welcome .success, .success_icon {
    color: #373;
}
#name_availability {
    position: relative;
    left: -20px;
    font-weight: 500;
}
.error_icon, .success_icon {
    display: none;
    position: absolute;
    left: -50px;
    top: 8px;
    z-index: 2;
}
.error_icon.allura, .success_icon.allura {
    color: #fff;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    font-weight: bold;
    height: 16px;
    width: 16px;
    text-align: center;
    font-size: 14px;
}
.error_icon.allura {
    background: #D41326;
}
.success_icon.allura {
    background: #373;
}
div.welcome div.grid-9{
    padding-top: 5px;
}
div.welcome div.grid-3{
    padding-top: 2px;
}
#url_fragment {
    font-weight: 600;
}
#start {
    display: inline-block;
    position: relative;
    top: -1em;
    font-size: 18px;
    font-weight: 600;
    text-shadow: none;
    color: white !important;
    padding: 1em 2em 1em 2em;
    text-decoration: none;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    background: rgb(0,0,0);
    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, to(rgb(0,0,0)), from(rgb(90,90,90)));
    background-image: -moz-linear-gradient(100% 100% 90deg, rgb(0,0,0), rgb(90,90,90) 100%);
    border: 1px solid black;
}
div.button-row {
    margin: 30px 0 100px 20px;
}
div.tool {
    float: left;
    position: relative;
    padding: 10px 20px 10px 10px;
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    -o-border-radius: 4px;
    -ms-border-radius: 4px;
    -khtml-border-radius: 4px;
    border-radius: 4px;
    border: 1px solid #aaa;
    width: 395px;
    margin: 5px 20px;
    background-color: whiteSmoke;
    height: 74px;
}
div.tool img {
    left: 10px;
    position: absolute;
    top: 26px;
}
div.tool .checkbox-wrapper {
    display: block;
    position: absolute;
    top: 6em;
}
div.tool .checkbox-wrapper span {
    font-size: 13px;
    font-weight: 600;
}
div.tool h1, div.welcome {
    font-size:18px;
    font-weight: 300;
}
div.tool h1 {
    padding: 0;
    position: relative;
    left: 20px;
    top: -28px;
    font-weight: 600;
}
div.tool p {
    padding: 0;
    position: relative;
    top: -33px;
    display: block;
    font-size: 13px;
    line-height: 18px;
}

form input[type=checkbox] {
    background: none;
    border: 0;
    margin: 0;
    margin-bottom: 3px;
    padding: 0;
    box-shadow: none;
    border-radius: none;
}
