/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file 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.
 */

/*
Accessibility: This css file modify the basic javadoc css to
conform to accessibility audit issues.
 */

/* make links have more contrast and not rely only on color */
a:link {
    font-weight: bold;
}

a[href]:hover, a[href]:focus {
    color: #a85e1e;
}

.top-nav a[href]:hover, a[href]:focus {
    color: white;
    text-decoration: underline;
}

/* ensure no horizontal scrolling is needed with small horizontal width */
@media (max-width: 800px) {
    pre, code {
        word-break: break-all;
        word-wrap: break-word;
        white-space: break-spaces;
    }

    .parameters {
        white-space: break-spaces !important;
    }

    .sub-title {
        word-break: break-all;
    }

    .member-signature {
        word-break: break-all;
    }

    .block {
        word-wrap: break-word;
    }

    .exceptions {
        white-space: break-spaces !important;
    }

    .type-signature {
        word-wrap: break-word;
    }

    .inherited-list {
        word-wrap: break-word;
    }

    .details {
        word-wrap: break-word;
    }
}

/* fixes footer weird behavior */
footer {
    margin-left: 2vw;
}
