/* ============================================================
   04-PAGES — блоки конкретных экранов:
   дашборд, реестр, карточка контракта, приёмка,
   контроль сроков, отчёты
   ============================================================ */

/* ─────────── ДАШБОРД: КАРТОЧКИ-ПОКАЗАТЕЛИ ─────────── */

.dashboard-cards{
    display:grid;
    grid-template-columns:repeat(4, minmax(0, 1fr));
    gap:var(--s-4);
    margin-bottom:var(--s-5);
}

.dashboard-card{
    background:var(--c-surface);
    border:1px solid var(--c-line);
    border-radius:var(--r-lg);
    box-shadow:var(--sh-card);
    padding:18px;
    min-height:130px;
    display:flex;
    flex-direction:column;
    justify-content:space-between;
    transition:outline 0.15s, box-shadow 0.15s;
    user-select:none;
}

.dashboard-card-title{
    font-size:var(--fs-md);
    font-weight:bold;
    color:var(--c-ink-2);
    margin-bottom:10px;
}

.dashboard-card-value{
    font-size:clamp(28px, 2.2vw, 34px);
    font-weight:bold;
    line-height:1.1;
    color:var(--c-ink);
    margin-bottom:var(--s-2);
    font-variant-numeric:tabular-nums;
    overflow-wrap:anywhere;
}

.dashboard-card-note{
    font-size:var(--fs-sm);
    color:var(--c-ink-3);
    line-height:1.4;
}

.dashboard-card-actions{
    margin-top:var(--s-3);
}

.dashboard-card-link{
    color:inherit;
    text-decoration:none;
    cursor:pointer;
}

.dashboard-card-link:hover{
    color:inherit;
    text-decoration:none;
    transform:translateY(-2px);
    box-shadow:var(--sh-pop);
}

.dashboard-card-cta{
    display:block;
    margin-top:var(--s-3);
    color:var(--c-primary);
    font-size:var(--fs-xs);
    font-weight:600;
}

/* Верхняя полоса — смысловой цвет (см. 01-tokens.css) */
.dashboard-card-danger{  border-top:4px solid var(--c-danger); }
.dashboard-card-warning{ border-top:4px solid var(--c-warning); }
.dashboard-card-info{    border-top:4px solid var(--c-info); }
.dashboard-card-success{ border-top:4px solid var(--c-success); }
.dashboard-card-action{  border-top:4px solid var(--c-primary); }

.deadline-cards-clickable{
    cursor:pointer;
}

.deadline-cards-clickable .dashboard-card{
    width:100%;
    color:var(--c-ink);
    font-family:inherit;
    text-align:left;
    cursor:pointer;
}

.deadline-cards-clickable .dashboard-card-title,
.deadline-cards-clickable .dashboard-card-value,
.deadline-cards-clickable .dashboard-card-note{
    display:block;
}

.deadline-cards-clickable .dashboard-card:hover{
    transform:translateY(-1px);
    box-shadow:var(--sh-pop);
}

.dashboard-card-active{
    outline:2px solid var(--c-primary);
    box-shadow:0 0 0 4px var(--c-primary-soft);
}

/* ─────────── ДАШБОРД: АНАЛИТИЧЕСКИЕ СПИСКИ ─────────── */

.dashboard-analytics-grid{
    display:grid;
    grid-template-columns:minmax(0, 0.9fr) minmax(0, 1.1fr);
    gap:var(--s-5);
}

.dashboard-analytics-grid .card{
    margin-bottom:0;
}

.analytics-card{
    min-width:0;
}

.analytics-card-wide{
    grid-column:1 / -1;
}

.analytics-card-header{
    display:flex;
    align-items:flex-start;
    justify-content:space-between;
    gap:var(--s-3);
    margin-bottom:var(--s-3);
}

.analytics-card-header h3{
    margin-bottom:var(--s-1);
}

.analytics-card-subtitle,
.analytics-note{
    margin:0;
    color:var(--c-ink-3);
    font-size:var(--fs-sm);
    line-height:1.45;
}

.analytics-note{
    margin-top:var(--s-3);
    padding-top:var(--s-3);
    border-top:1px solid var(--c-line-soft);
}

.metric-list{
    display:grid;
    gap:var(--s-1);
}

.metric-list-suppliers{
    grid-template-columns:repeat(2, minmax(0, 1fr));
    gap:var(--s-1) var(--s-5);
}

.metric-row{
    display:block;
    min-width:0;
    padding:var(--s-2);
    border-radius:var(--r-md);
}

.metric-row-link{
    color:inherit;
    text-decoration:none;
    transition:background .15s ease;
}

.metric-row-link:hover{
    color:inherit;
    background:var(--c-surface-alt);
    text-decoration:none;
}

.metric-row-header{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:var(--s-3);
    margin-bottom:6px;
    min-width:0;
}

.metric-label{
    min-width:0;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    color:var(--c-ink-2);
    font-size:var(--fs-sm);
    font-weight:500;
}

.metric-values{
    flex:0 0 auto;
    color:var(--c-ink-2);
    font-size:var(--fs-xs);
    font-variant-numeric:tabular-nums;
    white-space:nowrap;
}

.metric-values strong{
    color:var(--c-ink);
    font-size:var(--fs-sm);
}

.metric-progress{
    --metric-color:var(--c-primary);
    display:block;
    width:100%;
    height:8px;
    overflow:hidden;
    border:0;
    border-radius:var(--r-pill);
    background:var(--c-line-soft);
    appearance:none;
}

.metric-progress::-webkit-progress-bar{
    background:var(--c-line-soft);
    border-radius:var(--r-pill);
}

.metric-progress::-webkit-progress-value{
    background:var(--metric-color);
    border-radius:var(--r-pill);
}

.metric-progress::-moz-progress-bar{
    background:var(--metric-color);
    border-radius:var(--r-pill);
}

.metric-progress-in-progress{ --metric-color:var(--c-info); }
.metric-progress-partial{ --metric-color:var(--c-warning); }
.metric-progress-done{ --metric-color:var(--c-success); }
.metric-progress-overdue,
.metric-progress-terminated{ --metric-color:var(--c-danger); }
.metric-progress-program{ --metric-color:var(--c-primary); }
.metric-progress-supplier{ --metric-color:var(--c-violet); }

@media (max-width: 1000px){
    .dashboard-analytics-grid{
        grid-template-columns:1fr;
    }

    .analytics-card-wide{
        grid-column:auto;
    }
}

@media (max-width: 700px){
    .metric-list-suppliers{
        grid-template-columns:1fr;
    }

    .metric-row-header{
        align-items:flex-start;
        flex-direction:column;
        gap:var(--s-1);
    }

    .metric-label{
        white-space:normal;
    }
}

.dashboard-details-card{
    margin-top:var(--s-5);
}

.dashboard-detail-list{
    display:grid;
    gap:var(--s-2);
}

.dashboard-detail-section{
    border:1px solid var(--c-line);
    border-radius:var(--r-md);
    background:var(--c-surface);
    overflow:hidden;
}

.dashboard-detail-summary{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:var(--s-3);
    padding:var(--s-3) var(--s-4);
    color:var(--c-ink);
    font-size:var(--fs-md);
    font-weight:700;
    cursor:pointer;
    list-style-position:inside;
}

.dashboard-detail-summary:hover{
    background:var(--c-surface-alt);
}

.dashboard-detail-section[open] .dashboard-detail-summary{
    background:var(--c-primary-soft);
    color:var(--c-primary);
    border-bottom:1px solid var(--c-info-line);
}

.dashboard-detail-body{
    padding:var(--s-3) var(--s-4) var(--s-4);
}

@media (max-width: 700px){
    .dashboard-detail-summary,
    .dashboard-detail-body{
        padding-left:var(--s-3);
        padding-right:var(--s-3);
    }
}

/* ─────────── КАРТОЧКА КОНТРАКТА: СВОДКА ─────────── */

.contract-summary-grid{
    display:grid;
    grid-template-columns:repeat(3, minmax(0, 1fr));
    gap:var(--s-3);
}

.summary-item{
    padding:var(--s-3);
    border:1px solid var(--c-line);
    border-radius:var(--r-lg);
    background:var(--c-surface);
}

.summary-item-wide{
    grid-column:span 3;
}

.summary-label{
    font-size:var(--fs-xs);
    color:var(--c-ink-3);
    margin-bottom:var(--s-2);
}

.summary-value{
    font-size:var(--fs-lg);
    font-weight:bold;
    color:var(--c-ink);
    word-break:break-word;
}

/* ─────────── КАРТОЧКА КОНТРАКТА: КОМПАКТНАЯ ШАПКА ─────────── */

.contract-header-compact{
    background:var(--c-surface);
    border:1px solid var(--c-line);
    border-radius:var(--r-lg);
    padding:var(--s-3) var(--s-4);
    margin-bottom:var(--s-3);
    box-shadow:var(--sh-card);
}

/* Строка 1: номер + наименование + статус */
.contract-header-title-row{
    display:flex;
    align-items:baseline;
    flex-wrap:wrap;
    gap:var(--s-2);
    margin-bottom:var(--s-2);
}

.contract-header-number{
    font-size:15px;
    font-weight:bold;
    color:var(--c-ink);
    white-space:nowrap;
}

.contract-header-title{
    font-size:var(--fs-sm);
    color:var(--c-ink-2);
    flex:1;
    min-width:0;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}

.contract-header-status{
    white-space:nowrap;
}

.contract-header-stages{
    font-size:var(--fs-xs);
    color:var(--c-ink-3);
    white-space:nowrap;
}

/* Строка 2: поля через разделители */
.contract-header-fields{
    display:flex;
    align-items:center;
    flex-wrap:wrap;
    gap:0;
    padding-top:var(--s-2);
    border-top:1px solid var(--c-line-soft);
}

.chf{
    display:flex;
    flex-direction:column;
    padding:0 var(--s-3);
    min-width:0;
}

.chf:first-child{
    padding-left:0;
}

.chf-sep{
    width:1px;
    height:28px;
    background:var(--c-line);
    padding:0;
    flex-shrink:0;
}

.chf-label{
    font-size:10px;
    color:var(--c-ink-3);
    text-transform:uppercase;
    letter-spacing:0.4px;
    white-space:nowrap;
    margin-bottom:1px;
}

.chf-value{
    font-size:var(--fs-sm);
    color:var(--c-ink);
    font-weight:600;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
    max-width:280px;
}

.chf-flex{
    flex:1;
    min-width:0;
}

.chf-flex .chf-value{
    max-width:none;
}

.chf-link{
    color:var(--c-primary);
    text-decoration:none;
    font-weight:600;
}

.chf-link:hover{
    text-decoration:underline;
}

@media (max-width: 700px){
    .contract-header-title-row{
        flex-direction:column;
        align-items:flex-start;
    }

    .contract-header-title{
        white-space:normal;
    }

    .chf{
        padding:var(--s-1) var(--s-2);
    }

    .chf-sep{
        display:none;
    }

    .contract-tabs-card{
        padding:var(--s-2);
    }

    .contract-tabs-scroll{
        display:flex;
        flex-wrap:nowrap;
        overflow-x:auto;
        gap:var(--s-2);
        padding:2px 2px 6px;
        scrollbar-width:thin;
        overscroll-behavior-x:contain;
    }

    .contract-tabs-scroll .chip{
        flex:0 0 auto;
    }
}

/* ─────────── ЭТАПЫ И ПРИЁМКА ─────────── */

.stage-count{
    color:var(--c-ink-3);
    font-size:var(--fs-md);
    font-weight:normal;
    margin-left:var(--s-2);
}

.stage-edit-cell{
    padding:0;
    background:var(--c-primary-soft);
    border-top:2px solid var(--c-primary);
}

.stage-edit-inner{
    padding:var(--s-3);
}

.stage-actions{
    display:flex;
    gap:var(--s-1);
}

.acceptance-stage-card{
    margin-bottom:var(--s-5);
}

/* Левая полоса — тот же смысловой цвет, что у бейджей */
.acceptance-stage-done{     border-left:4px solid var(--c-success); }
.acceptance-stage-overdue{  border-left:4px solid var(--c-danger); }
.acceptance-stage-partial{  border-left:4px solid var(--c-warning); }
.acceptance-stage-progress{ border-left:4px solid var(--c-info); }

.acceptance-header{
    display:flex;
    justify-content:space-between;
    align-items:flex-start;
    flex-wrap:wrap;
    gap:var(--s-2);
    margin-bottom:var(--s-3);
}

.acceptance-stage-title{
    font-size:15px;
}

.acceptance-stage-item{
    color:var(--c-ink-2);
    font-size:var(--fs-md);
    margin-left:var(--s-2);
}

.acceptance-stage-status{
    margin-left:var(--s-3);
}

.acceptance-stage-meta{
    display:flex;
    gap:var(--s-5);
    flex-wrap:wrap;
    font-size:var(--fs-sm);
    color:var(--c-ink-3);
    margin-bottom:10px;
    padding-bottom:10px;
    border-bottom:1px solid var(--c-line-soft);
}

.acceptance-add-box{
    margin-top:var(--s-3);
    border-top:2px solid var(--c-success);
    padding:var(--s-3);
    background:var(--c-success-bg);
    border-radius:0 0 var(--r-md) var(--r-md);
}

.acceptance-add-title{
    color:var(--c-success);
}

/* ─────────── ОПИСАНИЕ: ФАРМ. ПОЗИЦИИ ─────────── */

.position-card{
    margin-top:var(--s-4);
    border:1px solid var(--c-line);
    border-left:4px solid var(--c-primary);
    border-radius:var(--r-sm);
    padding:var(--s-4);
}

.grls-details{
    margin-top:var(--s-3);
    padding-top:var(--s-3);
    border-top:1px solid var(--c-line);
}

/* Признак ЖНВЛП */
.pill-yes{
    background:var(--c-success-bg);
    color:var(--c-success);
    padding:1px var(--s-2);
    border-radius:10px;
    font-size:var(--fs-xs);
}

.pill-no{
    background:var(--c-neutral-bg);
    color:var(--c-neutral);
    padding:1px var(--s-2);
    border-radius:10px;
    font-size:var(--fs-xs);
}

/* Бейдж количества позиций/этапов синего цвета */
.count-badge{
    background:var(--c-info);
    color:var(--c-on-dark);
    border-radius:var(--r-pill);
    font-size:11px;
    padding:1px 6px;
    margin-left:var(--s-1);
}

/* Панель массовых действий над списком */
.bulk-bar{
    display:flex;
    gap:10px;
    align-items:center;
    flex-wrap:wrap;
    margin-bottom:14px;
    padding:10px var(--s-3);
    background:var(--c-neutral-bg);
    border-radius:var(--r-md);
}

.bulk-check{
    display:flex;
    align-items:center;
    gap:var(--s-2);
    cursor:pointer;
    font-size:var(--fs-sm);
    font-weight:bold;
    color:var(--c-ink);
}

/* Подсказка пунктиром (расшифровка при наведении) */
.hint-dotted{
    color:inherit;
    text-decoration:none;
    border-bottom:1px dashed var(--c-info-line);
    cursor:help;
}

.hint-danger{
    color:var(--c-danger);
    cursor:help;
    border-bottom:1px dashed var(--c-danger);
}

/* Значок статуса этапа в строке контракта */
.stage-dot{
    cursor:help;
    font-weight:bold;
    margin:0 2px;
}

.stage-dot-done{    color:var(--c-success); }
.stage-dot-partial{ color:var(--c-warning); }
.stage-dot-overdue{ color:var(--c-danger); }
.stage-dot-other{   color:var(--c-ink-3); }

/* ─────────── СТРАНИЦА ВХОДА ─────────── */

.auth-page .app-bar-nav{
    display:none;
}

.auth-page .container{
    max-width:1120px;
}

.auth-layout{
    display:grid;
    grid-template-columns:minmax(0, 1.08fr) minmax(360px, .92fr);
    gap:var(--s-6);
    max-width:960px;
    margin:48px auto 24px;
    align-items:stretch;
}

.auth-intro{
    display:flex;
    flex-direction:column;
    justify-content:center;
    min-height:390px;
    padding:40px;
    box-sizing:border-box;
    border-radius:var(--r-lg);
    background:linear-gradient(145deg, var(--c-brand-900), var(--c-brand-700));
    color:var(--c-on-dark);
    box-shadow:var(--sh-pop);
}

.auth-mark{
    display:flex;
    align-items:center;
    justify-content:center;
    width:52px;
    height:52px;
    margin-bottom:var(--s-5);
    border:1px solid rgba(255,255,255,.35);
    border-radius:var(--r-lg);
    background:rgba(255,255,255,.12);
    color:var(--c-on-dark);
    font-size:24px;
    font-weight:700;
}

.auth-intro h1{
    margin-bottom:var(--s-3);
    color:var(--c-on-dark);
    font-size:28px;
    line-height:1.2;
}

.auth-intro p{
    max-width:520px;
    margin:0;
    color:var(--c-on-dark-soft);
    font-size:15px;
}

.auth-features{
    display:grid;
    gap:10px;
    margin:var(--s-6) 0 0;
    padding:var(--s-5) 0 0;
    border-top:1px solid rgba(255,255,255,.16);
    list-style:none;
    color:var(--c-on-dark-soft);
    font-size:var(--fs-sm);
}

.auth-features li::before{
    content:'✓';
    margin-right:var(--s-2);
    color:var(--c-on-dark);
    font-weight:700;
}

.auth-card{
    display:flex;
    flex-direction:column;
    justify-content:center;
    max-width:none;
    margin:0;
    padding:32px;
}

.auth-card-header{
    margin-bottom:var(--s-5);
}

.auth-card-header h2{
    margin:var(--s-1) 0 var(--s-2);
    font-size:24px;
}

.auth-card-header p{
    margin:0;
    color:var(--c-ink-3);
    font-size:var(--fs-sm);
}

.auth-eyebrow{
    color:var(--c-primary);
    font-size:11px;
    font-weight:700;
    letter-spacing:.06em;
    text-transform:uppercase;
}

.auth-form{
    display:grid;
    gap:var(--s-4);
}

.password-control{
    position:relative;
}

.password-control input{
    padding-right:88px;
}

.password-toggle{
    position:absolute;
    top:5px;
    right:5px;
    bottom:5px;
    min-width:76px;
    padding:0 var(--s-2);
    border:0;
    border-radius:var(--r-sm);
    background:var(--c-primary-soft);
    color:var(--c-primary);
    font-family:inherit;
    font-size:var(--fs-xs);
    font-weight:600;
    cursor:pointer;
}

.password-toggle:hover{
    color:var(--c-primary-hover);
}

.auth-submit{
    width:100%;
    min-height:42px;
    margin-top:var(--s-1);
    text-align:center;
}

.auth-help{
    margin:var(--s-5) 0 0;
    padding-top:var(--s-4);
    border-top:1px solid var(--c-line-soft);
    color:var(--c-ink-3);
    font-size:var(--fs-xs);
    text-align:center;
}

@media (max-width: 800px){
    .auth-layout{
        grid-template-columns:1fr;
        max-width:560px;
        margin-top:var(--s-5);
    }

    .auth-intro{
        min-height:0;
        padding:var(--s-6);
    }

    .auth-features{
        display:none;
    }
}

@media (max-width: 520px){
    .auth-layout{
        gap:var(--s-3);
        margin-top:0;
    }

    .auth-intro,
    .auth-card{
        padding:var(--s-5);
    }

    .auth-intro h1{
        font-size:22px;
    }

    .auth-mark{
        width:42px;
        height:42px;
        margin-bottom:var(--s-3);
        font-size:20px;
    }
}

/* ─────────── КОНТРОЛЬ СРОКОВ: ПАНЕЛИ ─────────── */

.deadline-panel{
    border-radius:var(--r-lg);
    border:2px solid var(--c-line);
    padding:var(--s-4);
    margin-bottom:var(--s-3);
}

.deadline-panel-danger{
    border-color:var(--c-danger-line);
    background:var(--c-danger-bg);
}

.deadline-panel-warning{
    border-color:var(--c-warning-line);
    background:var(--c-warning-bg);
}

.deadline-panel-info{
    border-color:var(--c-info-line);
    background:var(--c-info-bg);
}

.deadline-panel-success{
    border-color:var(--c-success-line);
    background:var(--c-success-bg);
}

.deadline-panel-header{
    display:flex;
    justify-content:space-between;
    align-items:center;
    margin-bottom:var(--s-1);
    flex-wrap:wrap;
    gap:var(--s-2);
}

/* ─────────── РЕЕСТР: ФИЛЬТР ПО ГОДАМ ─────────── */

.year-filter-label{
    color:var(--c-ink-3);
    font-size:var(--fs-md);
    margin-right:var(--s-1);
}

.registry-toolbar{
    padding:var(--s-3) var(--s-4);
}

.registry-toolbar-main{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:var(--s-3);
    flex-wrap:wrap;
}

.registry-result-count{
    color:var(--c-ink-3);
    font-size:var(--fs-sm);
    white-space:nowrap;
}

.registry-toolbar-actions{
    display:flex;
    align-items:center;
    gap:var(--s-3);
    flex-wrap:wrap;
}

.registry-toolbar-actions .nav-filters{
    flex:0 0 auto;
}

.registry-toolbar-actions .nav-filters-btn{
    min-height:32px;
    padding:0 var(--s-3);
    background:var(--c-primary-soft);
    color:var(--c-primary);
    border-color:var(--c-info-line);
}

.registry-toolbar-actions .nav-filters-btn:hover,
.registry-toolbar-actions .nav-filters.open .nav-filters-btn{
    background:var(--c-primary);
    color:var(--c-on-dark);
    border-color:var(--c-primary);
}

.registry-toolbar-actions .nav-filters-count{
    background:var(--c-primary);
    color:var(--c-on-dark);
}

.registry-toolbar-actions .nav-filters.open .nav-filters-count{
    background:var(--c-on-dark);
    color:var(--c-primary);
}

.registry-active-query{
    display:flex;
    align-items:center;
    gap:var(--s-2);
    flex-wrap:wrap;
    margin-top:var(--s-3);
    padding-top:var(--s-3);
    border-top:1px solid var(--c-line-soft);
}

.toolbar-details{
    position:relative;
    flex:0 0 auto;
    margin:0;
    padding:0;
    border:0;
}

.toolbar-details > .filters-summary{
    display:flex;
    align-items:center;
    gap:6px;
    min-height:32px;
    box-sizing:border-box;
    padding:0 var(--s-3);
    border:1px solid var(--c-line);
    border-radius:var(--r-md);
    background:var(--c-surface);
    color:var(--c-ink-2);
    font-size:var(--fs-sm);
    font-weight:600;
    list-style:none;
}

.toolbar-details > .filters-summary::-webkit-details-marker{
    display:none;
}

.toolbar-details > .filters-summary::after{
    content:'▼';
    color:var(--c-primary);
    font-size:10px;
    transition:transform .15s ease;
}

.toolbar-details > .filters-summary:hover{
    background:var(--c-surface-alt);
    border-color:var(--c-ink-3);
}

.toolbar-details[open] > .filters-summary{
    background:var(--c-primary-soft);
    border-color:var(--c-info-line);
    color:var(--c-primary);
}

.toolbar-details[open] > .filters-summary::after{
    transform:rotate(180deg);
}

.toolbar-details > .filters-body{
    display:none;
    position:absolute;
    top:calc(100% + 6px);
    right:0;
    z-index:350;
    width:min(860px, calc(100vw - 48px));
    max-height:calc(100vh - 150px);
    overflow:auto;
    box-sizing:border-box;
    padding:var(--s-4);
    border:1px solid var(--c-line);
    border-radius:var(--r-md);
    background:var(--c-surface);
    box-shadow:var(--sh-pop);
}

.toolbar-details[open] > .filters-body{
    display:block;
}

.contract-number-link{
    color:var(--c-primary);
    font-weight:700;
    text-decoration:none;
}

.contract-number-link:hover{
    color:var(--c-primary-hover);
    text-decoration:underline;
}

.registry-row{
    cursor:pointer;
}

.registry-row:focus-visible{
    outline:2px solid var(--c-primary);
    outline-offset:-2px;
}

.registry-row:focus-visible td,
.registry-row:focus-visible .registry-actions-col{
    background:var(--c-primary-soft);
}

.registry-table .registry-actions-col{
    position:sticky;
    right:0;
    white-space:nowrap;
}

.registry-table th.registry-actions-col{
    z-index:30;
    background:var(--c-line-soft);
    box-shadow:-6px 0 10px -10px var(--c-ink-3);
}

.registry-table td.registry-actions-col{
    z-index:10;
    background:var(--c-surface);
    box-shadow:-6px 0 10px -10px var(--c-ink-3);
}

.registry-table tbody tr:nth-child(even) .registry-actions-col{
    background:var(--c-surface-alt);
}

.registry-table tbody tr:hover .registry-actions-col{
    background:var(--c-primary-soft);
}

.registry-table .registry-row:focus-visible .registry-actions-col{
    background:var(--c-primary-soft);
}

@media (max-width: 700px){
    .registry-toolbar-main{
        align-items:flex-start;
    }

    .registry-result-count{
        white-space:normal;
    }

    .registry-toolbar-actions{
        width:100%;
        justify-content:space-between;
    }

    .registry-toolbar-actions .nav-filters{
        width:auto;
    }

    .registry-toolbar-actions .nav-filters-btn{
        width:auto;
    }

    .toolbar-details > .filters-body{
        position:fixed;
        top:112px;
        right:12px;
        left:12px;
        width:auto;
        max-height:calc(100vh - 136px);
    }
}

/* ─────────── НАСТРОЙКА КОЛОНОК ───────────
   Раскрывающийся блок над таблицей (макрос columns_panel).
   Раньше это было всплывающее окно у кнопки «⋮» в шапке таблицы.
*/

.columns-form{
    display:block;
}

.columns-grid{
    display:grid;
    grid-template-columns:repeat(3, minmax(0, 1fr));
    gap:10px var(--s-4);
}

.checkbox-item{
    display:flex;
    align-items:center;
    gap:var(--s-2);
    font-size:var(--fs-md);
    padding:var(--s-2) 10px;
    border:1px solid var(--c-line);
    border-radius:var(--r-md);
    background:var(--c-surface);
}

.checkbox-item input[type="checkbox"]{
    width:auto;
    min-height:auto;
}

/* Список колонок: галочки — что показывать, плашки — порядок */

.col-grid{
    display:grid;
    grid-template-columns:repeat(3, minmax(0, 1fr));
    gap:2px var(--s-5);
    max-width:900px;
}

.col-check{
    display:flex;
    align-items:center;
    gap:var(--s-2);
    padding:5px 0;
    font-size:var(--fs-md);
    color:var(--c-ink);
    cursor:pointer;
    user-select:none;
}

.col-check input[type="checkbox"]{
    width:16px;
    height:16px;
    min-height:16px;
    flex-shrink:0;
    cursor:pointer;
    accent-color:var(--c-primary);
}

.col-check:hover{
    color:var(--c-primary);
}

/* Строка порядка: плашки идут слева направо, как колонки в таблице */
.col-order{
    display:flex;
    flex-wrap:wrap;
    gap:6px;
    padding:10px;
    min-height:52px;
    background:var(--c-surface-alt);
    border:1px dashed var(--c-line);
    border-radius:var(--r-md);
    max-width:900px;
}

.col-chip{
    display:inline-flex;
    align-items:center;
    gap:6px;
    padding:6px 10px;
    background:var(--c-surface);
    border:1px solid var(--c-line);
    border-radius:var(--r-pill);
    font-size:var(--fs-sm);
    color:var(--c-ink);
    cursor:grab;
    user-select:none;
}

.col-chip:active{
    cursor:grabbing;
}

.col-chip-grip{
    color:var(--c-ink-3);
    font-size:var(--fs-md);
    line-height:1;
}

.col-chip.dragging{
    opacity:0.4;
}

.col-chip.drag-over{
    border-color:var(--c-primary);
    background:var(--c-primary-soft);
}

@media (max-width: 700px){
    .col-grid{
        grid-template-columns:1fr;
    }
}

/* ─────────── ИНСТРУКЦИЯ: ТАБЛИЦА ПРАВ ПО РОЛЯМ ─────────── */

.roles-table{
    font-size:var(--fs-md);
}

.roles-table .col-feature{
    width:55%;
}

.roles-table th.matrix-cell,
.matrix-cell{
    text-align:center;
}

/* ✔ — право есть, — право отсутствует */
.matrix-yes{
    text-align:center;
    color:var(--c-success);
    font-weight:600;
}

.matrix-no{
    text-align:center;
    color:var(--c-ink-3);
}

/* ─────────── АДМИНИСТРИРОВАНИЕ: ПОЛЬЗОВАТЕЛИ ─────────── */

/* Бейдж роли и состояния в списке пользователей */
.user-badge{
    display:inline-block;
    font-size:var(--fs-xs);
    padding:3px var(--s-2);
    border-radius:var(--r-pill);
    font-weight:600;
}

.user-badge-admin{
    background:var(--c-danger-bg);
    color:var(--c-danger);
}

.user-badge-editor{
    background:var(--c-info-bg);
    color:var(--c-info);
}

.user-badge-viewer{
    background:var(--c-neutral-bg);
    color:var(--c-neutral);
}

.user-badge-active{
    background:var(--c-success-bg);
    color:var(--c-success);
}

.user-badge-inactive{
    background:var(--c-neutral-bg);
    color:var(--c-neutral);
}

.user-row-header{
    display:flex;
    justify-content:space-between;
    align-items:flex-start;
    flex-wrap:wrap;
    gap:10px;
    margin-bottom:10px;
}

.user-name{
    font-size:15px;
    font-weight:bold;
    color:var(--c-ink);
}

.user-login{
    font-weight:400;
    color:var(--c-ink-3);
    font-size:var(--fs-sm);
    margin-left:var(--s-2);
}

.perm-group-title{
    font-size:var(--fs-xs);
    font-weight:600;
    color:var(--c-primary);
    margin-bottom:6px;
    text-transform:uppercase;
    letter-spacing:.04em;
}

.perm-list{
    display:flex;
    flex-wrap:wrap;
    gap:10px 20px;
    margin-bottom:var(--s-3);
}

.perm-item{
    display:flex;
    align-items:center;
    gap:6px;
    font-size:var(--fs-md);
    cursor:pointer;
    white-space:nowrap;
}

.perm-item-sm{
    display:flex;
    align-items:center;
    gap:6px;
    cursor:pointer;
    font-size:var(--fs-sm);
}

/* Пояснение внутри заголовка группы — обычным регистром */
.group-note{
    font-weight:400;
    color:var(--c-ink-3);
    text-transform:none;
    letter-spacing:0;
}

/* Приписка в заголовке свёрнутого блока */
.summary-note{
    font-weight:400;
    color:var(--c-ink-3);
    font-size:var(--fs-sm);
    margin-left:var(--s-2);
}

/* Поле «Название пресета» рядом с кнопкой */
.input-preset-name{
    flex:0 1 240px;
    height:34px;
    padding:0 10px;
    font-size:var(--fs-md);
}

/* ─────────── ИМПОРТ КОНТРАКТОВ (ПАРСЕР) ───────────
   Перенесено из блока <style> внутри parser.html —
   чтобы весь внешний вид задавался в одном месте.
*/

/* Внешние вкладки: Ручной / Автоматический */
.import-outer-tabs{
    display:flex;
    gap:0;
    border-bottom:2px solid var(--c-primary);
    margin-bottom:var(--s-6);
}

.import-outer-btn{
    padding:10px 32px;
    border:none;
    background:none;
    cursor:pointer;
    font-size:15px;
    font-weight:500;
    font-family:inherit;
    color:var(--c-ink-2);
    border-bottom:3px solid transparent;
    margin-bottom:-2px;
    transition:color .15s;
}

.import-outer-btn.active{
    color:var(--c-primary);
    border-bottom-color:var(--c-primary);
    font-weight:700;
}

.import-outer-btn:hover:not(.active){
    color:var(--c-primary);
}

.import-outer-panel{ display:none; }
.import-outer-panel.active{ display:block; }

/* Внутренние вкладки парсера: Перебор / API */
.parser-tabs{
    display:flex;
    gap:var(--s-1);
    margin-bottom:-1px;
}

.parser-tab-btn{
    padding:var(--s-2) var(--s-5);
    border:1px solid var(--c-line);
    border-bottom:none;
    background:var(--c-surface-alt);
    cursor:pointer;
    border-radius:var(--r-sm) var(--r-sm) 0 0;
    font-size:var(--fs-md);
    font-family:inherit;
    color:var(--c-ink-2);
}

.parser-tab-btn.active{
    background:var(--c-surface);
    color:var(--c-ink);
    font-weight:600;
    border-bottom:1px solid var(--c-surface);
}

.parser-tab-panel{
    display:none;
    border:1px solid var(--c-line);
    padding:var(--s-4);
    border-radius:0 var(--r-sm) var(--r-sm) var(--r-sm);
}

.parser-tab-panel.active{ display:block; }

.parser-grid,
.settings-form{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:10px var(--s-5);
}

.parser-grid label,
.settings-form label{
    display:flex;
    flex-direction:column;
    gap:var(--s-1);
    font-size:var(--fs-sm);
}

.parser-grid small{
    color:var(--c-ink-3);
    font-size:11px;
}

.parser-card{
    background:var(--c-surface);
    border:1px solid var(--c-line);
    border-radius:var(--r-sm);
    padding:var(--s-4) var(--s-5);
    margin-bottom:var(--s-4);
}

.parser-card h3{
    margin:0 0 var(--s-3);
    font-size:var(--fs-lg);
}

.parser-pending-banner{
    background:var(--c-info-bg);
    border:1px solid var(--c-info-line);
    border-radius:var(--r-sm);
    padding:14px var(--s-5);
    margin-bottom:var(--s-4);
    display:flex;
    align-items:center;
    gap:var(--s-4);
    flex-wrap:wrap;
}

.parser-pending-banner strong{
    color:var(--c-primary);
}

.parser-pending-actions{
    display:flex;
    gap:var(--s-2);
    align-items:center;
    flex-wrap:wrap;
}

/* Кнопка «убрать сообщение» в углу баннера */
.parser-pending-banner{
    position:relative;
    padding-right:40px;
}

.banner-dismiss{
    position:absolute;
    top:6px;
    right:8px;
    margin:0;
}

.banner-dismiss-btn{
    background:none;
    border:none;
    color:var(--c-ink-3);
    font-size:20px;
    line-height:1;
    padding:2px 6px;
    border-radius:var(--r-sm);
    cursor:pointer;
}

.banner-dismiss-btn:hover{
    background:var(--c-danger-bg);
    color:var(--c-danger);
}

/* Полоса выполнения загрузки */
.progress-bar-wrap{
    background:var(--c-neutral-bg);
    border-radius:var(--r-sm);
    height:22px;
    overflow:hidden;
    margin:6px 0;
}

.progress-bar{
    background:var(--c-success);
    height:100%;
    width:0;
    border-radius:var(--r-sm);
    text-align:center;
    color:var(--c-on-dark);
    font-size:var(--fs-xs);
    line-height:22px;
    transition:width 0.3s;
}

.parser-table{
    width:100%;
    border-collapse:collapse;
    font-size:var(--fs-sm);
}

.parser-table th,
.parser-table td{
    padding:6px var(--s-2);
    border-bottom:1px solid var(--c-line-soft);
    text-align:left;
}

.parser-table th{
    background:var(--c-line-soft);
    font-weight:600;
}

.running{
    color:var(--c-primary);
    font-weight:600;
}

/* ─────────── ОТЧЁТЫ: ЧИПЫ СОХРАНЁННЫХ ПРЕСЕТОВ ─────────── */

.report-preset-chip{
    display:inline-flex;
    align-items:center;
    background:var(--c-info-bg);
    border:1px solid var(--c-info-line);
    border-radius:var(--r-pill);
    padding:0;
    overflow:hidden;
    font-size:var(--fs-sm);
    transition:border-color 0.15s;
}

.report-preset-chip:hover{
    border-color:var(--c-primary);
}

.report-preset-chip-name{
    padding:var(--s-1) 10px;
    color:var(--c-info);
    text-decoration:none;
    font-weight:500;
    white-space:nowrap;
}

.report-preset-chip-name:hover{
    color:var(--c-primary-hover);
    background:var(--c-primary-soft);
}

.report-preset-chip-del{
    background:none;
    border:none;
    border-left:1px solid var(--c-info-line);
    color:var(--c-ink-3);
    cursor:pointer;
    font-size:15px;
    line-height:1;
    padding:var(--s-1) var(--s-2);
    transition:color 0.15s, background 0.15s;
}

.report-preset-chip-del:hover{
    background:var(--c-danger-bg);
    color:var(--c-danger);
    border-left-color:var(--c-danger-line);
}
