html {
    font-family: Arial;
}
* {
    box-sizing: border-box;
}

table {
    width: 100%;
    border-collapse: collapse;
}

th, td {
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;
}

th {
    background-color: #f2f2f2;
}

tr:nth-child(even) {
    background-color: #f2f2f2;
}

tr:hover {
    background-color: #dddddd;
}

h1 {
    margin-bottom: 20px;
    font-size: 24px;
    text-align: center;
}

.projects-list{
    width: 100%;
    max-width: 1400px;
    margin: 50px auto;
}

.btn {
    align-items: center;
    border-radius: 4px;
    cursor: pointer;
    display: inline-flex;
    height: 35px;
    justify-content: center;
    line-height: 1;
    padding: 0 16px;
    transition: all 100ms linear;
    text-decoration: none;
    font-size: 14px;
}

.btn-primary {
    background-color: #1e79f2;
    border: 1px solid #1e79f2;
    color: #fff;
}

.btn-danger {
    background-color: #ff0000;
    border: 1px solid #ff0000;
    color: #fff;
}

.add-project-button {
}

.btn-primary:hover {
    background-color: #0056b3;
    border-color: #0056b3;
    cursor: pointer;
}

.btn-danger:hover {
    background-color: #d70909;
    border-color: #d70909;
    cursor: pointer;
}

.edit-cell {
    text-align: center;
    max-width: 58px;
}

.delete-cell {
    text-align: center;
    max-width: 37px;
}

.form-container {
    max-width: 500px;
    margin: 50px auto;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
    background-color: #f9f9f9;
}

.form-group {
    margin-bottom: 15px;
}

.form-group label {
    display: block;
    margin-bottom: 5px;
    font-weight: bold;
}

.form-group input, .form-group select {
    width: 100%;
    padding: 8px;
    box-sizing: border-box;
}

.projects-btn-group {
    display: flex;
    justify-content: space-between;
    margin-top: 50px;
    margin-bottom: 10px;
}

.projects-btn-group label {
    font-weight: bold;
}

.projects-btn-group input {
    height: 29px;
    margin-right: 10px;
    margin-left: 6px;
}

/* navbar */
.navbar {
    display: flex;
    /*justify-content: flex-end;*/
    align-items: center;
    padding: 10px 20px;
    background-color: #f8f9fa;
    border-bottom: 1px solid #e7e7e7;
    position: relative;
    font-size: 16px;
}

.navbar .user-info {
    display: flex;
    align-items: center;
    cursor: pointer;
}

.navbar .user-info span {
    margin-right: 8px;
    font-size: 16px;
    color: #343a40;
}

.navbar .user-info i {
    font-size: 12px;
}

.navbar .dropdown-menu {
    display: none;
    position: absolute;
    right: 20px;
    top: 40px;
    background-color: #fff;
    border: 1px solid #e7e7e7;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
    border-radius: 4px;
    z-index: 1000;
    width: 150px;
}

.navbar .dropdown-menu a {
    display: block;
    padding: 10px 20px;
    color: #007bff;
    text-decoration: none;
}

.navbar .dropdown-menu a:hover {
    background-color: #f8f9fa;
}

.navbar .dropdown-menu .admin-link {
    font-weight: bold;
}

.navbar .dropdown-menu .admin-link:hover {
    background-color: #f8f9fa;
}

#filter-form .timereports-filter-field .select2-container {
    width: 100% !important;
    max-width: 100%;
    font-size: 13px !important;
}

#filter-form .timereports-filter-field select.select-2-init:not(.select2-hidden-accessible) {
    width: 100%;
    max-width: 100%;
}

.timereports-filter-label {
    display: block;
    margin-bottom: 4px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.2;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: #6c757d;
}

.timereports-filter-field {
    flex: 0 0 auto;
    margin-right: 5px;
    min-width: 0;
}

.timereports-filter-field--jira {
    /*flex-basis: calc(10% - 6px);*/
    /*max-width: calc(10% - 6px);*/
    flex-basis: calc(11% - 6px);
    max-width: calc(11% - 6px);
}

.timereports-filter-field--projects {
    /*flex-basis: calc(12% + 18px);*/
    /*max-width: calc(12% + 18px);*/

    flex-basis: calc(15% + 18px);
    max-width: calc(15% + 18px);
}

.timereports-filter-field--users {
    /*flex-basis: calc(11% + 12px);*/
    /*max-width: calc(11% + 12px);*/

    flex-basis: calc(13% + 12px);
    max-width: calc(13% + 12px);
}

.timereports-filter-field--labels {
    flex-basis: calc(10% - 6px);
    max-width: calc(10% - 6px);
}

.timereports-filter-field--range {
    flex-basis: calc(10% - 6px);
    max-width: calc(10% - 6px);
}

.timereports-filter-field--from,
.timereports-filter-field--to {
    /*flex-basis: 100px;*/
    /*max-width: 100px;*/

    flex-basis: 7%;
    max-width: 7%;
}

.timereports-filter-field--from input,
.timereports-filter-field--to input {
    width: 100%;
    max-width: 100%;
    margin-right: 0;
    box-sizing: border-box;
}

.timereports-filter-field--jira.is-loading {
    opacity: 0.75;
}

#date_from,
#date_to {
    height: 27px;
    border: 1px solid #6aa5e2;
    border-radius: 4px;
    padding-left: 5px;
    margin-right: 5px;
}

.timereports_filters {
    margin-top: 20px;
    margin-bottom: 6px;
    align-items: flex-end;
}

.select2-container--default .select2-selection--multiple,
.select2-container--default .select2-selection--single{
    border-color: #6aa5e2 !important;
}

#filter-form input {
    font-size: 13px;
}

.select2-container .select2-selection--multiple,
.nav-jira-select .select2-selection{
    min-height: 27px !important;
    margin-right: 5px;
}

/* До инициализации Select2 — те же ширина/высота, что у .select2-selection (27px) */
select.select-2-init:not(.select2-hidden-accessible) {
    display: block;
    box-sizing: border-box;
    width: 100%;
    min-height: 27px;
    height: 27px;
    max-height: 27px;
    overflow: hidden;
    margin: 0;
    padding: 0 8px;
    border: 1px solid #6aa5e2;
    border-radius: 4px;
    background-color: #fff;
    color: #444;
    font-size: 13px;
    line-height: 25px;
    vertical-align: middle;
}

select.select-2-init[multiple]:not(.select2-hidden-accessible) {
    height: 27px;
    min-height: 27px;
    max-height: 27px;
}

.nav-jira-select > select.select-2-init:not(.select2-hidden-accessible) {
    width: 100%;
    font-size: 15px;
    line-height: 27px;
    padding-right: 28px;
}

#filter-form select.select-2-init:not(.select2-hidden-accessible) {
    width: 100%;
}

.filter_select_container > select.select-2-init:not(.select2-hidden-accessible) {
    width: 100%;
}

#apply-filters,
#save-filters,
#update-filter {
    height: 27px;
    border-radius: 4px;
    margin-right: 5px;
}

#save-filters,
.modal-footer #confirm-save,
.send-report-button {
    background-color: #0dbf48;
    border-color: #0dbf48;
    margin-right: 10px;
}

#save-filters:hover,
.modal-footer #confirm-save:hover,
.send-report-button:hover {
    background-color: #07a33b;
    border-color: #07a33b;
}

#apply-filters:hover {
    cursor: pointer;
}

.timereports_content {
    /* БЫЛО: margin-left/right: 50px;
       Правая колонка шапки (.timereports_filters_right) и ширина #filter-form —
       парные: форма занимает всё, кроме фиксированных ~320px. Чтобы расширить
       колонку и НЕ сузить форму, недостающие 48px взяты из полей страницы,
       а вычитаемая константа формы увеличена ровно на те же 48px —
       абсолютная ширина формы осталась прежней. */
    margin-left: 26px;
    margin-right: 26px;
}

.timereports_header {
    display: flex;
    align-items: flex-end;
    width: 100%;
    position: sticky;
    top: 0;
    z-index: 100;
    background-color: #fff;
}

/* Clickable collapse toggle injected by JS on mobile; hidden on desktop */
.tr-card-toggle {
    display: none;
}

.timereports_content .reports {
    position: relative;
    z-index: 1;
}

.timereports_filters {
    width: 100%;
    display: flex;
    overflow: visible;
}

.timereports_header #filter-form {
    /*width: 80%;*/
    /* БЫЛО: calc(100% - 320px) при полях страницы 50px — та же абсолютная
       ширина: контейнер стал шире на 48px, вычитаемое выросло на те же 48px. */
    width: calc(100% - 368px);
    overflow: visible;
}

.loader-image {
    width: 20px;
    height: 20px;
}

.timereports_filters .loader {
    padding-top: 3px;
    margin-left: 5px;
}

.btn-primary.btn-disabled,
.remove-email.disabled {
    cursor: auto;
    background-color: #a1c3e9 !important;
    border-color: #a1c3e9 !important;
}

/* Выгрузка таблицы /timereports: две кнопки форматов -------------------------
   БЫЛО (1): прозрачные квадратные кнопки 28x28 с png-иконками, подпись формата
             только в тултипе ::after по data-tooltip.
   БЫЛО (2): сегментированный переключатель — серая «дорожка» с белым сегментом.
   СТАЛО: две отдельные синие кнопки-«таблетки» .XLSX / .CSV без общего фона.
   Причина: формат читается сразу; синий — цвет действий страницы (.btn-primary). */
.timereports-download-group {
    display: flex;
    align-items: center;
    /* БЫЛО: gap: 0; padding: 3px; border-radius: 6px; background-color: #f1f3f5;
       (общая серая «дорожка» сегментов) — фон убран, кнопки стоят отдельно. */
    gap: 8px;
    margin-top: 0;
    margin-bottom: 0;
    /* БЫЛО: margin-left: auto; — вправо группу и так толкает margin-right: auto
       у .filter_select_container; фиксированный отступ гарантирует зазор
       до селекта «Saved filters». Бюджет строки: 361px правого столбца
       минус 200px селекта = 161px на отступ и обе кнопки (66 + 8 + 66). */
    margin-left: 16px;
    align-self: flex-end;
    flex-shrink: 0;
}

.timereports-download-btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* Одинаковая min-width у обеих кнопок: ширину задаёт самая длинная подпись.
       Считано по Arial: «.XLSX» 13px = 37px + 2×14px паддинга = 65px -> 66px.
       Она же держит вёрстку, когда подпись подменяется лоадером (50px). */
    /* БЫЛО (иконки): width: 28px; height: 28px; padding: 0;
       БЫЛО (сегменты): min-width: 72px; height: 24px; padding: 0 14px;
                        border-radius: 4px; background: transparent; color: #495057;
       БЫЛО (кнопки, ужатые под столбец 313px): min-width: 44px; height: 26px;
                        padding: 0 8px; font-size: 12px; + своя min-width у --xlsx. */
    min-width: 66px;
    height: 28px;
    padding: 0 14px;
    border: 0;
    /* Скругление «таблетка» */
    border-radius: 999px;
    /* Синий — как у .btn-primary страницы */
    background-color: #1e79f2;
    color: #fff;
    font-size: 13px;
    /* БЫЛО: 500 — Arial его всё равно рисует обычным начертанием */
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
    transition: background-color 100ms linear;
}

/* БЫЛО: белый «приподнятый» сегмент; теперь — ховер .btn-primary страницы */
.timereports-download-btn:hover:not(:disabled) {
    background-color: #0056b3;
}

.timereports-download-btn:active:not(:disabled) {
    background-color: #0056b3;
}

.timereports-download-btn:focus-visible {
    outline: 2px solid #1e79f2;
    outline-offset: 2px;
}

/* БЫЛО: opacity: 0.65; — на синем фоне читается хуже, чем осветлённый синий
   (тот же приём, что у .tr-automation__btn:disabled). */
.timereports-download-btn:disabled {
    cursor: not-allowed;
    background-color: #a9c6ee;
}

/* Во время выгрузки кнопка светлеет: gif-лоадер чёрный и на синем почти не виден.
   Правило идёт после :disabled — одинаковая специфичность, побеждает последнее. */
.timereports-download-btn.is-loading {
    background-color: #fff;
    box-shadow: inset 0 0 0 1px #1e79f2;
}

/* БЫЛО: .timereports-download-icon { display: block; width: 36px; height: 36px; } */
.timereports-download-label {
    display: block;
    white-space: nowrap;
}

.timereports-download-loader {
    display: inline-flex;
    align-items: center;
    line-height: 0;
}

.timereports-download-loader .loader-image {
    width: 22px;
    height: 22px;
}

/* Атрибут hidden сам по себе не победит авторский display. */
/* БЫЛО: .timereports-download-icon[hidden] */
.timereports-download-label[hidden],
.timereports-download-loader[hidden] {
    display: none !important;
}

/* БЫЛО: подпись по ховеру (тултип в оформлении .tooltip из навбара).
   Убрана вместе с data-tooltip — подпись формата видна на самой кнопке.
.timereports-download-btn::after {
    content: attr(data-tooltip);
    display: none;
    position: absolute;
    bottom: calc(100% + 6px);
    left: 50%;
    transform: translateX(-50%);
    padding: 5px 10px;
    border-radius: 5px;
    background-color: rgba(0, 0, 0, 0.7);
    color: #fff;
    font-size: 14px;
    line-height: 1.2;
    white-space: nowrap;
    pointer-events: none;
    z-index: 9999;
}

.timereports-download-btn:hover:not(:disabled)::after,
.timereports-download-btn:focus-visible::after {
    display: block;
}
*/


#report-table {
    font-size: 13px !important;
}

.report-sending-logs-table {
    font-size: 13px; !important;
}


.projects-table {
    font-size: 14px;
}

.projects-list button.btn-primary {
    max-height: 27px;
}

.projects-list button.btn-danger {
    max-height: 27px;
}

.projects-list a.btn-primary {
    max-height: 27px;
}

#time_goal {
    max-height: 27px;
}

.projects-list label {
    font-size: 14px;
}

.nav-links {
    /*margin-right: auto;*/
}

.nav-links a {
    color: #343a40;
    margin-right: 20px;
    text-decoration: none;
}

.nav-links a.active {
    /*color: #868484;*/
    font-weight: bold;
    color: #000;
}



.modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 1000;
}

.modal-content {
    background: #fff;
    padding: 20px;
    border-radius: 8px;
    width: 700px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
    text-align: center;
    font-size: 15px;
}

.modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.modal-header h3 {
    margin-top: 0;
    margin-bottom: 0;
}

.modal-body {
    margin-top: 20px;
    text-align: left;
}

.modal-footer {
    margin-top: 20px;
    display: flex;
    justify-content: center;
}

.modal-footer .close-modal {
    background-color: #6c757d;
}

.modal-footer button {
    border-radius: 4px;
    height: 37px;
    font-size: 15px;
    width: 150px;
}

.btn-secondary {
    background-color: #6c757d;
    color: #fff;
    padding: 10px 20px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

.btn-secondary:hover {
    background-color: #555a5e;
}

.close-modal {
    background: none;
    border: none;
    font-size: 20px;
    cursor: pointer;
}

#selected-filters {
    list-style-type: none;
    padding: 0;
}

#selected-filters li {
    margin-bottom: 10px;
}

.model-header-separator {
    border-color: #fff;
}

.modal-header .close-modal {
    color: #d11515;
    font-weight: bold;
}

input#filter-name,
input#filter-alias {
    width: 510px;
    height: 27px;
}

.modal-btns-container {
    position: relative;
}

.loader-modal {
    position: absolute;
    left: -35px;
    top: 7px;
}

.modal-btns-container .loader-image {
    width: 25px;
    height: 25px;
}

.modal-footer .btn-primary.disabled {
    background-color: #7adc9a !important;
    border-color: #7adc9a !important;
    cursor: auto !important;
}

.modal-footer .btn-danger {
    margin-right: 10px;
    cursor: pointer;
}

/*.modal-footer .btn-danger.disabled {*/
/*    background-color: #ff8a8a !important;*/
/*    border-color: #ff8a8a !important;*/
/*    cursor: auto !important;*/
/*}*/

.btn-danger.disabled {
    background-color: #ff8a8a !important;
    border-color: #ff8a8a !important;
    cursor: auto !important;
}

.modal-body-warning {
    color: #ff0000;
    font-weight: bold;
}

.modal-body-success {
    color: #0dbf48;
    font-weight: bold;
}

.filters-list,
.jiras-list,
.reports-list {
    margin-left: 50px;
    margin-right: 50px;
}

.filters-table,
.jiras-table,
.reports-table {
    font-size: 14px;
}

.filters-toolbar {
    margin-bottom: 3px;
    margin-top: 30px;
}

.filters-add-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 27px;
    width: 27px;
    padding: 0;
    font-weight: bold;
    font-size: 18px;
    line-height: 1;
    text-decoration: none;
}

.header-filters-name {
    width: 280px;
}

.header-filters-alias {
    width: 280px;
}

.header-filters-projects {
    width: 230px;
}

.header-filters-users {
    width: 230px;
}

.header-filters-labels {
    width: 230px;
}

.header-filters-date_range {
    width: 170px;
}

.header-filters-edit {
    width: 50px;
}

.header-filters-delete {
    width: 50px;
}

.filters-table .edit-cell form,
.filters-table .delete-cell form {
    display: inline;
    margin: 0;
}

.filters-edit-btn,
.filters-delete-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    min-width: 32px;
    height: 27px;
    max-height: 27px;
    padding: 0;
    text-decoration: none;
    font-size: 13px;
    line-height: 1;
}

.filters-table button,
.filters-table .filters-edit-btn {
    max-height: 27px;
}

.filters-name-link {
    color: inherit;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.filters-name-link:hover {
    color: var(--link-color, #2563eb);
}

.filters-meta-cell-inner {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.filters-meta-value {
    flex: 1 1 auto;
    min-width: 0;
}

.filters-meta-input {
    flex: 1 1 auto;
    min-width: 0;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    font: inherit;
    padding: 2px 6px;
}

.filters-meta-edit-btn,
.filters-meta-save-btn {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    padding: 0;
    border: none;
    background: transparent;
    cursor: pointer;
    color: #9ca3af;
    font-size: 13px;
    line-height: 1;
}

.filters-meta-edit-btn:hover {
    color: #6b7280;
}

.filters-meta-save-btn {
    color: #16a34a;
    font-size: 16px;
}

.filters-meta-save-btn:hover {
    color: #15803d;
}

.filters-meta-save-btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.filters-meta-input[hidden],
.filters-meta-edit-btn[hidden],
.filters-meta-save-btn[hidden] {
    display: none !important;
}

.filters-meta-error {
    margin-top: 4px;
    font-size: 12px;
    line-height: 1.3;
    color: #dc2626;
}

.filters-meta-cell.is-editing .filters-meta-value {
    display: none;
}

.timereports-filter-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    align-self: flex-end;
    gap: 8px;
}

.select2-results__option {
    font-size: 14px !important;
}

/* Timereports: highlight «All» row in projects / users / labels dropdown */
body.page-timereports .select2-results__option.filter-dimension-all-option {
    /*background-color: #eef6ff;*/
    /*color: #2563a8;*/
    font-weight: 500;
    /*color: #000;*/
}

body.page-timereports .select2-results__option.filter-dimension-all-option.select2-results__option--highlighted,
body.page-timereports .select2-results__option.filter-dimension-all-option.select2-results__option--selected {
    /*background-color: #dbeafe;*/
    /*color: #1d4ed8;*/
    /*color: #000;*/
}

/* Timereports: checkbox-style options in projects / users / labels dropdowns */
body.page-timereports .select2-container.filter-dimension-select-container.select2-container--open {
    z-index: 1105;
}

body.page-timereports .filter-dimension-select-container .select2-results__option[role="group"] {
    cursor: default;
}

body.page-timereports .filter-dimension-select-container .select2-results__group {
    font-weight: 600;
}

body.page-timereports .filter-dimension-select-container .select2-results__option[role="option"] {
    font-weight: 400;
}

body.page-timereports .filter-dimension-option-row {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
}

body.page-timereports .filter-dimension-option-checkbox {
    display: inline-block;
    flex: 0 0 14px;
    width: 14px;
    min-width: 14px;
    height: 14px;
    min-height: 14px;
    border: 1px solid #adb5bd;
    border-radius: 2px;
    background: #fff;
    box-sizing: border-box;
    vertical-align: middle;
}

body.page-timereports .filter-dimension-option-label {
    flex: 1 1 auto;
    min-width: 0;
}

body.page-timereports .filter-dimension-option-checkbox.is-checked {
    border-color: #2563eb;
    background-color: #2563eb;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2 6l3 3 5-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 10px 10px;
}

/* Timereports: clickable jira (optgroup) checkbox + indeterminate state */
body.page-timereports .filter-dimension-group-row {
    cursor: pointer;
}

body.page-timereports .filter-dimension-group-checkbox {
    cursor: pointer;
}

body.page-timereports .filter-dimension-option-checkbox.is-indeterminate {
    border-color: #2563eb;
    background-color: #2563eb;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' d='M2 6h8'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 10px 10px;
}

.timereports_filters_right {
    display: flex;
    align-items: flex-end;
    flex-shrink: 0;
    /* БЫЛО: 313px — под две иконки 28px. Расширена за счёт полей страницы:
       200px селекта + 16px отступа + две кнопки по 66px = 356px из 361px. */
    width: 361px;
    margin-top: 20px;
    margin-bottom: 6px;
}

.filter_select_container {
    display: flex;
    flex-direction: column;
    font-size: 13px;
    width: 200px;
    margin-right: auto;
    margin-top: 0;
    margin-bottom: 0;
    min-width: 0;
}

.filter_select_container.timereports-filter-field--saved {
    flex: 0 0 auto;
}

.filter_select_container .select2-container {
    width: 100% !important;
    max-width: 100%;
}

.select2-container.select2-filters-container {
    position: absolute;
    left: 1200px !important;
    width: 500px !important;
    right: 0;
    z-index: 9999;
}

#generate_and_send {
    float: right;
    margin-bottom: 5px;
    height: 27px;
}

#sendModal label {
    display: block;
    margin-bottom: 8px;
    cursor: pointer;
}

.select-all-checkbox {
    font-weight: bold;
}

.header-logs-date {
    width: 162px;
}

.header-logs-recipients {
    width: 324px;
}

.header-logs-filters {
    width: 400px;
}

.header-logs-reports {
    width: 400px;
}

.header-logs-date-range {
    width: 162px;
}

.report-sending-logs-list {
    margin-left: 50px;
    margin-right: 50px;
}

/*.report-sending-logs-table li{*/
/*    margin-bottom: 10px;*/
/*}*/

td ul li {
    margin-bottom: 10px;
}

td ul li:last-child {
    margin-bottom: 0;
}

.btn {
    height: 27px;
}

.add-jira-button,
.add-report-button {
    margin-bottom: 5px;
}

.required::after {
    content: '*';
    color: red;
    margin-left: 5px;
    font-size: 12px;
}

.validation-errors li{
    color: red;
}

.header-jiras-edit,
.header-jiras-delete {
    width: 104px;
}

.login-button-container .btn {
    height: 100%;
}

.header-jiras-choose {
    width: 100px;
}

.header-jiras-checkbox,
.cell-jiras-checkbox {
    width: 44px;
    text-align: center;
    vertical-align: middle;
}

.header-jiras-checkbox input[type="checkbox"],
.cell-jiras-checkbox input[type="checkbox"] {
    margin: 0;
    cursor: pointer;
}

.home-toolbar {
    display: flex;
    align-items: center;
    /*justify-content: space-between;*/
    gap: 30px;
    flex-wrap: wrap;
    margin-bottom: 3px;
    margin-top: 30px;
}

.home-jiras-actions {
    margin-top: 0;
    margin-bottom: -3px;
}

.home-jira-filter {
    flex: 0 0 auto;
}

.page-home .home-jira-filter .select2-selection__choice__remove {
    display: none;
}

.nav-disabled {
    position: relative;
    /*pointer-events: none;*/
    opacity: 0.6;
    cursor: not-allowed;
}

.nav-disabled .tooltip {
    display: none;
    position: absolute;
    background-color: rgba(0, 0, 0, 0.7);
    color: white;
    padding: 5px 10px;
    border-radius: 5px;
    font-size: 14px;
    white-space: nowrap;
    z-index: 9999;
    pointer-events: none;
    top: 24px;
    left: 74px;
}

.nav-disabled.show-tooltip .tooltip {
    display: block;
}

.navbar-side {
    display: flex;
    align-items: center;
    min-width: 0;
}

.navbar-side-left {
    flex: 1;
    justify-content: flex-start;
}

.navbar-side-center {
    flex: 0 0 auto;
    justify-content: center;
}

.navbar-side-right {
    flex: 1;
    justify-content: flex-end;
}

.nav-jira-block {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 0 0 470px;
    width: 470px;
    max-width: 470px;
}

.nav-jira-label {
    font-weight: bold;
    color: #343a40;
    white-space: nowrap;
}

.nav-jira-select {
    position: relative;
    width: 300px;
    flex: 0 0 300px;
    /*min-height: 31px;*/
    min-height: 28px;
    box-sizing: border-box;
}

.nav-jira-select .select2-container {
    width: 100% !important;
}

.nav-jira-select-loader {
    position: absolute;
    right: 24px;
    top: 50%;
    width: 20px;
    height: 20px;
    margin-top: -10px;
    z-index: 5;
    pointer-events: none;
    line-height: 0;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.15s ease;
}

.nav-jira-select.is-loading .nav-jira-select-loader {
    opacity: 1;
    visibility: visible;
}

.nav-reports-btn-slot {
    flex: 0 0 88px;
    width: 88px;
    min-height: 29px;
    display: flex;
    align-items: center;
}

.nav-reports-btn {
    white-space: nowrap;
    line-height: 27px;
    padding: 0 12px;
    text-decoration: none;
}

.nav-reports-btn--hidden {
    visibility: hidden;
    pointer-events: none;
}

.nav-right {
    display: flex;
    align-items: center;
    gap: 20px;
}

.nav-faq--toolbar {
    color: #343a40;
    text-decoration: none;
    font-size: 14px;
    line-height: 1;
}

.nav-faq--toolbar:hover {
    color: #007bff;
}

.nav-faq--toolbar.active {
    font-weight: bold;
    color: #000;
}

.nav-faq--drawer {
    display: none;
}

.nav-settings {
    display: flex;
    align-items: center;
    justify-content: center;
    color: #343a40;
    text-decoration: none;
    font-size: 18px;
    line-height: 1;
}

.nav-settings:hover {
    color: #007bff;
}

.nav-settings.active {
    color: #000;
}

.nav-links {
    flex: 0 0 auto;
}

.user-info {
    margin-left: 0;
}

.reports-toolbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}

.reports-toolbar .add-report-button {
    margin-bottom: 0;
}

.reports-toolbar .reports-send-log-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 36px;
    padding-left: 10px;
    padding-right: 10px;
}

.reports-toolbar .reports-send-log-btn .fa-history {
    font-size: 16px;
    line-height: 1;
}

.nav-jira-select .select2-selection {
    height: 27px !important;
}

.nav-jira-select .select2-selection__rendered {
    line-height: 27px !important;
    font-size: 15px;
    padding-right: 28px !important;
}

.nav-jira-select .select2-selection {
    margin-right: 0;
}

.select2-container .select2-selection--single {
    height: 27px !important;
}

#date_range_select + .select2-container {
    margin-right: 5px;
    min-height: 27px !important;
}

.select2-selection__placeholder {
    color: #757575 !important;
}

#date_range_select + .select2-container .select2-selection__rendered {
    line-height: 25px;
}

.form-wide {
    max-width: 1000px;
}

.plus-minus-btn {
    text-align: right;
    margin-top: 10px;
}

.plus-minus-btn .add-email {
    margin-right: 5px;
}

.email-input-group {
    margin-bottom: 10px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: 100%;
}

.email-input-group input {
    width: 907px;
}

.email-input-group {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 8px;
}

.recipient-dedicated-label {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    flex: 0 0 auto;
    margin: 0;
    white-space: nowrap;
    font-size: 13px;
    font-weight: normal;
    line-height: 1;
    cursor: pointer;
    user-select: none;
}

.recipient-dedicated-label input[type="checkbox"] {
    width: auto;
    height: auto;
    margin: 0;
    flex-shrink: 0;
}

.recipient-dedicated-text {
    line-height: 1;
    font-weight: bold;
}

.report-create-edit-layout {
    max-width: 1000px;
    margin: 50px auto;
}

.report-create-edit-columns {
    display: block;
}

@media (min-width: 1400px) {
    .report-create-edit-layout {
        max-width: 1400px;
    }

    .report-create-edit-columns {
        display: grid;
        grid-template-columns: minmax(0, 58fr) minmax(0, 42fr);
        gap: 24px;
        align-items: start;
    }

    .report-create-edit-layout .report-email-preview {
        margin-top: 0;
        position: sticky;
        top: 20px;
        max-height: calc(100vh - 40px);
        overflow: auto;
    }
}

.report-create-edit .email-input-group input.email-autocomplete {
    width: auto;
    flex: 1 1 220px;
    min-width: 0;
    max-width: 100%;
}

.report-create-edit-layout .form-container {
    margin: 0;
}

.report-form-toolbar {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 4px;
}

.report-form-toolbar .btn:disabled,
.report-form-preview:disabled,
.report-email-preview-header-preview:disabled {
    cursor: not-allowed;
    opacity: 0.65;
}

.report-preview-loader {
    display: inline-flex;
    align-items: center;
    line-height: 0;
}

.report-preview-status {
    display: inline-flex;
    align-items: center;
    font-size: 13px;
    color: #4b5563;
    line-height: 1.35;
}

.report-preview-status-text {
    white-space: nowrap;
}

.report-save-loader {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    line-height: 0;
}

.report-save-loader-text {
    font-size: 13px;
    color: #4b5563;
    line-height: 1.35;
}

.report-form-notice.validation-success,
.report-form-notice.validation-errors {
    margin-top: 12px;
}

#report-form-notice-top.validation-success,
#report-form-notice-top.validation-errors {
    margin-top: 0;
    margin-bottom: 16px;
}

.report-form-notice.validation-errors ul {
    margin: 0;
    padding-left: 18px;
}

.report-form-toolbar {
    flex-wrap: wrap;
}

.report-create-edit-layout .report-email-preview {
    margin-top: 20px;
}

.report-email-preview {
    padding: 16px 18px;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    background: #f9fafb;
}

.report-email-preview-title {
    margin: 0;
    font-size: 16px;
    font-weight: 600;
}

.report-email-preview:not(.report-send-modal-preview) .report-email-preview-header {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 14px;
}

.report-email-preview:not(.report-send-modal-preview) .report-email-preview-header .report-email-preview-title {
    flex: 0 1 auto;
    min-width: 0;
    margin: 0;
}

.report-email-preview-header-actions {
    display: inline-flex;
    align-items: center;
    flex: 0 0 auto;
    gap: 8px;
}

.report-email-preview-header-actions .report-email-preview-loader {
    flex: 0 0 auto;
}

.report-email-preview-refresh {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
}

.report-email-preview-refresh:disabled {
    cursor: not-allowed;
    opacity: 0.65;
}

/* Кнопка сброса кеша: иконка с подписью. Подпись нужна — по одному ластику не
   понять, что действие серверное и необратимое. */
.report-email-preview-clear-cache {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    white-space: nowrap;
    cursor: pointer;
}

.report-email-preview-clear-cache:disabled {
    cursor: not-allowed;
    opacity: 0.65;
}

.report-email-preview-header-preview {
    min-width: auto;
    white-space: nowrap;
}

/* Кнопка скачивания файлов превью архивом.
   margin-left: auto — единственное, что ставит её в правый верхний угол блока:
   шапка это flex с justify-content: flex-start, и остальные элементы остаются
   прижатыми влево. */
.report-email-preview-download {
    /* position: relative — чтобы спиннер лёг поверх подписи абсолютом и не менял
       ширину кнопки (см. .is-loading ниже). */
    position: relative;
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    white-space: nowrap;
    cursor: pointer;
}

/* БЫЛО: opacity: 0.65 — но disabled кнопка и есть состояние скачивания, и
   полупрозрачность гасила вместе с ней сам спиннер. Осветлённый синий — тот же
   приём и тот же цвет, что у .btn-primary.btn-disabled на странице. */
.report-email-preview-download:disabled {
    cursor: not-allowed;
    background-color: #a1c3e9;
    border-color: #a1c3e9;
}

/* Спиннер скрыт, пока кнопка не в состоянии загрузки.
   Селектор из двух классов намеренно: kit Font Awesome подменяет <i> на
   <svg class="svg-inline--fa"> и вставляет свой <style> в <head> уже после
   app.css. Его `.svg-inline--fa { display: inline-block }` весит столько же
   (0,1,0), сколько одиночный `.report-email-preview-download-loader`, и как
   более позднее правило выигрывает — спиннер оставался виден всегда.
   БЫЛО: .report-email-preview-download-loader { display: none; } */
.report-email-preview-download .report-email-preview-download-loader {
    display: none;
}

/* Во время скачивания подпись с иконкой остаются на месте и держат ширину, но
   становятся невидимыми, а спиннер ложится по центру абсолютом.

   БЫЛО: подпись скрывалась атрибутом hidden (display: none), и кнопка ужималась
   до ширины одного лоадера — на глаз она «прыгала» на каждое нажатие. */
.report-email-preview-download.is-loading .fa-download,
.report-email-preview-download.is-loading .report-email-preview-download-text {
    visibility: hidden;
}

/* Центрируем растяжкой на все четыре стороны с margin: auto, а не трансформом.
   БЫЛО: top: 50%; left: 50%; transform: translate(-50%, -50%);
   Так нельзя: fa-spin анимирует transform: rotate(), а значения из анимации
   перебивают обычные объявления — translate отбрасывался, и иконка висела левым
   верхним углом на точке 50%/50%, то есть ниже и правее центра. При margin: auto
   transform остаётся целиком за анимацией, и спиннер крутится вокруг себя. */
.report-email-preview-download.is-loading .report-email-preview-download-loader {
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    width: 1em;
    height: 1em;
    margin: auto;
    visibility: visible;
}

.report-preview-stale {
    color: #92400e;
    font-size: 14px;
    line-height: 1.45;
}

.report-preview-error {
    color: #b91c1c;
    font-size: 14px;
}

.report-preview-field + .report-preview-field {
    margin-top: 14px;
}

.report-preview-label {
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: #6b7280;
    margin-bottom: 4px;
}

.report-preview-value {
    font-size: 14px;
    color: #111827;
}

.report-preview-value-row {
    display: flex;
    align-items: center;
    gap: 8px;
}

.report-preview-value-row .report-preview-value {
    flex: 1 1 auto;
    min-width: 0;
}

.report-preview-subject-input {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 14px;
    color: #111827;
}

.report-preview-subject-toggle {
    flex: 0 0 auto;
    width: 24px;
    height: 24px;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: 0;
    border-radius: 4px;
    color: #6b7280;
    font-size: 12px;
    line-height: 1;
    cursor: pointer;
}

.report-preview-subject-toggle:hover {
    background-color: #eef4fb;
    color: #1a4a6b;
}

.report-preview-body {
    margin: 0;
    padding: 10px 12px;
    font-family: inherit;
    font-size: 14px;
    line-height: 1.5;
    white-space: pre-wrap;
    word-break: break-word;
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 4px;
}

.report-preview-files {
    margin: 0;
    padding-left: 20px;
}

.report-preview-files li + li {
    margin-top: 4px;
}

.report-form-send {
    min-width: 72px;
}

.modal-content.modal-send-report {
    width: min(1024px, calc(100vw - 32px));
    max-width: 1024px;
    min-height: 80vh;
    max-height: calc(100vh - 40px);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    text-align: left;
}

.modal-content.modal-send-report .modal-header,
.modal-content.modal-send-report .model-header-separator,
.modal-content.modal-send-report .modal-footer {
    flex-shrink: 0;
}

.modal-content.modal-send-report .model-header-separator {
    margin: 0;
    border: 0;
    border-top: 1px solid #bfbfbf;
    width: 100%;
    margin-top: 10px;
}

.modal-content.modal-send-report .modal-body {
    flex: 1;
    min-height: 0;
    overflow: auto;
}

.send-modal-recipients-heading {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 8px;
    margin-bottom: 6px;
}

.send-modal-recipients-heading .send-modal-section-label {
    margin-bottom: 0;
}

.send-modal-recipients-edit-btn {
    flex-shrink: 0;
    min-width: 36px;
    padding: 4px 10px;
    margin: 0;
}

.send-modal-recipients-view .send-modal-recipients {
    margin: 0;
}

.send-modal-recipients-edit-panel {
    margin-top: 4px;
}

.send-modal-recipients-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: nowrap;
    gap: 16px;
    width: 100%;
    margin-top: 10px;
}

.send-modal-recipients-toolbar .send-modal-recipients-done {
    flex-shrink: 0;
    margin: 0;
}

.send-modal-recipients-toolbar .plus-minus-btn {
    flex-shrink: 0;
    margin: 0;
    text-align: right;
}

#sendConfirmModal .ui-autocomplete {
    z-index: 1301;
    max-height: 240px;
    overflow-y: auto;
}

.send-modal-email-input-block .email-input-group {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
}

.send-modal-email-input-block .email-input-group input {
    flex: 1;
    height: 29.5px;
}

.send-modal-intro {
    margin: 0 0 16px;
}

.send-modal-section {
    margin-bottom: 16px;
}

.send-modal-section-label {
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: #6b7280;
    margin-bottom: 6px;
}

.send-modal-recipients {
    margin: 0;
    padding-left: 20px;
}

.send-modal-recipients li + li {
    margin-top: 4px;
}

.send-modal-recipients-empty {
    color: #b91c1c;
    list-style: none;
    padding-left: 0;
}

.send-modal-confirm-row {
    margin: 16px 0;
}

.send-modal-confirm-row label {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    font-size: 14px;
    line-height: 1.4;
    cursor: pointer;
}

.send-modal-confirm-row input[type="checkbox"] {
    margin-top: 3px;
    flex-shrink: 0;
}

.send-modal-preview-wrap {
    position: relative;
    margin-top: 8px;
}

.report-send-preview-loader {
    display: inline-flex;
    align-items: center;
    margin-bottom: 8px;
    line-height: 0;
}

.report-send-modal-preview {
    margin: 0;
    max-height: min(50vh, 480px);
    overflow: auto;
}

.report-send-modal-preview .report-email-preview-title {
    font-size: 14px;
    margin: 0 0 10px;
}

.send-modal-error {
    margin-top: 12px;
    margin-bottom: 0;
}

.modal-send-report .modal-footer .modal-btns-container {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.modal-send-report .modal-footer #send-modal-confirm:disabled {
    opacity: 0.65;
    cursor: not-allowed;
}

.report-name-macros-hint {
    margin-top: 6px;
    font-size: 12px;
    line-height: 1.5;
    color: #6b7280;
}

.report-name-macros-hint div + div {
    margin-top: 2px;
}

.report-create-edit input:not(.select2-search__field) {
    height: 29.5px;
    border-radius: 4px;
    /*border: 1px solid;*/
}

.report-create-edit input.select2-search__field {
    font-size: 13px !important;
}

.report-create-edit .select2-container .select2-selection--multiple {
    min-height: 29.5px !important;
}

.report-create-edit .select2-container .select2-search--inline .select2-search__field {
    margin-top: 6px;
}

.report-create-edit .select2-container .select2-selection--multiple {
    margin-right: 0;
}

.report-create-edit .remove-email.inline-row-btn,
.plus-minus-btn .btn{
    height: 29.5px;
}

.plus-minus-btn .btn {
    font-weight: bold;
    font-size: 13px;
}

/*.report-create-edit .remove-email.inline-row-btn {*/
/*    margin-left: 5px;*/
/*}*/

.header-report-name {
    width: 161px;
}

.header-report-jira {
    width: 150px;
}

.header-report-filters-list {
    width: 440px;
}

.header-reports-recipients {
    width: 300px;
}

.header-report-creator {
    width: 300px;
}

.header-reports-edit {
    width: 60px;
}

.header-reports-delete {
    width: 64px;
    min-width: 64px;
}

/* Строка таблицы отчётов кликабельна целиком — открывает отчёт на просмотр.
   Обработчик в reports/index.blade.php. */
.reports-table tr.is-clickable {
    cursor: pointer;
}

.reports-table tr.is-clickable:hover > td {
    background: #f7f9fc;
}

.reports-table ul {
    padding-left: 20px;
}

.header-reports-send {
    /*width: 100px;*/
    width: 83px;
}

.header-reports-test-send {
    /*width: 130px;*/
    width: 75px;
}

.send-report-button {
    margin-right: 0;
}

input {
    border: 1px solid #6aa5e2;
}

td ul {
    margin-top: 0;
    margin-bottom: 0;
}

.msg-success, .msg-error {
    background-color: #c6f0c6;
    padding-top: 15px;
    padding-bottom: 15px;
    padding-left: 5px;
    padding-right: 5px;
    margin-bottom: 15px;
    margin-top: 15px;
}

.msg-error {
    background-color: #ff7b7b;
}

/* ---------- Report schedules & reminders ---------- */
.report-timing-section {
    margin-bottom: 8px;
}

.report-timing-section-head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px 14px;
    margin-bottom: 10px;
}

.report-timing-section-hint {
    margin: 0 0 10px;
    font-size: 12px;
    color: #757575;
}

.report-timing-section-head .add-schedule,
.report-timing-section-head .add-reminder {
    font-weight: bold;
    font-size: 13px;
}

.report-timing-section-head .schedule-tz-hint {
    margin-left: 0;
}

.report-reminder-section {
    margin-top: 8px;
    padding-top: 16px;
    border-top: 1px solid #e8eef5;
}

.validation-success {
    margin-top: 12px;
    padding: 10px 12px;
    background: #e8f5e9;
    border: 1px solid #a5d6a7;
    border-radius: 4px;
    color: #2e7d32;
    font-size: 13px;
}

.schedule-tz-hint {
    font-weight: normal;
    color: #757575;
    font-size: 12px;
    margin-left: 6px;
}

.schedule-input-block {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 5px;
}

.schedule-input-group {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: flex-end;
    padding: 10px;
    border: 1px solid #d6e4f5;
    border-radius: 4px;
    background-color: #fbfdff;
}

.schedule-field {
    display: flex;
    flex-direction: column;
    min-width: 160px;
}

.schedule-field-frequency    { flex: 1 1 220px; }
.schedule-field-day-of-month { flex: 1 1 160px; }
.schedule-field-day-of-week  { flex: 1 1 200px; }
.schedule-field-time         { flex: 0 0 130px; }
.schedule-field-actions      { flex: 0 0 50px; align-items: flex-end; }

.schedule-field-label {
    display: block;
    margin-bottom: 5px;
    font-size: 12px;
    font-weight: bold;
    color: #555;
}

.report-create-edit .schedule-field input.schedule-time {
    height: 29.5px;
    padding: 0 6px;
    border-radius: 4px;
    border: 1px solid #6aa5e2;
    width: 100%;
    box-sizing: border-box;
}

.schedule-field .select2-container .select2-selection--single {
    height: 29.5px !important;
    border: 1px solid #6aa5e2;
}

.schedule-field .select2-container--default .select2-selection--single .select2-selection__rendered {
    line-height: 27px;
}

.schedule-field .select2-container--default .select2-selection--single .select2-selection__arrow {
    height: 27px;
}

.schedule-field-actions .btn.remove-schedule {
    height: 29.5px;
    padding: 0 10px;
}

.header-report-schedules {
    width: 260px;
}

.schedule-empty {
    color: #757575;
    font-style: italic;
}

.nav-jira-select .select2-selection__rendered {
    line-height: normal !important;
    padding-right: 28px !important;
}

.nav-jira-select .select2-selection {
    height: auto !important;
}

.jiras-table-home {
    margin-top: 0;
    /*margin-top: 30px;*/
}

.jiras-table-home .jira-name-link {
    color: #0066cc;
    text-decoration: none;
    font-weight: 500;
}

.jiras-table-home .jira-name-link:hover,
.jiras-table-home .jira-name-link:focus {
    text-decoration: underline;
    color: #004499;
}

.user-info.admin-user-info {
    margin-left: auto;
}


.filter-modal-input-group {
    margin-bottom: 8px;
}

.filter-modal-input-group label {
    width: 95px;
    display: inline-block;
    font-weight: bold;
}


.form-group.by-members-checkbox {
    /*margin-bottom: 20px;*/
    margin-bottom: 10px;
}

.form-group.member-exclude-filters-group {
    margin-bottom: 15px;
    padding-left: 22px;
}

.form-group.member-exclude-filters-group .member-exclude-filters-hint {
    margin: 8px 0 0;
    /*font-size: 0.9em;*/
    font-size: 12px;
    color: #666;
}

.form-group.round-hours-checkbox {
    margin-bottom: 10px;
}

.show-working-days-checkbox {
    margin-bottom: 20px;
}

.form-group.by-members-checkbox label,
.form-group.round-hours-checkbox label,
.show-working-days-checkbox label {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
}

.form-group.by-members-checkbox input,
.form-group.round-hours-checkbox input,
.show-working-days-checkbox input {
    width: auto;
    height: auto;
    margin: 0 7px 1px 1px;
}

.report-filters-group {
    margin-bottom: 20px;
}

.report-filters-label-row {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 8px;
}

.report-filters-label-row label {
    margin-bottom: 0;
    flex-shrink: 0;
}

.report-filters-range-group {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-left: auto;
    flex: 1;
    max-width: 420px;
    justify-content: flex-end;
}

.report-filters-range-label {
    margin-bottom: 0;
    flex-shrink: 0;
    font-weight: normal;
    white-space: nowrap;
}

.report-filters-range-group .select2-container {
    flex: 1;
    min-width: 160px;
    max-width: 280px;
}

.report-filters-toolbar {
    display: flex;
    align-items: flex-start;
    gap: 8px;
}

.report-filters-select-wrap {
    position: relative;
    flex: 1;
    min-width: 0;
}

.report-filters-select-wrap .select2-container {
    width: 100% !important;
}

.report-filters-select-loader {
    position: absolute;
    /*left: 50%;*/
    right: 10px;
    top: 50%;
    z-index: 10;
    margin: -10px 0 0 -10px;
    pointer-events: none;
    line-height: 0;
}

.report-filters-select-wrap.is-loading .select2-container .select2-selection--multiple {
    opacity: 0.45;
    pointer-events: none;
}

.report-filters-actions {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}

.report-filters-actions .btn.report-filters-icon-btn {
    width: 29.5px;
    min-width: 29.5px;
    height: 29.5px;
    padding: 0;
    font-size: 13px;
    line-height: 1;
}

.report-filters-actions .btn.report-filters-icon-btn:disabled {
    cursor: not-allowed;
    opacity: 0.65;
}

.report-filters-range-hint {
    margin: 6px 0 0;
    font-size: 12px;
    color: #6b7280;
}

/* Фильтр с зафиксированным периодом: отчёт всегда за один и тот же месяц. */
.report-filters-fixed-hint {
    margin: 4px 0 0;
    font-size: 12px;
    color: #a15c07;
}

.report-create-edit .report-filters-select2 + .select2-container .select2-selection--single,
.report-create-edit .report-filters-select2 + .select2-container .select2-selection--multiple {
    min-height: 29.5px !important;
}

.btn-primary.report-form-send {
    background-color: #0dbf48;
    border-color: #0dbf48;
}

.btn-primary.report-form-send:hover {
    background-color: #07a33b;
    border-color: #07a33b;
}

.send-modal-confirm-row label {
    align-items: center;
    font-weight: bold;
}

ul.js-preview-files.report-preview-files li a {
    font-size: 14px;
}

.body-admin .users-toolbar {
    margin-bottom: 3px;
}

#filter-form #date_from,
#filter-form #date_to {
    max-width: 100%;
}

.form-hint {
    color: #666;
    font-size: 0.9em;
    margin: 6px 0 12px;
}

.jira-badge-shared {
    display: inline-block;
    margin-left: 8px;
    padding: 2px 6px;
    font-size: 0.75em;
    text-transform: uppercase;
    color: #555;
    background: #eee;
    border-radius: 3px;
    vertical-align: middle;
}

/* ============================================================
   Сгруппированный вид таблицы /timereports (grouped table view)
   ============================================================ */
.tr-grouped {
    width: 100%;
}

.tr-grouped-empty {
    padding: 24px 12px;
    text-align: center;
    color: #666;
    font-size: 14px;
}

.tr-grouped-scroll {
    position: relative;
    overflow-x: auto;
    overflow-y: hidden;
    border: 1px solid #e0e0e0;
    border-radius: 4px;
}

.tr-grouped-table {
    border-collapse: separate;
    border-spacing: 0;
    font-size: 13px;
    width: max-content;
    min-width: 100%;
    background: #fff;
}

.tr-grouped-table th,
.tr-grouped-table td {
    box-sizing: border-box;
    padding: 6px 8px;
    border-right: 1px solid #ececec;
    border-bottom: 1px solid #ececec;
    background: #fff;
    vertical-align: top;
    text-align: center;
    white-space: nowrap;
}

.tr-grouped-table thead th {
    position: sticky;
    top: 0;
    z-index: 3;
    background: #f5f6f8;
    font-weight: 600;
    color: #344563;
}

/* Колонка Jira */
.tr-grouped-table .tr-col-jira {
    position: sticky;
    left: 0;
    z-index: 2;
    width: 120px;
    min-width: 120px;
    max-width: 120px;
    text-align: left;
    white-space: normal;
}

/* Колонка Issue */
.tr-grouped-table .tr-col-issue {
    position: sticky;
    left: 120px;
    z-index: 2;
    width: 300px;
    min-width: 300px;
    max-width: 300px;
    text-align: left;
    white-space: normal;
}

/* Колонка Priority */
.tr-grouped-table .tr-col-priority {
    position: sticky;
    left: 420px;
    z-index: 2;
    width: 84px;
    min-width: 84px;
    max-width: 84px;
}

/* Колонка Total — закреплена справа */
.tr-grouped-table .tr-col-total {
    position: sticky;
    right: 0;
    z-index: 2;
    width: 88px;
    min-width: 88px;
    max-width: 88px;
    font-weight: 600;
    background: #fafbfc;
    border-left: 1px solid #d8dce1;
    vertical-align: middle;
}

/* Угловые/пересекающиеся ячейки поднимаем по z-index */
.tr-grouped-table thead th.tr-col-jira,
.tr-grouped-table thead th.tr-col-issue,
.tr-grouped-table thead th.tr-col-priority,
.tr-grouped-table thead th.tr-col-total {
    z-index: 5;
    background: #eef0f3;
    vertical-align: middle;
}

.tr-grouped-table tbody td.tr-col-jira,
.tr-grouped-table tbody td.tr-col-issue,
.tr-grouped-table tbody td.tr-col-priority {
    background: #fff;
    vertical-align: middle;
}

/* Дни */
.tr-grouped-table .tr-col-day {
    min-width: 56px;
}

.tr-grouped-table .tr-day-num {
    display: block;
    font-weight: 600;
}

.tr-grouped-table .tr-day-wd {
    display: block;
    font-size: 11px;
    color: #7a869a;
}

.tr-grouped-table .tr-col-day.is-weekend {
    background: #f7f8fa;
}

.tr-grouped-table thead th.tr-col-day.is-weekend {
    background: #eceef2;
}

.tr-grouped-table .tr-col-day.is-today {
    background: #eef4ff;
}

.tr-grouped-table thead th.tr-col-day.is-today {
    background: #dce8ff;
}

/* Кликабельные ячейки с записями */
.tr-grouped-table td.tr-has-entries {
    cursor: pointer;
    color: #0052cc;
    font-weight: 500;
    vertical-align: middle;
}

.tr-grouped-table td.tr-has-entries:hover {
    background: #e9f2ff;
}

.tr-grouped-table .tr-issue-key {
    font-weight: 600;
    color: #0052cc;
}

.tr-grouped-table .tr-issue-summary {
    display: block;
    color: #172b4d;
    white-space: normal;
}

.tr-grouped-table .tr-col-issue a {
    font-weight: 600;
    text-decoration: none;
}

/* Нижняя строка с суммами по дням — закреплена снизу */
.tr-grouped-table tfoot td {
    position: sticky;
    bottom: 0;
    z-index: 3;
    background: #f5f6f8;
    font-weight: 600;
    border-top: 1px solid #d8dce1;
}

.tr-grouped-table tfoot td.tr-col-jira,
.tr-grouped-table tfoot td.tr-col-issue,
.tr-grouped-table tfoot td.tr-col-priority,
.tr-grouped-table tfoot td.tr-col-total {
    z-index: 5;
    background: #eef0f3;
}

/* < 900px: убираем sticky у Jira/Issue/Priority — закреплённой остаётся только колонка Total */
@media (max-width: 899px) {
    .tr-grouped-table .tr-col-jira,
    .tr-grouped-table .tr-col-issue,
    .tr-grouped-table .tr-col-priority,
    .tr-grouped-table thead th.tr-col-jira,
    .tr-grouped-table thead th.tr-col-issue,
    .tr-grouped-table thead th.tr-col-priority,
    .tr-grouped-table tfoot td.tr-col-jira,
    .tr-grouped-table tfoot td.tr-col-issue,
    .tr-grouped-table tfoot td.tr-col-priority {
        position: static;
        left: auto;
        z-index: auto;
    }
}

/* Попап записей за день */
.tr-day-popup {
    position: absolute;
    z-index: 1100;
    min-width: 240px;
    max-width: 360px;
    background: #fff;
    border: 1px solid #d8dce1;
    border-radius: 6px;
    box-shadow: 0 6px 20px rgba(9, 30, 66, 0.2);
    font-size: 13px;
    overflow: hidden;
}

.tr-day-popup__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 8px 10px;
    background: #f5f6f8;
    border-bottom: 1px solid #ececec;
}

.tr-day-popup__title {
    font-weight: 600;
    color: #344563;
}

.tr-day-popup__close {
    border: none;
    background: transparent;
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    color: #7a869a;
    padding: 0 4px;
}

.tr-day-popup__close:hover {
    color: #172b4d;
}

.tr-day-popup__body {
    padding: 8px 10px;
    max-height: 280px;
    overflow: auto;
}

.tr-day-popup__summary {
    margin-bottom: 8px;
    color: #5e6c84;
    font-style: italic;
    white-space: normal;
}

.tr-day-popup__entry {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 4px 0;
    border-bottom: 1px solid #f0f0f0;
}

.tr-day-popup__entry:last-child {
    border-bottom: none;
}

.tr-day-popup__hours {
    font-weight: 600;
    color: #0052cc;
    min-width: 52px;
}

.tr-day-popup__name {
    color: #172b4d;
    flex: 1 1 auto;
}

.tr-day-popup__time {
    color: #7a869a;
    font-size: 12px;
}

/* Тултип с полной датой при наведении на заголовок колонки дня.
   Живёт в <body>, а не внутри th: .tr-grouped-scroll обрезал бы его (overflow-y: hidden). */
.tr-day-tip {
    position: absolute;
    z-index: 1200;
    pointer-events: none;
    padding: 4px 8px;
    background: #253858;
    color: #fff;
    border-radius: 4px;
    font-size: 14px;
    line-height: 1.4;
    white-space: nowrap;
    box-shadow: 0 4px 12px rgba(9, 30, 66, 0.25);
}

/* Сводка по фильтру над таблицей таймрепортов.
   Старый вид (.tr-summary--matrix) — матрица «сотрудник × проект».
   Новый вид (.tr-summary--split) — две таблицы рядом. */
.tr-summary {
    width: 100%;
    margin-bottom: 3px;
}

/* Masonry-раскладка через многоколоночную вёрстку: блоки выстраиваются
   сверху вниз внутри колонок, браузер балансирует их высоту. Короткий блок
   (например, общий Total) не оставляет под собой пустоту — следующий блок
   встаёт под него. Ширина колонки задаёт «полку», число колонок — авто. */
.tr-summary--split {
    column-width: 260px;
    column-gap: 6px;
}

.tr-summary-scroll {
    position: relative;
    display: inline-block;
    max-width: 100%;
    overflow-x: auto;
    overflow-y: hidden;
    border: 1px solid #e0e0e0;
    border-radius: 4px;
}

.tr-summary-table {
    /*border-collapse: separate;*/
    border-collapse: collapse;
    border-spacing: 0;
    font-size: 13px;
    width: auto;
    background: #fff;
}

.tr-summary-table th,
.tr-summary-table td {
    box-sizing: border-box;
    padding: 6px 10px;
    border-right: 1px solid #ececec;
    border-bottom: 1px solid #ececec;
    background: #fff;
    vertical-align: middle;
    text-align: center;
    white-space: nowrap;
}

.tr-summary-table thead th {
    position: sticky;
    top: 0;
    z-index: 3;
    background: #f5f6f8;
    font-weight: 600;
    color: #344563;
}

/* Первый столбец — сотрудник, закреплён слева */
.tr-summary-table .tr-sum-emp {
    position: sticky;
    left: 0;
    z-index: 2;
    text-align: left;
    background: #fff;
}

.tr-summary-table thead th.tr-sum-emp {
    z-index: 5;
    background: #eef0f3;
}

/* Столбец Итого — закреплён справа */
.tr-summary-table .tr-sum-total {
    position: sticky;
    right: 0;
    z-index: 2;
    font-weight: 600;
    background: #fafbfc;
    border-left: 1px solid #d8dce1;
}

.tr-summary-table thead th.tr-sum-total {
    z-index: 5;
    background: #eef0f3;
}

/* Нижняя строка итогов — закреплена снизу и визуально выделена */
.tr-summary-table tfoot td {
    position: sticky;
    bottom: 0;
    z-index: 3;
    background: #dbe3f1;
    font-weight: 700;
    color: #1f2d3d;
    /*border-top: 2px solid #344563;*/
}

.tr-summary-table tfoot td.tr-sum-emp,
.tr-summary-table tfoot td.tr-sum-total {
    z-index: 5;
    background: #cdd8ec;
}

/* Первый столбец таблицы проектов — название джиры (объединённые ячейки) */
.tr-summary-table .tr-sum-jira {
    text-align: left;
    font-weight: 600;
    color: #344563;
    background: #fafbfc;
    vertical-align: middle;
}

.tr-summary-table tbody td.tr-sum-jira {
    background: #fff;
}


.tr-summary-table thead th.tr-sum-jira {
    background: #eef0f3;
}

/* Столбец проекта — выравнивание по левому краю */
.tr-summary-table .tr-sum-proj {
    text-align: left;
}

/* Подытог по джире и подпись итоговых строк */
.tr-summary-table .tr-sum-jira-sub {
    text-align: right;
    font-weight: 600;
    color: #344563;
}

.tr-summary-table .tr-summary-subtotal td {
    background: #f5f6f8;
    font-weight: 600;
    border-top: 1px solid #e3e6ea;
}

/* Каждый блок (общий Total / джира / сотрудники) — цельный элемент колонки.
   break-inside: avoid не даёт разрывать таблицу между колонками, нижний
   margin создаёт вертикальный зазор между блоками в одной колонке.
   Правила ограничены .tr-summary--split, чтобы не задеть матричный вид. */
.tr-summary--split > .tr-summary-scroll {
    display: block;
    width: 100%;
    margin: 0 0 12px;
    break-inside: avoid;
    -webkit-column-break-inside: avoid;
    page-break-inside: avoid;
}

.tr-summary--split .tr-summary-table {
    width: 100%;
}

/* Итоговые строки переехали из tfoot в tbody — повторяем прежнее оформление. */
.tr-summary--split .tr-summary-totals td {
    background: #dbe3f1;
    font-weight: 700;
    color: #1f2d3d;
}

.tr-summary--split .tr-summary-totals td.tr-sum-emp,
.tr-summary--split .tr-summary-totals td.tr-sum-total {
    background: #cdd8ec;
}

@media (max-width: 899px) {
    .tr-summary-table .tr-sum-emp,
    .tr-summary-table thead th.tr-sum-emp,
    .tr-summary-table tfoot td.tr-sum-emp {
        position: static;
        left: auto;
        z-index: auto;
    }
}


@media (min-width: 1300px) {
    .timereports_content .reports {
        display: flex;
        flex-wrap: wrap;
        column-gap: 10px;
    }

    .timereports_content .reports .tr-summary.tr-summary--split {
        width: 20%;
    }

    .timereports_content .reports .tr-grouped {
        width: calc(80% - 10px);
    }

}

.timereports_content .timereports_filters .select2-container--default .select2-selection--multiple {
    max-height: 80px;
    overflow-y: auto;
}

.btn.btn-link.resend-btn:disabled {
    color: #777;
    cursor: not-allowed;
}

.resend-form #timerWrapper {
    font-size: 14px;
    color: #777;
    display: none;
}

#resendForm {
    display: flex;
    align-items: center;
    justify-content: center;
}

#loginForm #submitLoginBtn:disabled,
#verifyForm #submitVerifyBtn:disabled {
    background-color: #a1c3e9;
    /*width: calc(100% - 25px);*/
    cursor: not-allowed;
}

#loginForm .login-button-container {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    position: relative;
}

.email-input-group .recipient-dedicated-label {
    display: flex;
    align-items: center;
    margin-bottom: 0;
}

/* ==== One-time send: кнопка, попап выбора диапазона, плашка периода ==== */

.btn.report-one-time-send-btn {
    background-color: #e4ac06;
    border-color: #e4ac06;
    /*color: #212529;*/
    color: #fff;
}

.btn.report-one-time-send-btn:hover {
    background-color: #e0a800;
    border-color: #e0a800;
    color: #fff;
}

.report-filters-range-group .btn.report-one-time-send-btn {
    width: 29.5px;
    min-width: 29.5px;
    height: 29.5px;
    padding: 0;
    font-size: 13px;
    line-height: 1;
    flex-shrink: 0;
}

.modal-content.modal-one-time-send {
    width: min(560px, calc(100vw - 32px));
    max-width: 560px;
    max-height: calc(100vh - 40px);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    text-align: left;
}

.modal-content.modal-one-time-send .modal-header,
.modal-content.modal-one-time-send .model-header-separator,
.modal-content.modal-one-time-send .modal-footer {
    flex-shrink: 0;
}

.modal-content.modal-one-time-send .model-header-separator {
    margin: 10px 0 0;
    border: 0;
    border-top: 1px solid #bfbfbf;
    width: 100%;
}

.modal-content.modal-one-time-send .modal-body {
    flex: 1;
    min-height: 0;
    overflow: auto;
}

.one-time-intro {
    margin: 0 0 12px;
    font-size: 13px;
    color: #6b7280;
}

.one-time-unsaved-notice {
    margin: 0 0 12px;
    font-size: 13px;
}

.one-time-body {
    display: flex;
    align-items: flex-start;
    gap: 20px;
}

.one-time-presets {
    flex: 0 0 200px;
    min-width: 0;
}

.one-time-section-label {
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: #6b7280;
    margin-bottom: 6px;
}

.one-time-preset-list {
    list-style: none;
    margin: 0;
    padding: 0;
}

.one-time-preset-separator {
    border-top: 1px solid #e5e7eb;
    margin: 6px 0;
}

.one-time-preset {
    display: block;
    width: 100%;
    text-align: left;
    background: none;
    border: 0;
    border-radius: 4px;
    padding: 5px 8px;
    font-size: 13px;
    line-height: 1.3;
    color: #333;
    cursor: pointer;
    font-weight: bold;
}

.one-time-preset:hover {
    background-color: #eef4fb;
}

/* Тот же голубой, что у is-range-in в календаре — подсветка пресета
   и подсветка диапазона читаются как одно целое. */
.one-time-preset.is-active {
    background-color: #dbeeff;
    color: #1a4a6b;
    font-weight: 600;
}

.one-time-calendar-col {
    flex: 1 1 auto;
    min-width: 232px;
    display: flex;
    flex-direction: column;
    align-items: stretch;
}

/* xdsoft в режиме inline прячет этот элемент сам; дублируем на случай, если JS не отработал. */
.one-time-calendar-anchor {
    display: none;
}

.report-one-time-modal .xdsoft_datetimepicker.xdsoft_inline {
    box-shadow: none;
    border-radius: 4px;
    padding-left: 8px;
}

.report-one-time-modal .xdsoft_datetimepicker .xdsoft_calendar td.is-range-in {
    background: #dbeeff;
    box-shadow: none;
    color: #1a4a6b;
}

.report-one-time-modal .xdsoft_datetimepicker .xdsoft_calendar td.is-range-start,
.report-one-time-modal .xdsoft_datetimepicker .xdsoft_calendar td.is-range-end {
    background: #3af;
    box-shadow: #178fe5 0 1px 3px 0 inset;
    color: #fff;
    font-weight: 700;
}

.one-time-inputs {
    display: flex;
    align-items: flex-end;
    gap: 10px;
    margin-top: 12px;
}

.one-time-input-label {
    display: flex;
    flex-direction: column;
    gap: 4px;
    flex: 1 1 0;
    min-width: 0;
    margin-bottom: 0;
    font-size: 12px;
    font-weight: 600;
    color: #6b7280;
}

.one-time-input {
    width: 100%;
    font-size: 13px;
}

.one-time-hint {
    margin: 8px 0 0;
    font-size: 12px;
    color: #6b7280;
}

.one-time-error {
    margin: 8px 0 0;
    font-size: 13px;
}

.modal-one-time-send .modal-footer #one-time-continue:disabled {
    opacity: 0.65;
    cursor: not-allowed;
}

/* ==== Разовый диапазон на странице (config filters.range_ui = 'inline') ==== */

.report-filters-range-group .btn.report-one-time-send-btn {
    /* Синий, как остальные иконки секции фильтров (btn-primary), а не жёлтый
       Custom range из тулбара — тот задан выше и остаётся для 'legacy'. */
    background-color: #1e79f2;
    border-color: #1e79f2;
    color: #fff;
}

.report-filters-range-group .btn.report-one-time-send-btn:hover {
    background-color: #0056b3;
    border-color: #0056b3;
    color: #fff;
}

.report-filters-range-group .btn.report-one-time-send-btn:disabled {
    cursor: not-allowed;
    opacity: 0.65;
}

/* При активном разовом диапазоне «Showing filters for: …» прячем: селект
   продолжает фильтровать список, но подсказка про период путала бы рядом с
   плашкой. Класс ставит one-time-range-state-script. */
.report-filters-group.is-one-time-range-active .report-filters-range-hint {
    display: none !important;
}

.report-one-time-range-badge {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    padding: 3px 6px 3px 10px;
    border-radius: 12px;
    background-color: #eef4fb;
    border: 1px solid #1e79f2;
    color: #1a4a6b;
    font-size: 13px;
    font-weight: 600;
    line-height: 1.3;
}

.report-one-time-range-badge.is-filters {
    margin-top: 8px;
}

.report-one-time-range-badge.is-preview {
    padding: 3px 10px;
    font-size: 12px;
}

.report-one-time-range-badge-icon {
    color: #1e79f2;
}

.report-one-time-range-badge-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: #1a4a6b;
    font-size: 12px;
    line-height: 1;
    cursor: pointer;
}

.report-one-time-range-badge-btn:hover {
    background-color: #d3e4f8;
}

.report-one-time-range-badge-btn.js-one-time-range-clear {
    font-size: 18px;
}

.report-one-time-range-badge-btn:disabled {
    cursor: not-allowed;
    opacity: 0.5;
}

.send-modal-period-badge {
    display: inline-block;
    margin: 0 0 16px;
    padding: 4px 10px;
    border-radius: 12px;
    background-color: #eef4fb;
    color: #1a4a6b;
    font-size: 13px;
    font-weight: 600;
}

/* Строка «плашка периода + Download» в модалке отправки. Отступ снизу, который
   раньше был у плашки, теперь у строки: строка прячется целиком, когда в ней
   нечего показывать (send-modal-script, syncPeriodRow). */
.send-modal-period-row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px 12px;
    margin: 0 0 16px;
}

.send-modal-period-row .send-modal-period-badge {
    margin: 0;
}

/* Download прижат вправо и при скрытой плашке (обычная отправка). Состояние
   загрузки — тот же приём, что у .report-email-preview-download: подпись держит
   ширину, спиннер ложится поверх. */
.send-modal-download {
    position: relative;
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    white-space: nowrap;
    cursor: pointer;
}

.send-modal-download:disabled {
    cursor: not-allowed;
    background-color: #a1c3e9;
    border-color: #a1c3e9;
}

.send-modal-download .send-modal-download-loader {
    display: none;
}

.send-modal-download.is-loading .fa-download,
.send-modal-download.is-loading .send-modal-download-text {
    visibility: hidden;
}

.send-modal-download.is-loading .send-modal-download-loader {
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    width: 1em;
    height: 1em;
    margin: auto;
}

.one-time-calendar-col .xdsoft_datetimepicker .xdsoft_datepicker {
    width: calc(100% - 16px);
}

/* ============================================================
   Automate your time (/timereports)
   ============================================================ */

.tr-automation {
    margin: 0 0 16px;
}

.tr-automation__toolbar {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 12px;
}

.tr-automation__btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    height: 32px;
    padding: 0 14px;
    border-radius: 4px;
    font-size: 14px;
}

.tr-automation__btn:disabled {
    background-color: #a9c6ee;
    border-color: #a9c6ee;
    cursor: not-allowed;
}

/* Подпись по ховеру — в оформлении остальных тултипов страницы. */
.tr-automation__btn::after {
    content: attr(data-tooltip);
    display: none;
    position: absolute;
    bottom: calc(100% + 8px);
    left: 0;
    max-width: 420px;
    width: max-content;
    padding: 7px 10px;
    border-radius: 5px;
    background-color: rgba(0, 0, 0, 0.82);
    color: #fff;
    font-size: 13px;
    line-height: 1.35;
    text-align: left;
    white-space: normal;
    pointer-events: none;
    z-index: 9999;
}

.tr-automation__btn:hover::after,
.tr-automation__btn:focus-visible::after {
    display: block;
}

.tr-automation__hint {
    font-size: 13px;
    color: #6b7280;
}

.tr-automation__panel {
    margin-top: 12px;
    padding: 16px;
    border: 1px solid #e3e6ea;
    border-radius: 8px;
    background: #fff;
}

/* Атрибут hidden сам по себе не победит авторский display — та же ловушка,
   что и у .timereports-download-label[hidden] выше. */
.tr-automation__panel[hidden],
.tra-loader[hidden],
.tra-summary[hidden],
.tra-search__clear[hidden] {
    display: none !important;
}

.tra-controls {
    display: flex;
    align-items: flex-end;
    flex-wrap: wrap;
    gap: 12px;
}

.tra-controls__field {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.tra-controls__label {
    font-size: 12px;
    color: #6b7280;
}

.tra-percent {
    display: flex;
    align-items: center;
    height: 30px;
    padding: 0 10px;
    border: 1px solid #ccd2d9;
    border-radius: 4px;
    background: #fff;
}

.tra-percent__input {
    width: 64px;
    border: none;
    outline: none;
    font-size: 13px;
    text-align: right;
    background: transparent;
}

.tra-percent__suffix {
    margin-left: 6px;
    color: #6b7280;
}

.tra-controls .btn-primary,
.tra-controls .btn-secondary {
    height: 30px;
    padding: 0 14px;
    border-radius: 4px;
    font-size: 13px;
}

.tra-reload {
    display: inline-flex;
    align-items: center;
    gap: 7px;
}

/* НОВОЕ. Поиск по списку задач. Последний элемент .tra-controls: margin-left: auto
   прижимает его к правому краю строки управления, всё остальное остаётся слева.
   Высота 30px — как у .tra-percent и кнопок панели, иначе строка «поедет». */
.tra-search {
    position: relative;
    display: flex;
    align-items: center;
    margin-left: auto;
}

.tra-search__icon {
    position: absolute;
    left: 10px;
    font-size: 12px;
    color: #9aa1ab;
    /* Иконка не должна перехватывать клик — под ней поле. */
    pointer-events: none;
}

/* Рамка — как у .tra-percent, чтобы поле не выбивалось из строки управления. */
.tra-search__input {
    width: 240px;
    height: 30px;
    padding: 0 26px 0 28px;
    border: 1px solid #ccd2d9;
    border-radius: 4px;
    background: #fff;
    font-size: 13px;
    color: #1f2937;
}

.tra-search__input:focus {
    outline: none;
    border-color: #1e79f2;
}

.tra-search__clear {
    position: absolute;
    right: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: transparent;
    color: #9aa1ab;
    font-size: 16px;
    line-height: 1;
    cursor: pointer;
}

.tra-search__clear:hover {
    background: #eef1f5;
    color: #4b5563;
}

.tra-reload i {
    font-size: 12px;
}

.tra-apply {
    background-color: #0dbf48;
    border-color: #0dbf48;
}

.tra-apply:hover {
    background-color: #0aa33d;
    border-color: #0aa33d;
}

.tra-loader {
    display: flex;
    align-items: center;
}

.tra-loader .loader-image {
    width: 22px;
    height: 22px;
}

.tra-summary {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 18px;
    margin-top: 14px;
    padding: 10px 12px;
    border-radius: 6px;
    background: #f5f7fa;
    font-size: 14px;
}

/* Добавляемое время — янтарное. Тот же цвет, что у плашки auto и у колонки
   часов владельца, чтобы «добавка» читалась как одна сущность во всей панели.
   Зелёным остаётся только уже записанное (.tra-cell--delta.is-applied) — это
   индикатор успеха, а не планируемой величины. */
.tra-summary__item--add {
    color: #d18700;
    font-weight: 700;
}

.tra-summary__item--manual {
    color: #d18700;
}

.tra-summary__hint {
    color: #6b7280;
    font-size: 13px;
}

/* НОВОЕ. Предупреждение про фильтр — не серым: спрятанные задачи всё равно
   получат время, и это надо заметить, а не пролистать глазом. */
.tra-summary__hint--filter {
    color: #d18700;
}

.tra-notice {
    margin-top: 12px;
    padding: 10px 12px;
    border-radius: 6px;
    background: #f5f7fa;
    color: #6b7280;
    font-size: 14px;
}

.tra-notice--error {
    background: #fdecec;
    color: #c02626;
}

.tra-list-wrap {
    margin-top: 14px;
}

/* НОВОЕ. Скрытие по фильтру. !important нужен по той же причине, что и у
   .tr-automation__panel[hidden] выше: у строки и группы есть авторский display
   (flex/block), и обычное правило проиграло бы ему по порядку. */
.tra-row.is-hidden-by-search,
.tra-group.is-hidden-by-search {
    display: none !important;
}

/* Подсветка совпавших символов. Только фон: цвет текста остаётся своим, иначе
   ключ задачи, summary и плашки красились бы одинаково. */
.tra-hl {
    padding: 0 1px;
    border-radius: 2px;
    background: #ffe680;
    color: inherit;
}

.tra-group + .tra-group {
    margin-top: 22px;
}

.tra-group__head {
    display: flex;
    /* БЫЛО: align-items: baseline. С текстом это работало, но в шапке теперь
       живёт select (и обёртка select2), а он выравнивается по своей базовой
       линии и садится заметно ниже соседей. Центр даёт ровную строку из текста,
       контролов и периода. */
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    padding-bottom: 8px;
    border-bottom: 1px solid #e3e6ea;
    min-height: 34px;
}

.tra-group__jira {
    font-size: 15px;
    font-weight: 700;
}

.tra-group__owner,
.tra-group__period {
    font-size: 13px;
    color: #6b7280;
}

.tra-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 7px 8px;
    border-bottom: 1px solid #f0f2f4;
    font-size: 13px;
    cursor: pointer;
    /* Фон строки для просвета между полосами слева (см. .has-own.has-auto).
       Держим в переменной, чтобы каждое состояние фона задавало её один раз. */
    --tra-stripe-gap: #fff;
}

.tra-row:hover:not(.tra-row--head) {
    background: #f7f9fc;
    --tra-stripe-gap: #f7f9fc;
}

.tra-row--head {
    align-items: flex-end;
    cursor: default;
    color: #6b7280;
    font-size: 12px;
    line-height: 1.25;
    text-transform: uppercase;
    letter-spacing: .02em;
    border-bottom: 1px solid #e3e6ea;
}

.tra-row.is-disabled {
    cursor: default;
    color: #9aa1ab;
}

/* Полосы слева читаются как два независимых факта о задаче:

     зелёная   — время владельца ключа в задаче уже есть (неважно, как попало);
     оранжевая — время добавлено автоматизацией: уже писали раньше (.has-auto)
                 или накидывают прямо сейчас (.has-manual).

   Когда верно и то и другое, полос две сразу: первая тень рисуется поверх, поэтому
   зелёная занимает 0-3px, а оранжевая проступает на 3-6px.

   БЫЛО: .has-auto давала жёлтую полосу, .is-applied — зелёную, и одновременно они
   не показывались никогда. */
.tra-row.has-own {
    box-shadow: inset 3px 0 0 0 #0dbf48;
}

.tra-row.has-auto,
.tra-row.has-manual {
    box-shadow: inset 3px 0 0 0 #f0a92c;
}

/* Между полосами 1px просвета, иначе зелёная и оранжевая читаются как одна
   двухцветная. Просвет — это третья тень цветом фона строки: тени рисуются в
   порядке объявления, каждая следующая шире и уходит под предыдущую, поэтому
   видно зелёный 0-3px, фон 3-4px и оранжевый 4-7px.

   Цвет фона берётся из переменной: у строки три состояния фона (обычное,
   ховер, записанная), и просвет обязан совпадать с каждым — иначе на ховере
   в нём проступала бы белая нитка.
   БЫЛО: box-shadow: inset 3px 0 0 0 #0dbf48, inset 6px 0 0 0 #f0a92c; */
.tra-row.has-own.has-auto,
.tra-row.has-own.has-manual {
    box-shadow:
        inset 3px 0 0 0 #0dbf48,
        inset 4px 0 0 0 var(--tra-stripe-gap, #fff),
        inset 7px 0 0 0 #f0a92c;
}

/* Зелёную полосу записанной строке даёт .has-own — её вешает markRowResult()
   вместе с .has-auto, поэтому здесь остаётся только фон.
   БЫЛО: box-shadow: inset 3px 0 0 0 #0dbf48; */
.tra-row.is-applied {
    background: #f2fbf5;
    --tra-stripe-gap: #f2fbf5;
}

/* Подвал таблицы группы: те же колонки, что и в шапке. Строка не кликабельна —
   попапа у итога нет. */
.tra-row--foot {
    cursor: default;
    border-bottom: none;
    border-top: 1px solid #e3e6ea;
    font-weight: 600;
}

.tra-row--foot:hover {
    background: transparent;
}

.tra-row--foot .tra-cell--task {
    color: #6b7280;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: .02em;
}

/* Ячейка под «→ станет». Стоит ровно на месте убранных из подвала колонок
   «Already auto added» и «By ... (incl. auto)»: 140 + зазор 10 + 180 = 330.
   Сумма фиксированных ширин подвала за счёт этого совпадает со строкой таблицы,
   поэтому «To add» остаётся под своим заголовком, а тотал — под своим.

   Ячейку тотала при этом НЕ трогаем: она обычная, как у всех строк.

   БЫЛО: 120 + зазор 10 + 160 = 290 — до того, как во временные ячейки
   добавилась вторая запись «2h 30m». */
.tra-cell--foot-after {
    width: 330px;
    text-align: left;
    white-space: nowrap;
}

/* Серая только стрелка: она разделитель, а не значение. */
.tra-foot-total__arrow {
    margin-right: 8px;
    color: #9aa1ab;
    font-weight: 400;
}

.tra-cell {
    flex: 0 0 auto;
    overflow: hidden;
}

/* Своя зона клика: по строке открывается попап, поэтому чекбокс обязан
   перехватывать нажатие только на себе, но делать это уверенно. */
.tra-cell--check {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    margin: -7px 0 -7px -8px;
    padding: 7px 0 7px 8px;
    cursor: pointer;
}

.tra-cell--check input {
    cursor: pointer;
    margin: 0;
}

.tra-cell--task {
    flex: 1 1 auto;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    min-width: 0;
}

.tra-task-line {
    display: flex;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
}

.tra-key {
    flex: 0 0 auto;
    font-weight: 700;
    color: #1e79f2;
    text-decoration: none;
}

.tra-key:hover {
    text-decoration: underline;
}

.tra-task-summary {
    min-width: 0;
    font-size: 13px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.tra-task-badges {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
}

.tra-badge {
    display: inline-flex;
    align-items: center;
    padding: 1px 7px;
    border-radius: 10px;
    font-size: 11px;
    line-height: 17px;
    white-space: nowrap;
}

.tra-badge--auto {
    background: #fdf1dc;
    color: #9a6410;
}

.tra-badge--warn {
    background: #f1f3f5;
    color: #6b7280;
}

/* Статус задачи. Красим по категории статуса, а не по названию: названий в
   проектах десятки и они произвольные, а категорий у Jira ровно три. */
.tra-badge--status {
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .02em;
}

.tra-badge--status-new {
    background: #eef1f5;
    color: #4b5563;
}

.tra-badge--status-indeterminate {
    background: #e4efff;
    color: #1a5fb4;
}

.tra-badge--status-done {
    background: #dff5e5;
    color: #0a7a30;
}

.tra-badge--status-undefined {
    background: #f1f3f5;
    color: #6b7280;
}

/* Лейблы — нейтральные чипы: они справочные, спорить за внимание со статусом
   и с числами им не нужно.

   Прямые углы (border-radius: 0) — намеренно: у статуса скругление осталось, и по
   форме плашки видно, где статус, а где лейбл, даже когда они стоят вплотную.
   Пробуем; если не приживётся — убрать одну строку и вернётся общий вид. */
.tra-badge--label {
    background: #f5f7fa;
    color: #55607a;
    border: 1px solid #e3e6ea;
    border-radius: 0;
}

.tra-badge--label-more {
    cursor: help;
    font-weight: 600;
}

.tra-badge--just-written {
    background: #dff5e5;
    color: #0a7a30;
}

.tra-cell--date {
    width: 140px;
    color: #6b7280;
    text-align: center;
}

/* Дату выбрали руками — она отличается от даты последнего ворклога задачи. */
.tra-cell--date.is-manual {
    color: #d18700;
    font-weight: 600;
}

/* Пара «2h 30m / 2,50h» во временной ячейке.

   Обёртка inline-flex, а не раскладка на самой ячейке: пара встречается и в
   ячейке таблицы, и внутри <strong> в подвале («→ станет») — везде она должна
   вести себя одинаково, а сами ячейки при этом остаются обычными блоками с
   text-align: right, как были.

   gap задаёт отступы слева и справа от слеша: он такой же flex-элемент, как и
   числа, поэтому воздух вокруг него берётся сам и в вёрстке не дублируется.

   Разметку собирают две парные функции, расходиться им нельзя:
   $timeCell() в automation_list.blade.php и timeCellNodes() в
   timereports-automation.js. */
.tra-time {
    display: inline-flex;
    align-items: baseline;
    gap: 6px;
    white-space: nowrap;
}

/* Обе записи — одно и то же время, поэтому цвет и жирность у них общие,
   наследуются от ячейки: зелёный .has-own-time и янтарный .is-add красят пару
   целиком.

   БЫЛО: часы с минутами наследовали цвет, десятичные были серые и не жирные —
   выглядело так, будто это два разных по важности числа. */
.tra-time__hm,
.tra-time__dec {
    color: inherit;
}

/* Серый только слеш: он разделитель, а не значение — то же правило, что у
   стрелки «→» в подвале таблицы и в итоге попапа. */
.tra-time__sep {
    color: #9aa1ab;
    font-weight: 400;
}

/* Служебные слова в ячейке To add («written», «×2») рядом с парой. */
.tra-delta-label {
    color: inherit;
}

.tra-delta-label + .tra-time,
.tra-time + .tra-delta-label {
    margin-left: 6px;
}

/* БЫЛО: 110px под одно число. Ширины числовых колонок выросли под пару
   «2h 30m / 2,50h»; поджимается .tra-cell--task (flex: 1 1 auto). */
.tra-cell--total {
    width: 130px;
    text-align: right;
    font-weight: 600;
}

/* Время, которое эта автоматизация уже записала в задачу. Раньше показывалось
   плашкой внутри колонки задачи — колонкой цифры сравнивать удобнее.
   БЫЛО: 120px. */
.tra-cell--auto {
    width: 140px;
    text-align: right;
    color: #9aa1ab;
}

/* Зелёный, а не янтарный: это уже записанное время — та же семантика, что у
   .tra-cell--delta.is-applied. Янтарный по всей панели означает «будет добавлено». */
.tra-cell--auto.has-auto-time {
    color: #0a7a30;
    font-weight: 600;
    cursor: help;
}

/* Заголовки колонок — общим цветом шапки. Зелёным выделяются сами значения:
   это уже записанное время, та же семантика, что у .tra-cell--delta.is-applied. */

/* БЫЛО: 160px — до появления пары «2h 30m / 2,50h». */
.tra-cell--owner {
    width: 180px;
    text-align: right;
    color: #6b7280;
}

/* Владелец ключа уже трекал время в эту задачу — такие строки по умолчанию сняты.
   Зелёный, как и в колонке «уже добавлено»: оба числа про время, которое уже есть
   в Jira. Янтарный по всей панели означает «будет добавлено». */
.tra-cell--owner.has-own-time {
    color: #0a7a30;
    font-weight: 600;
}

/* БЫЛО: 200px — до появления пары «2h 30m / 2,50h». */
.tra-cell--delta {
    width: 220px;
    text-align: right;
    color: #9aa1ab;
}

.tra-cell--delta.is-add {
    color: #d18700;
    font-weight: 700;
}

/* Ручное значение отличается от рассчитанного плашкой, а не цветом:
   после перевода добавки в жёлтый цвет у них общий. */
.tra-manual-badge {
    display: inline-flex;
    align-items: center;
    margin-left: 6px;
    padding: 1px 6px;
    border-radius: 10px;
    background: #fdf1dc;
    color: #9a6410;
    font-size: 11px;
    font-weight: 600;
    line-height: 16px;
    text-transform: uppercase;
}

/* БЫЛО: собственная полоса ручного ввода чуть другого оттенка. Теперь ручной
   ввод — частный случай «время добавляют сейчас», и полоса у него общая с
   .has-auto (см. блок выше), иначе на одной строке спорили бы два жёлтых.
.tra-row.has-manual {
    box-shadow: inset 3px 0 0 0 #e0a53a;
}
*/

.tra-cell--delta.is-zero {
    color: #9aa1ab;
    font-style: italic;
}

.tra-cell--delta.is-applied {
    color: #0a7a30;
    font-weight: 700;
}

.tra-cell--delta.is-failed {
    color: #c02626;
    font-weight: 700;
}

/* --- модалка применения --- */

.tra-modal .modal-content {
    width: 620px;
    max-width: 92vw;
}

.tra-modal-intro {
    margin: 0 0 14px;
    font-size: 14px;
    line-height: 1.45;
}

.tra-totals {
    border: 1px solid #e3e6ea;
    border-radius: 6px;
    overflow: hidden;
}

.tra-total-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 9px 12px;
    font-size: 14px;
}

.tra-total-row + .tra-total-row {
    border-top: 1px solid #eef0f2;
}

.tra-total-row__add {
    color: #d18700;
}

.tra-confirm {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 16px;
    font-size: 14px;
    cursor: pointer;
}

.tra-progress {
    height: 10px;
    border-radius: 5px;
    background: #eef0f2;
    overflow: hidden;
}

.tra-progress__bar {
    width: 0;
    height: 100%;
    background: #1e79f2;
    transition: width .2s ease;
}

.tra-progress__text {
    margin: 12px 0 0;
    font-size: 15px;
    font-weight: 600;
    text-align: center;
}

.tra-progress__note {
    margin: 4px 0 0;
    font-size: 13px;
    color: #6b7280;
    text-align: center;
}

.tra-done__summary {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
}

.tra-done__errors {
    margin-top: 14px;
    max-height: 220px;
    overflow-y: auto;
}

.tra-done__errors-title {
    margin: 0 0 6px;
    font-size: 13px;
    color: #c02626;
}

.tra-done__errors ul {
    margin: 0;
    padding-left: 18px;
    font-size: 13px;
}

.tra-done__errors li {
    margin-bottom: 4px;
}

.tra-done__batch {
    margin: 6px 0 0;
    font-size: 12px;
    color: #6b7280;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}

/* Вторая запись на тот же сайт Jira (своя + расшаренная). */
.jira-badge-duplicate {
    display: inline-block;
    margin-left: 8px;
    padding: 2px 6px;
    font-size: 0.75em;
    text-transform: uppercase;
    color: #9a6410;
    background: #fdf1dc;
    border-radius: 3px;
    vertical-align: middle;
    cursor: help;
}

/* Подтверждение при добавлении джиры, которая уже расшарена пользователю. */
.jira-shared-conflict {
    margin-top: 16px;
    padding: 14px 16px;
    border: 1px solid #f0c98a;
    border-radius: 6px;
    background: #fffaf1;
}

.jira-shared-conflict__title {
    margin: 0 0 8px;
    font-size: 16px;
}

.jira-shared-conflict p {
    margin: 0 0 8px;
    font-size: 14px;
    line-height: 1.45;
}

.jira-shared-conflict__actions {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 12px;
}

/* ============================================================
   Попап задачи в «Automate your time»
   Оформление повторяет .tr-day-popup из таблицы /timereports.
   ============================================================ */

.tra-popup {
    position: absolute;
    z-index: 1100;
    /* БЫЛО: 460px. СТАЛО: +30% — в строке ворклога теперь две колонки часов,
       и имени автора оставалось мало места.
       Прибавку забирает колонка автора (flex: 1 1 auto), фиксированные колонки
       даты и часов не меняются. На узком экране ширина всё равно своя:
       adaptive.css разворачивает попап на всю ширину экрана. */
    width: 598px;
    max-width: calc(100vw - 24px);
    background: #fff;
    border: 1px solid #d8dce1;
    border-radius: 6px;
    box-shadow: 0 6px 20px rgba(9, 30, 66, 0.2);
    font-size: 13px;
    overflow: hidden;
}

.tra-popup__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 8px 10px;
    background: #f5f6f8;
    border-bottom: 1px solid #ececec;
}

.tra-popup__title {
    display: flex;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
    font-weight: 600;
    color: #344563;
}

.tra-popup__key {
    flex: 0 0 auto;
    color: #1e79f2;
}

.tra-popup__summary {
    min-width: 0;
    font-weight: 400;
    color: #5e6c84;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.tra-popup__close {
    flex: 0 0 auto;
    border: none;
    background: transparent;
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    color: #7a869a;
    padding: 0 4px;
}

.tra-popup__close:hover {
    color: #172b4d;
}

.tra-popup__meta {
    padding: 6px 10px;
    background: #fafbfc;
    border-bottom: 1px solid #ececec;
    color: #5e6c84;
    font-size: 12px;
}

/* Шапка попапа стала многосоставной: период, суммы, статус, лейблы. */
.tra-popup__meta-item + .tra-popup__meta-item::before {
    content: '·';
    margin: 0 6px;
    color: #9aa1ab;
}

.tra-popup__meta .tra-badge {
    margin-left: 6px;
    vertical-align: middle;
}

.tra-popup__body {
    padding: 6px 10px;
    max-height: 240px;
    overflow: auto;
}

.tra-popup__empty {
    padding: 10px 0;
    color: #7a869a;
    text-align: center;
}

.tra-popup__entry {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 5px 0;
    border-bottom: 1px solid #f2f3f5;
}

.tra-popup__entry:last-child {
    border-bottom: none;
}

/* Итог под списком ворклогов: колонки те же, что у записи, поэтому сумма
   встаёт ровно под столбцом часов. */
.tra-popup__total {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 6px 0 2px;
    margin-top: 2px;
    border-top: 1px solid #e3e6ea;
    font-weight: 700;
}

.tra-popup__total .tra-popup__entry-author {
    color: #6b7280;
    font-weight: 400;
}

/* «было → станет» в итоге попапа. Серая только стрелка — она разделитель,
   а не значение; те же правила, что и в подвале таблицы. */
.tra-popup__total-arrow {
    margin: 0 5px;
    color: #9aa1ab;
    font-weight: 400;
}

/* Новый итог — обычным цветом, жирным. Не зелёный: зелёное по всей панели
   означает «время уже в Jira», а это ещё не записанная величина. И не янтарный:
   янтарным помечается сама прибавка, а не сумма после неё — так же, как в
   подвале таблицы, где «станет» тоже нейтральное. */
.tra-popup__total-after {
    color: inherit;
}

.tra-popup__entry.is-owner {
    font-weight: 600;
}

.tra-popup__entry-date {
    flex: 0 0 auto;
    width: 108px;
    color: #5e6c84;
    font-weight: 400;
}

.tra-popup__entry-author {
    flex: 1 1 auto;
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Две колонки часов: слева «2h 30m», справа «2,50h». Слеша между ними нет —
   в отличие от ячейки таблицы, здесь это две выровненные колонки, и разводит
   их сама вёрстка.

   flex: 0 0 auto (а не фиксированная ширина) — сознательно: в строке итога сюда
   встаёт «было → станет», и ячейка обязана вырасти. Правые края всех строк всё
   равно совпадают, потому что растягивается колонка автора (flex: 1 1 auto).
   min-width держит границу между часами и десятичными на месте у обычных строк. */
.tra-popup__entry-hours {
    flex: 0 0 auto;
    min-width: 62px;
    text-align: right;
}

/* Цвет и жирность — как у соседней колонки часов: это одно и то же время в двух
   записях, а не главное и второстепенное число.
   БЫЛО: color: #9aa1ab; font-weight: 400; */
.tra-popup__entry-dec {
    flex: 0 0 auto;
    min-width: 56px;
    text-align: right;
}

/* Ячейка итога — единственная в попапе, где обе записи стоят рядом через слеш:
   «2h 35m / 2,59h → 2h 51m / 2,86h». У записей выше это две отдельные колонки,
   здесь их пришлось слить, иначе стрелку «→» пришлось бы писать в каждой.

   min-width от колонки часов ей не нужен: содержимое всегда шире, а колонка
   автора рядом сама отдаёт место (flex: 1 1 auto). */
.tra-popup__total-time {
    min-width: 0;
    white-space: nowrap;
}

/* --- жёлтая полоса ручного ввода --- */

.tra-popup__add {
    padding: 10px;
    background: #fff8e8;
    border-top: 1px solid #f0c98a;
}

/* Список строк ввода: одна строка = один будущий ворклог. */
.tra-popup__entries {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.tra-popup__add-row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
}

/* Ошибка подсвечивает свою строку: при нескольких записях иначе непонятно, к
   какой из них относится текст подсказки внизу. */
.tra-popup__add-row.is-error .tra-popup__amount,
.tra-popup__add-row.is-error .tra-popup__date {
    border-color: #d97070;
}

/* Кнопки строки прижаты к правому краю: пара «время — дата» остаётся слева
   неразорванной, а действия над строкой собраны в одном месте. */
.tra-popup__entry-actions {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-left: auto;
}

/* Плюс и корзина: маленькие, чтобы не спорить с полями ввода. */
.tra-popup__entry-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    padding: 0;
    border: 1px solid transparent;
    border-radius: 4px;
    background: #fff;
    font-size: 12px;
    line-height: 1;
    cursor: pointer;
}

.tra-popup__entry-btn:disabled {
    opacity: .5;
    cursor: default;
}

/* Синий — цвет добавления: тот же, что у ссылок на задачи (.tra-key).
   БЫЛО: янтарный, как вся полоса ручного ввода — кнопка в ней терялась. */
.tra-popup__entry-add {
    border-color: #bcd7fb;
    color: #1e79f2;
}

.tra-popup__entry-add:hover:not(:disabled) {
    background: #eaf3ff;
}

/* Красный — удаление. Тот же цвет, что у ошибок и .btn-danger.
   БЫЛО: серый крестик, читался как «закрыть», а не «удалить запись». */
.tra-popup__entry-remove {
    border-color: #f0c4c4;
    color: #c02626;
}

.tra-popup__entry-remove:hover:not(:disabled) {
    background: #fdecec;
}

.tra-popup__add-label {
    color: #6b7280;
}

.tra-popup__amount,
.tra-popup__date {
    height: 30px;
    padding: 0 8px;
    border: 1px solid #e0c48a;
    border-radius: 4px;
    background: #fff;
    font-size: 13px;
}

.tra-popup__amount {
    width: 110px;
}

.tra-popup__date {
    width: 120px;
}

.tra-popup__amount:disabled,
.tra-popup__date:disabled {
    background: #f4f5f7;
    cursor: not-allowed;
}

.tra-popup__parsed {
    color: #d18700;
    font-weight: 600;
}

.tra-popup__hint {
    margin-top: 6px;
    color: #8a7350;
    font-size: 12px;
    line-height: 1.35;
}

.tra-popup__hint.is-error {
    color: #c02626;
}

.tra-popup__actions {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 10px;
}

.tra-popup__clear {
    border: none;
    background: transparent;
    padding: 0;
    color: #6b7280;
    font-size: 12px;
    text-decoration: underline;
    cursor: pointer;
}

.tra-popup__clear:hover {
    color: #344563;
}

.tra-popup__status {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 12px;
    color: #6b7280;
}

.tra-popup__status.is-ok {
    color: #0a7a30;
}

.tra-popup__status.is-error {
    color: #c02626;
}

.tra-popup__loader .loader-image {
    width: 22px;
    height: 22px;
}

.tra-popup__loader[hidden] {
    display: none !important;
}

.tra-popup__add-now,
.tra-popup__apply {
    flex: 0 0 auto;
    height: 30px;
    padding: 0 14px;
    border-radius: 4px;
    font-size: 13px;
}

/* Зелёная — тот же цвет, что у главной кнопки Apply в панели (.tra-apply):
   действие одно и то же, просто в масштабе одной задачи. */
.tra-popup__apply {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background-color: #0dbf48;
    border-color: #0dbf48;
}

.tra-popup__apply:hover:not(:disabled) {
    background-color: #0aa33d;
    border-color: #0aa33d;
}

.tra-popup__apply i {
    font-size: 12px;
}

.tra-popup__add-now:disabled {
    background-color: #a9c6ee;
    border-color: #a9c6ee;
    cursor: not-allowed;
}

.tra-popup__apply:disabled {
    opacity: 0.55;
    cursor: not-allowed;
}

/* Кнопка подтверждения записи: пока галочка не поставлена, она обязана выглядеть
   выключенной, а не просто не реагировать на клик. */
.tra-modal .modal-footer #tra-modal-confirm-btn:disabled {
    opacity: 0.55;
    cursor: not-allowed;
}

/* Кнопки модалки автоматизации — в размер остальных элементов блока.
   Правило намеренно ограничено .tra-modal: глобальные .modal-footer button
   (150px × 37px) обслуживают ещё и модалки отчётов и фильтров. */
.tra-modal .modal-footer button {
    width: auto;
    min-width: 120px;
    height: 32px;
    padding: 0 16px;
    font-size: 13px;
}

/* ============================================================
   Полоса свёрнутой таблицы результатов
   Появляется, пока открыт блок «Automate your time»: два длинных
   списка подряд иначе сливаются в один поток.
   ============================================================ */

.tr-results-toggle {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    margin: 0 0 16px;
    padding: 10px 14px;
    border: 1px solid #e3e6ea;
    border-radius: 8px;
    background: #f5f7fa;
    color: #344563;
    font-size: 14px;
    font-weight: 600;
    text-align: left;
    cursor: pointer;
}

.tr-results-toggle:hover {
    background: #eef1f6;
}

.tr-results-toggle[hidden] {
    display: none !important;
}

/* Шеврон: вниз у развёрнутой таблицы, вправо у свёрнутой. */
.tr-results-toggle__icon {
    flex: 0 0 auto;
    width: 0;
    height: 0;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-top: 6px solid #5e6c84;
    transition: transform .15s ease;
}

.tr-results-toggle.is-collapsed .tr-results-toggle__icon {
    transform: rotate(-90deg);
}

.tr-results-toggle__hint {
    color: #6b7280;
    font-weight: 400;
    font-size: 13px;
}

/* Специфичность поднята до трёх классов намеренно: в adaptive.css .reports
   правится селектором body.page-timereports .reports, и одного класса не хватило бы,
   появись там когда-нибудь свой display. */
.timereports_content .reports.is-collapsed {
    display: none;
}

/* ==========================================================================
   Jira identity: переключатель «от кого писать время» и статусы доступа джир
   ========================================================================== */

/* Выбор личности в шапке блока задач: блок — это набор проектов одной джиры.

   БЫЛО: один общий переключатель в тулбаре. Права в Jira попроектные, в разные
   проекты одного отчёта пишут разные аккаунты — один селект заставлял выбирать
   «или/или» вместо реального распределения. */
.tra-group__identity {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    font-weight: normal;
}

.tra-group__identity-label {
    font-size: 13px;
    color: #6b7280;
    white-space: nowrap;
}

/* Голый select виден лишь до инициализации select2 — держим его той же высоты,
   чтобы шапка не дёргалась при подмене. */
.tra-group__identity-select {
    height: 30px;
    line-height: 28px;
    padding: 0 8px;
    /* 312px = 260px + 20%: почты длинные, в прежнюю ширину не влезали. */
    width: 312px;
    max-width: 100%;
    border: 1px solid #d1d5db;
    border-radius: 5px;
    background: #fff;
    font-size: 13px;
    color: #374151;
}

/* select2 внутри шапки: высота и вертикальный центр текста.
   Без явных height/line-height текст в single-selection прижимается к низу. */
.tra-group__identity .select2-container {
    vertical-align: middle;
    /* select2 проставляет контейнеру inline width (312px из JS). Без потолка
       на узком экране строка «logging as» + селект даёт горизонтальное
       переполнение — inline-стиль перебить может только max-width. */
    max-width: 100%;
}

.tra-group__identity .select2-container--default .select2-selection--single {
    height: 30px;
    border: 1px solid #d1d5db;
    border-radius: 5px;
}

.tra-group__identity .select2-container--default .select2-selection--single .select2-selection__rendered {
    line-height: 28px;
    padding-left: 8px;
    padding-right: 24px;
    font-size: 13px;
    color: #374151;
}

.tra-group__identity .select2-container--default .select2-selection--single .select2-selection__arrow {
    height: 28px;
}

.tra-group__identity .select2-container--default .select2-results__option[aria-disabled="true"] {
    color: #9ca3af;
}

/* Проекты блока рядом с названием джиры: без них два блока одной джиры
   неотличимы друг от друга. */
.tra-group__projects {
    margin-left: 6px;
    font-weight: normal;
    font-size: 12px;
    color: #6b7280;
}

.tra-group__identity-select:disabled {
    opacity: .6;
    cursor: progress;
}

/* Недоступная личность остаётся видимой, но выбрать её нельзя: спрятать её
   значило бы оставить человека гадать, почему нужного аккаунта нет в списке. */
.tra-group__identity-select option:disabled {
    color: #9ca3af;
}

/* Джиры отчёта, в которые выбранная личность писать не может. */
.tra-readonly-note {
    margin-top: 8px;
    padding: 8px 12px;
    border-left: 3px solid #f59e0b;
    background: #fffbeb;
    color: #92400e;
    font-size: 13px;
    border-radius: 0 6px 6px 0;
}

/* Строка джиры, о существовании которой админ знает, но данные не читает. */
.jiras-row--no-access {
    opacity: .55;
}

.jira-badge-no-access {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 7px;
    border-radius: 10px;
    background: #fee2e2;
    color: #991b1b;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: .03em;
    cursor: help;
}

/* Чекбокс «Linked account» в общей форме пользователя.
   Свой паттерн повторяет .form-group.round-hours-checkbox: без него
   .form-group label{display:block} и .form-group input{width:100%} растягивают
   чекбокс на всю ширину и уводят подпись на отдельную строку. */
.form-group.user-linked-checkbox label {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    margin-bottom: 0;
}

.form-group.user-linked-checkbox input[type="checkbox"] {
    width: auto;
    height: auto;
    margin: 0 7px 1px 1px;
}

/* Список статусов доступа по джирам (только на редактировании). */
.user-jira-identity-list {
    list-style: none;
    margin: 0 0 10px;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.user-jira-identity-row {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 10px;
    padding: 6px 10px;
    border-radius: 6px;
    background: #f9fafb;
    border-left: 3px solid #d1d5db;
    font-size: 13px;
}

.user-jira-identity-row__name {
    font-weight: 600;
    min-width: 140px;
}

.user-jira-identity-row__status { white-space: nowrap; }

.user-jira-identity-row__meta {
    color: #6b7280;
    font-size: 12px;
}

.user-jira-identity-row--ok { border-left-color: #16a34a; }
.user-jira-identity-row--no-access { border-left-color: #f59e0b; }
.user-jira-identity-row--invalid { border-left-color: #dc2626; }
.user-jira-identity-row--error { border-left-color: #dc2626; }
.user-jira-identity-row--unchecked { border-left-color: #9ca3af; }

.user-jira-identity-actions {
    display: flex;
    align-items: center;
    gap: 10px;
}

.user-jira-identity-recheck {
    width: auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.user-jira-identity-recheck:disabled {
    opacity: .6;
    cursor: progress;
}

/* Через :not([hidden]) — голый display перебил бы браузерное
   [hidden]{display:none}, и крутилка висела бы до клика. */
.user-jira-identity-loader:not([hidden]) {
    display: inline-flex;
    align-items: center;
}

@media (max-width: 640px) {
    .tra-group__identity {
        width: 100%;
    }

    /* На телефоне фиксированные 312px не нужны: тянемся по доступной ширине. */
    .tra-group__identity-select,
    .tra-group__identity .select2-container {
        width: auto !important;
        min-width: 0;
        flex: 1 1 auto;
    }
}

/* Колонка «Jira identity» в списке пользователей. */
.cell-users-identity {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.users-identity-name {
    font-size: 13px;
}

.users-identity-none {
    color: #9ca3af;
}

.users-identity-parent {
    font-size: 11px;
    color: #6b7280;
    cursor: help;
}

/* ===== Дропдаун периода на /timereports (поле Range) ========================
   БЫЛО: select2 с плоским списком восьми пресетов.
   СТАЛО: своя панель в два уровня (пресеты + Month / Quarter / Year) — select2
          подменю не умеет. Скрытый <select id="date_range_select"> остался
          носителем состояния, см. public/js/timereports-date-range.js. */

.date-range-native {
    display: none !important;
}

.date-range-dropdown {
    position: relative;
    width: 100%;
}

.date-range-trigger {
    display: flex;
    align-items: center;
    width: 100%;
    height: 27px;
    padding: 0 6px;
    border: 1px solid #6aa5e2;
    border-radius: 4px;
    background-color: #fff;
    font-size: 13px;
    line-height: 1;
    color: #333;
    text-align: left;
    cursor: pointer;
}

.date-range-dropdown.is-open .date-range-trigger {
    border-color: #3b82f6;
    box-shadow: 0 0 0 1px rgba(59, 130, 246, 0.2);
}

.date-range-trigger-icon {
    flex: 0 0 auto;
    margin-right: 6px;
    font-size: 12px;
    color: #6aa5e2;
}

.date-range-trigger-label {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.date-range-trigger-label.is-placeholder {
    color: #999;
}

.date-range-trigger-caret {
    flex: 0 0 auto;
    margin-left: 6px;
    font-size: 12px;
    color: #6b7280;
}

.date-range-dropdown.is-open .date-range-trigger-caret {
    transform: rotate(180deg);
}

.date-range-panel {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    /* Шапка .timereports_header липкая с z-index: 100 — панель должна быть выше. */
    z-index: 300;
    min-width: 260px;
    max-width: 340px;
    padding: 4px 0;
    background-color: #fff;
    border: 1px solid #d7e3f4;
    border-radius: 6px;
    box-shadow: 0 8px 24px rgba(15, 23, 42, 0.14);
}

.date-range-view {
    display: flex;
    flex-direction: column;
}

/* Авторское display: flex у .date-range-view сильнее браузерного
   [hidden] { display: none }, поэтому прячем панель и неактивные виды явно —
   иначе все три подменю показывались бы разом. */
.date-range-panel[hidden],
.date-range-view[hidden] {
    display: none;
}

.date-range-list {
    display: flex;
    flex-direction: column;
    margin: 0;
    padding: 0;
    list-style: none;
}

.date-range-row {
    display: flex;
    align-items: center;
    width: 100%;
    padding: 7px 12px;
    border: 0;
    background-color: transparent;
    font-size: 13px;
    line-height: 1.3;
    color: #1f2937;
    text-align: left;
    cursor: pointer;
}

.date-range-row:hover,
.date-range-row:focus {
    background-color: #f1f5fb;
    outline: none;
}

.date-range-check {
    flex: 0 0 14px;
    width: 14px;
    margin-right: 8px;
    font-size: 12px;
    color: #2563eb;
    visibility: hidden;
}

.date-range-row.is-selected > .date-range-check {
    visibility: visible;
}

/* У пункта «Period» слева не галочка, а иконка календаря — она видна всегда. */
.date-range-check--icon {
    visibility: visible;
    color: #6aa5e2;
}

.date-range-row-label {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.date-range-row-note {
    flex: 0 0 auto;
    margin-left: 6px;
    font-size: 12px;
    color: #6b7280;
}

.date-range-group-value {
    flex: 0 1 auto;
    min-width: 0;
    margin-left: 8px;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    font-size: 12px;
    color: #6b7280;
}

.date-range-row-chevron {
    flex: 0 0 auto;
    margin-left: 8px;
    font-size: 11px;
    color: #9ca3af;
}

.date-range-separator {
    height: 1px;
    margin: 4px 0;
    background-color: #edf1f7;
}

/* Шапка подменю — кнопка «назад» во всю ширину панели. */
.date-range-subheader {
    display: flex;
    align-items: center;
    width: 100%;
    margin-bottom: 4px;
    padding: 6px 12px 8px;
    border: 0;
    border-bottom: 1px solid #edf1f7;
    background-color: transparent;
    text-align: left;
    cursor: pointer;
}

.date-range-subheader:hover,
.date-range-subheader:focus {
    background-color: #f1f5fb;
    outline: none;
}

.date-range-back-icon {
    flex: 0 0 14px;
    width: 14px;
    margin-right: 8px;
    font-size: 12px;
    color: #4b5563;
}

.date-range-subheader-title {
    flex: 1 1 auto;
    font-size: 13px;
    color: #1f2937;
}

/* Режим периода (правило / снимок) в модалке сохранения фильтра.
   Класс .filter-modal-input-group блоку намеренно не даём: его правило
   .filter-modal-input-group label { width: 95px } ужимало бы подписи
   радиокнопок в узкую колонку. */
.date-range-mode-block {
    display: flex;
    flex-direction: column;
    margin-bottom: 8px;
}

.date-range-mode-title {
    margin-bottom: 6px;
    font-size: 13px;
    font-weight: bold;
    color: #374151;
}

#filterModal .date-range-mode-option {
    display: flex;
    align-items: flex-start;
    width: 100%;
    margin-bottom: 4px;
    font-size: 13px;
    font-weight: normal;
    color: #1f2937;
    cursor: pointer;
}

.date-range-mode-option input {
    flex: 0 0 auto;
    margin: 2px 8px 0 0;
}

.date-range-mode-option > span {
    flex: 1 1 auto;
}

.date-range-mode-hint {
    margin: 4px 0 0;
    font-size: 12px;
    color: #6b7280;
}

/* ==========================================================================
   Merge Users: раскрывашки объединённых пользователей
   ==========================================================================
   Одно имя вместо нескольких Jira-аккаунтов одного человека. И в превью письма,
   и в сводке /timereports объединённую строку можно развернуть в настоящие
   аккаунты с их часами. Раскладка на flex — grid в проекте не используем. */

/* ---- Превью письма ---- */

/* Строка тела письма, за которой стоит группа. Внутри <pre>, поэтому inline:
   переносы делают текстовые узлы, а не блоки. */
.report-preview-body-group {
    display: inline;
}

.report-preview-body-toggle {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: #eef3fb;
    border: 1px solid #d3e0f5;
    border-radius: 4px;
    color: #1e79f2;
    cursor: pointer;
    font-family: inherit;
    font-size: 12px;
    line-height: 1;
    padding: 1px 5px;
    vertical-align: baseline;
}

.report-preview-body-toggle:hover {
    background: #e2ebfa;
}

.report-preview-body-toggle .fa-plus {
    transition: transform 100ms linear;
}

.report-preview-body-toggle.is-open .fa-plus {
    transform: rotate(45deg);
}

.report-preview-body-count {
    font-weight: 600;
}

/* Скрытые строки участников. Внутри <pre> у них свои переносы и отступы. */
.report-preview-body-members {
    color: #6b7280;
}

.report-preview-body-members[hidden] {
    display: none;
}

/* Лейбл джиры возле имени аккаунта в раскрывашке. */
.report-preview-body-jira,
.tr-sum-emp-jira {
    display: inline-block;
    background: #f1f3f5;
    border: 1px solid #e1e4e8;
    border-radius: 4px;
    color: #7a828d;
    font-size: 11px;
    line-height: 1.3;
    padding: 0 5px;
    vertical-align: baseline;
    white-space: nowrap;
}

.tr-sum-emp-jira {
    margin-left: 4px;
}

/* ---- Сводка на /timereports ---- */

.tr-sum-emp-toggle {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: #eef3fb;
    border: 1px solid #d3e0f5;
    border-radius: 4px;
    color: #1e79f2;
    cursor: pointer;
    font-size: 11px;
    line-height: 1;
    /* БЫЛО: margin-right — кнопка стояла слева от имени.
       СТАЛО: отступ слева, кнопка встала за именем. */
    margin-left: 6px;
    padding: 1px 5px;
    vertical-align: middle;
}

.tr-sum-emp-toggle:hover {
    background: #e2ebfa;
}

.tr-sum-emp-count {
    font-weight: 600;
}

.tr-sum-emp-toggle-icon {
    transition: transform 100ms linear;
}

.tr-sum-emp-toggle.is-open .tr-sum-emp-toggle-icon {
    transform: rotate(45deg);
}

/* Строки-участники: чуть тусклее и со сдвигом, чтобы читались как вложенные. */
.tr-summary-table tr.tr-sum-emp-member td {
    color: #6b7280;
    font-size: 13px;
}

.tr-summary-table tr.tr-sum-emp-member td.tr-sum-emp {
    padding-left: 28px;
}

.tr-summary-table tr.tr-sum-emp-member[hidden] {
    display: none;
}

/* Админ-отладка: задачи аккаунта под его строкой, ещё на уровень глубже. */
.tr-summary-table tr.tr-sum-emp-task td {
    font-size: 12px;
}

.tr-summary-table tr.tr-sum-emp-task td.tr-sum-emp {
    padding-left: 48px;
}

.tr-summary-table tr.tr-sum-emp-task .tr-sum-emp-jira {
    margin-left: 0;
    margin-right: 4px;
}

.tr-sum-emp-task-summary {
    margin-left: 4px;
}
