/*
 * Copyright (C) 2008 Google Inc. All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 * 
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/* These styles override the default styling for HTML elements as defined in
   core/html/resources/tml.css. So far we have used this file exclusively
   for making our form elements match Firefox's. */

/*
 * Update padding for all text-like types including unknown types.
 * Non-text types have input[type="foo" i] with padding properties in
 * html.css or input_multiple_fields.css.
 */
input {
    padding:1px 0;
}

input[type="search" i] {
    padding:1px;
}

input[type="checkbox" i] {
    margin:3px 3px 3px 4px;
}

input[type="radio" i] {
    margin:3px 3px 0 5px;
}

input[type="range" i] {
    color: #c4c4c4;
}

/* Not sure this is the right color. #EBEBE4 is what Firefox uses. */
textarea:disabled,
input:disabled {
    background-color: #EBEBE4;
}

/* Cancel the above rule set for some input types. */
input[type="button" i]:disabled,
input[type="reset" i]:disabled,
input[type="submit" i]:disabled {
    background-color: ButtonFace;
}
input[type="checkbox" i]:disabled,
input[type="file" i]:disabled,
input[type="hidden" i]:disabled,
input[type="image" i]:disabled,
input[type="radio" i]:disabled,
input[type="range" i]:disabled {
    background-color: initial;
}

input[type="search" i]::-webkit-search-cancel-button {
    margin-right: 3px;
}

input[type="search" i]::-webkit-search-results-decoration {
    margin: auto 3px auto 2px;
}

input[type="button" i], input[type="submit" i], input[type="reset" i], input[type="file" i]::-webkit-file-upload-button, button {
    padding: 1px 6px;
}

/* Windows selects are not rounded. Custom borders for them shouldn't be either. */
select {
    border-radius: 0;
    /* Same as native_theme_base. */
    border-color: #a9a9a9;
}

select:-internal-list-box {
    /* Same as native_theme_base. */
    border: 1px solid #a9a9a9;
}

textarea {
    font-family: monospace;
    /* Same as native_theme_base. */
    border-color: #a9a9a9;
}
