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

@import '../../../public/stylesheets/variables';

table.table--ignite {
    width: 100%;

    line-height: 46px;

    th, td {
        padding: 0 20px;

        border: solid $table-border-color;
        border-width: 0;

        &:first-child {
            border-left-width: 1px;
        }

        &:last-child {
            border-right-width: 1px;
        }
    }

    th {
        border-right-width: 1px;
    }

    td {
        border-bottom-width: 1px;
    }

    thead {
        border: solid $table-border-color;
        border-width: 1px 0;

        th {
            color: $gray-light;
            font-weight: 400;
        }
    }

    tbody {
        tr {
            &:nth-child(even) {
                background-color: $body-bg;
            }
        }

        td {
            color: $text-color;

            .text-overflow {
                overflow: hidden;
                max-width: 220px;
                text-overflow: ellipsis;
                white-space: nowrap;
            }
        }
    }

    .st-sort-ascent:after,
    .st-sort-descent:after {
        margin-left: 5px;
        font-family: "ui-grid";
    }

    .st-sort-ascent:after {
        content: '\C359';
    }

    .st-sort-descent:after {
        content: '\C358';
    }
}
