/* /Components/AboutModal.razor.rz.scp.css */
/* Molde do .modal-backdrop/.modal-card/.modal-head/.modal-close (PoiPickerModal.razor.css); o isolamento de
   CSS do Blazor é por componente, por isso repete-se aqui em vez de partilhar (mesmo padrão já usado em
   PicadaEditor.razor.css). O .modal-card fica compacto (não 90vw/90vh) — este modal é só texto, não um grid. */
.modal-backdrop[b-8aa0ik8iqj] {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, .55);
}

.modal-card[b-8aa0ik8iqj] {
    width: 420px;
    max-width: 90vw;
    box-sizing: border-box;
    background: var(--color-panel);
    border-radius: 10px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, .5);
    color: var(--color-ink);
    overflow: hidden;
}

.modal-head[b-8aa0ik8iqj] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 18px;
    border-bottom: 1px solid rgba(255, 255, 255, .08);
}

.modal-head h3[b-8aa0ik8iqj] { margin: 0; font-size: 16px; font-weight: 700; }

.modal-close[b-8aa0ik8iqj] {
    background: none; border: none; color: var(--color-ink-dim);
    font-size: 24px; line-height: 1; cursor: pointer;
}
.modal-close:hover[b-8aa0ik8iqj] { color: var(--color-ink); }

/* Tipografia do corpo (atribuição) — mesma medida do .um-sobre que este modal substitui (UserMenu.razor). */
.modal-body[b-8aa0ik8iqj] {
    padding: 16px 18px;
    color: var(--color-ink-dim);
    font-size: 13px;
    line-height: 1.55;
}
.modal-body p[b-8aa0ik8iqj] { margin: 0 0 10px; }
.modal-body ul[b-8aa0ik8iqj] { margin: 0; padding-left: 18px; }
.modal-body li[b-8aa0ik8iqj] { margin-bottom: 4px; }

.modal-foot[b-8aa0ik8iqj] {
    margin-top: 14px;
    font-size: 12px;
    color: var(--color-ink-dim);
}
/* /Components/CronBuilder.razor.rz.scp.css */
/* Tokens --color-* (paleta escura) — consistente com AboutModal/PoiSettings/Processamento. */
.cron-builder[b-xth11l68m3] { display: flex; flex-direction: column; gap: 10px; }
.cb-preset[b-xth11l68m3] { padding: 6px 8px; border: 1px solid rgba(255,255,255,.12); border-radius: 6px; font: inherit;
    background: var(--color-field); color: var(--color-ink); }
.cb-adv-label[b-xth11l68m3] { display: block; font-size: .85em; color: var(--color-ink-dim); margin-bottom: 4px; }
.cb-cron-text[b-xth11l68m3] { width: 100%; padding: 7px 9px; border: 1px solid rgba(255,255,255,.12); border-radius: 6px;
    font-family: ui-monospace, monospace; background: var(--color-field); color: var(--color-ink); }
.cb-cron-text.is-invalid[b-xth11l68m3] { border-color: var(--color-error); }
.cb-error[b-xth11l68m3] { color: var(--color-error); font-size: .85em; margin: 4px 0 0; }
.cb-desc[b-xth11l68m3] { color: var(--color-data); font-size: .9em; margin: 4px 0 0; }
.cb-complex[b-xth11l68m3] { color: var(--color-warn); font-size: .85em; margin: 4px 0 0; }
/* /Components/CronFieldRow.razor.rz.scp.css */
/* Tokens --color-* (paleta escura, Styles/app.tailwind.css) — como todos os stylesheets da app. As linhas de
   campo vivem dentro do modal (--color-panel); usam o fundo de input (--color-field) para contraste. */
.cfr[b-rd5jjssttf] { border: 1px solid rgba(255,255,255,.10); border-radius: 6px; margin-bottom: 6px; background: var(--color-field); }
.cfr-toggle[b-rd5jjssttf] { display: flex; justify-content: space-between; align-items: center; width: 100%;
    padding: 8px 10px; background: none; border: 0; cursor: pointer; font: inherit; color: var(--color-ink); }
.cfr-toggle:disabled[b-rd5jjssttf] { cursor: default; opacity: .6; }
.cfr-label[b-rd5jjssttf] { font-weight: 600; color: var(--color-ink); }
.cfr-summary[b-rd5jjssttf] { color: var(--color-ink-dim); font-size: .9em; }
.cfr-summary.is-complex[b-rd5jjssttf] { font-family: ui-monospace, monospace; color: var(--color-warn); }
.cfr-panel[b-rd5jjssttf] { padding: 8px 10px; border-top: 1px solid rgba(255,255,255,.08); }
.cfr-values[b-rd5jjssttf], .cfr-steps[b-rd5jjssttf] { display: flex; flex-wrap: wrap; gap: 6px 12px; margin-top: 6px; }
.cfr-check[b-rd5jjssttf] { display: inline-flex; align-items: center; gap: 4px; font-size: .9em; color: var(--color-ink); }
/* /Components/DataGrid.razor.rz.scp.css */
.dg-wrap[b-dwd1o72rgi] { display: flex; flex-direction: column; height: 100%; min-height: 0; }
.dg[b-dwd1o72rgi] { flex: 1 1 auto; min-height: 0; overflow: auto; }
.dg-table[b-dwd1o72rgi] { table-layout: fixed; width: 100%; border-collapse: collapse; font-size: 13px; }

/* Coluna de seleção: estreita e fixa. Não é redimensionável nem arrastável (não tem data-key). */
.dg-sel-col[b-dwd1o72rgi] { width: 36px; }

.dg-sel-th[b-dwd1o72rgi],
.dg-sel-td[b-dwd1o72rgi] {
    width: 36px;
    text-align: center;
    padding: 0;
}

.dg-sel-th input[b-dwd1o72rgi],
.dg-sel-td input[b-dwd1o72rgi] { cursor: pointer; }

/* flex-wrap: com filtros à esquerda (ToolbarStart) a linha não cabe num telemóvel e a página inteira
   ganhava scroll horizontal, empurrando o "Colunas"/"Agrupar por" para fora do ecrã. Inerte nas grids
   sem ToolbarStart (um só filho). */
.dg-toolbar[b-dwd1o72rgi] { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; position: relative; flex: 0 0 auto; padding: 4px 0; }
/* margin-right:auto empurra os filtros da página para a esquerda e mantém Colunas/Agrupar à direita,
   sem mudar o justify-content (que regrediria as grids sem ToolbarStart). */
.dg-toolbar-start[b-dwd1o72rgi] { margin-right: auto; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.dg-cols-btn[b-dwd1o72rgi] {
    background: var(--color-field); border: 1px solid rgba(255,255,255,.1); border-radius: 6px;
    color: var(--color-ink-dim); font-size: 12px; font-weight: 600; padding: 4px 10px; cursor: pointer;
}
.dg-cols-menu[b-dwd1o72rgi] {
    position: absolute; top: 100%; right: 0; z-index: 5; min-width: 180px;
    background: var(--color-panel); border: 1px solid rgba(255,255,255,.12); border-radius: 8px;
    box-shadow: 0 12px 30px rgba(0,0,0,.5); padding: 6px; display: flex; flex-direction: column; gap: 2px;
}
.dg-cols-menu label[b-dwd1o72rgi] { display: flex; align-items: center; gap: 8px; padding: 5px 8px; font-size: 13px; cursor: pointer; }
.dg-cols-menu label.dg-disabled[b-dwd1o72rgi] { opacity: .5; cursor: not-allowed; }
.dg-reset[b-dwd1o72rgi] { margin-top: 4px; background: none; border: none; color: var(--color-data); font-size: 12px; text-align: left; padding: 5px 8px; cursor: pointer; }

.dg-table thead th[b-dwd1o72rgi] {
    position: sticky; /* sticky já cria o contexto posicionado de que a pega (.dg-grip) precisa */
    top: 0; z-index: 1;
    background: var(--color-panel);
    padding: 8px 10px; text-align: left;
    font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
    color: var(--color-ink-section);
    border-bottom: 1px solid rgba(255, 255, 255, .1);
}
.dg-th-label[b-dwd1o72rgi] { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dg-table th.dg-sortable .dg-th-label[b-dwd1o72rgi] { cursor: pointer; user-select: none; }
.dg-table th.dg-sortable:hover .dg-th-label[b-dwd1o72rgi] { color: var(--color-ink); }

/* Ícones Lucide (MIT, lucide.dev) inline — sem CDN e sem dependência nova por 3 glifos. Os atributos de
   traço vivem aqui em vez de repetidos em cada <svg>. */
.dg-ico[b-dwd1o72rgi] {
    width: 13px; height: 13px; display: inline-block; vertical-align: -2px;
    fill: none; stroke: currentColor; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;
}
/* seta da coluna ORDENADA: sempre visível. Nas outras ordenáveis, uma pista neutra que só aparece no
   hover — diz "podes ordenar por aqui" sem encher todos os cabeçalhos de símbolos. */
.dg-sort-on[b-dwd1o72rgi] { color: var(--color-data); }
/* absoluta = não ocupa largura: o rótulo mantém a caixa que tinha antes de haver ícones (o th é sticky,
   logo já é contexto posicionado — o mesmo que a .dg-grip usa). */
.dg-sort-hint[b-dwd1o72rgi] {
    position: absolute; right: 14px; top: 50%; transform: translateY(-50%);
    opacity: 0; color: var(--color-ink-section); transition: opacity .12s ease; pointer-events: none;
}
.dg-table th.dg-sortable:hover .dg-sort-hint[b-dwd1o72rgi] { opacity: .75; }

.dg-grip[b-dwd1o72rgi] {
    position: absolute; top: 0; right: 0; width: 8px; height: 100%;
    cursor: col-resize; touch-action: none;
}

.dg-table tbody td[b-dwd1o72rgi] {
    padding: 7px 10px; border-bottom: 1px solid rgba(255, 255, 255, .05);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.dg-table tbody tr[b-dwd1o72rgi] { cursor: pointer; }
.dg-table tbody tr:hover td[b-dwd1o72rgi] { background: rgba(63, 214, 196, .10); }
.dg-table tbody tr.dg-empty[b-dwd1o72rgi] { cursor: default; }
.dg-table tbody tr.dg-empty:hover td[b-dwd1o72rgi] { background: none; }
.dg-table tbody tr.dg-empty td[b-dwd1o72rgi] { padding: 56px 20px; text-align: center; border-bottom: none; white-space: normal; }

.dg.dg-reordering .dg-table[b-dwd1o72rgi] { cursor: grabbing; }
.dg-table th.dg-drop[b-dwd1o72rgi] { box-shadow: inset 3px 0 0 var(--color-data); }

/* Paginador (rodapé, modo server-side) — |◀ ◀ [pág] de N ▶ ▶| */
.dg-pager[b-dwd1o72rgi] {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 4px 2px;
    font-size: 12px;
    color: var(--color-ink-dim);
}
.dg-pg-btn[b-dwd1o72rgi] {
    min-width: 26px;
    height: 26px;
    padding: 0 6px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .12);
    border-radius: 5px;
    color: var(--color-ink);
    font-size: 12px;
    cursor: pointer;
}
.dg-pg-btn:hover:not(:disabled)[b-dwd1o72rgi] { border-color: var(--color-data); }
.dg-pg-btn:disabled[b-dwd1o72rgi] { opacity: .4; cursor: not-allowed; }
.dg-pg-input[b-dwd1o72rgi] {
    width: 54px;
    height: 26px;
    text-align: center;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .12);
    border-radius: 5px;
    color: var(--color-ink);
    font-size: 12px;
}
.dg-pg-of[b-dwd1o72rgi] { color: var(--color-ink-dim); }
.dg-pg-total[b-dwd1o72rgi] { margin-left: auto; color: var(--color-ink-section); }

/* Agrupamento */
.dg-groupby[b-dwd1o72rgi] { margin-left: 12px; font-size: 12px; color: var(--color-ink-section); }
.dg-groupby select[b-dwd1o72rgi] {
    margin-left: 6px; background: var(--color-field); color: var(--color-ink);
    border: 1px solid rgba(255, 255, 255, .12); border-radius: 4px; padding: 2px 6px; font-size: 12px;
}
tr.dg-group[b-dwd1o72rgi] { cursor: pointer; background: var(--color-panel-2); }
tr.dg-group td[b-dwd1o72rgi] {
    padding: 6px 10px; font-weight: 700; color: var(--color-ink);
    border-top: 1px solid rgba(255, 255, 255, .08);
}
.dg-group-caret[b-dwd1o72rgi] { color: var(--color-ink-section); margin-right: 4px; }
.dg-group-count[b-dwd1o72rgi] { margin-left: 8px; font-weight: 600; color: var(--color-ink-section); }
.dg-group-count[b-dwd1o72rgi]::before { content: "· "; }

/* Paginador das linhas de um grupo: recuado, discreto — é subordinado ao paginador global do rodapé.
   Mesmo fundo que .dg-group (--color-panel-2), para as duas linhas ficarem visualmente da mesma família. */
.dg-group-pager td[b-dwd1o72rgi] {
    padding: 4px 8px 4px 28px;
    background: var(--color-panel-2);
    border-top: 1px dashed rgba(255, 255, 255, .12);
}

.dg-group-pager .dg-pg-of[b-dwd1o72rgi],
.dg-group-pager .dg-pg-total[b-dwd1o72rgi] {
    font-size: 0.85em;
    opacity: 0.75;
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
#blazor-error-ui[b-t2ku09w999] {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-t2ku09w999] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-spcuyls1ff],
.components-reconnect-repeated-attempt-visible[b-spcuyls1ff],
.components-reconnect-failed-visible[b-spcuyls1ff],
.components-pause-visible[b-spcuyls1ff],
.components-resume-failed-visible[b-spcuyls1ff],
.components-rejoining-animation[b-spcuyls1ff] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-spcuyls1ff],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-spcuyls1ff],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-spcuyls1ff],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-spcuyls1ff],
#components-reconnect-modal.components-reconnect-retrying[b-spcuyls1ff],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-spcuyls1ff],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-spcuyls1ff],
#components-reconnect-modal.components-reconnect-failed[b-spcuyls1ff],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-spcuyls1ff] {
    display: block;
}


#components-reconnect-modal[b-spcuyls1ff] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-spcuyls1ff 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-spcuyls1ff 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-spcuyls1ff 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-spcuyls1ff]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-spcuyls1ff 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-spcuyls1ff {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-spcuyls1ff {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-spcuyls1ff {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-spcuyls1ff] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-spcuyls1ff] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-spcuyls1ff] {
    border: 0;
    background-color: #6b9ed2;
    color: white;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-spcuyls1ff] {
        background-color: #3b6ea2;
    }

    #components-reconnect-modal button:active[b-spcuyls1ff] {
        background-color: #6b9ed2;
    }

.components-rejoining-animation[b-spcuyls1ff] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-spcuyls1ff] {
        position: absolute;
        border: 3px solid #0087ff;
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-spcuyls1ff 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-spcuyls1ff] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-spcuyls1ff {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/ManualModal.razor.rz.scp.css */
/* Molde do .modal-backdrop/.modal-card/.modal-head/.modal-close (AboutModal.razor.css); o isolamento de
   CSS do Blazor é por componente, por isso repete-se aqui em vez de partilhar. Ao contrário do "Sobre",
   este card é largo — tem índice e imagens. */
.modal-backdrop[b-ki1c0irgz5] {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, .55);
}

.modal-card[b-ki1c0irgz5] {
    width: 900px;
    max-width: 92vw;
    max-height: 88vh;
    display: flex;
    flex-direction: column;
    box-sizing: border-box;
    background: var(--color-panel);
    border-radius: 10px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, .5);
    color: var(--color-ink);
    overflow: hidden;
}

.modal-head[b-ki1c0irgz5] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 18px;
    border-bottom: 1px solid rgba(255, 255, 255, .08);
}

.modal-head h3[b-ki1c0irgz5] {
    margin: 0;
    font-size: 1rem;
}

.modal-close[b-ki1c0irgz5] {
    background: none;
    border: 0;
    color: inherit;
    font-size: 1.4rem;
    line-height: 1;
    cursor: pointer;
    opacity: .7;
}

.modal-close:hover[b-ki1c0irgz5] {
    opacity: 1;
}

.manual-body[b-ki1c0irgz5] {
    display: flex;
    gap: 18px;
    padding: 16px 18px;
    overflow: hidden;
    flex: 1;
}

.manual-indice[b-ki1c0irgz5] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    flex: 0 0 190px;
}

.manual-indice-item[b-ki1c0irgz5] {
    text-align: left;
    background: none;
    border: 0;
    border-left: 3px solid transparent;
    padding: 7px 10px;
    color: inherit;
    opacity: .65;
    cursor: pointer;
    font-size: .86rem;
    border-radius: 0 4px 4px 0;
}

.manual-indice-item:hover[b-ki1c0irgz5] {
    opacity: 1;
    background: rgba(255, 255, 255, .05);
}

.manual-indice-item.is-actual[b-ki1c0irgz5] {
    opacity: 1;
    font-weight: 600;
    border-left-color: var(--color-accent, #2ecc9b);
    background: rgba(255, 255, 255, .06);
}

.manual-conteudo[b-ki1c0irgz5] {
    flex: 1;
    overflow-y: auto;
    padding-right: 6px;
    font-size: .9rem;
    line-height: 1.55;
}

.manual-conteudo p[b-ki1c0irgz5] {
    margin: 0 0 10px;
}

.manual-passo[b-ki1c0irgz5] {
    padding-left: 14px;
}

.manual-aviso[b-ki1c0irgz5] {
    background: rgba(180, 83, 9, .12);
    border-left: 3px solid #b45309;
    padding: 10px 12px;
    margin: 0 0 12px;
    border-radius: 0 4px 4px 0;
}

.manual-figura[b-ki1c0irgz5] {
    margin: 0 0 16px;
}

/* O max-height vem inline, do altura_mm de cada figura (ver ManualModal.razor).
   O width:auto e preciso para a altura mandar sem deformar a imagem. */
.manual-figura img[b-ki1c0irgz5] {
    display: block;
    max-width: 100%;
    width: auto;
    border-radius: 6px;
}

.manual-figura figcaption[b-ki1c0irgz5] {
    margin-top: 5px;
    font-size: .8rem;
    font-style: italic;
    opacity: .65;
}

.manual-nav[b-ki1c0irgz5] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 12px 18px;
    border-top: 1px solid rgba(255, 255, 255, .08);
}

.manual-nav button[b-ki1c0irgz5] {
    background: rgba(255, 255, 255, .06);
    border: 1px solid rgba(255, 255, 255, .12);
    color: inherit;
    padding: 7px 14px;
    border-radius: 6px;
    cursor: pointer;
    font-size: .85rem;
}

.manual-nav button:hover:not(:disabled)[b-ki1c0irgz5] {
    background: rgba(255, 255, 255, .12);
}

.manual-nav button:disabled[b-ki1c0irgz5] {
    opacity: .35;
    cursor: default;
}

.manual-pos[b-ki1c0irgz5] {
    font-size: .8rem;
    opacity: .6;
}

/* Abaixo de 720 px o índice passa para cima do conteúdo — duas colunas nesta largura
   deixavam ambas ilegíveis. */
@media (max-width: 720px) {
    .manual-body[b-ki1c0irgz5] {
        flex-direction: column;
        gap: 12px;
    }

    .manual-indice[b-ki1c0irgz5] {
        flex: 0 0 auto;
        flex-direction: row;
        flex-wrap: wrap;
        gap: 6px;
    }

    .manual-indice-item[b-ki1c0irgz5] {
        border-left: 0;
        border-bottom: 2px solid transparent;
        border-radius: 4px;
        padding: 5px 8px;
    }

    .manual-indice-item.is-actual[b-ki1c0irgz5] {
        border-left: 0;
        border-bottom-color: var(--color-accent, #2ecc9b);
    }
}
/* /Components/Pages/Costuras.razor.rz.scp.css */
/* /costuras — a página é um SPIKE e está desenhada com estilos inline; este ficheiro faz uma coisa só:
   dar aos botões aspeto de botão. Sem ele os controlos ficam indistinguíveis do texto corrido — a
   página tem ~20 botões seguidos numa linha e não se percebe onde é que se pode carregar.

   Porquê aqui e não inline: é o padrão das outras páginas (Ingest/Login/Processamento/Revisao/Rotas
   têm todas .razor.css) e o CSS com âmbito não colide com quem esteja a editar o .razor.

   Fundo claro de propósito: esta página tem fundo branco, ao contrário das do tema escuro, por isso
   os tokens --color-panel/ink não servem aqui. A referência é o botão ✕ que já existia na página
   (cinzento claro, cantos 4px). */

/* ─── AGRUPAMENTO DOS CONTROLOS (13/08/2026) ──────────────────────────────────────────────────
   Os knobs cresceram um a um até serem oito numa linha só, a embrulhar ao acaso: o "forçar
   ON/OFF" acabou a partilhar linha com o "regra do corrigido" e com o botão de correr, o que
   sugere um parentesco que não existe. Pior, escondia o parentesco que EXISTE — a quebra por
   tempo e o salto mínimo são UMA regra com duas condições, e apareciam como campos soltos.

   Os grupos são por PERGUNTA, não por tipo de controlo:
     onde     — que pedaço do país se constrói
     entrada  — o que o construtor chega a ver (é aqui que a quebra vive, junta)
     comparar — o que se põe em cima do quê, e correr. */

.grupos[b-6di4c80jda] { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 8px; align-items: stretch; }

.grupos fieldset[b-6di4c80jda] {
    border: 1px solid #c8cfd6;
    border-radius: 6px;
    padding: 4px 10px 8px;
    margin: 0;
    min-width: 0;   /* senão o fieldset recusa encolher e rebenta o wrap */
}

.grupos legend[b-6di4c80jda] {
    font-size: .68rem;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: #6a1b9a;
    padding: 0 5px;
}

/* Uma linha de controlos dentro de um grupo. */
.grupos .linha[b-6di4c80jda] { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; }
.grupos .linha + .linha[b-6di4c80jda] { margin-top: 6px; }

/* Rótulo por cima do campo — o padrão que a página já usava, agora sem o repetir inline. */
.campo[b-6di4c80jda] { display: flex; flex-direction: column; font-size: .72rem; color: #555; }

/* Caixa de verificação com o texto ao lado. */
.check[b-6di4c80jda] { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; font-size: .8rem; }

/* A quebra é UMA regra com DUAS condições — a chaveta di-lo sem ser preciso ler o tooltip. */
.par[b-6di4c80jda] { display: flex; gap: 8px; align-items: flex-end; padding-left: 7px; border-left: 2px solid #b39ddb; }
.par > .campo input[b-6di4c80jda] { width: 6.5em; }

/* O botão que corre a comparação é o destino de toda esta linha: não pode parecer mais um. */
button.principal[b-6di4c80jda] { font-weight: 700; background: #ede7f6; border-color: #9575cd; }
button.principal:hover:not(:disabled)[b-6di4c80jda] { background: #d1c4e9; border-color: #7e57c2; }

button[b-6di4c80jda] {
    font: inherit;
    color: #1f2328;
    background: #f1f3f5;
    border: 1px solid #b9c0c8;
    border-radius: 5px;
    padding: 3px 10px;
    cursor: pointer;
    /* os botões vêm em linhas compridas e coladas ao texto — sem isto encavalitam-se */
    margin: 2px 3px;
    line-height: 1.45;
}

button:hover:not(:disabled)[b-6di4c80jda] {
    background: #e4e8ec;
    border-color: #8c96a1;
}

button:active:not(:disabled)[b-6di4c80jda] {
    background: #d7dce1;
    /* afunda 1px: confirma o clique sem animação */
    transform: translateY(1px);
}

/* Vários botões desta página desativam-se durante uma construção longa (`disabled="@busy"`).
   Tem de ver-se à distância, senão carrega-se e parece que a página não responde. */
button:disabled[b-6di4c80jda] {
    color: #8a9099;
    background: #f6f7f8;
    border-color: #dde1e5;
    cursor: not-allowed;
}

button:focus-visible[b-6di4c80jda] {
    outline: 2px solid #0969da;
    outline-offset: 1px;
}
/* /Components/Pages/Ingest.razor.rz.scp.css */
/* Restyle da /ingest com a linguagem visual do /rotas (tokens do G10, DEC-56). Só apresentação.
   Scoped ao componente Ingest — os seletores de elemento (h2, select, button, table…) só afetam esta
   página. Tokens consumidos por var(--color-*), como no Rotas.razor.css.
   NOTA de scoping: o <InputFile> (uploads PBF/POIs) é componente filho — o seu input[type=file] não
   herda o scope desta página, por isso os file inputs usam ::deep (apanha os do InputFile E o plano). */

/* Página: fundo escuro full-bleed. O .ingest só dá o fundo; o .ingest-inner é a coluna centrada. */
.ingest[b-sfnomokvcw] {
    min-height: 100%;
    width: 100%;
    box-sizing: border-box;
    background: var(--color-panel-2);
    color: var(--color-ink);
}

.ingest-inner[b-sfnomokvcw] {
    max-width: 820px;
    margin: 0 auto;
    padding: 28px 20px 48px;
}

/* Cabeçalho */
.ingest-header[b-sfnomokvcw] {
    margin-bottom: 20px;
}

.overline[b-sfnomokvcw] {
    margin: 0 0 4px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--color-data);
}

.ingest h1[b-sfnomokvcw] {
    margin: 0 0 6px;
    font-size: 24px;
    font-weight: 700;
    color: var(--color-ink);
}

.ingest-header p[b-sfnomokvcw] {
    margin: 0;
    font-size: 13px;
    line-height: 1.5;
    color: var(--color-ink-dim);
}

/* Secções = cartões escuros */
.session-picker[b-sfnomokvcw],
.upload-row[b-sfnomokvcw],
.pbf-import[b-sfnomokvcw],
.poi-import[b-sfnomokvcw],
.tiles-package[b-sfnomokvcw],
.sessions-list[b-sfnomokvcw] {
    box-sizing: border-box;
    margin-bottom: 16px;
    padding: 16px 18px;
    background: var(--color-panel);
    border-radius: 8px;
    box-shadow: 0 6px 18px rgba(0, 0, 0, .35);
}

.ingest h2[b-sfnomokvcw] {
    margin: 0 0 10px;
    font-size: 16px;
    font-weight: 700;
    color: var(--color-ink);
}

.ingest h3[b-sfnomokvcw] {
    margin: 14px 0 6px;
    font-size: 13px;
    font-weight: 700;
    color: var(--color-ink);
}

.ingest p[b-sfnomokvcw] {
    font-size: 13px;
    line-height: 1.5;
    color: var(--color-ink-dim);
}

.ingest em[b-sfnomokvcw] {
    color: var(--color-ink-dim);
}

.ingest strong[b-sfnomokvcw] {
    color: var(--color-ink);
}

/* Grupos de controlo em linha (picker de upload; nova sessão) */
.upload-row[b-sfnomokvcw],
.new-session[b-sfnomokvcw] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
}

.new-session[b-sfnomokvcw] {
    margin-top: 10px;
}

.poi-upload[b-sfnomokvcw] {
    margin-top: 12px;
}

/* Controlos de markup próprio: select + input de texto (o file input vai por ::deep, abaixo) */
.ingest select[b-sfnomokvcw],
.ingest input[type="text"][b-sfnomokvcw] {
    box-sizing: border-box;
    max-width: 100%;
    height: 34px;
    padding: 0 10px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 4px;
    color: var(--color-ink);
    font-size: 13px;
}

.ingest select[b-sfnomokvcw] {
    min-width: 260px;
    appearance: none;
    padding-right: 28px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%237c8da0' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 10px center;
    background-size: 10px;
}

.ingest input[type="text"][b-sfnomokvcw] {
    min-width: 220px;
}

.ingest select:focus[b-sfnomokvcw],
.ingest input[type="text"]:focus[b-sfnomokvcw] {
    outline: none;
    border-color: var(--color-data);
}

.ingest input[type="text"][b-sfnomokvcw]::placeholder {
    color: var(--color-ink-dim);
}

/* File inputs (plano E os do <InputFile> filho) — via ::deep para atravessar a fronteira do componente */
.ingest[b-sfnomokvcw]  input[type="file"] {
    box-sizing: border-box;
    max-width: 100%;
    padding: 6px 10px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 4px;
    color: var(--color-ink);
    font-size: 13px;
}

.ingest[b-sfnomokvcw]  input[type="file"]:focus {
    outline: none;
    border-color: var(--color-data);
}

.ingest[b-sfnomokvcw]  input[type="file"]::file-selector-button {
    margin-right: 10px;
    padding: 5px 12px;
    background: var(--color-panel-2);
    border: 1px solid rgba(255, 255, 255, .12);
    border-radius: 4px;
    color: var(--color-ink);
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
}

.ingest[b-sfnomokvcw]  input[type="file"]::file-selector-button:hover {
    border-color: var(--color-data);
    color: var(--color-data);
}

/* Botões primários (Criar sessão, Carregar) */
.ingest button[b-sfnomokvcw] {
    padding: 8px 16px;
    background: var(--color-cta);
    color: #fff;
    border: none;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    transition: filter .15s ease;
}

.ingest button:hover:not(:disabled)[b-sfnomokvcw] {
    filter: brightness(1.08);
}

.ingest button:disabled[b-sfnomokvcw] {
    background: var(--color-field);
    color: var(--color-ink-dim);
    cursor: not-allowed;
    opacity: .7;
}

/* Botão Apagar (tabela de sessões): discreto, hover vermelho */
.sessions-list button[b-sfnomokvcw] {
    padding: 4px 12px;
    background: transparent;
    border: 1px solid rgba(255, 255, 255, .15);
    color: var(--color-ink-dim);
    font-weight: 600;
}

.sessions-list button:hover:not(:disabled)[b-sfnomokvcw] {
    filter: none;
    border-color: var(--color-error);
    color: var(--color-error);
}

/* Painel de progresso: fundo mais escuro dentro do cartão */
.progress-panel[b-sfnomokvcw] {
    box-sizing: border-box;
    margin: 12px 0 16px;
    padding: 14px 16px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .06);
    border-radius: 6px;
}

.progress-panel h2[b-sfnomokvcw],
.progress-panel h3[b-sfnomokvcw] {
    margin-top: 0;
}

.ingest progress[b-sfnomokvcw] {
    width: 100%;
    height: 10px;
    accent-color: var(--color-data);
}

/* Estados */
.notice[b-sfnomokvcw] {
    color: var(--color-data);
    font-weight: 600;
}

.err[b-sfnomokvcw] {
    color: var(--color-error);
    font-weight: 600;
}

.stalled[b-sfnomokvcw] {
    margin-left: 6px;
    padding: 2px 6px;
    border-radius: 4px;
    background: var(--color-warn);
    color: #000;
    font-weight: 600;
}

/* Tabelas (sessões existentes + ficheiros do job) */
.sessions-list table[b-sfnomokvcw],
.ingest-files[b-sfnomokvcw] {
    width: 100%;
    border-collapse: collapse;
    margin-top: 8px;
}

.sessions-list th[b-sfnomokvcw],
.ingest-files th[b-sfnomokvcw] {
    padding: 8px 10px;
    text-align: left;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--color-ink-section);
    border-bottom: 1px solid rgba(255, 255, 255, .12);
}

.sessions-list td[b-sfnomokvcw],
.ingest-files td[b-sfnomokvcw] {
    padding: 8px 10px;
    font-size: 13px;
    color: var(--color-ink);
    border-bottom: 1px solid rgba(255, 255, 255, .08);
}

/* Downloads do Pacote offline + código inline */
.tiles-package a[b-sfnomokvcw] {
    color: var(--color-data);
    font-weight: 600;
    text-decoration: none;
}

.tiles-package a:hover[b-sfnomokvcw] {
    text-decoration: underline;
}

.ingest code[b-sfnomokvcw] {
    padding: 1px 6px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 4px;
    font-size: 12px;
    color: var(--color-ink);
}

/* Zona do botão "Gerar tiles" na secção Basemap vetorial */
.tile-gen[b-sfnomokvcw] {
    margin-top: 12px;
}
/* /Components/Pages/Login.razor.rz.scp.css */
/* Ecrã de login: cartão escuro centrado, mesma linguagem do painel da /rotas (molde Mass Viewer). */
.login[b-g0px2llfhf] {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
    box-sizing: border-box;
    padding: 24px;
    /* Fundo: picada angolana ao pôr do sol (jeeps ao longe). Mutado por um tint navy da marca
       (--color-panel-2) + vinheta radial, para o cartão escuro, o wordmark teal e o CTA verde
       continuarem a dominar — o fundo é atmosfera, não protagonista. */
    background-color: var(--color-panel-2); /* fallback enquanto a imagem carrega */
    /* camadas (topo→base): dot-screen (trama fina, molde do QTrack) · vinheta · tint navy · foto */
    background-image:
        url("/img/login-dots.png"),
        radial-gradient(115% 130% at 50% 42%, rgba(9, 13, 20, 0) 30%, rgba(9, 13, 20, .45) 78%, rgba(6, 9, 14, .78) 100%),
        linear-gradient(180deg, rgba(16, 22, 33, .55) 0%, rgba(16, 22, 33, .32) 45%, rgba(11, 15, 23, .72) 100%),
        url("/img/login-bg.jpg");
    background-repeat: repeat, no-repeat, no-repeat, no-repeat;
    background-position: 0 0, center, center, center;
    background-size: auto, cover, cover, cover;
}

.login-card[b-g0px2llfhf] {
    width: 100%;
    max-width: 340px;
    box-sizing: border-box;
    padding: 28px 24px;
    background: var(--color-panel);
    border: 1px solid rgba(255, 255, 255, .07);
    border-radius: 8px;
    /* sombra mais ampla: o cartão flutua sobre a foto, não sobre uma cor lisa */
    box-shadow: 0 24px 60px rgba(0, 0, 0, .55), 0 4px 14px rgba(0, 0, 0, .40);
}

/* Logótipo (Lockup B): marca (estende o favicon) à esquerda de ANGOLA / PICADA MAPS. */
.login-brand[b-g0px2llfhf] {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 0 0 18px;
}
.brand-mark[b-g0px2llfhf] {
    display: block;
    flex: 0 0 auto;
}
.brand-words[b-g0px2llfhf] {
    display: flex;
    flex-direction: column;
    line-height: 1;
}
.brand-over[b-g0px2llfhf] {
    font-size: 10px;
    font-weight: 800;
    letter-spacing: .34em;
    text-transform: uppercase;
    color: var(--color-data);
    margin-bottom: 5px;
}
.brand-name[b-g0px2llfhf] {
    font-size: 22px;
    font-weight: 800;
    letter-spacing: .01em;
    color: var(--color-ink);
}

.login-error[b-g0px2llfhf] {
    margin: 0 0 14px;
    padding: 8px 10px;
    font-size: 12px;
    line-height: 1.4;
    color: var(--color-error);
    background: rgba(255, 90, 95, .1);
    border: 1px solid rgba(255, 90, 95, .4);
    border-radius: 6px;
}

.login-form[b-g0px2llfhf] {
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.login-field span[b-g0px2llfhf] {
    display: block;
    margin-bottom: 6px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}

.login-field input[b-g0px2llfhf] {
    display: block;
    box-sizing: border-box;
    width: 100%;
    height: 36px;
    padding: 0 10px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 4px;
    color: var(--color-ink);
    font-size: 13px;
}
.login-field input:focus[b-g0px2llfhf] {
    outline: none;
    border-color: var(--color-data);
}

.login-btn[b-g0px2llfhf] {
    margin-top: 4px;
    padding: 11px;
    background: var(--color-cta);
    color: #fff;
    border: none;
    border-radius: 6px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    transition: filter .15s ease;
}
.login-btn:hover[b-g0px2llfhf] {
    filter: brightness(1.08);
}

/* Divisor "ou" entre o form de password e o login Google. */
.login-or[b-g0px2llfhf] {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 16px 0;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}
.login-or[b-g0px2llfhf]::before,
.login-or[b-g0px2llfhf]::after {
    content: "";
    flex: 1;
    height: 1px;
    background: rgba(255, 255, 255, .12);
}

/* Botão "Entrar com Google": fundo branco + texto escuro (marca Google), contrasta com o CTA teal. */
.login-google[b-g0px2llfhf] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    height: 38px;
    background: #fff;
    color: #1f1f1f;
    border: 1px solid rgba(0, 0, 0, .15);
    border-radius: 6px;
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    transition: filter .15s ease;
}
.login-google:hover[b-g0px2llfhf] { filter: brightness(.97); }
.login-google .g-ico[b-g0px2llfhf] { flex: 0 0 auto; }
/* /Components/Pages/Nodificacao.razor.rz.scp.css */
/* /nodificacao — bancada da nodificação.
   Fundo claro como a /costuras (as duas são bancadas de diagnóstico, não fazem parte do tema escuro).

   O layout foi desenhado de raiz com a lição que a /costuras só aprendeu à força: os controlos
   agrupam-se pela PERGUNTA que respondem, e as camadas dizem quantos elementos desenham. Uma linha
   única com todos os knobs embrulha ao acaso e sugere parentescos que não existem. */

.titulo[b-ggrnctkcrs] { font-size: 1.15rem; margin: 0 0 2px; }

.intro[b-ggrnctkcrs] { margin: 0 0 10px; max-width: 74em; font-size: .85rem; color: #444; line-height: 1.5; }

/* ─── grupos de controlos ─── */
.grupos[b-ggrnctkcrs] { display: flex; gap: 10px; flex-wrap: wrap; align-items: stretch; }

.grupos fieldset[b-ggrnctkcrs] {
    border: 1px solid #c8cfd6;
    border-radius: 6px;
    padding: 4px 10px 8px;
    margin: 0;
    min-width: 0;   /* senão o fieldset recusa encolher e rebenta o wrap */
}

.grupos legend[b-ggrnctkcrs] {
    font-size: .68rem;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: #6a1b9a;
    padding: 0 5px;
}

.linha[b-ggrnctkcrs] { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; }
.linha + .linha[b-ggrnctkcrs] { margin-top: 6px; }
.presets[b-ggrnctkcrs] { margin-top: 6px; }

.campo[b-ggrnctkcrs] { display: flex; flex-direction: column; font-size: .72rem; color: #555; }
.check[b-ggrnctkcrs] { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; font-size: .8rem; }
.mono[b-ggrnctkcrs] { font-family: monospace; font-size: .85rem; }

/* ─── botões ─── */
button[b-ggrnctkcrs] {
    font: inherit;
    color: #1f2328;
    background: #f1f3f5;
    border: 1px solid #b9c0c8;
    border-radius: 5px;
    padding: 3px 10px;
    cursor: pointer;
    margin: 2px 3px 2px 0;
    line-height: 1.45;
}
button:hover:not(:disabled)[b-ggrnctkcrs] { background: #e4e8ec; border-color: #8c96a1; }
button:active:not(:disabled)[b-ggrnctkcrs] { background: #d7dce1; transform: translateY(1px); }
button:disabled[b-ggrnctkcrs] { color: #8a9099; background: #f6f7f8; border-color: #dde1e5; cursor: not-allowed; }
button:focus-visible[b-ggrnctkcrs] { outline: 2px solid #0969da; outline-offset: 1px; }

/* O botão que corre é o destino de tudo o que está acima: não pode parecer mais um preset. */
button.principal[b-ggrnctkcrs] { font-weight: 700; background: #ede7f6; border-color: #9575cd; }
button.principal:hover:not(:disabled)[b-ggrnctkcrs] { background: #d1c4e9; border-color: #7e57c2; }

/* ─── resultados ─── */
.aviso[b-ggrnctkcrs] { margin: 8px 0 0; color: #b71c1c; font-size: .8rem; font-weight: 700; }

.nums[b-ggrnctkcrs] {
    margin: 8px 0 0;
    font: 12px/1.5 monospace;
    background: #fff;
    border: 1px solid #ddd;
    border-radius: 4px;
    padding: 6px 8px;
    white-space: pre-wrap;
    max-width: 74em;
}

/* ─── camadas ─── */
.camadas[b-ggrnctkcrs] {
    display: flex;
    gap: 16px;
    align-items: center;
    flex-wrap: wrap;
    margin: 10px 0 6px;
    padding: 5px 8px;
    background: #f7f8fa;
    border: 1px solid #e2e6ea;
    border-radius: 5px;
}

.camadas .cab[b-ggrnctkcrs] {
    font-size: .68rem;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: #6a1b9a;
}

/* A amostra de cor tem de casar com o que o map.js pinta — se divergirem, a legenda mente. */
.amostra[b-ggrnctkcrs] { display: inline-block; width: 20px; height: 4px; border-radius: 2px; }
.amostra.antes[b-ggrnctkcrs] { background: #ffea00; height: 7px; }
.amostra.depois[b-ggrnctkcrs] { background: #00e5ff; }
/* Branca com contorno escuro, como no mapa — a legenda tem de mostrar o que se vê lá. */
.amostra.estradas[b-ggrnctkcrs] { background: #fff; border: 1.5px solid #0d0d0d; height: 6px; }
/* Tracejado laranja: o fantasma do que saiu -- nao existe no resultado. */
.amostra.descartadas[b-ggrnctkcrs] { background: repeating-linear-gradient(90deg,#ff6d00 0 5px,transparent 5px 8px); height: 3px; }
/* Azul e mais pequeno: sao o NORMAL, nao podem competir com os alarmes pela atencao. */
.amostra.ligadas[b-ggrnctkcrs] { width: 9px; height: 9px; border-radius: 50%; background: #2962ff; border: 1px solid #0d1b4b; }
.amostra.soltas[b-ggrnctkcrs] { width: 11px; height: 11px; border-radius: 50%; background: #ff1744; border: 1.5px solid #000; }
/* Verde: os MESMOS pontos que o conserto resolve. Ver a cor trocar e a prova visual. */
.amostra.splits[b-ggrnctkcrs] { width: 11px; height: 11px; border-radius: 50%; background: #00e676; border: 1.5px solid #000; }

/* O grupo do conserto distingue-se dos knobs de producao: aqueles descrevem o que o pipeline FAZ,
   este e uma proposta POR PROVAR. */
.grupos fieldset.conserto[b-ggrnctkcrs] { border-color: #9575cd; border-style: dashed; background: #faf7ff; }
.grupos fieldset.conserto legend[b-ggrnctkcrs] { color: #4527a0; }

.mapa[b-ggrnctkcrs] { height: 74vh; min-height: 420px; border: 1px solid #cfd8dc; border-radius: 6px; }
/* /Components/Pages/Processamento.razor.rz.scp.css */
/* Layout lado-a-lado (mapa + painel de controlo), molde do wireframe aprovado
   (.superpowers/brainstorm/.../layout-v3.html): diferente do /rotas (cartão flutuante sobre mapa
   full-bleed) porque esta página é um painel de controlo/acompanhamento, não uma busca pontual. */
.proc[b-kfvrum5ad4] {
    display: flex;
    height: 100%;
    width: 100%;
    overflow: hidden;

    /* Tokens de cor por ESTADO (texto legível claro + fundo escuro tonal), usados nos badges e na legenda.
       O ...-dot é a cor sólida do ponto da legenda (= CELL_COLORS do map.js, que pinta a grelha).
       Antes cada estado estava hardcoded e repetido; o por_fazer tinha texto escuro (#5b6473) sobre cinza
       — ~1.9:1, ilegível. Aqui o texto é sempre claro sobre fundo escuro (≥ ~7:1). */
    --st-feito-fg: #8be7b0;  --st-feito-bg: #0f5132;              --st-feito-dot: #2ecc71;
    --st-proc-fg:  #e7d18b;  --st-proc-bg:  #2a230e;              --st-proc-dot:  #f1c40f;
    --st-fila-fg:  #9cc4ec;  --st-fila-bg:  #0e1a2a;              --st-fila-dot:  #2f6fed;
    --st-fazer-fg: #c2cad6;  --st-fazer-bg: rgba(255,255,255,.08); --st-fazer-dot: #5b6473;
    --st-erro-fg:  #e78b8b;  --st-erro-bg:  #2a0e0e;              --st-erro-dot:  #e74c3c;
}

.proc-map[b-kfvrum5ad4] {
    flex: 1;
    position: relative;
}

.proc-map-canvas[b-kfvrum5ad4] {
    position: absolute;
    inset: 0;
}

.proc-panel[b-kfvrum5ad4] {
    width: 290px;
    flex-shrink: 0;
    box-sizing: border-box;
    padding: 16px;
    overflow-y: auto;
    background: var(--color-panel);
    border-right: 1px solid rgba(255, 255, 255, .08);
}

.overline[b-kfvrum5ad4] {
    margin: 0 0 4px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--color-data);
}

.proc-panel h2[b-kfvrum5ad4] {
    margin: 0 0 12px;
    font-size: 19px;
    font-weight: 700;
    color: var(--color-ink);
}

.hint[b-kfvrum5ad4] {
    margin: 4px 0;
    font-size: 12px;
    line-height: 1.4;
    color: var(--color-ink-dim);
}

/* ---- Controlo + ETA ------------------------------------------------------------ */
.ctrl[b-kfvrum5ad4] {
    background: var(--color-panel-2);
    border: 1px solid rgba(255, 255, 255, .08);
    border-radius: 6px;
    padding: 10px;
    margin-bottom: 16px;
}

.ctrl .run[b-kfvrum5ad4] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 4px;
    font-size: 12px;
    font-weight: 700;
    color: #8be7b0;
}

.ctrl .run.paused[b-kfvrum5ad4] {
    color: var(--color-warn);
}

.ctrl .run .dot[b-kfvrum5ad4] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #2ecc71;
    box-shadow: 0 0 6px #2ecc71;
}

.eta[b-kfvrum5ad4] {
    margin: 4px 0 2px;
    font-size: 19px;
    font-weight: 700;
    line-height: 1.1;
    color: var(--color-ink);
}

.bar[b-kfvrum5ad4] {
    height: 6px;
    margin: 5px 0 4px;
    background: rgba(255, 255, 255, .08);
    border-radius: 3px;
    overflow: hidden;
}

.bar > i[b-kfvrum5ad4] {
    display: block;
    height: 100%;
    background: var(--color-cta);
    transition: width .3s ease;
}

/* 2ª barra (progresso do sub-passo) — mais fina e em teal, secundária face à geral (verde). */
.bar.sub[b-kfvrum5ad4] {
    height: 4px;
    margin: 2px 0 3px;
}

.bar.sub > i[b-kfvrum5ad4] {
    background: var(--color-data);
}

/* Os <small> do bloco de publicação (progresso global + "x% deste passo") não herdavam cor → ficavam a
   preto do UA sobre o painel escuro (ilegível). Dá-lhes o mesmo token de texto secundário do .ctrl small. */
.publish small[b-kfvrum5ad4] {
    color: var(--color-ink-section);
}

.ctrl small[b-kfvrum5ad4] {
    display: block;
    font-size: 10px;
    color: var(--color-ink-section);
}

/* ---- Stepper do paralelismo (só idle/pausado) ---------------------------------- */
.par[b-kfvrum5ad4] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 8px;
}

.par-lbl[b-kfvrum5ad4] {
    font-size: 11px;
    font-weight: 700;
    color: var(--color-ink-dim);
}

.par-step[b-kfvrum5ad4] {
    display: flex;
    align-items: center;
    gap: 2px;
    margin-left: auto;
}

.par-b[b-kfvrum5ad4] {
    width: 22px;
    height: 22px;
    padding: 0;
    background: var(--color-panel);
    border: 1px solid rgba(255, 255, 255, .15);
    border-radius: 4px;
    color: var(--color-ink);
    font-size: 14px;
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
}

.par-b:hover:not(:disabled)[b-kfvrum5ad4] {
    filter: brightness(1.3);
}

.par-b:disabled[b-kfvrum5ad4] {
    opacity: .35;
    cursor: default;
}

.par-n[b-kfvrum5ad4] {
    min-width: 20px;
    text-align: center;
    font-size: 13px;
    font-weight: 700;
    color: var(--color-ink);
}

.par-max[b-kfvrum5ad4] {
    font-size: 10px;
    color: var(--color-ink-section);
}

.btns[b-kfvrum5ad4] {
    display: flex;
    gap: 6px;
    margin-top: 8px;
}

.b[b-kfvrum5ad4] {
    flex: 1;
    text-align: center;
    padding: 7px 0;
    background: none;
    border: 1px solid;
    border-radius: 5px;
    font-size: 11px;
    font-weight: 700;
    cursor: pointer;
}

.b.start[b-kfvrum5ad4] {
    flex: 1 1 100%;
    background: #0f5132;
    border-color: #1f6b3f;
    color: #8be7b0;
}

.b.resume[b-kfvrum5ad4] {
    background: #0f5132;
    border-color: #1f6b3f;
    color: #8be7b0;
}

.b.pause[b-kfvrum5ad4] {
    background: #2a230e;
    border-color: #6b5a1f;
    color: #e7d18b;
}

.b.stop[b-kfvrum5ad4] {
    background: #2a0e0e;
    border-color: #6b1f1f;
    color: #e78b8b;
}

.b:hover[b-kfvrum5ad4] {
    filter: brightness(1.15);
}

/* ---- Detalhe da célula selecionada ---------------------------------------------- */
.selhdr[b-kfvrum5ad4] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin: 4px 0 8px;
}

.selhdr h4[b-kfvrum5ad4] {
    margin: 0;
    font-size: 13px;
    color: var(--color-ink);
}

.badge[b-kfvrum5ad4] {
    padding: 2px 8px;
    background: rgba(255, 255, 255, .08);
    border-radius: 10px;
    color: var(--color-ink-dim);
    font-size: 10px;
    font-weight: 700;
}

.badge.por_fazer[b-kfvrum5ad4] { background: var(--st-fazer-bg); color: var(--st-fazer-fg); }
.badge.feito[b-kfvrum5ad4] { background: var(--st-feito-bg); color: var(--st-feito-fg); }
.badge.erro[b-kfvrum5ad4] { background: var(--st-erro-bg); color: var(--st-erro-fg); }
.badge.a_processar[b-kfvrum5ad4] { background: var(--st-proc-bg); color: var(--st-proc-fg); }
.badge.na_fila[b-kfvrum5ad4] { background: var(--st-fila-bg); color: var(--st-fila-fg); }

.rows[b-kfvrum5ad4] {
    margin-bottom: 8px;
}

.rows .r[b-kfvrum5ad4] {
    display: flex;
    justify-content: space-between;
    padding: 4px 0;
    border-bottom: 1px dashed rgba(255, 255, 255, .08);
    font-size: 12px;
    color: var(--color-ink-section);
}

.rows .r b[b-kfvrum5ad4] {
    color: var(--color-ink);
    font-weight: 600;
}

.erro[b-kfvrum5ad4] {
    margin: 6px 0;
    font-size: 12px;
    color: var(--color-error);
}

.rbtn[b-kfvrum5ad4] {
    display: block;
    width: 100%;
    margin-top: 8px;
    padding: 8px 0;
    background: var(--color-panel);
    border: 1px solid rgba(63, 214, 196, .3);
    border-radius: 5px;
    color: var(--color-data);
    font-size: 11px;
    font-weight: 700;
    cursor: pointer;
}

.rbtn:hover[b-kfvrum5ad4] {
    filter: brightness(1.15);
}

/* ---- Legenda dos estados da grelha (cores = CELL_COLORS/cells-aviso do map.js) --------------- */
.proc-legend[b-kfvrum5ad4] {
    position: absolute;
    right: 12px;
    top: 12px;                    /* canto superior-direito — o único livre (zoom+atribuição no inf.-direito; basemap no inf.-esquerdo) */
    z-index: 5;
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 8px 10px;
    background: var(--color-panel);
    border: 1px solid rgba(255, 255, 255, .12);
    border-radius: 8px;
    box-shadow: 0 4px 14px rgba(0, 0, 0, .35);
    font-size: 12px;
}

.lg-item[b-kfvrum5ad4] {
    display: flex;
    align-items: center;
    gap: 5px;
    font-size: 10px;
    color: var(--color-ink-dim);
}

.lg-dot[b-kfvrum5ad4] {
    width: 9px;
    height: 9px;
    border-radius: 2px;
    flex-shrink: 0;
}

.lg-dot.por_fazer[b-kfvrum5ad4] { background: var(--st-fazer-dot); }
.lg-dot.na_fila[b-kfvrum5ad4] { background: var(--st-fila-dot); }
.lg-dot.a_processar[b-kfvrum5ad4] { background: var(--st-proc-dot); }
.lg-dot.feito[b-kfvrum5ad4] { background: var(--st-feito-dot); }
.lg-dot.erro[b-kfvrum5ad4] { background: var(--st-erro-dot); }

/* ---- Seleção múltipla por retângulo (Ctrl+arrasto) — bloco no fundo do painel ---------------- */
.multisel[b-kfvrum5ad4] {
    margin-top: 16px;
    padding-top: 12px;
    border-top: 1px solid rgba(255, 255, 255, .08);
}

.ms-help[b-kfvrum5ad4] {
    margin: 0;
    font-size: 12px;
    line-height: 1.5;
    color: var(--color-ink-dim);
}

.ms-help b[b-kfvrum5ad4] {
    color: var(--color-data);
    font-weight: 700;
}

.ms-count[b-kfvrum5ad4] {
    margin-bottom: 8px;
    font-size: 13px;
    font-weight: 700;
    color: #7fe9ff;
}

.ms-clear[b-kfvrum5ad4] {
    display: block;
    width: 100%;
    margin-top: 6px;
    padding: 6px 0;
    background: none;
    border: none;
    color: var(--color-ink-section);
    font-size: 11px;
    cursor: pointer;
    text-decoration: underline;
}

.ms-clear:hover[b-kfvrum5ad4] {
    color: var(--color-ink-dim);
}

/* ---- Publicação (fase 3) -------------------------------------------------------- */
.publish[b-kfvrum5ad4] {
    margin-bottom: 16px;
}

.publish .pub-run[b-kfvrum5ad4] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 6px;
    font-size: 12px;
    font-weight: 700;
    color: #8be7b0;
}

/* .dot só está definida como .ctrl .run .dot no bloco acima — o painel de publicação não é filho de
   .ctrl .run, por isso repete-se aqui o mesmo estilo (senão o indicador fica invisível). */
.publish .pub-run .dot[b-kfvrum5ad4] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #2ecc71;
    box-shadow: 0 0 6px #2ecc71;
}

.publish-btn[b-kfvrum5ad4] {
    width: 100%;
    margin-top: 2px;
    /* Azul "publicar" — ação de promoção, distinta do verde Iniciar / amarelo Pausar / vermelho Parar. */
    background: #12294a;
    border-color: #2a5599;
    color: #9cc2f0;
    font-weight: 700;
}

/* ---- Painéis "Último processamento" / "Última publicação" (reutilizam .selhdr/.rows/.r do detalhe) --- */
.proc-stats[b-kfvrum5ad4],
.pub-stats[b-kfvrum5ad4] {
    margin-bottom: 10px;
}

.pub-done[b-kfvrum5ad4] {
    margin: 6px 0 0;
    font-size: 12px;
    line-height: 1.4;
    color: #8be7b0;
}

.pub-done a[b-kfvrum5ad4] {
    color: var(--color-data);
}
/* /Components/Pages/Revisao.razor.rz.scp.css */
.rev[b-2lqdht8ha0] { display: flex; height: 100%; min-height: 0; background: var(--color-panel-2); color: var(--color-ink); }
.rev-list[b-2lqdht8ha0] { flex: 1 1 58%; min-width: 0; display: flex; flex-direction: column; padding: 12px; }
.rev-map-pane[b-2lqdht8ha0] { flex: 1 1 42%; min-width: 0; border-left: 1px solid rgba(255,255,255,.08); position: relative; }
.rev-sel[b-2lqdht8ha0], .rev-search[b-2lqdht8ha0] { background: var(--color-field); color: var(--color-ink); border: 1px solid rgba(255,255,255,.12); border-radius: 4px; padding: 4px 8px; font-size: 13px; }
.rev-search[b-2lqdht8ha0] { min-width: 180px; }
/* Faixa de seleção em lote: vive na toolbar, ao lado dos filtros. */
.rev-batch[b-2lqdht8ha0] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 0.9em;
}

.rev-batch-link[b-2lqdht8ha0] {
    background: none;
    border: none;
    padding: 0;
    color: var(--color-cta);
    text-decoration: underline;
    cursor: pointer;
    font: inherit;
}

.rev-batch-link:disabled[b-2lqdht8ha0] { opacity: .5; cursor: default; }

.rev-batch-done[b-2lqdht8ha0] { opacity: .8; }

/* Aviso de atividade de outros revisores: informativo, não compete com a faixa de seleção. */
.rev-live[b-2lqdht8ha0] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 0.9em;
    opacity: .85;
}
/* âmbar: a lista está TRUNCADA — o revisor não pode julgar que viu tudo. Sem nowrap: em ecrã estreito
   preferimos que quebre a que force a toolbar a transbordar. */
.rev-cap[b-2lqdht8ha0] { font-size: 12px; color: var(--color-warn); }
.rev-empty[b-2lqdht8ha0] { display: flex; flex-direction: column; align-items: center; gap: 12px; color: var(--color-ink-section); }
.rev-empty-mark[b-2lqdht8ha0] { width: 44px; height: 44px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: 800; color: var(--color-data); background: rgba(63,214,196,.12); border: 1px solid rgba(63,214,196,.25); }
.rev-empty-mark-neutral[b-2lqdht8ha0] { color: var(--color-ink-section); background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); }
.rev-empty-msg[b-2lqdht8ha0] { font-size: 14px; }
.rev-op[b-2lqdht8ha0] { display: inline-flex; align-items: center; gap: 8px; }
.rev-op-name[b-2lqdht8ha0] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rev-badge[b-2lqdht8ha0] { padding: 2px 8px; border-radius: 10px; font-size: 11px; font-weight: 700; }
.rev-badge-pending[b-2lqdht8ha0] { background: rgba(244,183,64,.15); color: var(--color-warn); }
.rev-badge-approved[b-2lqdht8ha0] { background: rgba(63,214,196,.15); color: var(--color-data); }
.rev-badge-rejected[b-2lqdht8ha0] { background: rgba(255,255,255,.08); color: var(--color-ink-section); }
.rev-row-sel[b-2lqdht8ha0] { background: rgba(63,214,196,.10); }
@media (max-width: 900px) { .rev[b-2lqdht8ha0] { flex-direction: column; } .rev-map-pane[b-2lqdht8ha0] { border-left: none; border-top: 1px solid rgba(255,255,255,.08); min-height: 300px; } }
.rev-map[b-2lqdht8ha0] { position: absolute; inset: 0; }
.rev-map-hint[b-2lqdht8ha0] { position: absolute; left: 50%; bottom: 20px; transform: translateX(-50%); z-index: 10;
    background: var(--color-panel); border: 1px solid rgba(255,255,255,.12); color: var(--color-ink-dim);
    padding: 8px 14px; border-radius: 20px; font-size: 13px; box-shadow: 0 6px 20px rgba(0,0,0,.4); white-space: nowrap; }
.rev-actions[b-2lqdht8ha0] { position: absolute; left: 12px; right: 12px; bottom: 12px; z-index: 10; display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; background: var(--color-panel); border: 1px solid rgba(255,255,255,.08); border-radius: 8px; padding: 10px 12px; box-shadow: 0 8px 24px rgba(0,0,0,.4); }
.rev-actions-name[b-2lqdht8ha0] { font-size: 13px; color: var(--color-ink); }
.rev-actions-btns[b-2lqdht8ha0] { display: flex; gap: 8px; }
.rev-approve[b-2lqdht8ha0] { background: var(--color-cta); color: #fff; border: none; border-radius: 6px; padding: 8px 14px; font-weight: 700; cursor: pointer; }
.rev-reject[b-2lqdht8ha0] { background: transparent; color: var(--color-error); border: 1px solid rgba(255,90,95,.5); border-radius: 6px; padding: 8px 14px; font-weight: 700; cursor: pointer; }
.rev-approve:disabled[b-2lqdht8ha0], .rev-reject:disabled[b-2lqdht8ha0] { opacity: .5; cursor: default; }
.rev-err[b-2lqdht8ha0] { font-size: 12px; color: var(--color-error); }
.rev-afinar[b-2lqdht8ha0] { background: var(--color-field); color: var(--color-ink); border: 1px solid rgba(255,255,255,.18); border-radius: 6px; padding: 8px 14px; font-weight: 700; cursor: pointer; }
.rev-afinar:hover:not(:disabled)[b-2lqdht8ha0] { border-color: var(--color-data); }
.rev-afinar:disabled[b-2lqdht8ha0] { opacity: .5; cursor: default; }
.rev-afinar-hint[b-2lqdht8ha0] { font-size: 12px; color: var(--color-ink-dim); margin-right: 8px; }
/* /Components/Pages/Rotas.razor.rz.scp.css */
/* Layout full-bleed: o mapa enche a viewport, o cartão fica por cima (não numa coluna ao lado). */
.rotas[b-1yerge1dcm] {
    position: relative;
    height: 100%;
    width: 100%;
    overflow: hidden;
}

.rotas-map[b-1yerge1dcm] {
    position: absolute;
    inset: 0;
}

/* Cartão flutuante escuro — molde do Mass Viewer (sample/g10-viewer-mass.png). */
.rotas-panel[b-1yerge1dcm] {
    position: absolute;
    top: 16px;
    left: 16px;
    z-index: 10;
    box-sizing: border-box;
    width: 300px;
    max-height: calc(100% - 32px);
    overflow-y: auto;
    padding: 16px;
    background: var(--color-panel);
    border-radius: 8px;
    box-shadow: 0 10px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);
}

/* "Calcular rota" desce a subtítulo — a marca passa a ser o título visual. */
.rotas-panel h2[b-1yerge1dcm] {
    margin: 0 0 10px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}

.hint[b-1yerge1dcm] {
    margin: 0 0 14px;
    font-size: 12px;
    line-height: 1.4;
    color: var(--color-ink-dim);
}

.endpoint[b-1yerge1dcm] {
    position: relative;
    margin: 16px 0 14px;
}

.endpoint label[b-1yerge1dcm] {
    display: block;
    margin-bottom: 6px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}

.endpoint select[b-1yerge1dcm],
.endpoint input[b-1yerge1dcm] {
    display: block;
    box-sizing: border-box;
    width: 100%;
    height: 34px;
    margin-bottom: 6px;
    padding: 0 10px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 4px;
    color: var(--color-ink);
    font-size: 13px;
}

.endpoint select[b-1yerge1dcm] {
    appearance: none;
    padding-right: 28px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%237c8da0' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 10px center;
    background-size: 10px;
}

.endpoint select:focus[b-1yerge1dcm],
.endpoint input:focus[b-1yerge1dcm] {
    outline: none;
    border-color: var(--color-data);
}

.endpoint input[b-1yerge1dcm]::placeholder {
    color: var(--color-ink-dim);
}

.endpoint-trigger[b-1yerge1dcm] {
    display: block;
    box-sizing: border-box;
    width: 100%;
    height: 34px;
    padding: 0 10px;
    text-align: left;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 4px;
    color: var(--color-ink);
    font-size: 13px;
    cursor: pointer;
}
.endpoint-trigger:hover[b-1yerge1dcm] { border-color: var(--color-data); }
/* Sem província a cx fica esmaecida (por usar) mas CLICÁVEL — o clique mostra o balão de info
   (um botão `disabled` não receberia o clique). */
.endpoint-trigger.is-locked[b-1yerge1dcm] { color: var(--color-ink-dim); opacity: .7; }

/* Balão de info suave: FLUTUA por baixo da cx (position:absolute → fora do fluxo, NÃO desloca o
   layout — evita o "yo-yo"). Sobrepõe-se ao conteúdo abaixo; por isso fundo opaco + sombra. Desvanece
   sozinho (~4s). Ancorado ao .endpoint (que é position:relative). */
.lock-hint[b-1yerge1dcm] {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 30;
    margin-top: 4px;
    display: flex;
    align-items: flex-start;
    gap: 6px;
    padding: 7px 9px;
    background: var(--color-panel);
    border: 1px solid rgba(63, 214, 196, .45);
    border-radius: 6px;
    box-shadow: 0 8px 20px rgba(0, 0, 0, .45);
    color: var(--color-ink);
    font-size: 12px;
    line-height: 1.35;
    pointer-events: none;
    animation: lock-hint-fade-b-1yerge1dcm 4s ease forwards;
}
.lock-hint-ico[b-1yerge1dcm] { flex: none; color: var(--color-data); font-weight: 700; }
@keyframes lock-hint-fade-b-1yerge1dcm {
    0%   { opacity: 0; transform: translateY(-3px); }
    10%  { opacity: 1; transform: translateY(0); }
    75%  { opacity: 1; }
    100% { opacity: 0; transform: translateY(0); }
}

.calc-btn[b-1yerge1dcm] {
    display: block;
    width: 100%;
    margin-top: 4px;
    padding: 10px;
    background: var(--color-cta);
    color: #fff;
    border: none;
    border-radius: 6px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    transition: filter .15s ease;
}

.calc-btn:hover:not(:disabled)[b-1yerge1dcm] {
    filter: brightness(1.08);
}

.calc-btn:disabled[b-1yerge1dcm] {
    background: var(--color-field);
    color: var(--color-ink-dim);
    cursor: not-allowed;
    opacity: .7;
}

.calc-status[b-1yerge1dcm] {
    margin-top: 10px;
    font-size: 12px;
    color: var(--color-ink-dim);
}

.calc-error[b-1yerge1dcm] {
    margin-top: 10px;
    font-size: 12px;
    color: var(--color-error);
}

.routes[b-1yerge1dcm] {
    list-style: none;
    margin: 14px 0 0;
    padding: 0;
}

.routes li[b-1yerge1dcm] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 4px 16px;
    padding: 10px 12px;
    margin-bottom: 8px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .06);
    border-radius: 6px;
    cursor: pointer;
    transition: border-color .15s ease;
}

.routes li:hover[b-1yerge1dcm] {
    border-color: var(--color-data);
}

.routes li.sel[b-1yerge1dcm] {
    border-color: var(--color-data);
    box-shadow: inset 0 0 0 1px var(--color-data);
}

.routes li .rt[b-1yerge1dcm] {
    flex-basis: 100%;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}

.kpi[b-1yerge1dcm] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1 1 auto;
    min-width: 70px;
}

.kpi-value[b-1yerge1dcm] {
    font-size: 18px;
    font-weight: 700;
    line-height: 1.1;
    color: var(--color-ink);
}

.kpi-label[b-1yerge1dcm] {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}

.route-legend[b-1yerge1dcm] { margin: 10px 0 0; }
.route-legend-title[b-1yerge1dcm] { font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--color-ink-section); margin-bottom: 5px; }
.route-legend-bar[b-1yerge1dcm] { height: 8px; border-radius: 4px; background: linear-gradient(90deg, #a50026, #f46d43 25%, #fee08b 50%, #a6d96a 75%, #1a9850); }
.route-legend-scale[b-1yerge1dcm] { display: flex; justify-content: space-between; font-size: 10px; color: var(--color-ink-section); margin-top: 3px; }
.route-legend-unit[b-1yerge1dcm] { font-size: 10px; color: var(--color-ink-section); text-align: right; }

.gmaps-link[b-1yerge1dcm] {
    display: inline-block;
    margin-top: 8px;
    font-size: 12px;
    font-weight: 600;
    color: var(--color-data);
    text-decoration: none;
}

.gmaps-link:hover[b-1yerge1dcm] {
    text-decoration: underline;
}

/* --- Mobile: o cartão vira bottom sheet (peek/full). Desktop (>768px) fica intocado. --- */
.sheet-handle[b-1yerge1dcm],
.sheet-peek-label[b-1yerge1dcm] { display: none; }   /* só existem no layout móvel */

@media (max-width: 768px) {
    .rotas-panel[b-1yerge1dcm] {
        top: auto;
        bottom: 0;
        left: 0;
        right: 0;
        width: 100%;
        max-width: 100%;
        padding: 0 16px 16px;
        border-radius: 14px 14px 0 0;
        transition: max-height .25s ease;
    }
    .sheet-handle[b-1yerge1dcm] {
        display: block;
        position: sticky;
        top: 0;
        width: 100%;
        padding: 10px 0 8px;
        background: var(--color-panel);
        border: none;
        cursor: pointer;
    }
    .sheet-grip[b-1yerge1dcm] {
        display: block;
        width: 44px;
        height: 5px;
        margin: 0 auto;
        border-radius: 3px;
        background: rgba(255, 255, 255, .35);
    }
    /* PEEK: só a pega + o rótulo-resumo; tudo o resto colapsa. */
    .rotas-panel.is-peek[b-1yerge1dcm] {
        max-height: 88px;
        overflow: hidden;
    }
    .rotas-panel.is-peek > *:not(.sheet-handle):not(.sheet-peek-label)[b-1yerge1dcm] { display: none; }
    .rotas-panel.is-peek .sheet-peek-label[b-1yerge1dcm] {
        display: block;
        text-align: center;
        padding: 2px 0 12px;
        font-size: 14px;
        font-weight: 700;
        color: var(--color-ink);
        cursor: pointer;
    }
    /* FULL: form + resultados, scroll interno. */
    .rotas-panel.is-open[b-1yerge1dcm] {
        max-height: 85dvh;
        overflow-y: auto;
    }
    /* Levantar os controlos do MapLibre (zoom/legenda/basemap) acima do bottom sheet em peek. Os
       contentores de canto são DOM injetado por map.js DEPOIS do render → NÃO têm o atributo de scope
       do Blazor; por isso ::deep (aplica-se aos descendentes de .rotas, ignorando o scope). Em full a
       folha cobre-os (aceitável — o utilizador colapsa para ver o mapa). */
    .rotas[b-1yerge1dcm]  .maplibregl-ctrl-bottom-left,
    .rotas[b-1yerge1dcm]  .maplibregl-ctrl-bottom-right {
        bottom: 100px;
    }
}
/* /Components/PicadaEditor.razor.rz.scp.css */
/* Botão "Editar picadas" — molde do .calc-btn (Rotas.razor.css), num tom neutro (o CTA é "Calcular
   rota"). is-active só troca o texto ("Sair da edição"); o realce visual vem da mini-barra aparecer. */
.editor-toggle-btn[b-yzocbosnom] {
    display: block;
    width: 100%;
    margin: 0 0 14px;
    padding: 9px 10px;
    background: var(--color-field);
    color: var(--color-ink);
    border: 1px solid rgba(255, 255, 255, .12);
    border-radius: 6px;
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    transition: border-color .15s ease;
}
.editor-toggle-btn:hover[b-yzocbosnom] { border-color: var(--color-data); }
.editor-toggle-btn.is-active[b-yzocbosnom] { border-color: var(--color-data); }

.editor-toolbar[b-yzocbosnom] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 0 0 14px;
}

.editor-toolbar button[b-yzocbosnom] {
    flex: 1 1 auto;
    padding: 7px 8px;
    background: var(--color-field);
    color: var(--color-ink);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 5px;
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
}
.editor-toolbar button:hover[b-yzocbosnom] { border-color: var(--color-data); }

.editor-error[b-yzocbosnom] {
    margin: 0 0 14px;
    font-size: 12px;
    color: var(--color-error);
}

.editor-instruction[b-yzocbosnom] {
    margin: 0 0 10px;
    padding: 8px 10px;
    background: var(--color-panel);
    border-left: 3px solid var(--color-data);
    border-radius: 4px;
    font-size: 12px;
    line-height: 1.4;
    color: var(--color-ink);
}

.editor-resolving[b-yzocbosnom] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 10px;
    font-size: 12px;
    font-weight: 600;
    color: var(--color-data);
}
.editor-resolving-dot[b-yzocbosnom] {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: var(--color-data);
    animation: editor-pulse-b-yzocbosnom 1s ease-in-out infinite;
}
@keyframes editor-pulse-b-yzocbosnom {
    0%, 100% { transform: scale(1); opacity: 1; }
    50% { transform: scale(1.7); opacity: .4; }
}

.editor-primary-btn[b-yzocbosnom] {
    flex: 1 1 auto;
    padding: 9px 10px;
    background: var(--color-cta);
    color: #fff;
    border: none;
    border-radius: 5px;
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    transition: filter .15s ease;
}
.editor-primary-btn:hover[b-yzocbosnom] { filter: brightness(1.08); }

.editor-legend[b-yzocbosnom] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 12px;
    margin: 0 0 14px;
    font-size: 11px;
    color: var(--color-ink-section);
}
.editor-legend span[b-yzocbosnom] { display: inline-flex; align-items: center; gap: 5px; }
.editor-legend i[b-yzocbosnom] { width: 11px; height: 11px; border-radius: 50%; display: inline-block; }
.editor-legend i.lg-start[b-yzocbosnom] { background: #ffd54f; border: 2px solid #000; }
.editor-legend i.lg-vertex[b-yzocbosnom] { background: #ff5252; }
.editor-legend i.lg-ghost[b-yzocbosnom] { background: rgba(255, 213, 79, .4); border: 1px solid #ffd54f; }
.editor-legend i.lg-pending[b-yzocbosnom] { background: #ffb300; }
.editor-legend i.lg-approved[b-yzocbosnom] { background: #00e5ff; }
.editor-legend i.lg-rejected[b-yzocbosnom] { background: #9e9e9e; }

/* Lista lateral das picadas manuais (T6) — molde do .editor-toolbar (mesmas variáveis de cor), um
   cartão por picada com nome/id e as ações Editar/Apagar (ou o confirm inline/"Terminar edição"). */
.editor-picada-list[b-yzocbosnom] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin: 0 0 14px;
    max-height: 260px;
    overflow-y: auto;
}

.editor-list-empty[b-yzocbosnom] {
    margin: 0;
    font-size: 12px;
    color: var(--color-ink-section);
}

.editor-picada-item[b-yzocbosnom] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 8px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 5px;
}
.editor-picada-item.is-editing[b-yzocbosnom] { border-color: var(--color-data); }

.editor-picada-info[b-yzocbosnom] {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 8px;
    font-size: 12px;
}
.editor-picada-name[b-yzocbosnom] {
    font-weight: 700;
    color: var(--color-ink);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.editor-picada-id[b-yzocbosnom] { flex: 0 0 auto; color: var(--color-ink-section); }

/* Badge de estado (SP-C, T4) — cores 1:1 com a camada 'manual-picada' do map.js (pending/approved/
   rejected), p/ o utilizador ligar de imediato a cor da lista à cor do traço no mapa. */
.editor-picada-status[b-yzocbosnom] {
    flex: 0 0 auto;
    padding: 2px 7px;
    border: 1px solid transparent;
    border-radius: 10px;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
}
.editor-picada-status.is-pending[b-yzocbosnom] { color: #ffb300; border-color: #ffb30066; }
.editor-picada-status.is-approved[b-yzocbosnom] { color: #00e5ff; border-color: #00e5ff66; }
.editor-picada-status.is-rejected[b-yzocbosnom] { color: #9e9e9e; border-color: #9e9e9e66; }

.editor-picada-actions[b-yzocbosnom] { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }

.editor-picada-confirm-label[b-yzocbosnom] { font-size: 11px; color: var(--color-ink); }

.editor-list-btn[b-yzocbosnom] {
    flex: 1 1 auto;
    padding: 6px 8px;
    background: var(--color-panel);
    color: var(--color-ink);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
    cursor: pointer;
}
.editor-list-btn:hover[b-yzocbosnom] { border-color: var(--color-data); }
.editor-list-btn.is-danger[b-yzocbosnom] { color: var(--color-error); border-color: var(--color-error); }
.editor-list-btn.is-approve[b-yzocbosnom] { color: #00e5ff; border-color: #00e5ff; }
.editor-list-btn.is-reject[b-yzocbosnom] { color: #9e9e9e; border-color: #9e9e9e; }

/* Modal de nome (Guardar/Cancelar) — molde do .modal-backdrop/.modal-card (PoiPickerModal.razor.css);
   isolamento de CSS do Blazor é por componente, por isso repete-se aqui em vez de partilhar. */
.modal-backdrop[b-yzocbosnom] {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, .55);
}

.editor-name-card[b-yzocbosnom] {
    width: 360px;
    max-width: 90vw;
    box-sizing: border-box;
    background: var(--color-panel);
    border-radius: 10px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, .5);
    color: var(--color-ink);
    overflow: hidden;
}

.modal-head[b-yzocbosnom] {
    padding: 14px 18px;
    border-bottom: 1px solid rgba(255, 255, 255, .08);
}
.modal-head h3[b-yzocbosnom] { margin: 0; font-size: 16px; font-weight: 700; }

.editor-name-body[b-yzocbosnom] { padding: 16px 18px; }

.editor-name-body label[b-yzocbosnom] {
    display: block;
    margin-bottom: 6px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}

.editor-name-body input[b-yzocbosnom] {
    display: block;
    box-sizing: border-box;
    width: 100%;
    height: 34px;
    padding: 0 10px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 4px;
    color: var(--color-ink);
    font-size: 13px;
}
.editor-name-body input:focus[b-yzocbosnom] { outline: none; border-color: var(--color-data); }

.editor-name-actions[b-yzocbosnom] {
    display: flex;
    gap: 8px;
    margin-top: 16px;
}

.editor-btn-primary[b-yzocbosnom],
.editor-btn-secondary[b-yzocbosnom] {
    flex: 1 1 auto;
    padding: 10px;
    border: none;
    border-radius: 6px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    transition: filter .15s ease;
}

.editor-btn-primary[b-yzocbosnom] {
    background: var(--color-cta);
    color: #fff;
}
.editor-btn-primary:hover[b-yzocbosnom] { filter: brightness(1.08); }

.editor-btn-secondary[b-yzocbosnom] {
    background: var(--color-field);
    color: var(--color-ink);
}
.editor-btn-secondary:hover[b-yzocbosnom] { filter: brightness(1.1); }
/* /Components/PoiPickerModal.razor.rz.scp.css */
.modal-backdrop[b-2p0mg5qpea] {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, .55);
}

.modal-card[b-2p0mg5qpea] {
    display: flex;
    flex-direction: column;
    width: 90vw;
    height: 90vh;
    box-sizing: border-box;
    background: var(--color-panel);
    border-radius: 10px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, .5);
    color: var(--color-ink);
    outline: none;
    overflow: hidden;
}

.modal-head[b-2p0mg5qpea] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 18px;
    border-bottom: 1px solid rgba(255, 255, 255, .08);
}

.modal-head h3[b-2p0mg5qpea] { margin: 0; font-size: 16px; font-weight: 700; }

.modal-close[b-2p0mg5qpea] {
    background: none; border: none; color: var(--color-ink-dim);
    font-size: 24px; line-height: 1; cursor: pointer;
}
.modal-close:hover[b-2p0mg5qpea] { color: var(--color-ink); }

.modal-tools[b-2p0mg5qpea] {
    display: flex; align-items: center; gap: 12px;
    padding: 12px 18px; border-bottom: 1px solid rgba(255, 255, 255, .08);
}

.modal-search[b-2p0mg5qpea] {
    flex: 1 1 260px; max-width: 360px; height: 34px; box-sizing: border-box;
    padding: 0 10px; background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1); border-radius: 6px; color: var(--color-ink);
}
.modal-search:focus[b-2p0mg5qpea] { outline: none; border-color: var(--color-data); }

.chips[b-2p0mg5qpea] { display: flex; gap: 6px; }
.chip[b-2p0mg5qpea] {
    padding: 5px 12px; background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1); border-radius: 999px;
    color: var(--color-ink-dim); font-size: 12px; font-weight: 600; cursor: pointer;
}
.chip.active[b-2p0mg5qpea] { background: var(--color-data); color: #06231f; border-color: var(--color-data); }

.count[b-2p0mg5qpea] { margin-left: auto; font-size: 12px; color: var(--color-ink-dim); }

.modal-table[b-2p0mg5qpea] { flex: 1 1 auto; overflow: auto; }

/* --- Mobile: o modal do picker passa a ecrã cheio (pesquisa fixa no topo, lista a rolar). --- */
@media (max-width: 768px) {
    .modal-backdrop[b-2p0mg5qpea] { align-items: stretch; justify-content: stretch; }
    .modal-card[b-2p0mg5qpea] {
        width: 100vw;
        height: 100dvh;
        border-radius: 0;
    }
    .modal-head[b-2p0mg5qpea] { padding: 12px 14px; }
    .modal-head h3[b-2p0mg5qpea] { font-size: 15px; }
    .modal-close[b-2p0mg5qpea] { font-size: 30px; padding: 4px 8px; }   /* alvo de toque maior */
    .modal-tools[b-2p0mg5qpea] { flex-wrap: wrap; gap: 8px; padding: 10px 14px; }
    .modal-search[b-2p0mg5qpea] { flex: 1 1 100%; max-width: none; height: 40px; }
    .count[b-2p0mg5qpea] { margin-left: 0; }
}
/* /Components/PoiSettings.razor.rz.scp.css */
.um-pois[b-zbjtriis4v] { margin: 2px 0 6px; }

.um-section[b-zbjtriis4v] {
    margin: 6px 4px 4px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}

.um-poi-row[b-zbjtriis4v] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 5px 8px;
    font-size: 13px;
    color: var(--color-ink);
    cursor: pointer;
}
.um-poi-row input[b-zbjtriis4v] {
    accent-color: var(--color-data);
    cursor: pointer;
}

.um-poi-children[b-zbjtriis4v] {
    margin: 2px 0 0 12px;
    padding-left: 6px;
    border-left: 1px solid rgba(255, 255, 255, .1);
}

/* filho desativado quando o pai está OFF */
.um-poi-row.is-disabled[b-zbjtriis4v] {
    color: var(--color-ink-dim);
    opacity: .55;
    cursor: default;
}
.um-poi-row.is-disabled input[b-zbjtriis4v] { cursor: default; }
/* /Components/ScheduleConfigModal.razor.rz.scp.css */
/* Tokens --color-* (paleta escura, Styles/app.tailwind.css) — replica o AboutModal.razor.css (mesmos tokens,
   mesmo z-index) por causa do isolamento por componente; o resto é específico do modal. */
.modal-backdrop[b-6a4ei44agd] { position: fixed; inset: 0; background: rgba(0,0,0,.55); display: flex;
    align-items: center; justify-content: center; z-index: 1000; }
.modal-card[b-6a4ei44agd] { background: var(--color-panel); color: var(--color-ink); border-radius: 10px;
    box-shadow: 0 20px 60px rgba(0,0,0,.5); width: min(560px, 92vw); max-height: 88vh; overflow: auto; box-sizing: border-box; }
.sched-card[b-6a4ei44agd] { width: min(560px, 92vw); }
.modal-head[b-6a4ei44agd] { display: flex; align-items: center; justify-content: space-between;
    padding: 14px 18px; border-bottom: 1px solid rgba(255,255,255,.08); }
.modal-head h3[b-6a4ei44agd] { margin: 0; font-size: 16px; font-weight: 700; color: var(--color-ink); }
.modal-close[b-6a4ei44agd] { background: none; border: 0; font-size: 24px; line-height: 1; cursor: pointer; color: var(--color-ink-dim); }
.modal-close:hover[b-6a4ei44agd] { color: var(--color-ink); }
.modal-body[b-6a4ei44agd] { padding: 16px 18px; display: flex; flex-direction: column; gap: 14px; color: var(--color-ink-dim); }
.sched-toggle[b-6a4ei44agd] { display: flex; align-items: center; gap: 8px; font-weight: 600; color: var(--color-ink); }
.sched-field[b-6a4ei44agd] { display: flex; flex-direction: column; gap: 6px; }
.sched-field > span[b-6a4ei44agd] { font-size: .85em; color: var(--color-ink-dim); }
.sched-field select[b-6a4ei44agd] { padding: 6px 8px; border: 1px solid rgba(255,255,255,.12); border-radius: 6px; font: inherit;
    background: var(--color-field); color: var(--color-ink); }
.sched-next[b-6a4ei44agd] { display: flex; flex-direction: column; gap: 4px; }
.sched-next > span[b-6a4ei44agd] { font-size: .85em; color: var(--color-ink-dim); }
.sched-next ul[b-6a4ei44agd] { margin: 0; padding-left: 18px; font-family: ui-monospace, monospace; font-size: .9em; color: var(--color-ink); }
.sched-status[b-6a4ei44agd] { display: flex; flex-direction: column; gap: 4px; border-top: 1px solid rgba(255,255,255,.08); padding-top: 10px; }
.sched-status > div[b-6a4ei44agd] { display: flex; justify-content: space-between; font-size: .9em; }
.sched-status span[b-6a4ei44agd] { color: var(--color-ink-dim); }
.sched-status b[b-6a4ei44agd] { color: var(--color-ink); }
.sched-error[b-6a4ei44agd] { color: var(--color-error); font-size: .9em; margin: 0; }
.sched-ok[b-6a4ei44agd] { color: var(--color-data); font-size: .9em; margin: 0; }
.sched-actions[b-6a4ei44agd] { display: flex; gap: 10px; margin-top: 4px; }
.sched-actions button[b-6a4ei44agd] { padding: 8px 14px; border-radius: 6px; border: 1px solid transparent; cursor: pointer; font: inherit; }
.sched-actions button:disabled[b-6a4ei44agd] { opacity: .6; cursor: default; }
.b-primary[b-6a4ei44agd] { background: var(--color-cta); color: #fff; }
.b-secondary[b-6a4ei44agd] { background: transparent; color: var(--color-ink); border-color: rgba(255,255,255,.18); }
.sched-badge[b-6a4ei44agd] { display: inline-block; margin-left: 8px; padding: 1px 8px; border-radius: 999px;
    font-size: .78em; font-weight: 600; vertical-align: middle; }
.sched-badge.ok[b-6a4ei44agd]    { background: rgba(16,124,65,.18);  color: var(--color-cta); }
.sched-badge.err[b-6a4ei44agd]   { background: rgba(255,90,95,.18);  color: var(--color-error); }
.sched-badge.warn[b-6a4ei44agd]  { background: rgba(244,183,64,.18); color: var(--color-warn); }
.sched-badge.muted[b-6a4ei44agd] { background: rgba(255,255,255,.08); color: var(--color-ink-dim); }
.sched-history-link[b-6a4ei44agd] { color: var(--color-data); font-size: .9em; text-decoration: underline; align-self: flex-start; }
/* /Components/ScheduleHistoryModal.razor.rz.scp.css */
.modal-backdrop[b-aibrnhim7w] { position: fixed; inset: 0; background: rgba(0,0,0,.55); display: flex;
    align-items: center; justify-content: center; z-index: 1100; }
.modal-card[b-aibrnhim7w] { background: var(--color-panel); color: var(--color-ink); border-radius: 10px;
    box-shadow: 0 20px 60px rgba(0,0,0,.5); box-sizing: border-box; }
.hist-card[b-aibrnhim7w] { width: min(820px, 94vw); max-height: 88vh; overflow: hidden; display: flex; flex-direction: column; }
.modal-head[b-aibrnhim7w] { display: flex; align-items: center; justify-content: space-between;
    padding: 14px 18px; border-bottom: 1px solid rgba(255,255,255,.08); }
.modal-head h3[b-aibrnhim7w] { margin: 0; font-size: 16px; font-weight: 700; color: var(--color-ink); }
.modal-close[b-aibrnhim7w] { background: none; border: 0; font-size: 24px; line-height: 1; cursor: pointer; color: var(--color-ink-dim); }
.modal-close:hover[b-aibrnhim7w] { color: var(--color-ink); }
.modal-body[b-aibrnhim7w] { padding: 12px 14px; overflow: auto; }
/* /Components/UserAvatar.razor.rz.scp.css */
.user-avatar[b-7024naymgq] {
    display: inline-flex; align-items: center; justify-content: center;
    width: 24px; height: 24px; border-radius: 50%; flex: 0 0 auto; object-fit: cover;
    background: var(--color-field); vertical-align: middle;
}
.user-avatar-txt[b-7024naymgq] {
    font-size: 10px; font-weight: 700; color: var(--color-ink);
    border: 1px solid rgba(255, 255, 255, .12);
}
/* /Components/UserMenu.razor.rz.scp.css */
/* Agora hospedado como filho normal na barra de topo partilhada (MainLayout) — deixou de ser overlay
   absoluto sobre o mapa. O .um-panel mantém-se position:absolute, ancorado a este .usermenu. */
.usermenu[b-ij1qglx3jg] { position: relative; }

/* Anónimo: botão Entrar (sem dropdown — só uma ação). */
.um-enter[b-ij1qglx3jg] {
    display: inline-block;
    padding: 8px 16px;
    background: var(--color-cta);
    color: #fff;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 700;
    text-decoration: none;
    box-shadow: 0 4px 14px rgba(0, 0, 0, .35);
    transition: filter .15s ease;
}
.um-enter:hover[b-ij1qglx3jg] { filter: brightness(1.08); }

/* Guest: engrenagem de definições (abre o painel dos POIs) + Entrar, lado a lado. */
.um-anon[b-ij1qglx3jg] { display: flex; align-items: center; gap: 8px; }
.um-gear-btn[b-ij1qglx3jg] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    padding: 0;
    background: var(--color-panel);
    border: 1px solid rgba(255, 255, 255, .12);
    border-radius: 50%;
    color: var(--color-ink-dim);
    font-size: 17px;
    line-height: 1;
    cursor: pointer;
    box-shadow: 0 4px 14px rgba(0, 0, 0, .35);
    transition: color .15s ease, border-color .15s ease;
}
.um-gear-btn:hover[b-ij1qglx3jg] { color: var(--color-data); border-color: var(--color-data); }

/* Autenticado: avatar circular (inicial do nome) que abre o painel. */
.um-avatar-btn[b-ij1qglx3jg] {
    display: block;
    padding: 0;
    border: none;
    background: none;
    cursor: pointer;
}

.um-avatar[b-ij1qglx3jg] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: var(--color-data);
    color: var(--color-field);
    font-size: 16px;
    font-weight: 800;
    box-shadow: 0 4px 14px rgba(0, 0, 0, .35);
}
.um-avatar-btn:hover .um-avatar[b-ij1qglx3jg] { filter: brightness(1.08); }

/* Avatar Google: a foto preenche o círculo (reusa tamanho/raio do .um-avatar). */
.um-avatar-img[b-ij1qglx3jg] { object-fit: cover; padding: 0; background: var(--color-field); }

/* Painel (dropdown) — cartão escuro, mesma linguagem do painel de rotas. */
.um-panel[b-ij1qglx3jg] {
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    min-width: 200px;
    box-sizing: border-box;
    padding: 12px;
    background: var(--color-panel);
    border: 1px solid rgba(255, 255, 255, .08);
    border-radius: 8px;
    box-shadow: 0 12px 30px rgba(0, 0, 0, .5);
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.um-head[b-ij1qglx3jg] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 0 4px 8px;
    margin-bottom: 6px;
    border-bottom: 1px solid rgba(255, 255, 255, .08);
}
.um-user[b-ij1qglx3jg] {
    font-size: 14px;
    font-weight: 700;
    color: var(--color-ink);
    word-break: break-all;
}
.um-role[b-ij1qglx3jg] {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--color-data);
}

.um-section[b-ij1qglx3jg] {
    margin: 8px 4px 2px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--color-ink-section);
}

.um-link[b-ij1qglx3jg] {
    display: block;
    padding: 7px 8px;
    border-radius: 5px;
    font-size: 13px;
    color: var(--color-ink);
    text-decoration: none;
}
.um-link:hover[b-ij1qglx3jg] { background: rgba(63, 214, 196, .12); }

.um-logout[b-ij1qglx3jg] {
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid rgba(255, 255, 255, .08);
}
.um-logout button[b-ij1qglx3jg] {
    width: 100%;
    padding: 8px;
    background: var(--color-field);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: 5px;
    color: var(--color-ink-dim);
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: color .15s ease, border-color .15s ease;
}
.um-logout button:hover[b-ij1qglx3jg] {
    color: var(--color-error);
    border-color: rgba(255, 90, 95, .5);
}

/* --- Mobile: o painel do menu abre largo e preso às margens (não transborda em 360px). --- */
@media (max-width: 768px) {
    .um-panel[b-ij1qglx3jg] {
        position: fixed;
        top: 64px;
        right: 12px;
        left: 12px;
        min-width: 0;
        max-height: calc(100dvh - 80px);
        overflow-y: auto;
    }
    .um-link[b-ij1qglx3jg] { padding: 11px 10px; }        /* alvos ≥44px */
    .um-logout button[b-ij1qglx3jg] { padding: 12px; }
}
