$shadow-width: 40px;
$shadow-transition-width: 10px;

.data-table-block {
  position: relative;
  display: inline-block;
  width: 100%;

  .data-table {
    &__wrapper {
      position: relative;
      border: 1px solid $ui-fleet-black-10;
      border-radius: 6px;
      flex-grow: 1;
      width: 100%;

      // Shadow
      background-image:
      /* Shadows */ linear-gradient(
          to right,
          white,
          $transparent
        ),
        linear-gradient(to left, white, $transparent),
        /* Shadow covers */
          linear-gradient(to right, $ui-shadow, white $shadow-transition-width),
        linear-gradient(to left, $ui-shadow, white $shadow-transition-width);

      background-position: left center, right center, left center, right center;
      background-repeat: no-repeat;
      background-color: white;
      background-size: $shadow-width 100%, $shadow-width 100%, 50% 100%,
        50% 100%;

      /* Opera doesn't support this in the shorthand */
      background-attachment: local, local, scroll, scroll;
      // End shadow
    }

    // applied to same element as data-table__table while loading
    &__no-rows {
      min-height: 272px;
    }

    &__table {
      position: relative;
      width: 100%;
      border-collapse: collapse;
      color: $ui-fleet-black-75;
      font-size: $x-small;
    }

    tr {
      border-bottom: 1px solid $ui-fleet-black-10;

      &:last-child {
        border-bottom: 0;
      }

      // override styles of checkbox data cells
      .form-field--checkbox {
        display: flex;
        justify-content: center;
        margin-bottom: 0;

        .fleet-checkbox__label {
          padding-left: 0;
        }
      }

      // Cleaner when tabbing
      a:focus-visible {
        outline-offset: 0;
        border-radius: $border-radius-medium;
      }
    }

    thead {
      background-color: $ui-off-white-opaque; // opaque needed for horizontal scroll shadow
      color: $core-fleet-black;
      text-align: left;
      border-bottom: 1px solid $ui-fleet-black-10;

      // resize header icons
      img {
        width: 16px;
        height: 16px;
        vertical-align: top;
      }

      // do not resize button icons inside headers
      .button {
        img {
          width: initial;
          height: initial;
          vertical-align: initial;
        }
      }

      th {
        padding: 0 $pad-large;
        white-space: nowrap;
        border-left: 1px solid $ui-fleet-black-10;
        font-weight: $bold;
        height: 40px; // Match body row height

        &:first-child {
          border-top-left-radius: 6px;
          border-left: none;
        }

        &.selection__header {
          width: 22px;
          padding: 0 $pad-medium;
        }

        &:last-child {
          border-top-right-radius: 6px;
        }

        &.actions__header,
        &.id__header // Same as actions__header on some pages
        {
          border-left: none;
          width: 99px;
        }

        &.linkToFilteredHosts__header,
        &.view-all-hosts__header // Same as linkToFilteredHosts__header on some pages
        {
          border-left: none;
          width: 120px;
        }

        .column-header {
          // Filters next to header name
          display: flex;
          min-width: max-content;
          gap: $pad-small;

          span {
            display: flex;
            align-items: center;
            gap: 3px;
          }
        }

        .header-cell {
          font-weight: $bold;
        }

        // Sort arrows change color on hover
        .sortable-header {
          height: 36px;

          &:hover {
            .header-cell:not(.ascending) {
              .ascending-arrow {
                border-bottom-color: $ui-fleet-black-50;
              }
            }
            .header-cell.ascending {
              .descending-arrow {
                border-top-color: $ui-fleet-black-50;
              }
            }
          }
        }
      }

      &.active-selection {
        background: none;
        z-index: 1;
        th {
          border: 0;
        }
        .fleet-checkbox {
          opacity: 0;
        }
        .active-selection__container {
          background-color: $ui-off-white;
          width: 100% !important; // Too much specificity currently at page-level styling. Revisit after data table CSS update to remove !important.
          .active-selection__inner {
            justify-content: flex-start;
          }
        }
      }
    }

    .active-selection {
      position: absolute;
      top: 0px;
      width: 100%;
      border: 0;
      border-radius: 6px;

      &__checkbox {
        width: 16px;
      }

      &__container {
        padding: 0 20px;
      }

      &__inner {
        display: flex;
        justify-content: space-between;
        align-items: center;

        p {
          margin: 0 $pad-medium 0 0;
          font-weight: $regular;

          span {
            font-weight: $bold;
          }
        }

        button {
          margin-right: $pad-medium;
        }
      }

      &__inner-left,
      &__inner-right {
        display: flex;
        align-items: center;
      }
    }

    tbody {
      .component__tooltip-wrapper {
        margin: 10px 0; // vertical padding multiline text with tooltip
      }

      .component__tooltip-wrapper__element {
        white-space: initial; // wraps long text with tooltip
      }

      tr,
      .single-row {
        transition: background-color 150ms ease-out;
        &:hover {
          background-color: $ui-off-white-opaque; // opaque needed for horizontal scroll shadow
        }
        &:focus-visible {
          outline: 2px solid $core-focused-outline;
          background: $ui-off-white;
          border-radius: $border-radius;
        }
      }

      .single-row {
        &:hover {
          cursor: pointer;
        }
        &:active {
          background-color: $ui-vibrant-blue-10-opaque; // opaque needed for horizontal scroll shadow
        }
      }

      .clickable-row {
        &:hover {
          cursor: pointer;
        }
      }

      td {
        height: 40px;
        padding: 0 $pad-large;
        max-width: 500px;
        word-wrap: break-word;

        &.actions__cell,
        &.id__cell // Same as actions__cell on some pages
        {
          display: flex;
          justify-content: end; // Aligns actions dropdown to right of table
          max-width: 99px;
        }

        &.linkToFilteredHosts__cell,
        &.view-all-hosts__cell // Same as linkToFilteredHosts__cell on some pages
        {
          text-align: right;
          max-width: 140px;
          // display: flex causes layout issues on /software/vulnerabilities table
          align-items: center;
        }

        &.selection__cell {
          width: 0px;
          padding: 0 $pad-medium;
        }
        .link-cell,
        .text-cell {
          display: block; // inline-block is not vertically centered
          white-space: nowrap;
          text-overflow: ellipsis;
          margin: 0;
          .__react_component_tooltip {
            white-space: normal;
          }
        }

        // Caution: LinkCell depends on this to have animation only under text and not icons etc
        .link-cell {
          display: inline-block; // Underline only words
          overflow: visible;
          @include link;

          &:not(.link-cell--tooltip-truncate) {
            @include animated-bottom-border;
          }

          &.link-cell--tooltip-truncate {
            .data-table__tooltip-truncated-text-container {
              position: relative;
              @include bottom-border;
            }

            &:hover,
            &:focus {
              margin-bottom: 0; // Undo margin-bottom of animated bottom border

              .data-table__tooltip-truncated-text::after,
              .data-table__tooltip-truncated-text::after {
                transform: scaleX(1);
              }
            }
          }

          &:hover {
            .data-table__tooltip-truncated-text-container {
              @include animated-bottom-border;
              margin-bottom: 0; // Undo margin-bottom of animated bottom border

              &:hover {
                margin-bottom: 0; // Undo margin-bottom of animated bottom border
              }

              &::after {
                transform: scaleX(
                  1
                ); // This gets the animation on the text only when hovering over the whole link-cell
              }
            }
          }

          > div {
            display: flex;
            align-items: center;
            gap: $pad-small;
            white-space: nowrap;
            text-overflow: ellipsis;
          }
          .truncated-tooltip {
            font-weight: $regular;
          }
        }

        // css to properly style link-cell with tooltip
        .link-cell-tooltip-wrapper {
          overflow: visible; // fixes tooltip overflow cut off by cell
          white-space: nowrap; // single line
          margin: 0; // padding applied to .link-cell for larger clickable area
          .component__tooltip-wrapper {
            &__element {
              display: block;
              white-space: nowrap; // single line
              text-overflow: ellipsis; // truncates text
              overflow: hidden;
              // TODO – this naming is now confusing, as this .link-cell is not the outermost layer of
              // the cell – it's a NameCell
              .link-cell {
                padding: 0;
              }
            }

            &__tip-text {
              cursor: auto;
            }
          }
        }
        .w400 {
          max-width: 352px; // 400px - 48px padding
          min-width: 100%;
          text-align: left;
        }
        .w250 {
          max-width: 202px; //  250px - 48px padding
          min-width: 100%;
          text-align: left;
        }
        .w150 {
          max-width: 102px; //  250px - 48px padding
          min-width: 100%;
          text-align: left;
        }
        .italic-cell {
          font-style: italic;
          .__react_component_tooltip {
            font-style: normal;
          }
        }
        .grey-cell {
          color: $ui-fleet-black-50;
        }
      }

      .disable-highlight:hover {
        background-color: initial;
      }
    }
  }

  .loading-overlay {
    display: flex;
    flex-grow: 1;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: rgba(255, 255, 255, 0.8);
    z-index: 1;
  }

  &__footer {
    display: flex;
    align-items: center;
    height: 50px; // Match pagination height as pagination is optionally rendered
  }

  &__table-help-text {
    font-size: $x-small;

    display: flex;
    align-items: center;
  }
}
