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

@mixin custom_btn {
    font-weight: 500;
    padding: 10px 25px !important;
}

#signin_show {
    @include custom_btn;
}

.page-landing__button-signin {
    align-self: center;
    margin-left: 30px;
    margin-right: var(--page-side-padding) !important;
    min-width: 80px;
    font-weight: 500;
    padding: 10px 25px !important;
    flex: 0 0 auto;
}

page-landing {
    font-family: Roboto;
    display: block;
    margin: 0 calc(var(--page-side-padding) * -1) calc(var(--page-side-padding) * -1);

    .btn-custom {
        @include custom_btn;
    }

    section.intro-container-wrapper {
        padding: 40px 0;

        background-color: #f9f9f9;
        border-bottom: 1px solid #aaaaaa;

        .intro-content {
            padding-right: 70px;
        }

        h1 {
            margin-top: 45px;
            font-size: 48px;
            line-height: 55px;
            font-weight: 300;
        }

        h2 {
            margin-bottom: 20px;
            font-size: 24px;
            font-style: italic;
            font-weight: 300;
        }

        p {
            font-size: 16px;
            font-weight: 300;
            color: #777777;
        }

        .btn-custom {
            margin-top: 20px;
            padding: 10px 40px !important;
            border-color: #f9f9f9 !important;
        }
    }

    section.features-container-wrapper {
        padding: 25px 0 60px;
        background-color: #ffffff;

        .section-title {
            font-size: 38px;
            font-weight: 300;
            color: #444444;
            margin: 30px 0 60px;
        }

        .feature {
            margin: 30px 0;

            h3 {
                font-size: 24px;
                font-weight: normal;
                color: #000000;
                line-height: 28px;
                margin-bottom: 10px;
            }

            p {
                color: #666666;
                font-size: 16px;
            }

            i.fa {
                font-size: 48px;
                color: #bbbbbb;
            }
        }
    }
}
