/*
 * hores
 * Copyright (c) 2023 Adrià Vilanova Martínez
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public
 * License along with this program.
 * If not, see http://www.gnu.org/licenses/.
 */
.incidents-wrapper {
  display: inline-block;
}

.incidents-wrapper--scrollable {
  max-height: 400px;
  overflow-y: auto;
}

.incidents {
  border: solid 1px rgba(0,0,0,.12);
  border-collapse: collapse;
  white-space: nowrap;
}

.incidents tr.artificial-height {
  height: 32px;
}

.incidents tr:not(:last-child) {
  border-bottom: solid 1px rgba(0,0,0,.24);
}

.incidents td, .incidents th {
  padding: 1px 8px;
}

.incidents .centered {
  text-align: center;
}

.incidents .icon-cell {
  user-select: none;
}

.incidents .has-checkbox {
  padding-left: 14px;
  padding-right: 0;
}

.incidents .has-checkbox .mdl-checkbox__ripple-container {
  height: 34px!important;
  width: 34px!important;
  top: -5px!important;
  left: -9px!important;
}

.incidents .icon-cell .material-icons {
  cursor: pointer;
}

.incidents .material-icons {
  vertical-align: middle;
}

.incidents .verification-actions {
  display: inline-block;
}

.incidents .more {
  cursor: pointer;
}

.incidents-wrapper .mdl-menu__container {
  top: 0;
  right: 0;
}

.notvisible {
  display: none;
}

.incidents tr.line-through td.can-strike {
  text-decoration: line-through;
}
