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

.billing-detail-dialog {
  table {
    width: 100%;

    th,
    td {
      border: 1px solid #edf1f5;
      padding: 18px 15px;
      text-align: left;
    }
  }
}

.billing-detail {
  .service {
    width: 30%;
  }

  .resource-type,
  .cost-currency {
    width: 10%;
  }

  .resource-name,
  .usage-date-start,
  .usage-date-end {
    width: 15%;
    overflow: hidden;
    text-overflow: ellipsis;
    padding-right: 10px;
    white-space: nowrap;
  }

  .wide-name-field {
    width: 25%;
  }

  .resource-name {
    cursor: pointer;
    width: 20%;
  }

  .total {
    padding: 18px 20px 0;
    text-align: right;
    font-size: 20px;
    font-weight: 600;
  }
}


.scrolling-content {
  max-height: 285px;
  overflow-y: auto;
}

.mat-list-item-content {
  font-size: 15px !important;
  justify-content: space-between;
}

mat-tooltip-component>.mat-tooltip {
  white-space: pre;
}
